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 530 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
541 | 541 |
542 void Seek(base::TimeDelta seek_time) { | 542 void Seek(base::TimeDelta seek_time) { |
543 chunk_demuxer_->StartWaitingForSeek(seek_time); | 543 chunk_demuxer_->StartWaitingForSeek(seek_time); |
544 } | 544 } |
545 | 545 |
546 void AppendData(size_t size) { | 546 void AppendData(size_t size) { |
547 DCHECK(chunk_demuxer_); | 547 DCHECK(chunk_demuxer_); |
548 DCHECK_LT(current_position_, file_data_->data_size()); | 548 DCHECK_LT(current_position_, file_data_->data_size()); |
549 DCHECK_LE(current_position_ + size, file_data_->data_size()); | 549 DCHECK_LE(current_position_ + size, file_data_->data_size()); |
550 | 550 |
551 chunk_demuxer_->AppendData( | 551 ASSERT_TRUE(chunk_demuxer_->AppendData( |
552 kSourceId, file_data_->data() + current_position_, size, | 552 kSourceId, file_data_->data() + current_position_, size, |
553 base::TimeDelta(), kInfiniteDuration(), &last_timestamp_offset_); | 553 base::TimeDelta(), kInfiniteDuration(), &last_timestamp_offset_)); |
554 current_position_ += size; | 554 current_position_ += size; |
555 } | 555 } |
556 | 556 |
557 void AppendAtTime(base::TimeDelta timestamp_offset, | 557 bool AppendAtTime(base::TimeDelta timestamp_offset, |
558 const uint8_t* pData, | 558 const uint8_t* pData, |
559 int size) { | 559 int size) { |
560 CHECK(!chunk_demuxer_->IsParsingMediaSegment(kSourceId)); | 560 CHECK(!chunk_demuxer_->IsParsingMediaSegment(kSourceId)); |
561 chunk_demuxer_->AppendData(kSourceId, pData, size, base::TimeDelta(), | 561 bool success = |
562 kInfiniteDuration(), ×tamp_offset); | 562 chunk_demuxer_->AppendData(kSourceId, pData, size, base::TimeDelta(), |
| 563 kInfiniteDuration(), ×tamp_offset); |
563 last_timestamp_offset_ = timestamp_offset; | 564 last_timestamp_offset_ = timestamp_offset; |
| 565 return success; |
564 } | 566 } |
565 | 567 |
566 void AppendAtTimeWithWindow(base::TimeDelta timestamp_offset, | 568 void AppendAtTimeWithWindow(base::TimeDelta timestamp_offset, |
567 base::TimeDelta append_window_start, | 569 base::TimeDelta append_window_start, |
568 base::TimeDelta append_window_end, | 570 base::TimeDelta append_window_end, |
569 const uint8_t* pData, | 571 const uint8_t* pData, |
570 int size) { | 572 int size) { |
571 CHECK(!chunk_demuxer_->IsParsingMediaSegment(kSourceId)); | 573 CHECK(!chunk_demuxer_->IsParsingMediaSegment(kSourceId)); |
572 chunk_demuxer_->AppendData(kSourceId, pData, size, append_window_start, | 574 ASSERT_TRUE( |
573 append_window_end, ×tamp_offset); | 575 chunk_demuxer_->AppendData(kSourceId, pData, size, append_window_start, |
| 576 append_window_end, ×tamp_offset)); |
574 last_timestamp_offset_ = timestamp_offset; | 577 last_timestamp_offset_ = timestamp_offset; |
575 } | 578 } |
576 | 579 |
577 void SetMemoryLimits(size_t limit_bytes) { | 580 void SetMemoryLimits(size_t limit_bytes) { |
578 chunk_demuxer_->SetMemoryLimits(DemuxerStream::AUDIO, limit_bytes); | 581 chunk_demuxer_->SetMemoryLimits(DemuxerStream::AUDIO, limit_bytes); |
579 chunk_demuxer_->SetMemoryLimits(DemuxerStream::VIDEO, limit_bytes); | 582 chunk_demuxer_->SetMemoryLimits(DemuxerStream::VIDEO, limit_bytes); |
580 } | 583 } |
581 | 584 |
582 void EvictCodedFrames(base::TimeDelta currentMediaTime, size_t newDataSize) { | 585 void EvictCodedFrames(base::TimeDelta currentMediaTime, size_t newDataSize) { |
583 chunk_demuxer_->EvictCodedFrames(kSourceId, currentMediaTime, newDataSize); | 586 chunk_demuxer_->EvictCodedFrames(kSourceId, currentMediaTime, newDataSize); |
(...skipping 600 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1184 } | 1187 } |
1185 | 1188 |
1186 TEST_F(PipelineIntegrationTest, MediaSource_ConfigChange_WebM) { | 1189 TEST_F(PipelineIntegrationTest, MediaSource_ConfigChange_WebM) { |
1187 MockMediaSource source("bear-320x240-16x9-aspect.webm", kWebM, | 1190 MockMediaSource source("bear-320x240-16x9-aspect.webm", kWebM, |
1188 kAppendWholeFile); | 1191 kAppendWholeFile); |
1189 EXPECT_EQ(PIPELINE_OK, StartPipelineWithMediaSource(&source)); | 1192 EXPECT_EQ(PIPELINE_OK, StartPipelineWithMediaSource(&source)); |
1190 | 1193 |
1191 EXPECT_CALL(*this, OnVideoNaturalSizeChange(gfx::Size(640, 360))).Times(1); | 1194 EXPECT_CALL(*this, OnVideoNaturalSizeChange(gfx::Size(640, 360))).Times(1); |
1192 scoped_refptr<DecoderBuffer> second_file = | 1195 scoped_refptr<DecoderBuffer> second_file = |
1193 ReadTestDataFile("bear-640x360.webm"); | 1196 ReadTestDataFile("bear-640x360.webm"); |
1194 source.AppendAtTime(base::TimeDelta::FromSeconds(kAppendTimeSec), | 1197 ASSERT_TRUE(source.AppendAtTime(base::TimeDelta::FromSeconds(kAppendTimeSec), |
1195 second_file->data(), second_file->data_size()); | 1198 second_file->data(), |
| 1199 second_file->data_size())); |
1196 source.EndOfStream(); | 1200 source.EndOfStream(); |
1197 | 1201 |
1198 Play(); | 1202 Play(); |
1199 EXPECT_TRUE(WaitUntilOnEnded()); | 1203 EXPECT_TRUE(WaitUntilOnEnded()); |
1200 | 1204 |
1201 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size()); | 1205 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size()); |
1202 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds()); | 1206 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds()); |
1203 EXPECT_EQ(kAppendTimeMs + k640WebMFileDurationMs, | 1207 EXPECT_EQ(kAppendTimeMs + k640WebMFileDurationMs, |
1204 pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds()); | 1208 pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds()); |
1205 | 1209 |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1246 | 1250 |
1247 auto buffered_ranges = pipeline_->GetBufferedTimeRanges(); | 1251 auto buffered_ranges = pipeline_->GetBufferedTimeRanges(); |
1248 EXPECT_EQ(1u, buffered_ranges.size()); | 1252 EXPECT_EQ(1u, buffered_ranges.size()); |
1249 do { | 1253 do { |
1250 // Advance media_time to the end of the currently buffered data | 1254 // Advance media_time to the end of the currently buffered data |
1251 base::TimeDelta media_time = buffered_ranges.end(0); | 1255 base::TimeDelta media_time = buffered_ranges.end(0); |
1252 source.Seek(media_time); | 1256 source.Seek(media_time); |
1253 // Ask MediaSource to evict buffered data if buffering limit has been | 1257 // Ask MediaSource to evict buffered data if buffering limit has been |
1254 // reached (the data will be evicted from the front of the buffered range). | 1258 // reached (the data will be evicted from the front of the buffered range). |
1255 source.EvictCodedFrames(media_time, file->data_size()); | 1259 source.EvictCodedFrames(media_time, file->data_size()); |
1256 source.AppendAtTime(media_time, file->data(), file->data_size()); | 1260 ASSERT_TRUE( |
| 1261 source.AppendAtTime(media_time, file->data(), file->data_size())); |
1257 message_loop_.RunUntilIdle(); | 1262 message_loop_.RunUntilIdle(); |
1258 | 1263 |
1259 buffered_ranges = pipeline_->GetBufferedTimeRanges(); | 1264 buffered_ranges = pipeline_->GetBufferedTimeRanges(); |
1260 } while (buffered_ranges.size() == 1 && | 1265 } while (buffered_ranges.size() == 1 && |
1261 buffered_ranges.start(0) == base::TimeDelta::FromSeconds(0)); | 1266 buffered_ranges.start(0) == base::TimeDelta::FromSeconds(0)); |
1262 | 1267 |
1263 EXPECT_EQ(1u, buffered_ranges.size()); | 1268 EXPECT_EQ(1u, buffered_ranges.size()); |
1264 source.Shutdown(); | 1269 source.Shutdown(); |
1265 Stop(); | 1270 Stop(); |
1266 } | 1271 } |
1267 | 1272 |
1268 TEST_F(PipelineIntegrationTest, | 1273 TEST_F(PipelineIntegrationTest, |
1269 MAYBE_EME(MediaSource_ConfigChange_Encrypted_WebM)) { | 1274 MAYBE_EME(MediaSource_ConfigChange_Encrypted_WebM)) { |
1270 MockMediaSource source("bear-320x240-16x9-aspect-av_enc-av.webm", kWebM, | 1275 MockMediaSource source("bear-320x240-16x9-aspect-av_enc-av.webm", kWebM, |
1271 kAppendWholeFile); | 1276 kAppendWholeFile); |
1272 FakeEncryptedMedia encrypted_media(new KeyProvidingApp()); | 1277 FakeEncryptedMedia encrypted_media(new KeyProvidingApp()); |
1273 EXPECT_EQ(PIPELINE_OK, | 1278 EXPECT_EQ(PIPELINE_OK, |
1274 StartPipelineWithEncryptedMedia(&source, &encrypted_media)); | 1279 StartPipelineWithEncryptedMedia(&source, &encrypted_media)); |
1275 | 1280 |
1276 EXPECT_CALL(*this, OnVideoNaturalSizeChange(gfx::Size(640, 360))).Times(1); | 1281 EXPECT_CALL(*this, OnVideoNaturalSizeChange(gfx::Size(640, 360))).Times(1); |
1277 scoped_refptr<DecoderBuffer> second_file = | 1282 scoped_refptr<DecoderBuffer> second_file = |
1278 ReadTestDataFile("bear-640x360-av_enc-av.webm"); | 1283 ReadTestDataFile("bear-640x360-av_enc-av.webm"); |
1279 source.AppendAtTime(base::TimeDelta::FromSeconds(kAppendTimeSec), | 1284 ASSERT_TRUE(source.AppendAtTime(base::TimeDelta::FromSeconds(kAppendTimeSec), |
1280 second_file->data(), second_file->data_size()); | 1285 second_file->data(), |
| 1286 second_file->data_size())); |
1281 source.EndOfStream(); | 1287 source.EndOfStream(); |
1282 | 1288 |
1283 Play(); | 1289 Play(); |
1284 EXPECT_TRUE(WaitUntilOnEnded()); | 1290 EXPECT_TRUE(WaitUntilOnEnded()); |
1285 | 1291 |
1286 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size()); | 1292 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size()); |
1287 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds()); | 1293 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds()); |
1288 EXPECT_EQ(kAppendTimeMs + k640WebMFileDurationMs, | 1294 EXPECT_EQ(kAppendTimeMs + k640WebMFileDurationMs, |
1289 pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds()); | 1295 pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds()); |
1290 | 1296 |
1291 source.Shutdown(); | 1297 source.Shutdown(); |
1292 Stop(); | 1298 Stop(); |
1293 } | 1299 } |
1294 | 1300 |
1295 // Config changes from encrypted to clear are not currently supported. | 1301 // Config changes from encrypted to clear are not currently supported. |
1296 TEST_F(PipelineIntegrationTest, | 1302 TEST_F(PipelineIntegrationTest, |
1297 MAYBE_EME(MediaSource_ConfigChange_ClearThenEncrypted_WebM)) { | 1303 MAYBE_EME(MediaSource_ConfigChange_ClearThenEncrypted_WebM)) { |
1298 MockMediaSource source("bear-320x240-16x9-aspect.webm", kWebM, | 1304 MockMediaSource source("bear-320x240-16x9-aspect.webm", kWebM, |
1299 kAppendWholeFile); | 1305 kAppendWholeFile); |
1300 FakeEncryptedMedia encrypted_media(new KeyProvidingApp()); | 1306 FakeEncryptedMedia encrypted_media(new KeyProvidingApp()); |
1301 EXPECT_EQ(PIPELINE_OK, | 1307 EXPECT_EQ(PIPELINE_OK, |
1302 StartPipelineWithEncryptedMedia(&source, &encrypted_media)); | 1308 StartPipelineWithEncryptedMedia(&source, &encrypted_media)); |
1303 | 1309 |
1304 scoped_refptr<DecoderBuffer> second_file = | 1310 scoped_refptr<DecoderBuffer> second_file = |
1305 ReadTestDataFile("bear-640x360-av_enc-av.webm"); | 1311 ReadTestDataFile("bear-640x360-av_enc-av.webm"); |
1306 | 1312 |
1307 source.AppendAtTime(base::TimeDelta::FromSeconds(kAppendTimeSec), | 1313 ASSERT_FALSE(source.AppendAtTime(base::TimeDelta::FromSeconds(kAppendTimeSec), |
1308 second_file->data(), second_file->data_size()); | 1314 second_file->data(), |
| 1315 second_file->data_size())); |
1309 | 1316 |
1310 source.EndOfStream(); | 1317 source.EndOfStream(); |
1311 | 1318 |
1312 message_loop_.Run(); | 1319 message_loop_.Run(); |
1313 EXPECT_EQ(CHUNK_DEMUXER_ERROR_APPEND_FAILED, pipeline_status_); | 1320 EXPECT_EQ(CHUNK_DEMUXER_ERROR_APPEND_FAILED, pipeline_status_); |
1314 | 1321 |
1315 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size()); | 1322 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size()); |
1316 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds()); | 1323 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds()); |
1317 // The second video was not added, so its time has not been added. | 1324 // The second video was not added, so its time has not been added. |
1318 EXPECT_EQ(k320WebMFileDurationMs, | 1325 EXPECT_EQ(k320WebMFileDurationMs, |
(...skipping 10 matching lines...) Expand all Loading... |
1329 MAYBE_EME(MediaSource_ConfigChange_EncryptedThenClear_WebM)) { | 1336 MAYBE_EME(MediaSource_ConfigChange_EncryptedThenClear_WebM)) { |
1330 MockMediaSource source("bear-320x240-16x9-aspect-av_enc-av.webm", kWebM, | 1337 MockMediaSource source("bear-320x240-16x9-aspect-av_enc-av.webm", kWebM, |
1331 kAppendWholeFile); | 1338 kAppendWholeFile); |
1332 FakeEncryptedMedia encrypted_media(new KeyProvidingApp()); | 1339 FakeEncryptedMedia encrypted_media(new KeyProvidingApp()); |
1333 EXPECT_EQ(PIPELINE_OK, | 1340 EXPECT_EQ(PIPELINE_OK, |
1334 StartPipelineWithEncryptedMedia(&source, &encrypted_media)); | 1341 StartPipelineWithEncryptedMedia(&source, &encrypted_media)); |
1335 | 1342 |
1336 scoped_refptr<DecoderBuffer> second_file = | 1343 scoped_refptr<DecoderBuffer> second_file = |
1337 ReadTestDataFile("bear-640x360.webm"); | 1344 ReadTestDataFile("bear-640x360.webm"); |
1338 | 1345 |
1339 source.AppendAtTime(base::TimeDelta::FromSeconds(kAppendTimeSec), | 1346 ASSERT_FALSE(source.AppendAtTime(base::TimeDelta::FromSeconds(kAppendTimeSec), |
1340 second_file->data(), second_file->data_size()); | 1347 second_file->data(), |
| 1348 second_file->data_size())); |
1341 | 1349 |
1342 source.EndOfStream(); | 1350 source.EndOfStream(); |
1343 | 1351 |
1344 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size()); | 1352 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size()); |
1345 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds()); | 1353 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds()); |
1346 // The second video was not added, so its time has not been added. | 1354 // The second video was not added, so its time has not been added. |
1347 EXPECT_EQ(k320EncWebMFileDurationMs, | 1355 EXPECT_EQ(k320EncWebMFileDurationMs, |
1348 pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds()); | 1356 pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds()); |
1349 | 1357 |
1350 Play(); | 1358 Play(); |
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1547 EXPECT_TRUE(WaitUntilOnEnded()); | 1555 EXPECT_TRUE(WaitUntilOnEnded()); |
1548 } | 1556 } |
1549 | 1557 |
1550 TEST_F(PipelineIntegrationTest, MediaSource_ConfigChange_MP4) { | 1558 TEST_F(PipelineIntegrationTest, MediaSource_ConfigChange_MP4) { |
1551 MockMediaSource source("bear-640x360-av_frag.mp4", kMP4, kAppendWholeFile); | 1559 MockMediaSource source("bear-640x360-av_frag.mp4", kMP4, kAppendWholeFile); |
1552 EXPECT_EQ(PIPELINE_OK, StartPipelineWithMediaSource(&source)); | 1560 EXPECT_EQ(PIPELINE_OK, StartPipelineWithMediaSource(&source)); |
1553 | 1561 |
1554 EXPECT_CALL(*this, OnVideoNaturalSizeChange(gfx::Size(1280, 720))).Times(1); | 1562 EXPECT_CALL(*this, OnVideoNaturalSizeChange(gfx::Size(1280, 720))).Times(1); |
1555 scoped_refptr<DecoderBuffer> second_file = | 1563 scoped_refptr<DecoderBuffer> second_file = |
1556 ReadTestDataFile("bear-1280x720-av_frag.mp4"); | 1564 ReadTestDataFile("bear-1280x720-av_frag.mp4"); |
1557 source.AppendAtTime(base::TimeDelta::FromSeconds(kAppendTimeSec), | 1565 ASSERT_TRUE(source.AppendAtTime(base::TimeDelta::FromSeconds(kAppendTimeSec), |
1558 second_file->data(), second_file->data_size()); | 1566 second_file->data(), |
| 1567 second_file->data_size())); |
1559 source.EndOfStream(); | 1568 source.EndOfStream(); |
1560 | 1569 |
1561 Play(); | 1570 Play(); |
1562 EXPECT_TRUE(WaitUntilOnEnded()); | 1571 EXPECT_TRUE(WaitUntilOnEnded()); |
1563 | 1572 |
1564 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size()); | 1573 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size()); |
1565 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds()); | 1574 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds()); |
1566 EXPECT_EQ(kAppendTimeMs + k1280IsoFileDurationMs, | 1575 EXPECT_EQ(kAppendTimeMs + k1280IsoFileDurationMs, |
1567 pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds()); | 1576 pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds()); |
1568 | 1577 |
1569 source.Shutdown(); | 1578 source.Shutdown(); |
1570 Stop(); | 1579 Stop(); |
1571 } | 1580 } |
1572 | 1581 |
1573 TEST_F(PipelineIntegrationTest, | 1582 TEST_F(PipelineIntegrationTest, |
1574 MAYBE_EME(MediaSource_ConfigChange_Encrypted_MP4_CENC_VideoOnly)) { | 1583 MAYBE_EME(MediaSource_ConfigChange_Encrypted_MP4_CENC_VideoOnly)) { |
1575 MockMediaSource source("bear-640x360-v_frag-cenc.mp4", kMP4Video, | 1584 MockMediaSource source("bear-640x360-v_frag-cenc.mp4", kMP4Video, |
1576 kAppendWholeFile); | 1585 kAppendWholeFile); |
1577 FakeEncryptedMedia encrypted_media(new KeyProvidingApp()); | 1586 FakeEncryptedMedia encrypted_media(new KeyProvidingApp()); |
1578 EXPECT_EQ(PIPELINE_OK, | 1587 EXPECT_EQ(PIPELINE_OK, |
1579 StartPipelineWithEncryptedMedia(&source, &encrypted_media)); | 1588 StartPipelineWithEncryptedMedia(&source, &encrypted_media)); |
1580 | 1589 |
1581 EXPECT_CALL(*this, OnVideoNaturalSizeChange(gfx::Size(1280, 720))).Times(1); | 1590 EXPECT_CALL(*this, OnVideoNaturalSizeChange(gfx::Size(1280, 720))).Times(1); |
1582 scoped_refptr<DecoderBuffer> second_file = | 1591 scoped_refptr<DecoderBuffer> second_file = |
1583 ReadTestDataFile("bear-1280x720-v_frag-cenc.mp4"); | 1592 ReadTestDataFile("bear-1280x720-v_frag-cenc.mp4"); |
1584 source.AppendAtTime(base::TimeDelta::FromSeconds(kAppendTimeSec), | 1593 ASSERT_TRUE(source.AppendAtTime(base::TimeDelta::FromSeconds(kAppendTimeSec), |
1585 second_file->data(), second_file->data_size()); | 1594 second_file->data(), |
| 1595 second_file->data_size())); |
1586 source.EndOfStream(); | 1596 source.EndOfStream(); |
1587 | 1597 |
1588 Play(); | 1598 Play(); |
1589 EXPECT_TRUE(WaitUntilOnEnded()); | 1599 EXPECT_TRUE(WaitUntilOnEnded()); |
1590 | 1600 |
1591 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size()); | 1601 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size()); |
1592 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds()); | 1602 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds()); |
1593 EXPECT_EQ(kAppendTimeMs + k1280IsoFileDurationMs, | 1603 EXPECT_EQ(kAppendTimeMs + k1280IsoFileDurationMs, |
1594 pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds()); | 1604 pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds()); |
1595 | 1605 |
1596 source.Shutdown(); | 1606 source.Shutdown(); |
1597 Stop(); | 1607 Stop(); |
1598 } | 1608 } |
1599 | 1609 |
1600 TEST_F(PipelineIntegrationTest, | 1610 TEST_F(PipelineIntegrationTest, |
1601 MAYBE_EME( | 1611 MAYBE_EME( |
1602 MediaSource_ConfigChange_Encrypted_MP4_CENC_KeyRotation_VideoOnly)) { | 1612 MediaSource_ConfigChange_Encrypted_MP4_CENC_KeyRotation_VideoOnly)) { |
1603 MockMediaSource source("bear-640x360-v_frag-cenc-key_rotation.mp4", kMP4Video, | 1613 MockMediaSource source("bear-640x360-v_frag-cenc-key_rotation.mp4", kMP4Video, |
1604 kAppendWholeFile); | 1614 kAppendWholeFile); |
1605 FakeEncryptedMedia encrypted_media(new RotatingKeyProvidingApp()); | 1615 FakeEncryptedMedia encrypted_media(new RotatingKeyProvidingApp()); |
1606 EXPECT_EQ(PIPELINE_OK, | 1616 EXPECT_EQ(PIPELINE_OK, |
1607 StartPipelineWithEncryptedMedia(&source, &encrypted_media)); | 1617 StartPipelineWithEncryptedMedia(&source, &encrypted_media)); |
1608 | 1618 |
1609 EXPECT_CALL(*this, OnVideoNaturalSizeChange(gfx::Size(1280, 720))).Times(1); | 1619 EXPECT_CALL(*this, OnVideoNaturalSizeChange(gfx::Size(1280, 720))).Times(1); |
1610 scoped_refptr<DecoderBuffer> second_file = | 1620 scoped_refptr<DecoderBuffer> second_file = |
1611 ReadTestDataFile("bear-1280x720-v_frag-cenc-key_rotation.mp4"); | 1621 ReadTestDataFile("bear-1280x720-v_frag-cenc-key_rotation.mp4"); |
1612 source.AppendAtTime(base::TimeDelta::FromSeconds(kAppendTimeSec), | 1622 ASSERT_TRUE(source.AppendAtTime(base::TimeDelta::FromSeconds(kAppendTimeSec), |
1613 second_file->data(), second_file->data_size()); | 1623 second_file->data(), |
| 1624 second_file->data_size())); |
1614 source.EndOfStream(); | 1625 source.EndOfStream(); |
1615 | 1626 |
1616 Play(); | 1627 Play(); |
1617 EXPECT_TRUE(WaitUntilOnEnded()); | 1628 EXPECT_TRUE(WaitUntilOnEnded()); |
1618 | 1629 |
1619 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size()); | 1630 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size()); |
1620 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds()); | 1631 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds()); |
1621 EXPECT_EQ(kAppendTimeMs + k1280IsoFileDurationMs, | 1632 EXPECT_EQ(kAppendTimeMs + k1280IsoFileDurationMs, |
1622 pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds()); | 1633 pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds()); |
1623 | 1634 |
1624 source.Shutdown(); | 1635 source.Shutdown(); |
1625 Stop(); | 1636 Stop(); |
1626 } | 1637 } |
1627 | 1638 |
1628 // Config changes from clear to encrypted are not currently supported. | 1639 // Config changes from clear to encrypted are not currently supported. |
1629 // TODO(ddorwin): Figure out why this CHECKs in AppendAtTime(). | 1640 // TODO(ddorwin): Figure out why this CHECKs in AppendAtTime(). |
1630 TEST_F(PipelineIntegrationTest, | 1641 TEST_F(PipelineIntegrationTest, |
1631 DISABLED_MediaSource_ConfigChange_ClearThenEncrypted_MP4_CENC) { | 1642 DISABLED_MediaSource_ConfigChange_ClearThenEncrypted_MP4_CENC) { |
1632 MockMediaSource source("bear-640x360-av_frag.mp4", kMP4Video, | 1643 MockMediaSource source("bear-640x360-av_frag.mp4", kMP4Video, |
1633 kAppendWholeFile); | 1644 kAppendWholeFile); |
1634 FakeEncryptedMedia encrypted_media(new KeyProvidingApp()); | 1645 FakeEncryptedMedia encrypted_media(new KeyProvidingApp()); |
1635 EXPECT_EQ(PIPELINE_OK, | 1646 EXPECT_EQ(PIPELINE_OK, |
1636 StartPipelineWithEncryptedMedia(&source, &encrypted_media)); | 1647 StartPipelineWithEncryptedMedia(&source, &encrypted_media)); |
1637 | 1648 |
1638 EXPECT_CALL(*this, OnVideoNaturalSizeChange(gfx::Size(1280, 720))).Times(1); | 1649 EXPECT_CALL(*this, OnVideoNaturalSizeChange(gfx::Size(1280, 720))).Times(1); |
1639 scoped_refptr<DecoderBuffer> second_file = | 1650 scoped_refptr<DecoderBuffer> second_file = |
1640 ReadTestDataFile("bear-1280x720-v_frag-cenc.mp4"); | 1651 ReadTestDataFile("bear-1280x720-v_frag-cenc.mp4"); |
1641 source.AppendAtTime(base::TimeDelta::FromSeconds(kAppendTimeSec), | 1652 ASSERT_FALSE(source.AppendAtTime(base::TimeDelta::FromSeconds(kAppendTimeSec), |
1642 second_file->data(), second_file->data_size()); | 1653 second_file->data(), |
| 1654 second_file->data_size())); |
1643 | 1655 |
1644 source.EndOfStream(); | 1656 source.EndOfStream(); |
1645 | 1657 |
1646 message_loop_.Run(); | 1658 message_loop_.Run(); |
1647 EXPECT_EQ(CHUNK_DEMUXER_ERROR_APPEND_FAILED, pipeline_status_); | 1659 EXPECT_EQ(CHUNK_DEMUXER_ERROR_APPEND_FAILED, pipeline_status_); |
1648 | 1660 |
1649 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size()); | 1661 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size()); |
1650 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds()); | 1662 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds()); |
1651 // The second video was not added, so its time has not been added. | 1663 // The second video was not added, so its time has not been added. |
1652 EXPECT_EQ(k640IsoFileDurationMs, | 1664 EXPECT_EQ(k640IsoFileDurationMs, |
(...skipping 10 matching lines...) Expand all Loading... |
1663 MAYBE_EME(MediaSource_ConfigChange_EncryptedThenClear_MP4_CENC)) { | 1675 MAYBE_EME(MediaSource_ConfigChange_EncryptedThenClear_MP4_CENC)) { |
1664 MockMediaSource source("bear-640x360-v_frag-cenc.mp4", kMP4Video, | 1676 MockMediaSource source("bear-640x360-v_frag-cenc.mp4", kMP4Video, |
1665 kAppendWholeFile); | 1677 kAppendWholeFile); |
1666 FakeEncryptedMedia encrypted_media(new KeyProvidingApp()); | 1678 FakeEncryptedMedia encrypted_media(new KeyProvidingApp()); |
1667 EXPECT_EQ(PIPELINE_OK, | 1679 EXPECT_EQ(PIPELINE_OK, |
1668 StartPipelineWithEncryptedMedia(&source, &encrypted_media)); | 1680 StartPipelineWithEncryptedMedia(&source, &encrypted_media)); |
1669 | 1681 |
1670 scoped_refptr<DecoderBuffer> second_file = | 1682 scoped_refptr<DecoderBuffer> second_file = |
1671 ReadTestDataFile("bear-1280x720-av_frag.mp4"); | 1683 ReadTestDataFile("bear-1280x720-av_frag.mp4"); |
1672 | 1684 |
1673 source.AppendAtTime(base::TimeDelta::FromSeconds(kAppendTimeSec), | 1685 ASSERT_FALSE(source.AppendAtTime(base::TimeDelta::FromSeconds(kAppendTimeSec), |
1674 second_file->data(), second_file->data_size()); | 1686 second_file->data(), |
| 1687 second_file->data_size())); |
1675 | 1688 |
1676 source.EndOfStream(); | 1689 source.EndOfStream(); |
1677 | 1690 |
1678 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size()); | 1691 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size()); |
1679 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds()); | 1692 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds()); |
1680 // The second video was not added, so its time has not been added. | 1693 // The second video was not added, so its time has not been added. |
1681 EXPECT_EQ(k640IsoCencFileDurationMs, | 1694 EXPECT_EQ(k640IsoCencFileDurationMs, |
1682 pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds()); | 1695 pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds()); |
1683 | 1696 |
1684 Play(); | 1697 Play(); |
(...skipping 535 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2220 | 2233 |
2221 TEST_F(PipelineIntegrationTest, BasicPlaybackPositiveStartTime) { | 2234 TEST_F(PipelineIntegrationTest, BasicPlaybackPositiveStartTime) { |
2222 ASSERT_EQ(PIPELINE_OK, Start("nonzero-start-time.webm")); | 2235 ASSERT_EQ(PIPELINE_OK, Start("nonzero-start-time.webm")); |
2223 Play(); | 2236 Play(); |
2224 ASSERT_TRUE(WaitUntilOnEnded()); | 2237 ASSERT_TRUE(WaitUntilOnEnded()); |
2225 ASSERT_EQ(base::TimeDelta::FromMicroseconds(396000), | 2238 ASSERT_EQ(base::TimeDelta::FromMicroseconds(396000), |
2226 demuxer_->GetStartTime()); | 2239 demuxer_->GetStartTime()); |
2227 } | 2240 } |
2228 | 2241 |
2229 } // namespace media | 2242 } // namespace media |
OLD | NEW |