Merge "MediaTesting: Validate bitstream for Opus WriteTest" am: 04f759bfd4 am: 6fab64b62f am: e9026b5601 am: b2b8d627a7
Change-Id: I494dee031d471212588e3e66af32191239ec98d2
diff --git a/media/libstagefright/foundation/tests/OpusHeader/OpusHeaderTest.cpp b/media/libstagefright/foundation/tests/OpusHeader/OpusHeaderTest.cpp
index d142781..e39c915 100644
--- a/media/libstagefright/foundation/tests/OpusHeader/OpusHeaderTest.cpp
+++ b/media/libstagefright/foundation/tests/OpusHeader/OpusHeaderTest.cpp
@@ -89,17 +89,19 @@
class OpusHeaderWriteTest
: public OpusHeaderTest,
- public ::testing::TestWithParam<pair<int32_t /* ChannelCount */, int32_t /* skipSamples */>> {
-};
+ public ::testing::TestWithParam<tuple<int32_t /* ChannelCount */, int32_t /* skipSamples */,
+ string /* referenceFile */>> {};
TEST_P(OpusHeaderWriteTest, WriteTest) {
+ tuple<int32_t, int32_t, string> params = GetParam();
OpusHeader writtenHeader;
memset(&writtenHeader, 0, sizeof(writtenHeader));
- int32_t channels = GetParam().first;
+ int32_t channels = get<0>(params);
writtenHeader.channels = channels;
writtenHeader.num_streams = channels;
writtenHeader.channel_mapping = ((channels > 8) ? 255 : (channels > 2));
- int32_t skipSamples = GetParam().second;
+ int32_t skipSamples = get<1>(params);
+ string referenceFileName = gEnv->getRes() + get<2>(params);
writtenHeader.skip_samples = skipSamples;
uint64_t codecDelayNs = skipSamples * kNsecPerSec / kOpusSampleRate;
uint8_t headerData[kMaxOpusHeaderSize];
@@ -112,11 +114,29 @@
ofstream ostrm;
ostrm.open(OUTPUT_FILE_NAME, ofstream::binary);
ASSERT_TRUE(ostrm.is_open()) << "Failed to open output file " << OUTPUT_FILE_NAME;
-
- // TODO : Validate bitstream (b/150116402)
- ostrm.write(reinterpret_cast<char *>(headerData), sizeof(headerData));
+ ostrm.write(reinterpret_cast<char *>(headerData), headerSize);
ostrm.close();
+ mEleStream.open(referenceFileName, ifstream::binary);
+ ASSERT_EQ(mEleStream.is_open(), true) << "Failed to open referenceFileName " << get<2>(params);
+
+ struct stat buf;
+ int32_t statStatus = stat(referenceFileName.c_str(), &buf);
+ ASSERT_EQ(statStatus, 0) << "Unable to get file properties";
+
+ size_t fileSize = buf.st_size;
+ mInputBuffer = (uint8_t *)malloc(fileSize);
+ ASSERT_NE(mInputBuffer, nullptr) << "Insufficient memory. Malloc failed for size " << fileSize;
+
+ mEleStream.read(reinterpret_cast<char *>(mInputBuffer), fileSize);
+ ASSERT_EQ(mEleStream.gcount(), fileSize) << "mEleStream.gcount() != bytesCount";
+
+ ASSERT_EQ(fileSize, headerSize)
+ << "Mismatch in size between header generated and reference header";
+ int32_t match = memcmp(reinterpret_cast<char *>(mInputBuffer),
+ reinterpret_cast<char *>(headerData), fileSize);
+ ASSERT_EQ(match, 0) << "Opus header does not match reference file: " << referenceFileName;
+
size_t opusHeadSize = 0;
size_t codecDelayBufSize = 0;
size_t seekPreRollBufSize = 0;
@@ -266,19 +286,20 @@
}
}
-INSTANTIATE_TEST_SUITE_P(OpusHeaderTestAll, OpusHeaderWriteTest,
- ::testing::Values(make_pair(1, 312),
- make_pair(2, 312),
- make_pair(5, 312),
- make_pair(6, 312),
- make_pair(1, 0),
- make_pair(2, 0),
- make_pair(5, 0),
- make_pair(6, 0),
- make_pair(1, 624),
- make_pair(2, 624),
- make_pair(5, 624),
- make_pair(6, 624)));
+INSTANTIATE_TEST_SUITE_P(
+ OpusHeaderTestAll, OpusHeaderWriteTest,
+ ::testing::Values(make_tuple(1, 312, "output_channels_1skipSamples_312.opus"),
+ make_tuple(2, 312, "output_channels_2skipSamples_312.opus"),
+ make_tuple(5, 312, "output_channels_5skipSamples_312.opus"),
+ make_tuple(6, 312, "output_channels_6skipSamples_312.opus"),
+ make_tuple(1, 0, "output_channels_1skipSamples_0.opus"),
+ make_tuple(2, 0, "output_channels_2skipSamples_0.opus"),
+ make_tuple(5, 0, "output_channels_5skipSamples_0.opus"),
+ make_tuple(6, 0, "output_channels_6skipSamples_0.opus"),
+ make_tuple(1, 624, "output_channels_1skipSamples_624.opus"),
+ make_tuple(2, 624, "output_channels_2skipSamples_624.opus"),
+ make_tuple(5, 624, "output_channels_5skipSamples_624.opus"),
+ make_tuple(6, 624, "output_channels_6skipSamples_624.opus")));
INSTANTIATE_TEST_SUITE_P(
OpusHeaderTestAll, OpusHeaderParseTest,