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

Commit 50b0fd20 authored by Chong Zhang's avatar Chong Zhang Committed by android-build-merger
Browse files

Merge "Make ConsumerProxy hold weak ref to GraphicBufferSource" into qt-dev

am: 67ece918

Change-Id: Ieecb4c5a75b8ec5435d8a90877a173d07bc620fc
parents 901fde56 67ece918
Loading
Loading
Loading
Loading
+17 −5
Original line number Diff line number Diff line
@@ -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() :