summaryrefslogtreecommitdiffstats
path: root/media/libmediaplayerservice
diff options
context:
space:
mode:
authorRobert Shih <robertshih@google.com>2015-08-04 18:07:44 -0700
committerRobert Shih <robertshih@google.com>2015-08-05 13:20:18 -0700
commit1a5c859016e743779e4db25855390b3ce523cd48 (patch)
treed457520647e05164e177ee0cdc96522733ae5bea /media/libmediaplayerservice
parentf09d59b9c03d3ac3523517ea587e7587e669b6a4 (diff)
downloadframeworks_av-1a5c859016e743779e4db25855390b3ce523cd48.zip
frameworks_av-1a5c859016e743779e4db25855390b3ce523cd48.tar.gz
frameworks_av-1a5c859016e743779e4db25855390b3ce523cd48.tar.bz2
NuPlayer:seek handling on kWhatAudioTearDown
Restart from previous seek time on kWhatAudioTearDown if mRenderer didn't supply a useful positionUs. Bug: 22662968 Change-Id: Ic21957f676ba25fb92694f71093bed60b630390b
Diffstat (limited to 'media/libmediaplayerservice')
-rw-r--r--media/libmediaplayerservice/nuplayer/NuPlayer.cpp6
-rw-r--r--media/libmediaplayerservice/nuplayer/NuPlayer.h2
-rw-r--r--media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp7
3 files changed, 10 insertions, 5 deletions
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayer.cpp b/media/libmediaplayerservice/nuplayer/NuPlayer.cpp
index bfdb1ad..214315f 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayer.cpp
+++ b/media/libmediaplayerservice/nuplayer/NuPlayer.cpp
@@ -174,6 +174,7 @@ NuPlayer::NuPlayer(pid_t pid)
mAudioDecoderGeneration(0),
mVideoDecoderGeneration(0),
mRendererGeneration(0),
+ mPreviousSeekTimeUs(0),
mAudioEOS(false),
mVideoEOS(false),
mScanSourcesPending(false),
@@ -1114,7 +1115,9 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) {
}
int64_t positionUs;
- CHECK(msg->findInt64("positionUs", &positionUs));
+ if (!msg->findInt64("positionUs", &positionUs)) {
+ positionUs = mPreviousSeekTimeUs;
+ }
performSeek(positionUs);
if (reason == Renderer::kDueToError && needsToCreateAudioDecoder) {
@@ -1857,6 +1860,7 @@ void NuPlayer::performSeek(int64_t seekTimeUs) {
mAudioDecoder.get(), mVideoDecoder.get());
return;
}
+ mPreviousSeekTimeUs = seekTimeUs;
mSource->seekTo(seekTimeUs);
++mTimedTextGeneration;
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayer.h b/media/libmediaplayerservice/nuplayer/NuPlayer.h
index 9456d5d..c9f0bbd 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayer.h
+++ b/media/libmediaplayerservice/nuplayer/NuPlayer.h
@@ -154,6 +154,8 @@ private:
int32_t mVideoDecoderGeneration;
int32_t mRendererGeneration;
+ int64_t mPreviousSeekTimeUs;
+
List<sp<Action> > mDeferredActions;
bool mAudioEOS;
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp
index e9f3799..2e0d0d3 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp
+++ b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp
@@ -1586,16 +1586,15 @@ void NuPlayer::Renderer::onAudioTearDown(AudioTearDownReason reason) {
mAudioTornDown = true;
int64_t currentPositionUs;
- if (getCurrentPosition(&currentPositionUs) != OK) {
- currentPositionUs = 0;
+ sp<AMessage> notify = mNotify->dup();
+ if (getCurrentPosition(&currentPositionUs) == OK) {
+ notify->setInt64("positionUs", currentPositionUs);
}
mAudioSink->stop();
mAudioSink->flush();
- sp<AMessage> notify = mNotify->dup();
notify->setInt32("what", kWhatAudioTearDown);
- notify->setInt64("positionUs", currentPositionUs);
notify->setInt32("reason", reason);
notify->post();
}