diff --git a/webrtc/common_video/i420_buffer_pool.cc b/webrtc/common_video/i420_buffer_pool.cc index b6ad2ba2e4..04a0ab9b7f 100644 --- a/webrtc/common_video/i420_buffer_pool.cc +++ b/webrtc/common_video/i420_buffer_pool.cc @@ -51,7 +51,12 @@ class PooledI420Buffer : public webrtc::VideoFrameBuffer { namespace webrtc { I420BufferPool::I420BufferPool() { + Release(); +} + +void I420BufferPool::Release() { thread_checker_.DetachFromThread(); + buffers_.clear(); } rtc::scoped_refptr I420BufferPool::CreateBuffer(int width, diff --git a/webrtc/common_video/interface/i420_buffer_pool.h b/webrtc/common_video/interface/i420_buffer_pool.h index e9dff8ca5e..df862cdba5 100644 --- a/webrtc/common_video/interface/i420_buffer_pool.h +++ b/webrtc/common_video/interface/i420_buffer_pool.h @@ -29,6 +29,9 @@ class I420BufferPool { // Returns a buffer from the pool, or creates a new buffer if no suitable // buffer exists in the pool. rtc::scoped_refptr CreateBuffer(int width, int height); + // Clears buffers_ and detaches the thread checker so that it can be reused + // later from another thread. + void Release(); private: rtc::ThreadChecker thread_checker_; diff --git a/webrtc/modules/video_coding/codecs/vp8/vp8_impl.cc b/webrtc/modules/video_coding/codecs/vp8/vp8_impl.cc index 34862a46fa..4f3678f114 100644 --- a/webrtc/modules/video_coding/codecs/vp8/vp8_impl.cc +++ b/webrtc/modules/video_coding/codecs/vp8/vp8_impl.cc @@ -1385,6 +1385,7 @@ int VP8DecoderImpl::Release() { delete ref_frame_; ref_frame_ = NULL; } + buffer_pool_.Release(); inited_ = false; return WEBRTC_VIDEO_CODEC_OK; }