summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorperkj@chromium.org <perkj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-09-22 16:00:06 +0000
committerperkj@chromium.org <perkj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-09-22 16:00:06 +0000
commit9573aad709cc3ffef296be9795eb117f975936ae (patch)
tree587fba838ba5b0e61704ea0478f0a11b7e10ef2b
parent4d6f01a9138e6ce1bb13b3a7a4ac3337b501aeac (diff)
downloadchromium_src-9573aad709cc3ffef296be9795eb117f975936ae.zip
chromium_src-9573aad709cc3ffef296be9795eb117f975936ae.tar.gz
chromium_src-9573aad709cc3ffef296be9795eb117f975936ae.tar.bz2
Update the Chromium version of webrtc::VideoCaptureModule to be reference counted.
The reason is to be able to share ownership between PeerConnection and Chromium. TEST= BUG= Review URL: http://codereview.chromium.org/7887002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@102286 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--content/renderer/media/video_capture_module_impl.cc19
-rw-r--r--content/renderer/media/video_capture_module_impl.h7
2 files changed, 24 insertions, 2 deletions
diff --git a/content/renderer/media/video_capture_module_impl.cc b/content/renderer/media/video_capture_module_impl.cc
index a05be09..35b10d1 100644
--- a/content/renderer/media/video_capture_module_impl.cc
+++ b/content/renderer/media/video_capture_module_impl.cc
@@ -4,6 +4,7 @@
#include "content/renderer/media/video_capture_module_impl.h"
+#include "base/atomicops.h"
#include "content/renderer/media/video_capture_impl_manager.h"
VideoCaptureModuleImpl::VideoCaptureModuleImpl(
@@ -20,7 +21,8 @@ VideoCaptureModuleImpl::VideoCaptureModuleImpl(
frame_rate_(-1),
video_type_(webrtc::kVideoI420),
capture_engine_(NULL),
- pending_start_(false) {
+ pending_start_(false),
+ ref_count_(0) {
DCHECK(vc_manager_);
Init();
}
@@ -36,6 +38,21 @@ void VideoCaptureModuleImpl::Init() {
capture_engine_ = vc_manager_->AddDevice(session_id_, this);
}
+int32_t VideoCaptureModuleImpl::AddRef() {
+ VLOG(1) << "VideoCaptureModuleImpl::AddRef()";
+ return base::subtle::Barrier_AtomicIncrement(&ref_count_, 1);
+}
+
+int32_t VideoCaptureModuleImpl::Release() {
+ VLOG(1) << "VideoCaptureModuleImpl::Release()";
+ int ret = base::subtle::Barrier_AtomicIncrement(&ref_count_, -1);
+ if (ret == 0) {
+ VLOG(1) << "Reference count is zero, hence this object is now deleted.";
+ delete this;
+ }
+ return ret;
+}
+
WebRtc_Word32 VideoCaptureModuleImpl::StartCapture(
const webrtc::VideoCaptureCapability& capability) {
message_loop_proxy_->PostTask(
diff --git a/content/renderer/media/video_capture_module_impl.h b/content/renderer/media/video_capture_module_impl.h
index 5df07e3..eaab51d 100644
--- a/content/renderer/media/video_capture_module_impl.h
+++ b/content/renderer/media/video_capture_module_impl.h
@@ -22,7 +22,10 @@ class VideoCaptureModuleImpl
public:
VideoCaptureModuleImpl(const media::VideoCaptureSessionId id,
VideoCaptureImplManager* vc_manager);
- virtual ~VideoCaptureModuleImpl();
+ // Implement reference counting. This make it possible to reference the
+ // object from both Chromium and WebRtc.
+ virtual int32_t AddRef() OVERRIDE;
+ virtual int32_t Release() OVERRIDE;
// Override webrtc::videocapturemodule::VideoCaptureImpl implementation.
virtual WebRtc_Word32 StartCapture(
@@ -45,6 +48,7 @@ class VideoCaptureModuleImpl
const media::VideoCaptureParams& device_info);
private:
+ virtual ~VideoCaptureModuleImpl();
void Init();
void StartCaptureOnCaptureThread(
@@ -76,6 +80,7 @@ class VideoCaptureModuleImpl
media::VideoCapture* capture_engine_;
bool pending_start_;
webrtc::VideoCaptureCapability pending_cap_;
+ int ref_count_;
DISALLOW_COPY_AND_ASSIGN(VideoCaptureModuleImpl);
};