From 8965b09815d5db24f8e45e492c8a36e3058e6aa5 Mon Sep 17 00:00:00 2001 From: Wonsik Kim Date: Thu, 1 Oct 2020 14:50:32 -0700 Subject: [PATCH] MediaCodec: propagate usage from original surface to release surface Bug: 169968946 Bug: 160346309 Test: atest CtsSecurityTestCases:StagefrightTest#testStagefright_bug_65483665 Test: atest CtsMediaTestCases -- --module-arg CtsMediaTestCases:size:small Change-Id: If87053e85a3692ed4b5fbc61d45612d5dbf56eb5 --- media/libstagefright/MediaCodec.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/media/libstagefright/MediaCodec.cpp b/media/libstagefright/MediaCodec.cpp index 86372e388f..f7d65136ee 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()); -- GitLab