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

Side by Side Diff: media/formats/webm/webm_cluster_parser_unittest.cc

Issue 213253006: MSE: Populate WebM missing duration with DefaultDuration, derived, or default (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Addressed comments and rebased (GenerateSpliceFrame() is now disabled in WMPI/WMPA in ToT) Created 6 years, 8 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <algorithm> 5 #include <algorithm>
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "media/base/decrypt_config.h" 9 #include "media/base/decrypt_config.h"
10 #include "media/formats/webm/cluster_builder.h" 10 #include "media/formats/webm/cluster_builder.h"
(...skipping 18 matching lines...) Expand all
29 struct BlockInfo { 29 struct BlockInfo {
30 int track_num; 30 int track_num;
31 int timestamp; 31 int timestamp;
32 int duration; 32 int duration;
33 bool use_simple_block; 33 bool use_simple_block;
34 }; 34 };
35 35
36 static const BlockInfo kDefaultBlockInfo[] = { 36 static const BlockInfo kDefaultBlockInfo[] = {
37 { kAudioTrackNum, 0, 23, true }, 37 { kAudioTrackNum, 0, 23, true },
38 { kAudioTrackNum, 23, 23, true }, 38 { kAudioTrackNum, 23, 23, true },
39 { kVideoTrackNum, 33, 34, true }, 39 { kVideoTrackNum, 33, 34, true }, // Assumes not using DefaultDuration
40 { kAudioTrackNum, 46, 23, true }, 40 { kAudioTrackNum, 46, 23, true },
41 { kVideoTrackNum, 67, 33, false }, 41 { kVideoTrackNum, 67, 33, false },
42 { kAudioTrackNum, 69, 23, false }, 42 { kAudioTrackNum, 69, 23, false },
43 { kVideoTrackNum, 100, 33, false }, 43 { kVideoTrackNum, 100, 33, false },
44 }; 44 };
45 45
46 static const uint8 kEncryptedFrame[] = { 46 static const uint8 kEncryptedFrame[] = {
47 0x01, // Block is encrypted 47 0x01, // Block is encrypted
48 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 // IV 48 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 // IV
49 }; 49 };
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
114 LOG(ERROR) << "Unexpected track number " << block_info[i].track_num; 114 LOG(ERROR) << "Unexpected track number " << block_info[i].track_num;
115 return false; 115 return false;
116 } 116 }
117 117
118 if (*offset >= buffers->size()) 118 if (*offset >= buffers->size())
119 return false; 119 return false;
120 120
121 scoped_refptr<StreamParserBuffer> buffer = (*buffers)[(*offset)++]; 121 scoped_refptr<StreamParserBuffer> buffer = (*buffers)[(*offset)++];
122 122
123 EXPECT_EQ(block_info[i].timestamp, buffer->timestamp().InMilliseconds()); 123 EXPECT_EQ(block_info[i].timestamp, buffer->timestamp().InMilliseconds());
124 124 EXPECT_EQ(block_info[i].duration, buffer->duration().InMilliseconds());
125 if (!block_info[i].use_simple_block)
126 EXPECT_NE(kNoTimestamp(), buffer->duration());
127
128 if (buffer->duration() != kNoTimestamp())
129 EXPECT_EQ(block_info[i].duration, buffer->duration().InMilliseconds());
130
131 EXPECT_EQ(expected_type, buffer->type()); 125 EXPECT_EQ(expected_type, buffer->type());
132 EXPECT_EQ(block_info[i].track_num, buffer->track_id()); 126 EXPECT_EQ(block_info[i].track_num, buffer->track_id());
133 } 127 }
134 128
135 return true; 129 return true;
136 } 130 }
137 131
138 static bool VerifyBuffers(const scoped_ptr<WebMClusterParser>& parser, 132 static bool VerifyBuffers(const scoped_ptr<WebMClusterParser>& parser,
139 const BlockInfo* block_info, 133 const BlockInfo* block_info,
140 int block_count) { 134 int block_count) {
141 const WebMClusterParser::TextBufferQueueMap& text_map = 135 const WebMClusterParser::TextBufferQueueMap& text_map =
142 parser->GetTextBuffers(); 136 parser->GetTextBuffers();
143 const WebMClusterParser::BufferQueue* text_buffers; 137 const WebMClusterParser::BufferQueue* text_buffers;
144 const WebMClusterParser::BufferQueue no_text_buffers; 138 const WebMClusterParser::BufferQueue no_text_buffers;
145 if (!text_map.empty()) 139 if (!text_map.empty())
146 text_buffers = &(text_map.rbegin()->second); 140 text_buffers = &(text_map.rbegin()->second);
147 else 141 else
148 text_buffers = &no_text_buffers; 142 text_buffers = &no_text_buffers;
149 143
150 return VerifyBuffers(parser->audio_buffers(), 144 return VerifyBuffers(parser->GetAudioBuffers(),
151 parser->video_buffers(), 145 parser->GetVideoBuffers(),
152 *text_buffers, 146 *text_buffers,
153 block_info, 147 block_info,
154 block_count); 148 block_count);
155 } 149 }
156 150
157 static bool VerifyTextBuffers( 151 static bool VerifyTextBuffers(
158 const scoped_ptr<WebMClusterParser>& parser, 152 const scoped_ptr<WebMClusterParser>& parser,
159 const BlockInfo* block_info_ptr, 153 const BlockInfo* block_info_ptr,
160 int block_count, 154 int block_count,
161 int text_track_num, 155 int text_track_num,
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
199 itr != src.end(); ++itr) { 193 itr != src.end(); ++itr) {
200 dest->push_back(*itr); 194 dest->push_back(*itr);
201 } 195 }
202 } 196 }
203 197
204 class WebMClusterParserTest : public testing::Test { 198 class WebMClusterParserTest : public testing::Test {
205 public: 199 public:
206 WebMClusterParserTest() 200 WebMClusterParserTest()
207 : parser_(new WebMClusterParser(kTimecodeScale, 201 : parser_(new WebMClusterParser(kTimecodeScale,
208 kAudioTrackNum, 202 kAudioTrackNum,
203 kNoTimestamp(),
209 kVideoTrackNum, 204 kVideoTrackNum,
205 kNoTimestamp(),
210 WebMTracksParser::TextTracks(), 206 WebMTracksParser::TextTracks(),
211 std::set<int64>(), 207 std::set<int64>(),
212 std::string(), 208 std::string(),
213 std::string(), 209 std::string(),
214 LogCB())) {} 210 LogCB())) {}
215 211
216 protected: 212 protected:
217 scoped_ptr<WebMClusterParser> parser_; 213 scoped_ptr<WebMClusterParser> parser_;
218 }; 214 };
219 215
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
265 ASSERT_GE(result, 0); 261 ASSERT_GE(result, 0);
266 ASSERT_LE(result, parse_size); 262 ASSERT_LE(result, parse_size);
267 263
268 if (result == 0) { 264 if (result == 0) {
269 // The parser needs more data so increase the parse_size a little. 265 // The parser needs more data so increase the parse_size a little.
270 parse_size += default_parse_size; 266 parse_size += default_parse_size;
271 parse_size = std::min(parse_size, size); 267 parse_size = std::min(parse_size, size);
272 continue; 268 continue;
273 } 269 }
274 270
275 AppendToEnd(parser_->audio_buffers(), &audio_buffers); 271 AppendToEnd(parser_->GetAudioBuffers(), &audio_buffers);
276 AppendToEnd(parser_->video_buffers(), &video_buffers); 272 AppendToEnd(parser_->GetVideoBuffers(), &video_buffers);
277 273
278 parse_size = default_parse_size; 274 parse_size = default_parse_size;
279 275
280 data += result; 276 data += result;
281 size -= result; 277 size -= result;
282 } 278 }
283 ASSERT_TRUE(VerifyBuffers(audio_buffers, video_buffers, 279 ASSERT_TRUE(VerifyBuffers(audio_buffers, video_buffers,
284 no_text_buffers, kDefaultBlockInfo, 280 no_text_buffers, kDefaultBlockInfo,
285 block_count)); 281 block_count));
286 } 282 }
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
331 EXPECT_EQ(cluster->size(), result); 327 EXPECT_EQ(cluster->size(), result);
332 ASSERT_TRUE(VerifyBuffers(parser_, kBlockInfo, block_count)); 328 ASSERT_TRUE(VerifyBuffers(parser_, kBlockInfo, block_count));
333 } 329 }
334 330
335 TEST_F(WebMClusterParserTest, IgnoredTracks) { 331 TEST_F(WebMClusterParserTest, IgnoredTracks) {
336 std::set<int64> ignored_tracks; 332 std::set<int64> ignored_tracks;
337 ignored_tracks.insert(kTextTrackNum); 333 ignored_tracks.insert(kTextTrackNum);
338 334
339 parser_.reset(new WebMClusterParser(kTimecodeScale, 335 parser_.reset(new WebMClusterParser(kTimecodeScale,
340 kAudioTrackNum, 336 kAudioTrackNum,
337 kNoTimestamp(),
341 kVideoTrackNum, 338 kVideoTrackNum,
339 kNoTimestamp(),
342 WebMTracksParser::TextTracks(), 340 WebMTracksParser::TextTracks(),
343 ignored_tracks, 341 ignored_tracks,
344 std::string(), 342 std::string(),
345 std::string(), 343 std::string(),
346 LogCB())); 344 LogCB()));
347 345
348 const BlockInfo kInputBlockInfo[] = { 346 const BlockInfo kInputBlockInfo[] = {
349 { kAudioTrackNum, 0, 23, true }, 347 { kAudioTrackNum, 0, 23, true },
350 { kAudioTrackNum, 23, 23, true }, 348 { kAudioTrackNum, 23, 23, true },
351 { kVideoTrackNum, 33, 33, true }, 349 { kVideoTrackNum, 33, 34, true },
352 { kTextTrackNum, 33, 99, true }, 350 { kTextTrackNum, 33, 99, true },
353 { kAudioTrackNum, 46, 23, true }, 351 { kAudioTrackNum, 46, 23, true },
354 { kVideoTrackNum, 67, 33, true }, 352 { kVideoTrackNum, 67, 34, true },
355 }; 353 };
356 int input_block_count = arraysize(kInputBlockInfo); 354 int input_block_count = arraysize(kInputBlockInfo);
357 355
358 const BlockInfo kOutputBlockInfo[] = { 356 const BlockInfo kOutputBlockInfo[] = {
359 { kAudioTrackNum, 0, 23, true }, 357 { kAudioTrackNum, 0, 23, true },
360 { kAudioTrackNum, 23, 23, true }, 358 { kAudioTrackNum, 23, 23, true },
361 { kVideoTrackNum, 33, 33, true }, 359 { kVideoTrackNum, 33, 34, true },
362 { kAudioTrackNum, 46, 23, true }, 360 { kAudioTrackNum, 46, 23, true },
363 { kVideoTrackNum, 67, 33, true }, 361 { kVideoTrackNum, 67, 34, true },
364 }; 362 };
365 int output_block_count = arraysize(kOutputBlockInfo); 363 int output_block_count = arraysize(kOutputBlockInfo);
366 364
367 scoped_ptr<Cluster> cluster( 365 scoped_ptr<Cluster> cluster(
368 CreateCluster(0, kInputBlockInfo, input_block_count)); 366 CreateCluster(0, kInputBlockInfo, input_block_count));
369 367
370 int result = parser_->Parse(cluster->data(), cluster->size()); 368 int result = parser_->Parse(cluster->data(), cluster->size());
371 EXPECT_EQ(cluster->size(), result); 369 EXPECT_EQ(cluster->size(), result);
372 ASSERT_TRUE(VerifyBuffers(parser_, kOutputBlockInfo, output_block_count)); 370 ASSERT_TRUE(VerifyBuffers(parser_, kOutputBlockInfo, output_block_count));
373 } 371 }
374 372
375 TEST_F(WebMClusterParserTest, ParseTextTracks) { 373 TEST_F(WebMClusterParserTest, ParseTextTracks) {
376 typedef WebMTracksParser::TextTracks TextTracks; 374 typedef WebMTracksParser::TextTracks TextTracks;
377 TextTracks text_tracks; 375 TextTracks text_tracks;
378 376
379 text_tracks.insert(std::make_pair(TextTracks::key_type(kTextTrackNum), 377 text_tracks.insert(std::make_pair(TextTracks::key_type(kTextTrackNum),
380 TextTrackConfig(kTextSubtitles, "", "", 378 TextTrackConfig(kTextSubtitles, "", "",
381 ""))); 379 "")));
382 380
383 parser_.reset(new WebMClusterParser(kTimecodeScale, 381 parser_.reset(new WebMClusterParser(kTimecodeScale,
384 kAudioTrackNum, 382 kAudioTrackNum,
383 kNoTimestamp(),
385 kVideoTrackNum, 384 kVideoTrackNum,
385 kNoTimestamp(),
386 text_tracks, 386 text_tracks,
387 std::set<int64>(), 387 std::set<int64>(),
388 std::string(), 388 std::string(),
389 std::string(), 389 std::string(),
390 LogCB())); 390 LogCB()));
391 391
392 const BlockInfo kInputBlockInfo[] = { 392 const BlockInfo kInputBlockInfo[] = {
393 { kAudioTrackNum, 0, 23, true }, 393 { kAudioTrackNum, 0, 23, true },
394 { kAudioTrackNum, 23, 23, true }, 394 { kAudioTrackNum, 23, 23, true },
395 { kVideoTrackNum, 33, 33, true }, 395 { kVideoTrackNum, 33, 34, true },
396 { kTextTrackNum, 33, 42, false }, 396 { kTextTrackNum, 33, 42, false },
397 { kAudioTrackNum, 46, 23, true }, 397 { kAudioTrackNum, 46, 23, true },
398 { kTextTrackNum, 55, 44, false }, 398 { kTextTrackNum, 55, 44, false },
399 { kVideoTrackNum, 67, 33, true }, 399 { kVideoTrackNum, 67, 34, true },
400 }; 400 };
401 int input_block_count = arraysize(kInputBlockInfo); 401 int input_block_count = arraysize(kInputBlockInfo);
402 402
403 scoped_ptr<Cluster> cluster( 403 scoped_ptr<Cluster> cluster(
404 CreateCluster(0, kInputBlockInfo, input_block_count)); 404 CreateCluster(0, kInputBlockInfo, input_block_count));
405 405
406 int result = parser_->Parse(cluster->data(), cluster->size()); 406 int result = parser_->Parse(cluster->data(), cluster->size());
407 EXPECT_EQ(cluster->size(), result); 407 EXPECT_EQ(cluster->size(), result);
408 ASSERT_TRUE(VerifyBuffers(parser_, kInputBlockInfo, input_block_count)); 408 ASSERT_TRUE(VerifyBuffers(parser_, kInputBlockInfo, input_block_count));
409 } 409 }
410 410
411 TEST_F(WebMClusterParserTest, TextTracksSimpleBlock) { 411 TEST_F(WebMClusterParserTest, TextTracksSimpleBlock) {
412 typedef WebMTracksParser::TextTracks TextTracks; 412 typedef WebMTracksParser::TextTracks TextTracks;
413 WebMTracksParser::TextTracks text_tracks; 413 WebMTracksParser::TextTracks text_tracks;
414 414
415 text_tracks.insert(std::make_pair(TextTracks::key_type(kTextTrackNum), 415 text_tracks.insert(std::make_pair(TextTracks::key_type(kTextTrackNum),
416 TextTrackConfig(kTextSubtitles, "", "", 416 TextTrackConfig(kTextSubtitles, "", "",
417 ""))); 417 "")));
418 418
419 parser_.reset(new WebMClusterParser(kTimecodeScale, 419 parser_.reset(new WebMClusterParser(kTimecodeScale,
420 kAudioTrackNum, 420 kAudioTrackNum,
421 kNoTimestamp(),
421 kVideoTrackNum, 422 kVideoTrackNum,
423 kNoTimestamp(),
422 text_tracks, 424 text_tracks,
423 std::set<int64>(), 425 std::set<int64>(),
424 std::string(), 426 std::string(),
425 std::string(), 427 std::string(),
426 LogCB())); 428 LogCB()));
427 429
428 const BlockInfo kInputBlockInfo[] = { 430 const BlockInfo kInputBlockInfo[] = {
429 { kTextTrackNum, 33, 42, true }, 431 { kTextTrackNum, 33, 42, true },
430 }; 432 };
431 int input_block_count = arraysize(kInputBlockInfo); 433 int input_block_count = arraysize(kInputBlockInfo);
(...skipping 15 matching lines...) Expand all
447 text_tracks.insert(std::make_pair(TextTracks::key_type(kSubtitleTextTrackNum), 449 text_tracks.insert(std::make_pair(TextTracks::key_type(kSubtitleTextTrackNum),
448 TextTrackConfig(kTextSubtitles, "", "", 450 TextTrackConfig(kTextSubtitles, "", "",
449 ""))); 451 "")));
450 452
451 text_tracks.insert(std::make_pair(TextTracks::key_type(kCaptionTextTrackNum), 453 text_tracks.insert(std::make_pair(TextTracks::key_type(kCaptionTextTrackNum),
452 TextTrackConfig(kTextCaptions, "", "", 454 TextTrackConfig(kTextCaptions, "", "",
453 ""))); 455 "")));
454 456
455 parser_.reset(new WebMClusterParser(kTimecodeScale, 457 parser_.reset(new WebMClusterParser(kTimecodeScale,
456 kAudioTrackNum, 458 kAudioTrackNum,
459 kNoTimestamp(),
457 kVideoTrackNum, 460 kVideoTrackNum,
461 kNoTimestamp(),
458 text_tracks, 462 text_tracks,
459 std::set<int64>(), 463 std::set<int64>(),
460 std::string(), 464 std::string(),
461 std::string(), 465 std::string(),
462 LogCB())); 466 LogCB()));
463 467
464 const BlockInfo kInputBlockInfo[] = { 468 const BlockInfo kInputBlockInfo[] = {
465 { kAudioTrackNum, 0, 23, true }, 469 { kAudioTrackNum, 0, 23, true },
466 { kAudioTrackNum, 23, 23, true }, 470 { kAudioTrackNum, 23, 23, true },
467 { kVideoTrackNum, 33, 33, true }, 471 { kVideoTrackNum, 33, 34, true },
468 { kSubtitleTextTrackNum, 33, 42, false }, 472 { kSubtitleTextTrackNum, 33, 42, false },
469 { kAudioTrackNum, 46, 23, true }, 473 { kAudioTrackNum, 46, 23, true },
470 { kCaptionTextTrackNum, 55, 44, false }, 474 { kCaptionTextTrackNum, 55, 44, false },
471 { kVideoTrackNum, 67, 33, true }, 475 { kVideoTrackNum, 67, 34, true },
472 { kSubtitleTextTrackNum, 67, 33, false }, 476 { kSubtitleTextTrackNum, 67, 33, false },
473 }; 477 };
474 int input_block_count = arraysize(kInputBlockInfo); 478 int input_block_count = arraysize(kInputBlockInfo);
475 479
476 scoped_ptr<Cluster> cluster( 480 scoped_ptr<Cluster> cluster(
477 CreateCluster(0, kInputBlockInfo, input_block_count)); 481 CreateCluster(0, kInputBlockInfo, input_block_count));
478 482
479 int result = parser_->Parse(cluster->data(), cluster->size()); 483 int result = parser_->Parse(cluster->data(), cluster->size());
480 EXPECT_EQ(cluster->size(), result); 484 EXPECT_EQ(cluster->size(), result);
481 485
482 const WebMClusterParser::TextBufferQueueMap& text_map = 486 const WebMClusterParser::TextBufferQueueMap& text_map =
483 parser_->GetTextBuffers(); 487 parser_->GetTextBuffers();
484 for (WebMClusterParser::TextBufferQueueMap::const_iterator itr = 488 for (WebMClusterParser::TextBufferQueueMap::const_iterator itr =
485 text_map.begin(); 489 text_map.begin();
486 itr != text_map.end(); 490 itr != text_map.end();
487 ++itr) { 491 ++itr) {
488 const WebMTracksParser::TextTracks::const_iterator find_result = 492 const WebMTracksParser::TextTracks::const_iterator find_result =
489 text_tracks.find(itr->first); 493 text_tracks.find(itr->first);
490 ASSERT_TRUE(find_result != text_tracks.end()); 494 ASSERT_TRUE(find_result != text_tracks.end());
491 ASSERT_TRUE(VerifyTextBuffers(parser_, kInputBlockInfo, input_block_count, 495 ASSERT_TRUE(VerifyTextBuffers(parser_, kInputBlockInfo, input_block_count,
492 itr->first, itr->second)); 496 itr->first, itr->second));
493 } 497 }
494 } 498 }
495 499
496 TEST_F(WebMClusterParserTest, ParseEncryptedBlock) { 500 TEST_F(WebMClusterParserTest, ParseEncryptedBlock) {
497 scoped_ptr<Cluster> cluster(CreateEncryptedCluster(sizeof(kEncryptedFrame))); 501 scoped_ptr<Cluster> cluster(CreateEncryptedCluster(sizeof(kEncryptedFrame)));
498 502
499 parser_.reset(new WebMClusterParser(kTimecodeScale, 503 parser_.reset(new WebMClusterParser(kTimecodeScale,
500 kAudioTrackNum, 504 kAudioTrackNum,
505 kNoTimestamp(),
501 kVideoTrackNum, 506 kVideoTrackNum,
507 kNoTimestamp(),
502 WebMTracksParser::TextTracks(), 508 WebMTracksParser::TextTracks(),
503 std::set<int64>(), 509 std::set<int64>(),
504 std::string(), 510 std::string(),
505 "video_key_id", 511 "video_key_id",
506 LogCB())); 512 LogCB()));
507 int result = parser_->Parse(cluster->data(), cluster->size()); 513 int result = parser_->Parse(cluster->data(), cluster->size());
508 EXPECT_EQ(cluster->size(), result); 514 EXPECT_EQ(cluster->size(), result);
509 ASSERT_EQ(1UL, parser_->video_buffers().size()); 515 ASSERT_EQ(1UL, parser_->GetVideoBuffers().size());
510 scoped_refptr<StreamParserBuffer> buffer = parser_->video_buffers()[0]; 516 scoped_refptr<StreamParserBuffer> buffer = parser_->GetVideoBuffers()[0];
511 VerifyEncryptedBuffer(buffer); 517 VerifyEncryptedBuffer(buffer);
512 } 518 }
513 519
514 TEST_F(WebMClusterParserTest, ParseBadEncryptedBlock) { 520 TEST_F(WebMClusterParserTest, ParseBadEncryptedBlock) {
515 scoped_ptr<Cluster> cluster( 521 scoped_ptr<Cluster> cluster(
516 CreateEncryptedCluster(sizeof(kEncryptedFrame) - 1)); 522 CreateEncryptedCluster(sizeof(kEncryptedFrame) - 1));
517 523
518 parser_.reset(new WebMClusterParser(kTimecodeScale, 524 parser_.reset(new WebMClusterParser(kTimecodeScale,
519 kAudioTrackNum, 525 kAudioTrackNum,
526 kNoTimestamp(),
520 kVideoTrackNum, 527 kVideoTrackNum,
528 kNoTimestamp(),
521 WebMTracksParser::TextTracks(), 529 WebMTracksParser::TextTracks(),
522 std::set<int64>(), 530 std::set<int64>(),
523 std::string(), 531 std::string(),
524 "video_key_id", 532 "video_key_id",
525 LogCB())); 533 LogCB()));
526 int result = parser_->Parse(cluster->data(), cluster->size()); 534 int result = parser_->Parse(cluster->data(), cluster->size());
527 EXPECT_EQ(-1, result); 535 EXPECT_EQ(-1, result);
528 } 536 }
529 537
530 TEST_F(WebMClusterParserTest, ParseInvalidZeroSizedCluster) { 538 TEST_F(WebMClusterParserTest, ParseInvalidZeroSizedCluster) {
531 const uint8 kBuffer[] = { 539 const uint8 kBuffer[] = {
532 0x1F, 0x43, 0xB6, 0x75, 0x80, // CLUSTER (size = 0) 540 0x1F, 0x43, 0xB6, 0x75, 0x80, // CLUSTER (size = 0)
533 }; 541 };
534 542
535 EXPECT_EQ(-1, parser_->Parse(kBuffer, sizeof(kBuffer))); 543 EXPECT_EQ(-1, parser_->Parse(kBuffer, sizeof(kBuffer)));
536 } 544 }
537 545
538 TEST_F(WebMClusterParserTest, ParseInvalidUnknownButActuallyZeroSizedCluster) { 546 TEST_F(WebMClusterParserTest, ParseInvalidUnknownButActuallyZeroSizedCluster) {
539 const uint8 kBuffer[] = { 547 const uint8 kBuffer[] = {
540 0x1F, 0x43, 0xB6, 0x75, 0xFF, // CLUSTER (size = "unknown") 548 0x1F, 0x43, 0xB6, 0x75, 0xFF, // CLUSTER (size = "unknown")
541 0x1F, 0x43, 0xB6, 0x75, 0x85, // CLUSTER (size = 5) 549 0x1F, 0x43, 0xB6, 0x75, 0x85, // CLUSTER (size = 5)
542 }; 550 };
543 551
544 EXPECT_EQ(-1, parser_->Parse(kBuffer, sizeof(kBuffer))); 552 EXPECT_EQ(-1, parser_->Parse(kBuffer, sizeof(kBuffer)));
545 } 553 }
546 554
547 } // namespace media 555 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698