diff options
author | Chong Zhang <chz@google.com> | 2015-04-16 12:44:11 -0700 |
---|---|---|
committer | Chong Zhang <chz@google.com> | 2015-04-16 13:58:38 -0700 |
commit | 3d66eb4128aebef31bb0fa44c4d53d6122294a26 (patch) | |
tree | b532ebd2b434a9f6f90039bdb46f775fbe2ebefe /media | |
parent | 71933d769c54dadb5d8618ccb1ae69a3926f890b (diff) | |
download | frameworks_av-3d66eb4128aebef31bb0fa44c4d53d6122294a26.zip frameworks_av-3d66eb4128aebef31bb0fa44c4d53d6122294a26.tar.gz frameworks_av-3d66eb4128aebef31bb0fa44c4d53d6122294a26.tar.bz2 |
MediaCodec: hold input buffers during FLUSHED state
bug: 20267388
Change-Id: I21a12cb2ebb74e17dcdb7b502c3f674e9e64b5dc
Diffstat (limited to 'media')
-rw-r--r-- | media/libstagefright/MediaCodec.cpp | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/media/libstagefright/MediaCodec.cpp b/media/libstagefright/MediaCodec.cpp index 40818f9..8688d9b 100644 --- a/media/libstagefright/MediaCodec.cpp +++ b/media/libstagefright/MediaCodec.cpp @@ -320,7 +320,8 @@ MediaCodec::MediaCodec(const sp<ALooper> &looper) mDequeueInputReplyID(0), mDequeueOutputTimeoutGeneration(0), mDequeueOutputReplyID(0), - mHaveInputSurface(false) { + mHaveInputSurface(false), + mHavePendingInputBuffers(false) { } MediaCodec::~MediaCodec() { @@ -1380,7 +1381,11 @@ void MediaCodec::onMessageReceived(const sp<AMessage> &msg) { if (mFlags & kFlagIsAsync) { if (!mHaveInputSurface) { - onInputBufferAvailable(); + if (mState == FLUSHED) { + mHavePendingInputBuffers = true; + } else { + onInputBufferAvailable(); + } } } else if (mFlags & kFlagDequeueInputPending) { CHECK(handleDequeueInputBuffer(mDequeueInputReplyID)); @@ -1648,6 +1653,10 @@ void MediaCodec::onMessageReceived(const sp<AMessage> &msg) { if (mState == FLUSHED) { setState(STARTED); + if (mHavePendingInputBuffers) { + onInputBufferAvailable(); + mHavePendingInputBuffers = false; + } mCodec->signalResume(); PostReplyWithError(replyID, OK); break; |