From 4609857ee4313961df3eaf5ccd6850a2a2cdd288 Mon Sep 17 00:00:00 2001 From: Manisha Jajoo Date: Thu, 21 Jun 2018 14:05:31 +0530 Subject: omx:component: add support for tunneled components in ComponentTest Test: make vts -j99 BUILD_GOOGLE_VTS=true TARGET_PRODUCT=aosp_arm64 \ && vts-tradefed run commandAndExit vts \ --skip-all-system-status-check --primary-abi-only \ --skip-preconditions --module VtsHalMediaOmxV1_0Host \ -l INFO bug: 70933963 Change-Id: I5695820b225041f5b764506cdafacf7c95d836aa --- .../functional/common/media_hidl_test_common.cpp | 38 +++++++++++++++++----- .../VtsHalMediaOmxV1_0TargetComponentTest.cpp | 20 ++++++++++-- .../video/VtsHalMediaOmxV1_0TargetVideoDecTest.cpp | 10 ++++++ 3 files changed, 58 insertions(+), 10 deletions(-) (limited to 'media') diff --git a/media/omx/1.0/vts/functional/common/media_hidl_test_common.cpp b/media/omx/1.0/vts/functional/common/media_hidl_test_common.cpp index 34a96a0ce7..29be2a09b3 100644 --- a/media/omx/1.0/vts/functional/common/media_hidl_test_common.cpp +++ b/media/omx/1.0/vts/functional/common/media_hidl_test_common.cpp @@ -387,17 +387,28 @@ void changeStateLoadedtoIdle(sp omxNode, sp observer, OMX_StateIdle); ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK); + OMX_PARAM_PORTDEFINITIONTYPE portDefInput; + OMX_PARAM_PORTDEFINITIONTYPE portDefOutput; + status = getPortParam(omxNode, OMX_IndexParamPortDefinition, kPortIndexInput, &portDefInput); + EXPECT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK); + status = getPortParam(omxNode, OMX_IndexParamPortDefinition, kPortIndexOutput, &portDefOutput); + EXPECT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK); + // Dont switch states until the ports are populated - status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer); - ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::TIMED_OUT); + if (portDefInput.nBufferCountActual || portDefOutput.nBufferCountActual) { + status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer); + ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::TIMED_OUT); + } // allocate buffers on input port ASSERT_NO_FATAL_FAILURE(allocatePortBuffers( omxNode, iBuffer, kPortIndexInput, pm[0], allocGrap)); // Dont switch states until the ports are populated - status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer); - ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::TIMED_OUT); + if (portDefOutput.nBufferCountActual) { + status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer); + ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::TIMED_OUT); + } // allocate buffers on output port ASSERT_NO_FATAL_FAILURE(allocatePortBuffers( @@ -430,9 +441,18 @@ void changeStateIdletoLoaded(sp omxNode, sp observer, OMX_StateLoaded); ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK); + OMX_PARAM_PORTDEFINITIONTYPE portDefInput; + OMX_PARAM_PORTDEFINITIONTYPE portDefOutput; + status = getPortParam(omxNode, OMX_IndexParamPortDefinition, kPortIndexInput, &portDefInput); + EXPECT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK); + status = getPortParam(omxNode, OMX_IndexParamPortDefinition, kPortIndexOutput, &portDefOutput); + EXPECT_EQ(status, ::android::hardware::media::omx::V1_0::Status::OK); + // dont change state until all buffers are freed - status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer); - ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::TIMED_OUT); + if (portDefInput.nBufferCountActual || portDefOutput.nBufferCountActual) { + status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer); + ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::TIMED_OUT); + } for (size_t i = 0; i < iBuffer->size(); ++i) { status = omxNode->freeBuffer(kPortIndexInput, (*iBuffer)[i].id); @@ -440,8 +460,10 @@ void changeStateIdletoLoaded(sp omxNode, sp observer, } // dont change state until all buffers are freed - status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer); - ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::TIMED_OUT); + if (portDefOutput.nBufferCountActual) { + status = observer->dequeueMessage(&msg, DEFAULT_TIMEOUT, iBuffer, oBuffer); + ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::TIMED_OUT); + } for (size_t i = 0; i < oBuffer->size(); ++i) { status = omxNode->freeBuffer(kPortIndexOutput, (*oBuffer)[i].id); diff --git a/media/omx/1.0/vts/functional/component/VtsHalMediaOmxV1_0TargetComponentTest.cpp b/media/omx/1.0/vts/functional/component/VtsHalMediaOmxV1_0TargetComponentTest.cpp index 7750a12fac..2223583740 100644 --- a/media/omx/1.0/vts/functional/component/VtsHalMediaOmxV1_0TargetComponentTest.cpp +++ b/media/omx/1.0/vts/functional/component/VtsHalMediaOmxV1_0TargetComponentTest.cpp @@ -115,6 +115,7 @@ class ComponentHidlTest : public ::testing::VtsHalHidlTargetTestBase { } if (compClass == unknown_class) disableTest = true; isSecure = false; + mTunnel = false; size_t suffixLen = strlen(".secure"); if (strlen(gEnv->getComponent().c_str()) >= suffixLen) { isSecure = @@ -122,6 +123,18 @@ class ComponentHidlTest : public ::testing::VtsHalHidlTargetTestBase { strlen(gEnv->getComponent().c_str()) - suffixLen, ".secure"); } + if (compClass == video_decoder) { + omxNode->configureVideoTunnelMode( + 1, OMX_TRUE, 0, + [&](android::hardware::media::omx::V1_0::Status _s, + const ::android::hardware::hidl_handle& sidebandHandle) { + (void)sidebandHandle; + if (_s == android::hardware::media::omx::V1_0::Status::OK) + this->mTunnel = true; + }); + } + // NOTES: secure components are not covered in these tests. + // we are disabling tests for them if (disableTest) std::cout << "[ WARN ] Test Disabled \n"; } @@ -149,6 +162,7 @@ class ComponentHidlTest : public ::testing::VtsHalHidlTargetTestBase { sp observer; sp omxNode; standardCompClass compClass; + bool mTunnel; bool isSecure; bool disableTest; @@ -991,7 +1005,8 @@ TEST_F(ComponentHidlTest, PortEnableDisable_Idle) { ASSERT_NO_FATAL_FAILURE( changeStateLoadedtoIdle(omxNode, observer, &pBuffer[0], &pBuffer[1], kPortIndexInput, kPortIndexOutput, portMode)); - for (size_t i = portBase; i < portBase + 2; i++) { + int range = mTunnel ? 1 : 2; + for (size_t i = portBase; i < portBase + range; i++) { status = omxNode->sendCommand(toRawCommandType(OMX_CommandPortDisable), i); ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK); @@ -1104,7 +1119,8 @@ TEST_F(ComponentHidlTest, PortEnableDisable_Execute) { dispatchOutputBuffer(omxNode, &pBuffer[1], i, portMode[1])); } - for (size_t i = portBase; i < portBase + 2; i++) { + int range = mTunnel ? 1 : 2; + for (size_t i = portBase; i < portBase + range; i++) { status = omxNode->sendCommand(toRawCommandType(OMX_CommandPortDisable), i); ASSERT_EQ(status, android::hardware::media::omx::V1_0::Status::OK); diff --git a/media/omx/1.0/vts/functional/video/VtsHalMediaOmxV1_0TargetVideoDecTest.cpp b/media/omx/1.0/vts/functional/video/VtsHalMediaOmxV1_0TargetVideoDecTest.cpp index 1db9f7531a..df048c6bf2 100644 --- a/media/omx/1.0/vts/functional/video/VtsHalMediaOmxV1_0TargetVideoDecTest.cpp +++ b/media/omx/1.0/vts/functional/video/VtsHalMediaOmxV1_0TargetVideoDecTest.cpp @@ -153,7 +153,17 @@ class VideoDecHidlTest : public ::testing::VtsHalHidlTargetTestBase { ".secure"); } if (isSecure) disableTest = true; + omxNode->configureVideoTunnelMode( + 1, OMX_TRUE, 0, + [&](android::hardware::media::omx::V1_0::Status _s, + const ::android::hardware::hidl_handle& sidebandHandle) { + (void)sidebandHandle; + if (_s == android::hardware::media::omx::V1_0::Status::OK) + this->disableTest = true; + }); if (disableTest) std::cout << "[ WARN ] Test Disabled \n"; + // NOTES: secure and tunneled components are not covered in these tests. + // we are disabling tests for them } virtual void TearDown() override { -- cgit v1.2.3