Reland "Reland "Reland "Put internal video codec factories into separate target"""

This is a reland of 727b7d0470c0515397d21698ee089197c31cb5ff
Original change's description:
> Reland "Reland "Put internal video codec factories into separate target""
> 
> This is a reland of 0efd1e8b7e69900a6a516a176f1ab69d0e6b8a26
> Original change's description:
> > Reland "Put internal video codec factories into separate target"
> > 
> > This is a reland of 51698aefd4925f2dfa0310a321f836d433fa9258
> > Original change's description:
> > > Put internal video codec factories into separate target
> > > 
> > > The purpose is to start splitting out the dependencies to the built-in
> > > SW video codecs, so that clients can decide to not depend on them and
> > > get a reduction in binary size.
> > > 
> > > Replaces https://webrtc-review.googlesource.com/c/src/+/29101
> > > 
> > > Bug: webrtc:7925
> > > Change-Id: I46b95aaf42ead70ba78776de60600b8a66a1fe0c
> > > Reviewed-on: https://webrtc-review.googlesource.com/33420
> > > Commit-Queue: Anders Carlsson <andersc@webrtc.org>
> > > Reviewed-by: Magnus Jedvert <magjed@webrtc.org>
> > > Cr-Commit-Position: refs/heads/master@{#21381}
> > 
> > Bug: webrtc:7925
> > Change-Id: I105287fd41ec3ee5bd964b94efcc9c7b3ecdb842
> > Reviewed-on: https://webrtc-review.googlesource.com/35261
> > Reviewed-by: Magnus Jedvert <magjed@webrtc.org>
> > Commit-Queue: Anders Carlsson <andersc@webrtc.org>
> > Cr-Commit-Position: refs/heads/master@{#21389}
> 
> Bug: webrtc:7925
> Change-Id: Id1c7f270676e9e4ca57ca8aa1305cf5554290754
> Reviewed-on: https://webrtc-review.googlesource.com/35501
> Commit-Queue: Anders Carlsson <andersc@webrtc.org>
> Reviewed-by: Magnus Jedvert <magjed@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#21464}

Bug: webrtc:7925
Change-Id: I0b3b5e03d29dadbcbe13cb7ce5369299bb6c0454
Reviewed-on: https://webrtc-review.googlesource.com/37000
Reviewed-by: Magnus Jedvert <magjed@webrtc.org>
Commit-Queue: Anders Carlsson <andersc@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21513}
diff --git a/examples/BUILD.gn b/examples/BUILD.gn
index 5c4dbc7..16c9fae 100644
--- a/examples/BUILD.gn
+++ b/examples/BUILD.gn
@@ -674,6 +674,7 @@
       "../api/audio_codecs:builtin_audio_decoder_factory",
       "../api/audio_codecs:builtin_audio_encoder_factory",
       "../common_video",
+      "../media:rtc_internal_video_codecs",
       "../media:rtc_media",
       "../media:rtc_media_base",
       "../modules/audio_device:audio_device",
diff --git a/media/BUILD.gn b/media/BUILD.gn
index fbf16b8..c702b59 100644
--- a/media/BUILD.gn
+++ b/media/BUILD.gn
@@ -125,35 +125,28 @@
   }
 }
 
-rtc_static_library("rtc_audio_video") {
+rtc_static_library("rtc_constants") {
   defines = []
   libs = []
-  deps = [
-    "../api:video_frame_api_i420",
-    "../call:call_interfaces",
-    "../modules/video_coding:video_coding_utility",
-    "../rtc_base:checks",
-    "../rtc_base:stringutils",
-    "../system_wrappers:field_trial_api",
-    "../system_wrappers:metrics_api",
-    "//third_party/libyuv",
-  ]
+  deps = []
+
   sources = [
-    "engine/adm_helpers.cc",
-    "engine/adm_helpers.h",
-    "engine/apm_helpers.cc",
-    "engine/apm_helpers.h",
     "engine/constants.cc",
     "engine/constants.h",
+  ]
+}
+
+rtc_static_library("rtc_internal_video_codecs") {
+  defines = []
+  libs = []
+  deps = []
+  sources = [
     "engine/convert_legacy_video_factory.cc",
     "engine/convert_legacy_video_factory.h",
     "engine/internaldecoderfactory.cc",
     "engine/internaldecoderfactory.h",
     "engine/internalencoderfactory.cc",
     "engine/internalencoderfactory.h",
-    "engine/nullwebrtcvideoengine.h",
-    "engine/payload_type_mapper.cc",
-    "engine/payload_type_mapper.h",
     "engine/scopedvideodecoder.cc",
     "engine/scopedvideodecoder.h",
     "engine/scopedvideoencoder.cc",
@@ -170,21 +163,84 @@
     "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",
+  ]
+
+  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" ]
+  }
+
+  if (is_win) {
+    cflags = [
+      "/wd4245",  # conversion from "int" to "size_t", signed/unsigned mismatch.
+      "/wd4267",  # conversion from "size_t" to "int", possible loss of data.
+      "/wd4389",  # signed/unsigned mismatch.
+    ]
+  }
+
+  include_dirs = []
+
+  public_configs = []
+  deps += [
+    ":rtc_constants",
+    ":rtc_media_base",
+    "..:webrtc_common",
+    "../api:video_frame_api_i420",
+    "../api/video_codecs:video_codecs_api",
+    "../call:call_interfaces",
+    "../call:video_stream_api",
+    "../modules/video_coding:webrtc_h264",
+    "../modules/video_coding:webrtc_stereo",
+    "../modules/video_coding:webrtc_vp8",
+    "../modules/video_coding:webrtc_vp8_helpers",
+    "../modules/video_coding:webrtc_vp9",
+    "../rtc_base:checks",
+    "../rtc_base:rtc_base_approved",
+    "../rtc_base:sequenced_task_checker",
+    "../system_wrappers",
+    "../system_wrappers:field_trial_api",
+    "../system_wrappers:metrics_api",
+    "//third_party/libyuv",
+  ]
+}
+
+rtc_static_library("rtc_audio_video") {
+  defines = []
+  libs = []
+  deps = [
+    "../rtc_base:checks",
+  ]
+
+  sources = [
+    "engine/adm_helpers.cc",
+    "engine/adm_helpers.h",
+    "engine/apm_helpers.cc",
+    "engine/apm_helpers.h",
+    "engine/nullwebrtcvideoengine.h",
+    "engine/payload_type_mapper.cc",
+    "engine/payload_type_mapper.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/webrtcvoe.h",
     "engine/webrtcvoiceengine.cc",
     "engine/webrtcvoiceengine.h",
+
+    # TODO(bugs.webrtc.org/7925) Remove these when clients are updated
+    "engine/convert_legacy_video_factory.h",
+    "engine/webrtcvideodecoderfactory.h",
+    "engine/webrtcvideoencoderfactory.h",
   ]
 
   configs += [ ":rtc_media_warnings_config" ]
@@ -229,6 +285,8 @@
     deps += [ "../modules/audio_processing/aec_dump:null_aec_dump_factory" ]
   }
   deps += [
+    ":rtc_constants",
+    ":rtc_internal_video_codecs",
     ":rtc_media_base",
     "..:webrtc_common",
     "../api:call_api",
@@ -236,30 +294,24 @@
     "../api:optional",
     "../api:transport_api",
     "../api:video_frame_api",
+    "../api:video_frame_api_i420",
     "../api/audio_codecs:audio_codecs_api",
     "../api/video_codecs:video_codecs_api",
     "../call",
+    "../call:call_interfaces",
     "../call:video_stream_api",
     "../common_video:common_video",
-    "../modules/audio_coding:rent_a_codec",
     "../modules/audio_device:audio_device",
     "../modules/audio_mixer:audio_mixer_impl",
     "../modules/audio_processing:audio_processing",
-    "../modules/audio_processing/aec_dump",
     "../modules/video_capture:video_capture_module",
-    "../modules/video_coding",
-    "../modules/video_coding:webrtc_h264",
-    "../modules/video_coding:webrtc_stereo",
-    "../modules/video_coding:webrtc_vp8",
-    "../modules/video_coding:webrtc_vp9",
-    "../p2p:rtc_p2p",
     "../pc:rtc_pc_base",
     "../rtc_base:rtc_base",
-    "../rtc_base:rtc_base_approved",
     "../rtc_base:rtc_task_queue",
-    "../rtc_base:sequenced_task_checker",
+    "../rtc_base:stringutils",
     "../system_wrappers",
-    "../video",
+    "../system_wrappers:field_trial_api",
+    "../system_wrappers:metrics_api",
     "../voice_engine",
   ]
 }
@@ -379,6 +431,7 @@
     }
 
     deps += [
+      ":rtc_internal_video_codecs",
       ":rtc_media",
       ":rtc_media_base",
       "..:webrtc_common",
@@ -438,6 +491,7 @@
 
     defines = []
     deps = [
+      ":rtc_constants",
       "../api:video_frame_api_i420",
       "../modules/audio_processing:mocks",
       "../pc:rtc_pc",
@@ -524,6 +578,7 @@
     }
 
     deps += [
+      ":rtc_internal_video_codecs",
       ":rtc_media",
       ":rtc_media_base",
       ":rtc_media_tests_utils",
@@ -541,6 +596,7 @@
       "../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",
       "../rtc_base:rtc_base_approved",
diff --git a/modules/video_coding/BUILD.gn b/modules/video_coding/BUILD.gn
index 59e8eb9..fa8bc55 100644
--- a/modules/video_coding/BUILD.gn
+++ b/modules/video_coding/BUILD.gn
@@ -95,6 +95,7 @@
     ":webrtc_i420",
     ":webrtc_stereo",
     ":webrtc_vp8",
+    ":webrtc_vp8_helpers",
     ":webrtc_vp9",
     "..:module_api",
     "..:module_api_public",
@@ -279,6 +280,31 @@
   ]
 }
 
+# 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") {
   sources = [
     "codecs/vp8/default_temporal_layers.cc",
@@ -286,11 +312,8 @@
     "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",
     "codecs/vp8/vp8_impl.cc",
     "codecs/vp8/vp8_impl.h",
   ]
@@ -305,17 +328,16 @@
 
   deps = [
     ":video_coding_utility",
+    ":webrtc_vp8_helpers",
     "..: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",
-    "../../rtc_base:sequenced_task_checker",
     "../../system_wrappers",
     "../../system_wrappers:field_trial_api",
     "../../system_wrappers:metrics_api",
@@ -403,6 +425,7 @@
       ":mock_headers",
       ":video_coding",
       ":webrtc_vp8",
+      ":webrtc_vp8_helpers",
       "../../api:video_frame_api",
       "../../api:video_frame_api_i420",
       "../../common_video:common_video",
@@ -438,6 +461,7 @@
       ":video_coding",
       ":video_coding_utility",
       ":webrtc_vp8",
+      ":webrtc_vp8_helpers",
       "../..:webrtc_common",
       "../../:typedefs",
       "../../api:video_frame_api",
@@ -494,6 +518,7 @@
       ":webrtc_h264",
       ":webrtc_stereo",
       ":webrtc_vp8",
+      ":webrtc_vp8_helpers",
       ":webrtc_vp9",
       "../..:webrtc_common",
       "../../api:mock_video_codec_factory",
@@ -502,6 +527,7 @@
       "../../api:video_frame_api_i420",
       "../../common_video",
       "../../media:rtc_audio_video",
+      "../../media:rtc_internal_video_codecs",
       "../../media:rtc_media_base",
       "../../rtc_base:checks",
       "../../rtc_base:rtc_base",
@@ -606,6 +632,7 @@
       ":video_coding_utility",
       ":webrtc_h264",
       ":webrtc_vp8",
+      ":webrtc_vp8_helpers",
       ":webrtc_vp9",
       "..:module_api",
       "../..:webrtc_common",
diff --git a/sdk/BUILD.gn b/sdk/BUILD.gn
index 6f48025..b62dd9b 100644
--- a/sdk/BUILD.gn
+++ b/sdk/BUILD.gn
@@ -840,6 +840,7 @@
         "../api:video_frame_api",
         "../api/video_codecs:video_codecs_api",
         "../common_video",
+        "../media:rtc_internal_video_codecs",
         "../media:rtc_media",
         "../media:rtc_media_base",
         "../modules:module_api",
diff --git a/sdk/android/BUILD.gn b/sdk/android/BUILD.gn
index 5e46b2a..302a43d 100644
--- a/sdk/android/BUILD.gn
+++ b/sdk/android/BUILD.gn
@@ -250,6 +250,7 @@
     "../../api/video_codecs:video_codecs_api",
     "../../common_video:common_video",
     "../../media:rtc_audio_video",
+    "../../media:rtc_internal_video_codecs",
     "../../media:rtc_media_base",
     "../../modules:module_api",
     "../../modules/utility:utility",
diff --git a/video/BUILD.gn b/video/BUILD.gn
index 3918591..ab49d11 100644
--- a/video/BUILD.gn
+++ b/video/BUILD.gn
@@ -85,7 +85,7 @@
     "../modules/utility",
     "../modules/video_coding",
     "../modules/video_coding:video_coding_utility",
-    "../modules/video_coding:webrtc_vp8",
+    "../modules/video_coding:webrtc_vp8_helpers",
     "../modules/video_processing",
     "../rtc_base:rtc_base_approved",
     "../rtc_base:rtc_numerics",
@@ -108,6 +108,7 @@
     deps = [
       "../logging:rtc_event_log_api",
       "../media:rtc_audio_video",
+      "../media:rtc_internal_video_codecs",
       "../modules/audio_mixer:audio_mixer_impl",
       "../modules/rtp_rtcp",
       "../modules/video_coding:webrtc_h264",
@@ -296,6 +297,7 @@
       "../call:video_stream_api",
       "../common_video",
       "../logging:rtc_event_log_api",
+      "../media:rtc_internal_video_codecs",
       "../media:rtc_media",
       "../media:rtc_media_base",
       "../media:rtc_media_tests_utils",
@@ -309,6 +311,7 @@
       "../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",
       "../rtc_base:rate_limiter",