aboutsummaryrefslogtreecommitdiff
path: root/webrtc/test/vcm_capturer.cc
diff options
context:
space:
mode:
authorChih-hung Hsieh <chh@google.com>2015-12-01 17:00:05 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2015-12-01 17:00:05 +0000
commitfe8b4a657979b49e1701bd92f6d5814a99e0b2be (patch)
tree672a185b294789cf991f385c3e395dd63bea9063 /webrtc/test/vcm_capturer.cc
parent4ee733eff36690bdf8c8e8042762574a01c711e6 (diff)
parent675d4373f87b2468a334f2ed48bfa4e6946d80f1 (diff)
downloadwebrtc-fe8b4a657979b49e1701bd92f6d5814a99e0b2be.tar.gz
Merge changes I7bbf776e,I1b827825
* changes: WIP: Changes after merge commit 'cb3f9bd' WIP: Merge commit 'cb3f9bd' into chh.merge.cb3f9bd
Diffstat (limited to 'webrtc/test/vcm_capturer.cc')
-rw-r--r--webrtc/test/vcm_capturer.cc107
1 files changed, 107 insertions, 0 deletions
diff --git a/webrtc/test/vcm_capturer.cc b/webrtc/test/vcm_capturer.cc
new file mode 100644
index 0000000000..1c6b91915e
--- /dev/null
+++ b/webrtc/test/vcm_capturer.cc
@@ -0,0 +1,107 @@
+/*
+ * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
+ *
+ * Use of this source code is governed by a BSD-style license
+ * that can be found in the LICENSE file in the root of the source
+ * tree. An additional intellectual property rights grant can be found
+ * in the file PATENTS. All contributing project authors may
+ * be found in the AUTHORS file in the root of the source tree.
+ */
+
+#include "webrtc/test/vcm_capturer.h"
+
+#include "webrtc/modules/video_capture/include/video_capture_factory.h"
+#include "webrtc/video_send_stream.h"
+
+namespace webrtc {
+namespace test {
+
+VcmCapturer::VcmCapturer(webrtc::VideoCaptureInput* input)
+ : VideoCapturer(input), started_(false), vcm_(NULL) {
+}
+
+bool VcmCapturer::Init(size_t width, size_t height, size_t target_fps) {
+ VideoCaptureModule::DeviceInfo* device_info =
+ VideoCaptureFactory::CreateDeviceInfo(42); // Any ID (42) will do.
+
+ char device_name[256];
+ char unique_name[256];
+ if (device_info->GetDeviceName(0, device_name, sizeof(device_name),
+ unique_name, sizeof(unique_name)) !=
+ 0) {
+ Destroy();
+ return false;
+ }
+
+ vcm_ = webrtc::VideoCaptureFactory::Create(0, unique_name);
+ vcm_->RegisterCaptureDataCallback(*this);
+
+ device_info->GetCapability(vcm_->CurrentDeviceName(), 0, capability_);
+ delete device_info;
+
+ capability_.width = static_cast<int32_t>(width);
+ capability_.height = static_cast<int32_t>(height);
+ capability_.maxFPS = static_cast<int32_t>(target_fps);
+ capability_.rawType = kVideoI420;
+
+ if (vcm_->StartCapture(capability_) != 0) {
+ Destroy();
+ return false;
+ }
+
+ assert(vcm_->CaptureStarted());
+
+ return true;
+}
+
+VcmCapturer* VcmCapturer::Create(VideoCaptureInput* input,
+ size_t width,
+ size_t height,
+ size_t target_fps) {
+ VcmCapturer* vcm_capturer = new VcmCapturer(input);
+ if (!vcm_capturer->Init(width, height, target_fps)) {
+ // TODO(pbos): Log a warning that this failed.
+ delete vcm_capturer;
+ return NULL;
+ }
+ return vcm_capturer;
+}
+
+
+void VcmCapturer::Start() {
+ rtc::CritScope lock(&crit_);
+ started_ = true;
+}
+
+void VcmCapturer::Stop() {
+ rtc::CritScope lock(&crit_);
+ started_ = false;
+}
+
+void VcmCapturer::Destroy() {
+ if (vcm_ == NULL) {
+ return;
+ }
+
+ vcm_->StopCapture();
+ vcm_->DeRegisterCaptureDataCallback();
+ vcm_->Release();
+
+ // TODO(pbos): How do I destroy the VideoCaptureModule? This still leaves
+ // non-freed memory.
+ vcm_ = NULL;
+}
+
+VcmCapturer::~VcmCapturer() { Destroy(); }
+
+void VcmCapturer::OnIncomingCapturedFrame(const int32_t id,
+ const VideoFrame& frame) {
+ rtc::CritScope lock(&crit_);
+ if (started_)
+ input_->IncomingCapturedFrame(frame);
+}
+
+void VcmCapturer::OnCaptureDelayChanged(const int32_t id, const int32_t delay) {
+}
+} // test
+} // webrtc