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 | |
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
-rw-r--r-- | include/media/stagefright/MediaCodec.h | 1 | ||||
-rw-r--r-- | media/libstagefright/MediaCodec.cpp | 13 |
2 files changed, 12 insertions, 2 deletions
diff --git a/include/media/stagefright/MediaCodec.h b/include/media/stagefright/MediaCodec.h index d98fa1a..e3e952f 100644 --- a/include/media/stagefright/MediaCodec.h +++ b/include/media/stagefright/MediaCodec.h @@ -304,6 +304,7 @@ private: sp<AMessage> mActivityNotify; bool mHaveInputSurface; + bool mHavePendingInputBuffers; MediaCodec(const sp<ALooper> &looper); 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; |