Reland "Add Y4mFileReader"

This is a reland of 404be7f302358e6be16aadeba8bc8f8aba348c0f
It adds support for reading .yuv files as well to not break anything.

Original change's description:
> Add Y4mFileReader
>
> Encapsulate logic for reading .y4m video files in a single class. We
> currently have spread out logic for opening .y4m files with partial
> parsing. This CL consolidates this logic into a single class with a well
> defined interface.
>
> Change-Id: Id61673b3c95a0053b30e95b4cf382e1c6b05fc30
> Bug: webrtc:9642
> Reviewed-on: https://webrtc-review.googlesource.com/94772
> Reviewed-by: Patrik Höglund <phoglund@webrtc.org>
> Reviewed-by: Paulina Hensman <phensman@webrtc.org>
> Commit-Queue: Magnus Jedvert <magjed@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#24398}

TBR=phensman,phoglund

Bug: webrtc:9642
Change-Id: Idecc5ec5da767221a5f5b439989f4fe07e3b3615
Reviewed-on: https://webrtc-review.googlesource.com/97983
Commit-Queue: Magnus Jedvert <magjed@webrtc.org>
Reviewed-by: Magnus Jedvert <magjed@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24571}
diff --git a/rtc_tools/BUILD.gn b/rtc_tools/BUILD.gn
index 369c7f2..b2a97ea 100644
--- a/rtc_tools/BUILD.gn
+++ b/rtc_tools/BUILD.gn
@@ -16,6 +16,7 @@
   deps = [
     ":command_line_parser",
     ":frame_analyzer",
+    ":video_file_reader",
     ":video_quality_analysis",
   ]
   if (!build_with_chromium) {
@@ -59,12 +60,27 @@
   ]
 }
 
+rtc_static_library("video_file_reader") {
+  sources = [
+    "video_file_reader.cc",
+    "video_file_reader.h",
+  ]
+  deps = [
+    "../api/video:video_frame",
+    "../api/video:video_frame_i420",
+    "../rtc_base:rtc_base_approved",
+    "//third_party/abseil-cpp/absl/types:optional",
+  ]
+}
+
 rtc_static_library("video_quality_analysis") {
   sources = [
     "frame_analyzer/video_quality_analysis.cc",
     "frame_analyzer/video_quality_analysis.h",
   ]
   deps = [
+    ":video_file_reader",
+    "../api/video:video_frame_i420",
     "../common_video",
     "../test:perf_test",
     "//third_party/libyuv",
@@ -79,6 +95,7 @@
 
   deps = [
     ":command_line_parser",
+    ":video_file_reader",
     ":video_quality_analysis",
     "../test:perf_test",
   ]
@@ -94,6 +111,7 @@
 
     deps = [
       ":command_line_parser",
+      ":video_file_reader",
       ":video_quality_analysis",
     ]
   }
@@ -105,6 +123,7 @@
     ]
 
     deps = [
+      ":video_file_reader",
       ":video_quality_analysis",
     ]
   }
@@ -281,7 +300,6 @@
   tools_unittests_resources = [
     "../resources/foreman_cif.yuv",
     "../resources/reference_less_video_test_file.y4m",
-    "../resources/video_quality_analysis_frame.txt",
   ]
 
   if (is_ios) {
@@ -303,6 +321,7 @@
       "frame_editing/frame_editing_unittest.cc",
       "sanitizers_unittest.cc",
       "simple_command_line_parser_unittest.cc",
+      "video_file_reader_unittest.cc",
     ]
 
     if (!build_with_chromium && is_clang) {
@@ -314,6 +333,7 @@
       ":command_line_parser",
       ":frame_editing_lib",
       ":reference_less_video_analysis_lib",
+      ":video_file_reader",
       ":video_quality_analysis",
       "../common_video:common_video",
       "../rtc_base",