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

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: Fixed the layout test Created 4 years, 6 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 530 matching lines...) Expand 10 before | Expand all | Expand 10 after
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(), &timestamp_offset); 562 chunk_demuxer_->AppendData(kSourceId, pData, size, base::TimeDelta(),
563 kInfiniteDuration(), &timestamp_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, &timestamp_offset); 575 chunk_demuxer_->AppendData(kSourceId, pData, size, append_window_start,
576 append_window_end, &timestamp_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
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698