Enable building WebRTC without built-in software codecs
This CL adds a GN build flag to include builtin software codecs
(enabled by default).
When setting the flag to false, libvpx can also be excluded. The
benefit is that the resulting binary is smaller.
Replaces https://webrtc-review.googlesource.com/c/src/+/29203
Bug: webrtc:7925
Change-Id: Id330ea8a43169e449ee139eca18e4557cc932e10
Reviewed-on: https://webrtc-review.googlesource.com/36340
Commit-Queue: Anders Carlsson <andersc@webrtc.org>
Reviewed-by: Patrik Höglund <phoglund@webrtc.org>
Reviewed-by: Taylor Brandstetter <deadbeef@webrtc.org>
Reviewed-by: Erik Språng <sprang@webrtc.org>
Reviewed-by: Magnus Jedvert <magjed@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21818}
diff --git a/sdk/BUILD.gn b/sdk/BUILD.gn
index e370a05..24f9206 100644
--- a/sdk/BUILD.gn
+++ b/sdk/BUILD.gn
@@ -320,17 +320,15 @@
}
rtc_static_library("peerconnectionfactory_objc") {
- sources = [
- "objc/Framework/Classes/PeerConnection/RTCDefaultVideoDecoderFactory.m",
- "objc/Framework/Classes/PeerConnection/RTCDefaultVideoEncoderFactory.m",
+ sources = []
+ deps = []
+
+ sources += [
"objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory+Native.h",
"objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory+Private.h",
"objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory.mm",
"objc/Framework/Classes/PeerConnection/RTCVideoCodecH264.mm",
- "objc/Framework/Classes/PeerConnection/RTCVideoCodecVP8.mm",
- "objc/Framework/Classes/PeerConnection/RTCVideoCodecVP9.mm",
]
-
public_configs = [ ":common_config_objc" ]
if (!build_with_chromium && is_clang) {
@@ -339,9 +337,10 @@
suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
}
- deps = [
+ deps += [
":common_objc",
":corevideoframebuffer_objc",
+ ":default_codec_factory_objc",
":peerconnectionfactory_base_objc",
":video_objc",
":videotoolbox_objc",
@@ -354,8 +353,6 @@
"../api/video_codecs:video_codecs_api",
"../media:rtc_audio_video",
"../media:rtc_media_base",
- "../modules/video_coding:webrtc_vp8",
- "../modules/video_coding:webrtc_vp9",
"../pc:create_pc_factory",
"../pc:peerconnection",
"../rtc_base:rtc_base",
@@ -363,6 +360,59 @@
]
}
+ rtc_static_library("default_codec_factory_objc") {
+ sources = [
+ "objc/Framework/Classes/PeerConnection/RTCDefaultVideoDecoderFactory.m",
+ "objc/Framework/Classes/PeerConnection/RTCDefaultVideoEncoderFactory.m",
+ ]
+
+ deps = [
+ ":common_objc",
+ ]
+ if (rtc_use_builtin_sw_codecs) {
+ deps += [
+ ":vp8",
+ ":vp9",
+ ]
+ }
+ }
+
+ rtc_static_library("vp8") {
+ sources = [
+ "objc/Framework/Classes/PeerConnection/RTCVideoCodecVP8.mm",
+ ]
+
+ if (!build_with_chromium && is_clang) {
+ # Suppress warnings from the Chromium Clang plugin
+ # (bugs.webrtc.org/163).
+ suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
+ }
+
+ deps = [
+ ":peerconnectionfactory_base_objc",
+ "../modules/video_coding:webrtc_vp8",
+ "../system_wrappers:metrics_default",
+ ]
+ }
+
+ rtc_static_library("vp9") {
+ sources = [
+ "objc/Framework/Classes/PeerConnection/RTCVideoCodecVP9.mm",
+ ]
+
+ if (!build_with_chromium && is_clang) {
+ # Suppress warnings from the Chromium Clang plugin
+ # (bugs.webrtc.org/163).
+ suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
+ }
+
+ deps = [
+ ":peerconnectionfactory_base_objc",
+ "../modules/video_coding:webrtc_vp9",
+ "../system_wrappers:metrics_default",
+ ]
+ }
+
# Build the PeerConnectionFactory without audio/video support.
# This target depends on the objc_peeerconnectionfactory_base which still
# includes some audio/video related objects such as RTCAudioSource because
@@ -711,10 +761,6 @@
"objc/Framework/Headers/WebRTC/RTCTracing.h",
"objc/Framework/Headers/WebRTC/RTCVideoCapturer.h",
"objc/Framework/Headers/WebRTC/RTCVideoCodecH264.h",
- "objc/Framework/Headers/WebRTC/RTCVideoDecoderVP8.h",
- "objc/Framework/Headers/WebRTC/RTCVideoDecoderVP9.h",
- "objc/Framework/Headers/WebRTC/RTCVideoEncoderVP8.h",
- "objc/Framework/Headers/WebRTC/RTCVideoEncoderVP9.h",
"objc/Framework/Headers/WebRTC/RTCVideoFrame.h",
"objc/Framework/Headers/WebRTC/RTCVideoFrameBuffer.h",
"objc/Framework/Headers/WebRTC/RTCVideoRenderer.h",
@@ -727,6 +773,14 @@
common_objc_headers +=
[ "objc/Framework/Headers/WebRTC/RTCMTLVideoView.h" ]
}
+ if (rtc_use_builtin_sw_codecs) {
+ common_objc_headers += [
+ "objc/Framework/Headers/WebRTC/RTCVideoDecoderVP8.h",
+ "objc/Framework/Headers/WebRTC/RTCVideoDecoderVP9.h",
+ "objc/Framework/Headers/WebRTC/RTCVideoEncoderVP8.h",
+ "objc/Framework/Headers/WebRTC/RTCVideoEncoderVP9.h",
+ ]
+ }
sources = common_objc_headers
public_headers = common_objc_headers
@@ -848,13 +902,11 @@
"../api/video_codecs:video_codecs_api",
"../common_video",
"../media:rtc_audio_video",
- "../media:rtc_internal_video_codecs",
"../media:rtc_media",
"../media:rtc_media_base",
"../modules:module_api",
"../modules/video_coding:video_codec_interface",
"../modules/video_coding:video_coding_utility",
- "../modules/video_coding:webrtc_h264",
"../rtc_base:checks",
"../rtc_base:rtc_base_approved",
"../system_wrappers",
diff --git a/sdk/android/BUILD.gn b/sdk/android/BUILD.gn
index 635d29c..7a6c036 100644
--- a/sdk/android/BUILD.gn
+++ b/sdk/android/BUILD.gn
@@ -145,7 +145,6 @@
generate_jni("generated_video_jni") {
sources = [
"api/org/webrtc/EncodedImage.java",
- "api/org/webrtc/HardwareVideoEncoderFactory.java",
"api/org/webrtc/MediaCodecVideoDecoder.java",
"api/org/webrtc/MediaCodecVideoEncoder.java",
"api/org/webrtc/SurfaceTextureHelper.java",
@@ -167,27 +166,24 @@
"src/java/org/webrtc/EglBase14.java",
"src/java/org/webrtc/NV12Buffer.java",
"src/java/org/webrtc/NV21Buffer.java",
- "src/java/org/webrtc/VP8Decoder.java",
- "src/java/org/webrtc/VP8Encoder.java",
- "src/java/org/webrtc/VP9Decoder.java",
- "src/java/org/webrtc/VP9Encoder.java",
"src/java/org/webrtc/VideoDecoderWrapper.java",
"src/java/org/webrtc/VideoEncoderWrapper.java",
"src/java/org/webrtc/WrappedNativeI420Buffer.java",
"src/java/org/webrtc/WrappedNativeVideoDecoder.java",
"src/java/org/webrtc/WrappedNativeVideoEncoder.java",
]
+ if (rtc_use_builtin_sw_codecs) {
+ sources += [ "api/org/webrtc/HardwareVideoEncoderFactory.java" ] # TODO(andersc): This currently depends on SoftwareVideoEncoderFactory
+ }
jni_package = ""
jni_generator_include = "//sdk/android/src/jni/jni_generator_helper.h"
}
rtc_static_library("video_jni") {
- sources = [
- "src/jni/androidmediacodeccommon.h",
- "src/jni/androidmediadecoder.cc",
- "src/jni/androidmediadecoder_jni.h",
- "src/jni/androidmediaencoder.cc",
- "src/jni/androidmediaencoder_jni.h",
+ sources = []
+ deps = []
+
+ sources += [
"src/jni/androidvideotracksource.cc",
"src/jni/androidvideotracksource.h",
"src/jni/encodedimage.cc",
@@ -217,8 +213,6 @@
"src/jni/videoframe.cc",
"src/jni/videoframe.h",
"src/jni/videotrack.cc",
- "src/jni/vp8codec.cc",
- "src/jni/vp9codec.cc",
"src/jni/wrapped_native_i420_buffer.cc",
"src/jni/wrapped_native_i420_buffer.h",
"src/jni/wrappednativecodec.cc",
@@ -246,7 +240,22 @@
]
}
- deps = [
+ if (rtc_use_builtin_sw_codecs) {
+ sources += [
+ "src/jni/androidmediacodeccommon.h",
+ "src/jni/androidmediadecoder.cc",
+ "src/jni/androidmediadecoder_jni.h",
+ "src/jni/androidmediaencoder.cc",
+ "src/jni/androidmediaencoder_jni.h",
+ ]
+
+ deps += [
+ ":vp8_jni",
+ ":vp9_jni",
+ "../../media:rtc_internal_video_codecs",
+ ]
+ }
+ deps += [
":base_jni",
":generated_video_jni",
":native_api_jni",
@@ -257,15 +266,13 @@
"../../common_video:common_video",
"../../media:rtc_audio_video",
"../../media:rtc_h264_profile_id",
- "../../media:rtc_internal_video_codecs",
"../../media:rtc_media_base",
+ "../../media:rtc_software_fallback_wrappers",
"../../modules:module_api",
"../../modules/utility:utility",
"../../modules/video_coding:codec_globals_headers",
"../../modules/video_coding:video_codec_interface",
"../../modules/video_coding:video_coding_utility",
- "../../modules/video_coding:webrtc_vp8",
- "../../modules/video_coding:webrtc_vp9",
"../../rtc_base:checks",
"../../rtc_base:rtc_base",
"../../rtc_base:rtc_base_approved",
@@ -288,6 +295,66 @@
]
}
+generate_jni("generated_vp8_jni") {
+ sources = [
+ "src/java/org/webrtc/VP8Decoder.java",
+ "src/java/org/webrtc/VP8Encoder.java",
+ ]
+
+ jni_package = ""
+ jni_generator_include = "//sdk/android/src/jni/jni_generator_helper.h"
+}
+
+rtc_static_library("vp8_jni") {
+ sources = [
+ "src/jni/vp8codec.cc",
+ ]
+
+ if (is_clang) {
+ # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
+ suppressed_configs += [
+ "//build/config/clang:extra_warnings",
+ "//build/config/clang:find_bad_constructs",
+ ]
+ }
+
+ deps = [
+ ":base_jni",
+ ":generated_vp8_jni",
+ "../../modules/video_coding:webrtc_vp8",
+ ]
+}
+
+generate_jni("generated_vp9_jni") {
+ sources = [
+ "src/java/org/webrtc/VP9Decoder.java",
+ "src/java/org/webrtc/VP9Encoder.java",
+ ]
+
+ jni_package = ""
+ jni_generator_include = "//sdk/android/src/jni/jni_generator_helper.h"
+}
+
+rtc_static_library("vp9_jni") {
+ sources = [
+ "src/jni/vp9codec.cc",
+ ]
+
+ if (is_clang) {
+ # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
+ suppressed_configs += [
+ "//build/config/clang:extra_warnings",
+ "//build/config/clang:find_bad_constructs",
+ ]
+ }
+
+ deps = [
+ ":base_jni",
+ ":generated_vp9_jni",
+ "../../modules/video_coding:webrtc_vp9",
+ ]
+}
+
rtc_static_library("media_jni") {
sources = [
"src/jni/pc/media.cc",
@@ -366,6 +433,7 @@
# made public because we don't have a proper NDK yet. Header APIs here are not
# considered public and are subject to change.
visibility = [ "*" ]
+
sources = [
"src/jni/androidnetworkmonitor_jni.h",
"src/jni/pc/androidnetworkmonitor.cc",
@@ -567,8 +635,6 @@
"api/org/webrtc/CameraEnumerator.java",
"api/org/webrtc/CameraVideoCapturer.java",
"api/org/webrtc/DataChannel.java",
- "api/org/webrtc/DefaultVideoDecoderFactory.java",
- "api/org/webrtc/DefaultVideoEncoderFactory.java",
"api/org/webrtc/DtmfSender.java",
"api/org/webrtc/EglBase.java",
"api/org/webrtc/EglRenderer.java",
@@ -578,8 +644,6 @@
"api/org/webrtc/GlShader.java",
"api/org/webrtc/GlTextureFrameBuffer.java",
"api/org/webrtc/GlUtil.java",
- "api/org/webrtc/HardwareVideoDecoderFactory.java",
- "api/org/webrtc/HardwareVideoEncoderFactory.java",
"api/org/webrtc/IceCandidate.java",
"api/org/webrtc/JavaI420Buffer.java",
"api/org/webrtc/MediaCodecVideoDecoder.java",
@@ -604,8 +668,6 @@
"api/org/webrtc/ScreenCapturerAndroid.java",
"api/org/webrtc/SdpObserver.java",
"api/org/webrtc/SessionDescription.java",
- "api/org/webrtc/SoftwareVideoDecoderFactory.java",
- "api/org/webrtc/SoftwareVideoEncoderFactory.java",
"api/org/webrtc/StatsObserver.java",
"api/org/webrtc/StatsReport.java",
"api/org/webrtc/SurfaceEglRenderer.java",
@@ -661,11 +723,21 @@
"src/java/org/webrtc/WrappedNativeI420Buffer.java",
"src/java/org/webrtc/WrappedNativeVideoEncoder.java",
"src/java/org/webrtc/WrappedNativeVideoDecoder.java",
- "src/java/org/webrtc/VP8Encoder.java",
- "src/java/org/webrtc/VP8Decoder.java",
- "src/java/org/webrtc/VP9Encoder.java",
- "src/java/org/webrtc/VP9Decoder.java",
]
+ if (rtc_use_builtin_sw_codecs) {
+ java_files += [
+ "api/org/webrtc/DefaultVideoDecoderFactory.java",
+ "api/org/webrtc/DefaultVideoEncoderFactory.java",
+ "api/org/webrtc/HardwareVideoDecoderFactory.java", ## TODO(andersc): make this not depend on SoftwareVideoDecoderFactory
+ "api/org/webrtc/HardwareVideoEncoderFactory.java", ## TODO(andersc): make this not depend on SoftwareVideoEncoderFactory
+ "api/org/webrtc/SoftwareVideoDecoderFactory.java",
+ "api/org/webrtc/SoftwareVideoEncoderFactory.java",
+ "src/java/org/webrtc/VP8Encoder.java",
+ "src/java/org/webrtc/VP8Decoder.java",
+ "src/java/org/webrtc/VP9Encoder.java",
+ "src/java/org/webrtc/VP9Decoder.java",
+ ]
+ }
deps = [
"../../modules/audio_device:audio_device_java",
diff --git a/sdk/android/src/jni/pc/media.cc b/sdk/android/src/jni/pc/media.cc
index 8d11a36..4705cf2 100644
--- a/sdk/android/src/jni/pc/media.cc
+++ b/sdk/android/src/jni/pc/media.cc
@@ -30,6 +30,7 @@
return webrtc::CreateRtcEventLogFactory().release();
}
+#if defined(USE_BUILTIN_SW_CODECS)
cricket::MediaEngineInterface* CreateMediaEngine(
AudioDeviceModule* adm,
const rtc::scoped_refptr<AudioEncoderFactory>& audio_encoder_factory,
@@ -42,6 +43,7 @@
adm, audio_encoder_factory, audio_decoder_factory, video_encoder_factory,
video_decoder_factory, audio_mixer, audio_processor);
}
+#endif
cricket::MediaEngineInterface* CreateMediaEngine(
rtc::scoped_refptr<AudioDeviceModule> adm,
diff --git a/sdk/android/src/jni/pc/peerconnectionfactory.cc b/sdk/android/src/jni/pc/peerconnectionfactory.cc
index 33fa959..1a7008a 100644
--- a/sdk/android/src/jni/pc/peerconnectionfactory.cc
+++ b/sdk/android/src/jni/pc/peerconnectionfactory.cc
@@ -220,6 +220,7 @@
cricket::WebRtcVideoDecoderFactory* legacy_video_decoder_factory = nullptr;
std::unique_ptr<cricket::MediaEngineInterface> media_engine;
if (jencoder_factory.is_null() && jdecoder_factory.is_null()) {
+#if defined(USE_BUILTIN_SW_CODECS)
// This uses the legacy API, which automatically uses the internal SW
// codecs in WebRTC.
if (video_hw_acceleration_enabled) {
@@ -230,13 +231,16 @@
adm, audio_encoder_factory, audio_decoder_factory,
legacy_video_encoder_factory, legacy_video_decoder_factory, audio_mixer,
audio_processor));
+#endif
} else {
// This uses the new API, does not automatically include software codecs.
std::unique_ptr<VideoEncoderFactory> video_encoder_factory = nullptr;
if (jencoder_factory.is_null()) {
+#if defined(USE_BUILTIN_SW_CODECS)
legacy_video_encoder_factory = CreateLegacyVideoEncoderFactory();
video_encoder_factory = std::unique_ptr<VideoEncoderFactory>(
WrapLegacyVideoEncoderFactory(legacy_video_encoder_factory));
+#endif
} else {
video_encoder_factory = std::unique_ptr<VideoEncoderFactory>(
CreateVideoEncoderFactory(jni, jencoder_factory));
@@ -244,9 +248,11 @@
std::unique_ptr<VideoDecoderFactory> video_decoder_factory = nullptr;
if (jdecoder_factory.is_null()) {
+#if defined(USE_BUILTIN_SW_CODECS)
legacy_video_decoder_factory = CreateLegacyVideoDecoderFactory();
video_decoder_factory = std::unique_ptr<VideoDecoderFactory>(
WrapLegacyVideoDecoderFactory(legacy_video_decoder_factory));
+#endif
} else {
video_decoder_factory = std::unique_ptr<VideoDecoderFactory>(
CreateVideoDecoderFactory(jni, jdecoder_factory));
@@ -483,12 +489,14 @@
jlong native_factory,
const JavaParamRef<jobject>& local_egl_context,
const JavaParamRef<jobject>& remote_egl_context) {
+#if defined(USE_BUILTIN_SW_CODECS)
OwnedFactoryAndThreads* owned_factory =
reinterpret_cast<OwnedFactoryAndThreads*>(native_factory);
SetEglContext(jni, owned_factory->legacy_encoder_factory(),
local_egl_context);
SetEglContext(jni, owned_factory->legacy_decoder_factory(),
remote_egl_context);
+#endif
}
static jlong JNI_PeerConnectionFactory_GetNativePeerConnectionFactory(
diff --git a/sdk/android/src/jni/pc/video.cc b/sdk/android/src/jni/pc/video.cc
index d3eed5f..06dbc5c 100644
--- a/sdk/android/src/jni/pc/video.cc
+++ b/sdk/android/src/jni/pc/video.cc
@@ -16,7 +16,9 @@
#include "api/video_codecs/video_decoder_factory.h"
#include "api/video_codecs/video_encoder_factory.h"
#include "api/videosourceproxy.h"
-#include "media/engine/convert_legacy_video_factory.h"
+#if defined(USE_BUILTIN_SW_CODECS)
+#include "media/engine/convert_legacy_video_factory.h" // nogncheck
+#endif
#include "media/engine/webrtcvideodecoderfactory.h"
#include "media/engine/webrtcvideoencoderfactory.h"
#include "rtc_base/logging.h"
@@ -46,6 +48,7 @@
void SetEglContext(JNIEnv* env,
cricket::WebRtcVideoEncoderFactory* encoder_factory,
const JavaRef<jobject>& egl_context) {
+#if defined(USE_BUILTIN_SW_CODECS)
if (encoder_factory) {
MediaCodecVideoEncoderFactory* media_codec_factory =
static_cast<MediaCodecVideoEncoderFactory*>(encoder_factory);
@@ -54,8 +57,14 @@
media_codec_factory->SetEGLContext(env, egl_context.obj());
}
}
+#else
+ if (Java_Context_isEgl14Context(env, egl_context)) {
+ RTC_LOG(LS_INFO) << "Set EGL context for HW encoding.";
+ }
+#endif
}
+#if defined(USE_BUILTIN_SW_CODECS)
void SetEglContext(JNIEnv* env,
cricket::WebRtcVideoDecoderFactory* decoder_factory,
const JavaRef<jobject>& egl_context) {
@@ -68,6 +77,7 @@
}
}
}
+#endif
void* CreateVideoSource(JNIEnv* env,
rtc::Thread* signaling_thread,
@@ -81,6 +91,7 @@
.release();
}
+#if defined(USE_BUILTIN_SW_CODECS)
cricket::WebRtcVideoEncoderFactory* CreateLegacyVideoEncoderFactory() {
return new MediaCodecVideoEncoderFactory();
}
@@ -104,6 +115,7 @@
legacy_decoder_factory))
.release();
}
+#endif
} // namespace jni
} // namespace webrtc
diff --git a/sdk/android/src/jni/vp8codec.cc b/sdk/android/src/jni/vp8codec.cc
index 3011222..295a03a 100644
--- a/sdk/android/src/jni/vp8codec.cc
+++ b/sdk/android/src/jni/vp8codec.cc
@@ -11,8 +11,8 @@
#include <jni.h>
#include "modules/video_coding/codecs/vp8/include/vp8.h"
-#include "sdk/android/generated_video_jni/jni/VP8Decoder_jni.h"
-#include "sdk/android/generated_video_jni/jni/VP8Encoder_jni.h"
+#include "sdk/android/generated_vp8_jni/jni/VP8Decoder_jni.h"
+#include "sdk/android/generated_vp8_jni/jni/VP8Encoder_jni.h"
#include "sdk/android/src/jni/jni_helpers.h"
namespace webrtc {
diff --git a/sdk/android/src/jni/vp9codec.cc b/sdk/android/src/jni/vp9codec.cc
index e49d276..d9cc387 100644
--- a/sdk/android/src/jni/vp9codec.cc
+++ b/sdk/android/src/jni/vp9codec.cc
@@ -11,8 +11,8 @@
#include <jni.h>
#include "modules/video_coding/codecs/vp9/include/vp9.h"
-#include "sdk/android/generated_video_jni/jni/VP9Decoder_jni.h"
-#include "sdk/android/generated_video_jni/jni/VP9Encoder_jni.h"
+#include "sdk/android/generated_vp9_jni/jni/VP9Decoder_jni.h"
+#include "sdk/android/generated_vp9_jni/jni/VP9Encoder_jni.h"
#include "sdk/android/src/jni/jni_helpers.h"
namespace webrtc {
diff --git a/sdk/objc/Framework/Classes/PeerConnection/RTCDefaultVideoDecoderFactory.m b/sdk/objc/Framework/Classes/PeerConnection/RTCDefaultVideoDecoderFactory.m
index ba27ad2..c412056 100644
--- a/sdk/objc/Framework/Classes/PeerConnection/RTCDefaultVideoDecoderFactory.m
+++ b/sdk/objc/Framework/Classes/PeerConnection/RTCDefaultVideoDecoderFactory.m
@@ -11,22 +11,26 @@
#import "WebRTC/RTCVideoCodecFactory.h"
#import "WebRTC/RTCVideoCodecH264.h"
+#if defined(USE_BUILTIN_SW_CODECS)
#import "WebRTC/RTCVideoDecoderVP8.h"
#if !defined(RTC_DISABLE_VP9)
#import "WebRTC/RTCVideoDecoderVP9.h"
#endif
+#endif
@implementation RTCDefaultVideoDecoderFactory
- (id<RTCVideoDecoder>)createDecoder:(RTCVideoCodecInfo *)info {
if ([info.name isEqualToString:kRTCVideoCodecH264Name]) {
return [[RTCVideoDecoderH264 alloc] init];
+#if defined(USE_BUILTIN_SW_CODECS)
} else if ([info.name isEqualToString:kRTCVideoCodecVp8Name]) {
return [RTCVideoDecoderVP8 vp8Decoder];
#if !defined(RTC_DISABLE_VP9)
} else if ([info.name isEqualToString:kRTCVideoCodecVp9Name]) {
return [RTCVideoDecoderVP9 vp9Decoder];
#endif
+#endif
}
return nil;
@@ -35,9 +39,11 @@
- (NSArray<RTCVideoCodecInfo *> *)supportedCodecs {
return @[
[[RTCVideoCodecInfo alloc] initWithName:kRTCVideoCodecH264Name],
+#if defined(USE_BUILTIN_SW_CODECS)
[[RTCVideoCodecInfo alloc] initWithName:kRTCVideoCodecVp8Name],
#if !defined(RTC_DISABLE_VP9)
- [[RTCVideoCodecInfo alloc] initWithName:kRTCVideoCodecVp9Name]
+ [[RTCVideoCodecInfo alloc] initWithName:kRTCVideoCodecVp9Name],
+#endif
#endif
];
}
diff --git a/sdk/objc/Framework/Classes/PeerConnection/RTCDefaultVideoEncoderFactory.m b/sdk/objc/Framework/Classes/PeerConnection/RTCDefaultVideoEncoderFactory.m
index 154fac7..8148fc7 100644
--- a/sdk/objc/Framework/Classes/PeerConnection/RTCDefaultVideoEncoderFactory.m
+++ b/sdk/objc/Framework/Classes/PeerConnection/RTCDefaultVideoEncoderFactory.m
@@ -12,10 +12,12 @@
#import "WebRTC/RTCVideoCodec.h"
#import "WebRTC/RTCVideoCodecH264.h"
+#if defined(USE_BUILTIN_SW_CODECS)
#import "WebRTC/RTCVideoEncoderVP8.h"
#if !defined(RTC_DISABLE_VP9)
#import "WebRTC/RTCVideoEncoderVP9.h"
#endif
+#endif
@implementation RTCDefaultVideoEncoderFactory
@@ -40,30 +42,37 @@
[[RTCVideoCodecInfo alloc] initWithName:kRTCVideoCodecH264Name
parameters:constrainedBaselineParams];
+#if defined(USE_BUILTIN_SW_CODECS)
RTCVideoCodecInfo *vp8Info = [[RTCVideoCodecInfo alloc] initWithName:kRTCVideoCodecVp8Name];
#if !defined(RTC_DISABLE_VP9)
RTCVideoCodecInfo *vp9Info = [[RTCVideoCodecInfo alloc] initWithName:kRTCVideoCodecVp9Name];
#endif
-
- return @[ constrainedHighInfo,
- constrainedBaselineInfo,
- vp8Info,
-#if !defined(RTC_DISABLE_VP9)
- vp9Info
#endif
- ];
+
+ return @[
+ constrainedHighInfo,
+ constrainedBaselineInfo,
+#if defined(USE_BUILTIN_SW_CODECS)
+ vp8Info,
+#if !defined(RTC_DISABLE_VP9)
+ vp9Info,
+#endif
+#endif
+ ];
}
- (id<RTCVideoEncoder>)createEncoder:(RTCVideoCodecInfo *)info {
if ([info.name isEqualToString:kRTCVideoCodecH264Name]) {
return [[RTCVideoEncoderH264 alloc] initWithCodecInfo:info];
+#if defined(USE_BUILTIN_SW_CODECS)
} else if ([info.name isEqualToString:kRTCVideoCodecVp8Name]) {
return [RTCVideoEncoderVP8 vp8Encoder];
#if !defined(RTC_DISABLE_VP9)
} else if ([info.name isEqualToString:kRTCVideoCodecVp9Name]) {
return [RTCVideoEncoderVP9 vp9Encoder];
#endif
+#endif
}
return nil;
diff --git a/sdk/objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory+Native.h b/sdk/objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory+Native.h
index 32e2390..3b0e930 100644
--- a/sdk/objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory+Native.h
+++ b/sdk/objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory+Native.h
@@ -23,12 +23,14 @@
} // namespace webrtc
+#if defined(USE_BUILTIN_SW_CODECS)
namespace cricket {
class WebRtcVideoEncoderFactory;
class WebRtcVideoDecoderFactory;
} // namespace cricket
+#endif
NS_ASSUME_NONNULL_BEGIN
@@ -56,6 +58,7 @@
audioProcessingModule:
(rtc::scoped_refptr<webrtc::AudioProcessing>)audioProcessingModule;
+#if defined(USE_BUILTIN_SW_CODECS)
/* Initialize object with legacy injectable native audio/video encoder/decoder factories
TODO(andersc): Remove this when backwards compatiblity is no longer needed.
*/
@@ -67,6 +70,7 @@
legacyNativeVideoEncoderFactory:(cricket::WebRtcVideoEncoderFactory*)videoEncoderFactory
legacyNativeVideoDecoderFactory:(cricket::WebRtcVideoDecoderFactory*)videoDecoderFactory
audioDeviceModule:(nullable webrtc::AudioDeviceModule *)audioDeviceModule;
+#endif
@end
diff --git a/sdk/objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory.mm b/sdk/objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory.mm
index f9c75cfc..ec9d16c 100644
--- a/sdk/objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory.mm
+++ b/sdk/objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory.mm
@@ -58,6 +58,17 @@
- (instancetype)init {
#ifdef HAVE_NO_MEDIA
return [self initWithNoMedia];
+#elif !defined(USE_BUILTIN_SW_CODECS)
+ return [self initWithNativeAudioEncoderFactory:webrtc::CreateBuiltinAudioEncoderFactory()
+ nativeAudioDecoderFactory:webrtc::CreateBuiltinAudioDecoderFactory()
+ nativeVideoEncoderFactory:std::unique_ptr<webrtc::VideoEncoderFactory>(
+ new webrtc::ObjCVideoEncoderFactory(
+ [[RTCVideoEncoderFactoryH264 alloc] init]))
+ nativeVideoDecoderFactory:std::unique_ptr<webrtc::VideoDecoderFactory>(
+ new webrtc::ObjCVideoDecoderFactory(
+ [[RTCVideoDecoderFactoryH264 alloc] init]))
+ audioDeviceModule:nullptr
+ audioProcessingModule:nullptr];
#else
return [self initWithNativeAudioEncoderFactory:webrtc::CreateBuiltinAudioEncoderFactory()
nativeAudioDecoderFactory:webrtc::CreateBuiltinAudioDecoderFactory()
@@ -139,6 +150,7 @@
return [self initWithNoMedia];
#else
if (self = [self initNative]) {
+#if defined(USE_BUILTIN_SW_CODECS)
if (!videoEncoderFactory) {
auto legacy_video_encoder_factory = rtc::MakeUnique<webrtc::ObjCVideoEncoderFactory>(
[[RTCVideoEncoderFactoryH264 alloc] init]);
@@ -149,6 +161,7 @@
[[RTCVideoDecoderFactoryH264 alloc] init]);
videoDecoderFactory = ConvertVideoDecoderFactory(std::move(legacy_video_decoder_factory));
}
+#endif
_nativeFactory = webrtc::CreatePeerConnectionFactory(_networkThread.get(),
_workerThread.get(),
_signalingThread.get(),
@@ -165,6 +178,7 @@
#endif
}
+#if defined(USE_BUILTIN_SW_CODECS)
- (instancetype)
initWithNativeAudioEncoderFactory:
(rtc::scoped_refptr<webrtc::AudioEncoderFactory>)audioEncoderFactory
@@ -190,6 +204,7 @@
return self;
#endif
}
+#endif
- (RTCAudioSource *)audioSourceWithConstraints:(nullable RTCMediaConstraints *)constraints {
std::unique_ptr<webrtc::MediaConstraints> nativeConstraints;