| 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 |