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

Side by Side Diff: media/filters/chunk_demuxer_unittest.cc

Issue 378863002: Update ChunkDemuxer unit tests to use real muxed clusters. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 5 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
« no previous file with comments | « no previous file | media/filters/frame_processor.cc » ('j') | media/filters/frame_processor.cc » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/message_loop/message_loop.h" 8 #include "base/message_loop/message_loop.h"
9 #include "base/strings/string_number_conversions.h" 9 #include "base/strings/string_number_conversions.h"
10 #include "base/strings/string_split.h" 10 #include "base/strings/string_split.h"
(...skipping 379 matching lines...) Expand 10 before | Expand all | Expand 10 after
390 block_duration = kTextBlockDuration; 390 block_duration = kTextBlockDuration;
391 break; 391 break;
392 } 392 }
393 ASSERT_NE(block_duration, 0); 393 ASSERT_NE(block_duration, 0);
394 int end_timecode = timecode + block_count * block_duration; 394 int end_timecode = timecode + block_count * block_duration;
395 AppendCluster(source_id, 395 AppendCluster(source_id,
396 GenerateSingleStreamCluster( 396 GenerateSingleStreamCluster(
397 timecode, end_timecode, track_number, block_duration)); 397 timecode, end_timecode, track_number, block_duration));
398 } 398 }
399 399
400 // |cluster_description| - A space delimited string of buffer info that 400 struct BlockInfo {
401 // is used to construct a cluster. Each buffer info is a timestamp in 401 int track_number;
402 // milliseconds and optionally followed by a 'K' to indicate that a buffer 402 int timestamp_in_ms;
403 // should be marked as a keyframe. For example "0K 30 60" should constuct 403 int flags;
404 // a cluster with 3 blocks: a keyframe with timestamp 0 and 2 non-keyframes 404 int duration;
405 // at 30ms and 60ms. 405
406 void AppendSingleStreamCluster(const std::string& source_id, int track_number, 406 bool operator< (const BlockInfo& rhs) const {
407 const std::string& cluster_description) { 407 // We want pop() to return blocks in timestamp increasing order
wolenetz 2014/07/08 19:33:53 nit: This could become confusing later if BlockInf
acolwell GONE FROM CHROMIUM 2014/07/08 22:00:38 Done.
408 // so timestamps with lower values have higher priority.
409 return timestamp_in_ms > rhs.timestamp_in_ms;
410 }
411 };
412
413 // |track_number| - The track number to place in
414 // |blocks_description| - A space delimited string of block info that
415 // is used to populate |blocks|. Each block info has a timestamp in
416 // milliseconds and optionally followed by a 'K' to indicate that a block
417 // should be marked as a keyframe. For example "0K 30 60" should populate
418 // |blocks| with 3 BlockInfo objects: a keyframe with timestamp 0 |and 2
wolenetz 2014/07/08 19:33:53 nit: s/|and/and
acolwell GONE FROM CHROMIUM 2014/07/08 22:00:38 Done.
419 // non-keyframes at 30ms and 60ms.
420 void ParseBlockDescription(int track_number,
421 const std::string blocks_description,
422 std::vector<BlockInfo>* blocks) {
408 std::vector<std::string> timestamps; 423 std::vector<std::string> timestamps;
409 base::SplitString(cluster_description, ' ', &timestamps); 424 base::SplitString(blocks_description, ' ', &timestamps);
410 425
411 ClusterBuilder cb;
412 std::vector<uint8> data(10);
413 for (size_t i = 0; i < timestamps.size(); ++i) { 426 for (size_t i = 0; i < timestamps.size(); ++i) {
414 std::string timestamp_str = timestamps[i]; 427 std::string timestamp_str = timestamps[i];
415 int block_flags = 0; 428 BlockInfo block_info;
429
430 block_info.track_number = track_number;
431 block_info.flags = 0;
432 block_info.duration = 0;
433
416 if (EndsWith(timestamp_str, "K", true)) { 434 if (EndsWith(timestamp_str, "K", true)) {
417 block_flags = kWebMFlagKeyframe; 435 block_info.flags = kWebMFlagKeyframe;
418 // Remove the "K" off of the token. 436 // Remove the "K" off of the token.
419 timestamp_str = timestamp_str.substr(0, timestamps[i].length() - 1); 437 timestamp_str = timestamp_str.substr(0, timestamps[i].length() - 1);
420 } 438 }
421 int timestamp_in_ms; 439 CHECK(base::StringToInt(timestamp_str, &block_info.timestamp_in_ms));
422 CHECK(base::StringToInt(timestamp_str, &timestamp_in_ms));
423
424 if (i == 0)
425 cb.SetClusterTimecode(timestamp_in_ms);
426 440
427 if (track_number == kTextTrackNum || 441 if (track_number == kTextTrackNum ||
428 track_number == kAlternateTextTrackNum) { 442 track_number == kAlternateTextTrackNum) {
429 cb.AddBlockGroup(track_number, timestamp_in_ms, kTextBlockDuration, 443 block_info.duration = kTextBlockDuration;
430 block_flags, &data[0], data.size()); 444 ASSERT_EQ(block_info.flags, kWebMFlagKeyframe)
wolenetz 2014/07/08 19:33:53 nit: ASSERT_EQ(expected, actual) per https://code.
acolwell GONE FROM CHROMIUM 2014/07/08 22:00:37 Done. /me shakes fist at junit.
445 << "Text block with timestamp " << block_info.timestamp_in_ms
446 << " was not marked as a keyframe."
447 << " All text blocks must be keyframes";
448 }
449
450 blocks->push_back(block_info);
451 }
452 }
453
454 scoped_ptr<Cluster> GenerateCluster(const std::vector<BlockInfo>& blocks) {
455 ClusterBuilder cb;
wolenetz 2014/07/08 19:33:53 nit: Add ASSERT_LT(0, blocks.size()); since we won
acolwell GONE FROM CHROMIUM 2014/07/08 22:00:38 Done.
456
457 std::vector<uint8> data(10);
458 for (size_t i = 0; i < blocks.size(); ++i) {
459 if (i == 0)
460 cb.SetClusterTimecode(blocks[i].timestamp_in_ms);
461
462 if (blocks[i].duration) {
463 cb.AddBlockGroup(blocks[i].track_number, blocks[i].timestamp_in_ms,
464 blocks[i].duration, blocks[i].flags,
465 &data[0], data.size());
431 } else { 466 } else {
432 cb.AddSimpleBlock(track_number, timestamp_in_ms, block_flags, 467 cb.AddSimpleBlock(blocks[i].track_number, blocks[i].timestamp_in_ms,
468 blocks[i].flags,
433 &data[0], data.size()); 469 &data[0], data.size());
434 } 470 }
435 } 471 }
436 AppendCluster(source_id, cb.Finish()); 472
473 return cb.Finish();
474 }
475
476 // |block_description| - The block description used to construct the cluster.
477 // See the documentation for ParseBlockDescription() for details on the string
478 // format.
479 void AppendSingleStreamCluster(const std::string& source_id, int track_number,
480 const std::string& block_description) {
481 std::vector<BlockInfo> blocks;
482 ParseBlockDescription(track_number, block_description, &blocks);
483 AppendCluster(source_id, GenerateCluster(blocks));
437 } 484 }
438 485
439 struct MuxedStreamInfo { 486 struct MuxedStreamInfo {
440 MuxedStreamInfo() 487 MuxedStreamInfo()
441 : track_number(0), 488 : track_number(0),
442 cluster_description("") 489 block_description("")
443 {} 490 {}
444 491
445 MuxedStreamInfo(int track_num, const char* cluster_desc) 492 MuxedStreamInfo(int track_num, const char* block_desc)
446 : track_number(track_num), 493 : track_number(track_num),
447 cluster_description(cluster_desc) { 494 block_description(block_desc) {
448 } 495 }
449 496
450 int track_number; 497 int track_number;
451 // The cluster description passed to AppendSingleStreamCluster(). 498 // The block description passed to ParseBlockDescription().
452 // See the documentation for that method for details on the string format. 499 // See the documentation for that method for details on the string format.
453 const char* cluster_description; 500 const char* block_description;
wolenetz 2014/07/08 19:33:53 nit: s/block_description/block_descriptions or blo
acolwell GONE FROM CHROMIUM 2014/07/08 22:00:38 Done.
454 }; 501 };
455 502
456 void AppendMuxedCluster(const MuxedStreamInfo& msi_1, 503 void AppendMuxedCluster(const MuxedStreamInfo& msi_1,
457 const MuxedStreamInfo& msi_2) { 504 const MuxedStreamInfo& msi_2) {
458 std::vector<MuxedStreamInfo> msi(2); 505 std::vector<MuxedStreamInfo> msi(2);
459 msi[0] = msi_1; 506 msi[0] = msi_1;
460 msi[1] = msi_2; 507 msi[1] = msi_2;
461 AppendMuxedCluster(msi); 508 AppendMuxedCluster(msi);
462 } 509 }
463 510
464 void AppendMuxedCluster(const MuxedStreamInfo& msi_1, 511 void AppendMuxedCluster(const MuxedStreamInfo& msi_1,
465 const MuxedStreamInfo& msi_2, 512 const MuxedStreamInfo& msi_2,
466 const MuxedStreamInfo& msi_3) { 513 const MuxedStreamInfo& msi_3) {
467 std::vector<MuxedStreamInfo> msi(3); 514 std::vector<MuxedStreamInfo> msi(3);
468 msi[0] = msi_1; 515 msi[0] = msi_1;
469 msi[1] = msi_2; 516 msi[1] = msi_2;
470 msi[2] = msi_3; 517 msi[2] = msi_3;
471 AppendMuxedCluster(msi); 518 AppendMuxedCluster(msi);
472 } 519 }
473 520
474 void AppendMuxedCluster(const std::vector<MuxedStreamInfo> msi) { 521 void AppendMuxedCluster(const std::vector<MuxedStreamInfo> msi) {
522 std::priority_queue<BlockInfo> block_queue;
475 for (size_t i = 0; i < msi.size(); ++i) { 523 for (size_t i = 0; i < msi.size(); ++i) {
476 AppendSingleStreamCluster(kSourceId, 524 std::vector<BlockInfo> track_blocks;
477 msi[i].track_number, 525 ParseBlockDescription(msi[i].track_number, msi[i].block_description,
478 msi[i].cluster_description); 526 &track_blocks);
527
528 for (size_t j = 0; j < track_blocks.size(); ++j)
529 block_queue.push(track_blocks[j]);
479 } 530 }
531
532 std::vector<BlockInfo> blocks(block_queue.size());
533 for (size_t i = 0; !block_queue.empty(); ++i) {
534 blocks[i] = block_queue.top();
535 block_queue.pop();
536 }
537
538 AppendCluster(kSourceId, GenerateCluster(blocks));
480 } 539 }
481 540
482 void AppendData(const std::string& source_id, 541 void AppendData(const std::string& source_id,
483 const uint8* data, size_t length) { 542 const uint8* data, size_t length) {
484 EXPECT_CALL(host_, AddBufferedTimeRange(_, _)).Times(AnyNumber()); 543 EXPECT_CALL(host_, AddBufferedTimeRange(_, _)).Times(AnyNumber());
485 544
486 demuxer_->AppendData(source_id, data, length, 545 demuxer_->AppendData(source_id, data, length,
487 append_window_start_for_next_append_, 546 append_window_start_for_next_append_,
488 append_window_end_for_next_append_, 547 append_window_end_for_next_append_,
489 &timestamp_offset_map_[source_id]); 548 &timestamp_offset_map_[source_id]);
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
708 sizeof(kVP8Interframe); 767 sizeof(kVP8Interframe);
709 cb->AddBlockGroup(track_num, timecode, duration, flags, data, size); 768 cb->AddBlockGroup(track_num, timecode, duration, flags, data, size);
710 } 769 }
711 770
712 scoped_ptr<Cluster> GenerateCluster(int first_audio_timecode, 771 scoped_ptr<Cluster> GenerateCluster(int first_audio_timecode,
713 int first_video_timecode, 772 int first_video_timecode,
714 int block_count) { 773 int block_count) {
715 return GenerateCluster(first_audio_timecode, first_video_timecode, 774 return GenerateCluster(first_audio_timecode, first_video_timecode,
716 block_count, false); 775 block_count, false);
717 } 776 }
718 scoped_ptr<Cluster> GenerateCluster(int first_audio_timecode, 777 scoped_ptr<Cluster> GenerateCluster(int first_audio_timecode,
wolenetz 2014/07/08 19:33:53 We also have this version of GenerateCluster that
acolwell GONE FROM CHROMIUM 2014/07/08 22:00:38 Done. Converted this method to use BlockInfo to ge
719 int first_video_timecode, 778 int first_video_timecode,
720 int block_count, 779 int block_count,
721 bool unknown_size) { 780 bool unknown_size) {
722 CHECK_GT(block_count, 0); 781 CHECK_GT(block_count, 0);
723 782
724 int size = 10; 783 int size = 10;
725 scoped_ptr<uint8[]> data(new uint8[size]); 784 scoped_ptr<uint8[]> data(new uint8[size]);
726 785
727 ClusterBuilder cb; 786 ClusterBuilder cb;
728 cb.SetClusterTimecode(std::min(first_audio_timecode, first_video_timecode)); 787 cb.SetClusterTimecode(std::min(first_audio_timecode, first_video_timecode));
(...skipping 554 matching lines...) Expand 10 before | Expand all | Expand 10 after
1283 .WillOnce(SaveArg<0>(&text_stream)); 1342 .WillOnce(SaveArg<0>(&text_stream));
1284 ASSERT_TRUE(InitDemuxerWithEncryptionInfo( 1343 ASSERT_TRUE(InitDemuxerWithEncryptionInfo(
1285 HAS_TEXT | HAS_AUDIO | HAS_VIDEO, false, false)); 1344 HAS_TEXT | HAS_AUDIO | HAS_VIDEO, false, false));
1286 DemuxerStream* audio_stream = demuxer_->GetStream(DemuxerStream::AUDIO); 1345 DemuxerStream* audio_stream = demuxer_->GetStream(DemuxerStream::AUDIO);
1287 DemuxerStream* video_stream = demuxer_->GetStream(DemuxerStream::VIDEO); 1346 DemuxerStream* video_stream = demuxer_->GetStream(DemuxerStream::VIDEO);
1288 ASSERT_TRUE(audio_stream && video_stream && text_stream); 1347 ASSERT_TRUE(audio_stream && video_stream && text_stream);
1289 1348
1290 AppendMuxedCluster( 1349 AppendMuxedCluster(
1291 MuxedStreamInfo(kAudioTrackNum, "0 23K"), 1350 MuxedStreamInfo(kAudioTrackNum, "0 23K"),
1292 MuxedStreamInfo(kVideoTrackNum, "0 30K"), 1351 MuxedStreamInfo(kVideoTrackNum, "0 30K"),
1293 MuxedStreamInfo(kTextTrackNum, "0 40K")); 1352 MuxedStreamInfo(kTextTrackNum, "25K 40K"));
acolwell GONE FROM CHROMIUM 2014/07/08 16:32:00 This was moved to avoid the text keyframe from cau
1294 CheckExpectedRanges(kSourceId, "{ [30,46) }"); 1353 CheckExpectedRanges(kSourceId, "{ [23,46) }");
wolenetz 2014/07/08 19:33:53 IIUC, this change from 30 to 23 is unrelated to th
acolwell GONE FROM CHROMIUM 2014/07/08 22:00:37 That is correct.
1295 1354
1296 AppendInitSegment(HAS_TEXT | HAS_AUDIO | HAS_VIDEO); 1355 AppendInitSegment(HAS_TEXT | HAS_AUDIO | HAS_VIDEO);
1297 AppendMuxedCluster( 1356 AppendMuxedCluster(
1298 MuxedStreamInfo(kAudioTrackNum, "46 69K"), 1357 MuxedStreamInfo(kAudioTrackNum, "46 69K"),
1299 MuxedStreamInfo(kVideoTrackNum, "60 90K"), 1358 MuxedStreamInfo(kVideoTrackNum, "60 90K"),
1300 MuxedStreamInfo(kTextTrackNum, "80 90K")); 1359 MuxedStreamInfo(kTextTrackNum, "80K 90K"));
1301 CheckExpectedRanges(kSourceId, "{ [30,92) }"); 1360 CheckExpectedRanges(kSourceId, "{ [23,92) }");
1302 1361
1303 CheckExpectedBuffers(audio_stream, "23 69"); 1362 CheckExpectedBuffers(audio_stream, "23 69");
1304 CheckExpectedBuffers(video_stream, "30 90"); 1363 CheckExpectedBuffers(video_stream, "30 90");
1305 1364 CheckExpectedBuffers(text_stream, "25 40 80 90");
1306 // WebM parser marks all text buffers as keyframes.
1307 CheckExpectedBuffers(text_stream, "0 40 80 90");
1308 } 1365 }
1309 1366
1310 // Make sure that the demuxer reports an error if Shutdown() 1367 // Make sure that the demuxer reports an error if Shutdown()
1311 // is called before all the initialization segments are appended. 1368 // is called before all the initialization segments are appended.
1312 TEST_F(ChunkDemuxerTest, Shutdown_BeforeAllInitSegmentsAppended) { 1369 TEST_F(ChunkDemuxerTest, Shutdown_BeforeAllInitSegmentsAppended) {
1313 EXPECT_CALL(*this, DemuxerOpened()); 1370 EXPECT_CALL(*this, DemuxerOpened());
1314 demuxer_->Initialize( 1371 demuxer_->Initialize(
1315 &host_, CreateInitDoneCB( 1372 &host_, CreateInitDoneCB(
1316 kDefaultDuration(), DEMUXER_ERROR_COULD_NOT_OPEN), true); 1373 kDefaultDuration(), DEMUXER_ERROR_COULD_NOT_OPEN), true);
1317 1374
(...skipping 1143 matching lines...) Expand 10 before | Expand all | Expand 10 after
2461 // Verify that the range extends to the end of the video data. 2518 // Verify that the range extends to the end of the video data.
2462 CheckExpectedRanges("{ [0,66) }"); 2519 CheckExpectedRanges("{ [0,66) }");
2463 2520
2464 // Verify that the range reverts to the intersection when end of stream 2521 // Verify that the range reverts to the intersection when end of stream
2465 // has been cancelled. 2522 // has been cancelled.
2466 demuxer_->UnmarkEndOfStream(); 2523 demuxer_->UnmarkEndOfStream();
2467 CheckExpectedRanges("{ [0,46) }"); 2524 CheckExpectedRanges("{ [0,46) }");
2468 2525
2469 // Append and remove data so that the 2 streams' end ranges do not overlap. 2526 // Append and remove data so that the 2 streams' end ranges do not overlap.
2470 2527
2471 EXPECT_CALL(host_, SetDuration(base::TimeDelta::FromMilliseconds(246)));
acolwell GONE FROM CHROMIUM 2014/07/08 16:32:00 This extra call was being triggered because there
2472 EXPECT_CALL(host_, SetDuration(base::TimeDelta::FromMilliseconds(398))); 2528 EXPECT_CALL(host_, SetDuration(base::TimeDelta::FromMilliseconds(398)));
2473 AppendMuxedCluster( 2529 AppendMuxedCluster(
2474 MuxedStreamInfo(kAudioTrackNum, "200K 223K"), 2530 MuxedStreamInfo(kAudioTrackNum, "200K 223K"),
2475 MuxedStreamInfo(kVideoTrackNum, "200K 233 266 299 332K 365")); 2531 MuxedStreamInfo(kVideoTrackNum, "200K 233 266 299 332K 365"));
2476 2532
2477 // At this point, the per-stream ranges are as follows: 2533 // At this point, the per-stream ranges are as follows:
2478 // Audio: [0,46) [200,246) 2534 // Audio: [0,46) [200,246)
2479 // Video: [0,66) [200,398) 2535 // Video: [0,66) [200,398)
2480 CheckExpectedRanges("{ [0,46) [200,246) }"); 2536 CheckExpectedRanges("{ [0,46) [200,246) }");
2481 2537
(...skipping 864 matching lines...) Expand 10 before | Expand all | Expand 10 after
3346 // Append a cluster that starts before and ends after the append 3402 // Append a cluster that starts before and ends after the append
3347 // window. 3403 // window.
3348 AppendMuxedCluster( 3404 AppendMuxedCluster(
3349 MuxedStreamInfo(kVideoTrackNum, 3405 MuxedStreamInfo(kVideoTrackNum,
3350 "0K 30 60 90 120K 150 180 210 240K 270 300 330K"), 3406 "0K 30 60 90 120K 150 180 210 240K 270 300 330K"),
3351 MuxedStreamInfo(kTextTrackNum, "0K 100K 200K 300K" )); 3407 MuxedStreamInfo(kTextTrackNum, "0K 100K 200K 300K" ));
3352 3408
3353 // Verify that text cues that start outside the window are not included 3409 // Verify that text cues that start outside the window are not included
3354 // in the buffer. Also verify that cues that extend beyond the 3410 // in the buffer. Also verify that cues that extend beyond the
3355 // window are not included. 3411 // window are not included.
3356 CheckExpectedRanges(kSourceId, "{ [120,270) }"); 3412 CheckExpectedRanges(kSourceId, "{ [100,270) }");
acolwell GONE FROM CHROMIUM 2014/07/08 16:32:00 The text buffer is the first frame within the appe
3357 CheckExpectedBuffers(video_stream, "120 150 180 210 240"); 3413 CheckExpectedBuffers(video_stream, "120 150 180 210 240");
3358 CheckExpectedBuffers(text_stream, "100"); 3414 CheckExpectedBuffers(text_stream, "100");
3359 3415
3360 // Extend the append window to [20,650). 3416 // Extend the append window to [20,650).
3361 append_window_end_for_next_append_ = base::TimeDelta::FromMilliseconds(650); 3417 append_window_end_for_next_append_ = base::TimeDelta::FromMilliseconds(650);
3362 3418
3363 // Append more data and verify that a new range is created. 3419 // Append more data and verify that a new range is created.
3364 AppendMuxedCluster( 3420 AppendMuxedCluster(
3365 MuxedStreamInfo(kVideoTrackNum, 3421 MuxedStreamInfo(kVideoTrackNum,
3366 "360 390 420K 450 480 510 540K 570 600 630K"), 3422 "360 390 420K 450 480 510 540K 570 600 630K"),
3367 MuxedStreamInfo(kTextTrackNum, "400K 500K 600K 700K" )); 3423 MuxedStreamInfo(kTextTrackNum, "400K 500K 600K 700K" ));
3368 CheckExpectedRanges(kSourceId, "{ [120,270) [420,630) }"); 3424 CheckExpectedRanges(kSourceId, "{ [100,270) [400,630) }");
3369 3425
3370 // Seek to the new range and verify that the expected buffers are returned. 3426 // Seek to the new range and verify that the expected buffers are returned.
3371 Seek(base::TimeDelta::FromMilliseconds(420)); 3427 Seek(base::TimeDelta::FromMilliseconds(420));
3372 CheckExpectedBuffers(video_stream, "420 450 480 510 540 570 600"); 3428 CheckExpectedBuffers(video_stream, "420 450 480 510 540 570 600");
3373 CheckExpectedBuffers(text_stream, "400 500"); 3429 CheckExpectedBuffers(text_stream, "400 500");
3374 } 3430 }
3375 3431
3376 TEST_F(ChunkDemuxerTest, StartWaitingForSeekAfterParseError) { 3432 TEST_F(ChunkDemuxerTest, StartWaitingForSeekAfterParseError) {
3377 ASSERT_TRUE(InitDemuxer(HAS_AUDIO | HAS_VIDEO)); 3433 ASSERT_TRUE(InitDemuxer(HAS_AUDIO | HAS_VIDEO));
3378 EXPECT_CALL(host_, OnDemuxerError(PIPELINE_ERROR_DECODE)); 3434 EXPECT_CALL(host_, OnDemuxerError(PIPELINE_ERROR_DECODE));
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
3491 // Append text cues that start after the seek point and verify that 3547 // Append text cues that start after the seek point and verify that
3492 // they are returned by Read() calls. 3548 // they are returned by Read() calls.
3493 AppendMuxedCluster( 3549 AppendMuxedCluster(
3494 MuxedStreamInfo(kAudioTrackNum, "220K 240K 260K 280K"), 3550 MuxedStreamInfo(kAudioTrackNum, "220K 240K 260K 280K"),
3495 MuxedStreamInfo(kVideoTrackNum, "240K 270 300 330"), 3551 MuxedStreamInfo(kVideoTrackNum, "240K 270 300 330"),
3496 MuxedStreamInfo(kTextTrackNum, "225K 275K 325K")); 3552 MuxedStreamInfo(kTextTrackNum, "225K 275K 325K"));
3497 3553
3498 message_loop_.RunUntilIdle(); 3554 message_loop_.RunUntilIdle();
3499 EXPECT_TRUE(text_read_done); 3555 EXPECT_TRUE(text_read_done);
3500 3556
3501 // NOTE: we start at 175 here because the buffer at 125 was returned 3557 // NOTE: we start at 175 here because the buffer at 125 was returned
wolenetz 2014/07/08 19:33:53 nit: Precursor CL introduced change to 275. s/175/
acolwell GONE FROM CHROMIUM 2014/07/08 22:00:37 Done.
3502 // to the pending read initiated above. 3558 // to the pending read initiated above.
3503 CheckExpectedBuffers(text_stream, "275 325"); 3559 CheckExpectedBuffers(text_stream, "275 325");
3504 3560
3505 // Verify that audio & video streams continue to return expected values. 3561 // Verify that audio & video streams continue to return expected values.
3506 CheckExpectedBuffers(audio_stream, "160 180"); 3562 CheckExpectedBuffers(audio_stream, "160 180");
3507 CheckExpectedBuffers(video_stream, "180 210"); 3563 CheckExpectedBuffers(video_stream, "180 210");
3508 } 3564 }
3509 3565
3510 TEST_F(ChunkDemuxerTest, ClusterWithUnknownSize) { 3566 TEST_F(ChunkDemuxerTest, ClusterWithUnknownSize) {
3511 ASSERT_TRUE(InitDemuxer(HAS_AUDIO | HAS_VIDEO)); 3567 ASSERT_TRUE(InitDemuxer(HAS_AUDIO | HAS_VIDEO));
(...skipping 23 matching lines...) Expand all
3535 TEST_F(ChunkDemuxerTest, CuesBetweenClusters) { 3591 TEST_F(ChunkDemuxerTest, CuesBetweenClusters) {
3536 ASSERT_TRUE(InitDemuxer(HAS_AUDIO | HAS_VIDEO)); 3592 ASSERT_TRUE(InitDemuxer(HAS_AUDIO | HAS_VIDEO));
3537 3593
3538 AppendCluster(GenerateCluster(0, 0, 4)); 3594 AppendCluster(GenerateCluster(0, 0, 4));
3539 AppendData(kCuesHeader, sizeof(kCuesHeader)); 3595 AppendData(kCuesHeader, sizeof(kCuesHeader));
3540 AppendCluster(GenerateCluster(46, 66, 5)); 3596 AppendCluster(GenerateCluster(46, 66, 5));
3541 CheckExpectedRanges(kSourceId, "{ [0,115) }"); 3597 CheckExpectedRanges(kSourceId, "{ [0,115) }");
3542 } 3598 }
3543 3599
3544 } // namespace media 3600 } // namespace media
OLDNEW
« no previous file with comments | « no previous file | media/filters/frame_processor.cc » ('j') | media/filters/frame_processor.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698