video_metrics.h revision c55a96383497a772a307b346368133960b02ad03
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
17namespace webrtc {
18namespace test {
19
20// Contains video quality metrics result for a single frame.
21struct 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.
28struct QualityMetricsResult {
29  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.
60int 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.
82int 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.
103int 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