summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwjia@chromium.org <wjia@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-02 20:15:07 +0000
committerwjia@chromium.org <wjia@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-02 20:15:07 +0000
commitf7c96bdae03e3534a382debbcb26e4f9d1ee6f87 (patch)
tree13a4f0702c8af64d499c92e92741e68d9c442cff
parent82156a1e3b840742ad393d732c0a3a383388b931 (diff)
downloadchromium_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.cc8
-rw-r--r--content/renderer/media/video_capture_impl_manager.cc2
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(