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) {