Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a8697e56 authored by mtk17886's avatar mtk17886 Committed by daren.liao
Browse files

Fix stuck while disconnecting chromecast

[Description]
ACodec is stuck while disconnecting chromecast(mirror mode) playback
Solution:
add the buffer consuming flow in ConsumerListener::onFrameAvailable

Bug: 176522646

[Test Report]
CAST exit OK after disconnecting many times

Change-Id: Ic1fdec917dc435bbf86309d98efc5c76bb64ba42
parent 210105af
Loading
Loading
Loading
Loading
+15 −2
Original line number Diff line number Diff line
@@ -321,11 +321,24 @@ public:
        BufferQueue::createBufferQueue(&mProducer, &mConsumer);
        mSurface = new Surface(mProducer, false /* controlledByApp */);
        struct ConsumerListener : public BnConsumerListener {
            void onFrameAvailable(const BufferItem&) override {}
            ConsumerListener(const sp<IGraphicBufferConsumer> &consumer) {
                mConsumer = consumer;
            }
            void onFrameAvailable(const BufferItem&) override {
                BufferItem buffer;
                // consume buffer
                sp<IGraphicBufferConsumer> consumer = mConsumer.promote();
                if (consumer != nullptr && consumer->acquireBuffer(&buffer, 0) == NO_ERROR) {
                    consumer->releaseBuffer(buffer.mSlot, buffer.mFrameNumber,
                                            EGL_NO_DISPLAY, EGL_NO_SYNC_KHR, buffer.mFence);
                }
            }

            wp<IGraphicBufferConsumer> mConsumer;
            void onBuffersReleased() override {}
            void onSidebandStreamChanged() override {}
        };
        sp<ConsumerListener> listener{new ConsumerListener};
        sp<ConsumerListener> listener{new ConsumerListener(mConsumer)};
        mConsumer->consumerConnect(listener, false);
        mConsumer->setConsumerName(String8{"MediaCodec.release"});
        mConsumer->setConsumerUsageBits(usage);