diff options
author | wjia@chromium.org <wjia@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-02 20:15:07 +0000 |
---|---|---|
committer | wjia@chromium.org <wjia@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-02 20:15:07 +0000 |
commit | f7c96bdae03e3534a382debbcb26e4f9d1ee6f87 (patch) | |
tree | 13a4f0702c8af64d499c92e92741e68d9c442cff | |
parent | 82156a1e3b840742ad393d732c0a3a383388b931 (diff) | |
download | chromium_src-f7c96bdae03e3534a382debbcb26e4f9d1ee6f87.zip chromium_src-f7c96bdae03e3534a382debbcb26e4f9d1ee6f87.tar.gz chromium_src-f7c96bdae03e3534a382debbcb26e4f9d1ee6f87.tar.bz2 |
handle shared buffers based on the state of VideoCaptureImpl.
The created buffer should be released when it arrives after client calls StopCapture.
BUG=152418
Review URL: https://codereview.chromium.org/11000043
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@159749 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | content/renderer/media/video_capture_impl.cc | 8 | ||||
-rw-r--r-- | content/renderer/media/video_capture_impl_manager.cc | 2 |
2 files changed, 9 insertions, 1 deletions
diff --git a/content/renderer/media/video_capture_impl.cc b/content/renderer/media/video_capture_impl.cc index faa29d0..9ebc8a7 100644 --- a/content/renderer/media/video_capture_impl.cc +++ b/content/renderer/media/video_capture_impl.cc @@ -238,6 +238,14 @@ void VideoCaptureImpl::DoBufferCreatedOnCaptureThread( base::SharedMemoryHandle handle, int length, int buffer_id) { DCHECK(capture_message_loop_proxy_->BelongsToCurrentThread()); + + // In case client calls StopCapture before the arrival of created buffer, + // just close this buffer and return. + if (state_ != video_capture::kStarted) { + base::SharedMemory::CloseHandle(handle); + return; + } + DCHECK(device_info_available_); media::VideoCapture::VideoFrameBuffer* buffer; diff --git a/content/renderer/media/video_capture_impl_manager.cc b/content/renderer/media/video_capture_impl_manager.cc index 46ed2f5..f2bc748 100644 --- a/content/renderer/media/video_capture_impl_manager.cc +++ b/content/renderer/media/video_capture_impl_manager.cc @@ -62,8 +62,8 @@ void VideoCaptureImplManager::FreeDevice(VideoCaptureImpl* vc) { } VideoCaptureImplManager::~VideoCaptureImplManager() { - STLDeleteContainerPairSecondPointers(devices_.begin(), devices_.end()); thread_.Stop(); + STLDeleteContainerPairSecondPointers(devices_.begin(), devices_.end()); } VideoCaptureImplManager::Device::Device( |