summaryrefslogtreecommitdiffstats
path: root/webkit
diff options
context:
space:
mode:
authorihf@chromium.org <ihf@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-12-07 21:28:42 +0000
committerihf@chromium.org <ihf@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-12-07 21:28:42 +0000
commitb134a460549ed4c2cb1fc0dbf784b7d4ab537a2a (patch)
tree8d334f6ba4e73cfbd5dc13367771d46e879c9c8c /webkit
parent39daa02e4fa672525d4e792c3658e09b75213ef5 (diff)
downloadchromium_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.cc33
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);
}