diff --git a/media/libstagefright/MediaCodec.cpp b/media/libstagefright/MediaCodec.cpp index 86372e388fcab9d9cf56669139a5baaa69bc6188..f7d65136ee662d371c7a2bd5157dfb26e5d9f506 100644 --- a/media/libstagefright/MediaCodec.cpp +++ b/media/libstagefright/MediaCodec.cpp @@ -315,7 +315,7 @@ MediaCodec::BufferInfo::BufferInfo() : mOwnedByClient(false) {} class MediaCodec::ReleaseSurface { public: - ReleaseSurface() { + explicit ReleaseSurface(uint64_t usage) { BufferQueue::createBufferQueue(&mProducer, &mConsumer); mSurface = new Surface(mProducer, false /* controlledByApp */); struct ConsumerListener : public BnConsumerListener { @@ -326,6 +326,7 @@ public: sp listener{new ConsumerListener}; mConsumer->consumerConnect(listener, false); mConsumer->setConsumerName(String8{"MediaCodec.release"}); + mConsumer->setConsumerUsageBits(usage); } const sp &getSurface() { @@ -3083,7 +3084,11 @@ void MediaCodec::onMessageReceived(const sp &msg) { if (asyncNotify != nullptr) { if (mSurface != NULL) { if (!mReleaseSurface) { - mReleaseSurface.reset(new ReleaseSurface); + uint64_t usage = 0; + if (mSurface->getConsumerUsage(&usage) != OK) { + usage = 0; + } + mReleaseSurface.reset(new ReleaseSurface(usage)); } if (mSurface != mReleaseSurface->getSurface()) { status_t err = connectToSurface(mReleaseSurface->getSurface());