Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1174)

Unified Diff: media/formats/webm/webm_cluster_parser_unittest.cc

Issue 1966673002: media: Fix WebM keyframe detection in BlockGroup (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: add unit tests with keyframe verification Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/formats/webm/webm_cluster_parser.cc ('k') | media/test/data/bear-vp9-blockgroup.webm » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
« no previous file with comments | « media/formats/webm/webm_cluster_parser.cc ('k') | media/test/data/bear-vp9-blockgroup.webm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698