Loading include/media/stagefright/LPAPlayer.h +1 −0 Original line number Diff line number Diff line Loading @@ -270,6 +270,7 @@ private: bool mSeeking; bool mInternalSeeking; bool mReachedEOS; bool mReachedOutputEOS; status_t mFinalStatus; int64_t mSeekTimeUs; int64_t mPauseTime; Loading media/libstagefright/LPAPlayerALSA.cpp +12 −3 Original line number Diff line number Diff line Loading @@ -81,6 +81,7 @@ mNumA2DPBytesPlayed(0), mSeeking(false), mInternalSeeking(false), mReachedEOS(false), mReachedOutputEOS(false), mFinalStatus(OK), mStarted(false), mIsFirstBuffer(false), Loading Loading @@ -304,6 +305,7 @@ void LPAPlayer::handleA2DPSwitch() { mInternalSeeking = true; mNumA2DPBytesPlayed = 0; mReachedEOS = false; mReachedOutputEOS = false; pthread_cond_signal(&a2dp_notification_cv); } else { if (isPaused) Loading Loading @@ -485,6 +487,7 @@ status_t LPAPlayer::seekTo(int64_t time_us) { LOGV("seekTo: time_us %ld", time_us); if ( mReachedEOS ) { mReachedEOS = false; mReachedOutputEOS = false; } mSeeking = true; Loading Loading @@ -767,6 +770,7 @@ void LPAPlayer::reset() { mSeeking = false; mInternalSeeking = false; mReachedEOS = false; mReachedOutputEOS = false; mFinalStatus = OK; mStarted = false; } Loading @@ -779,10 +783,9 @@ bool LPAPlayer::isSeeking() { bool LPAPlayer::reachedEOS(status_t *finalStatus) { *finalStatus = OK; Mutex::Autolock autoLock(mLock); *finalStatus = mFinalStatus; return mReachedEOS; return mReachedOutputEOS; } Loading Loading @@ -872,6 +875,7 @@ void LPAPlayer::decoderThreadEntry() { all input buffers have been decoded and response queue is empty*/ if(mObserver && mReachedEOS && memBuffersResponseQueue.empty()) { LOGV("Posting EOS event..zero byte buffer and response queue is empty"); mReachedOutputEOS = true; mObserver->postAudioEOS(); } continue; Loading Loading @@ -1006,6 +1010,7 @@ void LPAPlayer::eventThreadEntry() { LOGV("Timeout %d: Posting EOS event to AwesomePlayer",timeout); isPaused = true; mPauseTime = mSeekTimeUs + getTimeStamp(A2DP_DISABLED); mReachedOutputEOS = true; mObserver->postAudioEOS(); audioEOSPosted = true; timeout = -1; Loading Loading @@ -1082,7 +1087,8 @@ void LPAPlayer::A2DPThreadEntry() { //TODO: Remove this pthread_mutex_lock(&mem_response_mutex); if (memBuffersResponseQueue.empty() || !mAudioSinkOpen || isPaused || !bIsA2DPEnabled) { if (memBuffersResponseQueue.empty() || !mAudioSinkOpen || isPaused || !bIsA2DPEnabled || mReachedOutputEOS) { LOGV("A2DPThreadEntry:: responseQ empty %d mAudioSinkOpen %d isPaused %d bIsA2DPEnabled %d", memBuffersResponseQueue.empty(), mAudioSinkOpen, isPaused, bIsA2DPEnabled); LOGV("A2DPThreadEntry:: Waiting on a2dp_cv"); Loading Loading @@ -1154,6 +1160,7 @@ void LPAPlayer::A2DPThreadEntry() { } if (mObserver && !asyncReset && mReachedEOS && memBuffersResponseQueue.empty()) { LOGV("Posting EOS event to AwesomePlayer"); mReachedOutputEOS = true; mObserver->postAudioEOS(); } pthread_mutex_lock(&mem_request_mutex); Loading Loading @@ -1320,6 +1327,7 @@ void LPAPlayer::A2DPNotificationThreadEntry() { else { mInternalSeeking = true; mReachedEOS = false; mReachedOutputEOS = false; mSeekTimeUs += getTimeStamp(A2DP_DISCONNECT); mNumA2DPBytesPlayed = 0; pthread_cond_signal(&a2dp_cv); Loading Loading @@ -1702,6 +1710,7 @@ void LPAPlayer::onPauseTimeOut() { // 1.) Set seek flags mInternalSeeking = true; mReachedEOS = false; mReachedOutputEOS = false; mSeekTimeUs += getTimeStamp(A2DP_DISABLED); // 2.) Flush the buffers and transfer everything to request queue Loading Loading
include/media/stagefright/LPAPlayer.h +1 −0 Original line number Diff line number Diff line Loading @@ -270,6 +270,7 @@ private: bool mSeeking; bool mInternalSeeking; bool mReachedEOS; bool mReachedOutputEOS; status_t mFinalStatus; int64_t mSeekTimeUs; int64_t mPauseTime; Loading
media/libstagefright/LPAPlayerALSA.cpp +12 −3 Original line number Diff line number Diff line Loading @@ -81,6 +81,7 @@ mNumA2DPBytesPlayed(0), mSeeking(false), mInternalSeeking(false), mReachedEOS(false), mReachedOutputEOS(false), mFinalStatus(OK), mStarted(false), mIsFirstBuffer(false), Loading Loading @@ -304,6 +305,7 @@ void LPAPlayer::handleA2DPSwitch() { mInternalSeeking = true; mNumA2DPBytesPlayed = 0; mReachedEOS = false; mReachedOutputEOS = false; pthread_cond_signal(&a2dp_notification_cv); } else { if (isPaused) Loading Loading @@ -485,6 +487,7 @@ status_t LPAPlayer::seekTo(int64_t time_us) { LOGV("seekTo: time_us %ld", time_us); if ( mReachedEOS ) { mReachedEOS = false; mReachedOutputEOS = false; } mSeeking = true; Loading Loading @@ -767,6 +770,7 @@ void LPAPlayer::reset() { mSeeking = false; mInternalSeeking = false; mReachedEOS = false; mReachedOutputEOS = false; mFinalStatus = OK; mStarted = false; } Loading @@ -779,10 +783,9 @@ bool LPAPlayer::isSeeking() { bool LPAPlayer::reachedEOS(status_t *finalStatus) { *finalStatus = OK; Mutex::Autolock autoLock(mLock); *finalStatus = mFinalStatus; return mReachedEOS; return mReachedOutputEOS; } Loading Loading @@ -872,6 +875,7 @@ void LPAPlayer::decoderThreadEntry() { all input buffers have been decoded and response queue is empty*/ if(mObserver && mReachedEOS && memBuffersResponseQueue.empty()) { LOGV("Posting EOS event..zero byte buffer and response queue is empty"); mReachedOutputEOS = true; mObserver->postAudioEOS(); } continue; Loading Loading @@ -1006,6 +1010,7 @@ void LPAPlayer::eventThreadEntry() { LOGV("Timeout %d: Posting EOS event to AwesomePlayer",timeout); isPaused = true; mPauseTime = mSeekTimeUs + getTimeStamp(A2DP_DISABLED); mReachedOutputEOS = true; mObserver->postAudioEOS(); audioEOSPosted = true; timeout = -1; Loading Loading @@ -1082,7 +1087,8 @@ void LPAPlayer::A2DPThreadEntry() { //TODO: Remove this pthread_mutex_lock(&mem_response_mutex); if (memBuffersResponseQueue.empty() || !mAudioSinkOpen || isPaused || !bIsA2DPEnabled) { if (memBuffersResponseQueue.empty() || !mAudioSinkOpen || isPaused || !bIsA2DPEnabled || mReachedOutputEOS) { LOGV("A2DPThreadEntry:: responseQ empty %d mAudioSinkOpen %d isPaused %d bIsA2DPEnabled %d", memBuffersResponseQueue.empty(), mAudioSinkOpen, isPaused, bIsA2DPEnabled); LOGV("A2DPThreadEntry:: Waiting on a2dp_cv"); Loading Loading @@ -1154,6 +1160,7 @@ void LPAPlayer::A2DPThreadEntry() { } if (mObserver && !asyncReset && mReachedEOS && memBuffersResponseQueue.empty()) { LOGV("Posting EOS event to AwesomePlayer"); mReachedOutputEOS = true; mObserver->postAudioEOS(); } pthread_mutex_lock(&mem_request_mutex); Loading Loading @@ -1320,6 +1327,7 @@ void LPAPlayer::A2DPNotificationThreadEntry() { else { mInternalSeeking = true; mReachedEOS = false; mReachedOutputEOS = false; mSeekTimeUs += getTimeStamp(A2DP_DISCONNECT); mNumA2DPBytesPlayed = 0; pthread_cond_signal(&a2dp_cv); Loading Loading @@ -1702,6 +1710,7 @@ void LPAPlayer::onPauseTimeOut() { // 1.) Set seek flags mInternalSeeking = true; mReachedEOS = false; mReachedOutputEOS = false; mSeekTimeUs += getTimeStamp(A2DP_DISABLED); // 2.) Flush the buffers and transfer everything to request queue Loading