| Index: media/filters/ffmpeg_demuxer.cc
|
| diff --git a/media/filters/ffmpeg_demuxer.cc b/media/filters/ffmpeg_demuxer.cc
|
| index 5946874b763b08b0aca547586d12f1bc701ea8a6..b1e6684c873ec915197043b8496f98b9d42aef84 100644
|
| --- a/media/filters/ffmpeg_demuxer.cc
|
| +++ b/media/filters/ffmpeg_demuxer.cc
|
| @@ -838,6 +838,7 @@ FFmpegDemuxer::FFmpegDemuxer(
|
| duration_known_(false),
|
| encrypted_media_init_data_cb_(encrypted_media_init_data_cb),
|
| media_tracks_updated_cb_(media_tracks_updated_cb),
|
| + cancel_pending_seek_factory_(this),
|
| weak_factory_(this) {
|
| DCHECK(task_runner_.get());
|
| DCHECK(data_source_);
|
| @@ -860,6 +861,7 @@ void FFmpegDemuxer::Initialize(DemuxerHost* host,
|
| DCHECK(task_runner_->BelongsToCurrentThread());
|
| host_ = host;
|
| text_enabled_ = enable_text_tracks;
|
| + weak_this_ = cancel_pending_seek_factory_.GetWeakPtr();
|
|
|
| url_protocol_.reset(new BlockingUrlProtocol(
|
| data_source_,
|
| @@ -947,6 +949,7 @@ void FFmpegDemuxer::Stop() {
|
| // Invalidate WeakPtrs on |task_runner_|, destruction may happen on another
|
| // thread.
|
| weak_factory_.InvalidateWeakPtrs();
|
| + cancel_pending_seek_factory_.InvalidateWeakPtrs();
|
| }
|
|
|
| void FFmpegDemuxer::StartWaitingForSeek(base::TimeDelta seek_time) {}
|
| @@ -955,9 +958,9 @@ void FFmpegDemuxer::CancelPendingSeek(base::TimeDelta seek_time) {
|
| if (task_runner_->BelongsToCurrentThread()) {
|
| AbortPendingReads();
|
| } else {
|
| - task_runner_->PostTask(FROM_HERE,
|
| - base::Bind(&FFmpegDemuxer::AbortPendingReads,
|
| - weak_factory_.GetWeakPtr()));
|
| + // Don't use GetWeakPtr() here since we are on the wrong thread.
|
| + task_runner_->PostTask(
|
| + FROM_HERE, base::Bind(&FFmpegDemuxer::AbortPendingReads, weak_this_));
|
| }
|
| }
|
|
|
|
|