summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwjia@chromium.org <wjia@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-09-27 21:45:09 +0000
committerwjia@chromium.org <wjia@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-09-27 21:45:09 +0000
commit38ba7ae8f8aa0a2399e466c36d458a9e38e94297 (patch)
treeadb07982f6cec3b218e638ffd7648942975a9435
parent0881e190121c0a4ef24175df2f2307334d6a8d32 (diff)
downloadchromium_src-38ba7ae8f8aa0a2399e466c36d458a9e38e94297.zip
chromium_src-38ba7ae8f8aa0a2399e466c36d458a9e38e94297.tar.gz
chromium_src-38ba7ae8f8aa0a2399e466c36d458a9e38e94297.tar.bz2
Add OnRemoved() in VideoCapture::EventHandler API
This is to allow client to know when the event handler can be deleted. BUG=none TEST=trybots Review URL: http://codereview.chromium.org/8037055 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@103016 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--content/renderer/media/capture_video_decoder.cc4
-rw-r--r--content/renderer/media/capture_video_decoder.h1
-rw-r--r--content/renderer/media/video_capture_impl.cc9
-rw-r--r--content/renderer/media/video_capture_impl_unittest.cc3
-rw-r--r--content/renderer/media/video_capture_module_impl.cc4
-rw-r--r--content/renderer/media/video_capture_module_impl.h1
-rw-r--r--media/video/capture/video_capture.h6
-rw-r--r--media/video/capture/video_capture_proxy.cc4
-rw-r--r--media/video/capture/video_capture_proxy.h1
-rw-r--r--webkit/plugins/ppapi/ppb_video_capture_impl.cc4
-rw-r--r--webkit/plugins/ppapi/ppb_video_capture_impl.h1
11 files changed, 37 insertions, 1 deletions
diff --git a/content/renderer/media/capture_video_decoder.cc b/content/renderer/media/capture_video_decoder.cc
index 74652f3..c7c0b5a 100644
--- a/content/renderer/media/capture_video_decoder.cc
+++ b/content/renderer/media/capture_video_decoder.cc
@@ -109,6 +109,10 @@ void CaptureVideoDecoder::OnError(media::VideoCapture* capture,
NOTIMPLEMENTED();
}
+void CaptureVideoDecoder::OnRemoved(media::VideoCapture* capture) {
+ NOTIMPLEMENTED();
+}
+
void CaptureVideoDecoder::OnBufferReady(
media::VideoCapture* capture,
scoped_refptr<media::VideoCapture::VideoFrameBuffer> buf) {
diff --git a/content/renderer/media/capture_video_decoder.h b/content/renderer/media/capture_video_decoder.h
index ef2ffad..f491d5e 100644
--- a/content/renderer/media/capture_video_decoder.h
+++ b/content/renderer/media/capture_video_decoder.h
@@ -51,6 +51,7 @@ class CaptureVideoDecoder
virtual void OnStopped(media::VideoCapture* capture) OVERRIDE;
virtual void OnPaused(media::VideoCapture* capture) OVERRIDE;
virtual void OnError(media::VideoCapture* capture, int error_code) OVERRIDE;
+ virtual void OnRemoved(media::VideoCapture* capture) OVERRIDE;
virtual void OnBufferReady(
media::VideoCapture* capture,
scoped_refptr<media::VideoCapture::VideoFrameBuffer> buf) OVERRIDE;
diff --git a/content/renderer/media/video_capture_impl.cc b/content/renderer/media/video_capture_impl.cc
index 2ac180b..3364b35 100644
--- a/content/renderer/media/video_capture_impl.cc
+++ b/content/renderer/media/video_capture_impl.cc
@@ -144,6 +144,7 @@ void VideoCaptureImpl::DoStartCapture(
if (it != pending_clients_.end()) {
handler->OnError(this, 1);
+ handler->OnRemoved(this);
return;
}
@@ -157,6 +158,7 @@ void VideoCaptureImpl::DoStartCapture(
capability.height != current_params_.height)) {
// Can't have 2 master clients with different resolutions.
handler->OnError(this, 1);
+ handler->OnRemoved(this);
return;
}
@@ -219,6 +221,7 @@ void VideoCaptureImpl::DoStopCapture(
ClientInfo::iterator it = pending_clients_.find(handler);
if (it != pending_clients_.end()) {
handler->OnStopped(this);
+ handler->OnRemoved(this);
pending_clients_.erase(it);
return;
}
@@ -227,6 +230,7 @@ void VideoCaptureImpl::DoStopCapture(
return;
handler->OnStopped(this);
+ handler->OnRemoved(this);
clients_.erase(handler);
master_clients_.remove(handler);
@@ -368,7 +372,12 @@ void VideoCaptureImpl::DoStateChanged(const media::VideoCapture::State& state) {
it != clients_.end(); it++) {
// TODO(wjia): browser process would send error code.
it->first->OnError(this, 1);
+ it->first->OnRemoved(this);
}
+ clients_.clear();
+ master_clients_.clear();
+ state_ = kStopped;
+ current_params_.width = current_params_.height = 0;
break;
default:
break;
diff --git a/content/renderer/media/video_capture_impl_unittest.cc b/content/renderer/media/video_capture_impl_unittest.cc
index fc66030..1dd7ae1 100644
--- a/content/renderer/media/video_capture_impl_unittest.cc
+++ b/content/renderer/media/video_capture_impl_unittest.cc
@@ -34,11 +34,12 @@ class MockVideoCaptureClient : public media::VideoCapture::EventHandler {
MockVideoCaptureClient() {}
virtual ~MockVideoCaptureClient() {}
- // Filter implementation.
+ // EventHandler implementation.
MOCK_METHOD1(OnStarted, void(media::VideoCapture* capture));
MOCK_METHOD1(OnStopped, void(media::VideoCapture* capture));
MOCK_METHOD1(OnPaused, void(media::VideoCapture* capture));
MOCK_METHOD2(OnError, void(media::VideoCapture* capture, int error_code));
+ MOCK_METHOD1(OnRemoved, void(media::VideoCapture* capture));
MOCK_METHOD2(OnBufferReady,
void(media::VideoCapture* capture,
scoped_refptr<media::VideoCapture::VideoFrameBuffer> buf));
diff --git a/content/renderer/media/video_capture_module_impl.cc b/content/renderer/media/video_capture_module_impl.cc
index 35b10d1..e1b8b6f 100644
--- a/content/renderer/media/video_capture_module_impl.cc
+++ b/content/renderer/media/video_capture_module_impl.cc
@@ -105,6 +105,10 @@ void VideoCaptureModuleImpl::OnError(media::VideoCapture* capture,
NOTIMPLEMENTED();
}
+void VideoCaptureModuleImpl::OnRemoved(media::VideoCapture* capture) {
+ NOTIMPLEMENTED();
+}
+
void VideoCaptureModuleImpl::OnBufferReady(
media::VideoCapture* capture,
scoped_refptr<media::VideoCapture::VideoFrameBuffer> buf) {
diff --git a/content/renderer/media/video_capture_module_impl.h b/content/renderer/media/video_capture_module_impl.h
index eaab51d..fc3bfc7 100644
--- a/content/renderer/media/video_capture_module_impl.h
+++ b/content/renderer/media/video_capture_module_impl.h
@@ -40,6 +40,7 @@ class VideoCaptureModuleImpl
virtual void OnStopped(media::VideoCapture* capture);
virtual void OnPaused(media::VideoCapture* capture);
virtual void OnError(media::VideoCapture* capture, int error_code);
+ virtual void OnRemoved(media::VideoCapture* capture);
virtual void OnBufferReady(
media::VideoCapture* capture,
scoped_refptr<media::VideoCapture::VideoFrameBuffer> buf);
diff --git a/media/video/capture/video_capture.h b/media/video/capture/video_capture.h
index 9a197e2..c4f6d70 100644
--- a/media/video/capture/video_capture.h
+++ b/media/video/capture/video_capture.h
@@ -66,6 +66,10 @@ class VideoCapture {
// Notify client that video capture has hit some error |error_code|.
virtual void OnError(VideoCapture* capture, int error_code) = 0;
+ // Notify client that the client has been removed and no more calls will be
+ // received.
+ virtual void OnRemoved(VideoCapture* capture) = 0;
+
// Notify client that a buffer is available.
virtual void OnBufferReady(VideoCapture* capture,
scoped_refptr<VideoFrameBuffer> buffer) = 0;
@@ -93,10 +97,12 @@ class VideoCapture {
// Request video capture to start capturing with |capability|.
// Also register |handler| with video capture for event handling.
+ // |handler| must remain valid until it has received |OnRemoved()|.
virtual void StartCapture(EventHandler* handler,
const VideoCaptureCapability& capability) = 0;
// Request video capture to stop capturing for client |handler|.
+ // |handler| must remain valid until it has received |OnRemoved()|.
virtual void StopCapture(EventHandler* handler) = 0;
// Feed buffer to video capture when done with it.
diff --git a/media/video/capture/video_capture_proxy.cc b/media/video/capture/video_capture_proxy.cc
index 0ee5393..a8d00cb 100644
--- a/media/video/capture/video_capture_proxy.cc
+++ b/media/video/capture/video_capture_proxy.cc
@@ -68,6 +68,10 @@ void VideoCaptureHandlerProxy::OnError(VideoCapture* capture, int error_code) {
error_code));
}
+void VideoCaptureHandlerProxy::OnRemoved(VideoCapture* capture) {
+ // TODO(vtl): add logic when this event handler is removed.
+}
+
void VideoCaptureHandlerProxy::OnBufferReady(
VideoCapture* capture,
scoped_refptr<VideoCapture::VideoFrameBuffer> buffer) {
diff --git a/media/video/capture/video_capture_proxy.h b/media/video/capture/video_capture_proxy.h
index 8be8474..0594379 100644
--- a/media/video/capture/video_capture_proxy.h
+++ b/media/video/capture/video_capture_proxy.h
@@ -51,6 +51,7 @@ class MEDIA_EXPORT VideoCaptureHandlerProxy
virtual void OnStopped(VideoCapture* capture) OVERRIDE;
virtual void OnPaused(VideoCapture* capture) OVERRIDE;
virtual void OnError(VideoCapture* capture, int error_code) OVERRIDE;
+ virtual void OnRemoved(VideoCapture* capture) OVERRIDE;
virtual void OnBufferReady(
VideoCapture* capture,
scoped_refptr<VideoCapture::VideoFrameBuffer> buffer) OVERRIDE;
diff --git a/webkit/plugins/ppapi/ppb_video_capture_impl.cc b/webkit/plugins/ppapi/ppb_video_capture_impl.cc
index 05646d6..a8bc2b3 100644
--- a/webkit/plugins/ppapi/ppb_video_capture_impl.cc
+++ b/webkit/plugins/ppapi/ppb_video_capture_impl.cc
@@ -167,6 +167,10 @@ void PPB_VideoCapture_Impl::OnError(media::VideoCapture* capture,
ppp_videocapture_->OnError(pp_instance(), pp_resource(), PP_ERROR_FAILED);
}
+void PPB_VideoCapture_Impl::OnRemoved(media::VideoCapture* capture) {
+ // TODO(vtl): add logic when this event handler is removed.
+}
+
void PPB_VideoCapture_Impl::OnBufferReady(
media::VideoCapture* capture,
scoped_refptr<media::VideoCapture::VideoFrameBuffer> buffer) {
diff --git a/webkit/plugins/ppapi/ppb_video_capture_impl.h b/webkit/plugins/ppapi/ppb_video_capture_impl.h
index f99c989..1fab94f 100644
--- a/webkit/plugins/ppapi/ppb_video_capture_impl.h
+++ b/webkit/plugins/ppapi/ppb_video_capture_impl.h
@@ -48,6 +48,7 @@ class PPB_VideoCapture_Impl : public ::ppapi::Resource,
virtual void OnStopped(media::VideoCapture* capture) OVERRIDE;
virtual void OnPaused(media::VideoCapture* capture) OVERRIDE;
virtual void OnError(media::VideoCapture* capture, int error_code) OVERRIDE;
+ virtual void OnRemoved(media::VideoCapture* capture) OVERRIDE;
virtual void OnBufferReady(
media::VideoCapture* capture,
scoped_refptr<media::VideoCapture::VideoFrameBuffer> buffer) OVERRIDE;