Index: media/filters/ffmpeg_demuxer.cc |
diff --git a/media/filters/ffmpeg_demuxer.cc b/media/filters/ffmpeg_demuxer.cc |
index f59c665a0ed35d73fea6e9fa8c34e02b86108bd6..2860c0cc05a1dcc5b1af4408d0485fea40ec74d4 100644 |
--- a/media/filters/ffmpeg_demuxer.cc |
+++ b/media/filters/ffmpeg_demuxer.cc |
@@ -160,6 +160,15 @@ void FFmpegDemuxerStream::Read(const ReadCallback& read_callback) { |
DCHECK(!read_callback.is_null()); |
base::AutoLock auto_lock(lock_); |
+ // Don't accept any additional reads if we've been told to stop. |
+ // The demuxer_ may have been destroyed in the pipleine thread. |
+ // |
+ // TODO(scherkus): it would be cleaner if we replied with an error message. |
+ if (stopped_) { |
+ read_callback.Run(new DataBuffer(0)); |
+ return; |
+ } |
+ |
if (!buffer_queue_.empty()) { |
// Dequeue a buffer send back. |
scoped_refptr<Buffer> buffer = buffer_queue_.front(); |
@@ -185,6 +194,7 @@ void FFmpegDemuxerStream::ReadTask(const ReadCallback& read_callback) { |
// |
// TODO(scherkus): it would be cleaner if we replied with an error message. |
if (stopped_) { |
+ read_callback.Run(new DataBuffer(0)); |
return; |
} |