[DVQA] Create separate BUILD.gn file for video analyzer

Bug: None
Change-Id: I37dd2262bf3f52b2f5abe7934b9c41eaa27ffd17
No-try: True
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/283141
Commit-Queue: Artem Titov <titovartem@webrtc.org>
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#38662}
diff --git a/api/BUILD.gn b/api/BUILD.gn
index 5874b95..c661dc5 100644
--- a/api/BUILD.gn
+++ b/api/BUILD.gn
@@ -576,7 +576,6 @@
     "../rtc_base:stringutils",
     "../rtc_base:threading",
     "../test:fileutils",
-    "../test/pc/e2e:video_dumping",
     "audio:audio_mixer_api",
     "rtc_event_log",
     "task_queue",
diff --git a/api/test/pclf/BUILD.gn b/api/test/pclf/BUILD.gn
index 17cd758..a50744e 100644
--- a/api/test/pclf/BUILD.gn
+++ b/api/test/pclf/BUILD.gn
@@ -40,7 +40,7 @@
     "../../../rtc_base:threading",
     "../../../test:fileutils",
     "../../../test:video_test_support",
-    "../../../test/pc/e2e:video_dumping",
+    "../../../test/pc/e2e/analyzer/video:video_dumping",
     "../../audio:audio_mixer_api",
     "../../rtc_event_log",
     "../../task_queue",
diff --git a/pc/BUILD.gn b/pc/BUILD.gn
index 7395072..053f4e6 100644
--- a/pc/BUILD.gn
+++ b/pc/BUILD.gn
@@ -2742,8 +2742,8 @@
       "../test:fileutils",
       "../test:test_main",
       "../test:test_support",
-      "../test/pc/e2e:default_video_quality_analyzer",
       "../test/pc/e2e:network_quality_metrics_reporter",
+      "../test/pc/e2e/analyzer/video:default_video_quality_analyzer",
     ]
 
     if (is_ios) {
diff --git a/test/pc/e2e/BUILD.gn b/test/pc/e2e/BUILD.gn
index ea4014d..e73c0aa 100644
--- a/test/pc/e2e/BUILD.gn
+++ b/test/pc/e2e/BUILD.gn
@@ -8,40 +8,20 @@
 
 import("../../../webrtc.gni")
 
-rtc_library("video_dumping") {
+rtc_library("metric_metadata_keys") {
   testonly = true
-  sources = [
-    "analyzer/video/video_dumping.cc",
-    "analyzer/video/video_dumping.h",
-  ]
-  deps = [
-    "../..:video_test_support",
-    "../../../api/test/video:video_frame_writer",
-    "../../../api/video:video_frame",
-    "../../../rtc_base:checks",
-    "../../../rtc_base:logging",
-    "../../../system_wrappers",
-  ]
-  absl_deps = [ "//third_party/abseil-cpp/absl/strings" ]
+  sources = [ "metric_metadata_keys.h" ]
 }
 
 if (!build_with_chromium) {
   group("e2e") {
     testonly = true
 
-    deps = [
-      ":encoded_image_data_injector_api",
-      ":example_video_quality_analyzer",
-      ":quality_analyzing_video_decoder",
-      ":quality_analyzing_video_encoder",
-      ":single_process_encoded_image_data_injector",
-      ":video_frame_tracking_id_injector",
-    ]
+    deps = [ ":metric_metadata_keys" ]
     if (rtc_include_tests) {
       deps += [
         ":peerconnection_quality_test",
         ":test_peer",
-        ":video_quality_analyzer_injection_helper",
       ]
     }
   }
@@ -51,237 +31,15 @@
       testonly = true
 
       deps = [
-        ":analyzing_video_sink_test",
-        ":analyzing_video_sinks_helper_test",
-        ":default_video_quality_analyzer_frames_comparator_test",
-        ":default_video_quality_analyzer_metric_names_test",
-        ":default_video_quality_analyzer_stream_state_test",
-        ":default_video_quality_analyzer_test",
-        ":multi_reader_queue_test",
-        ":names_collection_test",
         ":peer_connection_e2e_smoke_test",
         ":peer_connection_quality_test_metric_names_test",
         ":peer_connection_quality_test_test",
-        ":simulcast_dummy_buffer_helper_test",
-        ":single_process_encoded_image_data_injector_unittest",
         ":stats_poller_test",
-        ":video_dumping_test",
-        ":video_frame_tracking_id_injector_unittest",
       ]
     }
   }
 
-  rtc_library("encoded_image_data_injector_api") {
-    testonly = true
-    sources = [ "analyzer/video/encoded_image_data_injector.h" ]
-
-    deps = [ "../../../api/video:encoded_image" ]
-    absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
-  }
-
-  rtc_library("single_process_encoded_image_data_injector") {
-    testonly = true
-    sources = [
-      "analyzer/video/single_process_encoded_image_data_injector.cc",
-      "analyzer/video/single_process_encoded_image_data_injector.h",
-    ]
-
-    deps = [
-      ":encoded_image_data_injector_api",
-      "../../../api/video:encoded_image",
-      "../../../rtc_base:checks",
-      "../../../rtc_base:criticalsection",
-      "../../../rtc_base/synchronization:mutex",
-    ]
-    absl_deps = [ "//third_party/abseil-cpp/absl/memory" ]
-  }
-
-  rtc_library("video_frame_tracking_id_injector") {
-    testonly = true
-    sources = [
-      "analyzer/video/video_frame_tracking_id_injector.cc",
-      "analyzer/video/video_frame_tracking_id_injector.h",
-    ]
-
-    deps = [
-      ":encoded_image_data_injector_api",
-      "../../../api/video:encoded_image",
-      "../../../rtc_base:checks",
-    ]
-    absl_deps = [ "//third_party/abseil-cpp/absl/memory" ]
-  }
-
-  rtc_library("simulcast_dummy_buffer_helper") {
-    testonly = true
-    sources = [
-      "analyzer/video/simulcast_dummy_buffer_helper.cc",
-      "analyzer/video/simulcast_dummy_buffer_helper.h",
-    ]
-    deps = [ "../../../api/video:video_frame" ]
-  }
-
-  rtc_library("simulcast_dummy_buffer_helper_test") {
-    testonly = true
-    sources = [ "analyzer/video/simulcast_dummy_buffer_helper_test.cc" ]
-    deps = [
-      ":simulcast_dummy_buffer_helper",
-      "../..:test_support",
-      "../../../api/video:video_frame",
-      "../../../rtc_base:random",
-    ]
-  }
-
-  rtc_library("quality_analyzing_video_decoder") {
-    testonly = true
-    sources = [
-      "analyzer/video/quality_analyzing_video_decoder.cc",
-      "analyzer/video/quality_analyzing_video_decoder.h",
-    ]
-    deps = [
-      ":encoded_image_data_injector_api",
-      ":simulcast_dummy_buffer_helper",
-      "../../../api:video_quality_analyzer_api",
-      "../../../api/video:encoded_image",
-      "../../../api/video:video_frame",
-      "../../../api/video:video_rtp_headers",
-      "../../../api/video_codecs:video_codecs_api",
-      "../../../modules/video_coding:video_codec_interface",
-      "../../../rtc_base:criticalsection",
-      "../../../rtc_base:logging",
-      "../../../rtc_base/synchronization:mutex",
-    ]
-    absl_deps = [
-      "//third_party/abseil-cpp/absl/strings",
-      "//third_party/abseil-cpp/absl/types:optional",
-    ]
-  }
-
-  rtc_library("quality_analyzing_video_encoder") {
-    testonly = true
-    sources = [
-      "analyzer/video/quality_analyzing_video_encoder.cc",
-      "analyzer/video/quality_analyzing_video_encoder.h",
-    ]
-    deps = [
-      ":encoded_image_data_injector_api",
-      "../../../api:video_quality_analyzer_api",
-      "../../../api/test/pclf:media_configuration",
-      "../../../api/video:encoded_image",
-      "../../../api/video:video_frame",
-      "../../../api/video:video_rtp_headers",
-      "../../../api/video_codecs:video_codecs_api",
-      "../../../modules/video_coding:video_codec_interface",
-      "../../../modules/video_coding/svc:scalability_mode_util",
-      "../../../rtc_base:criticalsection",
-      "../../../rtc_base:logging",
-      "../../../rtc_base/synchronization:mutex",
-    ]
-    absl_deps = [ "//third_party/abseil-cpp/absl/strings" ]
-  }
-
   if (rtc_include_tests) {
-    rtc_library("video_dumping_test") {
-      testonly = true
-      sources = [ "analyzer/video/video_dumping_test.cc" ]
-      deps = [
-        ":video_dumping",
-        "../..:fileutils",
-        "../..:test_support",
-        "../..:video_test_support",
-        "../../../api:scoped_refptr",
-        "../../../api/video:video_frame",
-        "../../../rtc_base:random",
-      ]
-      absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
-    }
-
-    rtc_library("analyzing_video_sinks_helper") {
-      testonly = true
-      sources = [
-        "analyzer/video/analyzing_video_sinks_helper.cc",
-        "analyzer/video/analyzing_video_sinks_helper.h",
-      ]
-      deps = [
-        "../../../api/test/pclf:media_configuration",
-        "../../../api/test/video:video_frame_writer",
-        "../../../rtc_base:macromagic",
-        "../../../rtc_base/synchronization:mutex",
-      ]
-      absl_deps = [
-        "//third_party/abseil-cpp/absl/strings",
-        "//third_party/abseil-cpp/absl/types:optional",
-      ]
-    }
-
-    rtc_library("analyzing_video_sink") {
-      testonly = true
-      sources = [
-        "analyzer/video/analyzing_video_sink.cc",
-        "analyzer/video/analyzing_video_sink.h",
-      ]
-      deps = [
-        ":analyzing_video_sinks_helper",
-        ":simulcast_dummy_buffer_helper",
-        ":video_dumping",
-        "../..:fixed_fps_video_frame_writer_adapter",
-        "../..:test_renderer",
-        "../../../api:video_quality_analyzer_api",
-        "../../../api/numerics",
-        "../../../api/test/pclf:media_configuration",
-        "../../../api/test/video:video_frame_writer",
-        "../../../api/units:timestamp",
-        "../../../api/video:video_frame",
-        "../../../rtc_base:checks",
-        "../../../rtc_base:logging",
-        "../../../rtc_base:macromagic",
-        "../../../rtc_base/synchronization:mutex",
-        "../../../system_wrappers",
-      ]
-      absl_deps = [
-        "//third_party/abseil-cpp/absl/memory:memory",
-        "//third_party/abseil-cpp/absl/strings",
-        "//third_party/abseil-cpp/absl/types:optional",
-      ]
-    }
-
-    rtc_library("video_quality_analyzer_injection_helper") {
-      testonly = true
-      sources = [
-        "analyzer/video/video_quality_analyzer_injection_helper.cc",
-        "analyzer/video/video_quality_analyzer_injection_helper.h",
-      ]
-      deps = [
-        ":analyzing_video_sink",
-        ":analyzing_video_sinks_helper",
-        ":encoded_image_data_injector_api",
-        ":quality_analyzing_video_decoder",
-        ":quality_analyzing_video_encoder",
-        ":simulcast_dummy_buffer_helper",
-        ":video_dumping",
-        "../..:fixed_fps_video_frame_writer_adapter",
-        "../..:test_renderer",
-        "../../../api:array_view",
-        "../../../api:stats_observer_interface",
-        "../../../api:video_quality_analyzer_api",
-        "../../../api/test/pclf:media_configuration",
-        "../../../api/video:video_frame",
-        "../../../api/video:video_rtp_headers",
-        "../../../api/video_codecs:video_codecs_api",
-        "../../../rtc_base:checks",
-        "../../../rtc_base:criticalsection",
-        "../../../rtc_base:logging",
-        "../../../rtc_base:stringutils",
-        "../../../rtc_base/synchronization:mutex",
-        "../../../system_wrappers",
-        "../../../test:video_test_common",
-        "../../../test:video_test_support",
-      ]
-      absl_deps = [
-        "//third_party/abseil-cpp/absl/memory",
-        "//third_party/abseil-cpp/absl/strings",
-      ]
-    }
-
     rtc_library("echo_emulation") {
       testonly = true
       sources = [
@@ -333,9 +91,7 @@
       ]
       deps = [
         ":echo_emulation",
-        ":quality_analyzing_video_encoder",
         ":test_peer",
-        ":video_quality_analyzer_injection_helper",
         "../..:copy_to_file_audio_capturer",
         "../../../api:create_time_controller",
         "../../../api:time_controller",
@@ -354,6 +110,8 @@
         "../../../p2p:rtc_p2p",
         "../../../rtc_base:rtc_task_queue",
         "../../../rtc_base:threading",
+        "analyzer/video:quality_analyzing_video_encoder",
+        "analyzer/video:video_quality_analyzer_injection_helper",
       ]
       absl_deps = [
         "//third_party/abseil-cpp/absl/memory",
@@ -370,7 +128,6 @@
       ]
       deps = [
         ":test_peer",
-        ":video_quality_analyzer_injection_helper",
         "../..:fileutils",
         "../..:platform_video_capturer",
         "../..:video_test_common",
@@ -382,6 +139,7 @@
         "../../../api/video:video_frame",
         "../../../pc:session_description",
         "../../../pc:video_track_source",
+        "analyzer/video:video_quality_analyzer_injection_helper",
       ]
       absl_deps = [ "//third_party/abseil-cpp/absl/types:variant" ]
     }
@@ -441,19 +199,14 @@
         ":analyzer_helper",
         ":cross_media_metrics_reporter",
         ":default_audio_quality_analyzer",
-        ":default_video_quality_analyzer",
         ":media_helper",
         ":metric_metadata_keys",
         ":peer_params_preprocessor",
         ":sdp_changer",
-        ":single_process_encoded_image_data_injector",
         ":stats_poller",
         ":test_activities_executor",
         ":test_peer",
         ":test_peer_factory",
-        ":video_frame_tracking_id_injector",
-        ":video_quality_analyzer_injection_helper",
-        ":video_quality_metrics_reporter",
         "../..:field_trial",
         "../..:fileutils",
         "../..:perf_test",
@@ -486,73 +239,15 @@
         "../../../rtc_base/synchronization:mutex",
         "../../../system_wrappers",
         "../../../system_wrappers:field_trial",
+        "analyzer/video:default_video_quality_analyzer",
+        "analyzer/video:single_process_encoded_image_data_injector",
+        "analyzer/video:video_frame_tracking_id_injector",
+        "analyzer/video:video_quality_analyzer_injection_helper",
+        "analyzer/video:video_quality_metrics_reporter",
       ]
       absl_deps = [ "//third_party/abseil-cpp/absl/strings" ]
     }
 
-    rtc_library("single_process_encoded_image_data_injector_unittest") {
-      testonly = true
-      sources = [
-        "analyzer/video/single_process_encoded_image_data_injector_unittest.cc",
-      ]
-      deps = [
-        ":single_process_encoded_image_data_injector",
-        "../../../api/video:encoded_image",
-        "../../../rtc_base:buffer",
-        "../../../test:test_support",
-      ]
-    }
-
-    rtc_library("video_frame_tracking_id_injector_unittest") {
-      testonly = true
-      sources =
-          [ "analyzer/video/video_frame_tracking_id_injector_unittest.cc" ]
-      deps = [
-        ":video_frame_tracking_id_injector",
-        "../../../api/video:encoded_image",
-        "../../../rtc_base:buffer",
-        "../../../test:test_support",
-      ]
-    }
-
-    rtc_library("analyzing_video_sinks_helper_test") {
-      testonly = true
-      sources = [ "analyzer/video/analyzing_video_sinks_helper_test.cc" ]
-      deps = [
-        ":analyzing_video_sinks_helper",
-        "../..:test_support",
-        "../../../api/test/pclf:media_configuration",
-      ]
-      absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
-    }
-
-    rtc_library("analyzing_video_sink_test") {
-      testonly = true
-      sources = [ "analyzer/video/analyzing_video_sink_test.cc" ]
-      deps = [
-        ":analyzing_video_sink",
-        ":example_video_quality_analyzer",
-        "../..:fileutils",
-        "../..:test_support",
-        "../..:video_test_support",
-        "../../../api:create_frame_generator",
-        "../../../api:frame_generator_api",
-        "../../../api:scoped_refptr",
-        "../../../api/test/pclf:media_configuration",
-        "../../../api/units:time_delta",
-        "../../../api/units:timestamp",
-        "../../../api/video:video_frame",
-        "../../../common_video",
-        "../../../rtc_base:timeutils",
-        "../../../system_wrappers",
-        "../../time_controller",
-      ]
-      absl_deps = [
-        "//third_party/abseil-cpp/absl/strings",
-        "//third_party/abseil-cpp/absl/types:optional",
-      ]
-    }
-
     peer_connection_e2e_smoke_test_resources = [
       "../../../resources/pc_quality_smoke_test_alice_source.wav",
       "../../../resources/pc_quality_smoke_test_bob_source.wav",
@@ -571,8 +266,6 @@
       sources = [ "peer_connection_e2e_smoke_test.cc" ]
       deps = [
         ":default_audio_quality_analyzer",
-        ":default_video_quality_analyzer",
-        ":default_video_quality_analyzer_shared",
         ":network_quality_metrics_reporter",
         ":stats_based_network_quality_metrics_reporter",
         "../../../api:callfactory_api",
@@ -607,6 +300,8 @@
         "../../../test:field_trial",
         "../../../test:fileutils",
         "../../../test:test_support",
+        "analyzer/video:default_video_quality_analyzer",
+        "analyzer/video:default_video_quality_analyzer_shared",
       ]
       data = peer_connection_e2e_smoke_test_resources
       if (is_mac || is_ios) {
@@ -691,99 +386,6 @@
         "../../../api:rtc_stats_api",
       ]
     }
-
-    rtc_library("default_video_quality_analyzer_test") {
-      testonly = true
-      sources = [ "analyzer/video/default_video_quality_analyzer_test.cc" ]
-      deps = [
-        ":default_video_quality_analyzer",
-        ":default_video_quality_analyzer_shared",
-        "../..:test_support",
-        "../../../api:create_frame_generator",
-        "../../../api:rtp_packet_info",
-        "../../../api/test/metrics:global_metrics_logger_and_exporter",
-        "../../../api/video:encoded_image",
-        "../../../api/video:video_frame",
-        "../../../common_video",
-        "../../../modules/rtp_rtcp:rtp_rtcp_format",
-        "../../../rtc_base:stringutils",
-        "../../../rtc_tools:video_quality_analysis",
-        "../../../system_wrappers",
-      ]
-    }
-
-    rtc_library("default_video_quality_analyzer_metric_names_test") {
-      testonly = true
-      sources = [
-        "analyzer/video/default_video_quality_analyzer_metric_names_test.cc",
-      ]
-      deps = [
-        ":default_video_quality_analyzer",
-        ":default_video_quality_analyzer_shared",
-        "../..:test_support",
-        "../../../api:create_frame_generator",
-        "../../../api:rtp_packet_info",
-        "../../../api/test/metrics:metric",
-        "../../../api/test/metrics:metrics_logger",
-        "../../../api/test/metrics:stdout_metrics_exporter",
-        "../../../api/video:encoded_image",
-        "../../../api/video:video_frame",
-        "../../../common_video",
-        "../../../rtc_base:stringutils",
-        "../../../rtc_tools:video_quality_analysis",
-        "../../../system_wrappers",
-      ]
-    }
-
-    rtc_library("default_video_quality_analyzer_frames_comparator_test") {
-      testonly = true
-      sources = [ "analyzer/video/default_video_quality_analyzer_frames_comparator_test.cc" ]
-      deps = [
-        ":default_video_quality_analyzer_internal",
-        ":default_video_quality_analyzer_shared",
-        "../..:test_support",
-        "../../../api:create_frame_generator",
-        "../../../api/units:timestamp",
-        "../../../rtc_base:stringutils",
-        "../../../system_wrappers",
-      ]
-    }
-
-    rtc_library("names_collection_test") {
-      testonly = true
-      sources = [ "analyzer/video/names_collection_test.cc" ]
-      deps = [
-        ":default_video_quality_analyzer_internal",
-        "../..:test_support",
-      ]
-      absl_deps = [
-        "//third_party/abseil-cpp/absl/strings:strings",
-        "//third_party/abseil-cpp/absl/types:optional",
-      ]
-    }
-
-    rtc_library("multi_reader_queue_test") {
-      testonly = true
-      sources = [ "analyzer/video/multi_reader_queue_test.cc" ]
-      deps = [
-        ":multi_reader_queue",
-        "../../../test:test_support",
-      ]
-      absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
-    }
-
-    rtc_library("default_video_quality_analyzer_stream_state_test") {
-      testonly = true
-      sources = [
-        "analyzer/video/default_video_quality_analyzer_stream_state_test.cc",
-      ]
-      deps = [
-        ":default_video_quality_analyzer_internal",
-        "../../../api/units:timestamp",
-        "../../../test:test_support",
-      ]
-      absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
-    }
   }
 
   rtc_library("analyzer_helper") {
@@ -830,158 +432,6 @@
     absl_deps = [ "//third_party/abseil-cpp/absl/strings" ]
   }
 
-  rtc_library("example_video_quality_analyzer") {
-    testonly = true
-    sources = [
-      "analyzer/video/example_video_quality_analyzer.cc",
-      "analyzer/video/example_video_quality_analyzer.h",
-    ]
-
-    deps = [
-      "../../../api:array_view",
-      "../../../api:video_quality_analyzer_api",
-      "../../../api/video:encoded_image",
-      "../../../api/video:video_frame",
-      "../../../api/video:video_rtp_headers",
-      "../../../rtc_base:criticalsection",
-      "../../../rtc_base:logging",
-      "../../../rtc_base/synchronization:mutex",
-    ]
-  }
-
-  rtc_library("video_quality_metrics_reporter") {
-    testonly = true
-    sources = [
-      "analyzer/video/video_quality_metrics_reporter.cc",
-      "analyzer/video/video_quality_metrics_reporter.h",
-    ]
-    deps = [
-      ":metric_metadata_keys",
-      "../..:perf_test",
-      "../../../api:peer_connection_quality_test_fixture_api",
-      "../../../api:rtc_stats_api",
-      "../../../api:track_id_stream_info_map",
-      "../../../api/numerics",
-      "../../../api/test/metrics:metric",
-      "../../../api/test/metrics:metrics_logger",
-      "../../../api/units:data_rate",
-      "../../../api/units:data_size",
-      "../../../api/units:time_delta",
-      "../../../api/units:timestamp",
-      "../../../rtc_base:checks",
-      "../../../rtc_base:criticalsection",
-      "../../../rtc_base:rtc_numerics",
-      "../../../rtc_base/synchronization:mutex",
-    ]
-    absl_deps = [ "//third_party/abseil-cpp/absl/strings" ]
-  }
-
-  rtc_library("metric_metadata_keys") {
-    testonly = true
-    sources = [ "metric_metadata_keys.h" ]
-  }
-
-  rtc_library("default_video_quality_analyzer") {
-    testonly = true
-    sources = [
-      "analyzer/video/default_video_quality_analyzer.cc",
-      "analyzer/video/default_video_quality_analyzer.h",
-    ]
-
-    deps = [
-      ":default_video_quality_analyzer_internal",
-      ":default_video_quality_analyzer_shared",
-      ":metric_metadata_keys",
-      "../../../api:array_view",
-      "../../../api:video_quality_analyzer_api",
-      "../../../api/numerics",
-      "../../../api/test/metrics:metric",
-      "../../../api/test/metrics:metrics_logger",
-      "../../../api/units:data_size",
-      "../../../api/units:time_delta",
-      "../../../api/units:timestamp",
-      "../../../api/video:encoded_image",
-      "../../../api/video:video_frame",
-      "../../../rtc_base:checks",
-      "../../../rtc_base:logging",
-      "../../../rtc_base:macromagic",
-      "../../../rtc_base:stringutils",
-      "../../../rtc_base/synchronization:mutex",
-      "../../../system_wrappers",
-    ]
-    absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
-  }
-
-  # This target contains implementation details of DefaultVideoQualityAnalyzer,
-  # so headers exported by it shouldn't be used in other places.
-  rtc_library("default_video_quality_analyzer_internal") {
-    visibility = [
-      ":default_video_quality_analyzer",
-      ":default_video_quality_analyzer_frames_comparator_test",
-      ":default_video_quality_analyzer_stream_state_test",
-      ":names_collection_test",
-    ]
-
-    testonly = true
-    sources = [
-      "analyzer/video/default_video_quality_analyzer_cpu_measurer.cc",
-      "analyzer/video/default_video_quality_analyzer_cpu_measurer.h",
-      "analyzer/video/default_video_quality_analyzer_frame_in_flight.cc",
-      "analyzer/video/default_video_quality_analyzer_frame_in_flight.h",
-      "analyzer/video/default_video_quality_analyzer_frames_comparator.cc",
-      "analyzer/video/default_video_quality_analyzer_frames_comparator.h",
-      "analyzer/video/default_video_quality_analyzer_internal_shared_objects.cc",
-      "analyzer/video/default_video_quality_analyzer_internal_shared_objects.h",
-      "analyzer/video/default_video_quality_analyzer_stream_state.cc",
-      "analyzer/video/default_video_quality_analyzer_stream_state.h",
-      "analyzer/video/names_collection.cc",
-      "analyzer/video/names_collection.h",
-    ]
-
-    deps = [
-      ":default_video_quality_analyzer_shared",
-      ":metric_metadata_keys",
-      ":multi_reader_queue",
-      "../../../api:array_view",
-      "../../../api:scoped_refptr",
-      "../../../api/numerics:numerics",
-      "../../../api/units:data_size",
-      "../../../api/units:timestamp",
-      "../../../api/video:video_frame",
-      "../../../api/video:video_frame_type",
-      "../../../common_video",
-      "../../../rtc_base:checks",
-      "../../../rtc_base:platform_thread",
-      "../../../rtc_base:rtc_base_tests_utils",
-      "../../../rtc_base:rtc_event",
-      "../../../rtc_base:stringutils",
-      "../../../rtc_base:timeutils",
-      "../../../rtc_base/synchronization:mutex",
-      "../../../rtc_tools:video_quality_analysis",
-      "../../../system_wrappers:system_wrappers",
-    ]
-    absl_deps = [
-      "//third_party/abseil-cpp/absl/strings:strings",
-      "//third_party/abseil-cpp/absl/types:optional",
-    ]
-  }
-
-  rtc_library("default_video_quality_analyzer_shared") {
-    testonly = true
-    sources = [
-      "analyzer/video/default_video_quality_analyzer_shared_objects.cc",
-      "analyzer/video/default_video_quality_analyzer_shared_objects.h",
-    ]
-
-    deps = [
-      "../../../api/numerics:numerics",
-      "../../../api/units:timestamp",
-      "../../../rtc_base:checks",
-      "../../../rtc_base:stringutils",
-    ]
-    absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
-  }
-
   rtc_library("network_quality_metrics_reporter") {
     testonly = true
     sources = [
@@ -1092,11 +542,4 @@
       "//third_party/abseil-cpp/absl/types:optional",
     ]
   }
-
-  rtc_library("multi_reader_queue") {
-    testonly = true
-    sources = [ "analyzer/video/multi_reader_queue.h" ]
-    deps = [ "../../../rtc_base:checks" ]
-    absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
-  }
 }
diff --git a/test/pc/e2e/analyzer/video/BUILD.gn b/test/pc/e2e/analyzer/video/BUILD.gn
new file mode 100644
index 0000000..47a3721
--- /dev/null
+++ b/test/pc/e2e/analyzer/video/BUILD.gn
@@ -0,0 +1,572 @@
+# Copyright (c) 2022 The WebRTC project authors. All Rights Reserved.
+#
+# Use of this source code is governed by a BSD-style license
+# that can be found in the LICENSE file in the root of the source
+# tree. An additional intellectual property rights grant can be found
+# in the file PATENTS.  All contributing project authors may
+# be found in the AUTHORS file in the root of the source tree.
+
+import("../../../../../webrtc.gni")
+
+if (!build_with_chromium) {
+  group("video_analyzer") {
+    testonly = true
+
+    deps = [
+      ":analyzing_video_sinks_helper",
+      ":default_video_quality_analyzer_internal",
+      ":encoded_image_data_injector_api",
+      ":example_video_quality_analyzer",
+      ":multi_reader_queue",
+      ":quality_analyzing_video_decoder",
+      ":quality_analyzing_video_encoder",
+      ":simulcast_dummy_buffer_helper",
+      ":single_process_encoded_image_data_injector",
+      ":video_dumping",
+      ":video_frame_tracking_id_injector",
+      ":video_quality_metrics_reporter",
+    ]
+    if (rtc_include_tests) {
+      deps += [
+        ":analyzing_video_sink",
+        ":video_quality_analyzer_injection_helper",
+      ]
+    }
+  }
+
+  if (rtc_include_tests) {
+    group("video_analyzer_unittests") {
+      testonly = true
+
+      deps = [
+        ":analyzing_video_sink_test",
+        ":analyzing_video_sinks_helper_test",
+        ":default_video_quality_analyzer_frames_comparator_test",
+        ":default_video_quality_analyzer_metric_names_test",
+        ":default_video_quality_analyzer_stream_state_test",
+        ":default_video_quality_analyzer_test",
+        ":multi_reader_queue_test",
+        ":names_collection_test",
+        ":simulcast_dummy_buffer_helper_test",
+        ":single_process_encoded_image_data_injector_unittest",
+        ":video_dumping_test",
+        ":video_frame_tracking_id_injector_unittest",
+      ]
+    }
+  }
+}
+
+rtc_library("video_dumping") {
+  testonly = true
+  sources = [
+    "video_dumping.cc",
+    "video_dumping.h",
+  ]
+  deps = [
+    "../../../..:video_test_support",
+    "../../../../../api/test/video:video_frame_writer",
+    "../../../../../api/video:video_frame",
+    "../../../../../rtc_base:logging",
+    "../../../../../system_wrappers",
+  ]
+  absl_deps = [ "//third_party/abseil-cpp/absl/strings" ]
+}
+
+rtc_library("encoded_image_data_injector_api") {
+  testonly = true
+  sources = [ "encoded_image_data_injector.h" ]
+
+  deps = [ "../../../../../api/video:encoded_image" ]
+  absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
+}
+
+rtc_library("single_process_encoded_image_data_injector") {
+  testonly = true
+  sources = [
+    "single_process_encoded_image_data_injector.cc",
+    "single_process_encoded_image_data_injector.h",
+  ]
+
+  deps = [
+    ":encoded_image_data_injector_api",
+    "../../../../../api/video:encoded_image",
+    "../../../../../rtc_base:checks",
+    "../../../../../rtc_base/synchronization:mutex",
+  ]
+  absl_deps = [ "//third_party/abseil-cpp/absl/memory" ]
+}
+
+rtc_library("video_frame_tracking_id_injector") {
+  testonly = true
+  sources = [
+    "video_frame_tracking_id_injector.cc",
+    "video_frame_tracking_id_injector.h",
+  ]
+
+  deps = [
+    ":encoded_image_data_injector_api",
+    "../../../../../api/video:encoded_image",
+    "../../../../../rtc_base:checks",
+  ]
+  absl_deps = [ "//third_party/abseil-cpp/absl/memory" ]
+}
+
+rtc_library("simulcast_dummy_buffer_helper") {
+  testonly = true
+  sources = [
+    "simulcast_dummy_buffer_helper.cc",
+    "simulcast_dummy_buffer_helper.h",
+  ]
+  deps = [ "../../../../../api/video:video_frame" ]
+}
+
+rtc_library("quality_analyzing_video_decoder") {
+  testonly = true
+  sources = [
+    "quality_analyzing_video_decoder.cc",
+    "quality_analyzing_video_decoder.h",
+  ]
+  deps = [
+    ":encoded_image_data_injector_api",
+    ":simulcast_dummy_buffer_helper",
+    "../../../../../api:video_quality_analyzer_api",
+    "../../../../../api/video:encoded_image",
+    "../../../../../api/video:video_frame",
+    "../../../../../api/video_codecs:video_codecs_api",
+    "../../../../../modules/video_coding:video_codec_interface",
+    "../../../../../rtc_base:logging",
+    "../../../../../rtc_base/synchronization:mutex",
+  ]
+  absl_deps = [
+    "//third_party/abseil-cpp/absl/strings",
+    "//third_party/abseil-cpp/absl/types:optional",
+  ]
+}
+
+rtc_library("quality_analyzing_video_encoder") {
+  testonly = true
+  sources = [
+    "quality_analyzing_video_encoder.cc",
+    "quality_analyzing_video_encoder.h",
+  ]
+  deps = [
+    ":encoded_image_data_injector_api",
+    "../../../../../api:video_quality_analyzer_api",
+    "../../../../../api/test/pclf:media_configuration",
+    "../../../../../api/video:video_frame",
+    "../../../../../api/video_codecs:video_codecs_api",
+    "../../../../../modules/video_coding:video_codec_interface",
+    "../../../../../modules/video_coding/svc:scalability_mode_util",
+    "../../../../../rtc_base:logging",
+    "../../../../../rtc_base/synchronization:mutex",
+  ]
+  absl_deps = [ "//third_party/abseil-cpp/absl/strings" ]
+}
+
+rtc_library("analyzing_video_sinks_helper") {
+  testonly = true
+  sources = [
+    "analyzing_video_sinks_helper.cc",
+    "analyzing_video_sinks_helper.h",
+  ]
+  deps = [
+    "../../../../../api/test/pclf:media_configuration",
+    "../../../../../api/test/video:video_frame_writer",
+    "../../../../../rtc_base:macromagic",
+    "../../../../../rtc_base/synchronization:mutex",
+  ]
+  absl_deps = [
+    "//third_party/abseil-cpp/absl/strings",
+    "//third_party/abseil-cpp/absl/types:optional",
+  ]
+}
+
+rtc_library("example_video_quality_analyzer") {
+  testonly = true
+  sources = [
+    "example_video_quality_analyzer.cc",
+    "example_video_quality_analyzer.h",
+  ]
+
+  deps = [
+    "../../../../../api:array_view",
+    "../../../../../api:video_quality_analyzer_api",
+    "../../../../../api/video:encoded_image",
+    "../../../../../api/video:video_frame",
+    "../../../../../rtc_base:logging",
+    "../../../../../rtc_base/synchronization:mutex",
+  ]
+}
+
+# This target contains implementation details of DefaultVideoQualityAnalyzer,
+# so headers exported by it shouldn't be used in other places.
+rtc_library("default_video_quality_analyzer_internal") {
+  visibility = [
+    ":default_video_quality_analyzer",
+    ":default_video_quality_analyzer_frames_comparator_test",
+    ":default_video_quality_analyzer_stream_state_test",
+    ":names_collection_test",
+    ":video_analyzer",
+  ]
+
+  testonly = true
+  sources = [
+    "default_video_quality_analyzer_cpu_measurer.cc",
+    "default_video_quality_analyzer_cpu_measurer.h",
+    "default_video_quality_analyzer_frame_in_flight.cc",
+    "default_video_quality_analyzer_frame_in_flight.h",
+    "default_video_quality_analyzer_frames_comparator.cc",
+    "default_video_quality_analyzer_frames_comparator.h",
+    "default_video_quality_analyzer_internal_shared_objects.cc",
+    "default_video_quality_analyzer_internal_shared_objects.h",
+    "default_video_quality_analyzer_stream_state.cc",
+    "default_video_quality_analyzer_stream_state.h",
+    "names_collection.cc",
+    "names_collection.h",
+  ]
+
+  deps = [
+    ":default_video_quality_analyzer_shared",
+    ":multi_reader_queue",
+    "../..:metric_metadata_keys",
+    "../../../../../api:array_view",
+    "../../../../../api:scoped_refptr",
+    "../../../../../api/units:data_size",
+    "../../../../../api/units:timestamp",
+    "../../../../../api/video:video_frame",
+    "../../../../../api/video:video_frame_type",
+    "../../../../../common_video",
+    "../../../../../rtc_base:checks",
+    "../../../../../rtc_base:platform_thread",
+    "../../../../../rtc_base:rtc_base_tests_utils",
+    "../../../../../rtc_base:rtc_event",
+    "../../../../../rtc_base:stringutils",
+    "../../../../../rtc_base:timeutils",
+    "../../../../../rtc_base/synchronization:mutex",
+    "../../../../../rtc_tools:video_quality_analysis",
+    "../../../../../system_wrappers",
+  ]
+  absl_deps = [
+    "//third_party/abseil-cpp/absl/strings:strings",
+    "//third_party/abseil-cpp/absl/types:optional",
+  ]
+}
+
+rtc_library("multi_reader_queue") {
+  testonly = true
+  sources = [ "multi_reader_queue.h" ]
+  deps = [ "../../../../../rtc_base:checks" ]
+  absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
+}
+
+rtc_library("video_quality_metrics_reporter") {
+  testonly = true
+  sources = [
+    "video_quality_metrics_reporter.cc",
+    "video_quality_metrics_reporter.h",
+  ]
+  deps = [
+    "../..:metric_metadata_keys",
+    "../../../../../api:peer_connection_quality_test_fixture_api",
+    "../../../../../api:rtc_stats_api",
+    "../../../../../api:track_id_stream_info_map",
+    "../../../../../api/numerics",
+    "../../../../../api/test/metrics:metric",
+    "../../../../../api/test/metrics:metrics_logger",
+    "../../../../../api/units:data_rate",
+    "../../../../../api/units:data_size",
+    "../../../../../api/units:time_delta",
+    "../../../../../api/units:timestamp",
+    "../../../../../rtc_base:checks",
+    "../../../../../rtc_base/synchronization:mutex",
+  ]
+  absl_deps = [ "//third_party/abseil-cpp/absl/strings" ]
+}
+
+rtc_library("default_video_quality_analyzer") {
+  testonly = true
+  sources = [
+    "default_video_quality_analyzer.cc",
+    "default_video_quality_analyzer.h",
+  ]
+
+  deps = [
+    ":default_video_quality_analyzer_internal",
+    ":default_video_quality_analyzer_shared",
+    "../..:metric_metadata_keys",
+    "../../../../../api:array_view",
+    "../../../../../api:video_quality_analyzer_api",
+    "../../../../../api/numerics",
+    "../../../../../api/test/metrics:metric",
+    "../../../../../api/test/metrics:metrics_logger",
+    "../../../../../api/units:data_size",
+    "../../../../../api/units:time_delta",
+    "../../../../../api/units:timestamp",
+    "../../../../../api/video:encoded_image",
+    "../../../../../api/video:video_frame",
+    "../../../../../rtc_base:checks",
+    "../../../../../rtc_base:logging",
+    "../../../../../rtc_base:macromagic",
+    "../../../../../rtc_base:stringutils",
+    "../../../../../rtc_base/synchronization:mutex",
+    "../../../../../system_wrappers",
+  ]
+  absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
+}
+
+rtc_library("default_video_quality_analyzer_shared") {
+  testonly = true
+  sources = [
+    "default_video_quality_analyzer_shared_objects.cc",
+    "default_video_quality_analyzer_shared_objects.h",
+  ]
+
+  deps = [
+    "../../../../../api/numerics",
+    "../../../../../api/units:timestamp",
+    "../../../../../rtc_base:checks",
+    "../../../../../rtc_base:stringutils",
+  ]
+  absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
+}
+
+rtc_library("analyzing_video_sink") {
+  testonly = true
+  sources = [
+    "analyzing_video_sink.cc",
+    "analyzing_video_sink.h",
+  ]
+  deps = [
+    ":analyzing_video_sinks_helper",
+    ":simulcast_dummy_buffer_helper",
+    ":video_dumping",
+    "../../../..:fixed_fps_video_frame_writer_adapter",
+    "../../../..:test_renderer",
+    "../../../../../api:video_quality_analyzer_api",
+    "../../../../../api/numerics",
+    "../../../../../api/test/pclf:media_configuration",
+    "../../../../../api/test/video:video_frame_writer",
+    "../../../../../api/units:timestamp",
+    "../../../../../api/video:video_frame",
+    "../../../../../rtc_base:checks",
+    "../../../../../rtc_base:logging",
+    "../../../../../rtc_base:macromagic",
+    "../../../../../rtc_base/synchronization:mutex",
+    "../../../../../system_wrappers",
+  ]
+  absl_deps = [
+    "//third_party/abseil-cpp/absl/memory:memory",
+    "//third_party/abseil-cpp/absl/strings",
+    "//third_party/abseil-cpp/absl/types:optional",
+  ]
+}
+
+rtc_library("video_quality_analyzer_injection_helper") {
+  testonly = true
+  sources = [
+    "video_quality_analyzer_injection_helper.cc",
+    "video_quality_analyzer_injection_helper.h",
+  ]
+  deps = [
+    ":analyzing_video_sink",
+    ":analyzing_video_sinks_helper",
+    ":encoded_image_data_injector_api",
+    ":quality_analyzing_video_decoder",
+    ":quality_analyzing_video_encoder",
+    ":simulcast_dummy_buffer_helper",
+    ":video_dumping",
+    "../../../..:fixed_fps_video_frame_writer_adapter",
+    "../../../..:test_renderer",
+    "../../../..:video_test_common",
+    "../../../..:video_test_support",
+    "../../../../../api:array_view",
+    "../../../../../api:stats_observer_interface",
+    "../../../../../api:video_quality_analyzer_api",
+    "../../../../../api/test/pclf:media_configuration",
+    "../../../../../api/video:video_frame",
+    "../../../../../api/video_codecs:video_codecs_api",
+    "../../../../../rtc_base:checks",
+    "../../../../../rtc_base:logging",
+    "../../../../../rtc_base:stringutils",
+    "../../../../../rtc_base/synchronization:mutex",
+    "../../../../../system_wrappers",
+  ]
+  absl_deps = [
+    "//third_party/abseil-cpp/absl/memory",
+    "//third_party/abseil-cpp/absl/strings",
+  ]
+}
+
+if (rtc_include_tests) {
+  rtc_library("simulcast_dummy_buffer_helper_test") {
+    testonly = true
+    sources = [ "simulcast_dummy_buffer_helper_test.cc" ]
+    deps = [
+      ":simulcast_dummy_buffer_helper",
+      "../../../..:test_support",
+      "../../../../../api/video:video_frame",
+      "../../../../../rtc_base:random",
+    ]
+  }
+
+  rtc_library("analyzing_video_sink_test") {
+    testonly = true
+    sources = [ "analyzing_video_sink_test.cc" ]
+    deps = [
+      ":analyzing_video_sink",
+      ":example_video_quality_analyzer",
+      "../../../..:fileutils",
+      "../../../..:test_support",
+      "../../../..:video_test_support",
+      "../../../../../api:create_frame_generator",
+      "../../../../../api:frame_generator_api",
+      "../../../../../api:scoped_refptr",
+      "../../../../../api/test/pclf:media_configuration",
+      "../../../../../api/units:time_delta",
+      "../../../../../api/units:timestamp",
+      "../../../../../api/video:video_frame",
+      "../../../../../common_video",
+      "../../../../../rtc_base:timeutils",
+      "../../../../../system_wrappers",
+      "../../../../time_controller",
+    ]
+    absl_deps = [
+      "//third_party/abseil-cpp/absl/strings",
+      "//third_party/abseil-cpp/absl/types:optional",
+    ]
+  }
+
+  rtc_library("analyzing_video_sinks_helper_test") {
+    testonly = true
+    sources = [ "analyzing_video_sinks_helper_test.cc" ]
+    deps = [
+      ":analyzing_video_sinks_helper",
+      "../../../..:test_support",
+      "../../../../../api/test/pclf:media_configuration",
+    ]
+    absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
+  }
+
+  rtc_library("default_video_quality_analyzer_frames_comparator_test") {
+    testonly = true
+    sources = [ "default_video_quality_analyzer_frames_comparator_test.cc" ]
+    deps = [
+      ":default_video_quality_analyzer_internal",
+      ":default_video_quality_analyzer_shared",
+      "../../../..:test_support",
+      "../../../../../api:create_frame_generator",
+      "../../../../../api/units:timestamp",
+      "../../../../../rtc_base:stringutils",
+      "../../../../../system_wrappers",
+    ]
+  }
+
+  rtc_library("names_collection_test") {
+    testonly = true
+    sources = [ "names_collection_test.cc" ]
+    deps = [
+      ":default_video_quality_analyzer_internal",
+      "../../../..:test_support",
+    ]
+    absl_deps = [
+      "//third_party/abseil-cpp/absl/strings:strings",
+      "//third_party/abseil-cpp/absl/types:optional",
+    ]
+  }
+
+  rtc_library("multi_reader_queue_test") {
+    testonly = true
+    sources = [ "multi_reader_queue_test.cc" ]
+    deps = [
+      ":multi_reader_queue",
+      "../../../..:test_support",
+    ]
+    absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
+  }
+
+  rtc_library("default_video_quality_analyzer_stream_state_test") {
+    testonly = true
+    sources = [ "default_video_quality_analyzer_stream_state_test.cc" ]
+    deps = [
+      ":default_video_quality_analyzer_internal",
+      "../../../..:test_support",
+      "../../../../../api/units:timestamp",
+    ]
+    absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
+  }
+
+  rtc_library("default_video_quality_analyzer_test") {
+    testonly = true
+    sources = [ "default_video_quality_analyzer_test.cc" ]
+    deps = [
+      ":default_video_quality_analyzer",
+      ":default_video_quality_analyzer_shared",
+      "../../../..:test_support",
+      "../../../../../api:create_frame_generator",
+      "../../../../../api:rtp_packet_info",
+      "../../../../../api/test/metrics:global_metrics_logger_and_exporter",
+      "../../../../../api/video:encoded_image",
+      "../../../../../api/video:video_frame",
+      "../../../../../common_video",
+      "../../../../../rtc_base:stringutils",
+      "../../../../../rtc_tools:video_quality_analysis",
+      "../../../../../system_wrappers",
+    ]
+  }
+
+  rtc_library("default_video_quality_analyzer_metric_names_test") {
+    testonly = true
+    sources = [ "default_video_quality_analyzer_metric_names_test.cc" ]
+    deps = [
+      ":default_video_quality_analyzer",
+      "../../../..:test_support",
+      "../../../../../api:create_frame_generator",
+      "../../../../../api:rtp_packet_info",
+      "../../../../../api/test/metrics:metric",
+      "../../../../../api/test/metrics:metrics_logger",
+      "../../../../../api/test/metrics:stdout_metrics_exporter",
+      "../../../../../api/video:encoded_image",
+      "../../../../../api/video:video_frame",
+      "../../../../../common_video",
+      "../../../../../rtc_tools:video_quality_analysis",
+      "../../../../../system_wrappers",
+    ]
+  }
+
+  rtc_library("video_dumping_test") {
+    testonly = true
+    sources = [ "video_dumping_test.cc" ]
+    deps = [
+      ":video_dumping",
+      "../../../..:fileutils",
+      "../../../..:test_support",
+      "../../../..:video_test_support",
+      "../../../../../api:scoped_refptr",
+      "../../../../../api/video:video_frame",
+      "../../../../../rtc_base:random",
+    ]
+    absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
+  }
+
+  rtc_library("single_process_encoded_image_data_injector_unittest") {
+    testonly = true
+    sources = [ "single_process_encoded_image_data_injector_unittest.cc" ]
+    deps = [
+      ":single_process_encoded_image_data_injector",
+      "../../../..:test_support",
+      "../../../../../api/video:encoded_image",
+      "../../../../../rtc_base:buffer",
+    ]
+  }
+
+  rtc_library("video_frame_tracking_id_injector_unittest") {
+    testonly = true
+    sources = [ "video_frame_tracking_id_injector_unittest.cc" ]
+    deps = [
+      ":video_frame_tracking_id_injector",
+      "../../../..:test_support",
+      "../../../../../api/video:encoded_image",
+      "../../../../../rtc_base:buffer",
+    ]
+  }
+}