Rewrite video_loopback to use new mac capturer.
The old one has been deprecated for a long time. Bug: webrtc:6333, webrtc:6898, webrtc:7861 Change-Id: Ib9b798262817e80019afcacc5b41d18957a28101 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/124827 Reviewed-by: Stefan Holmer <stefan@webrtc.org> Reviewed-by: Niels Moller <nisse@webrtc.org> Reviewed-by: Peter Hanspers <peterhanspers@webrtc.org> Commit-Queue: Kári Helgason <kthelgason@webrtc.org> Cr-Commit-Position: refs/heads/master@{#26993}
This commit is contained in:

committed by
Commit Bot

parent
c8d2e73ed0
commit
ede7cb2ec1
@ -695,6 +695,7 @@ if (is_linux || is_win) {
|
|||||||
"../rtc_base/third_party/sigslot",
|
"../rtc_base/third_party/sigslot",
|
||||||
"../system_wrappers:field_trial",
|
"../system_wrappers:field_trial",
|
||||||
"../test:field_trial",
|
"../test:field_trial",
|
||||||
|
"../test:platform_video_capturer",
|
||||||
"//third_party/abseil-cpp/absl/memory",
|
"//third_party/abseil-cpp/absl/memory",
|
||||||
"//third_party/abseil-cpp/absl/types:optional",
|
"//third_party/abseil-cpp/absl/types:optional",
|
||||||
]
|
]
|
||||||
@ -847,6 +848,7 @@ if (is_win || is_android) {
|
|||||||
"../pc:libjingle_peerconnection",
|
"../pc:libjingle_peerconnection",
|
||||||
"../pc:peerconnection",
|
"../pc:peerconnection",
|
||||||
"../rtc_base:rtc_base",
|
"../rtc_base:rtc_base",
|
||||||
|
"../test:platform_video_capturer",
|
||||||
"../test:video_test_common",
|
"../test:video_test_common",
|
||||||
"//third_party/abseil-cpp/absl/memory",
|
"//third_party/abseil-cpp/absl/memory",
|
||||||
]
|
]
|
||||||
|
@ -366,6 +366,7 @@ if (is_ios || is_mac) {
|
|||||||
"..:common_objc",
|
"..:common_objc",
|
||||||
":used_from_extension",
|
":used_from_extension",
|
||||||
]
|
]
|
||||||
|
libs = [ "VideoToolbox.framework" ]
|
||||||
}
|
}
|
||||||
|
|
||||||
rtc_static_library("video_objc") {
|
rtc_static_library("video_objc") {
|
||||||
|
@ -49,8 +49,6 @@ rtc_source_set("video_test_common") {
|
|||||||
"frame_utils.h",
|
"frame_utils.h",
|
||||||
"test_video_capturer.cc",
|
"test_video_capturer.cc",
|
||||||
"test_video_capturer.h",
|
"test_video_capturer.h",
|
||||||
"vcm_capturer.cc",
|
|
||||||
"vcm_capturer.h",
|
|
||||||
"video_codec_settings.h",
|
"video_codec_settings.h",
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -67,7 +65,6 @@ rtc_source_set("video_test_common") {
|
|||||||
"../call:video_stream_api",
|
"../call:video_stream_api",
|
||||||
"../common_video",
|
"../common_video",
|
||||||
"../media:rtc_media_base",
|
"../media:rtc_media_base",
|
||||||
"../modules/video_capture:video_capture_module",
|
|
||||||
"../rtc_base:checks",
|
"../rtc_base:checks",
|
||||||
"../rtc_base:rtc_base",
|
"../rtc_base:rtc_base",
|
||||||
"../rtc_base:rtc_task_queue",
|
"../rtc_base:rtc_task_queue",
|
||||||
@ -78,6 +75,55 @@ rtc_source_set("video_test_common") {
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!build_with_chromium) {
|
||||||
|
if (is_mac || is_ios) {
|
||||||
|
rtc_source_set("video_test_mac") {
|
||||||
|
testonly = true
|
||||||
|
sources = [
|
||||||
|
"mac_capturer.h",
|
||||||
|
"mac_capturer.mm",
|
||||||
|
]
|
||||||
|
deps = [
|
||||||
|
":video_test_common",
|
||||||
|
"../api:libjingle_peerconnection_api",
|
||||||
|
"../api:scoped_refptr",
|
||||||
|
"../modules/video_capture:video_capture_module",
|
||||||
|
"../rtc_base:rtc_base",
|
||||||
|
"../sdk:base_objc",
|
||||||
|
"../sdk:native_api",
|
||||||
|
"../sdk:native_video",
|
||||||
|
"../sdk:videocapture_objc",
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
rtc_source_set("platform_video_capturer") {
|
||||||
|
testonly = true
|
||||||
|
sources = [
|
||||||
|
"platform_video_capturer.cc",
|
||||||
|
"platform_video_capturer.h",
|
||||||
|
]
|
||||||
|
deps = [
|
||||||
|
":video_test_common",
|
||||||
|
"//third_party/abseil-cpp/absl/memory",
|
||||||
|
]
|
||||||
|
if (is_mac || is_ios) {
|
||||||
|
deps += [ ":video_test_mac" ]
|
||||||
|
} else {
|
||||||
|
sources += [
|
||||||
|
"vcm_capturer.cc",
|
||||||
|
"vcm_capturer.h",
|
||||||
|
]
|
||||||
|
deps += [
|
||||||
|
"../api:scoped_refptr",
|
||||||
|
"../modules/video_capture:video_capture_module",
|
||||||
|
"../rtc_base:checks",
|
||||||
|
"../rtc_base:logging",
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
rtc_source_set("rtp_test_utils") {
|
rtc_source_set("rtp_test_utils") {
|
||||||
testonly = true
|
testonly = true
|
||||||
sources = [
|
sources = [
|
||||||
@ -185,9 +231,9 @@ rtc_source_set("test_support") {
|
|||||||
"gtest.h",
|
"gtest.h",
|
||||||
]
|
]
|
||||||
|
|
||||||
public_deps = []
|
public_deps = [] # no-presubmit-check TODO(webrtc:8603)
|
||||||
if (is_ios) {
|
if (is_ios) {
|
||||||
public_deps += [ ":test_support_objc" ]
|
public_deps += [ ":test_support_objc" ] # no-presubmit-check TODO(webrtc:8603)
|
||||||
}
|
}
|
||||||
|
|
||||||
public_configs = [ ":test_main_direct_config" ]
|
public_configs = [ ":test_main_direct_config" ]
|
||||||
@ -485,11 +531,11 @@ rtc_source_set("fileutils_override_impl") {
|
|||||||
rtc_source_set("run_test") {
|
rtc_source_set("run_test") {
|
||||||
testonly = true
|
testonly = true
|
||||||
if (is_mac) {
|
if (is_mac) {
|
||||||
public_deps = [
|
public_deps = [ # no-presubmit-check TODO(webrtc:8603)
|
||||||
":run_test_objc",
|
":run_test_objc",
|
||||||
]
|
]
|
||||||
} else {
|
} else {
|
||||||
public_deps = [
|
public_deps = [ # no-presubmit-check TODO(webrtc:8603)
|
||||||
":run_test_generic",
|
":run_test_generic",
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@ -560,7 +606,7 @@ rtc_source_set("direct_transport") {
|
|||||||
"../system_wrappers",
|
"../system_wrappers",
|
||||||
"//third_party/abseil-cpp/absl/memory",
|
"//third_party/abseil-cpp/absl/memory",
|
||||||
]
|
]
|
||||||
public_deps = [
|
public_deps = [ # no-presubmit-check TODO(webrtc:8603)
|
||||||
":single_threaded_task_queue",
|
":single_threaded_task_queue",
|
||||||
"../call:fake_network",
|
"../call:fake_network",
|
||||||
]
|
]
|
||||||
@ -719,12 +765,12 @@ rtc_source_set("test_common") {
|
|||||||
}
|
}
|
||||||
|
|
||||||
rtc_source_set("test_renderer") {
|
rtc_source_set("test_renderer") {
|
||||||
public_deps = [
|
public_deps = [ # no-presubmit-check TODO(webrtc:8603)
|
||||||
":test_renderer_generic",
|
":test_renderer_generic",
|
||||||
]
|
]
|
||||||
testonly = true
|
testonly = true
|
||||||
if (is_mac) {
|
if (is_mac) {
|
||||||
public_deps += [ ":test_renderer_objc" ]
|
public_deps += [ ":test_renderer_objc" ] # no-presubmit-check TODO(webrtc:8603)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
16
test/mac/Info.plist
Normal file
16
test/mac/Info.plist
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>CFBundleIdentifier</key>
|
||||||
|
<string>org.webrtc.video_loopback</string>
|
||||||
|
<key>CFBundleName</key>
|
||||||
|
<string>video_loopback</string>
|
||||||
|
<key>CFBundlePackageType</key>
|
||||||
|
<string>APPL</string>
|
||||||
|
<key>NSCameraUsageDescription</key>
|
||||||
|
<string>Camera access needed for video calling</string>
|
||||||
|
<key>NSMicrophoneUsageDescription</key>
|
||||||
|
<string>Microphone access needed for video calling</string>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
50
test/mac_capturer.h
Normal file
50
test/mac_capturer.h
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2019 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 TEST_MAC_CAPTURER_H_
|
||||||
|
#define TEST_MAC_CAPTURER_H_
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
#include "api/media_stream_interface.h"
|
||||||
|
#include "api/scoped_refptr.h"
|
||||||
|
#include "modules/video_capture/video_capture.h"
|
||||||
|
#include "rtc_base/thread.h"
|
||||||
|
#include "test/test_video_capturer.h"
|
||||||
|
|
||||||
|
namespace webrtc {
|
||||||
|
namespace test {
|
||||||
|
|
||||||
|
class MacCapturer : public TestVideoCapturer,
|
||||||
|
public rtc::VideoSinkInterface<VideoFrame> {
|
||||||
|
public:
|
||||||
|
static MacCapturer* Create(size_t width,
|
||||||
|
size_t height,
|
||||||
|
size_t target_fps,
|
||||||
|
size_t capture_device_index);
|
||||||
|
~MacCapturer() override;
|
||||||
|
|
||||||
|
void OnFrame(const VideoFrame& frame) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
MacCapturer(size_t width,
|
||||||
|
size_t height,
|
||||||
|
size_t target_fps,
|
||||||
|
size_t capture_device_index);
|
||||||
|
void Destroy();
|
||||||
|
|
||||||
|
void* capturer_;
|
||||||
|
void* adapter_;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace test
|
||||||
|
} // namespace webrtc
|
||||||
|
|
||||||
|
#endif // TEST_MAC_CAPTURER_H_
|
84
test/mac_capturer.mm
Normal file
84
test/mac_capturer.mm
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2019 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 "test/mac_capturer.h"
|
||||||
|
|
||||||
|
#import "sdk/objc/base/RTCVideoCapturer.h"
|
||||||
|
#import "sdk/objc/components/capturer/RTCCameraVideoCapturer.h"
|
||||||
|
#import "sdk/objc/native/api/video_capturer.h"
|
||||||
|
#import "sdk/objc/native/src/objc_frame_buffer.h"
|
||||||
|
|
||||||
|
@interface RTCTestVideoSourceAdapter : NSObject <RTCVideoCapturerDelegate>
|
||||||
|
@property(nonatomic) webrtc::test::MacCapturer *capturer;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation RTCTestVideoSourceAdapter
|
||||||
|
@synthesize capturer = _capturer;
|
||||||
|
|
||||||
|
- (void)capturer:(RTCVideoCapturer *)capturer didCaptureVideoFrame:(RTCVideoFrame *)frame {
|
||||||
|
const int64_t timestamp_us = frame.timeStampNs / rtc::kNumNanosecsPerMicrosec;
|
||||||
|
rtc::scoped_refptr<webrtc::VideoFrameBuffer> buffer =
|
||||||
|
new rtc::RefCountedObject<webrtc::ObjCFrameBuffer>(frame.buffer);
|
||||||
|
_capturer->OnFrame(webrtc::VideoFrame::Builder()
|
||||||
|
.set_video_frame_buffer(buffer)
|
||||||
|
.set_rotation(webrtc::kVideoRotation_0)
|
||||||
|
.set_timestamp_us(timestamp_us)
|
||||||
|
.build());
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
namespace webrtc {
|
||||||
|
namespace test {
|
||||||
|
|
||||||
|
MacCapturer::MacCapturer(size_t width,
|
||||||
|
size_t height,
|
||||||
|
size_t target_fps,
|
||||||
|
size_t capture_device_index) {
|
||||||
|
RTCTestVideoSourceAdapter *adapter = [[RTCTestVideoSourceAdapter alloc] init];
|
||||||
|
adapter_ = (__bridge_retained void *)adapter;
|
||||||
|
adapter.capturer = this;
|
||||||
|
|
||||||
|
RTCCameraVideoCapturer *capturer = [[RTCCameraVideoCapturer alloc] initWithDelegate:adapter];
|
||||||
|
capturer_ = (__bridge_retained void *)capturer;
|
||||||
|
|
||||||
|
AVCaptureDevice *device =
|
||||||
|
[[RTCCameraVideoCapturer captureDevices] objectAtIndex:capture_device_index];
|
||||||
|
AVCaptureDeviceFormat *format =
|
||||||
|
[[RTCCameraVideoCapturer supportedFormatsForDevice:device] objectAtIndex:0];
|
||||||
|
[capturer startCaptureWithDevice:device format:format fps:target_fps];
|
||||||
|
}
|
||||||
|
|
||||||
|
MacCapturer *MacCapturer::Create(size_t width,
|
||||||
|
size_t height,
|
||||||
|
size_t target_fps,
|
||||||
|
size_t capture_device_index) {
|
||||||
|
return new MacCapturer(width, height, target_fps, capture_device_index);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MacCapturer::Destroy() {
|
||||||
|
#pragma clang diagnostic push
|
||||||
|
#pragma clang diagnostic ignored "-Wunused-variable"
|
||||||
|
RTCTestVideoSourceAdapter *adapter = (__bridge_transfer RTCTestVideoSourceAdapter *)adapter_;
|
||||||
|
RTCCameraVideoCapturer *capturer = (__bridge_transfer RTCCameraVideoCapturer *)capturer_;
|
||||||
|
[capturer stopCapture];
|
||||||
|
#pragma clang diagnostic pop
|
||||||
|
}
|
||||||
|
|
||||||
|
MacCapturer::~MacCapturer() {
|
||||||
|
Destroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
void MacCapturer::OnFrame(const VideoFrame &frame) {
|
||||||
|
TestVideoCapturer::OnFrame(frame);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace test
|
||||||
|
} // namespace webrtc
|
37
test/platform_video_capturer.cc
Normal file
37
test/platform_video_capturer.cc
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2019 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 "test/platform_video_capturer.h"
|
||||||
|
|
||||||
|
#include "absl/memory/memory.h"
|
||||||
|
#if defined(WEBRTC_MAC)
|
||||||
|
#include "test/mac_capturer.h"
|
||||||
|
#else
|
||||||
|
#include "test/vcm_capturer.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
namespace webrtc {
|
||||||
|
namespace test {
|
||||||
|
|
||||||
|
std::unique_ptr<TestVideoCapturer> CreateVideoCapturer(
|
||||||
|
size_t width,
|
||||||
|
size_t height,
|
||||||
|
size_t target_fps,
|
||||||
|
size_t capture_device_index) {
|
||||||
|
#if defined(WEBRTC_MAC)
|
||||||
|
return absl::WrapUnique<TestVideoCapturer>(test::MacCapturer::Create(
|
||||||
|
width, height, target_fps, capture_device_index));
|
||||||
|
#else
|
||||||
|
return absl::WrapUnique<TestVideoCapturer>(test::VcmCapturer::Create(
|
||||||
|
width, height, target_fps, capture_device_index));
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace test
|
||||||
|
} // namespace webrtc
|
29
test/platform_video_capturer.h
Normal file
29
test/platform_video_capturer.h
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2019 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 TEST_PLATFORM_VIDEO_CAPTURER_H_
|
||||||
|
#define TEST_PLATFORM_VIDEO_CAPTURER_H_
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
|
#include "test/test_video_capturer.h"
|
||||||
|
|
||||||
|
namespace webrtc {
|
||||||
|
namespace test {
|
||||||
|
|
||||||
|
std::unique_ptr<TestVideoCapturer> CreateVideoCapturer(
|
||||||
|
size_t width,
|
||||||
|
size_t height,
|
||||||
|
size_t target_fps,
|
||||||
|
size_t capture_device_index);
|
||||||
|
|
||||||
|
} // namespace test
|
||||||
|
} // namespace webrtc
|
||||||
|
|
||||||
|
#endif // TEST_PLATFORM_VIDEO_CAPTURER_H_
|
@ -25,7 +25,7 @@ namespace test {
|
|||||||
class TestVideoCapturer : public rtc::VideoSourceInterface<VideoFrame> {
|
class TestVideoCapturer : public rtc::VideoSourceInterface<VideoFrame> {
|
||||||
public:
|
public:
|
||||||
TestVideoCapturer();
|
TestVideoCapturer();
|
||||||
virtual ~TestVideoCapturer();
|
~TestVideoCapturer() override;
|
||||||
|
|
||||||
void AddOrUpdateSink(rtc::VideoSinkInterface<VideoFrame>* sink,
|
void AddOrUpdateSink(rtc::VideoSinkInterface<VideoFrame>* sink,
|
||||||
const rtc::VideoSinkWants& wants) override;
|
const rtc::VideoSinkWants& wants) override;
|
||||||
|
@ -271,6 +271,7 @@ if (rtc_include_tests) {
|
|||||||
"../test:fake_video_codecs",
|
"../test:fake_video_codecs",
|
||||||
"../test:fileutils",
|
"../test:fileutils",
|
||||||
"../test:perf_test",
|
"../test:perf_test",
|
||||||
|
"../test:platform_video_capturer",
|
||||||
"../test:rtp_test_utils",
|
"../test:rtp_test_utils",
|
||||||
"../test:test_common",
|
"../test:test_common",
|
||||||
"../test:test_renderer",
|
"../test:test_renderer",
|
||||||
@ -280,6 +281,10 @@ if (rtc_include_tests) {
|
|||||||
"../test:video_test_support",
|
"../test:video_test_support",
|
||||||
"//third_party/abseil-cpp/absl/memory:memory",
|
"//third_party/abseil-cpp/absl/memory:memory",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
if (is_mac || is_ios) {
|
||||||
|
deps += [ "../test:video_test_mac" ]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
rtc_source_set("video_full_stack_tests") {
|
rtc_source_set("video_full_stack_tests") {
|
||||||
@ -309,10 +314,11 @@ if (rtc_include_tests) {
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
rtc_executable("video_loopback") {
|
rtc_static_library("video_loopback_lib") {
|
||||||
testonly = true
|
testonly = true
|
||||||
sources = [
|
sources = [
|
||||||
"video_loopback.cc",
|
"video_loopback.cc",
|
||||||
|
"video_loopback.h",
|
||||||
]
|
]
|
||||||
deps = [
|
deps = [
|
||||||
":video_quality_test",
|
":video_quality_test",
|
||||||
@ -335,6 +341,29 @@ if (rtc_include_tests) {
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (is_mac) {
|
||||||
|
mac_app_bundle("video_loopback") {
|
||||||
|
testonly = true
|
||||||
|
sources = [
|
||||||
|
"video_loopback_main.mm",
|
||||||
|
]
|
||||||
|
info_plist = "../test/mac/Info.plist"
|
||||||
|
deps = [
|
||||||
|
":video_loopback_lib",
|
||||||
|
]
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
rtc_executable("video_loopback") {
|
||||||
|
testonly = true
|
||||||
|
sources = [
|
||||||
|
"video_loopback_main.cc",
|
||||||
|
]
|
||||||
|
deps = [
|
||||||
|
":video_loopback_lib",
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
rtc_executable("screenshare_loopback") {
|
rtc_executable("screenshare_loopback") {
|
||||||
testonly = true
|
testonly = true
|
||||||
sources = [
|
sources = [
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
* in the file PATENTS. All contributing project authors may
|
* in the file PATENTS. All contributing project authors may
|
||||||
* be found in the AUTHORS file in the root of the source tree.
|
* be found in the AUTHORS file in the root of the source tree.
|
||||||
*/
|
*/
|
||||||
|
#include "video/video_loopback.h"
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
@ -389,9 +390,8 @@ void Loopback() {
|
|||||||
fixture->RunWithRenderers(params);
|
fixture->RunWithRenderers(params);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} // namespace webrtc
|
|
||||||
|
|
||||||
int main(int argc, char* argv[]) {
|
int RunLoopbackTest(int argc, char* argv[]) {
|
||||||
::testing::InitGoogleTest(&argc, argv);
|
::testing::InitGoogleTest(&argc, argv);
|
||||||
rtc::FlagList::SetFlagsFromCommandLine(&argc, argv, true);
|
rtc::FlagList::SetFlagsFromCommandLine(&argc, argv, true);
|
||||||
if (webrtc::flags::FLAG_help) {
|
if (webrtc::flags::FLAG_help) {
|
||||||
@ -411,3 +411,4 @@ int main(int argc, char* argv[]) {
|
|||||||
webrtc::test::RunTest(webrtc::Loopback);
|
webrtc::test::RunTest(webrtc::Loopback);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
} // namespace webrtc
|
||||||
|
19
video/video_loopback.h
Normal file
19
video/video_loopback.h
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2019 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 VIDEO_VIDEO_LOOPBACK_H_
|
||||||
|
#define VIDEO_VIDEO_LOOPBACK_H_
|
||||||
|
|
||||||
|
namespace webrtc {
|
||||||
|
// Expose the main test method.
|
||||||
|
int RunLoopbackTest(int argc, char* argv[]);
|
||||||
|
} // namespace webrtc
|
||||||
|
|
||||||
|
#endif // VIDEO_VIDEO_LOOPBACK_H_
|
15
video/video_loopback_main.cc
Normal file
15
video/video_loopback_main.cc
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2019 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 "video/video_loopback.h"
|
||||||
|
|
||||||
|
int main(int argc, char* argv[]) {
|
||||||
|
webrtc::RunLoopbackTest(argc, argv);
|
||||||
|
}
|
17
video/video_loopback_main.mm
Normal file
17
video/video_loopback_main.mm
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2019 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#import "video/video_loopback.h"
|
||||||
|
|
||||||
|
int main(int argc, char* argv[]) {
|
||||||
|
@autoreleasepool {
|
||||||
|
webrtc::RunLoopbackTest(argc, argv);
|
||||||
|
}
|
||||||
|
}
|
@ -35,9 +35,9 @@
|
|||||||
#include "modules/video_coding/codecs/vp9/include/vp9.h"
|
#include "modules/video_coding/codecs/vp9/include/vp9.h"
|
||||||
#include "modules/video_coding/utility/ivf_file_writer.h"
|
#include "modules/video_coding/utility/ivf_file_writer.h"
|
||||||
#include "rtc_base/strings/string_builder.h"
|
#include "rtc_base/strings/string_builder.h"
|
||||||
|
#include "test/platform_video_capturer.h"
|
||||||
#include "test/run_loop.h"
|
#include "test/run_loop.h"
|
||||||
#include "test/testsupport/file_utils.h"
|
#include "test/testsupport/file_utils.h"
|
||||||
#include "test/vcm_capturer.h"
|
|
||||||
#include "test/video_renderer.h"
|
#include "test/video_renderer.h"
|
||||||
#include "video/frame_dumping_decoder.h"
|
#include "video/frame_dumping_decoder.h"
|
||||||
#ifdef WEBRTC_WIN
|
#ifdef WEBRTC_WIN
|
||||||
@ -1076,10 +1076,10 @@ void VideoQualityTest::CreateCapturers() {
|
|||||||
test::FrameGenerator::OutputType::I010, absl::nullopt,
|
test::FrameGenerator::OutputType::I010, absl::nullopt,
|
||||||
params_.video[video_idx].fps, clock_));
|
params_.video[video_idx].fps, clock_));
|
||||||
} else if (params_.video[video_idx].clip_name.empty()) {
|
} else if (params_.video[video_idx].clip_name.empty()) {
|
||||||
video_sources_[video_idx].reset(test::VcmCapturer::Create(
|
video_sources_[video_idx] = test::CreateVideoCapturer(
|
||||||
params_.video[video_idx].width, params_.video[video_idx].height,
|
params_.video[video_idx].width, params_.video[video_idx].height,
|
||||||
params_.video[video_idx].fps,
|
params_.video[video_idx].fps,
|
||||||
params_.video[video_idx].capture_device_index));
|
params_.video[video_idx].capture_device_index);
|
||||||
if (!video_sources_[video_idx]) {
|
if (!video_sources_[video_idx]) {
|
||||||
// Failed to get actual camera, use chroma generator as backup.
|
// Failed to get actual camera, use chroma generator as backup.
|
||||||
video_sources_[video_idx].reset(test::FrameGeneratorCapturer::Create(
|
video_sources_[video_idx].reset(test::FrameGeneratorCapturer::Create(
|
||||||
|
Reference in New Issue
Block a user