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

Side by Side Diff: media/test/pipeline_integration_test.cc

Issue 2076673005: MSE: Plumb ChunkDemuxer appendData failures into append Error algorithm (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 4 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
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 <stddef.h> 5 #include <stddef.h>
6 #include <stdint.h> 6 #include <stdint.h>
7 7
8 #include <memory> 8 #include <memory>
9 #include <utility> 9 #include <utility>
10 10
(...skipping 533 matching lines...) Expand 10 before | Expand all | Expand 10 after
544 544
545 void Seek(base::TimeDelta seek_time) { 545 void Seek(base::TimeDelta seek_time) {
546 chunk_demuxer_->StartWaitingForSeek(seek_time); 546 chunk_demuxer_->StartWaitingForSeek(seek_time);
547 } 547 }
548 548
549 void AppendData(size_t size) { 549 void AppendData(size_t size) {
550 DCHECK(chunk_demuxer_); 550 DCHECK(chunk_demuxer_);
551 DCHECK_LT(current_position_, file_data_->data_size()); 551 DCHECK_LT(current_position_, file_data_->data_size());
552 DCHECK_LE(current_position_ + size, file_data_->data_size()); 552 DCHECK_LE(current_position_ + size, file_data_->data_size());
553 553
554 chunk_demuxer_->AppendData( 554 ASSERT_TRUE(chunk_demuxer_->AppendData(
555 kSourceId, file_data_->data() + current_position_, size, 555 kSourceId, file_data_->data() + current_position_, size,
556 base::TimeDelta(), kInfiniteDuration(), &last_timestamp_offset_); 556 base::TimeDelta(), kInfiniteDuration(), &last_timestamp_offset_));
557 current_position_ += size; 557 current_position_ += size;
558 } 558 }
559 559
560 void AppendAtTime(base::TimeDelta timestamp_offset, 560 bool AppendAtTime(base::TimeDelta timestamp_offset,
561 const uint8_t* pData, 561 const uint8_t* pData,
562 int size) { 562 int size) {
563 CHECK(!chunk_demuxer_->IsParsingMediaSegment(kSourceId)); 563 CHECK(!chunk_demuxer_->IsParsingMediaSegment(kSourceId));
564 chunk_demuxer_->AppendData(kSourceId, pData, size, base::TimeDelta(), 564 bool success =
565 kInfiniteDuration(), &timestamp_offset); 565 chunk_demuxer_->AppendData(kSourceId, pData, size, base::TimeDelta(),
566 kInfiniteDuration(), &timestamp_offset);
566 last_timestamp_offset_ = timestamp_offset; 567 last_timestamp_offset_ = timestamp_offset;
568 return success;
567 } 569 }
568 570
569 void AppendAtTimeWithWindow(base::TimeDelta timestamp_offset, 571 void AppendAtTimeWithWindow(base::TimeDelta timestamp_offset,
570 base::TimeDelta append_window_start, 572 base::TimeDelta append_window_start,
571 base::TimeDelta append_window_end, 573 base::TimeDelta append_window_end,
572 const uint8_t* pData, 574 const uint8_t* pData,
573 int size) { 575 int size) {
574 CHECK(!chunk_demuxer_->IsParsingMediaSegment(kSourceId)); 576 CHECK(!chunk_demuxer_->IsParsingMediaSegment(kSourceId));
575 chunk_demuxer_->AppendData(kSourceId, pData, size, append_window_start, 577 ASSERT_TRUE(
576 append_window_end, &timestamp_offset); 578 chunk_demuxer_->AppendData(kSourceId, pData, size, append_window_start,
579 append_window_end, &timestamp_offset));
577 last_timestamp_offset_ = timestamp_offset; 580 last_timestamp_offset_ = timestamp_offset;
578 } 581 }
579 582
580 void SetMemoryLimits(size_t limit_bytes) { 583 void SetMemoryLimits(size_t limit_bytes) {
581 chunk_demuxer_->SetMemoryLimits(DemuxerStream::AUDIO, limit_bytes); 584 chunk_demuxer_->SetMemoryLimits(DemuxerStream::AUDIO, limit_bytes);
582 chunk_demuxer_->SetMemoryLimits(DemuxerStream::VIDEO, limit_bytes); 585 chunk_demuxer_->SetMemoryLimits(DemuxerStream::VIDEO, limit_bytes);
583 } 586 }
584 587
585 void EvictCodedFrames(base::TimeDelta currentMediaTime, size_t newDataSize) { 588 void EvictCodedFrames(base::TimeDelta currentMediaTime, size_t newDataSize) {
586 chunk_demuxer_->EvictCodedFrames(kSourceId, currentMediaTime, newDataSize); 589 chunk_demuxer_->EvictCodedFrames(kSourceId, currentMediaTime, newDataSize);
(...skipping 622 matching lines...) Expand 10 before | Expand all | Expand 10 after
1209 } 1212 }
1210 1213
1211 TEST_F(PipelineIntegrationTest, MediaSource_ConfigChange_WebM) { 1214 TEST_F(PipelineIntegrationTest, MediaSource_ConfigChange_WebM) {
1212 MockMediaSource source("bear-320x240-16x9-aspect.webm", kWebM, 1215 MockMediaSource source("bear-320x240-16x9-aspect.webm", kWebM,
1213 kAppendWholeFile); 1216 kAppendWholeFile);
1214 EXPECT_EQ(PIPELINE_OK, StartPipelineWithMediaSource(&source)); 1217 EXPECT_EQ(PIPELINE_OK, StartPipelineWithMediaSource(&source));
1215 1218
1216 EXPECT_CALL(*this, OnVideoNaturalSizeChange(gfx::Size(640, 360))).Times(1); 1219 EXPECT_CALL(*this, OnVideoNaturalSizeChange(gfx::Size(640, 360))).Times(1);
1217 scoped_refptr<DecoderBuffer> second_file = 1220 scoped_refptr<DecoderBuffer> second_file =
1218 ReadTestDataFile("bear-640x360.webm"); 1221 ReadTestDataFile("bear-640x360.webm");
1219 source.AppendAtTime(base::TimeDelta::FromSeconds(kAppendTimeSec), 1222 ASSERT_TRUE(source.AppendAtTime(base::TimeDelta::FromSeconds(kAppendTimeSec),
1220 second_file->data(), second_file->data_size()); 1223 second_file->data(),
1224 second_file->data_size()));
1221 source.EndOfStream(); 1225 source.EndOfStream();
1222 1226
1223 Play(); 1227 Play();
1224 EXPECT_TRUE(WaitUntilOnEnded()); 1228 EXPECT_TRUE(WaitUntilOnEnded());
1225 1229
1226 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size()); 1230 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size());
1227 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds()); 1231 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds());
1228 EXPECT_EQ(kAppendTimeMs + k640WebMFileDurationMs, 1232 EXPECT_EQ(kAppendTimeMs + k640WebMFileDurationMs,
1229 pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds()); 1233 pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds());
1230 1234
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
1271 1275
1272 auto buffered_ranges = pipeline_->GetBufferedTimeRanges(); 1276 auto buffered_ranges = pipeline_->GetBufferedTimeRanges();
1273 EXPECT_EQ(1u, buffered_ranges.size()); 1277 EXPECT_EQ(1u, buffered_ranges.size());
1274 do { 1278 do {
1275 // Advance media_time to the end of the currently buffered data 1279 // Advance media_time to the end of the currently buffered data
1276 base::TimeDelta media_time = buffered_ranges.end(0); 1280 base::TimeDelta media_time = buffered_ranges.end(0);
1277 source.Seek(media_time); 1281 source.Seek(media_time);
1278 // Ask MediaSource to evict buffered data if buffering limit has been 1282 // Ask MediaSource to evict buffered data if buffering limit has been
1279 // reached (the data will be evicted from the front of the buffered range). 1283 // reached (the data will be evicted from the front of the buffered range).
1280 source.EvictCodedFrames(media_time, file->data_size()); 1284 source.EvictCodedFrames(media_time, file->data_size());
1281 source.AppendAtTime(media_time, file->data(), file->data_size()); 1285 ASSERT_TRUE(
1286 source.AppendAtTime(media_time, file->data(), file->data_size()));
1282 message_loop_.RunUntilIdle(); 1287 message_loop_.RunUntilIdle();
1283 1288
1284 buffered_ranges = pipeline_->GetBufferedTimeRanges(); 1289 buffered_ranges = pipeline_->GetBufferedTimeRanges();
1285 } while (buffered_ranges.size() == 1 && 1290 } while (buffered_ranges.size() == 1 &&
1286 buffered_ranges.start(0) == base::TimeDelta::FromSeconds(0)); 1291 buffered_ranges.start(0) == base::TimeDelta::FromSeconds(0));
1287 1292
1288 EXPECT_EQ(1u, buffered_ranges.size()); 1293 EXPECT_EQ(1u, buffered_ranges.size());
1289 source.Shutdown(); 1294 source.Shutdown();
1290 Stop(); 1295 Stop();
1291 } 1296 }
1292 1297
1293 TEST_F(PipelineIntegrationTest, 1298 TEST_F(PipelineIntegrationTest,
1294 MAYBE_EME(MediaSource_ConfigChange_Encrypted_WebM)) { 1299 MAYBE_EME(MediaSource_ConfigChange_Encrypted_WebM)) {
1295 MockMediaSource source("bear-320x240-16x9-aspect-av_enc-av.webm", kWebM, 1300 MockMediaSource source("bear-320x240-16x9-aspect-av_enc-av.webm", kWebM,
1296 kAppendWholeFile); 1301 kAppendWholeFile);
1297 FakeEncryptedMedia encrypted_media(new KeyProvidingApp()); 1302 FakeEncryptedMedia encrypted_media(new KeyProvidingApp());
1298 EXPECT_EQ(PIPELINE_OK, 1303 EXPECT_EQ(PIPELINE_OK,
1299 StartPipelineWithEncryptedMedia(&source, &encrypted_media)); 1304 StartPipelineWithEncryptedMedia(&source, &encrypted_media));
1300 1305
1301 EXPECT_CALL(*this, OnVideoNaturalSizeChange(gfx::Size(640, 360))).Times(1); 1306 EXPECT_CALL(*this, OnVideoNaturalSizeChange(gfx::Size(640, 360))).Times(1);
1302 scoped_refptr<DecoderBuffer> second_file = 1307 scoped_refptr<DecoderBuffer> second_file =
1303 ReadTestDataFile("bear-640x360-av_enc-av.webm"); 1308 ReadTestDataFile("bear-640x360-av_enc-av.webm");
1304 source.AppendAtTime(base::TimeDelta::FromSeconds(kAppendTimeSec), 1309 ASSERT_TRUE(source.AppendAtTime(base::TimeDelta::FromSeconds(kAppendTimeSec),
1305 second_file->data(), second_file->data_size()); 1310 second_file->data(),
1311 second_file->data_size()));
1306 source.EndOfStream(); 1312 source.EndOfStream();
1307 1313
1308 Play(); 1314 Play();
1309 EXPECT_TRUE(WaitUntilOnEnded()); 1315 EXPECT_TRUE(WaitUntilOnEnded());
1310 1316
1311 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size()); 1317 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size());
1312 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds()); 1318 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds());
1313 EXPECT_EQ(kAppendTimeMs + k640WebMFileDurationMs, 1319 EXPECT_EQ(kAppendTimeMs + k640WebMFileDurationMs,
1314 pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds()); 1320 pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds());
1315 1321
1316 source.Shutdown(); 1322 source.Shutdown();
1317 Stop(); 1323 Stop();
1318 } 1324 }
1319 1325
1320 // Config changes from encrypted to clear are not currently supported. 1326 // Config changes from encrypted to clear are not currently supported.
1321 TEST_F(PipelineIntegrationTest, 1327 TEST_F(PipelineIntegrationTest,
1322 MAYBE_EME(MediaSource_ConfigChange_ClearThenEncrypted_WebM)) { 1328 MAYBE_EME(MediaSource_ConfigChange_ClearThenEncrypted_WebM)) {
1323 MockMediaSource source("bear-320x240-16x9-aspect.webm", kWebM, 1329 MockMediaSource source("bear-320x240-16x9-aspect.webm", kWebM,
1324 kAppendWholeFile); 1330 kAppendWholeFile);
1325 FakeEncryptedMedia encrypted_media(new KeyProvidingApp()); 1331 FakeEncryptedMedia encrypted_media(new KeyProvidingApp());
1326 EXPECT_EQ(PIPELINE_OK, 1332 EXPECT_EQ(PIPELINE_OK,
1327 StartPipelineWithEncryptedMedia(&source, &encrypted_media)); 1333 StartPipelineWithEncryptedMedia(&source, &encrypted_media));
1328 1334
1329 scoped_refptr<DecoderBuffer> second_file = 1335 scoped_refptr<DecoderBuffer> second_file =
1330 ReadTestDataFile("bear-640x360-av_enc-av.webm"); 1336 ReadTestDataFile("bear-640x360-av_enc-av.webm");
1331 1337
1332 source.AppendAtTime(base::TimeDelta::FromSeconds(kAppendTimeSec), 1338 ASSERT_FALSE(source.AppendAtTime(base::TimeDelta::FromSeconds(kAppendTimeSec),
1333 second_file->data(), second_file->data_size()); 1339 second_file->data(),
1340 second_file->data_size()));
1334 1341
1335 source.EndOfStream(); 1342 source.EndOfStream();
1336 1343
1337 message_loop_.Run(); 1344 message_loop_.Run();
1338 EXPECT_EQ(CHUNK_DEMUXER_ERROR_APPEND_FAILED, pipeline_status_); 1345 EXPECT_EQ(CHUNK_DEMUXER_ERROR_APPEND_FAILED, pipeline_status_);
1339 1346
1340 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size()); 1347 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size());
1341 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds()); 1348 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds());
1342 // The second video was not added, so its time has not been added. 1349 // The second video was not added, so its time has not been added.
1343 EXPECT_EQ(k320WebMFileDurationMs, 1350 EXPECT_EQ(k320WebMFileDurationMs,
(...skipping 10 matching lines...) Expand all
1354 MAYBE_EME(MediaSource_ConfigChange_EncryptedThenClear_WebM)) { 1361 MAYBE_EME(MediaSource_ConfigChange_EncryptedThenClear_WebM)) {
1355 MockMediaSource source("bear-320x240-16x9-aspect-av_enc-av.webm", kWebM, 1362 MockMediaSource source("bear-320x240-16x9-aspect-av_enc-av.webm", kWebM,
1356 kAppendWholeFile); 1363 kAppendWholeFile);
1357 FakeEncryptedMedia encrypted_media(new KeyProvidingApp()); 1364 FakeEncryptedMedia encrypted_media(new KeyProvidingApp());
1358 EXPECT_EQ(PIPELINE_OK, 1365 EXPECT_EQ(PIPELINE_OK,
1359 StartPipelineWithEncryptedMedia(&source, &encrypted_media)); 1366 StartPipelineWithEncryptedMedia(&source, &encrypted_media));
1360 1367
1361 scoped_refptr<DecoderBuffer> second_file = 1368 scoped_refptr<DecoderBuffer> second_file =
1362 ReadTestDataFile("bear-640x360.webm"); 1369 ReadTestDataFile("bear-640x360.webm");
1363 1370
1364 source.AppendAtTime(base::TimeDelta::FromSeconds(kAppendTimeSec), 1371 ASSERT_FALSE(source.AppendAtTime(base::TimeDelta::FromSeconds(kAppendTimeSec),
1365 second_file->data(), second_file->data_size()); 1372 second_file->data(),
1373 second_file->data_size()));
1366 1374
1367 source.EndOfStream(); 1375 source.EndOfStream();
1368 1376
1369 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size()); 1377 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size());
1370 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds()); 1378 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds());
1371 // The second video was not added, so its time has not been added. 1379 // The second video was not added, so its time has not been added.
1372 EXPECT_EQ(k320EncWebMFileDurationMs, 1380 EXPECT_EQ(k320EncWebMFileDurationMs,
1373 pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds()); 1381 pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds());
1374 1382
1375 Play(); 1383 Play();
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after
1572 EXPECT_TRUE(WaitUntilOnEnded()); 1580 EXPECT_TRUE(WaitUntilOnEnded());
1573 } 1581 }
1574 1582
1575 TEST_F(PipelineIntegrationTest, MediaSource_ConfigChange_MP4) { 1583 TEST_F(PipelineIntegrationTest, MediaSource_ConfigChange_MP4) {
1576 MockMediaSource source("bear-640x360-av_frag.mp4", kMP4, kAppendWholeFile); 1584 MockMediaSource source("bear-640x360-av_frag.mp4", kMP4, kAppendWholeFile);
1577 EXPECT_EQ(PIPELINE_OK, StartPipelineWithMediaSource(&source)); 1585 EXPECT_EQ(PIPELINE_OK, StartPipelineWithMediaSource(&source));
1578 1586
1579 EXPECT_CALL(*this, OnVideoNaturalSizeChange(gfx::Size(1280, 720))).Times(1); 1587 EXPECT_CALL(*this, OnVideoNaturalSizeChange(gfx::Size(1280, 720))).Times(1);
1580 scoped_refptr<DecoderBuffer> second_file = 1588 scoped_refptr<DecoderBuffer> second_file =
1581 ReadTestDataFile("bear-1280x720-av_frag.mp4"); 1589 ReadTestDataFile("bear-1280x720-av_frag.mp4");
1582 source.AppendAtTime(base::TimeDelta::FromSeconds(kAppendTimeSec), 1590 ASSERT_TRUE(source.AppendAtTime(base::TimeDelta::FromSeconds(kAppendTimeSec),
1583 second_file->data(), second_file->data_size()); 1591 second_file->data(),
1592 second_file->data_size()));
1584 source.EndOfStream(); 1593 source.EndOfStream();
1585 1594
1586 Play(); 1595 Play();
1587 EXPECT_TRUE(WaitUntilOnEnded()); 1596 EXPECT_TRUE(WaitUntilOnEnded());
1588 1597
1589 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size()); 1598 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size());
1590 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds()); 1599 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds());
1591 EXPECT_EQ(kAppendTimeMs + k1280IsoFileDurationMs, 1600 EXPECT_EQ(kAppendTimeMs + k1280IsoFileDurationMs,
1592 pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds()); 1601 pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds());
1593 1602
1594 source.Shutdown(); 1603 source.Shutdown();
1595 Stop(); 1604 Stop();
1596 } 1605 }
1597 1606
1598 TEST_F(PipelineIntegrationTest, 1607 TEST_F(PipelineIntegrationTest,
1599 MAYBE_EME(MediaSource_ConfigChange_Encrypted_MP4_CENC_VideoOnly)) { 1608 MAYBE_EME(MediaSource_ConfigChange_Encrypted_MP4_CENC_VideoOnly)) {
1600 MockMediaSource source("bear-640x360-v_frag-cenc.mp4", kMP4Video, 1609 MockMediaSource source("bear-640x360-v_frag-cenc.mp4", kMP4Video,
1601 kAppendWholeFile); 1610 kAppendWholeFile);
1602 FakeEncryptedMedia encrypted_media(new KeyProvidingApp()); 1611 FakeEncryptedMedia encrypted_media(new KeyProvidingApp());
1603 EXPECT_EQ(PIPELINE_OK, 1612 EXPECT_EQ(PIPELINE_OK,
1604 StartPipelineWithEncryptedMedia(&source, &encrypted_media)); 1613 StartPipelineWithEncryptedMedia(&source, &encrypted_media));
1605 1614
1606 EXPECT_CALL(*this, OnVideoNaturalSizeChange(gfx::Size(1280, 720))).Times(1); 1615 EXPECT_CALL(*this, OnVideoNaturalSizeChange(gfx::Size(1280, 720))).Times(1);
1607 scoped_refptr<DecoderBuffer> second_file = 1616 scoped_refptr<DecoderBuffer> second_file =
1608 ReadTestDataFile("bear-1280x720-v_frag-cenc.mp4"); 1617 ReadTestDataFile("bear-1280x720-v_frag-cenc.mp4");
1609 source.AppendAtTime(base::TimeDelta::FromSeconds(kAppendTimeSec), 1618 ASSERT_TRUE(source.AppendAtTime(base::TimeDelta::FromSeconds(kAppendTimeSec),
1610 second_file->data(), second_file->data_size()); 1619 second_file->data(),
1620 second_file->data_size()));
1611 source.EndOfStream(); 1621 source.EndOfStream();
1612 1622
1613 Play(); 1623 Play();
1614 EXPECT_TRUE(WaitUntilOnEnded()); 1624 EXPECT_TRUE(WaitUntilOnEnded());
1615 1625
1616 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size()); 1626 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size());
1617 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds()); 1627 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds());
1618 EXPECT_EQ(kAppendTimeMs + k1280IsoFileDurationMs, 1628 EXPECT_EQ(kAppendTimeMs + k1280IsoFileDurationMs,
1619 pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds()); 1629 pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds());
1620 1630
1621 source.Shutdown(); 1631 source.Shutdown();
1622 Stop(); 1632 Stop();
1623 } 1633 }
1624 1634
1625 TEST_F(PipelineIntegrationTest, 1635 TEST_F(PipelineIntegrationTest,
1626 MAYBE_EME( 1636 MAYBE_EME(
1627 MediaSource_ConfigChange_Encrypted_MP4_CENC_KeyRotation_VideoOnly)) { 1637 MediaSource_ConfigChange_Encrypted_MP4_CENC_KeyRotation_VideoOnly)) {
1628 MockMediaSource source("bear-640x360-v_frag-cenc-key_rotation.mp4", kMP4Video, 1638 MockMediaSource source("bear-640x360-v_frag-cenc-key_rotation.mp4", kMP4Video,
1629 kAppendWholeFile); 1639 kAppendWholeFile);
1630 FakeEncryptedMedia encrypted_media(new RotatingKeyProvidingApp()); 1640 FakeEncryptedMedia encrypted_media(new RotatingKeyProvidingApp());
1631 EXPECT_EQ(PIPELINE_OK, 1641 EXPECT_EQ(PIPELINE_OK,
1632 StartPipelineWithEncryptedMedia(&source, &encrypted_media)); 1642 StartPipelineWithEncryptedMedia(&source, &encrypted_media));
1633 1643
1634 EXPECT_CALL(*this, OnVideoNaturalSizeChange(gfx::Size(1280, 720))).Times(1); 1644 EXPECT_CALL(*this, OnVideoNaturalSizeChange(gfx::Size(1280, 720))).Times(1);
1635 scoped_refptr<DecoderBuffer> second_file = 1645 scoped_refptr<DecoderBuffer> second_file =
1636 ReadTestDataFile("bear-1280x720-v_frag-cenc-key_rotation.mp4"); 1646 ReadTestDataFile("bear-1280x720-v_frag-cenc-key_rotation.mp4");
1637 source.AppendAtTime(base::TimeDelta::FromSeconds(kAppendTimeSec), 1647 ASSERT_TRUE(source.AppendAtTime(base::TimeDelta::FromSeconds(kAppendTimeSec),
1638 second_file->data(), second_file->data_size()); 1648 second_file->data(),
1649 second_file->data_size()));
1639 source.EndOfStream(); 1650 source.EndOfStream();
1640 1651
1641 Play(); 1652 Play();
1642 EXPECT_TRUE(WaitUntilOnEnded()); 1653 EXPECT_TRUE(WaitUntilOnEnded());
1643 1654
1644 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size()); 1655 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size());
1645 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds()); 1656 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds());
1646 EXPECT_EQ(kAppendTimeMs + k1280IsoFileDurationMs, 1657 EXPECT_EQ(kAppendTimeMs + k1280IsoFileDurationMs,
1647 pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds()); 1658 pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds());
1648 1659
1649 source.Shutdown(); 1660 source.Shutdown();
1650 Stop(); 1661 Stop();
1651 } 1662 }
1652 1663
1653 // Config changes from clear to encrypted are not currently supported. 1664 // Config changes from clear to encrypted are not currently supported.
1654 // TODO(ddorwin): Figure out why this CHECKs in AppendAtTime(). 1665 // TODO(ddorwin): Figure out why this CHECKs in AppendAtTime().
1655 TEST_F(PipelineIntegrationTest, 1666 TEST_F(PipelineIntegrationTest,
1656 DISABLED_MediaSource_ConfigChange_ClearThenEncrypted_MP4_CENC) { 1667 DISABLED_MediaSource_ConfigChange_ClearThenEncrypted_MP4_CENC) {
1657 MockMediaSource source("bear-640x360-av_frag.mp4", kMP4Video, 1668 MockMediaSource source("bear-640x360-av_frag.mp4", kMP4Video,
1658 kAppendWholeFile); 1669 kAppendWholeFile);
1659 FakeEncryptedMedia encrypted_media(new KeyProvidingApp()); 1670 FakeEncryptedMedia encrypted_media(new KeyProvidingApp());
1660 EXPECT_EQ(PIPELINE_OK, 1671 EXPECT_EQ(PIPELINE_OK,
1661 StartPipelineWithEncryptedMedia(&source, &encrypted_media)); 1672 StartPipelineWithEncryptedMedia(&source, &encrypted_media));
1662 1673
1663 EXPECT_CALL(*this, OnVideoNaturalSizeChange(gfx::Size(1280, 720))).Times(1); 1674 EXPECT_CALL(*this, OnVideoNaturalSizeChange(gfx::Size(1280, 720))).Times(1);
1664 scoped_refptr<DecoderBuffer> second_file = 1675 scoped_refptr<DecoderBuffer> second_file =
1665 ReadTestDataFile("bear-1280x720-v_frag-cenc.mp4"); 1676 ReadTestDataFile("bear-1280x720-v_frag-cenc.mp4");
1666 source.AppendAtTime(base::TimeDelta::FromSeconds(kAppendTimeSec), 1677 ASSERT_FALSE(source.AppendAtTime(base::TimeDelta::FromSeconds(kAppendTimeSec),
1667 second_file->data(), second_file->data_size()); 1678 second_file->data(),
1679 second_file->data_size()));
1668 1680
1669 source.EndOfStream(); 1681 source.EndOfStream();
1670 1682
1671 message_loop_.Run(); 1683 message_loop_.Run();
1672 EXPECT_EQ(CHUNK_DEMUXER_ERROR_APPEND_FAILED, pipeline_status_); 1684 EXPECT_EQ(CHUNK_DEMUXER_ERROR_APPEND_FAILED, pipeline_status_);
1673 1685
1674 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size()); 1686 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size());
1675 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds()); 1687 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds());
1676 // The second video was not added, so its time has not been added. 1688 // The second video was not added, so its time has not been added.
1677 EXPECT_EQ(k640IsoFileDurationMs, 1689 EXPECT_EQ(k640IsoFileDurationMs,
(...skipping 10 matching lines...) Expand all
1688 MAYBE_EME(MediaSource_ConfigChange_EncryptedThenClear_MP4_CENC)) { 1700 MAYBE_EME(MediaSource_ConfigChange_EncryptedThenClear_MP4_CENC)) {
1689 MockMediaSource source("bear-640x360-v_frag-cenc.mp4", kMP4Video, 1701 MockMediaSource source("bear-640x360-v_frag-cenc.mp4", kMP4Video,
1690 kAppendWholeFile); 1702 kAppendWholeFile);
1691 FakeEncryptedMedia encrypted_media(new KeyProvidingApp()); 1703 FakeEncryptedMedia encrypted_media(new KeyProvidingApp());
1692 EXPECT_EQ(PIPELINE_OK, 1704 EXPECT_EQ(PIPELINE_OK,
1693 StartPipelineWithEncryptedMedia(&source, &encrypted_media)); 1705 StartPipelineWithEncryptedMedia(&source, &encrypted_media));
1694 1706
1695 scoped_refptr<DecoderBuffer> second_file = 1707 scoped_refptr<DecoderBuffer> second_file =
1696 ReadTestDataFile("bear-1280x720-av_frag.mp4"); 1708 ReadTestDataFile("bear-1280x720-av_frag.mp4");
1697 1709
1698 source.AppendAtTime(base::TimeDelta::FromSeconds(kAppendTimeSec), 1710 ASSERT_FALSE(source.AppendAtTime(base::TimeDelta::FromSeconds(kAppendTimeSec),
1699 second_file->data(), second_file->data_size()); 1711 second_file->data(),
1712 second_file->data_size()));
1700 1713
1701 source.EndOfStream(); 1714 source.EndOfStream();
1702 1715
1703 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size()); 1716 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size());
1704 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds()); 1717 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds());
1705 // The second video was not added, so its time has not been added. 1718 // The second video was not added, so its time has not been added.
1706 EXPECT_EQ(k640IsoCencFileDurationMs, 1719 EXPECT_EQ(k640IsoCencFileDurationMs,
1707 pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds()); 1720 pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds());
1708 1721
1709 Play(); 1722 Play();
(...skipping 580 matching lines...) Expand 10 before | Expand all | Expand 10 after
2290 2303
2291 TEST_F(PipelineIntegrationTest, BasicPlaybackPositiveStartTime) { 2304 TEST_F(PipelineIntegrationTest, BasicPlaybackPositiveStartTime) {
2292 ASSERT_EQ(PIPELINE_OK, Start("nonzero-start-time.webm")); 2305 ASSERT_EQ(PIPELINE_OK, Start("nonzero-start-time.webm"));
2293 Play(); 2306 Play();
2294 ASSERT_TRUE(WaitUntilOnEnded()); 2307 ASSERT_TRUE(WaitUntilOnEnded());
2295 ASSERT_EQ(base::TimeDelta::FromMicroseconds(396000), 2308 ASSERT_EQ(base::TimeDelta::FromMicroseconds(396000),
2296 demuxer_->GetStartTime()); 2309 demuxer_->GetStartTime());
2297 } 2310 }
2298 2311
2299 } // namespace media 2312 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698