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

Side by Side Diff: media/filters/chunk_demuxer.cc

Issue 692323002: Move Liveness from DemuxerStreamProvider to DemuxerStream. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix mojo Created 6 years, 1 month 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
« no previous file with comments | « media/filters/chunk_demuxer.h ('k') | media/filters/decoder_selector.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "media/filters/chunk_demuxer.h" 5 #include "media/filters/chunk_demuxer.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <limits> 8 #include <limits>
9 #include <list> 9 #include <list>
10 10
(...skipping 755 matching lines...) Expand 10 before | Expand all | Expand 10 after
766 766
767 return true; 767 return true;
768 } 768 }
769 769
770 void SourceState::OnSourceInitDone(bool success, 770 void SourceState::OnSourceInitDone(bool success,
771 const StreamParser::InitParameters& params) { 771 const StreamParser::InitParameters& params) {
772 auto_update_timestamp_offset_ = params.auto_update_timestamp_offset; 772 auto_update_timestamp_offset_ = params.auto_update_timestamp_offset;
773 base::ResetAndReturn(&init_cb_).Run(success, params); 773 base::ResetAndReturn(&init_cb_).Run(success, params);
774 } 774 }
775 775
776 ChunkDemuxerStream::ChunkDemuxerStream(Type type, bool splice_frames_enabled) 776 ChunkDemuxerStream::ChunkDemuxerStream(Type type,
777 Liveness liveness,
778 bool splice_frames_enabled)
777 : type_(type), 779 : type_(type),
780 liveness_(liveness),
778 state_(UNINITIALIZED), 781 state_(UNINITIALIZED),
779 splice_frames_enabled_(splice_frames_enabled), 782 splice_frames_enabled_(splice_frames_enabled),
780 partial_append_window_trimming_enabled_(false) { 783 partial_append_window_trimming_enabled_(false) {
781 } 784 }
782 785
783 void ChunkDemuxerStream::StartReturningData() { 786 void ChunkDemuxerStream::StartReturningData() {
784 DVLOG(1) << "ChunkDemuxerStream::StartReturningData()"; 787 DVLOG(1) << "ChunkDemuxerStream::StartReturningData()";
785 base::AutoLock auto_lock(lock_); 788 base::AutoLock auto_lock(lock_);
786 DCHECK(read_cb_.is_null()); 789 DCHECK(read_cb_.is_null());
787 ChangeState_Locked(RETURNING_DATA_FOR_READS); 790 ChangeState_Locked(RETURNING_DATA_FOR_READS);
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after
965 // DemuxerStream methods. 968 // DemuxerStream methods.
966 void ChunkDemuxerStream::Read(const ReadCB& read_cb) { 969 void ChunkDemuxerStream::Read(const ReadCB& read_cb) {
967 base::AutoLock auto_lock(lock_); 970 base::AutoLock auto_lock(lock_);
968 DCHECK_NE(state_, UNINITIALIZED); 971 DCHECK_NE(state_, UNINITIALIZED);
969 DCHECK(read_cb_.is_null()); 972 DCHECK(read_cb_.is_null());
970 973
971 read_cb_ = BindToCurrentLoop(read_cb); 974 read_cb_ = BindToCurrentLoop(read_cb);
972 CompletePendingReadIfPossible_Locked(); 975 CompletePendingReadIfPossible_Locked();
973 } 976 }
974 977
975 DemuxerStream::Type ChunkDemuxerStream::type() { return type_; } 978 DemuxerStream::Type ChunkDemuxerStream::type() const { return type_; }
979
980 DemuxerStream::Liveness ChunkDemuxerStream::liveness() const {
981 return liveness_;
982 }
976 983
977 AudioDecoderConfig ChunkDemuxerStream::audio_decoder_config() { 984 AudioDecoderConfig ChunkDemuxerStream::audio_decoder_config() {
978 CHECK_EQ(type_, AUDIO); 985 CHECK_EQ(type_, AUDIO);
979 base::AutoLock auto_lock(lock_); 986 base::AutoLock auto_lock(lock_);
980 return stream_->GetCurrentAudioDecoderConfig(); 987 return stream_->GetCurrentAudioDecoderConfig();
981 } 988 }
982 989
983 VideoDecoderConfig ChunkDemuxerStream::video_decoder_config() { 990 VideoDecoderConfig ChunkDemuxerStream::video_decoder_config() {
984 CHECK_EQ(type_, VIDEO); 991 CHECK_EQ(type_, VIDEO);
985 base::AutoLock auto_lock(lock_); 992 base::AutoLock auto_lock(lock_);
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
1061 bool splice_frames_enabled) 1068 bool splice_frames_enabled)
1062 : state_(WAITING_FOR_INIT), 1069 : state_(WAITING_FOR_INIT),
1063 cancel_next_seek_(false), 1070 cancel_next_seek_(false),
1064 host_(NULL), 1071 host_(NULL),
1065 open_cb_(open_cb), 1072 open_cb_(open_cb),
1066 need_key_cb_(need_key_cb), 1073 need_key_cb_(need_key_cb),
1067 enable_text_(false), 1074 enable_text_(false),
1068 log_cb_(log_cb), 1075 log_cb_(log_cb),
1069 duration_(kNoTimestamp()), 1076 duration_(kNoTimestamp()),
1070 user_specified_duration_(-1), 1077 user_specified_duration_(-1),
1071 liveness_(LIVENESS_UNKNOWN), 1078 liveness_(DemuxerStream::LIVENESS_UNKNOWN),
1072 splice_frames_enabled_(splice_frames_enabled) { 1079 splice_frames_enabled_(splice_frames_enabled) {
1073 DCHECK(!open_cb_.is_null()); 1080 DCHECK(!open_cb_.is_null());
1074 DCHECK(!need_key_cb_.is_null()); 1081 DCHECK(!need_key_cb_.is_null());
1075 } 1082 }
1076 1083
1077 void ChunkDemuxer::Initialize( 1084 void ChunkDemuxer::Initialize(
1078 DemuxerHost* host, 1085 DemuxerHost* host,
1079 const PipelineStatusCB& cb, 1086 const PipelineStatusCB& cb,
1080 bool enable_text_tracks) { 1087 bool enable_text_tracks) {
1081 DVLOG(1) << "Init()"; 1088 DVLOG(1) << "Init()";
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
1145 if (type == DemuxerStream::AUDIO) 1152 if (type == DemuxerStream::AUDIO)
1146 return audio_.get(); 1153 return audio_.get();
1147 1154
1148 return NULL; 1155 return NULL;
1149 } 1156 }
1150 1157
1151 TimeDelta ChunkDemuxer::GetStartTime() const { 1158 TimeDelta ChunkDemuxer::GetStartTime() const {
1152 return TimeDelta(); 1159 return TimeDelta();
1153 } 1160 }
1154 1161
1155 Demuxer::Liveness ChunkDemuxer::GetLiveness() const {
1156 return liveness_;
1157 }
1158
1159 void ChunkDemuxer::StartWaitingForSeek(TimeDelta seek_time) { 1162 void ChunkDemuxer::StartWaitingForSeek(TimeDelta seek_time) {
1160 DVLOG(1) << "StartWaitingForSeek()"; 1163 DVLOG(1) << "StartWaitingForSeek()";
1161 base::AutoLock auto_lock(lock_); 1164 base::AutoLock auto_lock(lock_);
1162 DCHECK(state_ == INITIALIZED || state_ == ENDED || state_ == SHUTDOWN || 1165 DCHECK(state_ == INITIALIZED || state_ == ENDED || state_ == SHUTDOWN ||
1163 state_ == PARSE_ERROR) << state_; 1166 state_ == PARSE_ERROR) << state_;
1164 DCHECK(seek_cb_.is_null()); 1167 DCHECK(seek_cb_.is_null());
1165 1168
1166 if (state_ == SHUTDOWN || state_ == PARSE_ERROR) 1169 if (state_ == SHUTDOWN || state_ == PARSE_ERROR)
1167 return; 1170 return;
1168 1171
(...skipping 460 matching lines...) Expand 10 before | Expand all | Expand 10 after
1629 params.timeline_offset != timeline_offset_) { 1632 params.timeline_offset != timeline_offset_) {
1630 MEDIA_LOG(log_cb_) 1633 MEDIA_LOG(log_cb_)
1631 << "Timeline offset is not the same across all SourceBuffers."; 1634 << "Timeline offset is not the same across all SourceBuffers.";
1632 ReportError_Locked(DEMUXER_ERROR_COULD_NOT_OPEN); 1635 ReportError_Locked(DEMUXER_ERROR_COULD_NOT_OPEN);
1633 return; 1636 return;
1634 } 1637 }
1635 1638
1636 timeline_offset_ = params.timeline_offset; 1639 timeline_offset_ = params.timeline_offset;
1637 } 1640 }
1638 1641
1639 if (params.liveness != LIVENESS_UNKNOWN) { 1642 if (params.liveness != DemuxerStream::LIVENESS_UNKNOWN) {
1640 if (liveness_ != LIVENESS_UNKNOWN && params.liveness != liveness_) { 1643 if (liveness_ != DemuxerStream::LIVENESS_UNKNOWN &&
1644 params.liveness != liveness_) {
1641 MEDIA_LOG(log_cb_) 1645 MEDIA_LOG(log_cb_)
1642 << "Liveness is not the same across all SourceBuffers."; 1646 << "Liveness is not the same across all SourceBuffers.";
1643 ReportError_Locked(DEMUXER_ERROR_COULD_NOT_OPEN); 1647 ReportError_Locked(DEMUXER_ERROR_COULD_NOT_OPEN);
1644 return; 1648 return;
1645 } 1649 }
1646 1650
1647 liveness_ = params.liveness; 1651 liveness_ = params.liveness;
1648 } 1652 }
1649 1653
1650 // Wait until all streams have initialized. 1654 // Wait until all streams have initialized.
(...skipping 12 matching lines...) Expand all
1663 ChangeState_Locked(INITIALIZED); 1667 ChangeState_Locked(INITIALIZED);
1664 base::ResetAndReturn(&init_cb_).Run(PIPELINE_OK); 1668 base::ResetAndReturn(&init_cb_).Run(PIPELINE_OK);
1665 } 1669 }
1666 1670
1667 ChunkDemuxerStream* 1671 ChunkDemuxerStream*
1668 ChunkDemuxer::CreateDemuxerStream(DemuxerStream::Type type) { 1672 ChunkDemuxer::CreateDemuxerStream(DemuxerStream::Type type) {
1669 switch (type) { 1673 switch (type) {
1670 case DemuxerStream::AUDIO: 1674 case DemuxerStream::AUDIO:
1671 if (audio_) 1675 if (audio_)
1672 return NULL; 1676 return NULL;
1673 audio_.reset( 1677 audio_.reset(new ChunkDemuxerStream(DemuxerStream::AUDIO, liveness_,
1674 new ChunkDemuxerStream(DemuxerStream::AUDIO, splice_frames_enabled_)); 1678 splice_frames_enabled_));
1675 return audio_.get(); 1679 return audio_.get();
1676 break; 1680 break;
1677 case DemuxerStream::VIDEO: 1681 case DemuxerStream::VIDEO:
1678 if (video_) 1682 if (video_)
1679 return NULL; 1683 return NULL;
1680 video_.reset( 1684 video_.reset(new ChunkDemuxerStream(DemuxerStream::VIDEO, liveness_,
1681 new ChunkDemuxerStream(DemuxerStream::VIDEO, splice_frames_enabled_)); 1685 splice_frames_enabled_));
1682 return video_.get(); 1686 return video_.get();
1683 break; 1687 break;
1684 case DemuxerStream::TEXT: { 1688 case DemuxerStream::TEXT: {
1685 return new ChunkDemuxerStream(DemuxerStream::TEXT, 1689 return new ChunkDemuxerStream(DemuxerStream::TEXT, liveness_,
1686 splice_frames_enabled_); 1690 splice_frames_enabled_);
1687 break; 1691 break;
1688 } 1692 }
1689 case DemuxerStream::UNKNOWN: 1693 case DemuxerStream::UNKNOWN:
1690 case DemuxerStream::NUM_TYPES: 1694 case DemuxerStream::NUM_TYPES:
1691 NOTREACHED(); 1695 NOTREACHED();
1692 return NULL; 1696 return NULL;
1693 } 1697 }
1694 NOTREACHED(); 1698 NOTREACHED();
1695 return NULL; 1699 return NULL;
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
1801 } 1805 }
1802 1806
1803 void ChunkDemuxer::ShutdownAllStreams() { 1807 void ChunkDemuxer::ShutdownAllStreams() {
1804 for (SourceStateMap::iterator itr = source_state_map_.begin(); 1808 for (SourceStateMap::iterator itr = source_state_map_.begin();
1805 itr != source_state_map_.end(); ++itr) { 1809 itr != source_state_map_.end(); ++itr) {
1806 itr->second->Shutdown(); 1810 itr->second->Shutdown();
1807 } 1811 }
1808 } 1812 }
1809 1813
1810 } // namespace media 1814 } // namespace media
OLDNEW
« no previous file with comments | « media/filters/chunk_demuxer.h ('k') | media/filters/decoder_selector.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698