Migrate legacy Android video codec factories.
Prepare for building without built-in software codecs. When passing
null, inject the new type of factories but wrap them in the built-in
software codecs outside the videoengine.
Bug: webrtc:7925
Change-Id: I7408e6e46e6b9efdf346852954bf51a97e023b5c
Reviewed-on: https://webrtc-review.googlesource.com/83729
Commit-Queue: Anders Carlsson <andersc@webrtc.org>
Reviewed-by: Magnus Jedvert <magjed@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23897}
diff --git a/sdk/android/BUILD.gn b/sdk/android/BUILD.gn
index a7e9939..33ecace 100644
--- a/sdk/android/BUILD.gn
+++ b/sdk/android/BUILD.gn
@@ -297,6 +297,7 @@
"src/jni/androidvideotracksource.h",
"src/jni/encodedimage.cc",
"src/jni/encodedimage.h",
+ "src/jni/hardwarevideoencoderfactory.cc",
"src/jni/jni_generator_helper.h",
"src/jni/nativecapturerobserver.cc",
"src/jni/nativecapturerobserver.h",
@@ -317,37 +318,21 @@
"src/jni/videoencoderfallback.cc",
"src/jni/videoencoderwrapper.cc",
"src/jni/videoencoderwrapper.h",
- "src/jni/videoframe.cc",
- "src/jni/videoframe.h",
"src/jni/videosink.cc",
"src/jni/videosink.h",
"src/jni/videosource.cc",
"src/jni/videotrack.cc",
- "src/jni/wrapped_native_i420_buffer.cc",
- "src/jni/wrapped_native_i420_buffer.h",
"src/jni/yuvhelper.cc",
]
- 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",
- "src/jni/hardwarevideoencoderfactory.cc",
- ]
-
- deps += [
- ":vp8_jni",
- ":vp9_jni",
- "../../media:rtc_internal_video_codecs",
- ]
- }
deps += [
":base_jni",
":generated_video_jni",
+ ":legacy_video_jni", # TODO(bugs.webrtc.org/7925): Remove.
":native_api_jni",
+ ":videoframe_jni",
+ ":vp8_jni", # TODO(bugs.webrtc.org/7925): Remove.
+ ":vp9_jni", # TODO(bugs.webrtc.org/7925): Remove.
"../..:webrtc_common",
"../../api:libjingle_peerconnection_api",
"../../api/video:video_frame",
@@ -356,6 +341,7 @@
"../../common_video:common_video",
"../../media:rtc_audio_video",
"../../media:rtc_h264_profile_id",
+ "../../media:rtc_internal_video_codecs",
"../../media:rtc_media_base",
"../../modules:module_api",
"../../modules/utility:utility",
@@ -374,6 +360,61 @@
]
}
+rtc_static_library("videoframe_jni") {
+ sources = [
+ "src/jni/videoframe.cc",
+ "src/jni/videoframe.h",
+ "src/jni/wrapped_native_i420_buffer.cc",
+ "src/jni/wrapped_native_i420_buffer.h",
+ ]
+
+ deps = [
+ ":base_jni",
+ ":generated_video_jni",
+ ":native_api_jni",
+ "../../api/video:video_frame",
+ "../../common_video:common_video",
+ "../../rtc_base:checks",
+ "../../rtc_base:rtc_base",
+ "../../rtc_base:rtc_base_approved",
+ "../../rtc_base/memory:aligned_malloc",
+ "//third_party/libyuv",
+ ]
+}
+
+# TODO(bugs.webrtc.org/7925): Remove.
+rtc_static_library("legacy_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",
+ ]
+
+ deps = [
+ ":base_jni",
+ ":generated_video_jni",
+ ":native_api_jni",
+ ":videoframe_jni",
+ "../..:webrtc_common",
+ "../../api/video_codecs:video_codecs_api",
+ "../../common_video:common_video",
+ "../../media:rtc_internal_video_codecs",
+ "../../media:rtc_media_base",
+ "../../modules/video_coding:video_codec_interface",
+ "../../modules/video_coding:video_coding_utility",
+ "../../rtc_base:checks",
+ "../../rtc_base:rtc_base",
+ "../../rtc_base:rtc_base_approved",
+ "../../rtc_base:rtc_task_queue",
+ "../../rtc_base:sequenced_task_checker",
+ "../../rtc_base:weak_ptr",
+ "../../system_wrappers:field_trial_api",
+ "//third_party/libyuv",
+ ]
+}
+
rtc_static_library("null_video_jni") {
sources = [
"src/jni/pc/null_video.cc",
@@ -381,6 +422,7 @@
deps = [
":base_jni",
+ "../../api/video_codecs:video_codecs_api",
]
}
@@ -627,6 +669,9 @@
rtc_static_library("libjingle_peerconnection_metrics_default_jni") {
visibility = [ "*" ]
+
+ allow_poison = [ "software_video_codecs" ] # TODO(bugs.webrtc.org/7925): Remove.
+
sources = [
"src/jni/androidmetrics.cc",
]
@@ -698,6 +743,7 @@
":audio_api_java",
":base_java",
":camera_java",
+ ":default_video_codec_factory_java",
":filevideo_java",
":hwcodecs_java",
":java_audio_device_module_java",
@@ -707,15 +753,12 @@
":peerconnection_java",
":screencapturer_java",
":surfaceviewrenderer_java",
+ ":swcodecs_java",
":video_api_java",
":video_java",
"../../modules/audio_device:audio_device_java",
"../../rtc_base:base_java",
]
-
- if (rtc_use_builtin_sw_codecs) {
- deps += [ ":swcodecs_java" ]
- }
}
# TODO(sakal): Extract files from this target to releveant subtargets, video, audio etc.
@@ -905,24 +948,22 @@
]
}
-if (rtc_use_builtin_sw_codecs) {
- rtc_android_library("swcodecs_java") {
- java_files = [
- "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",
- ]
+rtc_android_library("swcodecs_java") {
+ java_files = [
+ "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 = [
- ":base_java",
- ":video_api_java",
- ":video_java",
- "//rtc_base:base_java",
- ]
- }
+ deps = [
+ ":base_java",
+ ":video_api_java",
+ ":video_java",
+ "//rtc_base:base_java",
+ ]
}
rtc_android_library("hwcodecs_java") {
@@ -1021,15 +1062,6 @@
"//modules/audio_device:audio_device_java",
"//rtc_base:base_java",
]
-
- if (rtc_use_builtin_sw_codecs) {
- deps += [ ":swcodecs_java" ]
-
- java_files += [
- "api/org/webrtc/DefaultVideoDecoderFactory.java",
- "api/org/webrtc/DefaultVideoEncoderFactory.java",
- ]
- }
}
rtc_android_library("libjingle_peerconnection_metrics_default_java") {
@@ -1042,6 +1074,19 @@
]
}
+rtc_android_library("default_video_codec_factory_java") {
+ java_files = [
+ "api/org/webrtc/DefaultVideoDecoderFactory.java",
+ "api/org/webrtc/DefaultVideoEncoderFactory.java",
+ ]
+
+ deps = [
+ ":hwcodecs_java",
+ ":swcodecs_java",
+ ":video_api_java",
+ ]
+}
+
if (rtc_include_tests) {
rtc_instrumentation_test_apk("libjingle_peerconnection_android_unittest") {
apk_name = "libjingle_peerconnection_android_unittest"
@@ -1079,6 +1124,7 @@
deps = [
":base_java",
+ ":default_video_codec_factory_java",
":libjingle_peerconnection_java",
":libjingle_peerconnection_metrics_default_java",
":video_api_java",
@@ -1222,6 +1268,9 @@
# API for creating Java PeerConnectionFactory from C++ equivalents.
rtc_static_library("native_api_peerconnection") {
visibility = [ "*" ]
+
+ allow_poison = [ "software_video_codecs" ] # TODO(bugs.webrtc.org/7925): Remove.
+
sources = [
"native_api/peerconnection/peerconnectionfactory.cc",
"native_api/peerconnection/peerconnectionfactory.h",
@@ -1258,6 +1307,7 @@
deps = [
":native_api_jni",
":video_jni",
+ ":videoframe_jni",
"//api:libjingle_peerconnection_api",
"//api/video:video_frame",
"//rtc_base:rtc_base_approved",