/* * Copyright (c) 2011 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. */ #ifndef WEBRTC_TESTSUPPORT_METRICS_VIDEO_METRICS_H_ #define WEBRTC_TESTSUPPORT_METRICS_VIDEO_METRICS_H_ #include #include namespace webrtc { namespace test { // The highest PSNR value our algorithms will return. extern double kMetricsPerfectPSNR; // Contains video quality metrics result for a single frame. struct FrameResult { int frame_number; double value; }; // Result from a PSNR/SSIM calculation operation. // The frames in this data structure are 0-indexed. struct QualityMetricsResult { QualityMetricsResult() : average(0.0), min(std::numeric_limits::max()), max(std::numeric_limits::min()), min_frame_number(-1), max_frame_number(-1) {}; double average; double min; double max; int min_frame_number; int max_frame_number; std::vector frames; }; // Calculates PSNR and SSIM values for the reference and test video files // (must be in I420 format). All calculated values are filled into the // QualityMetricsResult structs. // // PSNR values have the unit decibel (dB) where a high value means the test file // is similar to the reference file. The higher value, the more similar. The // maximum PSNR value is kMetricsInfinitePSNR. For more info about PSNR, see // http://en.wikipedia.org/wiki/PSNR. // // SSIM values range between -1.0 and 1.0, where 1.0 means the files are // identical. For more info about SSIM, see http://en.wikipedia.org/wiki/SSIM // This function only compares video frames up to the point when the shortest // video ends. // Return value: // 0 if successful, negative on errors: // -1 if the source file cannot be opened // -2 if the test file cannot be opened // -3 if any of the files are empty // -4 if any arguments are invalid. int I420MetricsFromFiles(const char* ref_filename, const char* test_filename, int width, int height, QualityMetricsResult* psnr_result, QualityMetricsResult* ssim_result); // Calculates PSNR values for the reference and test video files (must be in // I420 format). All calculated values are filled into the QualityMetricsResult // struct. // // PSNR values have the unit decibel (dB) where a high value means the test file // is similar to the reference file. The higher value, the more similar. The // maximum PSNR value is kMetricsInfinitePSNR. For more info about PSNR, see // http://en.wikipedia.org/wiki/PSNR. // // This function only compares video frames up to the point when the shortest // video ends. // // Return value: // 0 if successful, negative on errors: // -1 if the source file cannot be opened // -2 if the test file cannot be opened // -3 if any of the files are empty // -4 if any arguments are invalid. int I420PSNRFromFiles(const char* ref_filename, const char* test_filename, int width, int height, QualityMetricsResult* result); // Calculates SSIM values for the reference and test video files (must be in // I420 format). All calculated values are filled into the QualityMetricsResult // struct. // SSIM values range between -1.0 and 1.0, where 1.0 means the files are // identical. // This function only compares video frames up to the point when the shortest // video ends. // For more info about SSIM, see http://en.wikipedia.org/wiki/SSIM // // Return value: // 0 if successful, negative on errors: // -1 if the source file cannot be opened // -2 if the test file cannot be opened // -3 if any of the files are empty // -4 if any arguments are invalid. int I420SSIMFromFiles(const char* ref_filename, const char* test_filename, int width, int height, QualityMetricsResult* result); } // namespace test } // namespace webrtc #endif // WEBRTC_TESTSUPPORT_METRICS_VIDEO_METRICS_H_