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

Commit ef38aac0 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

am: 50b0fd20

Change-Id: Ibe41f5242d6c6ebe100c51e5744267a8e86979c3
parents 4e2fa8fc 50b0fd20
Loading
Loading
Loading
Loading
+17 −5
Original line number Original line Diff line number Diff line
@@ -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() :