Chromium Code Reviews| Index: media/filters/chunk_demuxer.cc |
| diff --git a/media/filters/chunk_demuxer.cc b/media/filters/chunk_demuxer.cc |
| index 73dbae6c0cf4e3144b4b2a459642e6b63a74ee39..8f28f7e04bb70a52e328f74e56c24510e8fd6f0d 100644 |
| --- a/media/filters/chunk_demuxer.cc |
| +++ b/media/filters/chunk_demuxer.cc |
| @@ -50,7 +50,7 @@ class SourceState { |
| // updated at this time. |
| bool SetTimestampOffset(TimeDelta timestamp_offset); |
| - TimeDelta timestamp_offset() const { return timestamp_offset_; } |
| + TimeDelta GetTimestampOffset() const { return timestamp_offset_; } |
|
scherkus (not reviewing)
2013/06/22 00:09:28
wait -- I think this needs to be what it originall
|
| private: |
| // Called by the |stream_parser_| at the beginning of a new media segment. |
| @@ -96,9 +96,7 @@ class SourceState { |
| }; |
| SourceState::SourceState(scoped_ptr<StreamParser> stream_parser) |
| - : can_update_offset_(true), |
| - stream_parser_(stream_parser.release()) { |
| -} |
| + : can_update_offset_(true), stream_parser_(stream_parser.release()) {} |
| void SourceState::Init(const StreamParser::InitCB& init_cb, |
| const StreamParser::NewConfigCB& config_cb, |
| @@ -109,20 +107,19 @@ void SourceState::Init(const StreamParser::InitCB& init_cb, |
| const AddTextTrackCB& add_text_track_cb, |
| const StreamParser::NewMediaSegmentCB& new_segment_cb, |
| const LogCB& log_cb) { |
| - stream_parser_->Init(init_cb, config_cb, |
| - base::Bind(&SourceState::OnBuffers, |
| - base::Unretained(this), audio_cb), |
| - base::Bind(&SourceState::OnBuffers, |
| - base::Unretained(this), video_cb), |
| - base::Bind(&SourceState::OnTextBuffers, |
| - base::Unretained(this), text_cb), |
| - need_key_cb, |
| - add_text_track_cb, |
| - base::Bind(&SourceState::OnNewMediaSegment, |
| - base::Unretained(this), new_segment_cb), |
| - base::Bind(&SourceState::OnEndOfMediaSegment, |
| - base::Unretained(this)), |
| - log_cb); |
| + stream_parser_->Init( |
| + init_cb, |
| + config_cb, |
| + base::Bind(&SourceState::OnBuffers, base::Unretained(this), audio_cb), |
| + base::Bind(&SourceState::OnBuffers, base::Unretained(this), video_cb), |
| + base::Bind(&SourceState::OnTextBuffers, base::Unretained(this), text_cb), |
| + need_key_cb, |
| + add_text_track_cb, |
| + base::Bind(&SourceState::OnNewMediaSegment, |
| + base::Unretained(this), |
| + new_segment_cb), |
| + base::Bind(&SourceState::OnEndOfMediaSegment, base::Unretained(this)), |
| + log_cb); |
| } |
| bool SourceState::SetTimestampOffset(TimeDelta timestamp_offset) { |
| @@ -148,10 +145,11 @@ void SourceState::AdjustBufferTimestamps( |
| return; |
| for (StreamParser::BufferQueue::const_iterator itr = buffers.begin(); |
| - itr != buffers.end(); ++itr) { |
| - (*itr)->SetDecodeTimestamp( |
| - (*itr)->GetDecodeTimestamp() + timestamp_offset_); |
| - (*itr)->SetTimestamp((*itr)->GetTimestamp() + timestamp_offset_); |
| + itr != buffers.end(); |
| + ++itr) { |
| + (*itr) |
| + ->SetDecodeTimestamp((*itr)->GetDecodeTimestamp() + timestamp_offset_); |
| + (*itr)->set_timestamp((*itr)->timestamp() + timestamp_offset_); |
| } |
| } |
| @@ -281,15 +279,13 @@ class ChunkDemuxerStream : public DemuxerStream { |
| ChunkDemuxerStream::ChunkDemuxerStream(const AudioDecoderConfig& audio_config, |
| const LogCB& log_cb) |
| - : type_(AUDIO), |
| - state_(RETURNING_DATA_FOR_READS) { |
| + : type_(AUDIO), state_(RETURNING_DATA_FOR_READS) { |
| stream_.reset(new SourceBufferStream(audio_config, log_cb)); |
| } |
| ChunkDemuxerStream::ChunkDemuxerStream(const VideoDecoderConfig& video_config, |
| const LogCB& log_cb) |
| - : type_(VIDEO), |
| - state_(RETURNING_DATA_FOR_READS) { |
| + : type_(VIDEO), state_(RETURNING_DATA_FOR_READS) { |
| stream_.reset(new SourceBufferStream(video_config, log_cb)); |
| } |
| @@ -438,8 +434,10 @@ static void RunOnMessageLoop( |
| DemuxerStream::Status status, |
| const scoped_refptr<DecoderBuffer>& buffer) { |
| if (!message_loop_proxy->BelongsToCurrentThread()) { |
| - message_loop_proxy->PostTask(FROM_HERE, base::Bind( |
| - &RunOnMessageLoop, read_cb, message_loop_proxy, status, buffer)); |
| + message_loop_proxy->PostTask( |
| + FROM_HERE, |
| + base::Bind( |
| + &RunOnMessageLoop, read_cb, message_loop_proxy, status, buffer)); |
| return; |
| } |
| @@ -458,8 +456,8 @@ void ChunkDemuxerStream::Read(const ReadCB& read_cb) { |
| } |
| } |
| - base::MessageLoopProxy::current()->PostTask(FROM_HERE, base::Bind( |
| - read_cb, status, buffer)); |
| + base::MessageLoopProxy::current()->PostTask( |
| + FROM_HERE, base::Bind(read_cb, status, buffer)); |
| } |
| DemuxerStream::Type ChunkDemuxerStream::type() { return type_; } |
| @@ -481,8 +479,7 @@ VideoDecoderConfig ChunkDemuxerStream::video_decoder_config() { |
| void ChunkDemuxerStream::ChangeState_Locked(State state) { |
| lock_.AssertAcquired(); |
| DVLOG(1) << "ChunkDemuxerStream::ChangeState_Locked() : " |
| - << "type " << type_ |
| - << " - " << state_ << " -> " << state; |
| + << "type " << type_ << " - " << state_ << " -> " << state; |
| state_ = state; |
| } |
| @@ -492,8 +489,8 @@ void ChunkDemuxerStream::DeferRead_Locked(const ReadCB& read_cb) { |
| lock_.AssertAcquired(); |
| // Wrap & store |read_cb| so that it will |
| // get called on the current MessageLoop. |
| - read_cbs_.push_back(base::Bind(&RunOnMessageLoop, read_cb, |
| - base::MessageLoopProxy::current())); |
| + read_cbs_.push_back(base::Bind( |
| + &RunOnMessageLoop, read_cb, base::MessageLoopProxy::current())); |
| } |
| void ChunkDemuxerStream::CreateReadDoneClosures_Locked(ClosureQueue* closures) { |
| @@ -507,8 +504,7 @@ void ChunkDemuxerStream::CreateReadDoneClosures_Locked(ClosureQueue* closures) { |
| while (!read_cbs_.empty()) { |
| if (!GetNextBuffer_Locked(&status, &buffer)) |
| return; |
| - closures->push_back(base::Bind(read_cbs_.front(), |
| - status, buffer)); |
| + closures->push_back(base::Bind(read_cbs_.front(), status, buffer)); |
| read_cbs_.pop_front(); |
| } |
| } |
| @@ -579,8 +575,8 @@ void ChunkDemuxer::Initialize(DemuxerHost* host, const PipelineStatusCB& cb) { |
| base::AutoLock auto_lock(lock_); |
| if (state_ == SHUTDOWN) { |
| - base::MessageLoopProxy::current()->PostTask(FROM_HERE, base::Bind( |
| - cb, DEMUXER_ERROR_COULD_NOT_OPEN)); |
| + base::MessageLoopProxy::current()->PostTask( |
| + FROM_HERE, base::Bind(cb, DEMUXER_ERROR_COULD_NOT_OPEN)); |
| return; |
| } |
| DCHECK_EQ(state_, WAITING_FOR_INIT); |
| @@ -645,9 +641,7 @@ DemuxerStream* ChunkDemuxer::GetStream(DemuxerStream::Type type) { |
| return NULL; |
| } |
| -TimeDelta ChunkDemuxer::GetStartTime() const { |
| - return TimeDelta(); |
| -} |
| +TimeDelta ChunkDemuxer::GetStartTime() const { return TimeDelta(); } |
| void ChunkDemuxer::StartWaitingForSeek() { |
| DVLOG(1) << "StartWaitingForSeek()"; |
| @@ -693,9 +687,8 @@ ChunkDemuxer::Status ChunkDemuxer::AddId(const std::string& id, |
| bool has_audio = false; |
| bool has_video = false; |
| - scoped_ptr<media::StreamParser> stream_parser( |
| - StreamParserFactory::Create(type, codecs, log_cb_, |
| - &has_audio, &has_video)); |
| + scoped_ptr<media::StreamParser> stream_parser(StreamParserFactory::Create( |
| + type, codecs, log_cb_, &has_audio, &has_video)); |
| if (!stream_parser) |
| return ChunkDemuxer::kNotSupported; |
| @@ -709,21 +702,23 @@ ChunkDemuxer::Status ChunkDemuxer::AddId(const std::string& id, |
| if (has_audio) { |
| source_id_audio_ = id; |
| - audio_cb = base::Bind(&ChunkDemuxer::OnAudioBuffers, |
| - base::Unretained(this)); |
| + audio_cb = |
| + base::Bind(&ChunkDemuxer::OnAudioBuffers, base::Unretained(this)); |
| } |
| if (has_video) { |
| source_id_video_ = id; |
| - video_cb = base::Bind(&ChunkDemuxer::OnVideoBuffers, |
| - base::Unretained(this)); |
| + video_cb = |
| + base::Bind(&ChunkDemuxer::OnVideoBuffers, base::Unretained(this)); |
| } |
| scoped_ptr<SourceState> source_state(new SourceState(stream_parser.Pass())); |
| source_state->Init( |
| base::Bind(&ChunkDemuxer::OnSourceInitDone, base::Unretained(this)), |
| - base::Bind(&ChunkDemuxer::OnNewConfigs, base::Unretained(this), |
| - has_audio, has_video), |
| + base::Bind(&ChunkDemuxer::OnNewConfigs, |
| + base::Unretained(this), |
| + has_audio, |
| + has_video), |
| audio_cb, |
| video_cb, |
| base::Bind(&ChunkDemuxer::OnTextBuffers, base::Unretained(this)), |
| @@ -800,7 +795,7 @@ Ranges<TimeDelta> ChunkDemuxer::ComputeIntersection() const { |
| // This is enforced by the logic that controls the transition to ENDED. |
| DCHECK((audio_start <= video_start && video_start <= audio_end) || |
| (video_start <= audio_start && audio_start <= video_end)); |
| - result.Add(result.end(result.size()-1), std::max(audio_end, video_end)); |
| + result.Add(result.end(result.size() - 1), std::max(audio_end, video_end)); |
| } |
| return result; |
| @@ -1026,15 +1021,16 @@ void ChunkDemuxer::Shutdown() { |
| void ChunkDemuxer::ChangeState_Locked(State new_state) { |
| lock_.AssertAcquired(); |
| - DVLOG(1) << "ChunkDemuxer::ChangeState_Locked() : " |
| - << state_ << " -> " << new_state; |
| + DVLOG(1) << "ChunkDemuxer::ChangeState_Locked() : " << state_ << " -> " |
| + << new_state; |
| state_ = new_state; |
| } |
| ChunkDemuxer::~ChunkDemuxer() { |
| DCHECK_NE(state_, INITIALIZED); |
| for (SourceStateMap::iterator it = source_state_map_.begin(); |
| - it != source_state_map_.end(); ++it) { |
| + it != source_state_map_.end(); |
| + ++it) { |
| delete it->second; |
| } |
| source_state_map_.clear(); |
| @@ -1086,8 +1082,8 @@ bool ChunkDemuxer::IsSeekPending_Locked() const { |
| } |
| void ChunkDemuxer::OnSourceInitDone(bool success, TimeDelta duration) { |
| - DVLOG(1) << "OnSourceInitDone(" << success << ", " |
| - << duration.InSecondsF() << ")"; |
| + DVLOG(1) << "OnSourceInitDone(" << success << ", " << duration.InSecondsF() |
| + << ")"; |
| lock_.AssertAcquired(); |
| DCHECK_EQ(state_, INITIALIZING); |
| if (!success || (!audio_ && !video_)) { |
| @@ -1117,12 +1113,13 @@ void ChunkDemuxer::OnSourceInitDone(bool success, TimeDelta duration) { |
| base::ResetAndReturn(&init_cb_).Run(PIPELINE_OK); |
| } |
| -bool ChunkDemuxer::OnNewConfigs(bool has_audio, bool has_video, |
| +bool ChunkDemuxer::OnNewConfigs(bool has_audio, |
| + bool has_video, |
| const AudioDecoderConfig& audio_config, |
| const VideoDecoderConfig& video_config) { |
| - DVLOG(1) << "OnNewConfigs(" << has_audio << ", " << has_video |
| - << ", " << audio_config.IsValidConfig() |
| - << ", " << video_config.IsValidConfig() << ")"; |
| + DVLOG(1) << "OnNewConfigs(" << has_audio << ", " << has_video << ", " |
| + << audio_config.IsValidConfig() << ", " |
| + << video_config.IsValidConfig() << ")"; |
| lock_.AssertAcquired(); |
| if (!audio_config.IsValidConfig() && !video_config.IsValidConfig()) { |
| @@ -1205,25 +1202,24 @@ bool ChunkDemuxer::OnVideoBuffers(const StreamParser::BufferQueue& buffers) { |
| return true; |
| } |
| -bool ChunkDemuxer::OnTextBuffers( |
| - TextTrack* text_track, |
| - const StreamParser::BufferQueue& buffers) { |
| +bool ChunkDemuxer::OnTextBuffers(TextTrack* text_track, |
| + const StreamParser::BufferQueue& buffers) { |
| lock_.AssertAcquired(); |
| DCHECK_NE(state_, SHUTDOWN); |
| // TODO(matthewjheaney): IncreaseDurationIfNecessary |
| for (StreamParser::BufferQueue::const_iterator itr = buffers.begin(); |
| - itr != buffers.end(); ++itr) { |
| + itr != buffers.end(); |
| + ++itr) { |
| const StreamParserBuffer* const buffer = itr->get(); |
| - const base::TimeDelta start = buffer->GetTimestamp(); |
| - const base::TimeDelta end = start + buffer->GetDuration(); |
| + const base::TimeDelta start = buffer->timestamp(); |
| + const base::TimeDelta end = start + buffer->duration(); |
| std::string id, settings, content; |
| - WebMWebVTTParser::Parse(buffer->GetData(), |
| - buffer->GetDataSize(), |
| - &id, &settings, &content); |
| + WebMWebVTTParser::Parse( |
| + buffer->data(), buffer->data_size(), &id, &settings, &content); |
| text_track->addWebVTTCue(start, end, id, content, settings); |
| } |
| @@ -1272,7 +1268,7 @@ void ChunkDemuxer::IncreaseDurationIfNecessary( |
| const StreamParser::BufferQueue& buffers, |
| ChunkDemuxerStream* stream) { |
| DCHECK(!buffers.empty()); |
| - if (buffers.back()->GetTimestamp() <= duration_) |
| + if (buffers.back()->timestamp() <= duration_) |
| return; |
| Ranges<TimeDelta> ranges = stream->GetBufferedRanges(kInfiniteDuration()); |