Loading media/libstagefright/bqhelper/GraphicBufferSource.cpp +17 −5 Original line number Diff line number Diff line Loading @@ -282,24 +282,36 @@ private: }; struct GraphicBufferSource::ConsumerProxy : public BufferQueue::ConsumerListener { ConsumerProxy(const sp<GraphicBufferSource> &gbs) : mGbs(gbs) {} ConsumerProxy(const wp<GraphicBufferSource> &gbs) : mGbs(gbs) {} ~ConsumerProxy() = default; void onFrameAvailable(const BufferItem& item) override { mGbs->onFrameAvailable(item); sp<GraphicBufferSource> gbs = mGbs.promote(); if (gbs != nullptr) { gbs->onFrameAvailable(item); } } void onBuffersReleased() override { mGbs->onBuffersReleased(); sp<GraphicBufferSource> gbs = mGbs.promote(); if (gbs != nullptr) { gbs->onBuffersReleased(); } } void onSidebandStreamChanged() override { mGbs->onSidebandStreamChanged(); sp<GraphicBufferSource> gbs = mGbs.promote(); if (gbs != nullptr) { gbs->onSidebandStreamChanged(); } } private: sp<GraphicBufferSource> mGbs; // Note that GraphicBufferSource is holding an sp to us, we can't hold // an sp back to GraphicBufferSource as the circular dependency will // make both immortal. wp<GraphicBufferSource> mGbs; }; GraphicBufferSource::GraphicBufferSource() : Loading Loading
media/libstagefright/bqhelper/GraphicBufferSource.cpp +17 −5 Original line number Diff line number Diff line Loading @@ -282,24 +282,36 @@ private: }; struct GraphicBufferSource::ConsumerProxy : public BufferQueue::ConsumerListener { ConsumerProxy(const sp<GraphicBufferSource> &gbs) : mGbs(gbs) {} ConsumerProxy(const wp<GraphicBufferSource> &gbs) : mGbs(gbs) {} ~ConsumerProxy() = default; void onFrameAvailable(const BufferItem& item) override { mGbs->onFrameAvailable(item); sp<GraphicBufferSource> gbs = mGbs.promote(); if (gbs != nullptr) { gbs->onFrameAvailable(item); } } void onBuffersReleased() override { mGbs->onBuffersReleased(); sp<GraphicBufferSource> gbs = mGbs.promote(); if (gbs != nullptr) { gbs->onBuffersReleased(); } } void onSidebandStreamChanged() override { mGbs->onSidebandStreamChanged(); sp<GraphicBufferSource> gbs = mGbs.promote(); if (gbs != nullptr) { gbs->onSidebandStreamChanged(); } } private: sp<GraphicBufferSource> mGbs; // Note that GraphicBufferSource is holding an sp to us, we can't hold // an sp back to GraphicBufferSource as the circular dependency will // make both immortal. wp<GraphicBufferSource> mGbs; }; GraphicBufferSource::GraphicBufferSource() : Loading