blob: 7cd88d2531108d900b31b0d72edfa49bd164b4c9 [file]
// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef MEDIA_GPU_TEST_IMAGE_QUALITY_METRICS_H_
#define MEDIA_GPU_TEST_IMAGE_QUALITY_METRICS_H_
#include <stdint.h>
#include "base/memory/scoped_refptr.h"
namespace media {
class VideoFrame;
namespace test {
// Compare each byte of two VideoFrames, |frame1| and |frame2|, allowing an
// error up to |tolerance|. Return the number of bytes of which the difference
// is more than |tolerance|.
size_t CompareFramesWithErrorDiff(const VideoFrame& frame1,
const VideoFrame& frame2,
uint8_t tolerance);
// Compute PSNR (Peak Signal-to-Noise Ratio) and SSIM (Structural SIMilarity)
// from |frame1| and |frame2|. These metrics give an estimate of the similarity
// of two images, and can be used as an indication of image quality when
// compared to a baseline.
// The VideoFrames must be memory-based. Note: since these functions leverage
// libyuv::I420(Ssim|Psnr), I420 VideoFrames are created from |frame1| and
// |frame2| if they are not I420.
double ComputePSNR(const VideoFrame& frame1, const VideoFrame& frame2);
double ComputeSSIM(const VideoFrame& frame1, const VideoFrame& frame2);
// Compute the log likelihood ratio between a golden frame and a test frame.
// This metric performs a statistical analysis on the distribution of colors in
// each frame, and looks for anomalies consistent with encoding or decoding
// bugs. More details on this algorithm can be found here:
// go/log-likelihood-artifact-detection
double ComputeLogLikelihoodRatio(scoped_refptr<const VideoFrame> golden_frame,
scoped_refptr<const VideoFrame> test_frame);
} // namespace test
} // namespace media
#endif // MEDIA_GPU_TEST_IMAGE_QUALITY_METRICS_H_