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 518 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
529 void set_demuxer_failure_cb(const PipelineStatusCB& demuxer_failure_cb) { | 529 void set_demuxer_failure_cb(const PipelineStatusCB& demuxer_failure_cb) { |
530 demuxer_failure_cb_ = demuxer_failure_cb; | 530 demuxer_failure_cb_ = demuxer_failure_cb; |
531 } | 531 } |
532 | 532 |
533 void Seek(base::TimeDelta seek_time, | 533 void Seek(base::TimeDelta seek_time, |
534 size_t new_position, | 534 size_t new_position, |
535 size_t seek_append_size) { | 535 size_t seek_append_size) { |
536 chunk_demuxer_->StartWaitingForSeek(seek_time); | 536 chunk_demuxer_->StartWaitingForSeek(seek_time); |
537 | 537 |
538 chunk_demuxer_->ResetParserState(kSourceId, base::TimeDelta(), | 538 chunk_demuxer_->ResetParserState(kSourceId, base::TimeDelta(), |
539 kInfiniteDuration(), | 539 kInfiniteDuration, |
540 &last_timestamp_offset_); | 540 &last_timestamp_offset_); |
541 | 541 |
542 DCHECK_LT(new_position, file_data_->data_size()); | 542 DCHECK_LT(new_position, file_data_->data_size()); |
543 current_position_ = new_position; | 543 current_position_ = new_position; |
544 | 544 |
545 AppendData(seek_append_size); | 545 AppendData(seek_append_size); |
546 } | 546 } |
547 | 547 |
548 void Seek(base::TimeDelta seek_time) { | 548 void Seek(base::TimeDelta seek_time) { |
549 chunk_demuxer_->StartWaitingForSeek(seek_time); | 549 chunk_demuxer_->StartWaitingForSeek(seek_time); |
550 } | 550 } |
551 | 551 |
552 void AppendData(size_t size) { | 552 void AppendData(size_t size) { |
553 DCHECK(chunk_demuxer_); | 553 DCHECK(chunk_demuxer_); |
554 DCHECK_LT(current_position_, file_data_->data_size()); | 554 DCHECK_LT(current_position_, file_data_->data_size()); |
555 DCHECK_LE(current_position_ + size, file_data_->data_size()); | 555 DCHECK_LE(current_position_ + size, file_data_->data_size()); |
556 | 556 |
557 ASSERT_TRUE(chunk_demuxer_->AppendData( | 557 ASSERT_TRUE(chunk_demuxer_->AppendData( |
558 kSourceId, file_data_->data() + current_position_, size, | 558 kSourceId, file_data_->data() + current_position_, size, |
559 base::TimeDelta(), kInfiniteDuration(), &last_timestamp_offset_)); | 559 base::TimeDelta(), kInfiniteDuration, &last_timestamp_offset_)); |
560 current_position_ += size; | 560 current_position_ += size; |
561 } | 561 } |
562 | 562 |
563 bool AppendAtTime(base::TimeDelta timestamp_offset, | 563 bool AppendAtTime(base::TimeDelta timestamp_offset, |
564 const uint8_t* pData, | 564 const uint8_t* pData, |
565 int size) { | 565 int size) { |
566 CHECK(!chunk_demuxer_->IsParsingMediaSegment(kSourceId)); | 566 CHECK(!chunk_demuxer_->IsParsingMediaSegment(kSourceId)); |
567 bool success = | 567 bool success = |
568 chunk_demuxer_->AppendData(kSourceId, pData, size, base::TimeDelta(), | 568 chunk_demuxer_->AppendData(kSourceId, pData, size, base::TimeDelta(), |
569 kInfiniteDuration(), ×tamp_offset); | 569 kInfiniteDuration, ×tamp_offset); |
570 last_timestamp_offset_ = timestamp_offset; | 570 last_timestamp_offset_ = timestamp_offset; |
571 return success; | 571 return success; |
572 } | 572 } |
573 | 573 |
574 void AppendAtTimeWithWindow(base::TimeDelta timestamp_offset, | 574 void AppendAtTimeWithWindow(base::TimeDelta timestamp_offset, |
575 base::TimeDelta append_window_start, | 575 base::TimeDelta append_window_start, |
576 base::TimeDelta append_window_end, | 576 base::TimeDelta append_window_end, |
577 const uint8_t* pData, | 577 const uint8_t* pData, |
578 int size) { | 578 int size) { |
579 CHECK(!chunk_demuxer_->IsParsingMediaSegment(kSourceId)); | 579 CHECK(!chunk_demuxer_->IsParsingMediaSegment(kSourceId)); |
(...skipping 15 matching lines...) Expand all Loading... |
595 void RemoveRange(base::TimeDelta start, base::TimeDelta end) { | 595 void RemoveRange(base::TimeDelta start, base::TimeDelta end) { |
596 chunk_demuxer_->Remove(kSourceId, start, end); | 596 chunk_demuxer_->Remove(kSourceId, start, end); |
597 } | 597 } |
598 | 598 |
599 void EndOfStream() { chunk_demuxer_->MarkEndOfStream(PIPELINE_OK); } | 599 void EndOfStream() { chunk_demuxer_->MarkEndOfStream(PIPELINE_OK); } |
600 | 600 |
601 void Shutdown() { | 601 void Shutdown() { |
602 if (!chunk_demuxer_) | 602 if (!chunk_demuxer_) |
603 return; | 603 return; |
604 chunk_demuxer_->ResetParserState(kSourceId, base::TimeDelta(), | 604 chunk_demuxer_->ResetParserState(kSourceId, base::TimeDelta(), |
605 kInfiniteDuration(), | 605 kInfiniteDuration, |
606 &last_timestamp_offset_); | 606 &last_timestamp_offset_); |
607 chunk_demuxer_->Shutdown(); | 607 chunk_demuxer_->Shutdown(); |
608 chunk_demuxer_ = NULL; | 608 chunk_demuxer_ = NULL; |
609 } | 609 } |
610 | 610 |
611 void DemuxerOpened() { | 611 void DemuxerOpened() { |
612 base::ThreadTaskRunnerHandle::Get()->PostTask( | 612 base::ThreadTaskRunnerHandle::Get()->PostTask( |
613 FROM_HERE, base::Bind(&MockMediaSource::DemuxerOpenedTask, | 613 FROM_HERE, base::Bind(&MockMediaSource::DemuxerOpenedTask, |
614 base::Unretained(this))); | 614 base::Unretained(this))); |
615 } | 615 } |
(...skipping 883 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1499 | 1499 |
1500 // Trim off multiple frames off the beginning of the segment which will cause | 1500 // Trim off multiple frames off the beginning of the segment which will cause |
1501 // the first decoded frame to be incorrect if preroll isn't implemented. | 1501 // the first decoded frame to be incorrect if preroll isn't implemented. |
1502 const base::TimeDelta adts_preroll_duration = | 1502 const base::TimeDelta adts_preroll_duration = |
1503 base::TimeDelta::FromSecondsD(2.5 * 1024 / 44100); | 1503 base::TimeDelta::FromSecondsD(2.5 * 1024 / 44100); |
1504 const base::TimeDelta append_time = | 1504 const base::TimeDelta append_time = |
1505 source.last_timestamp_offset() - adts_preroll_duration; | 1505 source.last_timestamp_offset() - adts_preroll_duration; |
1506 | 1506 |
1507 scoped_refptr<DecoderBuffer> second_file = ReadTestDataFile("sfx.adts"); | 1507 scoped_refptr<DecoderBuffer> second_file = ReadTestDataFile("sfx.adts"); |
1508 source.AppendAtTimeWithWindow( | 1508 source.AppendAtTimeWithWindow( |
1509 append_time, append_time + adts_preroll_duration, kInfiniteDuration(), | 1509 append_time, append_time + adts_preroll_duration, kInfiniteDuration, |
1510 second_file->data(), second_file->data_size()); | 1510 second_file->data(), second_file->data_size()); |
1511 source.EndOfStream(); | 1511 source.EndOfStream(); |
1512 | 1512 |
1513 Play(); | 1513 Play(); |
1514 EXPECT_TRUE(WaitUntilOnEnded()); | 1514 EXPECT_TRUE(WaitUntilOnEnded()); |
1515 | 1515 |
1516 EXPECT_EQ(592, source.last_timestamp_offset().InMilliseconds()); | 1516 EXPECT_EQ(592, source.last_timestamp_offset().InMilliseconds()); |
1517 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size()); | 1517 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size()); |
1518 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds()); | 1518 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds()); |
1519 EXPECT_EQ(592, pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds()); | 1519 EXPECT_EQ(592, pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds()); |
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1631 | 1631 |
1632 // There are 576 silent frames at the start of this mp3. The second append | 1632 // There are 576 silent frames at the start of this mp3. The second append |
1633 // should trim them off. | 1633 // should trim them off. |
1634 const base::TimeDelta mp3_preroll_duration = | 1634 const base::TimeDelta mp3_preroll_duration = |
1635 base::TimeDelta::FromSecondsD(576.0 / 44100); | 1635 base::TimeDelta::FromSecondsD(576.0 / 44100); |
1636 const base::TimeDelta append_time = | 1636 const base::TimeDelta append_time = |
1637 source.last_timestamp_offset() - mp3_preroll_duration; | 1637 source.last_timestamp_offset() - mp3_preroll_duration; |
1638 | 1638 |
1639 scoped_refptr<DecoderBuffer> second_file = ReadTestDataFile("sfx.mp3"); | 1639 scoped_refptr<DecoderBuffer> second_file = ReadTestDataFile("sfx.mp3"); |
1640 source.AppendAtTimeWithWindow(append_time, append_time + mp3_preroll_duration, | 1640 source.AppendAtTimeWithWindow(append_time, append_time + mp3_preroll_duration, |
1641 kInfiniteDuration(), second_file->data(), | 1641 kInfiniteDuration, second_file->data(), |
1642 second_file->data_size()); | 1642 second_file->data_size()); |
1643 source.EndOfStream(); | 1643 source.EndOfStream(); |
1644 | 1644 |
1645 Play(); | 1645 Play(); |
1646 EXPECT_TRUE(WaitUntilOnEnded()); | 1646 EXPECT_TRUE(WaitUntilOnEnded()); |
1647 | 1647 |
1648 EXPECT_EQ(613, source.last_timestamp_offset().InMilliseconds()); | 1648 EXPECT_EQ(613, source.last_timestamp_offset().InMilliseconds()); |
1649 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size()); | 1649 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size()); |
1650 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds()); | 1650 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds()); |
1651 EXPECT_EQ(613, pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds()); | 1651 EXPECT_EQ(613, pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds()); |
(...skipping 748 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2400 | 2400 |
2401 TEST_F(PipelineIntegrationTest, BasicPlaybackPositiveStartTime) { | 2401 TEST_F(PipelineIntegrationTest, BasicPlaybackPositiveStartTime) { |
2402 ASSERT_EQ(PIPELINE_OK, Start("nonzero-start-time.webm")); | 2402 ASSERT_EQ(PIPELINE_OK, Start("nonzero-start-time.webm")); |
2403 Play(); | 2403 Play(); |
2404 ASSERT_TRUE(WaitUntilOnEnded()); | 2404 ASSERT_TRUE(WaitUntilOnEnded()); |
2405 ASSERT_EQ(base::TimeDelta::FromMicroseconds(396000), | 2405 ASSERT_EQ(base::TimeDelta::FromMicroseconds(396000), |
2406 demuxer_->GetStartTime()); | 2406 demuxer_->GetStartTime()); |
2407 } | 2407 } |
2408 | 2408 |
2409 } // namespace media | 2409 } // namespace media |
OLD | NEW |