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

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

Issue 361303003: Add AppendMuxedCluster() method to make test intentions clearer. (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 | no next file » | no next file with comments »
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 418 matching lines...) Expand 10 before | Expand all | Expand 10 after
429 cb.AddBlockGroup(track_number, timestamp_in_ms, kTextBlockDuration, 429 cb.AddBlockGroup(track_number, timestamp_in_ms, kTextBlockDuration,
430 block_flags, &data[0], data.size()); 430 block_flags, &data[0], data.size());
431 } else { 431 } else {
432 cb.AddSimpleBlock(track_number, timestamp_in_ms, block_flags, 432 cb.AddSimpleBlock(track_number, timestamp_in_ms, block_flags,
433 &data[0], data.size()); 433 &data[0], data.size());
434 } 434 }
435 } 435 }
436 AppendCluster(source_id, cb.Finish()); 436 AppendCluster(source_id, cb.Finish());
437 } 437 }
438 438
439 struct MuxedStreamInfo {
440 int track_number;
441 const char* description;
wolenetz 2014/07/07 21:31:45 nit: s/description/cluster_description/. Also mayb
acolwell GONE FROM CHROMIUM 2014/07/07 23:56:36 Done.
442 };
443
444 void AppendMuxedCluster(const MuxedStreamInfo& msi_1,
445 const MuxedStreamInfo& msi_2) {
446 std::vector<MuxedStreamInfo> msi(2);
447 msi[0] = msi_1;
448 msi[1] = msi_2;
449 AppendMuxedCluster(msi);
450 }
451
452 void AppendMuxedCluster(const MuxedStreamInfo& msi_1,
453 const MuxedStreamInfo& msi_2,
454 const MuxedStreamInfo& msi_3) {
455 std::vector<MuxedStreamInfo> msi(3);
456 msi[0] = msi_1;
457 msi[1] = msi_2;
458 msi[2] = msi_3;
459 AppendMuxedCluster(msi);
460 }
461
462 void AppendMuxedCluster(const std::vector<MuxedStreamInfo> msi) {
463 for (size_t i = 0; i < msi.size(); ++i) {
464 AppendSingleStreamCluster(kSourceId,
wolenetz 2014/07/07 21:31:44 nit: Include a TODO for the follow-up CL to actual
acolwell GONE FROM CHROMIUM 2014/07/07 23:56:36 I have the follow-up CL written already. I was jus
wolenetz 2014/07/08 00:47:33 sgtm
465 msi[i].track_number,
466 msi[i].description);
467 }
468 }
469
439 void AppendData(const std::string& source_id, 470 void AppendData(const std::string& source_id,
440 const uint8* data, size_t length) { 471 const uint8* data, size_t length) {
441 EXPECT_CALL(host_, AddBufferedTimeRange(_, _)).Times(AnyNumber()); 472 EXPECT_CALL(host_, AddBufferedTimeRange(_, _)).Times(AnyNumber());
442 473
443 demuxer_->AppendData(source_id, data, length, 474 demuxer_->AppendData(source_id, data, length,
444 append_window_start_for_next_append_, 475 append_window_start_for_next_append_,
445 append_window_end_for_next_append_, 476 append_window_end_for_next_append_,
446 &timestamp_offset_map_[source_id]); 477 &timestamp_offset_map_[source_id]);
447 } 478 }
448 479
(...skipping 742 matching lines...) Expand 10 before | Expand all | Expand 10 after
1191 .WillOnce(DoAll(SaveArg<0>(&text_stream), 1222 .WillOnce(DoAll(SaveArg<0>(&text_stream),
1192 SaveArg<1>(&text_config))); 1223 SaveArg<1>(&text_config)));
1193 ASSERT_TRUE(InitDemuxerWithEncryptionInfo( 1224 ASSERT_TRUE(InitDemuxerWithEncryptionInfo(
1194 HAS_TEXT | HAS_AUDIO | HAS_VIDEO, false, false)); 1225 HAS_TEXT | HAS_AUDIO | HAS_VIDEO, false, false));
1195 DemuxerStream* audio_stream = demuxer_->GetStream(DemuxerStream::AUDIO); 1226 DemuxerStream* audio_stream = demuxer_->GetStream(DemuxerStream::AUDIO);
1196 DemuxerStream* video_stream = demuxer_->GetStream(DemuxerStream::VIDEO); 1227 DemuxerStream* video_stream = demuxer_->GetStream(DemuxerStream::VIDEO);
1197 ASSERT_TRUE(audio_stream); 1228 ASSERT_TRUE(audio_stream);
1198 ASSERT_TRUE(video_stream); 1229 ASSERT_TRUE(video_stream);
1199 ASSERT_TRUE(text_stream); 1230 ASSERT_TRUE(text_stream);
1200 1231
1201 AppendSingleStreamCluster(kSourceId, kAudioTrackNum, "0K 23K"); 1232 AppendMuxedCluster(
1202 AppendSingleStreamCluster(kSourceId, kVideoTrackNum, "0K 30"); 1233 { kAudioTrackNum, "0K 23K" },
1203 AppendSingleStreamCluster(kSourceId, kTextTrackNum, "10K"); 1234 { kVideoTrackNum, "0K 30" },
1235 { kTextTrackNum, "10K" });
1204 CheckExpectedRanges(kSourceId, "{ [0,46) }"); 1236 CheckExpectedRanges(kSourceId, "{ [0,46) }");
1205 1237
1206 scoped_ptr<uint8[]> info_tracks; 1238 scoped_ptr<uint8[]> info_tracks;
1207 int info_tracks_size = 0; 1239 int info_tracks_size = 0;
1208 CreateInitSegmentWithAlternateTextTrackNum(HAS_TEXT | HAS_AUDIO | HAS_VIDEO, 1240 CreateInitSegmentWithAlternateTextTrackNum(HAS_TEXT | HAS_AUDIO | HAS_VIDEO,
1209 false, false, 1241 false, false,
1210 &info_tracks, &info_tracks_size); 1242 &info_tracks, &info_tracks_size);
1211 demuxer_->AppendData(kSourceId, info_tracks.get(), info_tracks_size, 1243 demuxer_->AppendData(kSourceId, info_tracks.get(), info_tracks_size,
1212 append_window_start_for_next_append_, 1244 append_window_start_for_next_append_,
1213 append_window_end_for_next_append_, 1245 append_window_end_for_next_append_,
1214 &timestamp_offset_map_[kSourceId]); 1246 &timestamp_offset_map_[kSourceId]);
1215 1247
1216 AppendSingleStreamCluster(kSourceId, kAudioTrackNum, "46K 69K"); 1248 AppendMuxedCluster(
1217 AppendSingleStreamCluster(kSourceId, kVideoTrackNum, "60K"); 1249 { kAudioTrackNum, "46K 69K" },
1218 AppendSingleStreamCluster(kSourceId, kAlternateTextTrackNum, "45K"); 1250 { kVideoTrackNum, "60K" },
1251 { kAlternateTextTrackNum, "45K" });
1219 1252
1220 CheckExpectedRanges(kSourceId, "{ [0,92) }"); 1253 CheckExpectedRanges(kSourceId, "{ [0,92) }");
1221 CheckExpectedBuffers(audio_stream, "0 23 46 69"); 1254 CheckExpectedBuffers(audio_stream, "0 23 46 69");
1222 CheckExpectedBuffers(video_stream, "0 30 60"); 1255 CheckExpectedBuffers(video_stream, "0 30 60");
1223 CheckExpectedBuffers(text_stream, "10 45"); 1256 CheckExpectedBuffers(text_stream, "10 45");
1224 1257
1225 ShutdownDemuxer(); 1258 ShutdownDemuxer();
1226 } 1259 }
1227 1260
1228 TEST_F(ChunkDemuxerTest, InitSegmentSetsNeedRandomAccessPointFlag) { 1261 TEST_F(ChunkDemuxerTest, InitSegmentSetsNeedRandomAccessPointFlag) {
1229 // Tests that non-keyframes following an init segment are allowed 1262 // Tests that non-keyframes following an init segment are allowed
1230 // and dropped, as expected if the initialization segment received 1263 // and dropped, as expected if the initialization segment received
1231 // algorithm correctly sets the needs random access point flag to true for all 1264 // algorithm correctly sets the needs random access point flag to true for all
1232 // track buffers. Note that the first initialization segment is insufficient 1265 // track buffers. Note that the first initialization segment is insufficient
1233 // to fully test this since needs random access point flag initializes to 1266 // to fully test this since needs random access point flag initializes to
1234 // true. 1267 // true.
1235 CreateNewDemuxer(); 1268 CreateNewDemuxer();
1236 DemuxerStream* text_stream = NULL; 1269 DemuxerStream* text_stream = NULL;
1237 EXPECT_CALL(host_, AddTextStream(_, _)) 1270 EXPECT_CALL(host_, AddTextStream(_, _))
1238 .WillOnce(SaveArg<0>(&text_stream)); 1271 .WillOnce(SaveArg<0>(&text_stream));
1239 ASSERT_TRUE(InitDemuxerWithEncryptionInfo( 1272 ASSERT_TRUE(InitDemuxerWithEncryptionInfo(
1240 HAS_TEXT | HAS_AUDIO | HAS_VIDEO, false, false)); 1273 HAS_TEXT | HAS_AUDIO | HAS_VIDEO, false, false));
1241 DemuxerStream* audio_stream = demuxer_->GetStream(DemuxerStream::AUDIO); 1274 DemuxerStream* audio_stream = demuxer_->GetStream(DemuxerStream::AUDIO);
1242 DemuxerStream* video_stream = demuxer_->GetStream(DemuxerStream::VIDEO); 1275 DemuxerStream* video_stream = demuxer_->GetStream(DemuxerStream::VIDEO);
1243 ASSERT_TRUE(audio_stream && video_stream && text_stream); 1276 ASSERT_TRUE(audio_stream && video_stream && text_stream);
1244 1277
1245 AppendSingleStreamCluster(kSourceId, kAudioTrackNum, "0 23K"); 1278 AppendMuxedCluster(
1246 AppendSingleStreamCluster(kSourceId, kVideoTrackNum, "0 30K"); 1279 { kAudioTrackNum, "0 23K" },
1247 AppendSingleStreamCluster(kSourceId, kTextTrackNum, "0 40K"); 1280 { kVideoTrackNum, "0 30K" },
1281 { kTextTrackNum, "0 40K" });
1248 CheckExpectedRanges(kSourceId, "{ [30,46) }"); 1282 CheckExpectedRanges(kSourceId, "{ [30,46) }");
1249 1283
1250 AppendInitSegment(HAS_TEXT | HAS_AUDIO | HAS_VIDEO); 1284 AppendInitSegment(HAS_TEXT | HAS_AUDIO | HAS_VIDEO);
1251 AppendSingleStreamCluster(kSourceId, kAudioTrackNum, "46 69K"); 1285 AppendMuxedCluster(
1252 AppendSingleStreamCluster(kSourceId, kVideoTrackNum, "60 90K"); 1286 { kAudioTrackNum, "46 69K" },
1253 AppendSingleStreamCluster(kSourceId, kTextTrackNum, "80 90K"); 1287 { kVideoTrackNum, "60 90K" },
1288 { kTextTrackNum, "80 90K" });
1254 CheckExpectedRanges(kSourceId, "{ [30,92) }"); 1289 CheckExpectedRanges(kSourceId, "{ [30,92) }");
1255 1290
1256 CheckExpectedBuffers(audio_stream, "23 69"); 1291 CheckExpectedBuffers(audio_stream, "23 69");
1257 CheckExpectedBuffers(video_stream, "30 90"); 1292 CheckExpectedBuffers(video_stream, "30 90");
1258 1293
1259 // WebM parser marks all text buffers as keyframes. 1294 // WebM parser marks all text buffers as keyframes.
1260 CheckExpectedBuffers(text_stream, "0 40 80 90"); 1295 CheckExpectedBuffers(text_stream, "0 40 80 90");
1261 } 1296 }
1262 1297
1263 // Make sure that the demuxer reports an error if Shutdown() 1298 // Make sure that the demuxer reports an error if Shutdown()
(...skipping 459 matching lines...) Expand 10 before | Expand all | Expand 10 after
1723 } 1758 }
1724 1759
1725 // Verify buffered range change behavior for audio/video/text tracks. 1760 // Verify buffered range change behavior for audio/video/text tracks.
1726 TEST_F(ChunkDemuxerTest, EndOfStreamRangeChanges) { 1761 TEST_F(ChunkDemuxerTest, EndOfStreamRangeChanges) {
1727 DemuxerStream* text_stream = NULL; 1762 DemuxerStream* text_stream = NULL;
1728 1763
1729 EXPECT_CALL(host_, AddTextStream(_, _)) 1764 EXPECT_CALL(host_, AddTextStream(_, _))
1730 .WillOnce(SaveArg<0>(&text_stream)); 1765 .WillOnce(SaveArg<0>(&text_stream));
1731 ASSERT_TRUE(InitDemuxer(HAS_AUDIO | HAS_VIDEO | HAS_TEXT)); 1766 ASSERT_TRUE(InitDemuxer(HAS_AUDIO | HAS_VIDEO | HAS_TEXT));
1732 1767
1733 AppendSingleStreamCluster(kSourceId, kVideoTrackNum, "0K 33"); 1768 AppendMuxedCluster(
1734 AppendSingleStreamCluster(kSourceId, kAudioTrackNum, "0K 23K"); 1769 { kVideoTrackNum, "0K 33" },
1770 { kAudioTrackNum, "0K 23K" });
1735 1771
1736 // Check expected ranges and verify that an empty text track does not 1772 // Check expected ranges and verify that an empty text track does not
1737 // affect the expected ranges. 1773 // affect the expected ranges.
1738 CheckExpectedRanges(kSourceId, "{ [0,46) }"); 1774 CheckExpectedRanges(kSourceId, "{ [0,46) }");
1739 1775
1740 EXPECT_CALL(host_, SetDuration(base::TimeDelta::FromMilliseconds(66))); 1776 EXPECT_CALL(host_, SetDuration(base::TimeDelta::FromMilliseconds(66)));
1741 MarkEndOfStream(PIPELINE_OK); 1777 MarkEndOfStream(PIPELINE_OK);
1742 1778
1743 // Check expected ranges and verify that an empty text track does not 1779 // Check expected ranges and verify that an empty text track does not
1744 // affect the expected ranges. 1780 // affect the expected ranges.
1745 CheckExpectedRanges(kSourceId, "{ [0,66) }"); 1781 CheckExpectedRanges(kSourceId, "{ [0,66) }");
1746 1782
1747 // Unmark end of stream state and verify that the ranges return to 1783 // Unmark end of stream state and verify that the ranges return to
1748 // their pre-"end of stream" values. 1784 // their pre-"end of stream" values.
1749 demuxer_->UnmarkEndOfStream(); 1785 demuxer_->UnmarkEndOfStream();
1750 CheckExpectedRanges(kSourceId, "{ [0,46) }"); 1786 CheckExpectedRanges(kSourceId, "{ [0,46) }");
1751 1787
1752 // Add text track data and verify that the buffered ranges don't change 1788 // Add text track data and verify that the buffered ranges don't change
1753 // since the intersection of all the tracks doesn't change. 1789 // since the intersection of all the tracks doesn't change.
1754 EXPECT_CALL(host_, SetDuration(base::TimeDelta::FromMilliseconds(200))); 1790 EXPECT_CALL(host_, SetDuration(base::TimeDelta::FromMilliseconds(200)));
1755 AppendSingleStreamCluster(kSourceId, kTextTrackNum, "0K 100K"); 1791 AppendMuxedCluster(
1792 { kVideoTrackNum, "0K 33" },
1793 { kAudioTrackNum, "0K 23K" },
1794 { kTextTrackNum, "0K 100K" });
1756 CheckExpectedRanges(kSourceId, "{ [0,46) }"); 1795 CheckExpectedRanges(kSourceId, "{ [0,46) }");
1757 1796
1758 // Mark end of stream and verify that text track data is reflected in 1797 // Mark end of stream and verify that text track data is reflected in
1759 // the new range. 1798 // the new range.
1760 MarkEndOfStream(PIPELINE_OK); 1799 MarkEndOfStream(PIPELINE_OK);
1761 CheckExpectedRanges(kSourceId, "{ [0,200) }"); 1800 CheckExpectedRanges(kSourceId, "{ [0,200) }");
1762 } 1801 }
1763 1802
1764 // Make sure AppendData() will accept elements that span multiple calls. 1803 // Make sure AppendData() will accept elements that span multiple calls.
1765 TEST_F(ChunkDemuxerTest, AppendingInPieces) { 1804 TEST_F(ChunkDemuxerTest, AppendingInPieces) {
(...skipping 596 matching lines...) Expand 10 before | Expand all | Expand 10 after
2362 // buffered ranges. 2401 // buffered ranges.
2363 AppendCluster(GenerateSingleStreamCluster(1230, 1240, kVideoTrackNum, 10)); 2402 AppendCluster(GenerateSingleStreamCluster(1230, 1240, kVideoTrackNum, 10));
2364 CheckExpectedRanges("{ [0,23) [320,400) [520,570) [720,750) [920,950) }"); 2403 CheckExpectedRanges("{ [0,23) [320,400) [520,570) [720,750) [920,950) }");
2365 } 2404 }
2366 2405
2367 TEST_F(ChunkDemuxerTest, GetBufferedRanges_AudioVideoText) { 2406 TEST_F(ChunkDemuxerTest, GetBufferedRanges_AudioVideoText) {
2368 EXPECT_CALL(host_, AddTextStream(_, _)); 2407 EXPECT_CALL(host_, AddTextStream(_, _));
2369 ASSERT_TRUE(InitDemuxer(HAS_AUDIO | HAS_VIDEO | HAS_TEXT)); 2408 ASSERT_TRUE(InitDemuxer(HAS_AUDIO | HAS_VIDEO | HAS_TEXT));
2370 2409
2371 // Append audio & video data 2410 // Append audio & video data
2372 AppendSingleStreamCluster(kSourceId, kAudioTrackNum, "0K 23"); 2411 AppendMuxedCluster(
2373 AppendSingleStreamCluster(kSourceId, kVideoTrackNum, "0K 33"); 2412 { kAudioTrackNum, "0K 23" },
2413 { kVideoTrackNum, "0K 33" });
2374 2414
2375 // Verify that a text track with no cues does not result in an empty buffered 2415 // Verify that a text track with no cues does not result in an empty buffered
2376 // range. 2416 // range.
2377 CheckExpectedRanges("{ [0,46) }"); 2417 CheckExpectedRanges("{ [0,46) }");
2378 2418
2379 // Add some text cues. 2419 // Add some text cues.
2380 AppendSingleStreamCluster(kSourceId, kTextTrackNum, "0K 100K"); 2420 AppendMuxedCluster(
2421 { kAudioTrackNum, "100K 123" },
2422 { kVideoTrackNum, "100K 133" },
2423 { kTextTrackNum, "100K 200K"});
wolenetz 2014/07/07 21:31:44 nit: s/"}/" }/
acolwell GONE FROM CHROMIUM 2014/07/07 23:56:36 Done.
2381 2424
2382 // Verify that the new cues did not affect the buffered ranges. 2425 // Verify that the text cues are not reflected in the buffered ranges.
2383 CheckExpectedRanges("{ [0,46) }"); 2426 CheckExpectedRanges("{ [0,46) [100,146) }");
2384 2427
2385 // Remove the buffered range. 2428 // Remove the buffered ranges.
wolenetz 2014/07/07 21:31:44 nit: Fix related to my comment below, since the te
acolwell GONE FROM CHROMIUM 2014/07/07 23:56:36 I changed the remove range so that everything gets
2386 demuxer_->Remove(kSourceId, base::TimeDelta(), 2429 demuxer_->Remove(kSourceId, base::TimeDelta(),
2387 base::TimeDelta::FromMilliseconds(46)); 2430 base::TimeDelta::FromMilliseconds(146));
2388 CheckExpectedRanges("{ }"); 2431 CheckExpectedRanges("{ }");
wolenetz 2014/07/07 21:31:44 nit (maybe best left to a separate CL): If MarkEnd
acolwell GONE FROM CHROMIUM 2014/07/07 23:56:36 This seems like a completely separate issue that s
wolenetz 2014/07/08 00:47:33 sgtm. I've filed https://crbug.com/392006
2389 } 2432 }
2390 2433
2391 // Once MarkEndOfStream() is called, GetBufferedRanges should not cut off any 2434 // Once MarkEndOfStream() is called, GetBufferedRanges should not cut off any
2392 // over-hanging tails at the end of the ranges as this is likely due to block 2435 // over-hanging tails at the end of the ranges as this is likely due to block
2393 // duration differences. 2436 // duration differences.
2394 TEST_F(ChunkDemuxerTest, GetBufferedRanges_EndOfStream) { 2437 TEST_F(ChunkDemuxerTest, GetBufferedRanges_EndOfStream) {
2395 ASSERT_TRUE(InitDemuxer(HAS_AUDIO | HAS_VIDEO)); 2438 ASSERT_TRUE(InitDemuxer(HAS_AUDIO | HAS_VIDEO));
2396 2439
2397 AppendSingleStreamCluster(kSourceId, kAudioTrackNum, "0K 23K"); 2440 AppendMuxedCluster(
2398 AppendSingleStreamCluster(kSourceId, kVideoTrackNum, "0K 33"); 2441 { kAudioTrackNum, "0K 23K" },
2442 { kVideoTrackNum, "0K 33"});
wolenetz 2014/07/07 21:31:44 nit: s/"}/" }/
acolwell GONE FROM CHROMIUM 2014/07/07 23:56:36 Done.
2399 2443
2400 CheckExpectedRanges("{ [0,46) }"); 2444 CheckExpectedRanges("{ [0,46) }");
2401 2445
2402 EXPECT_CALL(host_, SetDuration(base::TimeDelta::FromMilliseconds(66))); 2446 EXPECT_CALL(host_, SetDuration(base::TimeDelta::FromMilliseconds(66)));
2403 MarkEndOfStream(PIPELINE_OK); 2447 MarkEndOfStream(PIPELINE_OK);
2404 2448
2405 // Verify that the range extends to the end of the video data. 2449 // Verify that the range extends to the end of the video data.
2406 CheckExpectedRanges("{ [0,66) }"); 2450 CheckExpectedRanges("{ [0,66) }");
2407 2451
2408 // Verify that the range reverts to the intersection when end of stream 2452 // Verify that the range reverts to the intersection when end of stream
2409 // has been cancelled. 2453 // has been cancelled.
2410 demuxer_->UnmarkEndOfStream(); 2454 demuxer_->UnmarkEndOfStream();
2411 CheckExpectedRanges("{ [0,46) }"); 2455 CheckExpectedRanges("{ [0,46) }");
2412 2456
2413 // Append and remove data so that the 2 streams' end ranges do not overlap. 2457 // Append and remove data so that the 2 streams' end ranges do not overlap.
2414 2458
2415 EXPECT_CALL(host_, SetDuration(base::TimeDelta::FromMilliseconds(246))); 2459 EXPECT_CALL(host_, SetDuration(base::TimeDelta::FromMilliseconds(246)));
2416 EXPECT_CALL(host_, SetDuration(base::TimeDelta::FromMilliseconds(398))); 2460 EXPECT_CALL(host_, SetDuration(base::TimeDelta::FromMilliseconds(398)));
2417 AppendSingleStreamCluster(kSourceId, kAudioTrackNum, "200K 223K"); 2461 AppendMuxedCluster(
2418 AppendSingleStreamCluster(kSourceId, kVideoTrackNum, 2462 { kAudioTrackNum, "200K 223K" },
2419 "200K 233 266 299 332K 365"); 2463 { kVideoTrackNum, "200K 233 266 299 332K 365" });
2420 2464
2421 // At this point, the per-stream ranges are as follows: 2465 // At this point, the per-stream ranges are as follows:
2422 // Audio: [0,46) [200,246) 2466 // Audio: [0,46) [200,246)
2423 // Video: [0,66) [200,398) 2467 // Video: [0,66) [200,398)
2424 CheckExpectedRanges("{ [0,46) [200,246) }"); 2468 CheckExpectedRanges("{ [0,46) [200,246) }");
2425 2469
2426 demuxer_->Remove(kSourceId, base::TimeDelta::FromMilliseconds(200), 2470 demuxer_->Remove(kSourceId, base::TimeDelta::FromMilliseconds(200),
2427 base::TimeDelta::FromMilliseconds(300)); 2471 base::TimeDelta::FromMilliseconds(300));
2428 2472
2429 // At this point, the per-stream ranges are as follows: 2473 // At this point, the per-stream ranges are as follows:
2430 // Audio: [0,46) 2474 // Audio: [0,46)
2431 // Video: [0,66) [332,398) 2475 // Video: [0,66) [332,398)
2432 CheckExpectedRanges("{ [0,46) }"); 2476 CheckExpectedRanges("{ [0,46) }");
2433 2477
2434 AppendSingleStreamCluster(kSourceId, kAudioTrackNum, "200K 223K"); 2478 AppendMuxedCluster(
2435 AppendSingleStreamCluster(kSourceId, kVideoTrackNum, "200K 233"); 2479 { kAudioTrackNum, "200K 223K" },
2480 { kVideoTrackNum, "200K 233" });
2436 2481
2437 // At this point, the per-stream ranges are as follows: 2482 // At this point, the per-stream ranges are as follows:
2438 // Audio: [0,46) [200,246) 2483 // Audio: [0,46) [200,246)
2439 // Video: [0,66) [200,266) [332,398) 2484 // Video: [0,66) [200,266) [332,398)
2440 // NOTE: The last range on each stream do not overlap in time. 2485 // NOTE: The last range on each stream do not overlap in time.
2441 CheckExpectedRanges("{ [0,46) [200,246) }"); 2486 CheckExpectedRanges("{ [0,46) [200,246) }");
2442 2487
2443 MarkEndOfStream(PIPELINE_OK); 2488 MarkEndOfStream(PIPELINE_OK);
2444 2489
2445 // NOTE: The last range on each stream gets extended to the highest 2490 // NOTE: The last range on each stream gets extended to the highest
(...skipping 835 matching lines...) Expand 10 before | Expand all | Expand 10 after
3281 .WillOnce(SaveArg<0>(&text_stream)); 3326 .WillOnce(SaveArg<0>(&text_stream));
3282 ASSERT_TRUE(InitDemuxer(HAS_VIDEO | HAS_TEXT)); 3327 ASSERT_TRUE(InitDemuxer(HAS_VIDEO | HAS_TEXT));
3283 DemuxerStream* video_stream = demuxer_->GetStream(DemuxerStream::VIDEO); 3328 DemuxerStream* video_stream = demuxer_->GetStream(DemuxerStream::VIDEO);
3284 3329
3285 // Set the append window to [20,280). 3330 // Set the append window to [20,280).
3286 append_window_start_for_next_append_ = base::TimeDelta::FromMilliseconds(20); 3331 append_window_start_for_next_append_ = base::TimeDelta::FromMilliseconds(20);
3287 append_window_end_for_next_append_ = base::TimeDelta::FromMilliseconds(280); 3332 append_window_end_for_next_append_ = base::TimeDelta::FromMilliseconds(280);
3288 3333
3289 // Append a cluster that starts before and ends after the append 3334 // Append a cluster that starts before and ends after the append
3290 // window. 3335 // window.
3291 AppendSingleStreamCluster(kSourceId, kVideoTrackNum, 3336 AppendMuxedCluster(
3292 "0K 30 60 90 120K 150 180 210 240K 270 300 330K"); 3337 { kVideoTrackNum, "0K 30 60 90 120K 150 180 210 240K 270 300 330K" },
3293 AppendSingleStreamCluster(kSourceId, kTextTrackNum, "0K 100K 200K 300K"); 3338 { kTextTrackNum, "0K 100K 200K 300K" });
3294 3339
3295 // Verify that text cues that start outside the window are not included 3340 // Verify that text cues that start outside the window are not included
3296 // in the buffer. Also verify that cues that extend beyond the 3341 // in the buffer. Also verify that cues that extend beyond the
3297 // window are not included. 3342 // window are not included.
3298 CheckExpectedRanges(kSourceId, "{ [120,270) }"); 3343 CheckExpectedRanges(kSourceId, "{ [120,270) }");
3299 CheckExpectedBuffers(video_stream, "120 150 180 210 240"); 3344 CheckExpectedBuffers(video_stream, "120 150 180 210 240");
3300 CheckExpectedBuffers(text_stream, "100"); 3345 CheckExpectedBuffers(text_stream, "100");
3301 3346
3302 // Extend the append window to [20,650). 3347 // Extend the append window to [20,650).
3303 append_window_end_for_next_append_ = base::TimeDelta::FromMilliseconds(650); 3348 append_window_end_for_next_append_ = base::TimeDelta::FromMilliseconds(650);
3304 3349
3305 // Append more data and verify that a new range is created. 3350 // Append more data and verify that a new range is created.
3306 AppendSingleStreamCluster(kSourceId, kVideoTrackNum, 3351 AppendMuxedCluster(
3307 "360 390 420K 450 480 510 540K 570 600 630K"); 3352 { kVideoTrackNum, "360 390 420K 450 480 510 540K 570 600 630K" },
3308 AppendSingleStreamCluster(kSourceId, kTextTrackNum, "400K 500K 600K 700K"); 3353 { kTextTrackNum, "400K 500K 600K 700K" });
3309 CheckExpectedRanges(kSourceId, "{ [120,270) [420,630) }"); 3354 CheckExpectedRanges(kSourceId, "{ [120,270) [420,630) }");
3310 3355
3311 // Seek to the new range and verify that the expected buffers are returned. 3356 // Seek to the new range and verify that the expected buffers are returned.
3312 Seek(base::TimeDelta::FromMilliseconds(420)); 3357 Seek(base::TimeDelta::FromMilliseconds(420));
3313 CheckExpectedBuffers(video_stream, "420 450 480 510 540 570 600"); 3358 CheckExpectedBuffers(video_stream, "420 450 480 510 540 570 600");
3314 CheckExpectedBuffers(text_stream, "400 500"); 3359 CheckExpectedBuffers(text_stream, "400 500");
3315 } 3360 }
3316 3361
3317 TEST_F(ChunkDemuxerTest, StartWaitingForSeekAfterParseError) { 3362 TEST_F(ChunkDemuxerTest, StartWaitingForSeekAfterParseError) {
3318 ASSERT_TRUE(InitDemuxer(HAS_AUDIO | HAS_VIDEO)); 3363 ASSERT_TRUE(InitDemuxer(HAS_AUDIO | HAS_VIDEO));
3319 EXPECT_CALL(host_, OnDemuxerError(PIPELINE_ERROR_DECODE)); 3364 EXPECT_CALL(host_, OnDemuxerError(PIPELINE_ERROR_DECODE));
3320 AppendGarbage(); 3365 AppendGarbage();
3321 base::TimeDelta seek_time = base::TimeDelta::FromSeconds(50); 3366 base::TimeDelta seek_time = base::TimeDelta::FromSeconds(50);
3322 demuxer_->StartWaitingForSeek(seek_time); 3367 demuxer_->StartWaitingForSeek(seek_time);
3323 } 3368 }
3324 3369
3325 TEST_F(ChunkDemuxerTest, Remove_AudioVideoText) { 3370 TEST_F(ChunkDemuxerTest, Remove_AudioVideoText) {
3326 DemuxerStream* text_stream = NULL; 3371 DemuxerStream* text_stream = NULL;
3327 EXPECT_CALL(host_, AddTextStream(_, _)) 3372 EXPECT_CALL(host_, AddTextStream(_, _))
3328 .WillOnce(SaveArg<0>(&text_stream)); 3373 .WillOnce(SaveArg<0>(&text_stream));
3329 ASSERT_TRUE(InitDemuxer(HAS_AUDIO | HAS_VIDEO | HAS_TEXT)); 3374 ASSERT_TRUE(InitDemuxer(HAS_AUDIO | HAS_VIDEO | HAS_TEXT));
3330 3375
3331 DemuxerStream* audio_stream = demuxer_->GetStream(DemuxerStream::AUDIO); 3376 DemuxerStream* audio_stream = demuxer_->GetStream(DemuxerStream::AUDIO);
3332 DemuxerStream* video_stream = demuxer_->GetStream(DemuxerStream::VIDEO); 3377 DemuxerStream* video_stream = demuxer_->GetStream(DemuxerStream::VIDEO);
3333 3378
3334 AppendSingleStreamCluster(kSourceId, kAudioTrackNum, 3379 AppendMuxedCluster(
3335 "0K 20K 40K 60K 80K 100K 120K 140K"); 3380 { kAudioTrackNum, "0K 20K 40K 60K 80K 100K 120K 140K" },
3336 AppendSingleStreamCluster(kSourceId, kVideoTrackNum, 3381 { kVideoTrackNum, "0K 30 60 90 120K 150 180" },
3337 "0K 30 60 90 120K 150 180"); 3382 { kTextTrackNum, "0K 100K 200K" });
3338 AppendSingleStreamCluster(kSourceId, kTextTrackNum, "0K 100K 200K");
3339 3383
3340 CheckExpectedBuffers(audio_stream, "0 20 40 60 80 100 120 140"); 3384 CheckExpectedBuffers(audio_stream, "0 20 40 60 80 100 120 140");
3341 CheckExpectedBuffers(video_stream, "0 30 60 90 120 150 180"); 3385 CheckExpectedBuffers(video_stream, "0 30 60 90 120 150 180");
3342 CheckExpectedBuffers(text_stream, "0 100 200"); 3386 CheckExpectedBuffers(text_stream, "0 100 200");
3343 3387
3344 // Remove the buffers that were added. 3388 // Remove the buffers that were added.
3345 demuxer_->Remove(kSourceId, base::TimeDelta(), 3389 demuxer_->Remove(kSourceId, base::TimeDelta(),
3346 base::TimeDelta::FromMilliseconds(300)); 3390 base::TimeDelta::FromMilliseconds(300));
3347 3391
3348 // Verify that all the appended data has been removed. 3392 // Verify that all the appended data has been removed.
3349 CheckExpectedRanges(kSourceId, "{ }"); 3393 CheckExpectedRanges(kSourceId, "{ }");
3350 3394
3351 // Append new buffers that are clearly different than the original 3395 // Append new buffers that are clearly different than the original
3352 // ones and verify that only the new buffers are returned. 3396 // ones and verify that only the new buffers are returned.
3353 AppendSingleStreamCluster(kSourceId, kAudioTrackNum, 3397 AppendMuxedCluster(
3354 "1K 21K 41K 61K 81K 101K 121K 141K"); 3398 { kAudioTrackNum, "1K 21K 41K 61K 81K 101K 121K 141K" },
3355 AppendSingleStreamCluster(kSourceId, kVideoTrackNum, 3399 { kVideoTrackNum, "1K 31 61 91 121K 151 181" },
3356 "1K 31 61 91 121K 151 181"); 3400 { kTextTrackNum, "1K 101K 201K" });
3357 AppendSingleStreamCluster(kSourceId, kTextTrackNum, "1K 101K 201K");
3358 3401
3359 Seek(base::TimeDelta()); 3402 Seek(base::TimeDelta());
3360 CheckExpectedBuffers(audio_stream, "1 21 41 61 81 101 121 141"); 3403 CheckExpectedBuffers(audio_stream, "1 21 41 61 81 101 121 141");
3361 CheckExpectedBuffers(video_stream, "1 31 61 91 121 151 181"); 3404 CheckExpectedBuffers(video_stream, "1 31 61 91 121 151 181");
3362 CheckExpectedBuffers(text_stream, "1 101 201"); 3405 CheckExpectedBuffers(text_stream, "1 101 201");
3363 } 3406 }
3364 3407
3365 TEST_F(ChunkDemuxerTest, Remove_StartAtDuration) { 3408 TEST_F(ChunkDemuxerTest, Remove_StartAtDuration) {
3366 ASSERT_TRUE(InitDemuxer(HAS_AUDIO)); 3409 ASSERT_TRUE(InitDemuxer(HAS_AUDIO));
3367 DemuxerStream* audio_stream = demuxer_->GetStream(DemuxerStream::AUDIO); 3410 DemuxerStream* audio_stream = demuxer_->GetStream(DemuxerStream::AUDIO);
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
3409 message_loop_.RunUntilIdle(); 3452 message_loop_.RunUntilIdle();
3410 3453
3411 EXPECT_FALSE(seek_cb_was_called); 3454 EXPECT_FALSE(seek_cb_was_called);
3412 3455
3413 bool text_read_done = false; 3456 bool text_read_done = false;
3414 text_stream->Read(base::Bind(&OnReadDone, 3457 text_stream->Read(base::Bind(&OnReadDone,
3415 base::TimeDelta::FromMilliseconds(125), 3458 base::TimeDelta::FromMilliseconds(125),
3416 &text_read_done)); 3459 &text_read_done));
3417 3460
3418 // Append audio & video data so the seek completes. 3461 // Append audio & video data so the seek completes.
3419 AppendSingleStreamCluster(kSourceId, kAudioTrackNum, 3462 AppendMuxedCluster(
3420 "0K 20K 40K 60K 80K 100K 120K 140K 160K 180K"); 3463 { kAudioTrackNum, "0K 20K 40K 60K 80K 100K 120K 140K 160K 180K" },
3421 AppendSingleStreamCluster(kSourceId, kVideoTrackNum, 3464 { kVideoTrackNum, "0K 30 60 90 120K 150 180 210" });
3422 "0K 30 60 90 120K 150 180 210");
3423 3465
3424 message_loop_.RunUntilIdle(); 3466 message_loop_.RunUntilIdle();
3425 EXPECT_TRUE(seek_cb_was_called); 3467 EXPECT_TRUE(seek_cb_was_called);
3426 EXPECT_FALSE(text_read_done); 3468 EXPECT_FALSE(text_read_done);
3427 3469
3428 // Read some audio & video buffers to further verify seek completion. 3470 // Read some audio & video buffers to further verify seek completion.
3429 CheckExpectedBuffers(audio_stream, "120 140"); 3471 CheckExpectedBuffers(audio_stream, "120 140");
3430 CheckExpectedBuffers(video_stream, "120 150"); 3472 CheckExpectedBuffers(video_stream, "120 150");
3431 3473
3432 EXPECT_FALSE(text_read_done); 3474 EXPECT_FALSE(text_read_done);
3433 3475
3434 // Append text cues that start after the seek point and verify that 3476 // Append text cues that start after the seek point and verify that
3435 // they are returned by Read() calls. 3477 // they are returned by Read() calls.
3436 AppendSingleStreamCluster(kSourceId, kTextTrackNum, "125K 175K 225K"); 3478 AppendMuxedCluster(
3479 { kAudioTrackNum, "0K 20K 40K 60K 80K 100K 120K 140K 160K 180K" },
3480 { kVideoTrackNum, "0K 30 60 90 120K 150 180 210" },
3481 { kTextTrackNum, "125K 175K 225K" });
3437 3482
3438 message_loop_.RunUntilIdle(); 3483 message_loop_.RunUntilIdle();
3439 EXPECT_TRUE(text_read_done); 3484 EXPECT_TRUE(text_read_done);
3440 3485
3441 // NOTE: we start at 175 here because the buffer at 125 was returned 3486 // NOTE: we start at 175 here because the buffer at 125 was returned
3442 // to the pending read initiated above. 3487 // to the pending read initiated above.
3443 CheckExpectedBuffers(text_stream, "175 225"); 3488 CheckExpectedBuffers(text_stream, "175 225");
3444 3489
3445 // Verify that audio & video streams continue to return expected values. 3490 // Verify that audio & video streams continue to return expected values.
3446 CheckExpectedBuffers(audio_stream, "160 180"); 3491 CheckExpectedBuffers(audio_stream, "160 180");
3447 CheckExpectedBuffers(video_stream, "180 210"); 3492 CheckExpectedBuffers(video_stream, "180 210");
wolenetz 2014/07/07 21:31:44 Hmm. Perhaps I misunderstand, but now that we have
acolwell GONE FROM CHROMIUM 2014/07/07 23:56:36 I changed the code around so that there isn't an o
3448 } 3493 }
3449 3494
3450 TEST_F(ChunkDemuxerTest, ClusterWithUnknownSize) { 3495 TEST_F(ChunkDemuxerTest, ClusterWithUnknownSize) {
3451 ASSERT_TRUE(InitDemuxer(HAS_AUDIO | HAS_VIDEO)); 3496 ASSERT_TRUE(InitDemuxer(HAS_AUDIO | HAS_VIDEO));
3452 3497
3453 AppendCluster(GenerateCluster(0, 0, 4, true)); 3498 AppendCluster(GenerateCluster(0, 0, 4, true));
3454 CheckExpectedRanges(kSourceId, "{ [0,46) }"); 3499 CheckExpectedRanges(kSourceId, "{ [0,46) }");
3455 3500
3456 // A new cluster indicates end of the previous cluster with unknown size. 3501 // A new cluster indicates end of the previous cluster with unknown size.
3457 AppendCluster(GenerateCluster(46, 66, 5, true)); 3502 AppendCluster(GenerateCluster(46, 66, 5, true));
(...skipping 17 matching lines...) Expand all
3475 TEST_F(ChunkDemuxerTest, CuesBetweenClusters) { 3520 TEST_F(ChunkDemuxerTest, CuesBetweenClusters) {
3476 ASSERT_TRUE(InitDemuxer(HAS_AUDIO | HAS_VIDEO)); 3521 ASSERT_TRUE(InitDemuxer(HAS_AUDIO | HAS_VIDEO));
3477 3522
3478 AppendCluster(GenerateCluster(0, 0, 4)); 3523 AppendCluster(GenerateCluster(0, 0, 4));
3479 AppendData(kCuesHeader, sizeof(kCuesHeader)); 3524 AppendData(kCuesHeader, sizeof(kCuesHeader));
3480 AppendCluster(GenerateCluster(46, 66, 5)); 3525 AppendCluster(GenerateCluster(46, 66, 5));
3481 CheckExpectedRanges(kSourceId, "{ [0,115) }"); 3526 CheckExpectedRanges(kSourceId, "{ [0,115) }");
3482 } 3527 }
3483 3528
3484 } // namespace media 3529 } // namespace media
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698