Index: media/filters/ffmpeg_demuxer.cc |
diff --git a/media/filters/ffmpeg_demuxer.cc b/media/filters/ffmpeg_demuxer.cc |
index c38d57c4fc017d145182a50ca4c9da019ba3e1bd..5e3409d0427915452761f11fa2bde21cedbf393b 100644 |
--- a/media/filters/ffmpeg_demuxer.cc |
+++ b/media/filters/ffmpeg_demuxer.cc |
@@ -369,7 +369,6 @@ FFmpegDemuxer::FFmpegDemuxer( |
const scoped_refptr<MediaLog>& media_log) |
: host_(NULL), |
task_runner_(task_runner), |
- weak_factory_(this), |
blocking_thread_("FFmpegDemuxer"), |
pending_read_(false), |
pending_seek_(false), |
@@ -380,7 +379,8 @@ FFmpegDemuxer::FFmpegDemuxer( |
audio_disabled_(false), |
text_enabled_(false), |
duration_known_(false), |
- need_key_cb_(need_key_cb) { |
+ need_key_cb_(need_key_cb), |
+ weak_factory_(this) { |
DCHECK(task_runner_.get()); |
DCHECK(data_source_); |
} |
@@ -390,9 +390,10 @@ FFmpegDemuxer::~FFmpegDemuxer() {} |
void FFmpegDemuxer::Stop(const base::Closure& callback) { |
DCHECK(task_runner_->BelongsToCurrentThread()); |
url_protocol_->Abort(); |
- data_source_->Stop(BindToCurrentLoop(base::Bind( |
- &FFmpegDemuxer::OnDataSourceStopped, weak_this_, |
- BindToCurrentLoop(callback)))); |
+ data_source_->Stop( |
+ BindToCurrentLoop(base::Bind(&FFmpegDemuxer::OnDataSourceStopped, |
+ weak_factory_.GetWeakPtr(), |
+ BindToCurrentLoop(callback)))); |
data_source_ = NULL; |
} |
@@ -419,7 +420,8 @@ void FFmpegDemuxer::Seek(base::TimeDelta time, const PipelineStatusCB& cb) { |
-1, |
time.InMicroseconds(), |
flags), |
- base::Bind(&FFmpegDemuxer::OnSeekFrameDone, weak_this_, cb)); |
+ base::Bind( |
+ &FFmpegDemuxer::OnSeekFrameDone, weak_factory_.GetWeakPtr(), cb)); |
} |
void FFmpegDemuxer::OnAudioRendererDisabled() { |
@@ -438,7 +440,6 @@ void FFmpegDemuxer::Initialize(DemuxerHost* host, |
bool enable_text_tracks) { |
DCHECK(task_runner_->BelongsToCurrentThread()); |
host_ = host; |
- weak_this_ = weak_factory_.GetWeakPtr(); |
text_enabled_ = enable_text_tracks; |
// TODO(scherkus): DataSource should have a host by this point, |
@@ -461,7 +462,9 @@ void FFmpegDemuxer::Initialize(DemuxerHost* host, |
blocking_thread_.message_loop_proxy().get(), |
FROM_HERE, |
base::Bind(&FFmpegGlue::OpenContext, base::Unretained(glue_.get())), |
- base::Bind(&FFmpegDemuxer::OnOpenContextDone, weak_this_, status_cb)); |
+ base::Bind(&FFmpegDemuxer::OnOpenContextDone, |
+ weak_factory_.GetWeakPtr(), |
+ status_cb)); |
} |
DemuxerStream* FFmpegDemuxer::GetStream(DemuxerStream::Type type) { |
@@ -560,7 +563,9 @@ void FFmpegDemuxer::OnOpenContextDone(const PipelineStatusCB& status_cb, |
base::Bind(&avformat_find_stream_info, |
glue_->format_context(), |
static_cast<AVDictionary**>(NULL)), |
- base::Bind(&FFmpegDemuxer::OnFindStreamInfoDone, weak_this_, status_cb)); |
+ base::Bind(&FFmpegDemuxer::OnFindStreamInfoDone, |
+ weak_factory_.GetWeakPtr(), |
+ status_cb)); |
} |
void FFmpegDemuxer::OnFindStreamInfoDone(const PipelineStatusCB& status_cb, |
@@ -793,8 +798,9 @@ void FFmpegDemuxer::ReadFrameIfNeeded() { |
blocking_thread_.message_loop_proxy().get(), |
FROM_HERE, |
base::Bind(&av_read_frame, glue_->format_context(), packet_ptr), |
- base::Bind( |
- &FFmpegDemuxer::OnReadFrameDone, weak_this_, base::Passed(&packet))); |
+ base::Bind(&FFmpegDemuxer::OnReadFrameDone, |
+ weak_factory_.GetWeakPtr(), |
+ base::Passed(&packet))); |
} |
void FFmpegDemuxer::OnReadFrameDone(ScopedAVPacket packet, int result) { |