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",