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

Commit da95e2f0 authored by Pawin Vongmasa's avatar Pawin Vongmasa
Browse files

Upstream changes from hardware/google/av

Commits included are
- 0ee0072107f46dfc92eaaf2e97a978fdf6683f00
- 81adb0d53295fe16dabd1bec0d98ac6d3472e68c

Test: Builds

Bug: 112362730
Change-Id: If39b90a9f773240022b72c624521f8a8a0fc483a
parent d0f0e14d
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -678,8 +678,8 @@ TEST_F(Codec2VideoDecHidlTest, ThumbnailTest) {
        EXPECT_GE(mFramesReceived, 1U);
        EXPECT_GE(mFramesReceived, 1U);
        ASSERT_EQ(mEos, true);
        ASSERT_EQ(mEos, true);
        ASSERT_EQ(mComponent->stop(), C2_OK);
        ASSERT_EQ(mComponent->stop(), C2_OK);
        ASSERT_EQ(mComponent->release(), C2_OK);
    }
    }
    ASSERT_EQ(mComponent->release(), C2_OK);
}
}


TEST_F(Codec2VideoDecHidlTest, EOSTest) {
TEST_F(Codec2VideoDecHidlTest, EOSTest) {
+15 −3
Original line number Original line Diff line number Diff line
@@ -1807,17 +1807,29 @@ void CCodecBufferChannel::feedInputBufferIfAvailableInternal() {


status_t CCodecBufferChannel::renderOutputBuffer(
status_t CCodecBufferChannel::renderOutputBuffer(
        const sp<MediaCodecBuffer> &buffer, int64_t timestampNs) {
        const sp<MediaCodecBuffer> &buffer, int64_t timestampNs) {
    ALOGV("[%s] renderOutputBuffer: %p", mName, buffer.get());
    std::shared_ptr<C2Buffer> c2Buffer;
    std::shared_ptr<C2Buffer> c2Buffer;
    bool released = false;
    {
    {
        Mutexed<std::unique_ptr<OutputBuffers>>::Locked buffers(mOutputBuffers);
        Mutexed<std::unique_ptr<OutputBuffers>>::Locked buffers(mOutputBuffers);
        if (*buffers) {
        if (*buffers) {
            (*buffers)->releaseBuffer(buffer, &c2Buffer);
            released = (*buffers)->releaseBuffer(buffer, &c2Buffer);
        }
        }
    }
    }
    // NOTE: some apps try to releaseOutputBuffer() with timestamp and/or render
    //       set to true.
    sendOutputBuffers();
    // input buffer feeding may have been gated by pending output buffers
    feedInputBufferIfAvailable();
    if (!c2Buffer) {
    if (!c2Buffer) {
        if (released) {
            ALOGD("[%s] The app is calling releaseOutputBuffer() with "
                  "timestamp or render=true with non-video buffers. Apps should "
                  "call releaseOutputBuffer() with render=false for those.",
                  mName);
        }
        return INVALID_OPERATION;
        return INVALID_OPERATION;
    }
    }
    sendOutputBuffers();


#if 0
#if 0
    const std::vector<std::shared_ptr<const C2Info>> infoParams = c2Buffer->info();
    const std::vector<std::shared_ptr<const C2Info>> infoParams = c2Buffer->info();
@@ -1961,8 +1973,8 @@ status_t CCodecBufferChannel::discardBuffer(const sp<MediaCodecBuffer> &buffer)
        }
        }
    }
    }
    if (released) {
    if (released) {
        feedInputBufferIfAvailable();
        sendOutputBuffers();
        sendOutputBuffers();
        feedInputBufferIfAvailable();
    } else {
    } else {
        ALOGD("[%s] MediaCodec discarded an unknown buffer", mName);
        ALOGD("[%s] MediaCodec discarded an unknown buffer", mName);
    }
    }