summaryrefslogtreecommitdiffstats
path: root/media/libmediaplayerservice/nuplayer/NuPlayer.h
diff options
context:
space:
mode:
authorAndreas Huber <andih@google.com>2012-11-30 10:53:22 -0800
committerAndreas Huber <andih@google.com>2012-11-30 11:28:02 -0800
commita1f8ab0ad670c30e57f3f072df13df66fe4f4910 (patch)
tree36fa351fed8989e66035a3e05eb9f32e36292f28 /media/libmediaplayerservice/nuplayer/NuPlayer.h
parent45f7c446777171a728f9eb257f48145dde5d19e2 (diff)
downloadframeworks_av-a1f8ab0ad670c30e57f3f072df13df66fe4f4910.zip
frameworks_av-a1f8ab0ad670c30e57f3f072df13df66fe4f4910.tar.gz
frameworks_av-a1f8ab0ad670c30e57f3f072df13df66fe4f4910.tar.bz2
Fix nuplayer seek jankiness by properly flushing decoders before
initiating the seek. Also refactor the nuplayer state machine to make this a little more maintainable and extensible in the future. Change-Id: I36a673bdecff732bca7094c8f72bac24f37c01e9 related-to-bug: 7120373
Diffstat (limited to 'media/libmediaplayerservice/nuplayer/NuPlayer.h')
-rw-r--r--media/libmediaplayerservice/nuplayer/NuPlayer.h16
1 files changed, 13 insertions, 3 deletions
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayer.h b/media/libmediaplayerservice/nuplayer/NuPlayer.h
index 31efb2e..6e174e0 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayer.h
+++ b/media/libmediaplayerservice/nuplayer/NuPlayer.h
@@ -73,6 +73,9 @@ private:
struct Renderer;
struct RTSPSource;
struct StreamingSource;
+ struct Action;
+ struct SeekAction;
+ struct SimpleAction;
enum {
kWhatSetDataSource = '=DaS',
@@ -102,6 +105,8 @@ private:
sp<Decoder> mAudioDecoder;
sp<Renderer> mRenderer;
+ List<sp<Action> > mDeferredActions;
+
bool mAudioEOS;
bool mVideoEOS;
@@ -126,8 +131,6 @@ private:
FlushStatus mFlushingAudio;
FlushStatus mFlushingVideo;
- bool mResetInProgress;
- bool mResetPostponed;
int64_t mSkipRenderingAudioUntilMediaTimeUs;
int64_t mSkipRenderingVideoUntilMediaTimeUs;
@@ -150,12 +153,19 @@ private:
static bool IsFlushingState(FlushStatus state, bool *needShutdown = NULL);
- void finishReset();
void postScanSources();
void schedulePollDuration();
void cancelPollDuration();
+ void processDeferredActions();
+
+ void performSeek(int64_t seekTimeUs);
+ void performDecoderFlush();
+ void performDecoderShutdown();
+ void performReset();
+ void performScanSources();
+
DISALLOW_EVIL_CONSTRUCTORS(NuPlayer);
};