C2 VTS: Cleanup code around query() calls
- Cleaned up the code that was reading parameters returned in query()
- Ensure both return value and size of parameter vector are valid
- Use ASSERT_EQ() instead of if () checks after query()
Also added a missing ASSERT for verifying number of channels in gsm
decoder tests
Bug: 200329093
Test: atest VtsHalMediaC2V1_0TargetAudioDecTest \
VtsHalMediaC2V1_0TargetAudioEncTest \
VtsHalMediaC2V1_0TargetVideoDecTest \
VtsHalMediaC2V1_0TargetVideoEncTest \
VtsHalMediaC2V1_0TargetComponentTest \
VtsHalMediaC2V1_0TargetMasterTest
Change-Id: I3a910fcea6927f1ed48d2457d333a8bc92ee1dcf
Merged-In: I3a910fcea6927f1ed48d2457d333a8bc92ee1dcf
diff --git a/media/codec2/hidl/1.0/vts/functional/audio/VtsHalMediaC2V1_0TargetAudioDecTest.cpp b/media/codec2/hidl/1.0/vts/functional/audio/VtsHalMediaC2V1_0TargetAudioDecTest.cpp
index 74b099c..9e3a823 100644
--- a/media/codec2/hidl/1.0/vts/functional/audio/VtsHalMediaC2V1_0TargetAudioDecTest.cpp
+++ b/media/codec2/hidl/1.0/vts/functional/audio/VtsHalMediaC2V1_0TargetAudioDecTest.cpp
@@ -100,8 +100,10 @@
ASSERT_NE(mLinearPool, nullptr);
std::vector<std::unique_ptr<C2Param>> queried;
- mComponent->query({}, {C2PortMediaTypeSetting::input::PARAM_TYPE}, C2_DONT_BLOCK, &queried);
- ASSERT_GT(queried.size(), 0);
+ c2_status_t c2err = mComponent->query({}, {C2PortMediaTypeSetting::input::PARAM_TYPE},
+ C2_DONT_BLOCK, &queried);
+ ASSERT_EQ(c2err, C2_OK) << "Query media type failed";
+ ASSERT_EQ(queried.size(), 1) << "Size of the vector returned is invalid";
mMime = ((C2PortMediaTypeSetting::input*)queried[0].get())->m.value;
@@ -277,24 +279,20 @@
};
std::vector<std::unique_ptr<C2Param>> inParams;
c2_status_t status = component->query({}, indices, C2_DONT_BLOCK, &inParams);
- if (status != C2_OK && inParams.size() == 0) {
- ALOGE("Query media type failed => %d", status);
- ASSERT_TRUE(false);
- } else {
- size_t offset = sizeof(C2Param);
- for (size_t i = 0; i < inParams.size(); ++i) {
- C2Param* param = inParams[i].get();
- bitStreamInfo[i] = *(int32_t*)((uint8_t*)param + offset);
- }
- if (mime.find("3gpp") != std::string::npos) {
- ASSERT_EQ(bitStreamInfo[0], 8000);
- ASSERT_EQ(bitStreamInfo[1], 1);
- } else if (mime.find("amr-wb") != std::string::npos) {
- ASSERT_EQ(bitStreamInfo[0], 16000);
- ASSERT_EQ(bitStreamInfo[1], 1);
- } else if (mime.find("gsm") != std::string::npos) {
- ASSERT_EQ(bitStreamInfo[0], 8000);
- }
+ ASSERT_EQ(status, C2_OK) << "Query sample rate and channel count info failed";
+ ASSERT_EQ(inParams.size(), indices.size()) << "Size of the vector returned is invalid";
+
+ bitStreamInfo[0] = C2StreamSampleRateInfo::output::From(inParams[0].get())->value;
+ bitStreamInfo[1] = C2StreamChannelCountInfo::output::From(inParams[1].get())->value;
+ if (mime.find("3gpp") != std::string::npos) {
+ ASSERT_EQ(bitStreamInfo[0], 8000);
+ ASSERT_EQ(bitStreamInfo[1], 1);
+ } else if (mime.find("amr-wb") != std::string::npos) {
+ ASSERT_EQ(bitStreamInfo[0], 16000);
+ ASSERT_EQ(bitStreamInfo[1], 1);
+ } else if (mime.find("gsm") != std::string::npos) {
+ ASSERT_EQ(bitStreamInfo[0], 8000);
+ ASSERT_EQ(bitStreamInfo[1], 1);
}
}
diff --git a/media/codec2/hidl/1.0/vts/functional/audio/VtsHalMediaC2V1_0TargetAudioEncTest.cpp b/media/codec2/hidl/1.0/vts/functional/audio/VtsHalMediaC2V1_0TargetAudioEncTest.cpp
index 1dc037a..bd7ec0d 100644
--- a/media/codec2/hidl/1.0/vts/functional/audio/VtsHalMediaC2V1_0TargetAudioEncTest.cpp
+++ b/media/codec2/hidl/1.0/vts/functional/audio/VtsHalMediaC2V1_0TargetAudioEncTest.cpp
@@ -73,9 +73,10 @@
ASSERT_NE(mLinearPool, nullptr);
std::vector<std::unique_ptr<C2Param>> queried;
- mComponent->query({}, {C2PortMediaTypeSetting::output::PARAM_TYPE}, C2_DONT_BLOCK,
- &queried);
- ASSERT_GT(queried.size(), 0);
+ c2_status_t c2err = mComponent->query({}, {C2PortMediaTypeSetting::output::PARAM_TYPE},
+ C2_DONT_BLOCK, &queried);
+ ASSERT_EQ(c2err, C2_OK) << "Query media type failed";
+ ASSERT_EQ(queried.size(), 1) << "Size of the vector returned is invalid";
mMime = ((C2PortMediaTypeSetting::output*)queried[0].get())->m.value;
mEos = false;
@@ -84,16 +85,10 @@
mEncoderFrameSize = 0;
mWorkResult = C2_OK;
mOutputSize = 0u;
- getInputMaxBufSize();
-
- c2_status_t status = getChannelCount(&mNumChannels);
- ASSERT_EQ(status, C2_OK) << "Unable to get supported channel count";
-
- status = getSampleRate(&mSampleRate);
- ASSERT_EQ(status, C2_OK) << "Unable to get supported sample rate";
-
- status = getSamplesPerFrame(mNumChannels, &mSamplesPerFrame);
- ASSERT_EQ(status, C2_OK) << "Unable to get supported number of samples per frame";
+ ASSERT_NO_FATAL_FAILURE(getInputMaxBufSize());
+ ASSERT_NO_FATAL_FAILURE(getChannelCount(&mNumChannels));
+ ASSERT_NO_FATAL_FAILURE(getSampleRate(&mSampleRate));
+ ASSERT_NO_FATAL_FAILURE(getSamplesPerFrame(mNumChannels, &mSamplesPerFrame));
getFile(mNumChannels, mSampleRate);
}
@@ -109,9 +104,9 @@
// Get the test parameters from GetParam call.
virtual void getParams() {}
- c2_status_t getChannelCount(int32_t* nChannels);
- c2_status_t getSampleRate(int32_t* nSampleRate);
- c2_status_t getSamplesPerFrame(int32_t nChannels, int32_t* samplesPerFrame);
+ void getChannelCount(int32_t* nChannels);
+ void getSampleRate(int32_t* nSampleRate);
+ void getSamplesPerFrame(int32_t nChannels, int32_t* samplesPerFrame);
void getFile(int32_t channelCount, int32_t sampleRate);
@@ -175,21 +170,13 @@
// In encoder components, fetch the size of input buffer allocated
void getInputMaxBufSize() {
- int32_t bitStreamInfo[1] = {0};
std::vector<std::unique_ptr<C2Param>> inParams;
c2_status_t status = mComponent->query({}, {C2StreamMaxBufferSizeInfo::input::PARAM_TYPE},
C2_DONT_BLOCK, &inParams);
- if (status != C2_OK && inParams.size() == 0) {
- ALOGE("Query MaxBufferSizeInfo failed => %d", status);
- ASSERT_TRUE(false);
- } else {
- size_t offset = sizeof(C2Param);
- for (size_t i = 0; i < inParams.size(); ++i) {
- C2Param* param = inParams[i].get();
- bitStreamInfo[i] = *(int32_t*)((uint8_t*)param + offset);
- }
- }
- mInputMaxBufSize = bitStreamInfo[0];
+ ASSERT_EQ(status, C2_OK) << "Query max buffer size info failed";
+ ASSERT_EQ(inParams.size(), 1) << "Size of the vector returned is invalid";
+
+ mInputMaxBufSize = C2StreamMaxBufferSizeInfo::input::From(inParams[0].get())->value;
}
};
@@ -245,17 +232,15 @@
return false;
}
-c2_status_t Codec2AudioEncHidlTestBase::getChannelCount(int32_t* nChannels) {
+void Codec2AudioEncHidlTestBase::getChannelCount(int32_t* nChannels) {
std::unique_ptr<C2StreamChannelCountInfo::input> channelCount =
std::make_unique<C2StreamChannelCountInfo::input>();
std::vector<C2FieldSupportedValuesQuery> validValueInfos = {
C2FieldSupportedValuesQuery::Current(
C2ParamField(channelCount.get(), &C2StreamChannelCountInfo::value))};
c2_status_t c2err = mComponent->querySupportedValues(validValueInfos, C2_DONT_BLOCK);
- if (c2err != C2_OK || validValueInfos.size() != 1u) {
- ALOGE("querySupportedValues_vb failed for channelCount");
- return c2err;
- }
+ ASSERT_EQ(c2err, C2_OK) << "Query channel count info failed";
+ ASSERT_EQ(validValueInfos.size(), 1) << "Size of the vector returned is invalid";
// setting default value of channelCount
*nChannels = 1;
@@ -282,48 +267,45 @@
break;
}
default:
+ ASSERT_TRUE(false) << "Unsupported type: " << c2FSV.type;
break;
}
- return C2_OK;
+ return;
}
-c2_status_t Codec2AudioEncHidlTestBase::getSampleRate(int32_t* nSampleRate) {
+void Codec2AudioEncHidlTestBase::getSampleRate(int32_t* nSampleRate) {
// Use the default sample rate for mComponents
std::vector<std::unique_ptr<C2Param>> queried;
c2_status_t c2err = mComponent->query({}, {C2StreamSampleRateInfo::input::PARAM_TYPE},
C2_DONT_BLOCK, &queried);
- if (c2err != C2_OK || queried.size() == 0) return c2err;
+ ASSERT_EQ(c2err, C2_OK) << "Query sample rate info failed";
+ ASSERT_EQ(queried.size(), 1) << "Size of the vector returned is invalid";
- size_t offset = sizeof(C2Param);
- C2Param* param = queried[0].get();
- *nSampleRate = *(int32_t*)((uint8_t*)param + offset);
-
- return C2_OK;
+ *nSampleRate = C2StreamSampleRateInfo::input::From(queried[0].get())->value;
+ return;
}
-c2_status_t Codec2AudioEncHidlTestBase::getSamplesPerFrame(int32_t nChannels,
- int32_t* samplesPerFrame) {
+void Codec2AudioEncHidlTestBase::getSamplesPerFrame(int32_t nChannels, int32_t* samplesPerFrame) {
std::vector<std::unique_ptr<C2Param>> queried;
c2_status_t c2err = mComponent->query({}, {C2StreamAudioFrameSizeInfo::input::PARAM_TYPE},
C2_DONT_BLOCK, &queried);
- size_t offset = sizeof(C2Param);
- if (c2err == C2_OK && queried.size()) {
- C2Param* param = queried[0].get();
- mEncoderFrameSize = *(uint32_t*)((uint8_t*)param + offset);
+
+ if (c2err == C2_OK && queried.size() == 1) {
+ mEncoderFrameSize = C2StreamAudioFrameSizeInfo::input::From(queried[0].get())->value;
if (mEncoderFrameSize) {
*samplesPerFrame = mEncoderFrameSize;
- return C2_OK;
+ return;
}
}
c2err = mComponent->query({}, {C2StreamMaxBufferSizeInfo::input::PARAM_TYPE}, C2_DONT_BLOCK,
&queried);
- if (c2err != C2_OK || queried.size() == 0) return c2err;
+ ASSERT_EQ(c2err, C2_OK) << "Query max buffer size info failed";
+ ASSERT_EQ(queried.size(), 1) << "Size of the vector returned is invalid";
- C2Param* param = queried[0].get();
- uint32_t maxInputSize = *(uint32_t*)((uint8_t*)param + offset);
+ uint32_t maxInputSize = C2StreamMaxBufferSizeInfo::input::From(queried[0].get())->value;
*samplesPerFrame = std::min((maxInputSize / (nChannels * 2)), kMaxSamplesPerFrame);
- return C2_OK;
+ return;
}
// LookUpTable of clips and metadata for component testing
@@ -619,12 +601,11 @@
std::vector<std::unique_ptr<C2Param>> inParams;
c2_status_t c2_status = mComponent->query({}, {C2StreamChannelCountInfo::input::PARAM_TYPE},
C2_DONT_BLOCK, &inParams);
- ASSERT_TRUE(!c2_status && inParams.size())
- << "Query configured channelCount failed => %d" << c2_status;
+ ASSERT_EQ(c2_status, C2_OK) << "Query channel count info failed";
+ ASSERT_EQ(inParams.size(), 1) << "Size of the vector returned is invalid";
- size_t offset = sizeof(C2Param);
- C2Param* param = inParams[0].get();
- int32_t channelCount = *(int32_t*)((uint8_t*)param + offset);
+ int32_t channelCount = C2StreamChannelCountInfo::input::From(inParams[0].get())->value;
+
if (channelCount != nChannels) {
std::cout << "[ WARN ] Test Skipped for ChannelCount " << nChannels << "\n";
continue;
@@ -708,13 +689,11 @@
std::vector<std::unique_ptr<C2Param>> inParams;
c2_status_t c2_status = mComponent->query({}, {C2StreamSampleRateInfo::input::PARAM_TYPE},
C2_DONT_BLOCK, &inParams);
+ ASSERT_EQ(c2_status, C2_OK) << "Query sample rate info failed";
+ ASSERT_EQ(inParams.size(), 1) << "Size of the vector returned is invalid";
- ASSERT_TRUE(!c2_status && inParams.size())
- << "Query configured SampleRate failed => %d" << c2_status;
- size_t offset = sizeof(C2Param);
- C2Param* param = inParams[0].get();
- int32_t configuredSampleRate = *(int32_t*)((uint8_t*)param + offset);
-
+ int32_t configuredSampleRate =
+ C2StreamSampleRateInfo::input::From(inParams[0].get())->value;
if (configuredSampleRate != nSampleRate) {
std::cout << "[ WARN ] Test Skipped for SampleRate " << nSampleRate << "\n";
continue;
diff --git a/media/codec2/hidl/1.0/vts/functional/video/VtsHalMediaC2V1_0TargetVideoDecTest.cpp b/media/codec2/hidl/1.0/vts/functional/video/VtsHalMediaC2V1_0TargetVideoDecTest.cpp
index 95a4674..67873fa 100644
--- a/media/codec2/hidl/1.0/vts/functional/video/VtsHalMediaC2V1_0TargetVideoDecTest.cpp
+++ b/media/codec2/hidl/1.0/vts/functional/video/VtsHalMediaC2V1_0TargetVideoDecTest.cpp
@@ -123,8 +123,10 @@
ASSERT_NE(mLinearPool, nullptr);
std::vector<std::unique_ptr<C2Param>> queried;
- mComponent->query({}, {C2PortMediaTypeSetting::input::PARAM_TYPE}, C2_DONT_BLOCK, &queried);
- ASSERT_GT(queried.size(), 0);
+ c2_status_t c2err = mComponent->query({}, {C2PortMediaTypeSetting::input::PARAM_TYPE},
+ C2_DONT_BLOCK, &queried);
+ ASSERT_EQ(c2err, C2_OK) << "Query media type failed";
+ ASSERT_EQ(queried.size(), 1) << "Size of the vector returned is invalid";
mMime = ((C2PortMediaTypeSetting::input*)queried[0].get())->m.value;
mEos = false;
diff --git a/media/codec2/hidl/1.0/vts/functional/video/VtsHalMediaC2V1_0TargetVideoEncTest.cpp b/media/codec2/hidl/1.0/vts/functional/video/VtsHalMediaC2V1_0TargetVideoEncTest.cpp
index a6507e7..366025f 100644
--- a/media/codec2/hidl/1.0/vts/functional/video/VtsHalMediaC2V1_0TargetVideoEncTest.cpp
+++ b/media/codec2/hidl/1.0/vts/functional/video/VtsHalMediaC2V1_0TargetVideoEncTest.cpp
@@ -74,9 +74,10 @@
ASSERT_NE(mGraphicPool, nullptr);
std::vector<std::unique_ptr<C2Param>> queried;
- mComponent->query({}, {C2PortMediaTypeSetting::output::PARAM_TYPE}, C2_DONT_BLOCK,
- &queried);
- ASSERT_GT(queried.size(), 0);
+ c2_status_t c2err = mComponent->query({}, {C2PortMediaTypeSetting::output::PARAM_TYPE},
+ C2_DONT_BLOCK, &queried);
+ ASSERT_EQ(c2err, C2_OK) << "Query media type failed";
+ ASSERT_EQ(queried.size(), 1) << "Size of the vector returned is invalid";
mMime = ((C2PortMediaTypeSetting::output*)queried[0].get())->m.value;
std::cout << "mime : " << mMime << "\n";
@@ -531,9 +532,17 @@
<< " resetting num BFrames to 0\n";
mConfigBPictures = false;
} else {
- size_t offset = sizeof(C2Param);
- C2Param* param = inParams[0].get();
- int32_t numBFrames = *(int32_t*)((uint8_t*)param + offset);
+ int32_t numBFrames = 0;
+ C2StreamGopTuning::output* gop = C2StreamGopTuning::output::From(inParams[0].get());
+ if (gop && gop->flexCount() >= 1) {
+ for (size_t i = 0; i < gop->flexCount(); ++i) {
+ const C2GopLayerStruct& layer = gop->m.values[i];
+ if (layer.type_ == C2Config::picture_type_t(P_FRAME | B_FRAME)) {
+ numBFrames = layer.count;
+ break;
+ }
+ }
+ }
if (!numBFrames) {
std::cout << "[ WARN ] Bframe not supported for " << mComponentName