summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
Diffstat (limited to 'media')
-rw-r--r--media/libstagefright/LPAPlayer.cpp24
1 files changed, 23 insertions, 1 deletions
diff --git a/media/libstagefright/LPAPlayer.cpp b/media/libstagefright/LPAPlayer.cpp
index 86a8419..752667d 100644
--- a/media/libstagefright/LPAPlayer.cpp
+++ b/media/libstagefright/LPAPlayer.cpp
@@ -70,6 +70,7 @@ mObserver(observer),
AudioPlayer(audioSink,observer) {
LOGV("LPAPlayer::LPAPlayer() ctor");
a2dpDisconnectPause = false;
+ a2dpResumeAfterReConnect = false;
mSeeked = false;
objectsAlive++;
timeStarted = 0;
@@ -507,6 +508,7 @@ void LPAPlayer::resume() {
mReachedEOS = false;
mSeekTimeUs = timePlayed;
a2dpDisconnectPause = false;
+ a2dpResumeAfterReConnect = true;
mAudioSink->start();
pthread_cond_signal(&decoder_cv);
pthread_cond_signal(&a2dp_cv);
@@ -1149,6 +1151,19 @@ void LPAPlayer::A2DPThreadEntry() {
//Seeked: break out of loop, flush old buffers and write new buffers
LOGV("@_@bytes To write1:%d",bytesToWrite);
}
+ /* Incase of A2DP disconnect and connects back flushing all the buffers
+ which are decoded by fillbuffer and not sent to A2DP */
+ if( a2dpResumeAfterReConnect == true )
+ {
+ a2dpResumeAfterReConnect = false;
+ while (!memBuffersResponseQueue.empty()) {
+ List<BuffersAllocated>::iterator it = memBuffersResponseQueue.begin();
+ BuffersAllocated buf = *it;
+ memBuffersRequestQueue.push_back(buf);
+ memBuffersResponseQueue.erase(it);
+ }
+ break;
+ }
if (mSeeked) {
LOGV("Seeking A2DP Playback");
break;
@@ -1504,7 +1519,14 @@ realTimeOffset = 0;
return mPositionTimeMediaUs + realTimeOffset;
*/
- LOGV("getMediaTimeUs() isPaused %d timeStarted %d timePlayed %d", isPaused, timeStarted, timePlayed);
+ /* When A2DP connects in the middile timePlayed will be updated to the
+ number of buffer played from zero which will be non-zero value
+ incase if user does not perform any seek operation timePlayed will be
+ willbe non-zero and which will effect the seekbar after playback
+ to resolve this sending zero when the EOS reached and A2DP enable */
+ if( isPaused && bIsA2DPEnabled && mReachedEOS )
+ return 0;
+ LOGV("getMediaTimeUs() isPaused %d timeStarted %lld timePlayed %lld", isPaused, timeStarted, timePlayed);
if (isPaused || timeStarted == 0) {
return timePlayed;
} else {