diff options
author | Li Sun <sunli@codeaurora.org> | 2015-12-09 18:28:10 +0530 |
---|---|---|
committer | Steve Kondik <steve@cyngn.com> | 2016-03-08 22:37:17 -0800 |
commit | 1aedff94c6f52223f8720edbce16c80ad1b57b00 (patch) | |
tree | f8ef8bb21b485c1d33d28b715dc325874a356906 /media/libmediaplayerservice/nuplayer/NuPlayer.cpp | |
parent | 97fc248733b43731e1e2d98de5dad47a490dbbc2 (diff) | |
download | frameworks_av-1aedff94c6f52223f8720edbce16c80ad1b57b00.zip frameworks_av-1aedff94c6f52223f8720edbce16c80ad1b57b00.tar.gz frameworks_av-1aedff94c6f52223f8720edbce16c80ad1b57b00.tar.bz2 |
Nuplayer: Flush the decoder if seamless format change is supported
In smooth streaming enabled case, flush the decoder
if seamless format change is supported.
Otherwise,ramdomly video frames with old resolution
are queued to the new surface and results in green frames.
Calling flush ensures that all the old video frames
are cleared.
Change-Id: Ia020a01fd0eaa8af8e48b6edb526a3f53875b068
Diffstat (limited to 'media/libmediaplayerservice/nuplayer/NuPlayer.cpp')
-rw-r--r-- | media/libmediaplayerservice/nuplayer/NuPlayer.cpp | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayer.cpp b/media/libmediaplayerservice/nuplayer/NuPlayer.cpp index c87208c..caac70b 100644 --- a/media/libmediaplayerservice/nuplayer/NuPlayer.cpp +++ b/media/libmediaplayerservice/nuplayer/NuPlayer.cpp @@ -932,10 +932,21 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) { audio ? "audio" : "video", formatChange); if (formatChange) { - mDeferredActions.push_back( - new FlushDecoderAction( + int32_t seamlessChange = 0; + if (msg->findInt32("video-seamlessChange", &seamlessChange) && seamlessChange) { + ALOGE("video decoder seamlessChange in smooth streaming mode, " + "flush the video decoder"); + mDeferredActions.push_back( + new FlushDecoderAction(FLUSH_CMD_NONE, FLUSH_CMD_FLUSH)); + mDeferredActions.push_back(new ResumeDecoderAction(false)); + processDeferredActions(); + break; + } else { + mDeferredActions.push_back( + new FlushDecoderAction( audio ? FLUSH_CMD_SHUTDOWN : FLUSH_CMD_NONE, audio ? FLUSH_CMD_NONE : FLUSH_CMD_SHUTDOWN)); + } } mDeferredActions.push_back( |