From f259078009238708daa9fbe5027adf1c182ceae2 Mon Sep 17 00:00:00 2001 From: Magnus Jedvert Date: Thu, 22 Nov 2018 15:24:25 +0100 Subject: [PATCH] Use cropping aligning in video quality analysis tool MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit TBR=phoglund Bug: webrtc:9642 Change-Id: I32e54473ef6699b862b36c36c7d975b381db6ed2 Reviewed-on: https://webrtc-review.googlesource.com/c/99580 Commit-Queue: Magnus Jedvert Reviewed-by: Patrik Höglund Reviewed-by: Sami Kalliomäki Cr-Commit-Position: refs/heads/master@{#25757} --- rtc_tools/frame_analyzer/frame_analyzer.cc | 43 +++++++++++++++---- .../frame_analyzer/video_quality_analysis.cc | 29 ++----------- 2 files changed, 38 insertions(+), 34 deletions(-) diff --git a/rtc_tools/frame_analyzer/frame_analyzer.cc b/rtc_tools/frame_analyzer/frame_analyzer.cc index 89440ea984..fb5f8de227 100644 --- a/rtc_tools/frame_analyzer/frame_analyzer.cc +++ b/rtc_tools/frame_analyzer/frame_analyzer.cc @@ -15,7 +15,10 @@ #include #include +#include "rtc_base/strings/string_builder.h" #include "rtc_base/stringutils.h" +#include "rtc_tools/frame_analyzer/video_color_aligner.h" +#include "rtc_tools/frame_analyzer/video_geometry_aligner.h" #include "rtc_tools/frame_analyzer/video_quality_analysis.h" #include "rtc_tools/frame_analyzer/video_temporal_aligner.h" #include "rtc_tools/simple_command_line_parser.h" @@ -133,8 +136,35 @@ int main(int argc, char* argv[]) { const std::vector matching_indices = webrtc::test::FindMatchingFrameIndices(reference_video, test_video); - results.frames = - webrtc::test::RunAnalysis(reference_video, test_video, matching_indices); + // Align the reference video both temporally and geometrically. I.e. align the + // frames to match up in order to the test video, and align a crop region of + // the reference video to match up to the test video. + const rtc::scoped_refptr aligned_reference_video = + AdjustCropping(ReorderVideo(reference_video, matching_indices), + test_video); + + // Calculate if there is any systematic color difference between the reference + // and test video. + const webrtc::test::ColorTransformationMatrix color_transformation = + CalculateColorTransformationMatrix(aligned_reference_video, test_video); + + char buf[256]; + rtc::SimpleStringBuilder string_builder(buf); + for (int i = 0; i < 3; ++i) { + string_builder << "\n"; + for (int j = 0; j < 4; ++j) + string_builder.AppendFormat("%6.2f ", color_transformation[i][j]); + } + printf("Adjusting test video with color transformation: %s\n", + string_builder.str()); + + // Adjust all frames in the test video with the calculated color + // transformation. + const rtc::scoped_refptr color_adjusted_test_video = + AdjustColors(color_transformation, test_video); + + results.frames = webrtc::test::RunAnalysis( + aligned_reference_video, color_adjusted_test_video, matching_indices); const std::vector clusters = webrtc::test::CalculateFrameClusters(matching_indices); @@ -151,20 +181,17 @@ int main(int argc, char* argv[]) { if (!chartjson_result_file.empty()) { webrtc::test::WritePerfResults(chartjson_result_file); } - rtc::scoped_refptr reordered_video = - webrtc::test::GenerateAlignedReferenceVideo(reference_video, - matching_indices); std::string aligned_output_file = parser.GetFlag("aligned_output_file"); if (!aligned_output_file.empty()) { - webrtc::test::WriteVideoToFile(reordered_video, aligned_output_file, + webrtc::test::WriteVideoToFile(aligned_reference_video, aligned_output_file, /*fps=*/30); } std::string yuv_directory = parser.GetFlag("yuv_directory"); if (!yuv_directory.empty()) { - webrtc::test::WriteVideoToFile(reordered_video, + webrtc::test::WriteVideoToFile(aligned_reference_video, JoinFilename(yuv_directory, "ref.yuv"), /*fps=*/30); - webrtc::test::WriteVideoToFile(test_video, + webrtc::test::WriteVideoToFile(color_adjusted_test_video, JoinFilename(yuv_directory, "test.yuv"), /*fps=*/30); } diff --git a/rtc_tools/frame_analyzer/video_quality_analysis.cc b/rtc_tools/frame_analyzer/video_quality_analysis.cc index f790604b16..40026802c7 100644 --- a/rtc_tools/frame_analyzer/video_quality_analysis.cc +++ b/rtc_tools/frame_analyzer/video_quality_analysis.cc @@ -14,9 +14,6 @@ #include #include "rtc_base/logging.h" -#include "rtc_base/strings/string_builder.h" -#include "rtc_tools/frame_analyzer/video_color_aligner.h" -#include "rtc_tools/frame_analyzer/video_temporal_aligner.h" #include "test/testsupport/perf_test.h" #include "third_party/libyuv/include/libyuv/compare.h" #include "third_party/libyuv/include/libyuv/convert.h" @@ -59,32 +56,12 @@ std::vector RunAnalysis( const rtc::scoped_refptr& reference_video, const rtc::scoped_refptr& test_video, const std::vector& test_frame_indices) { - const rtc::scoped_refptr