OLD | NEW |
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 Loading... |
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(), ×tamp_offset); | 565 chunk_demuxer_->AppendData(kSourceId, pData, size, base::TimeDelta(), |
| 566 kInfiniteDuration(), ×tamp_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, ×tamp_offset); | 578 chunk_demuxer_->AppendData(kSourceId, pData, size, append_window_start, |
| 579 append_window_end, ×tamp_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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |