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

Commit 5d2c0ccc authored by Treehugger Robot's avatar Treehugger Robot Committed by Automerger Merge Worker
Browse files

Merge "OMX VTS: free graphics buffers at the end of test" am: 7e734892 am: 21c5d4e0

Original change: https://android-review.googlesource.com/c/platform/hardware/interfaces/+/1552731

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: I3d65832c60a61968ef5f4abb13628fd39d8c57ec
parents 7f07d013 21c5d4e0
Loading
Loading
Loading
Loading
+22 −3
Original line number Original line Diff line number Diff line
@@ -215,6 +215,7 @@ void allocateGraphicBuffers(sp<IOmxNode> omxNode, OMX_U32 portIndex,
    ASSERT_NE(handle, nullptr);
    ASSERT_NE(handle, nullptr);


    *nStride = static_cast<int32_t>(stride);
    *nStride = static_cast<int32_t>(stride);
    buffer->handle = handle;
    buffer->omxBuffer.nativeHandle = handle;
    buffer->omxBuffer.nativeHandle = handle;
    buffer->omxBuffer.attr.anwBuffer.width = nFrameWidth;
    buffer->omxBuffer.attr.anwBuffer.width = nFrameWidth;
    buffer->omxBuffer.attr.anwBuffer.height = nFrameHeight;
    buffer->omxBuffer.attr.anwBuffer.height = nFrameHeight;
@@ -335,6 +336,18 @@ void allocatePortBuffers(sp<IOmxNode> omxNode,
    }
    }
}
}


// free buffers needed on a component port
void freePortBuffers(android::Vector<BufferInfo>* buffArray, PortMode portMode, bool allocGrap) {
    for (size_t i = 0; i < buffArray->size(); i++) {
        if (portMode == PortMode::PRESET_ANW_BUFFER ||
            (allocGrap && portMode == PortMode::DYNAMIC_ANW_BUFFER)) {
            android::GraphicBufferAllocator& allocator = android::GraphicBufferAllocator::get();
            android::status_t error = allocator.free((*buffArray)[i].handle);
            ASSERT_EQ(error, android::NO_ERROR);
        }
    }
}

// State Transition : Loaded -> Idle
// State Transition : Loaded -> Idle
// Note: This function does not make any background checks for this transition.
// Note: This function does not make any background checks for this transition.
// The callee holds the reponsibility to ensure the legality of the transition.
// The callee holds the reponsibility to ensure the legality of the transition.
@@ -399,11 +412,15 @@ void changeStateLoadedtoIdle(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
// The callee holds the reponsibility to ensure the legality of the transition.
// The callee holds the reponsibility to ensure the legality of the transition.
void changeStateIdletoLoaded(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
void changeStateIdletoLoaded(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
                             android::Vector<BufferInfo>* iBuffer,
                             android::Vector<BufferInfo>* iBuffer,
                             android::Vector<BufferInfo>* oBuffer,
                             android::Vector<BufferInfo>* oBuffer, OMX_U32 kPortIndexInput,
                             OMX_U32 kPortIndexInput,
                             OMX_U32 kPortIndexOutput, PortMode* portMode, bool allocGrap) {
                             OMX_U32 kPortIndexOutput) {
    android::hardware::media::omx::V1_0::Status status;
    android::hardware::media::omx::V1_0::Status status;
    Message msg;
    Message msg;
    PortMode defaultPortMode[2], *pm;

    defaultPortMode[0] = PortMode::PRESET_BYTE_BUFFER;
    defaultPortMode[1] = PortMode::PRESET_BYTE_BUFFER;
    pm = portMode ? portMode : defaultPortMode;


    // set state to Loaded
    // set state to Loaded
    status = omxNode->sendCommand(toRawCommandType(OMX_CommandStateSet),
    status = omxNode->sendCommand(toRawCommandType(OMX_CommandStateSet),
@@ -446,6 +463,8 @@ void changeStateIdletoLoaded(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
    ASSERT_EQ(msg.data.eventData.data1, OMX_CommandStateSet);
    ASSERT_EQ(msg.data.eventData.data1, OMX_CommandStateSet);
    ASSERT_EQ(msg.data.eventData.data2, OMX_StateLoaded);
    ASSERT_EQ(msg.data.eventData.data2, OMX_StateLoaded);


    ASSERT_NO_FATAL_FAILURE(freePortBuffers(iBuffer, pm[0], allocGrap));
    ASSERT_NO_FATAL_FAILURE(freePortBuffers(oBuffer, pm[1], allocGrap));
    return;
    return;
}
}


+7 −2
Original line number Original line Diff line number Diff line
@@ -115,6 +115,7 @@ inline uint32_t toRawCommandType(OMX_COMMANDTYPE l) {
struct BufferInfo {
struct BufferInfo {
    uint32_t id;
    uint32_t id;
    bufferOwner owner;
    bufferOwner owner;
    buffer_handle_t handle;
    android::hardware::media::omx::V1_0::CodecBuffer omxBuffer;
    android::hardware::media::omx::V1_0::CodecBuffer omxBuffer;
    ::android::sp<IMemory> mMemory;
    ::android::sp<IMemory> mMemory;
    int32_t slot;
    int32_t slot;
@@ -329,6 +330,9 @@ void allocatePortBuffers(sp<IOmxNode> omxNode,
                         PortMode portMode = PortMode::PRESET_BYTE_BUFFER,
                         PortMode portMode = PortMode::PRESET_BYTE_BUFFER,
                         bool allocGrap = false);
                         bool allocGrap = false);


void freePortBuffers(android::Vector<BufferInfo>* buffArray, PortMode portMode,
                     bool allocGrap = false);

void changeStateLoadedtoIdle(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
void changeStateLoadedtoIdle(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
                             android::Vector<BufferInfo>* iBuffer,
                             android::Vector<BufferInfo>* iBuffer,
                             android::Vector<BufferInfo>* oBuffer,
                             android::Vector<BufferInfo>* oBuffer,
@@ -338,8 +342,9 @@ void changeStateLoadedtoIdle(sp<IOmxNode> omxNode, sp<CodecObserver> observer,


void changeStateIdletoLoaded(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
void changeStateIdletoLoaded(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
                             android::Vector<BufferInfo>* iBuffer,
                             android::Vector<BufferInfo>* iBuffer,
                             android::Vector<BufferInfo>* oBuffer,
                             android::Vector<BufferInfo>* oBuffer, OMX_U32 kPortIndexInput,
                             OMX_U32 kPortIndexInput, OMX_U32 kPortIndexOutput);
                             OMX_U32 kPortIndexOutput, PortMode* portMode = nullptr,
                             bool allocGrap = false);


void changeStateIdletoExecute(sp<IOmxNode> omxNode, sp<CodecObserver> observer);
void changeStateIdletoExecute(sp<IOmxNode> omxNode, sp<CodecObserver> observer);


+19 −18
Original line number Original line Diff line number Diff line
@@ -451,6 +451,7 @@ void portReconfiguration(sp<IOmxNode> omxNode, sp<CodecObserver> observer,
                    status,
                    status,
                    android::hardware::media::omx::V1_0::Status::TIMED_OUT);
                    android::hardware::media::omx::V1_0::Status::TIMED_OUT);


                ASSERT_NO_FATAL_FAILURE(freePortBuffers(oBuffer, oPortMode, true));
                ASSERT_NO_FATAL_FAILURE(allocatePortBuffers(
                ASSERT_NO_FATAL_FAILURE(allocatePortBuffers(
                    omxNode, oBuffer, kPortIndexOutput, oPortMode, true));
                    omxNode, oBuffer, kPortIndexOutput, oPortMode, true));
                status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT,
                status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT,
@@ -853,9 +854,9 @@ TEST_P(VideoDecHidlTest, DecodeTest) {
    ASSERT_NO_FATAL_FAILURE(
    ASSERT_NO_FATAL_FAILURE(
        changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer));
        changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer));
    // set state to executing
    // set state to executing
    ASSERT_NO_FATAL_FAILURE(changeStateIdletoLoaded(omxNode, observer, &iBuffer,
    ASSERT_NO_FATAL_FAILURE(changeStateIdletoLoaded(omxNode, observer, &iBuffer, &oBuffer,
                                                    &oBuffer, kPortIndexInput,
                                                    kPortIndexInput, kPortIndexOutput, portMode,
                                                    kPortIndexOutput));
                                                    true));
}
}


// Test for adaptive playback support
// Test for adaptive playback support
@@ -1001,9 +1002,9 @@ TEST_P(VideoDecHidlTest, AdaptivePlaybackTest) {
    ASSERT_NO_FATAL_FAILURE(
    ASSERT_NO_FATAL_FAILURE(
        changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer));
        changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer));
    // set state to executing
    // set state to executing
    ASSERT_NO_FATAL_FAILURE(changeStateIdletoLoaded(omxNode, observer, &iBuffer,
    ASSERT_NO_FATAL_FAILURE(changeStateIdletoLoaded(omxNode, observer, &iBuffer, &oBuffer,
                                                    &oBuffer, kPortIndexInput,
                                                    kPortIndexInput, kPortIndexOutput, portMode,
                                                    kPortIndexOutput));
                                                    true));
}
}


// end of sequence test
// end of sequence test
@@ -1067,9 +1068,9 @@ TEST_P(VideoDecHidlTest, EOSTest_M) {
    ASSERT_NO_FATAL_FAILURE(
    ASSERT_NO_FATAL_FAILURE(
        changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer));
        changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer));
    // set state to executing
    // set state to executing
    ASSERT_NO_FATAL_FAILURE(changeStateIdletoLoaded(omxNode, observer, &iBuffer,
    ASSERT_NO_FATAL_FAILURE(changeStateIdletoLoaded(omxNode, observer, &iBuffer, &oBuffer,
                                                    &oBuffer, kPortIndexInput,
                                                    kPortIndexInput, kPortIndexOutput, portMode,
                                                    kPortIndexOutput));
                                                    true));
}
}


// end of sequence test
// end of sequence test
@@ -1188,9 +1189,9 @@ TEST_P(VideoDecHidlTest, ThumbnailTest) {
    ASSERT_NO_FATAL_FAILURE(
    ASSERT_NO_FATAL_FAILURE(
        changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer));
        changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer));
    // set state to executing
    // set state to executing
    ASSERT_NO_FATAL_FAILURE(changeStateIdletoLoaded(omxNode, observer, &iBuffer,
    ASSERT_NO_FATAL_FAILURE(changeStateIdletoLoaded(omxNode, observer, &iBuffer, &oBuffer,
                                                    &oBuffer, kPortIndexInput,
                                                    kPortIndexInput, kPortIndexOutput, portMode,
                                                    kPortIndexOutput));
                                                    true));
}
}


// end of sequence test
// end of sequence test
@@ -1295,9 +1296,9 @@ TEST_P(VideoDecHidlTest, SimpleEOSTest) {
    ASSERT_NO_FATAL_FAILURE(
    ASSERT_NO_FATAL_FAILURE(
        changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer));
        changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer));
    // set state to executing
    // set state to executing
    ASSERT_NO_FATAL_FAILURE(changeStateIdletoLoaded(omxNode, observer, &iBuffer,
    ASSERT_NO_FATAL_FAILURE(changeStateIdletoLoaded(omxNode, observer, &iBuffer, &oBuffer,
                                                    &oBuffer, kPortIndexInput,
                                                    kPortIndexInput, kPortIndexOutput, portMode,
                                                    kPortIndexOutput));
                                                    true));
}
}


// test input/output port flush
// test input/output port flush
@@ -1414,9 +1415,9 @@ TEST_P(VideoDecHidlTest, FlushTest) {
    ASSERT_NO_FATAL_FAILURE(
    ASSERT_NO_FATAL_FAILURE(
        changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer));
        changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer));
    // set state to executing
    // set state to executing
    ASSERT_NO_FATAL_FAILURE(changeStateIdletoLoaded(omxNode, observer, &iBuffer,
    ASSERT_NO_FATAL_FAILURE(changeStateIdletoLoaded(omxNode, observer, &iBuffer, &oBuffer,
                                                    &oBuffer, kPortIndexInput,
                                                    kPortIndexInput, kPortIndexOutput, portMode,
                                                    kPortIndexOutput));
                                                    true));
}
}


GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(VideoDecHidlTest);
GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(VideoDecHidlTest);
+9 −12
Original line number Original line Diff line number Diff line
@@ -1057,9 +1057,9 @@ TEST_P(VideoEncHidlTest, BufferSourceCallBacks) {
    ASSERT_NO_FATAL_FAILURE(changeStateExecutetoIdle(
    ASSERT_NO_FATAL_FAILURE(changeStateExecutetoIdle(
        omxNode, observer, &buffersource->iBuffer, &buffersource->oBuffer));
        omxNode, observer, &buffersource->iBuffer, &buffersource->oBuffer));
    // set state to executing
    // set state to executing
    ASSERT_NO_FATAL_FAILURE(changeStateIdletoLoaded(
    ASSERT_NO_FATAL_FAILURE(changeStateIdletoLoaded(omxNode, observer, &buffersource->iBuffer,
        omxNode, observer, &buffersource->iBuffer, &buffersource->oBuffer,
                                                    &buffersource->oBuffer, kPortIndexInput,
        kPortIndexInput, kPortIndexOutput));
                                                    kPortIndexOutput, portMode));
    // test for callbacks
    // test for callbacks
    EXPECT_EQ(buffersource->callback, 31);
    EXPECT_EQ(buffersource->callback, 31);
}
}
@@ -1174,9 +1174,8 @@ TEST_P(VideoEncHidlTest, EncodeTest) {
    ASSERT_NO_FATAL_FAILURE(
    ASSERT_NO_FATAL_FAILURE(
        changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer));
        changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer));
    // set state to executing
    // set state to executing
    ASSERT_NO_FATAL_FAILURE(changeStateIdletoLoaded(omxNode, observer, &iBuffer,
    ASSERT_NO_FATAL_FAILURE(changeStateIdletoLoaded(omxNode, observer, &iBuffer, &oBuffer,
                                                    &oBuffer, kPortIndexInput,
                                                    kPortIndexInput, kPortIndexOutput, portMode));
                                                    kPortIndexOutput));
}
}


// test raw stream encode (input is ANW buffers)
// test raw stream encode (input is ANW buffers)
@@ -1337,9 +1336,8 @@ TEST_P(VideoEncHidlTest, EncodeTestBufferMetaModes) {
        changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer));
        changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer));
    EXPECT_EQ(portDef.nBufferCountActual, listener->freeBuffers);
    EXPECT_EQ(portDef.nBufferCountActual, listener->freeBuffers);
    // set state to executing
    // set state to executing
    ASSERT_NO_FATAL_FAILURE(changeStateIdletoLoaded(omxNode, observer, &iBuffer,
    ASSERT_NO_FATAL_FAILURE(changeStateIdletoLoaded(omxNode, observer, &iBuffer, &oBuffer,
                                                    &oBuffer, kPortIndexInput,
                                                    kPortIndexInput, kPortIndexOutput, portMode));
                                                    kPortIndexOutput));


    returnval = producer->disconnect(
    returnval = producer->disconnect(
        NATIVE_WINDOW_API_CPU, IGraphicBufferProducer::DisconnectMode::API);
        NATIVE_WINDOW_API_CPU, IGraphicBufferProducer::DisconnectMode::API);
@@ -1452,9 +1450,8 @@ TEST_P(VideoEncHidlTest, EncodeTestEOS) {
        changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer));
        changeStateExecutetoIdle(omxNode, observer, &iBuffer, &oBuffer));
    EXPECT_EQ(portDef.nBufferCountActual, listener->freeBuffers);
    EXPECT_EQ(portDef.nBufferCountActual, listener->freeBuffers);
    // set state to executing
    // set state to executing
    ASSERT_NO_FATAL_FAILURE(changeStateIdletoLoaded(omxNode, observer, &iBuffer,
    ASSERT_NO_FATAL_FAILURE(changeStateIdletoLoaded(omxNode, observer, &iBuffer, &oBuffer,
                                                    &oBuffer, kPortIndexInput,
                                                    kPortIndexInput, kPortIndexOutput, portMode));
                                                    kPortIndexOutput));


    returnval = producer->disconnect(
    returnval = producer->disconnect(
        NATIVE_WINDOW_API_CPU, IGraphicBufferProducer::DisconnectMode::API);
        NATIVE_WINDOW_API_CPU, IGraphicBufferProducer::DisconnectMode::API);