Chromium Code Reviews| Index: media/filters/chunk_demuxer.cc |
| diff --git a/media/filters/chunk_demuxer.cc b/media/filters/chunk_demuxer.cc |
| index b38274a4fb0ad203b03d7c0b085884724ff45937..f9c62bb72c0d17d9bf54c97d865fb19f2f3766e1 100644 |
| --- a/media/filters/chunk_demuxer.cc |
| +++ b/media/filters/chunk_demuxer.cc |
| @@ -123,6 +123,11 @@ class SourceState { |
| // updated at this time. |
| bool SetTimestampOffset(TimeDelta timestamp_offset); |
| + // Sets |append_mode_| if possible. |
| + // Returns if the mode was set. Returns false if the mode could not be updated |
|
acolwell GONE FROM CHROMIUM
2014/01/10 23:10:37
s/Returns if/Returns true if/
wolenetz
2014/01/11 00:55:44
Done.
|
| + // at this time. |
| + bool SetAppendMode(ChunkDemuxer::AppendMode mode); |
|
acolwell GONE FROM CHROMIUM
2014/01/10 23:10:37
How about SetSequenceMode(bool is_sequence_mode) s
wolenetz
2014/01/11 00:55:44
Done.
|
| + |
| TimeDelta timestamp_offset() const { return timestamp_offset_; } |
| void set_append_window_start(TimeDelta start) { |
| @@ -217,6 +222,11 @@ class SourceState { |
| // The offset to apply to media segment timestamps. |
| TimeDelta timestamp_offset_; |
| + // The mode by which appended media is processed. |
| + // TODO(wolenetz): Enable |kSequence| mode logic. See http://crbug.com/249422 |
| + // and http://crbug.com/333437. |
| + ChunkDemuxer::AppendMode append_mode_; |
| + |
| TimeDelta append_window_start_; |
| TimeDelta append_window_end_; |
| @@ -228,8 +238,9 @@ class SourceState { |
| // appended data. |
| bool new_media_segment_; |
| - // Keeps track of whether |timestamp_offset_| can be modified. |
| - bool can_update_offset_; |
| + // Keeps track of whether |timestamp_offset_| or |append_mode_| can be |
| + // set. These cannot be set if media segment is currently being parsed. |
| + bool parsing_media_segment_; |
| // The object used to parse appended data. |
| scoped_ptr<StreamParser> stream_parser_; |
| @@ -356,9 +367,10 @@ SourceState::SourceState(scoped_ptr<StreamParser> stream_parser, |
| const IncreaseDurationCB& increase_duration_cb) |
| : create_demuxer_stream_cb_(create_demuxer_stream_cb), |
| increase_duration_cb_(increase_duration_cb), |
| + append_mode_(ChunkDemuxer::kSegments), |
| append_window_end_(kInfiniteDuration()), |
| new_media_segment_(false), |
| - can_update_offset_(true), |
| + parsing_media_segment_(false), |
| stream_parser_(stream_parser.release()), |
| audio_(NULL), |
| audio_needs_keyframe_(true), |
| @@ -406,13 +418,22 @@ void SourceState::Init(const StreamParser::InitCB& init_cb, |
| } |
| bool SourceState::SetTimestampOffset(TimeDelta timestamp_offset) { |
| - if (!can_update_offset_) |
| + if (parsing_media_segment_) |
| return false; |
| timestamp_offset_ = timestamp_offset; |
| return true; |
| } |
| +bool SourceState::SetAppendMode(ChunkDemuxer::AppendMode mode) { |
| + if (parsing_media_segment_) |
| + return false; |
| + |
| + append_mode_ = mode; |
| + return true; |
| +} |
| + |
| + |
| bool SourceState::Append(const uint8* data, size_t length) { |
| return stream_parser_->Parse(data, length); |
| } |
| @@ -421,7 +442,7 @@ void SourceState::Abort() { |
| stream_parser_->Flush(); |
| audio_needs_keyframe_ = true; |
| video_needs_keyframe_ = true; |
| - can_update_offset_ = true; |
| + parsing_media_segment_ = false; |
| } |
| void SourceState::Remove(TimeDelta start, TimeDelta end, TimeDelta duration) { |
| @@ -744,13 +765,13 @@ bool SourceState::OnNewConfigs( |
| void SourceState::OnNewMediaSegment() { |
| DVLOG(2) << "OnNewMediaSegment()"; |
| - can_update_offset_ = false; |
| + parsing_media_segment_ = true; |
| new_media_segment_ = true; |
| } |
| void SourceState::OnEndOfMediaSegment() { |
| DVLOG(2) << "OnEndOfMediaSegment()"; |
| - can_update_offset_ = true; |
| + parsing_media_segment_ = false; |
| new_media_segment_ = false; |
| } |
| @@ -1524,6 +1545,15 @@ bool ChunkDemuxer::SetTimestampOffset(const std::string& id, TimeDelta offset) { |
| return source_state_map_[id]->SetTimestampOffset(offset); |
| } |
| +bool ChunkDemuxer::SetAppendMode(const std::string& id, AppendMode mode) { |
| + base::AutoLock auto_lock(lock_); |
| + DVLOG(1) << "SetAppendMode(" << id << ", " << mode << ")"; |
| + CHECK(IsValidId(id)); |
| + DCHECK_NE(state_, ENDED); |
| + |
| + return source_state_map_[id]->SetAppendMode(mode); |
| +} |
| + |
| void ChunkDemuxer::MarkEndOfStream(PipelineStatus status) { |
| DVLOG(1) << "MarkEndOfStream(" << status << ")"; |
| base::AutoLock auto_lock(lock_); |