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:
parent
70294c8eab
commit
dd8c16574e
4
BUILD.gn
4
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
|
||||
|
||||
@ -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",
|
||||
|
||||
@ -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<webrtc::VideoEncoderFactory>(
|
||||
new webrtc::StereoEncoderFactory(
|
||||
new webrtc::MultiplexEncoderFactory(
|
||||
rtc::MakeUnique<webrtc::InternalEncoderFactory>())),
|
||||
std::unique_ptr<webrtc::VideoDecoderFactory>(
|
||||
new webrtc::StereoDecoderFactory(
|
||||
new webrtc::MultiplexDecoderFactory(
|
||||
rtc::MakeUnique<webrtc::InternalDecoderFactory>())),
|
||||
nullptr, nullptr);
|
||||
}
|
||||
|
||||
@ -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",
|
||||
|
||||
@ -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<SdpVideoFormat> InternalDecoderFactory::GetSupportedFormats()
|
||||
const {
|
||||
std::vector<SdpVideoFormat> 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<VideoDecoder> 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<VideoDecoder> 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;
|
||||
|
||||
@ -12,9 +12,12 @@
|
||||
|
||||
#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/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<SdpVideoFormat> InternalEncoderFactory::GetSupportedFormats()
|
||||
const {
|
||||
std::vector<SdpVideoFormat> 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<VideoEncoder> 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<VideoEncoder> 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;
|
||||
|
||||
@ -13,7 +13,6 @@
|
||||
#include <string>
|
||||
#include <utility>
|
||||
|
||||
#include "media/engine/internaldecoderfactory.h"
|
||||
#include "modules/video_coding/include/video_error_codes.h"
|
||||
#include "rtc_base/checks.h"
|
||||
#include "rtc_base/logging.h"
|
||||
|
||||
@ -14,7 +14,6 @@
|
||||
#include <utility>
|
||||
|
||||
#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"
|
||||
|
||||
@ -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<MediaEngineInterface> WebRtcMediaEngineFactory::Create(
|
||||
rtc::scoped_refptr<webrtc::AudioDeviceModule> adm,
|
||||
|
||||
@ -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<WebRtcVideoDecoderFactory> external_video_decoder_factory)
|
||||
: cricket_decoder_with_params_(new CricketDecoderWithParams(
|
||||
@ -53,6 +56,7 @@ class DecoderFactoryAdapter {
|
||||
decoder_factory_(ConvertVideoDecoderFactory(
|
||||
std::unique_ptr<WebRtcVideoDecoderFactory>(
|
||||
cricket_decoder_with_params_))) {}
|
||||
#endif
|
||||
|
||||
explicit DecoderFactoryAdapter(
|
||||
std::unique_ptr<webrtc::VideoDecoderFactory> video_decoder_factory)
|
||||
@ -514,6 +518,7 @@ void DefaultUnsignalledSsrcHandler::SetDefaultSink(
|
||||
}
|
||||
}
|
||||
|
||||
#if defined(USE_BUILTIN_SW_CODECS)
|
||||
WebRtcVideoEngine::WebRtcVideoEngine(
|
||||
std::unique_ptr<WebRtcVideoEncoderFactory> external_video_encoder_factory,
|
||||
std::unique_ptr<WebRtcVideoDecoderFactory> 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<webrtc::VideoEncoderFactory> video_encoder_factory,
|
||||
|
||||
@ -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<WebRtcVideoEncoderFactory> external_video_encoder_factory,
|
||||
std::unique_ptr<WebRtcVideoDecoderFactory>
|
||||
external_video_decoder_factory);
|
||||
#endif
|
||||
|
||||
// These video codec factories represents all video codecs, i.e. both software
|
||||
// and external hardware codecs.
|
||||
|
||||
@ -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",
|
||||
|
||||
@ -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<VCMGenericDecoder> CreateDecoder(VideoCodecType 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.";
|
||||
return std::unique_ptr<VCMGenericDecoder>();
|
||||
}
|
||||
#endif
|
||||
|
||||
VCMDecoderMapItem::VCMDecoderMapItem(VideoCodec* settings,
|
||||
int number_of_cores,
|
||||
@ -413,8 +418,12 @@ std::unique_ptr<VCMGenericDecoder> 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;
|
||||
|
||||
@ -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"
|
||||
|
||||
@ -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"
|
||||
|
||||
@ -22,6 +22,7 @@
|
||||
|
||||
namespace webrtc {
|
||||
|
||||
#if defined(USE_BUILTIN_SW_CODECS)
|
||||
rtc::scoped_refptr<PeerConnectionFactoryInterface> CreatePeerConnectionFactory(
|
||||
rtc::scoped_refptr<AudioEncoderFactory> audio_encoder_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),
|
||||
std::move(call_factory), std::move(event_log_factory));
|
||||
}
|
||||
#endif
|
||||
|
||||
rtc::scoped_refptr<PeerConnectionFactoryInterface> CreatePeerConnectionFactory(
|
||||
rtc::Thread* network_thread,
|
||||
@ -97,6 +99,7 @@ rtc::scoped_refptr<PeerConnectionFactoryInterface> CreatePeerConnectionFactory(
|
||||
std::move(call_factory), std::move(event_log_factory));
|
||||
}
|
||||
|
||||
#if defined(USE_BUILTIN_SW_CODECS)
|
||||
rtc::scoped_refptr<PeerConnectionFactoryInterface>
|
||||
CreatePeerConnectionFactoryWithAudioMixer(
|
||||
rtc::Thread* network_thread,
|
||||
@ -128,5 +131,6 @@ rtc::scoped_refptr<PeerConnectionFactoryInterface> CreatePeerConnectionFactory(
|
||||
audio_encoder_factory, audio_decoder_factory, video_encoder_factory,
|
||||
video_decoder_factory, nullptr);
|
||||
}
|
||||
#endif
|
||||
|
||||
} // namespace webrtc
|
||||
|
||||
82
sdk/BUILD.gn
82
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",
|
||||
|
||||
@ -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",
|
||||
|
||||
@ -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<AudioEncoderFactory>& 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<AudioDeviceModule> adm,
|
||||
|
||||
@ -220,6 +220,7 @@ jlong CreatePeerConnectionFactoryForJava(
|
||||
cricket::WebRtcVideoDecoderFactory* legacy_video_decoder_factory = nullptr;
|
||||
std::unique_ptr<cricket::MediaEngineInterface> media_engine;
|
||||
if (jencoder_factory.is_null() && jdecoder_factory.is_null()) {
|
||||
#if defined(USE_BUILTIN_SW_CODECS)
|
||||
// This uses the legacy API, which automatically uses the internal SW
|
||||
// codecs in WebRTC.
|
||||
if (video_hw_acceleration_enabled) {
|
||||
@ -230,13 +231,16 @@ 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<VideoEncoderFactory> video_encoder_factory = nullptr;
|
||||
if (jencoder_factory.is_null()) {
|
||||
#if defined(USE_BUILTIN_SW_CODECS)
|
||||
legacy_video_encoder_factory = CreateLegacyVideoEncoderFactory();
|
||||
video_encoder_factory = std::unique_ptr<VideoEncoderFactory>(
|
||||
WrapLegacyVideoEncoderFactory(legacy_video_encoder_factory));
|
||||
#endif
|
||||
} else {
|
||||
video_encoder_factory = std::unique_ptr<VideoEncoderFactory>(
|
||||
CreateVideoEncoderFactory(jni, jencoder_factory));
|
||||
@ -244,9 +248,11 @@ jlong CreatePeerConnectionFactoryForJava(
|
||||
|
||||
std::unique_ptr<VideoDecoderFactory> video_decoder_factory = nullptr;
|
||||
if (jdecoder_factory.is_null()) {
|
||||
#if defined(USE_BUILTIN_SW_CODECS)
|
||||
legacy_video_decoder_factory = CreateLegacyVideoDecoderFactory();
|
||||
video_decoder_factory = std::unique_ptr<VideoDecoderFactory>(
|
||||
WrapLegacyVideoDecoderFactory(legacy_video_decoder_factory));
|
||||
#endif
|
||||
} else {
|
||||
video_decoder_factory = std::unique_ptr<VideoDecoderFactory>(
|
||||
CreateVideoDecoderFactory(jni, jdecoder_factory));
|
||||
@ -483,12 +489,14 @@ static void JNI_PeerConnectionFactory_SetVideoHwAccelerationOptions(
|
||||
jlong native_factory,
|
||||
const JavaParamRef<jobject>& local_egl_context,
|
||||
const JavaParamRef<jobject>& remote_egl_context) {
|
||||
#if defined(USE_BUILTIN_SW_CODECS)
|
||||
OwnedFactoryAndThreads* owned_factory =
|
||||
reinterpret_cast<OwnedFactoryAndThreads*>(native_factory);
|
||||
SetEglContext(jni, owned_factory->legacy_encoder_factory(),
|
||||
local_egl_context);
|
||||
SetEglContext(jni, owned_factory->legacy_decoder_factory(),
|
||||
remote_egl_context);
|
||||
#endif
|
||||
}
|
||||
|
||||
static jlong JNI_PeerConnectionFactory_GetNativePeerConnectionFactory(
|
||||
|
||||
@ -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<jobject>& egl_context) {
|
||||
#if defined(USE_BUILTIN_SW_CODECS)
|
||||
if (encoder_factory) {
|
||||
MediaCodecVideoEncoderFactory* media_codec_factory =
|
||||
static_cast<MediaCodecVideoEncoderFactory*>(encoder_factory);
|
||||
@ -54,8 +57,14 @@ 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<jobject>& 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
|
||||
|
||||
@ -11,8 +11,8 @@
|
||||
#include <jni.h>
|
||||
|
||||
#include "modules/video_coding/codecs/vp8/include/vp8.h"
|
||||
#include "sdk/android/generated_video_jni/jni/VP8Decoder_jni.h"
|
||||
#include "sdk/android/generated_video_jni/jni/VP8Encoder_jni.h"
|
||||
#include "sdk/android/generated_vp8_jni/jni/VP8Decoder_jni.h"
|
||||
#include "sdk/android/generated_vp8_jni/jni/VP8Encoder_jni.h"
|
||||
#include "sdk/android/src/jni/jni_helpers.h"
|
||||
|
||||
namespace webrtc {
|
||||
|
||||
@ -11,8 +11,8 @@
|
||||
#include <jni.h>
|
||||
|
||||
#include "modules/video_coding/codecs/vp9/include/vp9.h"
|
||||
#include "sdk/android/generated_video_jni/jni/VP9Decoder_jni.h"
|
||||
#include "sdk/android/generated_video_jni/jni/VP9Encoder_jni.h"
|
||||
#include "sdk/android/generated_vp9_jni/jni/VP9Decoder_jni.h"
|
||||
#include "sdk/android/generated_vp9_jni/jni/VP9Encoder_jni.h"
|
||||
#include "sdk/android/src/jni/jni_helpers.h"
|
||||
|
||||
namespace webrtc {
|
||||
|
||||
@ -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<RTCVideoDecoder>)createDecoder:(RTCVideoCodecInfo *)info {
|
||||
if ([info.name isEqualToString:kRTCVideoCodecH264Name]) {
|
||||
return [[RTCVideoDecoderH264 alloc] init];
|
||||
#if defined(USE_BUILTIN_SW_CODECS)
|
||||
} else if ([info.name isEqualToString:kRTCVideoCodecVp8Name]) {
|
||||
return [RTCVideoDecoderVP8 vp8Decoder];
|
||||
#if !defined(RTC_DISABLE_VP9)
|
||||
} else if ([info.name isEqualToString:kRTCVideoCodecVp9Name]) {
|
||||
return [RTCVideoDecoderVP9 vp9Decoder];
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -35,9 +39,11 @@
|
||||
- (NSArray<RTCVideoCodecInfo *> *)supportedCodecs {
|
||||
return @[
|
||||
[[RTCVideoCodecInfo alloc] initWithName:kRTCVideoCodecH264Name],
|
||||
#if defined(USE_BUILTIN_SW_CODECS)
|
||||
[[RTCVideoCodecInfo alloc] initWithName:kRTCVideoCodecVp8Name],
|
||||
#if !defined(RTC_DISABLE_VP9)
|
||||
[[RTCVideoCodecInfo alloc] initWithName:kRTCVideoCodecVp9Name]
|
||||
[[RTCVideoCodecInfo alloc] initWithName:kRTCVideoCodecVp9Name],
|
||||
#endif
|
||||
#endif
|
||||
];
|
||||
}
|
||||
|
||||
@ -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<RTCVideoEncoder>)createEncoder:(RTCVideoCodecInfo *)info {
|
||||
if ([info.name isEqualToString:kRTCVideoCodecH264Name]) {
|
||||
return [[RTCVideoEncoderH264 alloc] initWithCodecInfo:info];
|
||||
#if defined(USE_BUILTIN_SW_CODECS)
|
||||
} else if ([info.name isEqualToString:kRTCVideoCodecVp8Name]) {
|
||||
return [RTCVideoEncoderVP8 vp8Encoder];
|
||||
#if !defined(RTC_DISABLE_VP9)
|
||||
} else if ([info.name isEqualToString:kRTCVideoCodecVp9Name]) {
|
||||
return [RTCVideoEncoderVP9 vp9Encoder];
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@ -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<webrtc::AudioProcessing>)audioProcessingModule;
|
||||
|
||||
#if defined(USE_BUILTIN_SW_CODECS)
|
||||
/* Initialize object with legacy injectable native audio/video encoder/decoder factories
|
||||
TODO(andersc): Remove this when backwards compatiblity is no longer needed.
|
||||
*/
|
||||
@ -67,6 +70,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
legacyNativeVideoEncoderFactory:(cricket::WebRtcVideoEncoderFactory*)videoEncoderFactory
|
||||
legacyNativeVideoDecoderFactory:(cricket::WebRtcVideoDecoderFactory*)videoDecoderFactory
|
||||
audioDeviceModule:(nullable webrtc::AudioDeviceModule *)audioDeviceModule;
|
||||
#endif
|
||||
|
||||
@end
|
||||
|
||||
|
||||
@ -58,6 +58,17 @@
|
||||
- (instancetype)init {
|
||||
#ifdef HAVE_NO_MEDIA
|
||||
return [self initWithNoMedia];
|
||||
#elif !defined(USE_BUILTIN_SW_CODECS)
|
||||
return [self initWithNativeAudioEncoderFactory:webrtc::CreateBuiltinAudioEncoderFactory()
|
||||
nativeAudioDecoderFactory:webrtc::CreateBuiltinAudioDecoderFactory()
|
||||
nativeVideoEncoderFactory:std::unique_ptr<webrtc::VideoEncoderFactory>(
|
||||
new webrtc::ObjCVideoEncoderFactory(
|
||||
[[RTCVideoEncoderFactoryH264 alloc] init]))
|
||||
nativeVideoDecoderFactory:std::unique_ptr<webrtc::VideoDecoderFactory>(
|
||||
new webrtc::ObjCVideoDecoderFactory(
|
||||
[[RTCVideoDecoderFactoryH264 alloc] init]))
|
||||
audioDeviceModule:nullptr
|
||||
audioProcessingModule:nullptr];
|
||||
#else
|
||||
return [self initWithNativeAudioEncoderFactory:webrtc::CreateBuiltinAudioEncoderFactory()
|
||||
nativeAudioDecoderFactory:webrtc::CreateBuiltinAudioDecoderFactory()
|
||||
@ -139,6 +150,7 @@
|
||||
return [self initWithNoMedia];
|
||||
#else
|
||||
if (self = [self initNative]) {
|
||||
#if defined(USE_BUILTIN_SW_CODECS)
|
||||
if (!videoEncoderFactory) {
|
||||
auto legacy_video_encoder_factory = rtc::MakeUnique<webrtc::ObjCVideoEncoderFactory>(
|
||||
[[RTCVideoEncoderFactoryH264 alloc] init]);
|
||||
@ -149,6 +161,7 @@
|
||||
[[RTCVideoDecoderFactoryH264 alloc] init]);
|
||||
videoDecoderFactory = ConvertVideoDecoderFactory(std::move(legacy_video_decoder_factory));
|
||||
}
|
||||
#endif
|
||||
_nativeFactory = webrtc::CreatePeerConnectionFactory(_networkThread.get(),
|
||||
_workerThread.get(),
|
||||
_signalingThread.get(),
|
||||
@ -165,6 +178,7 @@
|
||||
#endif
|
||||
}
|
||||
|
||||
#if defined(USE_BUILTIN_SW_CODECS)
|
||||
- (instancetype)
|
||||
initWithNativeAudioEncoderFactory:
|
||||
(rtc::scoped_refptr<webrtc::AudioEncoderFactory>)audioEncoderFactory
|
||||
@ -190,6 +204,7 @@
|
||||
return self;
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
- (RTCAudioSource *)audioSourceWithConstraints:(nullable RTCMediaConstraints *)constraints {
|
||||
std::unique_ptr<webrtc::MediaConstraints> nativeConstraints;
|
||||
|
||||
@ -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",
|
||||
|
||||
@ -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"
|
||||
|
||||
@ -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) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user