| Index: media/formats/webm/webm_cluster_parser_unittest.cc
|
| diff --git a/media/formats/webm/webm_cluster_parser_unittest.cc b/media/formats/webm/webm_cluster_parser_unittest.cc
|
| index 4edb82ec6d7d48379b5a42c823bf0a9b161ed2f4..bf797e87ec03fcf6a3c34c0a0e0d5bf6b5623209 100644
|
| --- a/media/formats/webm/webm_cluster_parser_unittest.cc
|
| +++ b/media/formats/webm/webm_cluster_parser_unittest.cc
|
| @@ -103,17 +103,19 @@ struct BlockInfo {
|
| // Default data will be used if no data given.
|
| const uint8_t* data;
|
| int data_length;
|
| +
|
| + bool is_key_frame;
|
| };
|
|
|
| const BlockInfo kDefaultBlockInfo[] = {
|
| - {kAudioTrackNum, 0, 23, true, NULL, 0},
|
| - {kAudioTrackNum, 23, 23, true, NULL, 0},
|
| + {kAudioTrackNum, 0, 23, true, NULL, 0, true},
|
| + {kAudioTrackNum, 23, 23, true, NULL, 0, true},
|
| // Assumes not using DefaultDuration
|
| - {kVideoTrackNum, 33, 34, true, NULL, 0},
|
| - {kAudioTrackNum, 46, 23, true, NULL, 0},
|
| - {kVideoTrackNum, 67, 33, false, NULL, 0},
|
| - {kAudioTrackNum, 69, 23, false, NULL, 0},
|
| - {kVideoTrackNum, 100, 33, false, NULL, 0},
|
| + {kVideoTrackNum, 33, 34, true, NULL, 0, true},
|
| + {kAudioTrackNum, 46, 23, true, NULL, 0, false},
|
| + {kVideoTrackNum, 67, 33, false, NULL, 0, true},
|
| + {kAudioTrackNum, 69, 23, false, NULL, 0, false},
|
| + {kVideoTrackNum, 100, 33, false, NULL, 0, false},
|
| };
|
|
|
| const uint8_t kEncryptedFrame[] = {
|
| @@ -144,20 +146,22 @@ std::unique_ptr<Cluster> CreateCluster(int timecode,
|
|
|
| if (block_info[i].use_simple_block) {
|
| CHECK_GE(block_info[i].duration, 0);
|
| - cb.AddSimpleBlock(block_info[i].track_num, block_info[i].timestamp, 0,
|
| - data, data_length);
|
| + cb.AddSimpleBlock(block_info[i].track_num, block_info[i].timestamp,
|
| + block_info[i].is_key_frame ? 0x80 : 0x00, data,
|
| + data_length);
|
| continue;
|
| }
|
|
|
| if (block_info[i].duration < 0) {
|
| - cb.AddBlockGroupWithoutBlockDuration(block_info[i].track_num,
|
| - block_info[i].timestamp, 0, data,
|
| - data_length);
|
| + cb.AddBlockGroupWithoutBlockDuration(
|
| + block_info[i].track_num, block_info[i].timestamp, 0,
|
| + block_info[i].is_key_frame, data, data_length);
|
| continue;
|
| }
|
|
|
| cb.AddBlockGroup(block_info[i].track_num, block_info[i].timestamp,
|
| - block_info[i].duration, 0, data, data_length);
|
| + block_info[i].duration, 0, block_info[i].is_key_frame,
|
| + data, data_length);
|
| }
|
|
|
| return cb.Finish();
|
| @@ -227,6 +231,7 @@ bool VerifyBuffers(const WebMClusterParser::BufferQueue& audio_buffers,
|
| buffer->duration().InMillisecondsF());
|
| EXPECT_EQ(expected_type, buffer->type());
|
| EXPECT_EQ(block_info[i].track_num, buffer->track_id());
|
| + EXPECT_EQ(block_info[i].is_key_frame, buffer->is_key_frame());
|
| }
|
|
|
| return true;
|
| @@ -402,15 +407,19 @@ TEST_F(WebMClusterParserTest, HeldBackBufferHoldsBackAllTracks) {
|
| const int kExpectedVideoEstimationInMs = 33;
|
|
|
| const BlockInfo kBlockInfo[] = {
|
| - {kVideoTrackNum, 0, 33, true, NULL, 0},
|
| - {kAudioTrackNum, 0, 23, false, NULL, 0},
|
| - {kTextTrackNum, 10, 42, false, NULL, 0},
|
| - {kAudioTrackNum, 23, kTestAudioFrameDefaultDurationInMs, true, NULL, 0},
|
| - {kVideoTrackNum, 33, 33, true, NULL, 0},
|
| - {kAudioTrackNum, 36, kTestAudioFrameDefaultDurationInMs, true, NULL, 0},
|
| - {kVideoTrackNum, 66, kExpectedVideoEstimationInMs, true, NULL, 0},
|
| - {kAudioTrackNum, 70, kTestAudioFrameDefaultDurationInMs, true, NULL, 0},
|
| - {kAudioTrackNum, 83, kTestAudioFrameDefaultDurationInMs, true, NULL, 0},
|
| + {kVideoTrackNum, 0, 33, true, NULL, 0, false},
|
| + {kAudioTrackNum, 0, 23, false, NULL, 0, false},
|
| + {kTextTrackNum, 10, 42, false, NULL, 0, true},
|
| + {kAudioTrackNum, 23, kTestAudioFrameDefaultDurationInMs, true, NULL, 0,
|
| + false},
|
| + {kVideoTrackNum, 33, 33, true, NULL, 0, false},
|
| + {kAudioTrackNum, 36, kTestAudioFrameDefaultDurationInMs, true, NULL, 0,
|
| + false},
|
| + {kVideoTrackNum, 66, kExpectedVideoEstimationInMs, true, NULL, 0, false},
|
| + {kAudioTrackNum, 70, kTestAudioFrameDefaultDurationInMs, true, NULL, 0,
|
| + false},
|
| + {kAudioTrackNum, 83, kTestAudioFrameDefaultDurationInMs, true, NULL, 0,
|
| + false},
|
| };
|
|
|
| const int kExpectedBuffersOnPartialCluster[] = {
|
| @@ -547,8 +556,8 @@ TEST_F(WebMClusterParserTest, ParseClusterWithMultipleCalls) {
|
| // one of these scenarios.
|
| TEST_F(WebMClusterParserTest, ParseBlockGroup) {
|
| const BlockInfo kBlockInfo[] = {
|
| - {kAudioTrackNum, 0, 23, false, NULL, 0},
|
| - {kVideoTrackNum, 33, 34, false, NULL, 0},
|
| + {kAudioTrackNum, 0, 23, false, NULL, 0, true},
|
| + {kVideoTrackNum, 33, 34, false, NULL, 0, true},
|
| };
|
| int block_count = arraysize(kBlockInfo);
|
|
|
| @@ -573,11 +582,11 @@ TEST_F(WebMClusterParserTest, ParseBlockGroup) {
|
|
|
| TEST_F(WebMClusterParserTest, ParseSimpleBlockAndBlockGroupMixture) {
|
| const BlockInfo kBlockInfo[] = {
|
| - {kAudioTrackNum, 0, 23, true, NULL, 0},
|
| - {kAudioTrackNum, 23, 23, false, NULL, 0},
|
| - {kVideoTrackNum, 33, 34, true, NULL, 0},
|
| - {kAudioTrackNum, 46, 23, false, NULL, 0},
|
| - {kVideoTrackNum, 67, 33, false, NULL, 0},
|
| + {kAudioTrackNum, 0, 23, true, NULL, 0, false},
|
| + {kAudioTrackNum, 23, 23, false, NULL, 0, false},
|
| + {kVideoTrackNum, 33, 34, true, NULL, 0, false},
|
| + {kAudioTrackNum, 46, 23, false, NULL, 0, false},
|
| + {kVideoTrackNum, 67, 33, false, NULL, 0, false},
|
| };
|
| int block_count = arraysize(kBlockInfo);
|
| std::unique_ptr<Cluster> cluster(CreateCluster(0, kBlockInfo, block_count));
|
| @@ -594,21 +603,21 @@ TEST_F(WebMClusterParserTest, IgnoredTracks) {
|
| parser_.reset(CreateParserWithIgnoredTracks(ignored_tracks));
|
|
|
| const BlockInfo kInputBlockInfo[] = {
|
| - {kAudioTrackNum, 0, 23, true, NULL, 0},
|
| - {kAudioTrackNum, 23, 23, true, NULL, 0},
|
| - {kVideoTrackNum, 33, 34, true, NULL, 0},
|
| - {kTextTrackNum, 33, 99, true, NULL, 0},
|
| - {kAudioTrackNum, 46, 23, true, NULL, 0},
|
| - {kVideoTrackNum, 67, 34, true, NULL, 0},
|
| + {kAudioTrackNum, 0, 23, true, NULL, 0, false},
|
| + {kAudioTrackNum, 23, 23, true, NULL, 0, false},
|
| + {kVideoTrackNum, 33, 34, true, NULL, 0, false},
|
| + {kTextTrackNum, 33, 99, true, NULL, 0, false},
|
| + {kAudioTrackNum, 46, 23, true, NULL, 0, false},
|
| + {kVideoTrackNum, 67, 34, true, NULL, 0, false},
|
| };
|
| int input_block_count = arraysize(kInputBlockInfo);
|
|
|
| const BlockInfo kOutputBlockInfo[] = {
|
| - {kAudioTrackNum, 0, 23, true, NULL, 0},
|
| - {kAudioTrackNum, 23, 23, true, NULL, 0},
|
| - {kVideoTrackNum, 33, 34, true, NULL, 0},
|
| - {kAudioTrackNum, 46, 23, true, NULL, 0},
|
| - {kVideoTrackNum, 67, 34, true, NULL, 0},
|
| + {kAudioTrackNum, 0, 23, true, NULL, 0, false},
|
| + {kAudioTrackNum, 23, 23, true, NULL, 0, false},
|
| + {kVideoTrackNum, 33, 34, true, NULL, 0, false},
|
| + {kAudioTrackNum, 46, 23, true, NULL, 0, false},
|
| + {kVideoTrackNum, 67, 34, true, NULL, 0, false},
|
| };
|
| int output_block_count = arraysize(kOutputBlockInfo);
|
|
|
| @@ -633,13 +642,13 @@ TEST_F(WebMClusterParserTest, ParseTextTracks) {
|
| kNoTimestamp(), kNoTimestamp(), text_tracks));
|
|
|
| const BlockInfo kInputBlockInfo[] = {
|
| - {kAudioTrackNum, 0, 23, true, NULL, 0},
|
| - {kAudioTrackNum, 23, 23, true, NULL, 0},
|
| - {kVideoTrackNum, 33, 34, true, NULL, 0},
|
| - {kTextTrackNum, 33, 42, false, NULL, 0},
|
| - {kAudioTrackNum, 46, 23, true, NULL, 0},
|
| - {kTextTrackNum, 55, 44, false, NULL, 0},
|
| - {kVideoTrackNum, 67, 34, true, NULL, 0},
|
| + {kAudioTrackNum, 0, 23, true, NULL, 0, false},
|
| + {kAudioTrackNum, 23, 23, true, NULL, 0, false},
|
| + {kVideoTrackNum, 33, 34, true, NULL, 0, false},
|
| + {kTextTrackNum, 33, 42, false, NULL, 0, true},
|
| + {kAudioTrackNum, 46, 23, true, NULL, 0, false},
|
| + {kTextTrackNum, 55, 44, false, NULL, 0, true},
|
| + {kVideoTrackNum, 67, 34, true, NULL, 0, false},
|
| };
|
| int input_block_count = arraysize(kInputBlockInfo);
|
|
|
| @@ -693,14 +702,14 @@ TEST_F(WebMClusterParserTest, ParseMultipleTextTracks) {
|
| kNoTimestamp(), kNoTimestamp(), text_tracks));
|
|
|
| const BlockInfo kInputBlockInfo[] = {
|
| - {kAudioTrackNum, 0, 23, true, NULL, 0},
|
| - {kAudioTrackNum, 23, 23, true, NULL, 0},
|
| - {kVideoTrackNum, 33, 34, true, NULL, 0},
|
| - {kSubtitleTextTrackNum, 33, 42, false, NULL, 0},
|
| - {kAudioTrackNum, 46, 23, true, NULL, 0},
|
| - {kCaptionTextTrackNum, 55, 44, false, NULL, 0},
|
| - {kVideoTrackNum, 67, 34, true, NULL, 0},
|
| - {kSubtitleTextTrackNum, 67, 33, false, NULL, 0},
|
| + {kAudioTrackNum, 0, 23, true, NULL, 0, false},
|
| + {kAudioTrackNum, 23, 23, true, NULL, 0, false},
|
| + {kVideoTrackNum, 33, 34, true, NULL, 0, false},
|
| + {kSubtitleTextTrackNum, 33, 42, false, NULL, 0, false},
|
| + {kAudioTrackNum, 46, 23, true, NULL, 0, false},
|
| + {kCaptionTextTrackNum, 55, 44, false, NULL, 0, false},
|
| + {kVideoTrackNum, 67, 34, true, NULL, 0, false},
|
| + {kSubtitleTextTrackNum, 67, 33, false, NULL, 0, false},
|
| };
|
| int input_block_count = arraysize(kInputBlockInfo);
|
|
|
| @@ -783,7 +792,7 @@ TEST_F(WebMClusterParserTest, ParseInvalidTextBlockGroupWithoutDuration) {
|
| kNoTimestamp(), kNoTimestamp(), text_tracks));
|
|
|
| const BlockInfo kBlockInfo[] = {
|
| - { kTextTrackNum, 33, -42, false },
|
| + {kTextTrackNum, 33, -42, false, NULL, 0, false},
|
| };
|
| int block_count = arraysize(kBlockInfo);
|
| std::unique_ptr<Cluster> cluster(CreateCluster(0, kBlockInfo, block_count));
|
| @@ -799,13 +808,20 @@ TEST_F(WebMClusterParserTest, ParseWithDefaultDurationsSimpleBlocks) {
|
| EXPECT_LT(kTestVideoFrameDefaultDurationInMs, 33);
|
|
|
| const BlockInfo kBlockInfo[] = {
|
| - {kAudioTrackNum, 0, kTestAudioFrameDefaultDurationInMs, true, NULL, 0},
|
| - {kAudioTrackNum, 23, kTestAudioFrameDefaultDurationInMs, true, NULL, 0},
|
| - {kVideoTrackNum, 33, kTestVideoFrameDefaultDurationInMs, true, NULL, 0},
|
| - {kAudioTrackNum, 46, kTestAudioFrameDefaultDurationInMs, true, NULL, 0},
|
| - {kVideoTrackNum, 67, kTestVideoFrameDefaultDurationInMs, true, NULL, 0},
|
| - {kAudioTrackNum, 69, kTestAudioFrameDefaultDurationInMs, true, NULL, 0},
|
| - {kVideoTrackNum, 100, kTestVideoFrameDefaultDurationInMs, true, NULL, 0},
|
| + {kAudioTrackNum, 0, kTestAudioFrameDefaultDurationInMs, true, NULL, 0,
|
| + false},
|
| + {kAudioTrackNum, 23, kTestAudioFrameDefaultDurationInMs, true, NULL, 0,
|
| + false},
|
| + {kVideoTrackNum, 33, kTestVideoFrameDefaultDurationInMs, true, NULL, 0,
|
| + false},
|
| + {kAudioTrackNum, 46, kTestAudioFrameDefaultDurationInMs, true, NULL, 0,
|
| + false},
|
| + {kVideoTrackNum, 67, kTestVideoFrameDefaultDurationInMs, true, NULL, 0,
|
| + false},
|
| + {kAudioTrackNum, 69, kTestAudioFrameDefaultDurationInMs, true, NULL, 0,
|
| + false},
|
| + {kVideoTrackNum, 100, kTestVideoFrameDefaultDurationInMs, true, NULL, 0,
|
| + false},
|
| };
|
|
|
| int block_count = arraysize(kBlockInfo);
|
| @@ -841,13 +857,13 @@ TEST_F(WebMClusterParserTest, ParseWithoutAnyDurationsSimpleBlocks) {
|
| const int kExpectedAudioEstimationInMs = 22;
|
| const int kExpectedVideoEstimationInMs = 34;
|
| const BlockInfo kBlockInfo1[] = {
|
| - {kAudioTrackNum, 0, 23, true, NULL, 0},
|
| - {kAudioTrackNum, 23, 22, true, NULL, 0},
|
| - {kVideoTrackNum, 33, 33, true, NULL, 0},
|
| - {kAudioTrackNum, 45, 23, true, NULL, 0},
|
| - {kVideoTrackNum, 66, 34, true, NULL, 0},
|
| - {kAudioTrackNum, 68, kExpectedAudioEstimationInMs, true, NULL, 0},
|
| - {kVideoTrackNum, 100, kExpectedVideoEstimationInMs, true, NULL, 0},
|
| + {kAudioTrackNum, 0, 23, true, NULL, 0, false},
|
| + {kAudioTrackNum, 23, 22, true, NULL, 0, false},
|
| + {kVideoTrackNum, 33, 33, true, NULL, 0, false},
|
| + {kAudioTrackNum, 45, 23, true, NULL, 0, false},
|
| + {kVideoTrackNum, 66, 34, true, NULL, 0, false},
|
| + {kAudioTrackNum, 68, kExpectedAudioEstimationInMs, true, NULL, 0, false},
|
| + {kVideoTrackNum, 100, kExpectedVideoEstimationInMs, true, NULL, 0, false},
|
| };
|
|
|
| int block_count1 = arraysize(kBlockInfo1);
|
| @@ -881,9 +897,9 @@ TEST_F(WebMClusterParserTest, ParseWithoutAnyDurationsSimpleBlocks) {
|
| // each track.
|
| const BlockInfo kBlockInfo2[] = {
|
| // Estimate carries over across clusters
|
| - {kAudioTrackNum, 200, kExpectedAudioEstimationInMs, true, NULL, 0},
|
| + {kAudioTrackNum, 200, kExpectedAudioEstimationInMs, true, NULL, 0, false},
|
| // Estimate carries over across clusters
|
| - {kVideoTrackNum, 201, kExpectedVideoEstimationInMs, true, NULL, 0},
|
| + {kVideoTrackNum, 201, kExpectedVideoEstimationInMs, true, NULL, 0, false},
|
| };
|
|
|
| int block_count2 = arraysize(kBlockInfo2);
|
| @@ -911,13 +927,15 @@ TEST_F(WebMClusterParserTest, ParseWithoutAnyDurationsBlockGroups) {
|
| const int kExpectedAudioEstimationInMs = 22;
|
| const int kExpectedVideoEstimationInMs = 34;
|
| const BlockInfo kBlockInfo1[] = {
|
| - {kAudioTrackNum, 0, -23, false, NULL, 0},
|
| - {kAudioTrackNum, 23, -22, false, NULL, 0},
|
| - {kVideoTrackNum, 33, -33, false, NULL, 0},
|
| - {kAudioTrackNum, 45, -23, false, NULL, 0},
|
| - {kVideoTrackNum, 66, -34, false, NULL, 0},
|
| - {kAudioTrackNum, 68, -kExpectedAudioEstimationInMs, false, NULL, 0},
|
| - {kVideoTrackNum, 100, -kExpectedVideoEstimationInMs, false, NULL, 0},
|
| + {kAudioTrackNum, 0, -23, false, NULL, 0, false},
|
| + {kAudioTrackNum, 23, -22, false, NULL, 0, false},
|
| + {kVideoTrackNum, 33, -33, false, NULL, 0, false},
|
| + {kAudioTrackNum, 45, -23, false, NULL, 0, false},
|
| + {kVideoTrackNum, 66, -34, false, NULL, 0, false},
|
| + {kAudioTrackNum, 68, -kExpectedAudioEstimationInMs, false, NULL, 0,
|
| + false},
|
| + {kVideoTrackNum, 100, -kExpectedVideoEstimationInMs, false, NULL, 0,
|
| + false},
|
| };
|
|
|
| int block_count1 = arraysize(kBlockInfo1);
|
| @@ -950,8 +968,10 @@ TEST_F(WebMClusterParserTest, ParseWithoutAnyDurationsBlockGroups) {
|
| // Verify that the estimated frame duration is tracked across clusters for
|
| // each track.
|
| const BlockInfo kBlockInfo2[] = {
|
| - {kAudioTrackNum, 200, -kExpectedAudioEstimationInMs, false, NULL, 0},
|
| - {kVideoTrackNum, 201, -kExpectedVideoEstimationInMs, false, NULL, 0},
|
| + {kAudioTrackNum, 200, -kExpectedAudioEstimationInMs, false, NULL, 0,
|
| + false},
|
| + {kVideoTrackNum, 201, -kExpectedVideoEstimationInMs, false, NULL, 0,
|
| + false},
|
| };
|
|
|
| int block_count2 = arraysize(kBlockInfo2);
|
| @@ -976,18 +996,20 @@ TEST_F(WebMClusterParserTest,
|
| EXPECT_LT(kTestVideoFrameDefaultDurationInMs, 33);
|
|
|
| const BlockInfo kBlockInfo[] = {
|
| - {kAudioTrackNum, 0, -kTestAudioFrameDefaultDurationInMs, false, NULL, 0},
|
| - {kAudioTrackNum, 23, -kTestAudioFrameDefaultDurationInMs, false, NULL, 0},
|
| - {kVideoTrackNum, 33, -kTestVideoFrameDefaultDurationInMs, false, NULL, 0},
|
| - {kAudioTrackNum, 46, -kTestAudioFrameDefaultDurationInMs, false, NULL, 0},
|
| - {kVideoTrackNum, 67, -kTestVideoFrameDefaultDurationInMs, false, NULL, 0},
|
| - {kAudioTrackNum, 69, -kTestAudioFrameDefaultDurationInMs, false, NULL, 0},
|
| - {kVideoTrackNum,
|
| - 100,
|
| - -kTestVideoFrameDefaultDurationInMs,
|
| - false,
|
| - NULL,
|
| - 0},
|
| + {kAudioTrackNum, 0, -kTestAudioFrameDefaultDurationInMs, false, NULL, 0,
|
| + false},
|
| + {kAudioTrackNum, 23, -kTestAudioFrameDefaultDurationInMs, false, NULL, 0,
|
| + false},
|
| + {kVideoTrackNum, 33, -kTestVideoFrameDefaultDurationInMs, false, NULL, 0,
|
| + false},
|
| + {kAudioTrackNum, 46, -kTestAudioFrameDefaultDurationInMs, false, NULL, 0,
|
| + false},
|
| + {kVideoTrackNum, 67, -kTestVideoFrameDefaultDurationInMs, false, NULL, 0,
|
| + false},
|
| + {kAudioTrackNum, 69, -kTestAudioFrameDefaultDurationInMs, false, NULL, 0,
|
| + false},
|
| + {kVideoTrackNum, 100, -kTestVideoFrameDefaultDurationInMs, false, NULL, 0,
|
| + false},
|
| };
|
|
|
| int block_count = arraysize(kBlockInfo);
|
|
|