[Player-cvs] kit/android PlayerDriver.cpp, 1.15, 1.16 advisesink.cpp, 1.3, 1.4 advisesink.h, 1.3, 1.4 clientcontext.cpp, 1.3, 1.4 clientcontext.h, 1.2, 1.3

[Player-cvs] kit/android PlayerDriver.cpp, 1.15, 1.16 advisesink.cpp, 1.3, 1.4 advisesink.h, 1.3, 1.4 clientcontext.cpp, 1.3, 1.4 clientcontext.h, 1.2, 1.3

qluo at helixcommunity.org qluo at helixcommunity.org
Tue Mar 3 06:47:46 PST 2009


Update of /cvsroot/player/kit/android
In directory cvs01.internal.helixcommunity.org:/tmp/cvs-serv7948

Modified Files:
	PlayerDriver.cpp advisesink.cpp advisesink.h clientcontext.cpp 
	clientcontext.h 
Log Message:
player state fix to make pause after seeking work. CR: sfu at real.com


Index: PlayerDriver.cpp
===================================================================
RCS file: /cvsroot/player/kit/android/PlayerDriver.cpp,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -d -r1.15 -r1.16
--- PlayerDriver.cpp	25 Feb 2009 23:39:13 -0000	1.15
+++ PlayerDriver.cpp	3 Mar 2009 14:47:44 -0000	1.16
@@ -163,7 +163,6 @@
     status_t                    handleReset(PlayerReset* ec);
     status_t                    handleQuit(PlayerQuit* ec);
     status_t                    handleGetPosition(PlayerGetPosition* ec);
-    status_t                    handleGetStatus(PlayerGetStatus* ec);
 
 private:
 
@@ -420,10 +419,6 @@
             ret = handleGetPosition(static_cast<PlayerGetPosition*>(ec));
             break;
 
-        case PlayerCommand::PLAYER_GET_STATUS:
-            ret = handleGetStatus(static_cast<PlayerGetStatus*>(ec));
-            break;
-
         case PlayerCommand::PLAYER_RESET:
             ret = handleReset(static_cast<PlayerReset*>(ec));
             break;
@@ -592,48 +587,6 @@
     return OK;
 }
 
-status_t PlayerDriver::handleGetStatus(PlayerGetStatus* ec)
-{
-    LOGD("PlayerDriver::handleGetStatus");
-
-    EHXClientState eHXPlayerState;
-    media_player_states eAndroidPlayerState;
-
-    eHXPlayerState = (EHXClientState)m_pClientState->GetState();
-    LOGD("m_pClientState->GetState() = %d", eHXPlayerState);
-
-    switch (eHXPlayerState)
-    {
-	case HX_CLIENT_STATE_READY:
-	case HX_CLIENT_STATE_CONNECTING:
-	case HX_CLIENT_STATE_CONNECTED:
-	case HX_CLIENT_STATE_OPENING:
-	    eAndroidPlayerState = MEDIA_PLAYER_IDLE;
-	    break;
-	case HX_CLIENT_STATE_OPENED:
-	    eAndroidPlayerState = MEDIA_PLAYER_INITIALIZED;
-	    break;
-	case HX_CLIENT_STATE_PREFETCHING:
-	    eAndroidPlayerState = MEDIA_PLAYER_PREPARING;
-	    break;
-	case HX_CLIENT_STATE_PREFETCHED:
-	    eAndroidPlayerState = MEDIA_PLAYER_PREPARED;
-	    break;
-	case HX_CLIENT_STATE_PLAYING:
-	    eAndroidPlayerState = MEDIA_PLAYER_STARTED;
-	    break;
-	case HX_CLIENT_STATE_PAUSED:
-	    eAndroidPlayerState = MEDIA_PLAYER_PAUSED;
-	    break;
-	case HX_CLIENT_STATE_SEEKING:
-	    eAndroidPlayerState = MEDIA_PLAYER_INITIALIZED;
-	    break;
-    }
-
-    ec->set(eAndroidPlayerState);
-    return OK;
-}
-
 status_t PlayerDriver::handleReset(PlayerReset* ec)
 {
     LOGV("handleReset");
@@ -1061,6 +1014,7 @@
     : m_Init(NO_INIT)
     , m_Duration(-1)
     , m_nMyFD(-1)
+    , m_bIsPlaying(false)
 {
     LOGI("HelixPlayer constructor");
     m_PlayerDriver = new PlayerDriver(this);
@@ -1193,6 +1147,7 @@
 status_t HelixPlayer::start()
 {
     LOGV("start");
+    m_bIsPlaying = true;
     return m_PlayerDriver->enqueueCommand(new PlayerStart(0,0));
 }
 
@@ -1210,12 +1165,7 @@
 
 bool HelixPlayer::isPlaying()
 {
-    int status = 0;
-    if (m_PlayerDriver->enqueueCommand(new PlayerGetStatus(&status,0,0)) == NO_ERROR)
-    {
-        return (status == MEDIA_PLAYER_STARTED);
-    }
-    return false;
+    return m_bIsPlaying;
 }
 
 status_t HelixPlayer::getVideoWidth(int *w)
@@ -1274,4 +1224,20 @@
     MediaPlayerBase::sendEvent(msg, ext1, ext2);
 }
 
+void HelixPlayer::setPlayerState(media_player_states state)
+{
+    m_eState = state;
+    // set m_bIsPlaying flag
+    if (m_bIsPlaying == false && m_eState == MEDIA_PLAYER_STARTED)
+    {
+	m_bIsPlaying = true;
+    }
+    else if (m_eState == MEDIA_PLAYER_PAUSED ||
+	     m_eState == MEDIA_PLAYER_STOPPED ||
+	     m_eState == MEDIA_PLAYER_PLAYBACK_COMPLETE)
+    {
+	m_bIsPlaying = false;
+    }
+}
+
 }; // namespace android

Index: clientcontext.cpp
===================================================================
RCS file: /cvsroot/player/kit/android/clientcontext.cpp,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- clientcontext.cpp	25 Feb 2009 00:09:41 -0000	1.3
+++ clientcontext.cpp	3 Mar 2009 14:47:44 -0000	1.4
@@ -288,3 +288,8 @@
     LOGD("AndroidClientContext::SetDuration(%d)", duration);
     m_pMediaPlayer->setDuration(duration);
 }
+
+void AndroidClientContext::SetPlayerState(media_player_states state)
+{
+    m_pMediaPlayer->setPlayerState(state);
+}

Index: advisesink.h
===================================================================
RCS file: /cvsroot/player/kit/android/advisesink.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- advisesink.h	25 Feb 2009 00:09:41 -0000	1.3
+++ advisesink.h	3 Mar 2009 14:47:44 -0000	1.4
@@ -112,6 +112,7 @@
 
     void                                GetClipInfo();
     void                                SendClipProperties(IHXValues* pHeader);
+    void                                TranslateToAndroidState(UINT16 uState);
 	
     LONG32                              m_lRefCount;
     IUnknown*                           m_pUnknown;

Index: advisesink.cpp
===================================================================
RCS file: /cvsroot/player/kit/android/advisesink.cpp,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- advisesink.cpp	25 Feb 2009 00:09:41 -0000	1.3
+++ advisesink.cpp	3 Mar 2009 14:47:44 -0000	1.4
@@ -194,6 +194,7 @@
     LOGD("AndroidClientAdviseSink::OnPresentationClose");
     if(m_bOpened)
     {
+	m_pAndroidContext->SetPlayerState(MEDIA_PLAYER_PLAYBACK_COMPLETE);
         m_pAndroidContext->SendEvent(android::MEDIA_PLAYBACK_COMPLETE);
         m_bOpened = FALSE;
     }
@@ -218,6 +219,7 @@
 
 STDMETHODIMP AndroidClientAdviseSink::OnStop(void)
 {
+    m_pAndroidContext->SetPlayerState(MEDIA_PLAYER_STOPPED);
     return HXR_OK;
 }
 
@@ -248,6 +250,10 @@
 STDMETHODIMP AndroidClientAdviseSink::OnStateChange(UINT16 uOldState, UINT16 uNewState)
 {
     LOGD("AndroidClientAdviseSink::OnStateChanged %d->%d", uOldState, uNewState);
+    
+    // make new state available to the android MediaPlayer
+    TranslateToAndroidState(uNewState);
+    
     //XXXctb Something is wrong with android's state machine, so ensure that we are only
     // sending one 'onPrepared' message.
     if (uNewState == HX_CLIENT_STATE_PREFETCHED && !m_bPrepared) 
@@ -393,3 +399,41 @@
 {
     return HXR_OK;
 }
+
+void AndroidClientAdviseSink::TranslateToAndroidState(UINT16 uState)
+{    
+    media_player_states eAndroidPlayerState = MEDIA_PLAYER_STATE_ERROR;
+    
+    switch (uState)
+    {
+	case HX_CLIENT_STATE_READY:
+	case HX_CLIENT_STATE_CONNECTING:
+	case HX_CLIENT_STATE_CONNECTED:
+	case HX_CLIENT_STATE_OPENING:
+	    eAndroidPlayerState = MEDIA_PLAYER_IDLE;
+	    break;
+	case HX_CLIENT_STATE_OPENED:
+	    eAndroidPlayerState = MEDIA_PLAYER_INITIALIZED;
+	    break;
+	case HX_CLIENT_STATE_PREFETCHING:
+	    eAndroidPlayerState = MEDIA_PLAYER_PREPARING;
+	    break;
+	case HX_CLIENT_STATE_PREFETCHED:
+	    eAndroidPlayerState = MEDIA_PLAYER_PREPARED;
+	    break;
+	case HX_CLIENT_STATE_PLAYING:
+	    eAndroidPlayerState = MEDIA_PLAYER_STARTED;
+	    break;
+	case HX_CLIENT_STATE_PAUSED:
+	    eAndroidPlayerState = MEDIA_PLAYER_PAUSED;
+	    break;
+	case HX_CLIENT_STATE_SEEKING:
+	    // no change
+	    break;
+    }
+
+    if (eAndroidPlayerState != MEDIA_PLAYER_STATE_ERROR)
+    {
+	m_pAndroidContext->SetPlayerState(eAndroidPlayerState);
+    }  
+}

Index: clientcontext.h
===================================================================
RCS file: /cvsroot/player/kit/android/clientcontext.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- clientcontext.h	25 Feb 2009 00:09:41 -0000	1.2
+++ clientcontext.h	3 Mar 2009 14:47:44 -0000	1.3
@@ -85,6 +85,8 @@
     void                                SetVideoWidth(int width);
     void                                SetVideoHeight(int height);
     void                                SetDuration(int duration);
+    void                                SetPlayerState(media_player_states state);
+
     /*
      * IUnknown methods
      */




More information about the Player-cvs mailing list
 

Site Map   |   Terms of Use   |   Privacy Policy   |   Contact Us

Copyright © 1995-2007 RealNetworks, Inc. All rights reserved. RealNetworks and Helix are trademarks of RealNetworks.
All other trademarks or registered trademarks are the property of their respective holders.