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:
committed by
Commit Bot
parent
70294c8eab
commit
dd8c16574e
@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user