From 3d66eb4128aebef31bb0fa44c4d53d6122294a26 Mon Sep 17 00:00:00 2001 From: Chong Zhang Date: Thu, 16 Apr 2015 12:44:11 -0700 Subject: MediaCodec: hold input buffers during FLUSHED state bug: 20267388 Change-Id: I21a12cb2ebb74e17dcdb7b502c3f674e9e64b5dc --- media/libstagefright/MediaCodec.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'media/libstagefright/MediaCodec.cpp') 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 &looper) mDequeueInputReplyID(0), mDequeueOutputTimeoutGeneration(0), mDequeueOutputReplyID(0), - mHaveInputSurface(false) { + mHaveInputSurface(false), + mHavePendingInputBuffers(false) { } MediaCodec::~MediaCodec() { @@ -1380,7 +1381,11 @@ void MediaCodec::onMessageReceived(const sp &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 &msg) { if (mState == FLUSHED) { setState(STARTED); + if (mHavePendingInputBuffers) { + onInputBufferAvailable(); + mHavePendingInputBuffers = false; + } mCodec->signalResume(); PostReplyWithError(replyID, OK); break; -- cgit v1.1