Loading media/libstagefright/bqhelper/GraphicBufferSource.cpp +17 −5 Original line number Original line Diff line number Diff line Loading @@ -282,24 +282,36 @@ private: }; }; struct GraphicBufferSource::ConsumerProxy : public BufferQueue::ConsumerListener { struct GraphicBufferSource::ConsumerProxy : public BufferQueue::ConsumerListener { ConsumerProxy(const sp<GraphicBufferSource> &gbs) : mGbs(gbs) {} ConsumerProxy(const wp<GraphicBufferSource> &gbs) : mGbs(gbs) {} ~ConsumerProxy() = default; ~ConsumerProxy() = default; void onFrameAvailable(const BufferItem& item) override { void onFrameAvailable(const BufferItem& item) override { mGbs->onFrameAvailable(item); sp<GraphicBufferSource> gbs = mGbs.promote(); if (gbs != nullptr) { gbs->onFrameAvailable(item); } } } void onBuffersReleased() override { void onBuffersReleased() override { mGbs->onBuffersReleased(); sp<GraphicBufferSource> gbs = mGbs.promote(); if (gbs != nullptr) { gbs->onBuffersReleased(); } } } void onSidebandStreamChanged() override { void onSidebandStreamChanged() override { mGbs->onSidebandStreamChanged(); sp<GraphicBufferSource> gbs = mGbs.promote(); if (gbs != nullptr) { gbs->onSidebandStreamChanged(); } } } private: 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() : GraphicBufferSource::GraphicBufferSource() : Loading Loading
media/libstagefright/bqhelper/GraphicBufferSource.cpp +17 −5 Original line number Original line Diff line number Diff line Loading @@ -282,24 +282,36 @@ private: }; }; struct GraphicBufferSource::ConsumerProxy : public BufferQueue::ConsumerListener { struct GraphicBufferSource::ConsumerProxy : public BufferQueue::ConsumerListener { ConsumerProxy(const sp<GraphicBufferSource> &gbs) : mGbs(gbs) {} ConsumerProxy(const wp<GraphicBufferSource> &gbs) : mGbs(gbs) {} ~ConsumerProxy() = default; ~ConsumerProxy() = default; void onFrameAvailable(const BufferItem& item) override { void onFrameAvailable(const BufferItem& item) override { mGbs->onFrameAvailable(item); sp<GraphicBufferSource> gbs = mGbs.promote(); if (gbs != nullptr) { gbs->onFrameAvailable(item); } } } void onBuffersReleased() override { void onBuffersReleased() override { mGbs->onBuffersReleased(); sp<GraphicBufferSource> gbs = mGbs.promote(); if (gbs != nullptr) { gbs->onBuffersReleased(); } } } void onSidebandStreamChanged() override { void onSidebandStreamChanged() override { mGbs->onSidebandStreamChanged(); sp<GraphicBufferSource> gbs = mGbs.promote(); if (gbs != nullptr) { gbs->onSidebandStreamChanged(); } } } private: 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() : GraphicBufferSource::GraphicBufferSource() : Loading