Index: media/filters/ffmpeg_demuxer.cc |
diff --git a/media/filters/ffmpeg_demuxer.cc b/media/filters/ffmpeg_demuxer.cc |
index 6a5aa09f6386c931465ac5ef3478e71c662ae82d..081bcbf1a452be23ee45adb6a080e11bd5b55c77 100644 |
--- a/media/filters/ffmpeg_demuxer.cc |
+++ b/media/filters/ffmpeg_demuxer.cc |
@@ -49,6 +49,15 @@ |
namespace media { |
+namespace { |
+ |
+void SetAVStreamDiscard(AVStream* stream, AVDiscard discard) { |
+ DCHECK(stream); |
+ stream->discard = discard; |
+} |
+ |
+} // namespace |
+ |
static base::Time ExtractTimelineOffset(AVFormatContext* format_context) { |
if (strstr(format_context->iformat->name, "webm") || |
strstr(format_context->iformat->name, "matroska")) { |
@@ -736,11 +745,15 @@ bool FFmpegDemuxerStream::IsEnabled() const { |
void FFmpegDemuxerStream::SetEnabled(bool enabled, base::TimeDelta timestamp) { |
DCHECK(task_runner_->BelongsToCurrentThread()); |
+ DCHECK(demuxer_); |
+ DCHECK(demuxer_->ffmpeg_task_runner()); |
if (enabled == is_enabled_) |
return; |
is_enabled_ = enabled; |
- av_stream()->discard = enabled ? AVDISCARD_DEFAULT : AVDISCARD_ALL; |
+ demuxer_->ffmpeg_task_runner()->PostTask( |
+ FROM_HERE, base::Bind(&SetAVStreamDiscard, av_stream(), |
+ enabled ? AVDISCARD_DEFAULT : AVDISCARD_ALL)); |
if (is_enabled_) { |
waiting_for_keyframe_ = true; |
} |