Bug 1320895 - Test ADTS frame size calculation. r=gerald

We don't generate timestamps for ADTS but we can verify
the Init Segment Range and Media Segment Range returned
by the parser match the frame size declared in the
Init Segment header.

MozReview-Commit-ID: FCZfxn9b69R

--HG--
extra : rebase_source : 44e6f842b815fcc1f21c3b2425a729f3773af319
This commit is contained in:
Ralph Giles 2016-11-30 14:38:52 -08:00
parent d20f7b6309
commit 013b2b9c9f

View File

@ -71,6 +71,14 @@ TEST(ContainerParser, ADTSHeader) {
EXPECT_FALSE(NS_SUCCEEDED(parser->IsMediaSegmentPresent(header)))
<< "Found media segment when there was just a partial header.";
// Test a header with short data.
header = make_adts_header();
header->AppendElements(1);
EXPECT_TRUE(NS_SUCCEEDED(parser->IsInitSegmentPresent(header)))
<< "Rejected a valid header.";
EXPECT_TRUE(NS_SUCCEEDED(parser->IsMediaSegmentPresent(header)))
<< "Rejected a one-byte media segment.";
// Test parse results.
header = make_adts_header();
EXPECT_FALSE(NS_SUCCEEDED(parser->IsMediaSegmentPresent(header)))
@ -90,3 +98,47 @@ TEST(ContainerParser, ADTSHeader) {
EXPECT_EQ(parser->MediaHeaderRange(), MediaByteRange());
EXPECT_EQ(parser->MediaSegmentRange(), MediaByteRange());
}
TEST(ContainerParser, ADTSBlankMedia) {
nsAutoPtr<ContainerParser> parser;
parser = ContainerParser::CreateForMIMEType(NS_LITERAL_CSTRING("audio/aac"));
ASSERT_NE(parser, nullptr);
// Audio data should have no gaps.
EXPECT_EQ(parser->GetRoundingError(), 0);
// Test the header only.
RefPtr<MediaByteBuffer> header = make_adts_header();
EXPECT_TRUE(NS_SUCCEEDED(parser->IsInitSegmentPresent(header)));
// Test with the correct length of (invalid) frame data.
size_t header_length = header->Length();
size_t data_length = 24;
size_t frame_length = header_length + data_length;
header->AppendElements(data_length);
EXPECT_TRUE(NS_SUCCEEDED(parser->IsInitSegmentPresent(header)))
<< "Rejected a valid header.";
EXPECT_TRUE(NS_SUCCEEDED(parser->IsMediaSegmentPresent(header)))
<< "Rejected a full (but zeroed) media segment.";
int64_t start = 0;
int64_t end = 0;
// We don't report timestamps from ADTS.
EXPECT_TRUE(NS_FAILED(parser->ParseStartAndEndTimestamps(header, start, end)));
EXPECT_EQ(start, 0);
EXPECT_EQ(end, 0);
// Verify the parser calculated header and packet data boundaries.
EXPECT_TRUE(parser->HasInitData());
EXPECT_TRUE(parser->HasCompleteInitData());
MediaByteBuffer* init = parser->InitData();
ASSERT_NE(init, nullptr);
EXPECT_EQ(init->Length(), header_length)
<< "Found incorrect init segment length.";
EXPECT_EQ(parser->InitSegmentRange(),
MediaByteRange(0, int64_t(header_length)));
// In ADTS the Media Header is the same as the Media Segment.
MediaByteRange expected_media =
MediaByteRange(int64_t(header_length), int64_t(frame_length));
EXPECT_EQ(parser->MediaHeaderRange(), expected_media);
EXPECT_EQ(parser->MediaSegmentRange(), expected_media);
}