Enable building WebRTC without built-in software codecs

This CL adds a GN build flag to include builtin software codecs
(enabled by default).

When setting the flag to false, libvpx can also be excluded. The
benefit is that the resulting binary is smaller.

Replaces https://webrtc-review.googlesource.com/c/src/+/29203

Bug: webrtc:7925
Change-Id: Id330ea8a43169e449ee139eca18e4557cc932e10
Reviewed-on: https://webrtc-review.googlesource.com/36340
Commit-Queue: Anders Carlsson <andersc@webrtc.org>
Reviewed-by: Patrik Höglund <phoglund@webrtc.org>
Reviewed-by: Taylor Brandstetter <deadbeef@webrtc.org>
Reviewed-by: Erik Språng <sprang@webrtc.org>
Reviewed-by: Magnus Jedvert <magjed@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21818}
This commit is contained in:
Anders Carlsson
2018-01-30 10:32:13 +01:00
committed by Commit Bot
parent 70294c8eab
commit dd8c16574e
30 changed files with 383 additions and 117 deletions

View File

@ -212,6 +212,10 @@ config("common_config") {
defines += [ "ENABLE_EXTERNAL_AUTH" ] defines += [ "ENABLE_EXTERNAL_AUTH" ]
} }
if (rtc_use_builtin_sw_codecs) {
defines += [ "USE_BUILTIN_SW_CODECS" ]
}
if (build_with_chromium) { if (build_with_chromium) {
defines += [ defines += [
# NOTICE: Since common_inherited_config is used in public_configs for our # NOTICE: Since common_inherited_config is used in public_configs for our

View File

@ -695,7 +695,6 @@ if (is_win || is_android) {
"../api:video_frame_api", "../api:video_frame_api",
"../api/audio_codecs:builtin_audio_decoder_factory", "../api/audio_codecs:builtin_audio_decoder_factory",
"../api/audio_codecs:builtin_audio_encoder_factory", "../api/audio_codecs:builtin_audio_encoder_factory",
"../common_video",
"../media:rtc_audio_video", "../media:rtc_audio_video",
"../media:rtc_internal_video_codecs", "../media:rtc_internal_video_codecs",
"../media:rtc_media", "../media:rtc_media",

View File

@ -18,7 +18,7 @@
#include "api/videosourceproxy.h" #include "api/videosourceproxy.h"
#include "media/engine/internaldecoderfactory.h" #include "media/engine/internaldecoderfactory.h"
#include "media/engine/internalencoderfactory.h" #include "media/engine/internalencoderfactory.h"
#include "media/engine/stereocodecfactory.h" #include "media/engine/multiplexcodecfactory.h"
#include "media/engine/webrtcvideocapturerfactory.h" #include "media/engine/webrtcvideocapturerfactory.h"
#include "media/engine/webrtcvideodecoderfactory.h" #include "media/engine/webrtcvideodecoderfactory.h"
#include "media/engine/webrtcvideoencoderfactory.h" #include "media/engine/webrtcvideoencoderfactory.h"
@ -104,10 +104,10 @@ bool SimplePeerConnection::InitializePeerConnection(const char** turn_urls,
nullptr, webrtc::CreateBuiltinAudioEncoderFactory(), nullptr, webrtc::CreateBuiltinAudioEncoderFactory(),
webrtc::CreateBuiltinAudioDecoderFactory(), webrtc::CreateBuiltinAudioDecoderFactory(),
std::unique_ptr<webrtc::VideoEncoderFactory>( std::unique_ptr<webrtc::VideoEncoderFactory>(
new webrtc::StereoEncoderFactory( new webrtc::MultiplexEncoderFactory(
rtc::MakeUnique<webrtc::InternalEncoderFactory>())), rtc::MakeUnique<webrtc::InternalEncoderFactory>())),
std::unique_ptr<webrtc::VideoDecoderFactory>( std::unique_ptr<webrtc::VideoDecoderFactory>(
new webrtc::StereoDecoderFactory( new webrtc::MultiplexDecoderFactory(
rtc::MakeUnique<webrtc::InternalDecoderFactory>())), rtc::MakeUnique<webrtc::InternalDecoderFactory>())),
nullptr, nullptr); nullptr, nullptr);
} }

View File

@ -170,19 +170,11 @@ rtc_static_library("rtc_internal_video_codecs") {
"engine/scopedvideodecoder.h", "engine/scopedvideodecoder.h",
"engine/scopedvideoencoder.cc", "engine/scopedvideoencoder.cc",
"engine/scopedvideoencoder.h", "engine/scopedvideoencoder.h",
"engine/simulcast.cc",
"engine/simulcast.h",
"engine/simulcast_encoder_adapter.cc", "engine/simulcast_encoder_adapter.cc",
"engine/simulcast_encoder_adapter.h", "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.cc",
"engine/vp8_encoder_simulcast_proxy.h", "engine/vp8_encoder_simulcast_proxy.h",
"engine/webrtcvideodecoderfactory.cc",
"engine/webrtcvideodecoderfactory.h", "engine/webrtcvideodecoderfactory.h",
"engine/webrtcvideoencoderfactory.cc",
"engine/webrtcvideoencoderfactory.h", "engine/webrtcvideoencoderfactory.h",
] ]
@ -207,6 +199,7 @@ rtc_static_library("rtc_internal_video_codecs") {
deps += [ deps += [
":rtc_constants", ":rtc_constants",
":rtc_media_base", ":rtc_media_base",
":rtc_software_fallback_wrappers",
"..:webrtc_common", "..:webrtc_common",
"../api:video_frame_api_i420", "../api:video_frame_api_i420",
"../api/video_codecs:video_codecs_api", "../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") { rtc_static_library("rtc_audio_video") {
visibility = [ "*" ] visibility = [ "*" ]
defines = [] defines = []
@ -246,12 +265,18 @@ rtc_static_library("rtc_audio_video") {
"engine/nullwebrtcvideoengine.h", "engine/nullwebrtcvideoengine.h",
"engine/payload_type_mapper.cc", "engine/payload_type_mapper.cc",
"engine/payload_type_mapper.h", "engine/payload_type_mapper.h",
"engine/simulcast.cc",
"engine/simulcast.h",
"engine/webrtcmediaengine.cc", "engine/webrtcmediaengine.cc",
"engine/webrtcmediaengine.h", "engine/webrtcmediaengine.h",
"engine/webrtcvideocapturer.cc", "engine/webrtcvideocapturer.cc",
"engine/webrtcvideocapturer.h", "engine/webrtcvideocapturer.h",
"engine/webrtcvideocapturerfactory.cc", "engine/webrtcvideocapturerfactory.cc",
"engine/webrtcvideocapturerfactory.h", "engine/webrtcvideocapturerfactory.h",
"engine/webrtcvideodecoderfactory.cc",
"engine/webrtcvideodecoderfactory.h",
"engine/webrtcvideoencoderfactory.cc",
"engine/webrtcvideoencoderfactory.h",
"engine/webrtcvideoengine.cc", "engine/webrtcvideoengine.cc",
"engine/webrtcvideoengine.h", "engine/webrtcvideoengine.h",
"engine/webrtcvoiceengine.cc", "engine/webrtcvoiceengine.cc",
@ -299,10 +324,13 @@ rtc_static_library("rtc_audio_video") {
} else { } else {
deps += [ "../modules/audio_processing/aec_dump:null_aec_dump_factory" ] deps += [ "../modules/audio_processing/aec_dump:null_aec_dump_factory" ]
} }
if (rtc_use_builtin_sw_codecs) {
deps += [ ":rtc_internal_video_codecs" ]
}
deps += [ deps += [
":rtc_constants", ":rtc_constants",
":rtc_internal_video_codecs",
":rtc_media_base", ":rtc_media_base",
":rtc_software_fallback_wrappers",
"..:webrtc_common", "..:webrtc_common",
"../api:call_api", "../api:call_api",
"../api:libjingle_peerconnection_api", "../api:libjingle_peerconnection_api",
@ -598,6 +626,7 @@ if (rtc_include_tests) {
":rtc_media", ":rtc_media",
":rtc_media_base", ":rtc_media_base",
":rtc_media_tests_utils", ":rtc_media_tests_utils",
":rtc_software_fallback_wrappers",
"../api:libjingle_peerconnection_api", "../api:libjingle_peerconnection_api",
"../api:mock_video_codec_factory", "../api:mock_video_codec_factory",
"../api:video_frame_api", "../api:video_frame_api",
@ -613,7 +642,6 @@ if (rtc_include_tests) {
"../modules/audio_processing:audio_processing", "../modules/audio_processing:audio_processing",
"../modules/video_coding:simulcast_test_utility", "../modules/video_coding:simulcast_test_utility",
"../modules/video_coding:video_coding_utility", "../modules/video_coding:video_coding_utility",
"../modules/video_coding:webrtc_vp8",
"../modules/video_coding:webrtc_vp8_helpers", "../modules/video_coding:webrtc_vp8_helpers",
"../p2p:p2p_test_utils", "../p2p:p2p_test_utils",
"../rtc_base:rtc_base", "../rtc_base:rtc_base",

View File

@ -10,10 +10,13 @@
#include "media/engine/internaldecoderfactory.h" #include "media/engine/internaldecoderfactory.h"
#include "api/video_codecs/sdp_video_format.h"
#include "media/base/mediaconstants.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/h264/include/h264.h"
#include "modules/video_coding/codecs/vp8/include/vp8.h" #include "modules/video_coding/codecs/vp8/include/vp8.h" // nogncheck
#include "modules/video_coding/codecs/vp9/include/vp9.h" #include "modules/video_coding/codecs/vp9/include/vp9.h" // nogncheck
#endif
#include "rtc_base/checks.h" #include "rtc_base/checks.h"
#include "rtc_base/logging.h" #include "rtc_base/logging.h"
@ -22,16 +25,19 @@ namespace webrtc {
std::vector<SdpVideoFormat> InternalDecoderFactory::GetSupportedFormats() std::vector<SdpVideoFormat> InternalDecoderFactory::GetSupportedFormats()
const { const {
std::vector<SdpVideoFormat> formats; std::vector<SdpVideoFormat> formats;
#if defined(USE_BUILTIN_SW_CODECS)
formats.push_back(SdpVideoFormat(cricket::kVp8CodecName)); formats.push_back(SdpVideoFormat(cricket::kVp8CodecName));
if (VP9Decoder::IsSupported()) if (VP9Decoder::IsSupported())
formats.push_back(SdpVideoFormat(cricket::kVp9CodecName)); formats.push_back(SdpVideoFormat(cricket::kVp9CodecName));
for (const SdpVideoFormat& h264_format : SupportedH264Codecs()) for (const SdpVideoFormat& h264_format : SupportedH264Codecs())
formats.push_back(h264_format); formats.push_back(h264_format);
#endif
return formats; return formats;
} }
std::unique_ptr<VideoDecoder> InternalDecoderFactory::CreateVideoDecoder( std::unique_ptr<VideoDecoder> InternalDecoderFactory::CreateVideoDecoder(
const SdpVideoFormat& format) { const SdpVideoFormat& format) {
#if defined(USE_BUILTIN_SW_CODECS)
if (cricket::CodecNamesEq(format.name, cricket::kVp8CodecName)) if (cricket::CodecNamesEq(format.name, cricket::kVp8CodecName))
return VP8Decoder::Create(); return VP8Decoder::Create();
@ -42,6 +48,7 @@ std::unique_ptr<VideoDecoder> InternalDecoderFactory::CreateVideoDecoder(
if (cricket::CodecNamesEq(format.name, cricket::kH264CodecName)) if (cricket::CodecNamesEq(format.name, cricket::kH264CodecName))
return H264Decoder::Create(); return H264Decoder::Create();
#endif
RTC_LOG(LS_ERROR) << "Trying to create decoder for unsupported format"; RTC_LOG(LS_ERROR) << "Trying to create decoder for unsupported format";
return nullptr; return nullptr;

View File

@ -12,9 +12,12 @@
#include <utility> #include <utility>
#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/h264/include/h264.h"
#include "modules/video_coding/codecs/vp8/include/vp8.h" #include "modules/video_coding/codecs/vp8/include/vp8.h" // nogncheck
#include "modules/video_coding/codecs/vp9/include/vp9.h" #include "modules/video_coding/codecs/vp9/include/vp9.h" // nogncheck
#endif
#include "rtc_base/logging.h" #include "rtc_base/logging.h"
namespace webrtc { namespace webrtc {
@ -22,12 +25,14 @@ namespace webrtc {
std::vector<SdpVideoFormat> InternalEncoderFactory::GetSupportedFormats() std::vector<SdpVideoFormat> InternalEncoderFactory::GetSupportedFormats()
const { const {
std::vector<SdpVideoFormat> supported_codecs; std::vector<SdpVideoFormat> supported_codecs;
#if defined(USE_BUILTIN_SW_CODECS)
supported_codecs.push_back(SdpVideoFormat(cricket::kVp8CodecName)); supported_codecs.push_back(SdpVideoFormat(cricket::kVp8CodecName));
if (webrtc::VP9Encoder::IsSupported()) if (webrtc::VP9Encoder::IsSupported())
supported_codecs.push_back(SdpVideoFormat(cricket::kVp9CodecName)); supported_codecs.push_back(SdpVideoFormat(cricket::kVp9CodecName));
for (const webrtc::SdpVideoFormat& format : webrtc::SupportedH264Codecs()) for (const webrtc::SdpVideoFormat& format : webrtc::SupportedH264Codecs())
supported_codecs.push_back(format); supported_codecs.push_back(format);
#endif
return supported_codecs; return supported_codecs;
} }
@ -42,6 +47,7 @@ VideoEncoderFactory::CodecInfo InternalEncoderFactory::QueryVideoEncoder(
std::unique_ptr<VideoEncoder> InternalEncoderFactory::CreateVideoEncoder( std::unique_ptr<VideoEncoder> InternalEncoderFactory::CreateVideoEncoder(
const SdpVideoFormat& format) { const SdpVideoFormat& format) {
#if defined(USE_BUILTIN_SW_CODECS)
if (cricket::CodecNamesEq(format.name, cricket::kVp8CodecName)) if (cricket::CodecNamesEq(format.name, cricket::kVp8CodecName))
return VP8Encoder::Create(); return VP8Encoder::Create();
@ -50,6 +56,7 @@ std::unique_ptr<VideoEncoder> InternalEncoderFactory::CreateVideoEncoder(
if (cricket::CodecNamesEq(format.name, cricket::kH264CodecName)) if (cricket::CodecNamesEq(format.name, cricket::kH264CodecName))
return H264Encoder::Create(cricket::VideoCodec(format)); return H264Encoder::Create(cricket::VideoCodec(format));
#endif
RTC_LOG(LS_ERROR) << "Trying to created encoder of unsupported format " RTC_LOG(LS_ERROR) << "Trying to created encoder of unsupported format "
<< format.name; << format.name;

View File

@ -13,7 +13,6 @@
#include <string> #include <string>
#include <utility> #include <utility>
#include "media/engine/internaldecoderfactory.h"
#include "modules/video_coding/include/video_error_codes.h" #include "modules/video_coding/include/video_error_codes.h"
#include "rtc_base/checks.h" #include "rtc_base/checks.h"
#include "rtc_base/logging.h" #include "rtc_base/logging.h"

View File

@ -14,7 +14,6 @@
#include <utility> #include <utility>
#include "media/base/h264_profile_level_id.h" #include "media/base/h264_profile_level_id.h"
#include "media/engine/internalencoderfactory.h"
#include "modules/video_coding/include/video_error_codes.h" #include "modules/video_coding/include/video_error_codes.h"
#include "rtc_base/checks.h" #include "rtc_base/checks.h"
#include "rtc_base/logging.h" #include "rtc_base/logging.h"

View File

@ -27,6 +27,7 @@
namespace cricket { namespace cricket {
#if defined(USE_BUILTIN_SW_CODECS)
namespace { namespace {
MediaEngineInterface* CreateWebRtcMediaEngine( MediaEngineInterface* CreateWebRtcMediaEngine(
@ -86,6 +87,7 @@ MediaEngineInterface* WebRtcMediaEngineFactory::Create(
adm, audio_encoder_factory, audio_decoder_factory, video_encoder_factory, adm, audio_encoder_factory, audio_decoder_factory, video_encoder_factory,
video_decoder_factory, audio_mixer, audio_processing); video_decoder_factory, audio_mixer, audio_processing);
} }
#endif
std::unique_ptr<MediaEngineInterface> WebRtcMediaEngineFactory::Create( std::unique_ptr<MediaEngineInterface> WebRtcMediaEngineFactory::Create(
rtc::scoped_refptr<webrtc::AudioDeviceModule> adm, rtc::scoped_refptr<webrtc::AudioDeviceModule> adm,

View File

@ -25,7 +25,9 @@
#include "call/call.h" #include "call/call.h"
#include "common_video/h264/profile_level_id.h" #include "common_video/h264/profile_level_id.h"
#include "media/engine/constants.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/simulcast.h"
#include "media/engine/webrtcmediaengine.h" #include "media/engine/webrtcmediaengine.h"
#include "media/engine/webrtcvoiceengine.h" #include "media/engine/webrtcvoiceengine.h"
@ -46,6 +48,7 @@ namespace cricket {
// webrtc:7925 is fixed. // webrtc:7925 is fixed.
class DecoderFactoryAdapter { class DecoderFactoryAdapter {
public: public:
#if defined(USE_BUILTIN_SW_CODECS)
explicit DecoderFactoryAdapter( explicit DecoderFactoryAdapter(
std::unique_ptr<WebRtcVideoDecoderFactory> external_video_decoder_factory) std::unique_ptr<WebRtcVideoDecoderFactory> external_video_decoder_factory)
: cricket_decoder_with_params_(new CricketDecoderWithParams( : cricket_decoder_with_params_(new CricketDecoderWithParams(
@ -53,6 +56,7 @@ class DecoderFactoryAdapter {
decoder_factory_(ConvertVideoDecoderFactory( decoder_factory_(ConvertVideoDecoderFactory(
std::unique_ptr<WebRtcVideoDecoderFactory>( std::unique_ptr<WebRtcVideoDecoderFactory>(
cricket_decoder_with_params_))) {} cricket_decoder_with_params_))) {}
#endif
explicit DecoderFactoryAdapter( explicit DecoderFactoryAdapter(
std::unique_ptr<webrtc::VideoDecoderFactory> video_decoder_factory) std::unique_ptr<webrtc::VideoDecoderFactory> video_decoder_factory)
@ -514,6 +518,7 @@ void DefaultUnsignalledSsrcHandler::SetDefaultSink(
} }
} }
#if defined(USE_BUILTIN_SW_CODECS)
WebRtcVideoEngine::WebRtcVideoEngine( WebRtcVideoEngine::WebRtcVideoEngine(
std::unique_ptr<WebRtcVideoEncoderFactory> external_video_encoder_factory, std::unique_ptr<WebRtcVideoEncoderFactory> external_video_encoder_factory,
std::unique_ptr<WebRtcVideoDecoderFactory> external_video_decoder_factory) std::unique_ptr<WebRtcVideoDecoderFactory> external_video_decoder_factory)
@ -523,6 +528,7 @@ WebRtcVideoEngine::WebRtcVideoEngine(
std::move(external_video_encoder_factory))) { std::move(external_video_encoder_factory))) {
RTC_LOG(LS_INFO) << "WebRtcVideoEngine::WebRtcVideoEngine()"; RTC_LOG(LS_INFO) << "WebRtcVideoEngine::WebRtcVideoEngine()";
} }
#endif
WebRtcVideoEngine::WebRtcVideoEngine( WebRtcVideoEngine::WebRtcVideoEngine(
std::unique_ptr<webrtc::VideoEncoderFactory> video_encoder_factory, std::unique_ptr<webrtc::VideoEncoderFactory> video_encoder_factory,

View File

@ -96,11 +96,13 @@ class DefaultUnsignalledSsrcHandler : public UnsignalledSsrcHandler {
// WebRtcVideoEngine is used for the new native WebRTC Video API (webrtc:1667). // WebRtcVideoEngine is used for the new native WebRTC Video API (webrtc:1667).
class WebRtcVideoEngine { class WebRtcVideoEngine {
public: public:
#if defined(USE_BUILTIN_SW_CODECS)
// Internal SW video codecs will be added on top of the external codecs. // Internal SW video codecs will be added on top of the external codecs.
WebRtcVideoEngine( WebRtcVideoEngine(
std::unique_ptr<WebRtcVideoEncoderFactory> external_video_encoder_factory, std::unique_ptr<WebRtcVideoEncoderFactory> external_video_encoder_factory,
std::unique_ptr<WebRtcVideoDecoderFactory> std::unique_ptr<WebRtcVideoDecoderFactory>
external_video_decoder_factory); external_video_decoder_factory);
#endif
// These video codec factories represents all video codecs, i.e. both software // These video codec factories represents all video codecs, i.e. both software
// and external hardware codecs. // and external hardware codecs.

View File

@ -10,6 +10,8 @@ import("../../webrtc.gni")
rtc_static_library("video_coding") { rtc_static_library("video_coding") {
visibility = [ "*" ] visibility = [ "*" ]
deps = []
sources = [ sources = [
"codec_database.cc", "codec_database.cc",
"codec_database.h", "codec_database.h",
@ -88,16 +90,20 @@ rtc_static_library("video_coding") {
suppressed_configs += [ "//build/config/clang:find_bad_constructs" ] 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", ":codec_globals_headers",
":video_codec_interface", ":video_codec_interface",
":video_coding_utility", ":video_coding_utility",
":webrtc_h264", ":webrtc_h264",
":webrtc_i420",
":webrtc_multiplex",
":webrtc_vp8",
":webrtc_vp8_helpers", ":webrtc_vp8_helpers",
":webrtc_vp9",
"..:module_api", "..:module_api",
"..:module_api_public", "..:module_api_public",
"../..:webrtc_common", "../..: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. # This target includes VP8 files that may be used for any VP8 codec, internal SW or external HW.
rtc_source_set("webrtc_vp8_helpers") { rtc_static_library("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") {
visibility = [ "*" ] visibility = [ "*" ]
sources = [ sources = [
"codecs/vp8/default_temporal_layers.cc", "codecs/vp8/default_temporal_layers.cc",
@ -352,8 +334,47 @@ rtc_static_library("webrtc_vp8") {
"codecs/vp8/include/vp8.h", "codecs/vp8/include/vp8.h",
"codecs/vp8/include/vp8_common_types.h", "codecs/vp8/include/vp8_common_types.h",
"codecs/vp8/screenshare_layers.cc", "codecs/vp8/screenshare_layers.cc",
"codecs/vp8/screenshare_layers.h",
"codecs/vp8/simulcast_rate_allocator.cc", "codecs/vp8/simulcast_rate_allocator.cc",
"codecs/vp8/simulcast_rate_allocator.h",
"codecs/vp8/temporal_layers.cc", "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.cc",
"codecs/vp8/vp8_impl.h", "codecs/vp8/vp8_impl.h",
] ]
@ -375,6 +396,7 @@ rtc_static_library("webrtc_vp8") {
"../../:typedefs", "../../:typedefs",
"../../api:optional", "../../api:optional",
"../../api:video_frame_api", "../../api:video_frame_api",
"../../api/video_codecs:video_codecs_api",
"../../common_video", "../../common_video",
"../../rtc_base:checks", "../../rtc_base:checks",
"../../rtc_base:rtc_base_approved", "../../rtc_base:rtc_base_approved",
@ -468,7 +490,6 @@ if (rtc_include_tests) {
":mock_headers", ":mock_headers",
":video_codec_interface", ":video_codec_interface",
":video_coding", ":video_coding",
":webrtc_vp8",
":webrtc_vp8_helpers", ":webrtc_vp8_helpers",
"../../api:video_frame_api", "../../api:video_frame_api",
"../../api:video_frame_api_i420", "../../api:video_frame_api_i420",
@ -502,7 +523,6 @@ if (rtc_include_tests) {
":video_codec_interface", ":video_codec_interface",
":video_coding", ":video_coding",
":video_coding_utility", ":video_coding_utility",
":webrtc_vp8",
":webrtc_vp8_helpers", ":webrtc_vp8_helpers",
"../..:webrtc_common", "../..:webrtc_common",
"../../:typedefs", "../../:typedefs",
@ -510,7 +530,7 @@ if (rtc_include_tests) {
"../../api:video_frame_api_i420", "../../api:video_frame_api_i420",
"../../api/video_codecs:video_codecs_api", "../../api/video_codecs:video_codecs_api",
"../../common_video:common_video", "../../common_video:common_video",
"../../media:rtc_internal_video_codecs", "../../media:rtc_audio_video",
"../../rtc_base:checks", "../../rtc_base:checks",
"../../rtc_base:rtc_base_approved", "../../rtc_base:rtc_base_approved",
"../../rtc_base:rtc_task_queue", "../../rtc_base:rtc_task_queue",
@ -562,7 +582,6 @@ if (rtc_include_tests) {
":video_coding_utility", ":video_coding_utility",
":webrtc_h264", ":webrtc_h264",
":webrtc_multiplex", ":webrtc_multiplex",
":webrtc_vp8",
":webrtc_vp8_helpers", ":webrtc_vp8_helpers",
":webrtc_vp9", ":webrtc_vp9",
"../..:webrtc_common", "../..:webrtc_common",
@ -576,6 +595,7 @@ if (rtc_include_tests) {
"../../media:rtc_h264_profile_id", "../../media:rtc_h264_profile_id",
"../../media:rtc_internal_video_codecs", "../../media:rtc_internal_video_codecs",
"../../media:rtc_media_base", "../../media:rtc_media_base",
"../../media:rtc_software_fallback_wrappers",
"../../rtc_base:checks", "../../rtc_base:checks",
"../../rtc_base:rtc_base", "../../rtc_base:rtc_base",
"../../rtc_base:rtc_base_tests_utils", "../../rtc_base:rtc_base_tests_utils",

View File

@ -10,10 +10,13 @@
#include "modules/video_coding/codec_database.h" #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/h264/include/h264.h"
#include "modules/video_coding/codecs/i420/include/i420.h" #include "modules/video_coding/codecs/i420/include/i420.h" // nogncheck
#include "modules/video_coding/codecs/vp8/include/vp8.h" #include "modules/video_coding/codecs/vp8/include/vp8.h" // nogncheck
#include "modules/video_coding/codecs/vp9/include/vp9.h" #include "modules/video_coding/codecs/vp9/include/vp9.h" // nogncheck
#endif
#include "modules/video_coding/internal_defines.h" #include "modules/video_coding/internal_defines.h"
#include "rtc_base/checks.h" #include "rtc_base/checks.h"
#include "rtc_base/logging.h" #include "rtc_base/logging.h"
@ -24,6 +27,7 @@ const size_t kDefaultPayloadSize = 1440;
namespace webrtc { namespace webrtc {
#if defined(USE_BUILTIN_SW_CODECS)
// Create an internal Decoder given a codec type // Create an internal Decoder given a codec type
static std::unique_ptr<VCMGenericDecoder> CreateDecoder(VideoCodecType type) { static std::unique_ptr<VCMGenericDecoder> CreateDecoder(VideoCodecType type) {
switch (type) { switch (type) {
@ -48,6 +52,7 @@ static std::unique_ptr<VCMGenericDecoder> CreateDecoder(VideoCodecType type) {
RTC_LOG(LS_WARNING) << "No internal decoder of this type exists."; RTC_LOG(LS_WARNING) << "No internal decoder of this type exists.";
return std::unique_ptr<VCMGenericDecoder>(); return std::unique_ptr<VCMGenericDecoder>();
} }
#endif
VCMDecoderMapItem::VCMDecoderMapItem(VideoCodec* settings, VCMDecoderMapItem::VCMDecoderMapItem(VideoCodec* settings,
int number_of_cores, int number_of_cores,
@ -413,8 +418,12 @@ std::unique_ptr<VCMGenericDecoder> VCMCodecDataBase::CreateAndInitDecoder(
ptr_decoder.reset(new VCMGenericDecoder( ptr_decoder.reset(new VCMGenericDecoder(
external_dec_item->external_decoder_instance, true)); external_dec_item->external_decoder_instance, true));
} else { } else {
#if !defined(USE_BUILTIN_SW_CODECS)
RTC_LOG(LS_ERROR) << "No decoder of this type exists.";
#else
// Create decoder. // Create decoder.
ptr_decoder = CreateDecoder(decoder_item->settings->codecType); ptr_decoder = CreateDecoder(decoder_item->settings->codecType);
#endif
} }
if (!ptr_decoder) if (!ptr_decoder)
return nullptr; return nullptr;

View File

@ -10,6 +10,7 @@
#include "modules/video_coding/include/video_codec_initializer.h" #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_types.h" // NOLINT(build/include)
#include "common_video/include/video_bitrate_allocator.h" #include "common_video/include/video_bitrate_allocator.h"
#include "modules/video_coding/codecs/vp8/screenshare_layers.h" #include "modules/video_coding/codecs/vp8/screenshare_layers.h"

View File

@ -14,7 +14,6 @@
#include "common_types.h" // NOLINT(build/include) #include "common_types.h" // NOLINT(build/include)
#include "common_video/include/video_bitrate_allocator.h" #include "common_video/include/video_bitrate_allocator.h"
#include "common_video/libyuv/include/webrtc_libyuv.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/encoded_frame.h"
#include "modules/video_coding/include/video_codec_interface.h" #include "modules/video_coding/include/video_codec_interface.h"
#include "modules/video_coding/utility/default_video_bitrate_allocator.h" #include "modules/video_coding/utility/default_video_bitrate_allocator.h"

View File

@ -22,6 +22,7 @@
namespace webrtc { namespace webrtc {
#if defined(USE_BUILTIN_SW_CODECS)
rtc::scoped_refptr<PeerConnectionFactoryInterface> CreatePeerConnectionFactory( rtc::scoped_refptr<PeerConnectionFactoryInterface> CreatePeerConnectionFactory(
rtc::scoped_refptr<AudioEncoderFactory> audio_encoder_factory, rtc::scoped_refptr<AudioEncoderFactory> audio_encoder_factory,
rtc::scoped_refptr<AudioDecoderFactory> audio_decoder_factory) { rtc::scoped_refptr<AudioDecoderFactory> audio_decoder_factory) {
@ -66,6 +67,7 @@ rtc::scoped_refptr<PeerConnectionFactoryInterface> CreatePeerConnectionFactory(
network_thread, worker_thread, signaling_thread, std::move(media_engine), network_thread, worker_thread, signaling_thread, std::move(media_engine),
std::move(call_factory), std::move(event_log_factory)); std::move(call_factory), std::move(event_log_factory));
} }
#endif
rtc::scoped_refptr<PeerConnectionFactoryInterface> CreatePeerConnectionFactory( rtc::scoped_refptr<PeerConnectionFactoryInterface> CreatePeerConnectionFactory(
rtc::Thread* network_thread, rtc::Thread* network_thread,
@ -97,6 +99,7 @@ rtc::scoped_refptr<PeerConnectionFactoryInterface> CreatePeerConnectionFactory(
std::move(call_factory), std::move(event_log_factory)); std::move(call_factory), std::move(event_log_factory));
} }
#if defined(USE_BUILTIN_SW_CODECS)
rtc::scoped_refptr<PeerConnectionFactoryInterface> rtc::scoped_refptr<PeerConnectionFactoryInterface>
CreatePeerConnectionFactoryWithAudioMixer( CreatePeerConnectionFactoryWithAudioMixer(
rtc::Thread* network_thread, rtc::Thread* network_thread,
@ -128,5 +131,6 @@ rtc::scoped_refptr<PeerConnectionFactoryInterface> CreatePeerConnectionFactory(
audio_encoder_factory, audio_decoder_factory, video_encoder_factory, audio_encoder_factory, audio_decoder_factory, video_encoder_factory,
video_decoder_factory, nullptr); video_decoder_factory, nullptr);
} }
#endif
} // namespace webrtc } // namespace webrtc

View File

@ -320,17 +320,15 @@ if (is_ios || is_mac) {
} }
rtc_static_library("peerconnectionfactory_objc") { rtc_static_library("peerconnectionfactory_objc") {
sources = [ sources = []
"objc/Framework/Classes/PeerConnection/RTCDefaultVideoDecoderFactory.m", deps = []
"objc/Framework/Classes/PeerConnection/RTCDefaultVideoEncoderFactory.m",
sources += [
"objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory+Native.h", "objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory+Native.h",
"objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory+Private.h", "objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory+Private.h",
"objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory.mm", "objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory.mm",
"objc/Framework/Classes/PeerConnection/RTCVideoCodecH264.mm", "objc/Framework/Classes/PeerConnection/RTCVideoCodecH264.mm",
"objc/Framework/Classes/PeerConnection/RTCVideoCodecVP8.mm",
"objc/Framework/Classes/PeerConnection/RTCVideoCodecVP9.mm",
] ]
public_configs = [ ":common_config_objc" ] public_configs = [ ":common_config_objc" ]
if (!build_with_chromium && is_clang) { if (!build_with_chromium && is_clang) {
@ -339,9 +337,10 @@ if (is_ios || is_mac) {
suppressed_configs += [ "//build/config/clang:find_bad_constructs" ] suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
} }
deps = [ deps += [
":common_objc", ":common_objc",
":corevideoframebuffer_objc", ":corevideoframebuffer_objc",
":default_codec_factory_objc",
":peerconnectionfactory_base_objc", ":peerconnectionfactory_base_objc",
":video_objc", ":video_objc",
":videotoolbox_objc", ":videotoolbox_objc",
@ -354,8 +353,6 @@ if (is_ios || is_mac) {
"../api/video_codecs:video_codecs_api", "../api/video_codecs:video_codecs_api",
"../media:rtc_audio_video", "../media:rtc_audio_video",
"../media:rtc_media_base", "../media:rtc_media_base",
"../modules/video_coding:webrtc_vp8",
"../modules/video_coding:webrtc_vp9",
"../pc:create_pc_factory", "../pc:create_pc_factory",
"../pc:peerconnection", "../pc:peerconnection",
"../rtc_base:rtc_base", "../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. # Build the PeerConnectionFactory without audio/video support.
# This target depends on the objc_peeerconnectionfactory_base which still # This target depends on the objc_peeerconnectionfactory_base which still
# includes some audio/video related objects such as RTCAudioSource because # 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/RTCTracing.h",
"objc/Framework/Headers/WebRTC/RTCVideoCapturer.h", "objc/Framework/Headers/WebRTC/RTCVideoCapturer.h",
"objc/Framework/Headers/WebRTC/RTCVideoCodecH264.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/RTCVideoFrame.h",
"objc/Framework/Headers/WebRTC/RTCVideoFrameBuffer.h", "objc/Framework/Headers/WebRTC/RTCVideoFrameBuffer.h",
"objc/Framework/Headers/WebRTC/RTCVideoRenderer.h", "objc/Framework/Headers/WebRTC/RTCVideoRenderer.h",
@ -727,6 +773,14 @@ if (is_ios || is_mac) {
common_objc_headers += common_objc_headers +=
[ "objc/Framework/Headers/WebRTC/RTCMTLVideoView.h" ] [ "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 sources = common_objc_headers
public_headers = common_objc_headers public_headers = common_objc_headers
@ -848,13 +902,11 @@ if (is_ios || is_mac) {
"../api/video_codecs:video_codecs_api", "../api/video_codecs:video_codecs_api",
"../common_video", "../common_video",
"../media:rtc_audio_video", "../media:rtc_audio_video",
"../media:rtc_internal_video_codecs",
"../media:rtc_media", "../media:rtc_media",
"../media:rtc_media_base", "../media:rtc_media_base",
"../modules:module_api", "../modules:module_api",
"../modules/video_coding:video_codec_interface", "../modules/video_coding:video_codec_interface",
"../modules/video_coding:video_coding_utility", "../modules/video_coding:video_coding_utility",
"../modules/video_coding:webrtc_h264",
"../rtc_base:checks", "../rtc_base:checks",
"../rtc_base:rtc_base_approved", "../rtc_base:rtc_base_approved",
"../system_wrappers", "../system_wrappers",

View File

@ -145,7 +145,6 @@ rtc_static_library("null_audio_jni") {
generate_jni("generated_video_jni") { generate_jni("generated_video_jni") {
sources = [ sources = [
"api/org/webrtc/EncodedImage.java", "api/org/webrtc/EncodedImage.java",
"api/org/webrtc/HardwareVideoEncoderFactory.java",
"api/org/webrtc/MediaCodecVideoDecoder.java", "api/org/webrtc/MediaCodecVideoDecoder.java",
"api/org/webrtc/MediaCodecVideoEncoder.java", "api/org/webrtc/MediaCodecVideoEncoder.java",
"api/org/webrtc/SurfaceTextureHelper.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/EglBase14.java",
"src/java/org/webrtc/NV12Buffer.java", "src/java/org/webrtc/NV12Buffer.java",
"src/java/org/webrtc/NV21Buffer.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/VideoDecoderWrapper.java",
"src/java/org/webrtc/VideoEncoderWrapper.java", "src/java/org/webrtc/VideoEncoderWrapper.java",
"src/java/org/webrtc/WrappedNativeI420Buffer.java", "src/java/org/webrtc/WrappedNativeI420Buffer.java",
"src/java/org/webrtc/WrappedNativeVideoDecoder.java", "src/java/org/webrtc/WrappedNativeVideoDecoder.java",
"src/java/org/webrtc/WrappedNativeVideoEncoder.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_package = ""
jni_generator_include = "//sdk/android/src/jni/jni_generator_helper.h" jni_generator_include = "//sdk/android/src/jni/jni_generator_helper.h"
} }
rtc_static_library("video_jni") { rtc_static_library("video_jni") {
sources = [ sources = []
"src/jni/androidmediacodeccommon.h", deps = []
"src/jni/androidmediadecoder.cc",
"src/jni/androidmediadecoder_jni.h", sources += [
"src/jni/androidmediaencoder.cc",
"src/jni/androidmediaencoder_jni.h",
"src/jni/androidvideotracksource.cc", "src/jni/androidvideotracksource.cc",
"src/jni/androidvideotracksource.h", "src/jni/androidvideotracksource.h",
"src/jni/encodedimage.cc", "src/jni/encodedimage.cc",
@ -217,8 +213,6 @@ rtc_static_library("video_jni") {
"src/jni/videoframe.cc", "src/jni/videoframe.cc",
"src/jni/videoframe.h", "src/jni/videoframe.h",
"src/jni/videotrack.cc", "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.cc",
"src/jni/wrapped_native_i420_buffer.h", "src/jni/wrapped_native_i420_buffer.h",
"src/jni/wrappednativecodec.cc", "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", ":base_jni",
":generated_video_jni", ":generated_video_jni",
":native_api_jni", ":native_api_jni",
@ -257,15 +266,13 @@ rtc_static_library("video_jni") {
"../../common_video:common_video", "../../common_video:common_video",
"../../media:rtc_audio_video", "../../media:rtc_audio_video",
"../../media:rtc_h264_profile_id", "../../media:rtc_h264_profile_id",
"../../media:rtc_internal_video_codecs",
"../../media:rtc_media_base", "../../media:rtc_media_base",
"../../media:rtc_software_fallback_wrappers",
"../../modules:module_api", "../../modules:module_api",
"../../modules/utility:utility", "../../modules/utility:utility",
"../../modules/video_coding:codec_globals_headers", "../../modules/video_coding:codec_globals_headers",
"../../modules/video_coding:video_codec_interface", "../../modules/video_coding:video_codec_interface",
"../../modules/video_coding:video_coding_utility", "../../modules/video_coding:video_coding_utility",
"../../modules/video_coding:webrtc_vp8",
"../../modules/video_coding:webrtc_vp9",
"../../rtc_base:checks", "../../rtc_base:checks",
"../../rtc_base:rtc_base", "../../rtc_base:rtc_base",
"../../rtc_base:rtc_base_approved", "../../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") { rtc_static_library("media_jni") {
sources = [ sources = [
"src/jni/pc/media.cc", "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 # made public because we don't have a proper NDK yet. Header APIs here are not
# considered public and are subject to change. # considered public and are subject to change.
visibility = [ "*" ] visibility = [ "*" ]
sources = [ sources = [
"src/jni/androidnetworkmonitor_jni.h", "src/jni/androidnetworkmonitor_jni.h",
"src/jni/pc/androidnetworkmonitor.cc", "src/jni/pc/androidnetworkmonitor.cc",
@ -567,8 +635,6 @@ rtc_android_library("libjingle_peerconnection_java") {
"api/org/webrtc/CameraEnumerator.java", "api/org/webrtc/CameraEnumerator.java",
"api/org/webrtc/CameraVideoCapturer.java", "api/org/webrtc/CameraVideoCapturer.java",
"api/org/webrtc/DataChannel.java", "api/org/webrtc/DataChannel.java",
"api/org/webrtc/DefaultVideoDecoderFactory.java",
"api/org/webrtc/DefaultVideoEncoderFactory.java",
"api/org/webrtc/DtmfSender.java", "api/org/webrtc/DtmfSender.java",
"api/org/webrtc/EglBase.java", "api/org/webrtc/EglBase.java",
"api/org/webrtc/EglRenderer.java", "api/org/webrtc/EglRenderer.java",
@ -578,8 +644,6 @@ rtc_android_library("libjingle_peerconnection_java") {
"api/org/webrtc/GlShader.java", "api/org/webrtc/GlShader.java",
"api/org/webrtc/GlTextureFrameBuffer.java", "api/org/webrtc/GlTextureFrameBuffer.java",
"api/org/webrtc/GlUtil.java", "api/org/webrtc/GlUtil.java",
"api/org/webrtc/HardwareVideoDecoderFactory.java",
"api/org/webrtc/HardwareVideoEncoderFactory.java",
"api/org/webrtc/IceCandidate.java", "api/org/webrtc/IceCandidate.java",
"api/org/webrtc/JavaI420Buffer.java", "api/org/webrtc/JavaI420Buffer.java",
"api/org/webrtc/MediaCodecVideoDecoder.java", "api/org/webrtc/MediaCodecVideoDecoder.java",
@ -604,8 +668,6 @@ rtc_android_library("libjingle_peerconnection_java") {
"api/org/webrtc/ScreenCapturerAndroid.java", "api/org/webrtc/ScreenCapturerAndroid.java",
"api/org/webrtc/SdpObserver.java", "api/org/webrtc/SdpObserver.java",
"api/org/webrtc/SessionDescription.java", "api/org/webrtc/SessionDescription.java",
"api/org/webrtc/SoftwareVideoDecoderFactory.java",
"api/org/webrtc/SoftwareVideoEncoderFactory.java",
"api/org/webrtc/StatsObserver.java", "api/org/webrtc/StatsObserver.java",
"api/org/webrtc/StatsReport.java", "api/org/webrtc/StatsReport.java",
"api/org/webrtc/SurfaceEglRenderer.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/WrappedNativeI420Buffer.java",
"src/java/org/webrtc/WrappedNativeVideoEncoder.java", "src/java/org/webrtc/WrappedNativeVideoEncoder.java",
"src/java/org/webrtc/WrappedNativeVideoDecoder.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 = [ deps = [
"../../modules/audio_device:audio_device_java", "../../modules/audio_device:audio_device_java",

View File

@ -30,6 +30,7 @@ RtcEventLogFactoryInterface* CreateRtcEventLogFactory() {
return webrtc::CreateRtcEventLogFactory().release(); return webrtc::CreateRtcEventLogFactory().release();
} }
#if defined(USE_BUILTIN_SW_CODECS)
cricket::MediaEngineInterface* CreateMediaEngine( cricket::MediaEngineInterface* CreateMediaEngine(
AudioDeviceModule* adm, AudioDeviceModule* adm,
const rtc::scoped_refptr<AudioEncoderFactory>& audio_encoder_factory, const rtc::scoped_refptr<AudioEncoderFactory>& audio_encoder_factory,
@ -42,6 +43,7 @@ cricket::MediaEngineInterface* CreateMediaEngine(
adm, audio_encoder_factory, audio_decoder_factory, video_encoder_factory, adm, audio_encoder_factory, audio_decoder_factory, video_encoder_factory,
video_decoder_factory, audio_mixer, audio_processor); video_decoder_factory, audio_mixer, audio_processor);
} }
#endif
cricket::MediaEngineInterface* CreateMediaEngine( cricket::MediaEngineInterface* CreateMediaEngine(
rtc::scoped_refptr<AudioDeviceModule> adm, rtc::scoped_refptr<AudioDeviceModule> adm,

View File

@ -220,6 +220,7 @@ jlong CreatePeerConnectionFactoryForJava(
cricket::WebRtcVideoDecoderFactory* legacy_video_decoder_factory = nullptr; cricket::WebRtcVideoDecoderFactory* legacy_video_decoder_factory = nullptr;
std::unique_ptr<cricket::MediaEngineInterface> media_engine; std::unique_ptr<cricket::MediaEngineInterface> media_engine;
if (jencoder_factory.is_null() && jdecoder_factory.is_null()) { 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 // This uses the legacy API, which automatically uses the internal SW
// codecs in WebRTC. // codecs in WebRTC.
if (video_hw_acceleration_enabled) { if (video_hw_acceleration_enabled) {
@ -230,13 +231,16 @@ jlong CreatePeerConnectionFactoryForJava(
adm, audio_encoder_factory, audio_decoder_factory, adm, audio_encoder_factory, audio_decoder_factory,
legacy_video_encoder_factory, legacy_video_decoder_factory, audio_mixer, legacy_video_encoder_factory, legacy_video_decoder_factory, audio_mixer,
audio_processor)); audio_processor));
#endif
} else { } else {
// This uses the new API, does not automatically include software codecs. // This uses the new API, does not automatically include software codecs.
std::unique_ptr<VideoEncoderFactory> video_encoder_factory = nullptr; std::unique_ptr<VideoEncoderFactory> video_encoder_factory = nullptr;
if (jencoder_factory.is_null()) { if (jencoder_factory.is_null()) {
#if defined(USE_BUILTIN_SW_CODECS)
legacy_video_encoder_factory = CreateLegacyVideoEncoderFactory(); legacy_video_encoder_factory = CreateLegacyVideoEncoderFactory();
video_encoder_factory = std::unique_ptr<VideoEncoderFactory>( video_encoder_factory = std::unique_ptr<VideoEncoderFactory>(
WrapLegacyVideoEncoderFactory(legacy_video_encoder_factory)); WrapLegacyVideoEncoderFactory(legacy_video_encoder_factory));
#endif
} else { } else {
video_encoder_factory = std::unique_ptr<VideoEncoderFactory>( video_encoder_factory = std::unique_ptr<VideoEncoderFactory>(
CreateVideoEncoderFactory(jni, jencoder_factory)); CreateVideoEncoderFactory(jni, jencoder_factory));
@ -244,9 +248,11 @@ jlong CreatePeerConnectionFactoryForJava(
std::unique_ptr<VideoDecoderFactory> video_decoder_factory = nullptr; std::unique_ptr<VideoDecoderFactory> video_decoder_factory = nullptr;
if (jdecoder_factory.is_null()) { if (jdecoder_factory.is_null()) {
#if defined(USE_BUILTIN_SW_CODECS)
legacy_video_decoder_factory = CreateLegacyVideoDecoderFactory(); legacy_video_decoder_factory = CreateLegacyVideoDecoderFactory();
video_decoder_factory = std::unique_ptr<VideoDecoderFactory>( video_decoder_factory = std::unique_ptr<VideoDecoderFactory>(
WrapLegacyVideoDecoderFactory(legacy_video_decoder_factory)); WrapLegacyVideoDecoderFactory(legacy_video_decoder_factory));
#endif
} else { } else {
video_decoder_factory = std::unique_ptr<VideoDecoderFactory>( video_decoder_factory = std::unique_ptr<VideoDecoderFactory>(
CreateVideoDecoderFactory(jni, jdecoder_factory)); CreateVideoDecoderFactory(jni, jdecoder_factory));
@ -483,12 +489,14 @@ static void JNI_PeerConnectionFactory_SetVideoHwAccelerationOptions(
jlong native_factory, jlong native_factory,
const JavaParamRef<jobject>& local_egl_context, const JavaParamRef<jobject>& local_egl_context,
const JavaParamRef<jobject>& remote_egl_context) { const JavaParamRef<jobject>& remote_egl_context) {
#if defined(USE_BUILTIN_SW_CODECS)
OwnedFactoryAndThreads* owned_factory = OwnedFactoryAndThreads* owned_factory =
reinterpret_cast<OwnedFactoryAndThreads*>(native_factory); reinterpret_cast<OwnedFactoryAndThreads*>(native_factory);
SetEglContext(jni, owned_factory->legacy_encoder_factory(), SetEglContext(jni, owned_factory->legacy_encoder_factory(),
local_egl_context); local_egl_context);
SetEglContext(jni, owned_factory->legacy_decoder_factory(), SetEglContext(jni, owned_factory->legacy_decoder_factory(),
remote_egl_context); remote_egl_context);
#endif
} }
static jlong JNI_PeerConnectionFactory_GetNativePeerConnectionFactory( static jlong JNI_PeerConnectionFactory_GetNativePeerConnectionFactory(

View File

@ -16,7 +16,9 @@
#include "api/video_codecs/video_decoder_factory.h" #include "api/video_codecs/video_decoder_factory.h"
#include "api/video_codecs/video_encoder_factory.h" #include "api/video_codecs/video_encoder_factory.h"
#include "api/videosourceproxy.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/webrtcvideodecoderfactory.h"
#include "media/engine/webrtcvideoencoderfactory.h" #include "media/engine/webrtcvideoencoderfactory.h"
#include "rtc_base/logging.h" #include "rtc_base/logging.h"
@ -46,6 +48,7 @@ VideoDecoderFactory* CreateVideoDecoderFactory(
void SetEglContext(JNIEnv* env, void SetEglContext(JNIEnv* env,
cricket::WebRtcVideoEncoderFactory* encoder_factory, cricket::WebRtcVideoEncoderFactory* encoder_factory,
const JavaRef<jobject>& egl_context) { const JavaRef<jobject>& egl_context) {
#if defined(USE_BUILTIN_SW_CODECS)
if (encoder_factory) { if (encoder_factory) {
MediaCodecVideoEncoderFactory* media_codec_factory = MediaCodecVideoEncoderFactory* media_codec_factory =
static_cast<MediaCodecVideoEncoderFactory*>(encoder_factory); static_cast<MediaCodecVideoEncoderFactory*>(encoder_factory);
@ -54,8 +57,14 @@ void SetEglContext(JNIEnv* env,
media_codec_factory->SetEGLContext(env, egl_context.obj()); 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, void SetEglContext(JNIEnv* env,
cricket::WebRtcVideoDecoderFactory* decoder_factory, cricket::WebRtcVideoDecoderFactory* decoder_factory,
const JavaRef<jobject>& egl_context) { const JavaRef<jobject>& egl_context) {
@ -68,6 +77,7 @@ void SetEglContext(JNIEnv* env,
} }
} }
} }
#endif
void* CreateVideoSource(JNIEnv* env, void* CreateVideoSource(JNIEnv* env,
rtc::Thread* signaling_thread, rtc::Thread* signaling_thread,
@ -81,6 +91,7 @@ void* CreateVideoSource(JNIEnv* env,
.release(); .release();
} }
#if defined(USE_BUILTIN_SW_CODECS)
cricket::WebRtcVideoEncoderFactory* CreateLegacyVideoEncoderFactory() { cricket::WebRtcVideoEncoderFactory* CreateLegacyVideoEncoderFactory() {
return new MediaCodecVideoEncoderFactory(); return new MediaCodecVideoEncoderFactory();
} }
@ -104,6 +115,7 @@ VideoDecoderFactory* WrapLegacyVideoDecoderFactory(
legacy_decoder_factory)) legacy_decoder_factory))
.release(); .release();
} }
#endif
} // namespace jni } // namespace jni
} // namespace webrtc } // namespace webrtc

View File

@ -11,8 +11,8 @@
#include <jni.h> #include <jni.h>
#include "modules/video_coding/codecs/vp8/include/vp8.h" #include "modules/video_coding/codecs/vp8/include/vp8.h"
#include "sdk/android/generated_video_jni/jni/VP8Decoder_jni.h" #include "sdk/android/generated_vp8_jni/jni/VP8Decoder_jni.h"
#include "sdk/android/generated_video_jni/jni/VP8Encoder_jni.h" #include "sdk/android/generated_vp8_jni/jni/VP8Encoder_jni.h"
#include "sdk/android/src/jni/jni_helpers.h" #include "sdk/android/src/jni/jni_helpers.h"
namespace webrtc { namespace webrtc {

View File

@ -11,8 +11,8 @@
#include <jni.h> #include <jni.h>
#include "modules/video_coding/codecs/vp9/include/vp9.h" #include "modules/video_coding/codecs/vp9/include/vp9.h"
#include "sdk/android/generated_video_jni/jni/VP9Decoder_jni.h" #include "sdk/android/generated_vp9_jni/jni/VP9Decoder_jni.h"
#include "sdk/android/generated_video_jni/jni/VP9Encoder_jni.h" #include "sdk/android/generated_vp9_jni/jni/VP9Encoder_jni.h"
#include "sdk/android/src/jni/jni_helpers.h" #include "sdk/android/src/jni/jni_helpers.h"
namespace webrtc { namespace webrtc {

View File

@ -11,21 +11,25 @@
#import "WebRTC/RTCVideoCodecFactory.h" #import "WebRTC/RTCVideoCodecFactory.h"
#import "WebRTC/RTCVideoCodecH264.h" #import "WebRTC/RTCVideoCodecH264.h"
#if defined(USE_BUILTIN_SW_CODECS)
#import "WebRTC/RTCVideoDecoderVP8.h" #import "WebRTC/RTCVideoDecoderVP8.h"
#if !defined(RTC_DISABLE_VP9) #if !defined(RTC_DISABLE_VP9)
#import "WebRTC/RTCVideoDecoderVP9.h" #import "WebRTC/RTCVideoDecoderVP9.h"
#endif #endif
#endif
@implementation RTCDefaultVideoDecoderFactory @implementation RTCDefaultVideoDecoderFactory
- (id<RTCVideoDecoder>)createDecoder:(RTCVideoCodecInfo *)info { - (id<RTCVideoDecoder>)createDecoder:(RTCVideoCodecInfo *)info {
if ([info.name isEqualToString:kRTCVideoCodecH264Name]) { if ([info.name isEqualToString:kRTCVideoCodecH264Name]) {
return [[RTCVideoDecoderH264 alloc] init]; return [[RTCVideoDecoderH264 alloc] init];
#if defined(USE_BUILTIN_SW_CODECS)
} else if ([info.name isEqualToString:kRTCVideoCodecVp8Name]) { } else if ([info.name isEqualToString:kRTCVideoCodecVp8Name]) {
return [RTCVideoDecoderVP8 vp8Decoder]; return [RTCVideoDecoderVP8 vp8Decoder];
#if !defined(RTC_DISABLE_VP9) #if !defined(RTC_DISABLE_VP9)
} else if ([info.name isEqualToString:kRTCVideoCodecVp9Name]) { } else if ([info.name isEqualToString:kRTCVideoCodecVp9Name]) {
return [RTCVideoDecoderVP9 vp9Decoder]; return [RTCVideoDecoderVP9 vp9Decoder];
#endif
#endif #endif
} }
@ -35,9 +39,11 @@
- (NSArray<RTCVideoCodecInfo *> *)supportedCodecs { - (NSArray<RTCVideoCodecInfo *> *)supportedCodecs {
return @[ return @[
[[RTCVideoCodecInfo alloc] initWithName:kRTCVideoCodecH264Name], [[RTCVideoCodecInfo alloc] initWithName:kRTCVideoCodecH264Name],
#if defined(USE_BUILTIN_SW_CODECS)
[[RTCVideoCodecInfo alloc] initWithName:kRTCVideoCodecVp8Name], [[RTCVideoCodecInfo alloc] initWithName:kRTCVideoCodecVp8Name],
#if !defined(RTC_DISABLE_VP9) #if !defined(RTC_DISABLE_VP9)
[[RTCVideoCodecInfo alloc] initWithName:kRTCVideoCodecVp9Name] [[RTCVideoCodecInfo alloc] initWithName:kRTCVideoCodecVp9Name],
#endif
#endif #endif
]; ];
} }

View File

@ -12,10 +12,12 @@
#import "WebRTC/RTCVideoCodec.h" #import "WebRTC/RTCVideoCodec.h"
#import "WebRTC/RTCVideoCodecH264.h" #import "WebRTC/RTCVideoCodecH264.h"
#if defined(USE_BUILTIN_SW_CODECS)
#import "WebRTC/RTCVideoEncoderVP8.h" #import "WebRTC/RTCVideoEncoderVP8.h"
#if !defined(RTC_DISABLE_VP9) #if !defined(RTC_DISABLE_VP9)
#import "WebRTC/RTCVideoEncoderVP9.h" #import "WebRTC/RTCVideoEncoderVP9.h"
#endif #endif
#endif
@implementation RTCDefaultVideoEncoderFactory @implementation RTCDefaultVideoEncoderFactory
@ -40,29 +42,36 @@
[[RTCVideoCodecInfo alloc] initWithName:kRTCVideoCodecH264Name [[RTCVideoCodecInfo alloc] initWithName:kRTCVideoCodecH264Name
parameters:constrainedBaselineParams]; parameters:constrainedBaselineParams];
#if defined(USE_BUILTIN_SW_CODECS)
RTCVideoCodecInfo *vp8Info = [[RTCVideoCodecInfo alloc] initWithName:kRTCVideoCodecVp8Name]; RTCVideoCodecInfo *vp8Info = [[RTCVideoCodecInfo alloc] initWithName:kRTCVideoCodecVp8Name];
#if !defined(RTC_DISABLE_VP9) #if !defined(RTC_DISABLE_VP9)
RTCVideoCodecInfo *vp9Info = [[RTCVideoCodecInfo alloc] initWithName:kRTCVideoCodecVp9Name]; RTCVideoCodecInfo *vp9Info = [[RTCVideoCodecInfo alloc] initWithName:kRTCVideoCodecVp9Name];
#endif #endif
return @[ constrainedHighInfo,
constrainedBaselineInfo,
vp8Info,
#if !defined(RTC_DISABLE_VP9)
vp9Info
#endif #endif
];
return @[
constrainedHighInfo,
constrainedBaselineInfo,
#if defined(USE_BUILTIN_SW_CODECS)
vp8Info,
#if !defined(RTC_DISABLE_VP9)
vp9Info,
#endif
#endif
];
} }
- (id<RTCVideoEncoder>)createEncoder:(RTCVideoCodecInfo *)info { - (id<RTCVideoEncoder>)createEncoder:(RTCVideoCodecInfo *)info {
if ([info.name isEqualToString:kRTCVideoCodecH264Name]) { if ([info.name isEqualToString:kRTCVideoCodecH264Name]) {
return [[RTCVideoEncoderH264 alloc] initWithCodecInfo:info]; return [[RTCVideoEncoderH264 alloc] initWithCodecInfo:info];
#if defined(USE_BUILTIN_SW_CODECS)
} else if ([info.name isEqualToString:kRTCVideoCodecVp8Name]) { } else if ([info.name isEqualToString:kRTCVideoCodecVp8Name]) {
return [RTCVideoEncoderVP8 vp8Encoder]; return [RTCVideoEncoderVP8 vp8Encoder];
#if !defined(RTC_DISABLE_VP9) #if !defined(RTC_DISABLE_VP9)
} else if ([info.name isEqualToString:kRTCVideoCodecVp9Name]) { } else if ([info.name isEqualToString:kRTCVideoCodecVp9Name]) {
return [RTCVideoEncoderVP9 vp9Encoder]; return [RTCVideoEncoderVP9 vp9Encoder];
#endif
#endif #endif
} }

View File

@ -23,12 +23,14 @@ class AudioProcessing;
} // namespace webrtc } // namespace webrtc
#if defined(USE_BUILTIN_SW_CODECS)
namespace cricket { namespace cricket {
class WebRtcVideoEncoderFactory; class WebRtcVideoEncoderFactory;
class WebRtcVideoDecoderFactory; class WebRtcVideoDecoderFactory;
} // namespace cricket } // namespace cricket
#endif
NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_BEGIN
@ -56,6 +58,7 @@ NS_ASSUME_NONNULL_BEGIN
audioProcessingModule: audioProcessingModule:
(rtc::scoped_refptr<webrtc::AudioProcessing>)audioProcessingModule; (rtc::scoped_refptr<webrtc::AudioProcessing>)audioProcessingModule;
#if defined(USE_BUILTIN_SW_CODECS)
/* Initialize object with legacy injectable native audio/video encoder/decoder factories /* Initialize object with legacy injectable native audio/video encoder/decoder factories
TODO(andersc): Remove this when backwards compatiblity is no longer needed. TODO(andersc): Remove this when backwards compatiblity is no longer needed.
*/ */
@ -67,6 +70,7 @@ NS_ASSUME_NONNULL_BEGIN
legacyNativeVideoEncoderFactory:(cricket::WebRtcVideoEncoderFactory*)videoEncoderFactory legacyNativeVideoEncoderFactory:(cricket::WebRtcVideoEncoderFactory*)videoEncoderFactory
legacyNativeVideoDecoderFactory:(cricket::WebRtcVideoDecoderFactory*)videoDecoderFactory legacyNativeVideoDecoderFactory:(cricket::WebRtcVideoDecoderFactory*)videoDecoderFactory
audioDeviceModule:(nullable webrtc::AudioDeviceModule *)audioDeviceModule; audioDeviceModule:(nullable webrtc::AudioDeviceModule *)audioDeviceModule;
#endif
@end @end

View File

@ -58,6 +58,17 @@
- (instancetype)init { - (instancetype)init {
#ifdef HAVE_NO_MEDIA #ifdef HAVE_NO_MEDIA
return [self initWithNoMedia]; return [self initWithNoMedia];
#elif !defined(USE_BUILTIN_SW_CODECS)
return [self initWithNativeAudioEncoderFactory:webrtc::CreateBuiltinAudioEncoderFactory()
nativeAudioDecoderFactory:webrtc::CreateBuiltinAudioDecoderFactory()
nativeVideoEncoderFactory:std::unique_ptr<webrtc::VideoEncoderFactory>(
new webrtc::ObjCVideoEncoderFactory(
[[RTCVideoEncoderFactoryH264 alloc] init]))
nativeVideoDecoderFactory:std::unique_ptr<webrtc::VideoDecoderFactory>(
new webrtc::ObjCVideoDecoderFactory(
[[RTCVideoDecoderFactoryH264 alloc] init]))
audioDeviceModule:nullptr
audioProcessingModule:nullptr];
#else #else
return [self initWithNativeAudioEncoderFactory:webrtc::CreateBuiltinAudioEncoderFactory() return [self initWithNativeAudioEncoderFactory:webrtc::CreateBuiltinAudioEncoderFactory()
nativeAudioDecoderFactory:webrtc::CreateBuiltinAudioDecoderFactory() nativeAudioDecoderFactory:webrtc::CreateBuiltinAudioDecoderFactory()
@ -139,6 +150,7 @@
return [self initWithNoMedia]; return [self initWithNoMedia];
#else #else
if (self = [self initNative]) { if (self = [self initNative]) {
#if defined(USE_BUILTIN_SW_CODECS)
if (!videoEncoderFactory) { if (!videoEncoderFactory) {
auto legacy_video_encoder_factory = rtc::MakeUnique<webrtc::ObjCVideoEncoderFactory>( auto legacy_video_encoder_factory = rtc::MakeUnique<webrtc::ObjCVideoEncoderFactory>(
[[RTCVideoEncoderFactoryH264 alloc] init]); [[RTCVideoEncoderFactoryH264 alloc] init]);
@ -149,6 +161,7 @@
[[RTCVideoDecoderFactoryH264 alloc] init]); [[RTCVideoDecoderFactoryH264 alloc] init]);
videoDecoderFactory = ConvertVideoDecoderFactory(std::move(legacy_video_decoder_factory)); videoDecoderFactory = ConvertVideoDecoderFactory(std::move(legacy_video_decoder_factory));
} }
#endif
_nativeFactory = webrtc::CreatePeerConnectionFactory(_networkThread.get(), _nativeFactory = webrtc::CreatePeerConnectionFactory(_networkThread.get(),
_workerThread.get(), _workerThread.get(),
_signalingThread.get(), _signalingThread.get(),
@ -165,6 +178,7 @@
#endif #endif
} }
#if defined(USE_BUILTIN_SW_CODECS)
- (instancetype) - (instancetype)
initWithNativeAudioEncoderFactory: initWithNativeAudioEncoderFactory:
(rtc::scoped_refptr<webrtc::AudioEncoderFactory>)audioEncoderFactory (rtc::scoped_refptr<webrtc::AudioEncoderFactory>)audioEncoderFactory
@ -190,6 +204,7 @@
return self; return self;
#endif #endif
} }
#endif
- (RTCAudioSource *)audioSourceWithConstraints:(nullable RTCMediaConstraints *)constraints { - (RTCAudioSource *)audioSourceWithConstraints:(nullable RTCMediaConstraints *)constraints {
std::unique_ptr<webrtc::MediaConstraints> nativeConstraints; std::unique_ptr<webrtc::MediaConstraints> nativeConstraints;

View File

@ -87,7 +87,6 @@ rtc_static_library("video") {
"../modules/utility", "../modules/utility",
"../modules/video_coding", "../modules/video_coding",
"../modules/video_coding:video_coding_utility", "../modules/video_coding:video_coding_utility",
"../modules/video_coding:webrtc_vp8_helpers",
"../modules/video_processing", "../modules/video_processing",
"../rtc_base:rtc_base_approved", "../rtc_base:rtc_base_approved",
"../rtc_base:rtc_numerics", "../rtc_base:rtc_numerics",
@ -321,7 +320,6 @@ if (rtc_include_tests) {
"../modules/video_coding:video_codec_interface", "../modules/video_coding:video_codec_interface",
"../modules/video_coding:video_coding_utility", "../modules/video_coding:video_coding_utility",
"../modules/video_coding:webrtc_h264", "../modules/video_coding:webrtc_h264",
"../modules/video_coding:webrtc_vp8",
"../modules/video_coding:webrtc_vp8_helpers", "../modules/video_coding:webrtc_vp8_helpers",
"../modules/video_coding:webrtc_vp9", "../modules/video_coding:webrtc_vp9",
"../rtc_base:checks", "../rtc_base:checks",

View File

@ -19,7 +19,6 @@
#include "common_video/include/video_bitrate_allocator.h" #include "common_video/include/video_bitrate_allocator.h"
#include "common_video/include/video_frame.h" #include "common_video/include/video_frame.h"
#include "modules/pacing/paced_sender.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_codec_initializer.h"
#include "modules/video_coding/include/video_coding.h" #include "modules/video_coding/include/video_coding.h"
#include "modules/video_coding/include/video_coding_defines.h" #include "modules/video_coding/include/video_coding_defines.h"

View File

@ -139,6 +139,9 @@ declare_args() {
# as Chromium, must turn this flag off so that WebRTC does not also # as Chromium, must turn this flag off so that WebRTC does not also
# initialize. # initialize.
rtc_initialize_ffmpeg = !build_with_chromium 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) { if (!build_with_mozilla) {