Skip to content
Snippets Groups Projects
Commit 41ea0f79 authored by Yaowu Xu's avatar Yaowu Xu
Browse files

Add shift stage for PSNRHVS computation

Ported from libvpx/nextgenv2: 195bf52b

Change-Id: I85673c8299958b42cfde72821873cbc815a6f928
parent b398b72c
No related branches found
No related tags found
2 merge requests!6Rav1e 11 yushin 1,!3Rav1e 10 yushin
......@@ -120,7 +120,7 @@ static double convert_score_db(double _score, double _weight, int bit_depth) {
static double calc_psnrhvs(const unsigned char *src, int _systride,
const unsigned char *dst, int _dystride, double _par,
int _w, int _h, int _step, const double _csf[8][8],
uint32_t bit_depth) {
uint32_t bit_depth, uint32_t _shift) {
double ret;
const uint8_t *_src8 = src;
const uint8_t *_dst8 = dst;
......@@ -173,12 +173,12 @@ static double calc_psnrhvs(const unsigned char *src, int _systride,
for (i = 0; i < 8; i++) {
for (j = 0; j < 8; j++) {
int sub = ((i & 12) >> 2) + ((j & 12) >> 1);
if (bit_depth == 8) {
if (bit_depth == 8 && _shift == 0) {
dct_s[i * 8 + j] = _src8[(y + i) * _systride + (j + x)];
dct_d[i * 8 + j] = _dst8[(y + i) * _dystride + (j + x)];
} else if (bit_depth == 10 || bit_depth == 12) {
dct_s[i * 8 + j] = _src16[(y + i) * _systride + (j + x)];
dct_d[i * 8 + j] = _dst16[(y + i) * _dystride + (j + x)];
dct_s[i * 8 + j] = _src16[(y + i) * _systride + (j + x)] >> _shift;
dct_d[i * 8 + j] = _dst16[(y + i) * _dystride + (j + x)] >> _shift;
}
s_gmean += dct_s[i * 8 + j];
d_gmean += dct_d[i * 8 + j];
......@@ -250,20 +250,23 @@ double aom_psnrhvs(const YV12_BUFFER_CONFIG *src, const YV12_BUFFER_CONFIG *dst,
double psnrhvs;
const double par = 1.0;
const int step = 7;
uint32_t bd_shift = 0;
aom_clear_system_state();
assert(bd == 8 || bd == 10 || bd == 12);
assert(bd >= in_bd);
*y_psnrhvs =
calc_psnrhvs(src->y_buffer, src->y_stride, dst->y_buffer, dst->y_stride,
par, src->y_crop_width, src->y_crop_height, step, csf_y, bd);
bd_shift = bd - in_bd;
*y_psnrhvs = calc_psnrhvs(src->y_buffer, src->y_stride, dst->y_buffer,
dst->y_stride, par, src->y_crop_width,
src->y_crop_height, step, csf_y, bd, bd_shift);
*u_psnrhvs = calc_psnrhvs(src->u_buffer, src->uv_stride, dst->u_buffer,
dst->uv_stride, par, src->uv_crop_width,
src->uv_crop_height, step, csf_cb420, bd);
src->uv_crop_height, step, csf_cb420, bd, bd_shift);
*v_psnrhvs = calc_psnrhvs(src->v_buffer, src->uv_stride, dst->v_buffer,
dst->uv_stride, par, src->uv_crop_width,
src->uv_crop_height, step, csf_cr420, bd);
src->uv_crop_height, step, csf_cr420, bd, bd_shift);
psnrhvs = (*y_psnrhvs) * .8 + .1 * ((*u_psnrhvs) + (*v_psnrhvs));
return convert_score_db(psnrhvs, 1.0, bd);
return convert_score_db(psnrhvs, 1.0, in_bd);
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment