Index: chromecast/media/cma/pipeline/av_pipeline_impl.cc |
diff --git a/chromecast/media/cma/pipeline/av_pipeline_impl.cc b/chromecast/media/cma/pipeline/av_pipeline_impl.cc |
index 6c415c7fc2e51701458518263fec2a3794a99680..06b054a083285d0331c693b7f613dc4920beeddb 100644 |
--- a/chromecast/media/cma/pipeline/av_pipeline_impl.cc |
+++ b/chromecast/media/cma/pipeline/av_pipeline_impl.cc |
@@ -51,16 +51,6 @@ AvPipelineImpl::AvPipelineImpl( |
} |
AvPipelineImpl::~AvPipelineImpl() { |
- // If there are weak pointers in the wild, they must be invalidated |
- // on the right thread. |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- media_component_device_->SetClient(MediaComponentDevice::Client()); |
- |
- { |
- base::AutoLock lock(media_keys_lock_); |
- if (media_keys_ && media_keys_callback_id_ != kNoCallbackId) |
- media_keys_->UnregisterPlayer(media_keys_callback_id_); |
- } |
} |
void AvPipelineImpl::TransitionToState(State state) { |
@@ -103,6 +93,20 @@ bool AvPipelineImpl::Initialize() { |
return true; |
} |
+void AvPipelineImpl::Finalize() { |
+ DCHECK(thread_checker_.CalledOnValidThread()); |
+ media_component_device_->SetClient(MediaComponentDevice::Client()); |
+ |
+ enable_feeding_ = false; |
+ media_component_device_ = NULL; |
+ |
+ { |
+ base::AutoLock lock(media_keys_lock_); |
+ if (media_keys_ && media_keys_callback_id_ != kNoCallbackId) |
+ media_keys_->UnregisterPlayer(media_keys_callback_id_); |
+ } |
+} |
+ |
bool AvPipelineImpl::StartPlayingFrom( |
base::TimeDelta time, |
const scoped_refptr<BufferingState>& buffering_state) { |