diff options
author | Andreas Huber <andih@google.com> | 2012-11-30 10:53:22 -0800 |
---|---|---|
committer | Andreas Huber <andih@google.com> | 2012-11-30 11:28:02 -0800 |
commit | a1f8ab0ad670c30e57f3f072df13df66fe4f4910 (patch) | |
tree | 36fa351fed8989e66035a3e05eb9f32e36292f28 /media/libmediaplayerservice/nuplayer/NuPlayer.h | |
parent | 45f7c446777171a728f9eb257f48145dde5d19e2 (diff) | |
download | frameworks_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.h | 16 |
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); }; |