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

Commit 0549e1a0 authored by Chih-Yu Huang's avatar Chih-Yu Huang
Browse files

C2BufferQueueBlockPoolData: Pass GraphicBuffer to migrate() directly

Originally, we pass the array of GraphicBuffer to migrate(), but the
method only needs the target GraphicBuffer.

This CL changes the signature of migrate() method to pass the target
GraphicBuffer directly.

Bug: 174188958
Test: android.media.cts.MediaCodecPlayerTest#testPlaybackSwitchViews

Change-Id: I85fa89a621e1b8e49d07fa15169e5d11a3c3d44e
parent b849ee3e
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -105,7 +105,7 @@ public:

    int migrate(const android::sp<HGraphicBufferProducer>& producer,
                uint32_t toGeneration, uint64_t toBqId,
                android::sp<android::GraphicBuffer> *buffers, uint32_t oldGeneration);
                android::sp<android::GraphicBuffer> graphicBuffer, uint32_t oldGeneration);

private:
    friend struct _C2BlockFactory;
+7 −4
Original line number Diff line number Diff line
@@ -510,7 +510,7 @@ public:
                    if (data) {
                        int slot = data->migrate(
                                mProducer, generation,
                                producerId, mBuffers, oldGeneration);
                                producerId, mBuffers[i], oldGeneration);
                        if (slot >= 0) {
                            buffers[slot] = mBuffers[i];
                            poolDatas[slot] = data;
@@ -594,7 +594,7 @@ C2BufferQueueBlockPoolData::type_t C2BufferQueueBlockPoolData::getType() const {
int C2BufferQueueBlockPoolData::migrate(
        const sp<HGraphicBufferProducer>& producer,
        uint32_t toGeneration, uint64_t toBqId,
        sp<GraphicBuffer> *buffers, uint32_t oldGeneration) {
        sp<GraphicBuffer> graphicBuffer, uint32_t oldGeneration) {
    std::scoped_lock<std::mutex> l(mLock);

    mCurrentBqId = toBqId;
@@ -608,10 +608,14 @@ int C2BufferQueueBlockPoolData::migrate(
        ALOGV("pool is not local");
        return -1;
    }
    if (mBqSlot < 0 || mBqSlot >= NUM_BUFFER_SLOTS || !buffers[mBqSlot]) {
    if (mBqSlot < 0 || mBqSlot >= NUM_BUFFER_SLOTS) {
        ALOGV("slot is not in effect");
        return -1;
    }
    if (!graphicBuffer) {
        ALOGV("buffer is null");
        return -1;
    }
    if (toGeneration == mGeneration && mBqId == toBqId) {
        ALOGV("cannot migrate to same bufferqueue");
        return -1;
@@ -624,7 +628,6 @@ int C2BufferQueueBlockPoolData::migrate(
        ALOGV("buffer is in transfer");
        return -1;
    }
    sp<GraphicBuffer> const& graphicBuffer = buffers[mBqSlot];
    graphicBuffer->setGenerationNumber(toGeneration);

    HBuffer hBuffer{};