diff options
author | ihf@chromium.org <ihf@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-12-07 21:28:42 +0000 |
---|---|---|
committer | ihf@chromium.org <ihf@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-12-07 21:28:42 +0000 |
commit | b134a460549ed4c2cb1fc0dbf784b7d4ab537a2a (patch) | |
tree | 8d334f6ba4e73cfbd5dc13367771d46e879c9c8c /webkit | |
parent | 39daa02e4fa672525d4e792c3658e09b75213ef5 (diff) | |
download | chromium_src-b134a460549ed4c2cb1fc0dbf784b7d4ab537a2a.zip chromium_src-b134a460549ed4c2cb1fc0dbf784b7d4ab537a2a.tar.gz chromium_src-b134a460549ed4c2cb1fc0dbf784b7d4ab537a2a.tar.bz2 |
Webcam ppapi flash fix.
Return buffers that are in flight during shutdown and make sure to issue
defered stop.
BUG=106369
Review URL: http://codereview.chromium.org/8819010
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@113467 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit')
-rw-r--r-- | webkit/plugins/ppapi/ppb_video_capture_impl.cc | 33 |
1 files changed, 17 insertions, 16 deletions
diff --git a/webkit/plugins/ppapi/ppb_video_capture_impl.cc b/webkit/plugins/ppapi/ppb_video_capture_impl.cc index 588e8af..f2cb26c 100644 --- a/webkit/plugins/ppapi/ppb_video_capture_impl.cc +++ b/webkit/plugins/ppapi/ppb_video_capture_impl.cc @@ -209,24 +209,25 @@ void PPB_VideoCapture_Impl::OnRemoved(media::VideoCapture* capture) { void PPB_VideoCapture_Impl::OnBufferReady( media::VideoCapture* capture, scoped_refptr<media::VideoCapture::VideoFrameBuffer> buffer) { - if (is_dead_) - return; - - DCHECK(buffer.get()); - for (uint32_t i = 0; i < buffers_.size(); ++i) { - if (!buffers_[i].in_use) { - // TODO(piman): it looks like stride isn't actually used/filled. - DCHECK(buffer->stride == 0); - size_t size = std::min(static_cast<size_t>(buffers_[i].buffer->size()), - buffer->buffer_size); - memcpy(buffers_[i].data, buffer->memory_pointer, size); - buffers_[i].in_use = true; - platform_video_capture_->FeedBuffer(buffer); - ppp_videocapture_->OnBufferReady(pp_instance(), pp_resource(), i); - return; + if (!is_dead_) { + DCHECK(buffer.get()); + for (uint32_t i = 0; i < buffers_.size(); ++i) { + if (!buffers_[i].in_use) { + // TODO(ihf): Switch to a size calculation based on stride. + // Stride is filled out now but not more meaningful than size + // until wjia unifies VideoFrameBuffer and media::VideoFrame. + size_t size = std::min(static_cast<size_t>(buffers_[i].buffer->size()), + buffer->buffer_size); + memcpy(buffers_[i].data, buffer->memory_pointer, size); + buffers_[i].in_use = true; + platform_video_capture_->FeedBuffer(buffer); + ppp_videocapture_->OnBufferReady(pp_instance(), pp_resource(), i); + return; + } } } - // TODO(piman): signal dropped buffers ? + // Even after we have stopped and are dead we have to return buffers that + // are in flight to us. Otherwise VideoCaptureController will not tear down. platform_video_capture_->FeedBuffer(buffer); } |