Files
vpx/vpx_dsp/ssim.h
Yaowu Xu bb8ca08816 Enable computing PSNRHVS for hbd build
This commit adds computation of PSNRHVS for highbitdepth build, it
also adds tests to make sure the calculation of psnrhvs metric for
10 and 12 bit correct.

Change-Id: Iac8a8073d2b3e3ba5d368829d770793212fa63b6
2016-02-11 13:17:59 -08:00

95 lines
2.6 KiB
C

/*
* Copyright (c) 2014 The WebM 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 VPX_DSP_SSIM_H_
#define VPX_DSP_SSIM_H_
#define MAX_SSIM_DB 100.0;
#ifdef __cplusplus
extern "C" {
#endif
#include "./vpx_config.h"
#include "vpx_scale/yv12config.h"
// metrics used for calculating ssim, ssim2, dssim, and ssimc
typedef struct {
// source sum ( over 8x8 region )
uint32_t sum_s;
// reference sum (over 8x8 region )
uint32_t sum_r;
// source sum squared ( over 8x8 region )
uint32_t sum_sq_s;
// reference sum squared (over 8x8 region )
uint32_t sum_sq_r;
// sum of source times reference (over 8x8 region)
uint32_t sum_sxr;
// calculated ssim score between source and reference
double ssim;
} Ssimv;
// metrics collected on a frame basis
typedef struct {
// ssim consistency error metric ( see code for explanation )
double ssimc;
// standard ssim
double ssim;
// revised ssim ( see code for explanation)
double ssim2;
// ssim restated as an error metric like sse
double dssim;
// dssim converted to decibels
double dssimd;
// ssimc converted to decibels
double ssimcd;
} Metrics;
double vpx_get_ssim_metrics(uint8_t *img1, int img1_pitch, uint8_t *img2,
int img2_pitch, int width, int height, Ssimv *sv2,
Metrics *m, int do_inconsistency);
double vpx_calc_ssim(const YV12_BUFFER_CONFIG *source,
const YV12_BUFFER_CONFIG *dest,
double *weight);
double vpx_calc_fastssim(const YV12_BUFFER_CONFIG *source,
const YV12_BUFFER_CONFIG *dest,
double *ssim_y, double *ssim_u,
double *ssim_v, uint32_t bit_depth);
double vpx_psnrhvs(const YV12_BUFFER_CONFIG *source,
const YV12_BUFFER_CONFIG *dest,
double *phvs_y, double *phvs_u,
double *phvs_v, uint32_t bit_depth);
#if CONFIG_VP9_HIGHBITDEPTH
double vpx_highbd_calc_ssim(const YV12_BUFFER_CONFIG *source,
const YV12_BUFFER_CONFIG *dest,
double *weight,
uint32_t bd);
#endif // CONFIG_VP9_HIGHBITDEPTH
#ifdef __cplusplus
} // extern "C"
#endif
#endif // VPX_DSP_SSIM_H_