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",