libvmaf
Loading...
Searching...
No Matches
adm_tools.h File Reference
#include <math.h>
#include "common/macros.h"
#include "barten_csf_tools.h"
#include "adm_csf_tools.h"
Include dependency graph for adm_tools.h:

Go to the source code of this file.

Data Structures

struct  adm_dwt_band_t_s
struct  adm_dwt_band_t_d
struct  dwt_model_params

Macros

#define M_PI   3.14159265358979323846264338327
#define ADM_TOOLS_H_
#define ADM_CM_THRESH_S_0_0(angles, flt_angles, src_px_stride, accum, w, h, i, j)
#define ADM_CM_THRESH_S_0_W_M_1(angles, flt_angles, src_px_stride, accum, w, h, i, j)
#define ADM_CM_THRESH_S_0_J(angles, flt_angles, src_px_stride, accum, w, h, i, j)
#define ADM_CM_THRESH_S_H_M_1_0(angles, flt_angles, src_px_stride, accum, w, h, i, j)
#define ADM_CM_THRESH_S_H_M_1_W_M_1(angles, flt_angles, src_px_stride, accum, w, h, i, j)
#define ADM_CM_THRESH_S_H_M_1_J(angles, flt_angles, src_px_stride, accum, w, h, i, j)
#define ADM_CM_THRESH_S_I_J(angles, flt_angles, src_px_stride, accum, w, h, i, j)
#define ADM_CM_THRESH_S_I_0(angles, flt_angles, src_px_stride, accum, w, h, i, j)
#define ADM_CM_THRESH_S_I_W_M_1(angles, flt_angles, src_px_stride, accum, w, h, i, j)

Functions

float adm_sum_cube_s (const float *x, int w, int h, int stride, double border_factor, double adm_p_norm)
void adm_decouple_s (const adm_dwt_band_t_s *ref, const adm_dwt_band_t_s *dis, const adm_dwt_band_t_s *r, const adm_dwt_band_t_s *a, int w, int h, int ref_stride, int dis_stride, int r_stride, int a_stride, double border_factor, double adm_enhn_gain_limit)
void adm_csf_s (const adm_dwt_band_t_s *src, const adm_dwt_band_t_s *dst, const adm_dwt_band_t_s *flt, int orig_h, int scale, int w, int h, int src_stride, int dst_stride, double border_factor, double adm_norm_view_dist, int adm_ref_display_height, int adm_csf_mode, double luminance_level, double adm_csf_scale, double adm_csf_diag_scale, double adm_f1s0, double adm_f1s1, double adm_f1s2, double adm_f1s3, double adm_f2s0, double adm_f2s1, double adm_f2s2, double adm_f2s3)
void adm_cm_thresh_s (const adm_dwt_band_t_s *src, float *dst, int w, int h, int src_stride, int dst_stride)
float adm_csf_den_scale_s (const adm_dwt_band_t_s *src, int orig_h, int scale, int w, int h, int src_stride, double border_factor, double adm_norm_view_dist, int adm_ref_display_height, int adm_csf_mode, double luminance_level, double adm_csf_scale, double adm_csf_diag_scale, double adm_noise_weight, double adm_p_norm, double adm_f1s0, double adm_f1s1, double adm_f1s2, double adm_f1s3, double adm_f2s0, double adm_f2s1, double adm_f2s2, double adm_f2s3)
float adm_cm_s (const adm_dwt_band_t_s *src, const adm_dwt_band_t_s *dst, const adm_dwt_band_t_s *csf_a, int w, int h, int src_stride, int dst_stride, int csf_a_stride, double border_factor, int scale, double adm_norm_view_dist, int adm_ref_display_height, int adm_csf_mode, double luminance_level, double adm_csf_scale, double adm_csf_diag_scale, double adm_noise_weight, int adm_bypass_cm, double adm_p_norm, double adm_f1s0, double adm_f1s1, double adm_f1s2, double adm_f1s3, double adm_f2s0, double adm_f2s1, double adm_f2s2, double adm_f2s3)
void dwt2_src_indices_filt_s (int **src_ind_y, int **src_ind_x, int w, int h)
void adm_dwt2_s (const float *src, const adm_dwt_band_t_s *dst, int **ind_y, int **ind_x, int w, int h, int src_stride, int dst_stride)
void adm_dwt2_lo_s (const float *src, const adm_dwt_band_t_s *dst, int **ind_y, int **ind_x, int w, int h, int src_stride, int dst_stride)
void adm_dwt2_d (const double *src, const adm_dwt_band_t_d *dst, int **ind_y, int **ind_x, int w, int h, int src_stride, int dst_stride)

Macro Definition Documentation

◆ ADM_CM_THRESH_S_0_0

#define ADM_CM_THRESH_S_0_0 ( angles,
flt_angles,
src_px_stride,
accum,
w,
h,
i,
j )
Value:
{ \
*accum = 0; \
for (int theta = 0; theta < 3; ++theta) { \
const float *src_ptr = angles[theta]; \
const float *flt_ptr = flt_angles[theta]; \
float sum = 0; \
sum += flt_ptr[src_px_stride + 1]; \
sum += flt_ptr[src_px_stride]; \
sum += flt_ptr[src_px_stride + 1]; \
sum += flt_ptr[1]; \
sum += FLOAT_ONE_BY_15 * fabsf(src_ptr[0]); \
sum += flt_ptr[1]; \
sum += flt_ptr[src_px_stride + 1]; \
sum += flt_ptr[src_px_stride]; \
sum += flt_ptr[src_px_stride + 1]; \
*accum += sum; \
} \
}

◆ ADM_CM_THRESH_S_0_J

#define ADM_CM_THRESH_S_0_J ( angles,
flt_angles,
src_px_stride,
accum,
w,
h,
i,
j )
Value:
{ \
*accum = 0; \
for (int theta = 0; theta < 3; ++theta) { \
const float *src_ptr = angles[theta]; \
const float *flt_ptr = flt_angles[theta]; \
float sum = 0; \
sum += flt_ptr[src_px_stride + j - 1]; \
sum += flt_ptr[src_px_stride + j]; \
sum += flt_ptr[src_px_stride + j + 1]; \
sum += flt_ptr[j - 1]; \
sum += FLOAT_ONE_BY_15 * fabsf(src_ptr[j]); \
sum += flt_ptr[j + 1]; \
sum += flt_ptr[src_px_stride + j - 1]; \
sum += flt_ptr[src_px_stride + j]; \
sum += flt_ptr[src_px_stride + j + 1]; \
*accum += sum; \
} \
}

◆ ADM_CM_THRESH_S_0_W_M_1

#define ADM_CM_THRESH_S_0_W_M_1 ( angles,
flt_angles,
src_px_stride,
accum,
w,
h,
i,
j )
Value:
{ \
*accum = 0; \
for (int theta = 0; theta < 3; ++theta) { \
const float *src_ptr = angles[theta]; \
const float *flt_ptr = flt_angles[theta]; \
float sum = 0; \
sum += flt_ptr[src_px_stride + w - 2]; \
sum += flt_ptr[src_px_stride + w - 1]; \
sum += flt_ptr[src_px_stride + w - 1]; \
sum += flt_ptr[w - 2]; \
sum += FLOAT_ONE_BY_15 * fabsf(src_ptr[w - 1]); \
sum += flt_ptr[w - 1]; \
sum += flt_ptr[src_px_stride + w - 2]; \
sum += flt_ptr[src_px_stride + w - 1]; \
sum += flt_ptr[src_px_stride + w - 1]; \
*accum += sum; \
} \
}

◆ ADM_CM_THRESH_S_H_M_1_0

#define ADM_CM_THRESH_S_H_M_1_0 ( angles,
flt_angles,
src_px_stride,
accum,
w,
h,
i,
j )
Value:
{ \
*accum = 0; \
for (int theta = 0; theta < 3; ++theta) { \
const float *src_ptr = angles[theta]; \
const float *flt_ptr = flt_angles[theta]; \
float sum = 0; \
src_ptr += (src_px_stride * (h - 2)); \
flt_ptr += (src_px_stride * (h - 2)); \
sum += flt_ptr[1]; \
sum += flt_ptr[0]; \
sum += flt_ptr[1]; \
src_ptr += src_px_stride; \
flt_ptr += src_px_stride; \
sum += flt_ptr[1]; \
sum += FLOAT_ONE_BY_15 * fabsf(src_ptr[0]); \
sum += flt_ptr[1]; \
sum += flt_ptr[1]; \
sum += flt_ptr[0]; \
sum += flt_ptr[1]; \
*accum += sum; \
} \
}

◆ ADM_CM_THRESH_S_H_M_1_J

#define ADM_CM_THRESH_S_H_M_1_J ( angles,
flt_angles,
src_px_stride,
accum,
w,
h,
i,
j )
Value:
{ \
*accum = 0; \
for (int theta = 0; theta < 3; ++theta) { \
const float *src_ptr = angles[theta]; \
const float *flt_ptr = flt_angles[theta]; \
float sum = 0; \
src_ptr += (src_px_stride * (h - 2)); \
flt_ptr += (src_px_stride * (h - 2)); \
sum += flt_ptr[j - 1];\
sum += flt_ptr[j]; \
sum += flt_ptr[j + 1]; \
src_ptr += src_px_stride; \
flt_ptr += src_px_stride; \
sum += flt_ptr[j - 1]; \
sum += FLOAT_ONE_BY_15 * fabsf(src_ptr[j]); \
sum += flt_ptr[j + 1]; \
sum += flt_ptr[j - 1]; \
sum += flt_ptr[j]; \
sum += flt_ptr[j + 1]; \
*accum += sum; \
} \
}

◆ ADM_CM_THRESH_S_H_M_1_W_M_1

#define ADM_CM_THRESH_S_H_M_1_W_M_1 ( angles,
flt_angles,
src_px_stride,
accum,
w,
h,
i,
j )
Value:
{ \
*accum = 0; \
for (int theta = 0; theta < 3; ++theta) { \
const float *src_ptr = angles[theta]; \
const float *flt_ptr = flt_angles[theta]; \
float sum = 0; \
src_ptr += (src_px_stride * (h - 2)); \
flt_ptr += (src_px_stride * (h - 2)); \
sum += flt_ptr[w - 2]; \
sum += flt_ptr[w - 1]; \
sum += flt_ptr[w - 1]; \
src_ptr += src_px_stride; \
flt_ptr += src_px_stride; \
sum += flt_ptr[w - 2]; \
sum += FLOAT_ONE_BY_15 * fabsf(src_ptr[w - 1]); \
sum += flt_ptr[w - 1]; \
sum += flt_ptr[w - 2]; \
sum += flt_ptr[w - 1]; \
sum += flt_ptr[w - 1]; \
*accum += sum; \
} \
}

◆ ADM_CM_THRESH_S_I_0

#define ADM_CM_THRESH_S_I_0 ( angles,
flt_angles,
src_px_stride,
accum,
w,
h,
i,
j )
Value:
{ \
*accum = 0; \
for (int theta = 0; theta < 3; ++theta) { \
const float *src_ptr = angles[theta]; \
const float *flt_ptr = flt_angles[theta]; \
float sum = 0; \
src_ptr += (src_px_stride * (i - 1)); \
flt_ptr += (src_px_stride * (i - 1)); \
sum += flt_ptr[1]; \
sum += flt_ptr[0]; \
sum += flt_ptr[1]; \
src_ptr += src_px_stride; \
flt_ptr += src_px_stride; \
sum += flt_ptr[1]; \
sum += FLOAT_ONE_BY_15 * fabsf(src_ptr[0]); \
sum += flt_ptr[1]; \
src_ptr += src_px_stride; \
flt_ptr += src_px_stride; \
sum += flt_ptr[1]; \
sum += flt_ptr[0]; \
sum += flt_ptr[1]; \
*accum += sum; \
} \
}

◆ ADM_CM_THRESH_S_I_J

#define ADM_CM_THRESH_S_I_J ( angles,
flt_angles,
src_px_stride,
accum,
w,
h,
i,
j )
Value:
{ \
*accum = 0; \
for (int theta = 0; theta < 3; ++theta) { \
const float *src_ptr = angles[theta]; \
const float *flt_ptr = flt_angles[theta]; \
float sum = 0; \
src_ptr += (src_px_stride * (i - 1)); \
flt_ptr += (src_px_stride * (i - 1)); \
sum += flt_ptr[j - 1]; \
sum += flt_ptr[j]; \
sum += flt_ptr[j + 1]; \
src_ptr += src_px_stride; \
flt_ptr += src_px_stride; \
sum += flt_ptr[j - 1]; \
sum += FLOAT_ONE_BY_15 * fabsf(src_ptr[j]); \
sum += flt_ptr[j + 1]; \
src_ptr += src_px_stride; \
flt_ptr += src_px_stride; \
sum += flt_ptr[j - 1]; \
sum += flt_ptr[j]; \
sum += flt_ptr[j + 1]; \
*accum += sum; \
} \
}

◆ ADM_CM_THRESH_S_I_W_M_1

#define ADM_CM_THRESH_S_I_W_M_1 ( angles,
flt_angles,
src_px_stride,
accum,
w,
h,
i,
j )
Value:
{ \
*accum = 0; \
for (int theta = 0; theta < 3; ++theta) { \
const float *src_ptr = angles[theta]; \
const float *flt_ptr = flt_angles[theta]; \
float sum = 0; \
src_ptr += (src_px_stride * (i-1)); \
flt_ptr += (src_px_stride * (i - 1)); \
sum += flt_ptr[w - 2]; \
sum += flt_ptr[w - 1]; \
sum += flt_ptr[w - 1]; \
src_ptr += src_px_stride; \
flt_ptr += src_px_stride; \
sum += flt_ptr[w - 2]; \
sum += FLOAT_ONE_BY_15 * fabsf(src_ptr[w - 1]); \
sum += flt_ptr[w - 1]; \
src_ptr += src_px_stride; \
flt_ptr += src_px_stride; \
sum += flt_ptr[w - 2]; \
sum += flt_ptr[w - 1]; \
sum += flt_ptr[w - 1]; \
*accum += sum; \
} \
}

◆ ADM_TOOLS_H_

#define ADM_TOOLS_H_

◆ M_PI

#define M_PI   3.14159265358979323846264338327

Copyright 2016-2020 Netflix, Inc.

Licensed under the BSD+Patent License (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

https://opensource.org/licenses/BSDplusPatent

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Function Documentation

◆ adm_cm_s()

float adm_cm_s ( const adm_dwt_band_t_s * src,
const adm_dwt_band_t_s * dst,
const adm_dwt_band_t_s * csf_a,
int w,
int h,
int src_stride,
int dst_stride,
int csf_a_stride,
double border_factor,
int scale,
double adm_norm_view_dist,
int adm_ref_display_height,
int adm_csf_mode,
double luminance_level,
double adm_csf_scale,
double adm_csf_diag_scale,
double adm_noise_weight,
int adm_bypass_cm,
double adm_p_norm,
double adm_f1s0,
double adm_f1s1,
double adm_f1s2,
double adm_f1s3,
double adm_f2s0,
double adm_f2s1,
double adm_f2s2,
double adm_f2s3 )

◆ adm_cm_thresh_s()

void adm_cm_thresh_s ( const adm_dwt_band_t_s * src,
float * dst,
int w,
int h,
int src_stride,
int dst_stride )

◆ adm_csf_den_scale_s()

float adm_csf_den_scale_s ( const adm_dwt_band_t_s * src,
int orig_h,
int scale,
int w,
int h,
int src_stride,
double border_factor,
double adm_norm_view_dist,
int adm_ref_display_height,
int adm_csf_mode,
double luminance_level,
double adm_csf_scale,
double adm_csf_diag_scale,
double adm_noise_weight,
double adm_p_norm,
double adm_f1s0,
double adm_f1s1,
double adm_f1s2,
double adm_f1s3,
double adm_f2s0,
double adm_f2s1,
double adm_f2s2,
double adm_f2s3 )

◆ adm_csf_s()

void adm_csf_s ( const adm_dwt_band_t_s * src,
const adm_dwt_band_t_s * dst,
const adm_dwt_band_t_s * flt,
int orig_h,
int scale,
int w,
int h,
int src_stride,
int dst_stride,
double border_factor,
double adm_norm_view_dist,
int adm_ref_display_height,
int adm_csf_mode,
double luminance_level,
double adm_csf_scale,
double adm_csf_diag_scale,
double adm_f1s0,
double adm_f1s1,
double adm_f1s2,
double adm_f1s3,
double adm_f2s0,
double adm_f2s1,
double adm_f2s2,
double adm_f2s3 )

◆ adm_decouple_s()

void adm_decouple_s ( const adm_dwt_band_t_s * ref,
const adm_dwt_band_t_s * dis,
const adm_dwt_band_t_s * r,
const adm_dwt_band_t_s * a,
int w,
int h,
int ref_stride,
int dis_stride,
int r_stride,
int a_stride,
double border_factor,
double adm_enhn_gain_limit )

◆ adm_dwt2_d()

void adm_dwt2_d ( const double * src,
const adm_dwt_band_t_d * dst,
int ** ind_y,
int ** ind_x,
int w,
int h,
int src_stride,
int dst_stride )

◆ adm_dwt2_lo_s()

void adm_dwt2_lo_s ( const float * src,
const adm_dwt_band_t_s * dst,
int ** ind_y,
int ** ind_x,
int w,
int h,
int src_stride,
int dst_stride )

◆ adm_dwt2_s()

void adm_dwt2_s ( const float * src,
const adm_dwt_band_t_s * dst,
int ** ind_y,
int ** ind_x,
int w,
int h,
int src_stride,
int dst_stride )

◆ adm_sum_cube_s()

float adm_sum_cube_s ( const float * x,
int w,
int h,
int stride,
double border_factor,
double adm_p_norm )

◆ dwt2_src_indices_filt_s()

void dwt2_src_indices_filt_s ( int ** src_ind_y,
int ** src_ind_x,
int w,
int h )