Delete WebRtcVideoCapturer and related classes.
Bug: webrtc:6353
Change-Id: Iee2d0d10bcfcb85aec81b426167d9e6a9485187f
Reviewed-on: https://webrtc-review.googlesource.com/c/115341
Commit-Queue: Niels Moller <nisse@webrtc.org>
Reviewed-by: Kári Helgason <kthelgason@webrtc.org>
Reviewed-by: Stefan Holmer <stefan@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#26125}
diff --git a/PRESUBMIT.py b/PRESUBMIT.py
index 963839a..5b4677d 100755
--- a/PRESUBMIT.py
+++ b/PRESUBMIT.py
@@ -21,7 +21,6 @@
'examples/objc',
'media/base/streamparams.h',
'media/base/videocommon.h',
- 'media/engine/fakewebrtcdeviceinfo.h',
'media/sctp/sctptransport.cc',
'modules/audio_coding',
'modules/audio_device',
diff --git a/media/BUILD.gn b/media/BUILD.gn
index 23d2172..515496b 100644
--- a/media/BUILD.gn
+++ b/media/BUILD.gn
@@ -113,7 +113,6 @@
"base/videobroadcaster.h",
"base/videocapturer.cc",
"base/videocapturer.h",
- "base/videocapturerfactory.h",
"base/videocommon.cc",
"base/videocommon.h",
"base/videosourcebase.cc",
@@ -319,10 +318,6 @@
"engine/simulcast.h",
"engine/webrtcmediaengine.cc",
"engine/webrtcmediaengine.h",
- "engine/webrtcvideocapturer.cc",
- "engine/webrtcvideocapturer.h",
- "engine/webrtcvideocapturerfactory.cc",
- "engine/webrtcvideocapturerfactory.h",
"engine/webrtcvideodecoderfactory.cc",
"engine/webrtcvideodecoderfactory.h",
"engine/webrtcvideoencoderfactory.cc",
@@ -494,9 +489,6 @@
"base/testutils.h",
"engine/fakewebrtccall.cc",
"engine/fakewebrtccall.h",
- "engine/fakewebrtcdeviceinfo.h",
- "engine/fakewebrtcvcmfactory.h",
- "engine/fakewebrtcvideocapturemodule.h",
"engine/fakewebrtcvideoengine.cc",
"engine/fakewebrtcvideoengine.h",
]
@@ -602,7 +594,6 @@
"engine/simulcast_encoder_adapter_unittest.cc",
"engine/simulcast_unittest.cc",
"engine/webrtcmediaengine_unittest.cc",
- "engine/webrtcvideocapturer_unittest.cc",
"engine/webrtcvideoencoderfactory_unittest.cc",
"engine/webrtcvideoengine_unittest.cc",
]
diff --git a/media/base/testutils.cc b/media/base/testutils.cc
index e157667..87f5010 100644
--- a/media/base/testutils.cc
+++ b/media/base/testutils.cc
@@ -14,42 +14,9 @@
#include "api/video/video_frame.h"
#include "api/video/video_source_interface.h"
-#include "media/base/videocapturer.h"
namespace cricket {
-// Implementation of VideoCaptureListener.
-VideoCapturerListener::VideoCapturerListener(VideoCapturer* capturer)
- : capturer_(capturer),
- last_capture_state_(CS_STARTING),
- frame_count_(0),
- frame_width_(0),
- frame_height_(0),
- resolution_changed_(false) {
- capturer->SignalStateChange.connect(this,
- &VideoCapturerListener::OnStateChange);
- capturer->AddOrUpdateSink(this, rtc::VideoSinkWants());
-}
-
-VideoCapturerListener::~VideoCapturerListener() {
- capturer_->RemoveSink(this);
-}
-
-void VideoCapturerListener::OnStateChange(VideoCapturer* capturer,
- CaptureState result) {
- last_capture_state_ = result;
-}
-
-void VideoCapturerListener::OnFrame(const webrtc::VideoFrame& frame) {
- ++frame_count_;
- if (1 == frame_count_) {
- frame_width_ = frame.width();
- frame_height_ = frame.height();
- } else if (frame_width_ != frame.width() || frame_height_ != frame.height()) {
- resolution_changed_ = true;
- }
-}
-
cricket::StreamParams CreateSimStreamParams(
const std::string& cname,
const std::vector<uint32_t>& ssrcs) {
diff --git a/media/base/testutils.h b/media/base/testutils.h
index 6b63ffd..e08147b 100644
--- a/media/base/testutils.h
+++ b/media/base/testutils.h
@@ -15,10 +15,8 @@
#include <vector>
#include "media/base/mediachannel.h"
-#include "media/base/videocapturer.h"
#include "media/base/videocommon.h"
#include "rtc_base/arraysize.h"
-#include "rtc_base/third_party/sigslot/sigslot.h"
namespace webrtc {
class VideoFrame;
@@ -37,32 +35,6 @@
}
#define MAKE_VECTOR(a) cricket::MakeVector(a, arraysize(a))
-// Test helper for testing VideoCapturer implementations.
-class VideoCapturerListener
- : public sigslot::has_slots<>,
- public rtc::VideoSinkInterface<webrtc::VideoFrame> {
- public:
- explicit VideoCapturerListener(VideoCapturer* cap);
- ~VideoCapturerListener();
-
- CaptureState last_capture_state() const { return last_capture_state_; }
- int frame_count() const { return frame_count_; }
- int frame_width() const { return frame_width_; }
- int frame_height() const { return frame_height_; }
- bool resolution_changed() const { return resolution_changed_; }
-
- void OnStateChange(VideoCapturer* capturer, CaptureState state);
- void OnFrame(const webrtc::VideoFrame& frame) override;
-
- private:
- VideoCapturer* capturer_;
- CaptureState last_capture_state_;
- int frame_count_;
- int frame_width_;
- int frame_height_;
- bool resolution_changed_;
-};
-
// Checks whether |codecs| contains |codec|; checks using Codec::Matches().
template <class C>
bool ContainsMatchingCodec(const std::vector<C>& codecs, const C& codec) {
diff --git a/media/base/videocapturerfactory.h b/media/base/videocapturerfactory.h
deleted file mode 100644
index 219e95b..0000000
--- a/media/base/videocapturerfactory.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (c) 2014 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.
- */
-
-#ifndef MEDIA_BASE_VIDEOCAPTURERFACTORY_H_
-#define MEDIA_BASE_VIDEOCAPTURERFACTORY_H_
-
-#include <memory>
-
-#include "media/base/device.h"
-
-namespace cricket {
-
-class VideoCapturer;
-
-class VideoDeviceCapturerFactory {
- public:
- VideoDeviceCapturerFactory() {}
- virtual ~VideoDeviceCapturerFactory() {}
-
- virtual std::unique_ptr<VideoCapturer> Create(const Device& device) = 0;
-};
-
-} // namespace cricket
-
-#endif // MEDIA_BASE_VIDEOCAPTURERFACTORY_H_
diff --git a/media/engine/fakewebrtcdeviceinfo.h b/media/engine/fakewebrtcdeviceinfo.h
deleted file mode 100644
index 7103b4c..0000000
--- a/media/engine/fakewebrtcdeviceinfo.h
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Copyright (c) 2004 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.
- */
-
-#ifndef MEDIA_ENGINE_FAKEWEBRTCDEVICEINFO_H_
-#define MEDIA_ENGINE_FAKEWEBRTCDEVICEINFO_H_
-
-#include <string>
-#include <vector>
-
-#include "media/engine/webrtcvideocapturer.h"
-#include "rtc_base/stringutils.h"
-
-// Fake class for mocking out webrtc::VideoCaptureModule::DeviceInfo.
-class FakeWebRtcDeviceInfo : public webrtc::VideoCaptureModule::DeviceInfo {
- public:
- struct Device {
- Device(const std::string& n, const std::string& i) : name(n), id(i) {}
- std::string name;
- std::string id;
- std::string product;
- std::vector<webrtc::VideoCaptureCapability> caps;
- };
- FakeWebRtcDeviceInfo() {}
- void AddDevice(const std::string& device_name, const std::string& device_id) {
- devices_.push_back(Device(device_name, device_id));
- }
- void AddCapability(const std::string& device_id,
- const webrtc::VideoCaptureCapability& cap) {
- Device* dev =
- GetDeviceById(reinterpret_cast<const char*>(device_id.c_str()));
- if (!dev)
- return;
- dev->caps.push_back(cap);
- }
- virtual uint32_t NumberOfDevices() {
- return static_cast<int>(devices_.size());
- }
- virtual int32_t GetDeviceName(uint32_t device_num,
- char* device_name,
- uint32_t device_name_len,
- char* device_id,
- uint32_t device_id_len,
- char* product_id,
- uint32_t product_id_len) {
- Device* dev = GetDeviceByIndex(device_num);
- if (!dev)
- return -1;
- rtc::strcpyn(reinterpret_cast<char*>(device_name), device_name_len,
- dev->name.c_str());
- rtc::strcpyn(reinterpret_cast<char*>(device_id), device_id_len,
- dev->id.c_str());
- if (product_id) {
- rtc::strcpyn(reinterpret_cast<char*>(product_id), product_id_len,
- dev->product.c_str());
- }
- return 0;
- }
- virtual int32_t NumberOfCapabilities(const char* device_id) {
- Device* dev = GetDeviceById(device_id);
- if (!dev)
- return -1;
- return static_cast<int32_t>(dev->caps.size());
- }
- virtual int32_t GetCapability(const char* device_id,
- const uint32_t device_cap_num,
- webrtc::VideoCaptureCapability& cap) {
- Device* dev = GetDeviceById(device_id);
- if (!dev)
- return -1;
- if (device_cap_num >= dev->caps.size())
- return -1;
- cap = dev->caps[device_cap_num];
- return 0;
- }
- virtual int32_t GetOrientation(const char* device_id,
- webrtc::VideoRotation& rotation) {
- return -1; // not implemented
- }
- virtual int32_t GetBestMatchedCapability(
- const char* device_id,
- const webrtc::VideoCaptureCapability& requested,
- webrtc::VideoCaptureCapability& resulting) {
- return -1; // not implemented
- }
- virtual int32_t DisplayCaptureSettingsDialogBox(const char* device_id,
- const char* dialog_title,
- void* parent,
- uint32_t x,
- uint32_t y) {
- return -1; // not implemented
- }
-
- Device* GetDeviceByIndex(size_t num) {
- return (num < devices_.size()) ? &devices_[num] : NULL;
- }
- Device* GetDeviceById(const char* device_id) {
- for (size_t i = 0; i < devices_.size(); ++i) {
- if (devices_[i].id == reinterpret_cast<const char*>(device_id)) {
- return &devices_[i];
- }
- }
- return NULL;
- }
-
- private:
- std::vector<Device> devices_;
-};
-
-#endif // MEDIA_ENGINE_FAKEWEBRTCDEVICEINFO_H_
diff --git a/media/engine/fakewebrtcvcmfactory.h b/media/engine/fakewebrtcvcmfactory.h
deleted file mode 100644
index 41ec98d..0000000
--- a/media/engine/fakewebrtcvcmfactory.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (c) 2004 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.
- */
-
-#ifndef MEDIA_ENGINE_FAKEWEBRTCVCMFACTORY_H_
-#define MEDIA_ENGINE_FAKEWEBRTCVCMFACTORY_H_
-
-#include <vector>
-
-#include "media/engine/fakewebrtcdeviceinfo.h"
-#include "media/engine/fakewebrtcvideocapturemodule.h"
-#include "media/engine/webrtcvideocapturer.h"
-
-// Factory class to allow the fakes above to be injected into
-// WebRtcVideoCapturer.
-class FakeWebRtcVcmFactory : public cricket::WebRtcVcmFactoryInterface {
- public:
- virtual rtc::scoped_refptr<webrtc::VideoCaptureModule> Create(
- const char* device_id) {
- if (!device_info.GetDeviceById(device_id))
- return NULL;
- rtc::scoped_refptr<FakeWebRtcVideoCaptureModule> module(
- new rtc::RefCountedObject<FakeWebRtcVideoCaptureModule>());
- modules.push_back(module);
- return module;
- }
- virtual webrtc::VideoCaptureModule::DeviceInfo* CreateDeviceInfo() {
- return &device_info;
- }
- virtual void DestroyDeviceInfo(webrtc::VideoCaptureModule::DeviceInfo* info) {
- }
- FakeWebRtcDeviceInfo device_info;
- std::vector<rtc::scoped_refptr<FakeWebRtcVideoCaptureModule>> modules;
-};
-
-#endif // MEDIA_ENGINE_FAKEWEBRTCVCMFACTORY_H_
diff --git a/media/engine/fakewebrtcvideocapturemodule.h b/media/engine/fakewebrtcvideocapturemodule.h
deleted file mode 100644
index 7556811..0000000
--- a/media/engine/fakewebrtcvideocapturemodule.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Copyright (c) 2004 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.
- */
-
-#ifndef MEDIA_ENGINE_FAKEWEBRTCVIDEOCAPTUREMODULE_H_
-#define MEDIA_ENGINE_FAKEWEBRTCVIDEOCAPTUREMODULE_H_
-
-#include <vector>
-
-#include "api/video/i420_buffer.h"
-#include "media/engine/webrtcvideocapturer.h"
-#include "rtc_base/task_queue_for_test.h"
-
-// Fake class for mocking out webrtc::VideoCaptureModule.
-class FakeWebRtcVideoCaptureModule : public webrtc::VideoCaptureModule {
- public:
- FakeWebRtcVideoCaptureModule()
- : callback_(NULL), running_(false) {}
- ~FakeWebRtcVideoCaptureModule() {}
- void RegisterCaptureDataCallback(
- rtc::VideoSinkInterface<webrtc::VideoFrame>* callback) override {
- callback_ = callback;
- }
- void DeRegisterCaptureDataCallback() override { callback_ = NULL; }
- int32_t StartCapture(const webrtc::VideoCaptureCapability& cap) override {
- if (running_)
- return -1;
- cap_ = cap;
- running_ = true;
- return 0;
- }
- int32_t StopCapture() override {
- running_ = false;
- return 0;
- }
- const char* CurrentDeviceName() const override {
- return NULL; // not implemented
- }
- bool CaptureStarted() override { return running_; }
- int32_t CaptureSettings(webrtc::VideoCaptureCapability& settings) override {
- if (!running_)
- return -1;
- settings = cap_;
- return 0;
- }
-
- int32_t SetCaptureRotation(webrtc::VideoRotation rotation) override {
- return -1; // not implemented
- }
- bool SetApplyRotation(bool enable) override {
- return true; // ignored
- }
- bool GetApplyRotation() override {
- return true; // Rotation compensation is turned on.
- }
- void SendFrame(int w, int h) {
- if (!running_ || !callback_)
- return;
-
- task_queue_.SendTask([this, w, h]() {
- rtc::scoped_refptr<webrtc::I420Buffer> buffer =
- webrtc::I420Buffer::Create(w, h);
- // Initialize memory to satisfy DrMemory tests. See
- // https://bugs.chromium.org/p/libyuv/issues/detail?id=377
- buffer->InitializeData();
- callback_->OnFrame(webrtc::VideoFrame(buffer, webrtc::kVideoRotation_0,
- 0 /* timestamp_us */));
- });
- }
-
- const webrtc::VideoCaptureCapability& cap() const { return cap_; }
-
- private:
- rtc::test::TaskQueueForTest task_queue_{"FakeWebRtcVideoCaptureModule"};
- rtc::VideoSinkInterface<webrtc::VideoFrame>* callback_;
- bool running_;
- webrtc::VideoCaptureCapability cap_;
-};
-
-#endif // MEDIA_ENGINE_FAKEWEBRTCVIDEOCAPTUREMODULE_H_
diff --git a/media/engine/webrtcvideocapturer.cc b/media/engine/webrtcvideocapturer.cc
deleted file mode 100644
index 1520492..0000000
--- a/media/engine/webrtcvideocapturer.cc
+++ /dev/null
@@ -1,346 +0,0 @@
-/*
- * Copyright (c) 2011 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 "media/engine/webrtcvideocapturer.h"
-
-#include <stddef.h>
-#include <cstdint>
-#include <string>
-
-#include "common_types.h" // NOLINT(build/include)
-#include "modules/video_capture/video_capture_defines.h"
-#include "modules/video_capture/video_capture_factory.h"
-#include "rtc_base/arraysize.h"
-#include "rtc_base/checks.h"
-#include "rtc_base/logging.h"
-#include "rtc_base/thread.h"
-#include "rtc_base/timeutils.h"
-
-#if defined(WEBRTC_WIN)
-#include "rtc_base/win32.h" // Need this to #include the impl files.
-#endif // WEBRTC_WIN
-#include "system_wrappers/include/field_trial.h"
-
-namespace cricket {
-
-namespace {
-struct kVideoFourCCEntry {
- uint32_t fourcc;
- webrtc::VideoType webrtc_type;
-};
-
-// This indicates our format preferences and defines a mapping between
-// webrtc::RawVideoType (from video_capture_defines.h) to our FOURCCs.
-kVideoFourCCEntry kSupportedFourCCs[] = {
- {FOURCC_I420, webrtc::VideoType::kI420}, // 12 bpp, no conversion.
- {FOURCC_YV12, webrtc::VideoType::kYV12}, // 12 bpp, no conversion.
- {FOURCC_YUY2, webrtc::VideoType::kYUY2}, // 16 bpp, fast conversion.
- {FOURCC_UYVY, webrtc::VideoType::kUYVY}, // 16 bpp, fast conversion.
- {FOURCC_NV12, webrtc::VideoType::kNV12}, // 12 bpp, fast conversion.
- {FOURCC_NV21, webrtc::VideoType::kNV21}, // 12 bpp, fast conversion.
- {FOURCC_MJPG, webrtc::VideoType::kMJPEG}, // compressed, slow conversion.
- {FOURCC_ARGB, webrtc::VideoType::kARGB}, // 32 bpp, slow conversion.
- {FOURCC_24BG, webrtc::VideoType::kRGB24}, // 24 bpp, slow conversion.
-};
-
-bool CapabilityToFormat(const webrtc::VideoCaptureCapability& cap,
- VideoFormat* format) {
- uint32_t fourcc = 0;
- for (size_t i = 0; i < arraysize(kSupportedFourCCs); ++i) {
- if (kSupportedFourCCs[i].webrtc_type == cap.videoType) {
- fourcc = kSupportedFourCCs[i].fourcc;
- break;
- }
- }
- if (fourcc == 0) {
- return false;
- }
-
- format->fourcc = fourcc;
- format->width = cap.width;
- format->height = cap.height;
- format->interval = VideoFormat::FpsToInterval(cap.maxFPS);
- return true;
-}
-
-bool FormatToCapability(const VideoFormat& format,
- webrtc::VideoCaptureCapability* cap) {
- webrtc::VideoType webrtc_type = webrtc::VideoType::kUnknown;
- for (size_t i = 0; i < arraysize(kSupportedFourCCs); ++i) {
- if (kSupportedFourCCs[i].fourcc == format.fourcc) {
- webrtc_type = kSupportedFourCCs[i].webrtc_type;
- break;
- }
- }
- if (webrtc_type == webrtc::VideoType::kUnknown) {
- return false;
- }
-
- cap->width = format.width;
- cap->height = format.height;
- cap->maxFPS = VideoFormat::IntervalToFps(format.interval);
- cap->videoType = webrtc_type;
- cap->interlaced = false;
- return true;
-}
-
-} // namespace
-
-class WebRtcVcmFactory : public WebRtcVcmFactoryInterface {
- public:
- virtual rtc::scoped_refptr<webrtc::VideoCaptureModule> Create(
- const char* device) {
- return webrtc::VideoCaptureFactory::Create(device);
- }
- virtual webrtc::VideoCaptureModule::DeviceInfo* CreateDeviceInfo() {
- return webrtc::VideoCaptureFactory::CreateDeviceInfo();
- }
- virtual void DestroyDeviceInfo(webrtc::VideoCaptureModule::DeviceInfo* info) {
- delete info;
- }
-};
-
-///////////////////////////////////////////////////////////////////////////
-// Implementation of class WebRtcVideoCapturer
-///////////////////////////////////////////////////////////////////////////
-
-WebRtcVideoCapturer::WebRtcVideoCapturer()
- : factory_(new WebRtcVcmFactory),
- module_(nullptr),
- captured_frames_(0),
- start_thread_(nullptr) {}
-
-WebRtcVideoCapturer::WebRtcVideoCapturer(WebRtcVcmFactoryInterface* factory)
- : factory_(factory),
- module_(nullptr),
- captured_frames_(0),
- start_thread_(nullptr) {}
-
-WebRtcVideoCapturer::~WebRtcVideoCapturer() {}
-
-bool WebRtcVideoCapturer::Init(const Device& device) {
- RTC_DCHECK(!start_thread_);
- if (module_) {
- RTC_LOG(LS_ERROR) << "The capturer is already initialized";
- return false;
- }
-
- webrtc::VideoCaptureModule::DeviceInfo* info = factory_->CreateDeviceInfo();
- if (!info) {
- return false;
- }
-
- // Find the desired camera, by name.
- // In the future, comparing IDs will be more robust.
- // TODO(juberti): Figure what's needed to allow this.
- int num_cams = info->NumberOfDevices();
- char vcm_id[256] = "";
- bool found = false;
- for (int index = 0; index < num_cams; ++index) {
- char vcm_name[256];
- if (info->GetDeviceName(index, vcm_name, arraysize(vcm_name), vcm_id,
- arraysize(vcm_id)) != -1) {
- if (device.name == reinterpret_cast<char*>(vcm_name)) {
- found = true;
- break;
- }
- }
- }
- if (!found) {
- RTC_LOG(LS_WARNING) << "Failed to find capturer for id: " << device.id;
- factory_->DestroyDeviceInfo(info);
- return false;
- }
-
- // Enumerate the supported formats.
- // TODO(juberti): Find out why this starts/stops the camera...
- std::vector<VideoFormat> supported;
- int32_t num_caps = info->NumberOfCapabilities(vcm_id);
- for (int32_t i = 0; i < num_caps; ++i) {
- webrtc::VideoCaptureCapability cap;
- if (info->GetCapability(vcm_id, i, cap) != -1) {
- VideoFormat format;
- if (CapabilityToFormat(cap, &format)) {
- supported.push_back(format);
- } else {
- RTC_LOG(LS_WARNING) << "Ignoring unsupported WebRTC capture format "
- << static_cast<int>(cap.videoType);
- }
- }
- }
- factory_->DestroyDeviceInfo(info);
-
- if (supported.empty()) {
- RTC_LOG(LS_ERROR) << "Failed to find usable formats for id: " << device.id;
- return false;
- }
-
- module_ = factory_->Create(vcm_id);
- if (!module_) {
- RTC_LOG(LS_ERROR) << "Failed to create capturer for id: " << device.id;
- return false;
- }
-
- // It is safe to change member attributes now.
- SetId(device.id);
- SetSupportedFormats(supported);
-
- return true;
-}
-
-bool WebRtcVideoCapturer::Init(
- const rtc::scoped_refptr<webrtc::VideoCaptureModule>& module) {
- RTC_DCHECK(!start_thread_);
- if (module_) {
- RTC_LOG(LS_ERROR) << "The capturer is already initialized";
- return false;
- }
- if (!module) {
- RTC_LOG(LS_ERROR) << "Invalid VCM supplied";
- return false;
- }
- // TODO(juberti): Set id and formats.
- module_ = module;
- return true;
-}
-
-bool WebRtcVideoCapturer::GetBestCaptureFormat(const VideoFormat& desired,
- VideoFormat* best_format) {
- if (!best_format) {
- return false;
- }
-
- if (!VideoCapturer::GetBestCaptureFormat(desired, best_format)) {
- // We maybe using a manually injected VCM which doesn't support enum.
- // Use the desired format as the best format.
- best_format->width = desired.width;
- best_format->height = desired.height;
- best_format->fourcc = FOURCC_I420;
- best_format->interval = desired.interval;
- RTC_LOG(LS_INFO) << "Failed to find best capture format,"
- << " fall back to the requested format "
- << best_format->ToString();
- }
- return true;
-}
-void WebRtcVideoCapturer::OnSinkWantsChanged(const rtc::VideoSinkWants& wants) {
- // Can't take lock here as this will cause deadlock with
- // OnIncomingCapturedFrame. In fact, the whole method, including methods it
- // calls, can't take lock.
- RTC_DCHECK(module_);
-
- if (webrtc::field_trial::FindFullName("WebRTC-CVO").find("Disabled") == 0)
- return;
-
- VideoCapturer::OnSinkWantsChanged(wants);
- bool result = module_->SetApplyRotation(wants.rotation_applied);
- RTC_CHECK(result);
-
- return;
-}
-
-CaptureState WebRtcVideoCapturer::Start(const VideoFormat& capture_format) {
- if (!module_) {
- RTC_LOG(LS_ERROR) << "The capturer has not been initialized";
- return CS_FAILED;
- }
- if (start_thread_) {
- RTC_LOG(LS_ERROR) << "The capturer is already running";
- RTC_DCHECK(start_thread_->IsCurrent())
- << "Trying to start capturer on different threads";
- return CS_FAILED;
- }
-
- start_thread_ = rtc::Thread::Current();
- captured_frames_ = 0;
-
- SetCaptureFormat(&capture_format);
-
- webrtc::VideoCaptureCapability cap;
- if (!FormatToCapability(capture_format, &cap)) {
- RTC_LOG(LS_ERROR) << "Invalid capture format specified";
- return CS_FAILED;
- }
-
- int64_t start = rtc::TimeMillis();
- module_->RegisterCaptureDataCallback(this);
- if (module_->StartCapture(cap) != 0) {
- RTC_LOG(LS_ERROR) << "Camera '" << GetId() << "' failed to start";
- module_->DeRegisterCaptureDataCallback();
- SetCaptureFormat(nullptr);
- start_thread_ = nullptr;
- return CS_FAILED;
- }
-
- RTC_LOG(LS_INFO) << "Camera '" << GetId() << "' started with format "
- << capture_format.ToString() << ", elapsed time "
- << rtc::TimeSince(start) << " ms";
-
- SetCaptureState(CS_RUNNING);
- return CS_STARTING;
-}
-
-void WebRtcVideoCapturer::Stop() {
- if (!start_thread_) {
- RTC_LOG(LS_ERROR) << "The capturer is already stopped";
- return;
- }
- RTC_DCHECK(start_thread_);
- RTC_DCHECK(start_thread_->IsCurrent());
- if (IsRunning()) {
- // The module is responsible for OnIncomingCapturedFrame being called, if
- // we stop it we will get no further callbacks.
- module_->StopCapture();
- }
- module_->DeRegisterCaptureDataCallback();
-
- // TODO(juberti): Determine if the VCM exposes any drop stats we can use.
- double drop_ratio = 0.0;
- RTC_LOG(LS_INFO) << "Camera '" << GetId() << "' stopped after capturing "
- << captured_frames_ << " frames and dropping " << drop_ratio
- << "%";
-
- SetCaptureFormat(NULL);
- start_thread_ = nullptr;
- SetCaptureState(CS_STOPPED);
-}
-
-bool WebRtcVideoCapturer::IsRunning() {
- return (module_ != NULL && module_->CaptureStarted());
-}
-
-bool WebRtcVideoCapturer::GetPreferredFourccs(std::vector<uint32_t>* fourccs) {
- if (!fourccs) {
- return false;
- }
-
- fourccs->clear();
- for (size_t i = 0; i < arraysize(kSupportedFourCCs); ++i) {
- fourccs->push_back(kSupportedFourCCs[i].fourcc);
- }
- return true;
-}
-
-void WebRtcVideoCapturer::OnFrame(const webrtc::VideoFrame& sample) {
- // This can only happen between Start() and Stop().
- RTC_DCHECK(start_thread_);
-
- ++captured_frames_;
- // Log the size and pixel aspect ratio of the first captured frame.
- if (1 == captured_frames_) {
- RTC_LOG(LS_INFO) << "Captured frame size " << sample.width() << "x"
- << sample.height() << ". Expected format "
- << GetCaptureFormat()->ToString();
- }
-
- VideoCapturer::OnFrame(sample, sample.width(), sample.height());
-}
-
-} // namespace cricket
diff --git a/media/engine/webrtcvideocapturer.h b/media/engine/webrtcvideocapturer.h
deleted file mode 100644
index 916aad9..0000000
--- a/media/engine/webrtcvideocapturer.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Copyright (c) 2004 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.
- */
-
-#ifndef MEDIA_ENGINE_WEBRTCVIDEOCAPTURER_H_
-#define MEDIA_ENGINE_WEBRTCVIDEOCAPTURER_H_
-
-#include <stdint.h>
-#include <memory>
-#include <vector>
-
-#include "api/video/video_frame.h"
-#include "api/video/video_sink_interface.h"
-#include "api/video/video_source_interface.h"
-#include "media/base/device.h"
-#include "media/base/videocapturer.h"
-#include "media/base/videocommon.h"
-#include "modules/video_capture/video_capture.h"
-#include "rtc_base/scoped_ref_ptr.h"
-#include "rtc_base/thread.h"
-
-namespace cricket {
-
-// Factory to allow injection of a VCM impl into WebRtcVideoCapturer.
-// DeviceInfos do not have a Release() and therefore need an explicit Destroy().
-class WebRtcVcmFactoryInterface {
- public:
- virtual ~WebRtcVcmFactoryInterface() {}
- virtual rtc::scoped_refptr<webrtc::VideoCaptureModule> Create(
- const char* device) = 0;
- virtual webrtc::VideoCaptureModule::DeviceInfo* CreateDeviceInfo() = 0;
- virtual void DestroyDeviceInfo(
- webrtc::VideoCaptureModule::DeviceInfo* info) = 0;
-};
-
-// WebRTC-based implementation of VideoCapturer.
-class WebRtcVideoCapturer : public VideoCapturer,
- public rtc::VideoSinkInterface<webrtc::VideoFrame> {
- public:
- WebRtcVideoCapturer();
- explicit WebRtcVideoCapturer(WebRtcVcmFactoryInterface* factory);
- virtual ~WebRtcVideoCapturer();
-
- bool Init(const Device& device);
- bool Init(const rtc::scoped_refptr<webrtc::VideoCaptureModule>& module);
-
- // Override virtual methods of the parent class VideoCapturer.
- bool GetBestCaptureFormat(const VideoFormat& desired,
- VideoFormat* best_format) override;
- CaptureState Start(const VideoFormat& capture_format) override;
- void Stop() override;
- bool IsRunning() override;
- bool IsScreencast() const override { return false; }
-
- protected:
- void OnSinkWantsChanged(const rtc::VideoSinkWants& wants) override;
- // Override virtual methods of the parent class VideoCapturer.
- bool GetPreferredFourccs(std::vector<uint32_t>* fourccs) override;
-
- private:
- // Callback when a frame is captured by camera.
- void OnFrame(const webrtc::VideoFrame& frame) override;
-
- // Used to signal captured frames on the same thread as invoked Start().
- // With WebRTC's current VideoCapturer implementations, this will mean a
- // thread hop, but in other implementations (e.g. Chrome) it will be called
- // directly from OnIncomingCapturedFrame.
- // TODO(tommi): Remove this workaround when we've updated the WebRTC capturers
- // to follow the same contract.
- void SignalFrameCapturedOnStartThread(const webrtc::VideoFrame& frame);
-
- std::unique_ptr<WebRtcVcmFactoryInterface> factory_;
- rtc::scoped_refptr<webrtc::VideoCaptureModule> module_;
- int captured_frames_;
- std::vector<uint8_t> capture_buffer_;
- rtc::Thread* start_thread_; // Set in Start(), unset in Stop();
-};
-
-} // namespace cricket
-
-#endif // MEDIA_ENGINE_WEBRTCVIDEOCAPTURER_H_
diff --git a/media/engine/webrtcvideocapturer_unittest.cc b/media/engine/webrtcvideocapturer_unittest.cc
deleted file mode 100644
index 207607b..0000000
--- a/media/engine/webrtcvideocapturer_unittest.cc
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * Copyright (c) 2004 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.
- */
-
-#ifdef HAVE_WEBRTC_VIDEO
-
-#include <stdio.h>
-#include <memory>
-#include <vector>
-
-#include "common_types.h" // NOLINT(build/include)
-#include "media/base/testutils.h"
-#include "media/base/videocommon.h"
-#include "media/engine/fakewebrtcdeviceinfo.h"
-#include "media/engine/fakewebrtcvcmfactory.h"
-#include "media/engine/fakewebrtcvideocapturemodule.h"
-#include "media/engine/webrtcvideocapturer.h"
-// TODO(http://crbug.com/908819): Add this when Chromium android templates
-// stop to consider *_module to have a special meaning. See media/BUILD.gn
-// #include "modules/video_capture/video_capture_defines.h"
-#include "rtc_base/gunit.h"
-#include "test/gtest.h"
-
-using cricket::VideoFormat;
-
-static const char kTestDeviceName[] = "JuberTech FakeCam Q123";
-static const char kTestDeviceId[] = "foo://bar/baz";
-const VideoFormat kDefaultVideoFormat =
- VideoFormat(640, 400, VideoFormat::FpsToInterval(30), cricket::FOURCC_ANY);
-
-class WebRtcVideoCapturerTest : public testing::Test {
- public:
- WebRtcVideoCapturerTest()
- : factory_(new FakeWebRtcVcmFactory),
- capturer_(new cricket::WebRtcVideoCapturer(factory_)) {
- factory_->device_info.AddDevice(kTestDeviceName, kTestDeviceId);
- // add a VGA/I420 capability
- webrtc::VideoCaptureCapability vga;
- vga.width = 640;
- vga.height = 480;
- vga.maxFPS = 30;
- vga.videoType = webrtc::VideoType::kI420;
- factory_->device_info.AddCapability(kTestDeviceId, vga);
- }
-
- protected:
- FakeWebRtcVcmFactory* factory_; // owned by capturer_
- std::unique_ptr<cricket::WebRtcVideoCapturer> capturer_;
-};
-
-TEST_F(WebRtcVideoCapturerTest, TestNotOpened) {
- EXPECT_EQ("", capturer_->GetId());
- EXPECT_TRUE(capturer_->GetSupportedFormats()->empty());
- EXPECT_TRUE(capturer_->GetCaptureFormat() == NULL);
- EXPECT_FALSE(capturer_->IsRunning());
-}
-
-TEST_F(WebRtcVideoCapturerTest, TestBadInit) {
- EXPECT_FALSE(capturer_->Init(cricket::Device("bad-name", "bad-id")));
- EXPECT_FALSE(capturer_->IsRunning());
-}
-
-TEST_F(WebRtcVideoCapturerTest, TestInit) {
- EXPECT_TRUE(capturer_->Init(cricket::Device(kTestDeviceName, kTestDeviceId)));
- EXPECT_EQ(kTestDeviceId, capturer_->GetId());
- EXPECT_TRUE(NULL != capturer_->GetSupportedFormats());
- ASSERT_EQ(1U, capturer_->GetSupportedFormats()->size());
- EXPECT_EQ(640, (*capturer_->GetSupportedFormats())[0].width);
- EXPECT_EQ(480, (*capturer_->GetSupportedFormats())[0].height);
- EXPECT_TRUE(capturer_->GetCaptureFormat() == NULL); // not started yet
- EXPECT_FALSE(capturer_->IsRunning());
-}
-
-TEST_F(WebRtcVideoCapturerTest, TestInitVcm) {
- EXPECT_TRUE(capturer_->Init(factory_->Create(kTestDeviceId)));
-}
-
-TEST_F(WebRtcVideoCapturerTest, TestCapture) {
- EXPECT_TRUE(capturer_->Init(cricket::Device(kTestDeviceName, kTestDeviceId)));
- cricket::VideoCapturerListener listener(capturer_.get());
- cricket::VideoFormat format(capturer_->GetSupportedFormats()->at(0));
- EXPECT_EQ(cricket::CS_STARTING, capturer_->Start(format));
- EXPECT_TRUE(capturer_->IsRunning());
- ASSERT_TRUE(capturer_->GetCaptureFormat() != NULL);
- EXPECT_EQ(format, *capturer_->GetCaptureFormat());
- EXPECT_EQ_WAIT(cricket::CS_RUNNING, listener.last_capture_state(), 1000);
- factory_->modules[0]->SendFrame(640, 480);
- EXPECT_TRUE_WAIT(listener.frame_count() > 0, 5000);
- EXPECT_EQ(640, listener.frame_width());
- EXPECT_EQ(480, listener.frame_height());
- EXPECT_EQ(cricket::CS_FAILED, capturer_->Start(format));
- capturer_->Stop();
- EXPECT_FALSE(capturer_->IsRunning());
- EXPECT_TRUE(capturer_->GetCaptureFormat() == NULL);
- EXPECT_EQ_WAIT(cricket::CS_STOPPED, listener.last_capture_state(), 1000);
-}
-
-TEST_F(WebRtcVideoCapturerTest, TestCaptureVcm) {
- EXPECT_TRUE(capturer_->Init(factory_->Create(kTestDeviceId)));
- cricket::VideoCapturerListener listener(capturer_.get());
- EXPECT_TRUE(capturer_->GetSupportedFormats()->empty());
- VideoFormat format;
- EXPECT_TRUE(capturer_->GetBestCaptureFormat(kDefaultVideoFormat, &format));
- EXPECT_EQ(kDefaultVideoFormat.width, format.width);
- EXPECT_EQ(kDefaultVideoFormat.height, format.height);
- EXPECT_EQ(kDefaultVideoFormat.interval, format.interval);
- EXPECT_EQ(cricket::FOURCC_I420, format.fourcc);
- EXPECT_EQ(cricket::CS_STARTING, capturer_->Start(format));
- EXPECT_TRUE(capturer_->IsRunning());
- ASSERT_TRUE(capturer_->GetCaptureFormat() != NULL);
- EXPECT_EQ(format, *capturer_->GetCaptureFormat());
- EXPECT_EQ_WAIT(cricket::CS_RUNNING, listener.last_capture_state(), 1000);
- factory_->modules[0]->SendFrame(640, 480);
- EXPECT_TRUE_WAIT(listener.frame_count() > 0, 5000);
- EXPECT_EQ(640, listener.frame_width());
- EXPECT_EQ(480, listener.frame_height());
- EXPECT_EQ(cricket::CS_FAILED, capturer_->Start(format));
- capturer_->Stop();
- EXPECT_FALSE(capturer_->IsRunning());
- EXPECT_TRUE(capturer_->GetCaptureFormat() == NULL);
-}
-
-TEST_F(WebRtcVideoCapturerTest, TestCaptureWithoutInit) {
- cricket::VideoFormat format;
- EXPECT_EQ(cricket::CS_FAILED, capturer_->Start(format));
- EXPECT_TRUE(capturer_->GetCaptureFormat() == NULL);
- EXPECT_FALSE(capturer_->IsRunning());
-}
-
-#endif // HAVE_WEBRTC_VIDEO
diff --git a/media/engine/webrtcvideocapturerfactory.cc b/media/engine/webrtcvideocapturerfactory.cc
deleted file mode 100644
index 333df6f..0000000
--- a/media/engine/webrtcvideocapturerfactory.cc
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (c) 2004 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 <memory>
-#include <utility>
-
-#include "media/engine/webrtcvideocapturer.h"
-#include "media/engine/webrtcvideocapturerfactory.h"
-
-namespace cricket {
-
-std::unique_ptr<VideoCapturer> WebRtcVideoDeviceCapturerFactory::Create(
- const Device& device) {
-#ifdef HAVE_WEBRTC_VIDEO
- std::unique_ptr<WebRtcVideoCapturer> capturer(new WebRtcVideoCapturer());
- if (!capturer->Init(device)) {
- return std::unique_ptr<VideoCapturer>();
- }
- return std::move(capturer);
-#else
- return std::unique_ptr<VideoCapturer>();
-#endif
-}
-
-} // namespace cricket
diff --git a/media/engine/webrtcvideocapturerfactory.h b/media/engine/webrtcvideocapturerfactory.h
deleted file mode 100644
index ca76f07..0000000
--- a/media/engine/webrtcvideocapturerfactory.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (c) 2014 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.
- */
-
-// TODO(pthatcher): Rename file to match class name.
-#ifndef MEDIA_ENGINE_WEBRTCVIDEOCAPTURERFACTORY_H_
-#define MEDIA_ENGINE_WEBRTCVIDEOCAPTURERFACTORY_H_
-
-#include <memory>
-
-#include "media/base/device.h"
-#include "media/base/videocapturer.h"
-#include "media/base/videocapturerfactory.h"
-
-namespace cricket {
-
-// Creates instances of cricket::WebRtcVideoCapturer.
-class WebRtcVideoDeviceCapturerFactory : public VideoDeviceCapturerFactory {
- public:
- std::unique_ptr<VideoCapturer> Create(const Device& device) override;
-};
-
-} // namespace cricket
-
-#endif // MEDIA_ENGINE_WEBRTCVIDEOCAPTURERFACTORY_H_