Index: media/filters/chunk_demuxer.cc |
diff --git a/media/filters/chunk_demuxer.cc b/media/filters/chunk_demuxer.cc |
index d641ded72c00e74a3fd48b9805c1e5f319cf9efa..364c55825a25393a5a705f0d62a39ef9bc984b71 100644 |
--- a/media/filters/chunk_demuxer.cc |
+++ b/media/filters/chunk_demuxer.cc |
@@ -614,6 +614,11 @@ bool SourceState::OnNewConfigs( |
DVLOG(1) << "Failed to add audio track to frame processor."; |
return false; |
} |
+ |
+ audio_->UpdateRangeRemovalCB( |
+ base::Bind(&FrameProcessor::OnRangeRemoval, |
+ base::Unretained(frame_processor_.get()), |
+ FrameProcessor::kAudioTrackId)); |
} |
frame_processor_->OnPossibleAudioConfigUpdate(audio_config); |
@@ -642,6 +647,11 @@ bool SourceState::OnNewConfigs( |
DVLOG(1) << "Failed to add video track to frame processor."; |
return false; |
} |
+ |
+ video_->UpdateRangeRemovalCB( |
+ base::Bind(&FrameProcessor::OnRangeRemoval, |
+ base::Unretained(frame_processor_.get()), |
+ FrameProcessor::kVideoTrackId)); |
} |
success &= video_->UpdateVideoConfig(video_config, log_cb_); |
@@ -659,6 +669,9 @@ bool SourceState::OnNewConfigs( |
<< itr->first << " to frame processor."; |
break; |
} |
+ text_stream->UpdateRangeRemovalCB( |
+ base::Bind(&FrameProcessor::OnRangeRemoval, |
+ base::Unretained(frame_processor_.get()), itr->first)); |
text_stream->UpdateTextConfig(itr->second, log_cb_); |
text_stream_map_[itr->first] = text_stream; |
new_text_track_cb_.Run(text_stream, itr->second); |
@@ -686,8 +699,11 @@ bool SourceState::OnNewConfigs( |
StreamParser::TrackId new_id = config_itr->first; |
if (new_id != old_id) { |
if (frame_processor_->UpdateTrack(old_id, new_id)) { |
+ text_stream->UpdateRangeRemovalCB( |
+ base::Bind(&FrameProcessor::OnRangeRemoval, |
+ base::Unretained(frame_processor_.get()), new_id)); |
text_stream_map_.clear(); |
- text_stream_map_[config_itr->first] = text_stream; |
+ text_stream_map_[new_id] = text_stream; |
} else { |
success &= false; |
MEDIA_LOG(ERROR, log_cb_) |
@@ -976,6 +992,13 @@ void ChunkDemuxerStream::UpdateTextConfig(const TextTrackConfig& config, |
stream_.reset(new SourceBufferStream(config, log_cb, splice_frames_enabled_)); |
} |
+void ChunkDemuxerStream::UpdateRangeRemovalCB( |
+ const SourceBufferStream::NotifyRangeRemovalCB& range_removal_cb) { |
+ DCHECK(!range_removal_cb.is_null()); |
+ base::AutoLock auto_lock(lock_); |
+ stream_->set_range_removal_cb(range_removal_cb); |
+} |
+ |
void ChunkDemuxerStream::MarkEndOfStream() { |
base::AutoLock auto_lock(lock_); |
stream_->MarkEndOfStream(); |