From dd8c16574eb82833060efa7229858de749bbb1b1 Mon Sep 17 00:00:00 2001 From: Anders Carlsson Date: Tue, 30 Jan 2018 10:32:13 +0100 Subject: [PATCH] Enable building WebRTC without built-in software codecs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 Reviewed-by: Patrik Höglund Reviewed-by: Taylor Brandstetter Reviewed-by: Erik Språng Reviewed-by: Magnus Jedvert Cr-Commit-Position: refs/heads/master@{#21818} --- BUILD.gn | 4 + examples/BUILD.gn | 1 - .../unityplugin/simple_peer_connection.cc | 6 +- media/BUILD.gn | 48 +++++-- media/engine/internaldecoderfactory.cc | 11 +- media/engine/internalencoderfactory.cc | 11 +- .../videodecodersoftwarefallbackwrapper.cc | 1 - .../videoencodersoftwarefallbackwrapper.cc | 1 - media/engine/webrtcmediaengine.cc | 2 + media/engine/webrtcvideoengine.cc | 8 +- media/engine/webrtcvideoengine.h | 2 + modules/video_coding/BUILD.gn | 88 +++++++----- modules/video_coding/codec_database.cc | 15 ++- .../video_coding/video_codec_initializer.cc | 1 + modules/video_coding/video_sender.cc | 1 - pc/createpeerconnectionfactory.cc | 4 + sdk/BUILD.gn | 82 +++++++++--- sdk/android/BUILD.gn | 126 ++++++++++++++---- sdk/android/src/jni/pc/media.cc | 2 + .../src/jni/pc/peerconnectionfactory.cc | 8 ++ sdk/android/src/jni/pc/video.cc | 14 +- sdk/android/src/jni/vp8codec.cc | 4 +- sdk/android/src/jni/vp9codec.cc | 4 +- .../RTCDefaultVideoDecoderFactory.m | 8 +- .../RTCDefaultVideoEncoderFactory.m | 23 +++- .../RTCPeerConnectionFactory+Native.h | 4 + .../RTCPeerConnectionFactory.mm | 15 +++ video/BUILD.gn | 2 - video/video_stream_encoder.cc | 1 - webrtc.gni | 3 + 30 files changed, 383 insertions(+), 117 deletions(-) diff --git a/BUILD.gn b/BUILD.gn index 9e24f371e6..45069a45bd 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -212,6 +212,10 @@ config("common_config") { defines += [ "ENABLE_EXTERNAL_AUTH" ] } + if (rtc_use_builtin_sw_codecs) { + defines += [ "USE_BUILTIN_SW_CODECS" ] + } + if (build_with_chromium) { defines += [ # NOTICE: Since common_inherited_config is used in public_configs for our diff --git a/examples/BUILD.gn b/examples/BUILD.gn index 434c4649b9..a8abe97c8a 100644 --- a/examples/BUILD.gn +++ b/examples/BUILD.gn @@ -695,7 +695,6 @@ if (is_win || is_android) { "../api:video_frame_api", "../api/audio_codecs:builtin_audio_decoder_factory", "../api/audio_codecs:builtin_audio_encoder_factory", - "../common_video", "../media:rtc_audio_video", "../media:rtc_internal_video_codecs", "../media:rtc_media", diff --git a/examples/unityplugin/simple_peer_connection.cc b/examples/unityplugin/simple_peer_connection.cc index 71d4265256..c5ea6f7db8 100644 --- a/examples/unityplugin/simple_peer_connection.cc +++ b/examples/unityplugin/simple_peer_connection.cc @@ -18,7 +18,7 @@ #include "api/videosourceproxy.h" #include "media/engine/internaldecoderfactory.h" #include "media/engine/internalencoderfactory.h" -#include "media/engine/stereocodecfactory.h" +#include "media/engine/multiplexcodecfactory.h" #include "media/engine/webrtcvideocapturerfactory.h" #include "media/engine/webrtcvideodecoderfactory.h" #include "media/engine/webrtcvideoencoderfactory.h" @@ -104,10 +104,10 @@ bool SimplePeerConnection::InitializePeerConnection(const char** turn_urls, nullptr, webrtc::CreateBuiltinAudioEncoderFactory(), webrtc::CreateBuiltinAudioDecoderFactory(), std::unique_ptr( - new webrtc::StereoEncoderFactory( + new webrtc::MultiplexEncoderFactory( rtc::MakeUnique())), std::unique_ptr( - new webrtc::StereoDecoderFactory( + new webrtc::MultiplexDecoderFactory( rtc::MakeUnique())), nullptr, nullptr); } diff --git a/media/BUILD.gn b/media/BUILD.gn index 3fe8a86175..371d2b1de9 100644 --- a/media/BUILD.gn +++ b/media/BUILD.gn @@ -170,19 +170,11 @@ rtc_static_library("rtc_internal_video_codecs") { "engine/scopedvideodecoder.h", "engine/scopedvideoencoder.cc", "engine/scopedvideoencoder.h", - "engine/simulcast.cc", - "engine/simulcast.h", "engine/simulcast_encoder_adapter.cc", "engine/simulcast_encoder_adapter.h", - "engine/videodecodersoftwarefallbackwrapper.cc", - "engine/videodecodersoftwarefallbackwrapper.h", - "engine/videoencodersoftwarefallbackwrapper.cc", - "engine/videoencodersoftwarefallbackwrapper.h", "engine/vp8_encoder_simulcast_proxy.cc", "engine/vp8_encoder_simulcast_proxy.h", - "engine/webrtcvideodecoderfactory.cc", "engine/webrtcvideodecoderfactory.h", - "engine/webrtcvideoencoderfactory.cc", "engine/webrtcvideoencoderfactory.h", ] @@ -207,6 +199,7 @@ rtc_static_library("rtc_internal_video_codecs") { deps += [ ":rtc_constants", ":rtc_media_base", + ":rtc_software_fallback_wrappers", "..:webrtc_common", "../api:video_frame_api_i420", "../api/video_codecs:video_codecs_api", @@ -227,6 +220,32 @@ rtc_static_library("rtc_internal_video_codecs") { ] } +rtc_static_library("rtc_software_fallback_wrappers") { + sources = [ + "engine/videodecodersoftwarefallbackwrapper.cc", + "engine/videodecodersoftwarefallbackwrapper.h", + "engine/videoencodersoftwarefallbackwrapper.cc", + "engine/videoencodersoftwarefallbackwrapper.h", + ] + + configs += [ ":rtc_media_warnings_config" ] + + 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 = [ + ":rtc_h264_profile_id", + ":rtc_media_base", + "../api/video_codecs:video_codecs_api", + "../modules/video_coding:video_codec_interface", + "../rtc_base:checks", + "../rtc_base:rtc_base_approved", + "../system_wrappers:field_trial_api", + ] +} + rtc_static_library("rtc_audio_video") { visibility = [ "*" ] defines = [] @@ -246,12 +265,18 @@ rtc_static_library("rtc_audio_video") { "engine/nullwebrtcvideoengine.h", "engine/payload_type_mapper.cc", "engine/payload_type_mapper.h", + "engine/simulcast.cc", + "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", + "engine/webrtcvideoencoderfactory.h", "engine/webrtcvideoengine.cc", "engine/webrtcvideoengine.h", "engine/webrtcvoiceengine.cc", @@ -299,10 +324,13 @@ rtc_static_library("rtc_audio_video") { } else { deps += [ "../modules/audio_processing/aec_dump:null_aec_dump_factory" ] } + if (rtc_use_builtin_sw_codecs) { + deps += [ ":rtc_internal_video_codecs" ] + } deps += [ ":rtc_constants", - ":rtc_internal_video_codecs", ":rtc_media_base", + ":rtc_software_fallback_wrappers", "..:webrtc_common", "../api:call_api", "../api:libjingle_peerconnection_api", @@ -598,6 +626,7 @@ if (rtc_include_tests) { ":rtc_media", ":rtc_media_base", ":rtc_media_tests_utils", + ":rtc_software_fallback_wrappers", "../api:libjingle_peerconnection_api", "../api:mock_video_codec_factory", "../api:video_frame_api", @@ -613,7 +642,6 @@ if (rtc_include_tests) { "../modules/audio_processing:audio_processing", "../modules/video_coding:simulcast_test_utility", "../modules/video_coding:video_coding_utility", - "../modules/video_coding:webrtc_vp8", "../modules/video_coding:webrtc_vp8_helpers", "../p2p:p2p_test_utils", "../rtc_base:rtc_base", diff --git a/media/engine/internaldecoderfactory.cc b/media/engine/internaldecoderfactory.cc index e8cecb79a4..04baffd9d5 100644 --- a/media/engine/internaldecoderfactory.cc +++ b/media/engine/internaldecoderfactory.cc @@ -10,10 +10,13 @@ #include "media/engine/internaldecoderfactory.h" +#include "api/video_codecs/sdp_video_format.h" #include "media/base/mediaconstants.h" +#if defined(USE_BUILTIN_SW_CODECS) #include "modules/video_coding/codecs/h264/include/h264.h" -#include "modules/video_coding/codecs/vp8/include/vp8.h" -#include "modules/video_coding/codecs/vp9/include/vp9.h" +#include "modules/video_coding/codecs/vp8/include/vp8.h" // nogncheck +#include "modules/video_coding/codecs/vp9/include/vp9.h" // nogncheck +#endif #include "rtc_base/checks.h" #include "rtc_base/logging.h" @@ -22,16 +25,19 @@ namespace webrtc { std::vector InternalDecoderFactory::GetSupportedFormats() const { std::vector formats; +#if defined(USE_BUILTIN_SW_CODECS) formats.push_back(SdpVideoFormat(cricket::kVp8CodecName)); if (VP9Decoder::IsSupported()) formats.push_back(SdpVideoFormat(cricket::kVp9CodecName)); for (const SdpVideoFormat& h264_format : SupportedH264Codecs()) formats.push_back(h264_format); +#endif return formats; } std::unique_ptr InternalDecoderFactory::CreateVideoDecoder( const SdpVideoFormat& format) { +#if defined(USE_BUILTIN_SW_CODECS) if (cricket::CodecNamesEq(format.name, cricket::kVp8CodecName)) return VP8Decoder::Create(); @@ -42,6 +48,7 @@ std::unique_ptr InternalDecoderFactory::CreateVideoDecoder( if (cricket::CodecNamesEq(format.name, cricket::kH264CodecName)) return H264Decoder::Create(); +#endif RTC_LOG(LS_ERROR) << "Trying to create decoder for unsupported format"; return nullptr; diff --git a/media/engine/internalencoderfactory.cc b/media/engine/internalencoderfactory.cc index 5f8479cfb8..d093b25915 100644 --- a/media/engine/internalencoderfactory.cc +++ b/media/engine/internalencoderfactory.cc @@ -12,9 +12,12 @@ #include +#include "api/video_codecs/sdp_video_format.h" +#if defined(USE_BUILTIN_SW_CODECS) #include "modules/video_coding/codecs/h264/include/h264.h" -#include "modules/video_coding/codecs/vp8/include/vp8.h" -#include "modules/video_coding/codecs/vp9/include/vp9.h" +#include "modules/video_coding/codecs/vp8/include/vp8.h" // nogncheck +#include "modules/video_coding/codecs/vp9/include/vp9.h" // nogncheck +#endif #include "rtc_base/logging.h" namespace webrtc { @@ -22,12 +25,14 @@ namespace webrtc { std::vector InternalEncoderFactory::GetSupportedFormats() const { std::vector supported_codecs; +#if defined(USE_BUILTIN_SW_CODECS) supported_codecs.push_back(SdpVideoFormat(cricket::kVp8CodecName)); if (webrtc::VP9Encoder::IsSupported()) supported_codecs.push_back(SdpVideoFormat(cricket::kVp9CodecName)); for (const webrtc::SdpVideoFormat& format : webrtc::SupportedH264Codecs()) supported_codecs.push_back(format); +#endif return supported_codecs; } @@ -42,6 +47,7 @@ VideoEncoderFactory::CodecInfo InternalEncoderFactory::QueryVideoEncoder( std::unique_ptr InternalEncoderFactory::CreateVideoEncoder( const SdpVideoFormat& format) { +#if defined(USE_BUILTIN_SW_CODECS) if (cricket::CodecNamesEq(format.name, cricket::kVp8CodecName)) return VP8Encoder::Create(); @@ -50,6 +56,7 @@ std::unique_ptr InternalEncoderFactory::CreateVideoEncoder( if (cricket::CodecNamesEq(format.name, cricket::kH264CodecName)) return H264Encoder::Create(cricket::VideoCodec(format)); +#endif RTC_LOG(LS_ERROR) << "Trying to created encoder of unsupported format " << format.name; diff --git a/media/engine/videodecodersoftwarefallbackwrapper.cc b/media/engine/videodecodersoftwarefallbackwrapper.cc index 87fb62239a..1b87b976f5 100644 --- a/media/engine/videodecodersoftwarefallbackwrapper.cc +++ b/media/engine/videodecodersoftwarefallbackwrapper.cc @@ -13,7 +13,6 @@ #include #include -#include "media/engine/internaldecoderfactory.h" #include "modules/video_coding/include/video_error_codes.h" #include "rtc_base/checks.h" #include "rtc_base/logging.h" diff --git a/media/engine/videoencodersoftwarefallbackwrapper.cc b/media/engine/videoencodersoftwarefallbackwrapper.cc index a7a2ed0490..75057a93de 100644 --- a/media/engine/videoencodersoftwarefallbackwrapper.cc +++ b/media/engine/videoencodersoftwarefallbackwrapper.cc @@ -14,7 +14,6 @@ #include #include "media/base/h264_profile_level_id.h" -#include "media/engine/internalencoderfactory.h" #include "modules/video_coding/include/video_error_codes.h" #include "rtc_base/checks.h" #include "rtc_base/logging.h" diff --git a/media/engine/webrtcmediaengine.cc b/media/engine/webrtcmediaengine.cc index 6c6464afcd..338c0d9ed9 100644 --- a/media/engine/webrtcmediaengine.cc +++ b/media/engine/webrtcmediaengine.cc @@ -27,6 +27,7 @@ namespace cricket { +#if defined(USE_BUILTIN_SW_CODECS) namespace { MediaEngineInterface* CreateWebRtcMediaEngine( @@ -86,6 +87,7 @@ MediaEngineInterface* WebRtcMediaEngineFactory::Create( adm, audio_encoder_factory, audio_decoder_factory, video_encoder_factory, video_decoder_factory, audio_mixer, audio_processing); } +#endif std::unique_ptr WebRtcMediaEngineFactory::Create( rtc::scoped_refptr adm, diff --git a/media/engine/webrtcvideoengine.cc b/media/engine/webrtcvideoengine.cc index 2357bdfe8a..42a2a0b86c 100644 --- a/media/engine/webrtcvideoengine.cc +++ b/media/engine/webrtcvideoengine.cc @@ -25,7 +25,9 @@ #include "call/call.h" #include "common_video/h264/profile_level_id.h" #include "media/engine/constants.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/simulcast.h" #include "media/engine/webrtcmediaengine.h" #include "media/engine/webrtcvoiceengine.h" @@ -46,6 +48,7 @@ namespace cricket { // webrtc:7925 is fixed. class DecoderFactoryAdapter { public: +#if defined(USE_BUILTIN_SW_CODECS) explicit DecoderFactoryAdapter( std::unique_ptr external_video_decoder_factory) : cricket_decoder_with_params_(new CricketDecoderWithParams( @@ -53,6 +56,7 @@ class DecoderFactoryAdapter { decoder_factory_(ConvertVideoDecoderFactory( std::unique_ptr( cricket_decoder_with_params_))) {} +#endif explicit DecoderFactoryAdapter( std::unique_ptr video_decoder_factory) @@ -514,6 +518,7 @@ void DefaultUnsignalledSsrcHandler::SetDefaultSink( } } +#if defined(USE_BUILTIN_SW_CODECS) WebRtcVideoEngine::WebRtcVideoEngine( std::unique_ptr external_video_encoder_factory, std::unique_ptr external_video_decoder_factory) @@ -523,6 +528,7 @@ WebRtcVideoEngine::WebRtcVideoEngine( std::move(external_video_encoder_factory))) { RTC_LOG(LS_INFO) << "WebRtcVideoEngine::WebRtcVideoEngine()"; } +#endif WebRtcVideoEngine::WebRtcVideoEngine( std::unique_ptr video_encoder_factory, diff --git a/media/engine/webrtcvideoengine.h b/media/engine/webrtcvideoengine.h index c6f54128eb..231ce67479 100644 --- a/media/engine/webrtcvideoengine.h +++ b/media/engine/webrtcvideoengine.h @@ -96,11 +96,13 @@ class DefaultUnsignalledSsrcHandler : public UnsignalledSsrcHandler { // WebRtcVideoEngine is used for the new native WebRTC Video API (webrtc:1667). class WebRtcVideoEngine { public: +#if defined(USE_BUILTIN_SW_CODECS) // Internal SW video codecs will be added on top of the external codecs. WebRtcVideoEngine( std::unique_ptr external_video_encoder_factory, std::unique_ptr external_video_decoder_factory); +#endif // These video codec factories represents all video codecs, i.e. both software // and external hardware codecs. diff --git a/modules/video_coding/BUILD.gn b/modules/video_coding/BUILD.gn index a588bc6a33..721773d3ae 100644 --- a/modules/video_coding/BUILD.gn +++ b/modules/video_coding/BUILD.gn @@ -10,6 +10,8 @@ import("../../webrtc.gni") rtc_static_library("video_coding") { visibility = [ "*" ] + deps = [] + sources = [ "codec_database.cc", "codec_database.h", @@ -88,16 +90,20 @@ rtc_static_library("video_coding") { suppressed_configs += [ "//build/config/clang:find_bad_constructs" ] } - deps = [ + if (rtc_use_builtin_sw_codecs) { + deps += [ + ":webrtc_i420", + ":webrtc_vp8", + ":webrtc_vp9", + ] + } + + deps += [ ":codec_globals_headers", ":video_codec_interface", ":video_coding_utility", ":webrtc_h264", - ":webrtc_i420", - ":webrtc_multiplex", - ":webrtc_vp8", ":webrtc_vp8_helpers", - ":webrtc_vp9", "..:module_api", "..:module_api_public", "../..:webrtc_common", @@ -320,31 +326,7 @@ rtc_static_library("webrtc_multiplex") { } # This target includes VP8 files that may be used for any VP8 codec, internal SW or external HW. -rtc_source_set("webrtc_vp8_helpers") { - sources = [ - "codecs/vp8/include/vp8_common_types.h", - "codecs/vp8/screenshare_layers.h", - "codecs/vp8/simulcast_rate_allocator.h", - "codecs/vp8/temporal_layers.h", - ] - - deps = [ - ":video_coding_utility", - "..:module_api", - "../..:webrtc_common", - "../../:typedefs", - "../../api/video_codecs:video_codecs_api", - "../../common_video", - "../../rtc_base:checks", - "../../rtc_base:rtc_base_approved", - "../../system_wrappers", - "../../system_wrappers:field_trial_api", - "../../system_wrappers:metrics_api", - ] -} - -# This target includes the internal SW codec. -rtc_static_library("webrtc_vp8") { +rtc_static_library("webrtc_vp8_helpers") { visibility = [ "*" ] sources = [ "codecs/vp8/default_temporal_layers.cc", @@ -352,8 +334,47 @@ rtc_static_library("webrtc_vp8") { "codecs/vp8/include/vp8.h", "codecs/vp8/include/vp8_common_types.h", "codecs/vp8/screenshare_layers.cc", + "codecs/vp8/screenshare_layers.h", "codecs/vp8/simulcast_rate_allocator.cc", + "codecs/vp8/simulcast_rate_allocator.h", "codecs/vp8/temporal_layers.cc", + "codecs/vp8/temporal_layers.h", + ] + + # TODO(jschuh): Bug 1348: fix this warning. + configs += [ "//build/config/compiler:no_size_t_to_int_warning" ] + + 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 = [ + ":video_codec_interface", + ":video_coding_utility", + "..:module_api", + "../..:webrtc_common", + "../../:typedefs", + "../../api:optional", + "../../api:video_frame_api", + "../../api/video_codecs:video_codecs_api", + "../../common_video", + "../../rtc_base:checks", + "../../rtc_base:rtc_base_approved", + "../../rtc_base:rtc_numerics", + "../../system_wrappers", + "../../system_wrappers:field_trial_api", + "../../system_wrappers:metrics_api", + "//third_party/libyuv", + ] +} + +# This target includes the internal SW codec. +rtc_static_library("webrtc_vp8") { + visibility = [ "*" ] + sources = [ + "codecs/vp8/include/vp8.h", + "codecs/vp8/include/vp8_common_types.h", "codecs/vp8/vp8_impl.cc", "codecs/vp8/vp8_impl.h", ] @@ -375,6 +396,7 @@ rtc_static_library("webrtc_vp8") { "../../:typedefs", "../../api:optional", "../../api:video_frame_api", + "../../api/video_codecs:video_codecs_api", "../../common_video", "../../rtc_base:checks", "../../rtc_base:rtc_base_approved", @@ -468,7 +490,6 @@ if (rtc_include_tests) { ":mock_headers", ":video_codec_interface", ":video_coding", - ":webrtc_vp8", ":webrtc_vp8_helpers", "../../api:video_frame_api", "../../api:video_frame_api_i420", @@ -502,7 +523,6 @@ if (rtc_include_tests) { ":video_codec_interface", ":video_coding", ":video_coding_utility", - ":webrtc_vp8", ":webrtc_vp8_helpers", "../..:webrtc_common", "../../:typedefs", @@ -510,7 +530,7 @@ if (rtc_include_tests) { "../../api:video_frame_api_i420", "../../api/video_codecs:video_codecs_api", "../../common_video:common_video", - "../../media:rtc_internal_video_codecs", + "../../media:rtc_audio_video", "../../rtc_base:checks", "../../rtc_base:rtc_base_approved", "../../rtc_base:rtc_task_queue", @@ -562,7 +582,6 @@ if (rtc_include_tests) { ":video_coding_utility", ":webrtc_h264", ":webrtc_multiplex", - ":webrtc_vp8", ":webrtc_vp8_helpers", ":webrtc_vp9", "../..:webrtc_common", @@ -576,6 +595,7 @@ if (rtc_include_tests) { "../../media:rtc_h264_profile_id", "../../media:rtc_internal_video_codecs", "../../media:rtc_media_base", + "../../media:rtc_software_fallback_wrappers", "../../rtc_base:checks", "../../rtc_base:rtc_base", "../../rtc_base:rtc_base_tests_utils", diff --git a/modules/video_coding/codec_database.cc b/modules/video_coding/codec_database.cc index 0108019b56..0cf8d48e15 100644 --- a/modules/video_coding/codec_database.cc +++ b/modules/video_coding/codec_database.cc @@ -10,10 +10,13 @@ #include "modules/video_coding/codec_database.h" +#if defined(USE_BUILTIN_SW_CODECS) #include "modules/video_coding/codecs/h264/include/h264.h" -#include "modules/video_coding/codecs/i420/include/i420.h" -#include "modules/video_coding/codecs/vp8/include/vp8.h" -#include "modules/video_coding/codecs/vp9/include/vp9.h" +#include "modules/video_coding/codecs/i420/include/i420.h" // nogncheck +#include "modules/video_coding/codecs/vp8/include/vp8.h" // nogncheck +#include "modules/video_coding/codecs/vp9/include/vp9.h" // nogncheck +#endif + #include "modules/video_coding/internal_defines.h" #include "rtc_base/checks.h" #include "rtc_base/logging.h" @@ -24,6 +27,7 @@ const size_t kDefaultPayloadSize = 1440; namespace webrtc { +#if defined(USE_BUILTIN_SW_CODECS) // Create an internal Decoder given a codec type static std::unique_ptr CreateDecoder(VideoCodecType type) { switch (type) { @@ -48,6 +52,7 @@ static std::unique_ptr CreateDecoder(VideoCodecType type) { RTC_LOG(LS_WARNING) << "No internal decoder of this type exists."; return std::unique_ptr(); } +#endif VCMDecoderMapItem::VCMDecoderMapItem(VideoCodec* settings, int number_of_cores, @@ -413,8 +418,12 @@ std::unique_ptr VCMCodecDataBase::CreateAndInitDecoder( ptr_decoder.reset(new VCMGenericDecoder( external_dec_item->external_decoder_instance, true)); } else { +#if !defined(USE_BUILTIN_SW_CODECS) + RTC_LOG(LS_ERROR) << "No decoder of this type exists."; +#else // Create decoder. ptr_decoder = CreateDecoder(decoder_item->settings->codecType); +#endif } if (!ptr_decoder) return nullptr; diff --git a/modules/video_coding/video_codec_initializer.cc b/modules/video_coding/video_codec_initializer.cc index 8a86571b82..d81358d492 100644 --- a/modules/video_coding/video_codec_initializer.cc +++ b/modules/video_coding/video_codec_initializer.cc @@ -10,6 +10,7 @@ #include "modules/video_coding/include/video_codec_initializer.h" +#include "api/video_codecs/video_encoder.h" #include "common_types.h" // NOLINT(build/include) #include "common_video/include/video_bitrate_allocator.h" #include "modules/video_coding/codecs/vp8/screenshare_layers.h" diff --git a/modules/video_coding/video_sender.cc b/modules/video_coding/video_sender.cc index 4d21165512..bfc9615493 100644 --- a/modules/video_coding/video_sender.cc +++ b/modules/video_coding/video_sender.cc @@ -14,7 +14,6 @@ #include "common_types.h" // NOLINT(build/include) #include "common_video/include/video_bitrate_allocator.h" #include "common_video/libyuv/include/webrtc_libyuv.h" -#include "modules/video_coding/codecs/vp8/temporal_layers.h" #include "modules/video_coding/encoded_frame.h" #include "modules/video_coding/include/video_codec_interface.h" #include "modules/video_coding/utility/default_video_bitrate_allocator.h" diff --git a/pc/createpeerconnectionfactory.cc b/pc/createpeerconnectionfactory.cc index 3f389af641..48867be238 100644 --- a/pc/createpeerconnectionfactory.cc +++ b/pc/createpeerconnectionfactory.cc @@ -22,6 +22,7 @@ namespace webrtc { +#if defined(USE_BUILTIN_SW_CODECS) rtc::scoped_refptr CreatePeerConnectionFactory( rtc::scoped_refptr audio_encoder_factory, rtc::scoped_refptr audio_decoder_factory) { @@ -66,6 +67,7 @@ rtc::scoped_refptr CreatePeerConnectionFactory( network_thread, worker_thread, signaling_thread, std::move(media_engine), std::move(call_factory), std::move(event_log_factory)); } +#endif rtc::scoped_refptr CreatePeerConnectionFactory( rtc::Thread* network_thread, @@ -97,6 +99,7 @@ rtc::scoped_refptr CreatePeerConnectionFactory( std::move(call_factory), std::move(event_log_factory)); } +#if defined(USE_BUILTIN_SW_CODECS) rtc::scoped_refptr CreatePeerConnectionFactoryWithAudioMixer( rtc::Thread* network_thread, @@ -128,5 +131,6 @@ rtc::scoped_refptr CreatePeerConnectionFactory( audio_encoder_factory, audio_decoder_factory, video_encoder_factory, video_decoder_factory, nullptr); } +#endif } // namespace webrtc diff --git a/sdk/BUILD.gn b/sdk/BUILD.gn index e370a0532c..24f9206f0e 100644 --- a/sdk/BUILD.gn +++ b/sdk/BUILD.gn @@ -320,17 +320,15 @@ if (is_ios || is_mac) { } 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 @@ if (is_ios || is_mac) { 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 @@ if (is_ios || is_mac) { "../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 @@ if (is_ios || is_mac) { ] } + 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 @@ if (is_ios || is_mac) { "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 @@ if (is_ios || is_mac) { 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 @@ if (is_ios || is_mac) { "../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 635d29c9b4..7a6c03636c 100644 --- a/sdk/android/BUILD.gn +++ b/sdk/android/BUILD.gn @@ -145,7 +145,6 @@ rtc_static_library("null_audio_jni") { 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 @@ generate_jni("generated_video_jni") { "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 @@ rtc_static_library("video_jni") { "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 @@ rtc_static_library("video_jni") { ] } - 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 @@ rtc_static_library("video_jni") { "../../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 @@ rtc_static_library("null_video_jni") { ] } +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 @@ rtc_static_library("peerconnection_jni") { # 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 @@ rtc_android_library("libjingle_peerconnection_java") { "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 @@ rtc_android_library("libjingle_peerconnection_java") { "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 @@ rtc_android_library("libjingle_peerconnection_java") { "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 @@ rtc_android_library("libjingle_peerconnection_java") { "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 8d11a36591..4705cf2961 100644 --- a/sdk/android/src/jni/pc/media.cc +++ b/sdk/android/src/jni/pc/media.cc @@ -30,6 +30,7 @@ RtcEventLogFactoryInterface* CreateRtcEventLogFactory() { return webrtc::CreateRtcEventLogFactory().release(); } +#if defined(USE_BUILTIN_SW_CODECS) cricket::MediaEngineInterface* CreateMediaEngine( AudioDeviceModule* adm, const rtc::scoped_refptr& audio_encoder_factory, @@ -42,6 +43,7 @@ cricket::MediaEngineInterface* CreateMediaEngine( adm, audio_encoder_factory, audio_decoder_factory, video_encoder_factory, video_decoder_factory, audio_mixer, audio_processor); } +#endif cricket::MediaEngineInterface* CreateMediaEngine( rtc::scoped_refptr adm, diff --git a/sdk/android/src/jni/pc/peerconnectionfactory.cc b/sdk/android/src/jni/pc/peerconnectionfactory.cc index 33fa95945b..1a7008a426 100644 --- a/sdk/android/src/jni/pc/peerconnectionfactory.cc +++ b/sdk/android/src/jni/pc/peerconnectionfactory.cc @@ -220,6 +220,7 @@ jlong CreatePeerConnectionFactoryForJava( cricket::WebRtcVideoDecoderFactory* legacy_video_decoder_factory = nullptr; std::unique_ptr 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 @@ jlong CreatePeerConnectionFactoryForJava( 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 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( WrapLegacyVideoEncoderFactory(legacy_video_encoder_factory)); +#endif } else { video_encoder_factory = std::unique_ptr( CreateVideoEncoderFactory(jni, jencoder_factory)); @@ -244,9 +248,11 @@ jlong CreatePeerConnectionFactoryForJava( std::unique_ptr 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( WrapLegacyVideoDecoderFactory(legacy_video_decoder_factory)); +#endif } else { video_decoder_factory = std::unique_ptr( CreateVideoDecoderFactory(jni, jdecoder_factory)); @@ -483,12 +489,14 @@ static void JNI_PeerConnectionFactory_SetVideoHwAccelerationOptions( jlong native_factory, const JavaParamRef& local_egl_context, const JavaParamRef& remote_egl_context) { +#if defined(USE_BUILTIN_SW_CODECS) OwnedFactoryAndThreads* owned_factory = reinterpret_cast(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 d3eed5f8d9..06dbc5c483 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 @@ VideoDecoderFactory* CreateVideoDecoderFactory( void SetEglContext(JNIEnv* env, cricket::WebRtcVideoEncoderFactory* encoder_factory, const JavaRef& egl_context) { +#if defined(USE_BUILTIN_SW_CODECS) if (encoder_factory) { MediaCodecVideoEncoderFactory* media_codec_factory = static_cast(encoder_factory); @@ -54,8 +57,14 @@ void SetEglContext(JNIEnv* env, 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& egl_context) { @@ -68,6 +77,7 @@ void SetEglContext(JNIEnv* env, } } } +#endif void* CreateVideoSource(JNIEnv* env, rtc::Thread* signaling_thread, @@ -81,6 +91,7 @@ void* CreateVideoSource(JNIEnv* env, .release(); } +#if defined(USE_BUILTIN_SW_CODECS) cricket::WebRtcVideoEncoderFactory* CreateLegacyVideoEncoderFactory() { return new MediaCodecVideoEncoderFactory(); } @@ -104,6 +115,7 @@ VideoDecoderFactory* WrapLegacyVideoDecoderFactory( 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 3011222972..295a03a610 100644 --- a/sdk/android/src/jni/vp8codec.cc +++ b/sdk/android/src/jni/vp8codec.cc @@ -11,8 +11,8 @@ #include #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 e49d276fef..d9cc387016 100644 --- a/sdk/android/src/jni/vp9codec.cc +++ b/sdk/android/src/jni/vp9codec.cc @@ -11,8 +11,8 @@ #include #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 ba27ad2b29..c412056a4c 100644 --- a/sdk/objc/Framework/Classes/PeerConnection/RTCDefaultVideoDecoderFactory.m +++ b/sdk/objc/Framework/Classes/PeerConnection/RTCDefaultVideoDecoderFactory.m @@ -11,21 +11,25 @@ #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)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 } @@ -35,9 +39,11 @@ - (NSArray *)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 154fac746b..8148fc75c9 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,29 +42,36 @@ [[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)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 } diff --git a/sdk/objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory+Native.h b/sdk/objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory+Native.h index 32e23903b0..3b0e9302dc 100644 --- a/sdk/objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory+Native.h +++ b/sdk/objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory+Native.h @@ -23,12 +23,14 @@ class AudioProcessing; } // 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 @@ NS_ASSUME_NONNULL_BEGIN audioProcessingModule: (rtc::scoped_refptr)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 @@ NS_ASSUME_NONNULL_BEGIN 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 f9c75cfceb..ec9d16c629 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( + new webrtc::ObjCVideoEncoderFactory( + [[RTCVideoEncoderFactoryH264 alloc] init])) + nativeVideoDecoderFactory:std::unique_ptr( + 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( [[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)audioEncoderFactory @@ -190,6 +204,7 @@ return self; #endif } +#endif - (RTCAudioSource *)audioSourceWithConstraints:(nullable RTCMediaConstraints *)constraints { std::unique_ptr nativeConstraints; diff --git a/video/BUILD.gn b/video/BUILD.gn index 5155b78bad..5e597a8caf 100644 --- a/video/BUILD.gn +++ b/video/BUILD.gn @@ -87,7 +87,6 @@ rtc_static_library("video") { "../modules/utility", "../modules/video_coding", "../modules/video_coding:video_coding_utility", - "../modules/video_coding:webrtc_vp8_helpers", "../modules/video_processing", "../rtc_base:rtc_base_approved", "../rtc_base:rtc_numerics", @@ -321,7 +320,6 @@ if (rtc_include_tests) { "../modules/video_coding:video_codec_interface", "../modules/video_coding:video_coding_utility", "../modules/video_coding:webrtc_h264", - "../modules/video_coding:webrtc_vp8", "../modules/video_coding:webrtc_vp8_helpers", "../modules/video_coding:webrtc_vp9", "../rtc_base:checks", diff --git a/video/video_stream_encoder.cc b/video/video_stream_encoder.cc index 65700efda6..9e0a8ae0fc 100644 --- a/video/video_stream_encoder.cc +++ b/video/video_stream_encoder.cc @@ -19,7 +19,6 @@ #include "common_video/include/video_bitrate_allocator.h" #include "common_video/include/video_frame.h" #include "modules/pacing/paced_sender.h" -#include "modules/video_coding/codecs/vp8/temporal_layers.h" #include "modules/video_coding/include/video_codec_initializer.h" #include "modules/video_coding/include/video_coding.h" #include "modules/video_coding/include/video_coding_defines.h" diff --git a/webrtc.gni b/webrtc.gni index fb1d77cadf..5dc2675a69 100644 --- a/webrtc.gni +++ b/webrtc.gni @@ -139,6 +139,9 @@ declare_args() { # as Chromium, must turn this flag off so that WebRTC does not also # initialize. rtc_initialize_ffmpeg = !build_with_chromium + + # Disable this to build without support for built-in software codecs. + rtc_use_builtin_sw_codecs = true } if (!build_with_mozilla) {