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}
diff --git a/rtc_tools/BUILD.gn b/rtc_tools/BUILD.gn
index 99f1ae6..f6b03da 100644
--- a/rtc_tools/BUILD.gn
+++ b/rtc_tools/BUILD.gn
@@ -17,6 +17,7 @@
     ":command_line_parser",
     ":frame_analyzer",
     ":video_quality_analysis",
+    ":y4m_file_reader",
   ]
   if (!build_with_chromium) {
     deps += [
@@ -59,12 +60,28 @@
   ]
 }
 
+rtc_static_library("y4m_file_reader") {
+  sources = [
+    "y4m_file_reader.cc",
+    "y4m_file_reader.h",
+  ]
+  deps = [
+    "../api/video:video_frame",
+    "../api/video:video_frame_i420",
+    "../rtc_base:rtc_base_approved",
+    "../rtc_base:sequenced_task_checker",
+    "//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 = [
+    ":y4m_file_reader",
+    "../api/video:video_frame_i420",
     "../common_video",
     "../test:perf_test",
     "//third_party/libyuv",
@@ -80,6 +97,7 @@
   deps = [
     ":command_line_parser",
     ":video_quality_analysis",
+    ":y4m_file_reader",
     "../test:perf_test",
     "//build/win:default_exe_manifest",
   ]
@@ -96,6 +114,7 @@
     deps = [
       ":command_line_parser",
       ":video_quality_analysis",
+      ":y4m_file_reader",
       "//build/win:default_exe_manifest",
     ]
   }
@@ -108,6 +127,7 @@
 
     deps = [
       ":video_quality_analysis",
+      ":y4m_file_reader",
     ]
   }
 
@@ -288,7 +308,6 @@
   tools_unittests_resources = [
     "../resources/foreman_cif.yuv",
     "../resources/reference_less_video_test_file.y4m",
-    "../resources/video_quality_analysis_frame.txt",
   ]
 
   if (is_ios) {
@@ -310,6 +329,7 @@
       "frame_editing/frame_editing_unittest.cc",
       "sanitizers_unittest.cc",
       "simple_command_line_parser_unittest.cc",
+      "y4m_file_reader_unittest.cc",
     ]
 
     if (!build_with_chromium && is_clang) {
@@ -322,6 +342,7 @@
       ":frame_editing_lib",
       ":reference_less_video_analysis_lib",
       ":video_quality_analysis",
+      ":y4m_file_reader",
       "../common_video:common_video",
       "../rtc_base",
       "../rtc_base:checks",