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

Commit 6fab64b6 authored by Treehugger Robot's avatar Treehugger Robot Committed by Automerger Merge Worker
Browse files

Merge "MediaTesting: Validate bitstream for Opus WriteTest" am: 04f759bf

Change-Id: I9f9065c074a204fa023fdafd1399e2f8a0489004
parents 42c1c38d 04f759bf
Loading
Loading
Loading
Loading
+41 −20
Original line number Original line Diff line number Diff line
@@ -89,17 +89,19 @@ class OpusHeaderParseTest : public OpusHeaderTest,


class OpusHeaderWriteTest
class OpusHeaderWriteTest
    : public OpusHeaderTest,
    : 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) {
TEST_P(OpusHeaderWriteTest, WriteTest) {
    tuple<int32_t, int32_t, string> params = GetParam();
    OpusHeader writtenHeader;
    OpusHeader writtenHeader;
    memset(&writtenHeader, 0, sizeof(writtenHeader));
    memset(&writtenHeader, 0, sizeof(writtenHeader));
    int32_t channels = GetParam().first;
    int32_t channels = get<0>(params);
    writtenHeader.channels = channels;
    writtenHeader.channels = channels;
    writtenHeader.num_streams = channels;
    writtenHeader.num_streams = channels;
    writtenHeader.channel_mapping = ((channels > 8) ? 255 : (channels > 2));
    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;
    writtenHeader.skip_samples = skipSamples;
    uint64_t codecDelayNs = skipSamples * kNsecPerSec / kOpusSampleRate;
    uint64_t codecDelayNs = skipSamples * kNsecPerSec / kOpusSampleRate;
    uint8_t headerData[kMaxOpusHeaderSize];
    uint8_t headerData[kMaxOpusHeaderSize];
@@ -112,11 +114,29 @@ TEST_P(OpusHeaderWriteTest, WriteTest) {
    ofstream ostrm;
    ofstream ostrm;
    ostrm.open(OUTPUT_FILE_NAME, ofstream::binary);
    ostrm.open(OUTPUT_FILE_NAME, ofstream::binary);
    ASSERT_TRUE(ostrm.is_open()) << "Failed to open output file " << OUTPUT_FILE_NAME;
    ASSERT_TRUE(ostrm.is_open()) << "Failed to open output file " << OUTPUT_FILE_NAME;

    ostrm.write(reinterpret_cast<char *>(headerData), headerSize);
    // TODO : Validate bitstream (b/150116402)
    ostrm.write(reinterpret_cast<char *>(headerData), sizeof(headerData));
    ostrm.close();
    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 opusHeadSize = 0;
    size_t codecDelayBufSize = 0;
    size_t codecDelayBufSize = 0;
    size_t seekPreRollBufSize = 0;
    size_t seekPreRollBufSize = 0;
@@ -266,19 +286,20 @@ TEST_P(OpusHeaderParseTest, ParseTest) {
    }
    }
}
}


INSTANTIATE_TEST_SUITE_P(OpusHeaderTestAll, OpusHeaderWriteTest,
INSTANTIATE_TEST_SUITE_P(
                         ::testing::Values(make_pair(1, 312),
        OpusHeaderTestAll, OpusHeaderWriteTest,
                                           make_pair(2, 312),
        ::testing::Values(make_tuple(1, 312, "output_channels_1skipSamples_312.opus"),
                                           make_pair(5, 312),
                          make_tuple(2, 312, "output_channels_2skipSamples_312.opus"),
                                           make_pair(6, 312),
                          make_tuple(5, 312, "output_channels_5skipSamples_312.opus"),
                                           make_pair(1, 0),
                          make_tuple(6, 312, "output_channels_6skipSamples_312.opus"),
                                           make_pair(2, 0),
                          make_tuple(1, 0, "output_channels_1skipSamples_0.opus"),
                                           make_pair(5, 0),
                          make_tuple(2, 0, "output_channels_2skipSamples_0.opus"),
                                           make_pair(6, 0),
                          make_tuple(5, 0, "output_channels_5skipSamples_0.opus"),
                                           make_pair(1, 624),
                          make_tuple(6, 0, "output_channels_6skipSamples_0.opus"),
                                           make_pair(2, 624),
                          make_tuple(1, 624, "output_channels_1skipSamples_624.opus"),
                                           make_pair(5, 624),
                          make_tuple(2, 624, "output_channels_2skipSamples_624.opus"),
                                           make_pair(6, 624)));
                          make_tuple(5, 624, "output_channels_5skipSamples_624.opus"),
                          make_tuple(6, 624, "output_channels_6skipSamples_624.opus")));


INSTANTIATE_TEST_SUITE_P(
INSTANTIATE_TEST_SUITE_P(
        OpusHeaderTestAll, OpusHeaderParseTest,
        OpusHeaderTestAll, OpusHeaderParseTest,