diff options
author | Chih-hung Hsieh <chh@google.com> | 2015-12-01 17:00:05 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2015-12-01 17:00:05 +0000 |
commit | fe8b4a657979b49e1701bd92f6d5814a99e0b2be (patch) | |
tree | 672a185b294789cf991f385c3e395dd63bea9063 /webrtc/test/vcm_capturer.cc | |
parent | 4ee733eff36690bdf8c8e8042762574a01c711e6 (diff) | |
parent | 675d4373f87b2468a334f2ed48bfa4e6946d80f1 (diff) | |
download | webrtc-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.cc | 107 |
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 |