1 /* 2 * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. 3 * 4 * Use of this source code is governed by a BSD-style license 5 * that can be found in the LICENSE file in the root of the source 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11 #ifndef WEBRTC_TESTSUPPORT_METRICS_VIDEO_METRICS_H_ 12 #define WEBRTC_TESTSUPPORT_METRICS_VIDEO_METRICS_H_ 13 14 #include <limits> 15 #include <vector> 16 17 namespace webrtc { 18 namespace test { 19 20 // Contains video quality metrics result for a single frame. 21 struct FrameResult { 22 int frame_number; 23 double value; 24 }; 25 26 // Result from a PSNR/SSIM calculation operation. 27 // The frames in this data structure are 0-indexed. 28 struct QualityMetricsResult { QualityMetricsResultQualityMetricsResult29 QualityMetricsResult() : 30 average(0.0), 31 min(std::numeric_limits<double>::max()), 32 max(std::numeric_limits<double>::min()), 33 min_frame_number(-1), 34 max_frame_number(-1) 35 {}; 36 double average; 37 double min; 38 double max; 39 int min_frame_number; 40 int max_frame_number; 41 std::vector<FrameResult> frames; 42 }; 43 44 // Calculates PSNR and SSIM values for the reference and test video files 45 // (must be in I420 format). All calculated values are filled into the 46 // QualityMetricsResult stucts. 47 // PSNR values have the unit decibel (dB) where a high value means the test file 48 // is similar to the reference file. The higher value, the more similar. 49 // For more info about PSNR, see http://en.wikipedia.org/wiki/PSNR 50 // SSIM values range between -1.0 and 1.0, where 1.0 means the files are 51 // identical. For more info about SSIM, see http://en.wikipedia.org/wiki/SSIM 52 // This function only compares video frames up to the point when the shortest 53 // video ends. 54 // Return value: 55 // 0 if successful, negative on errors: 56 // -1 if the source file cannot be opened 57 // -2 if the test file cannot be opened 58 // -3 if any of the files are empty 59 // -4 if any arguments are invalid. 60 int I420MetricsFromFiles(const char* ref_filename, 61 const char* test_filename, 62 int width, 63 int height, 64 QualityMetricsResult* psnr_result, 65 QualityMetricsResult* ssim_result); 66 67 // Calculates PSNR values for the reference and test video files (must be in 68 // I420 format). All calculated values are filled into the QualityMetricsResult 69 // struct. 70 // PSNR values have the unit decibel (dB) where a high value means the test file 71 // is similar to the reference file. The higher value, the more similar. 72 // This function only compares video frames up to the point when the shortest 73 // video ends. 74 // For more info about PSNR, see http://en.wikipedia.org/wiki/PSNR 75 // 76 // Return value: 77 // 0 if successful, negative on errors: 78 // -1 if the source file cannot be opened 79 // -2 if the test file cannot be opened 80 // -3 if any of the files are empty 81 // -4 if any arguments are invalid. 82 int I420PSNRFromFiles(const char* ref_filename, 83 const char* test_filename, 84 int width, 85 int height, 86 QualityMetricsResult* result); 87 88 // Calculates SSIM values for the reference and test video files (must be in 89 // I420 format). All calculated values are filled into the QualityMetricsResult 90 // struct. 91 // SSIM values range between -1.0 and 1.0, where 1.0 means the files are 92 // identical. 93 // This function only compares video frames up to the point when the shortest 94 // video ends. 95 // For more info about SSIM, see http://en.wikipedia.org/wiki/SSIM 96 // 97 // Return value: 98 // 0 if successful, negative on errors: 99 // -1 if the source file cannot be opened 100 // -2 if the test file cannot be opened 101 // -3 if any of the files are empty 102 // -4 if any arguments are invalid. 103 int I420SSIMFromFiles(const char* ref_filename, 104 const char* test_filename, 105 int width, 106 int height, 107 QualityMetricsResult* result); 108 109 } // namespace test 110 } // namespace webrtc 111 112 #endif // WEBRTC_TESTSUPPORT_METRICS_VIDEO_METRICS_H_ 113