28#ifndef DEFAULT_VIF_ENHN_GAIN_LIMIT
29#define DEFAULT_VIF_ENHN_GAIN_LIMIT (100.0)
32static const uint16_t vif_filter1d_table[4][18] = {
33 { 489, 935, 1640, 2640, 3896, 5274, 6547, 7455, 7784, 7455, 6547, 5274, 3896, 2640, 1640, 935, 489, 0 },
34 { 1244, 3663, 7925, 12590, 14692, 12590, 7925, 3663, 1244, 0 },
35 { 3571, 16004, 26386, 16004, 3571, 0 },
36 { 10904, 43728, 10904, 0 }
39static const int vif_filter1d_width[4] = { 17, 9, 5, 3 };
83static inline void PADDING_SQ_DATA(
VifBuffer buf,
int w,
unsigned fwidth_half)
85 for (
unsigned f = 1; f <= fwidth_half; ++f) {
86 int left_point = -(int)f;
94 left_point = w - 1 - f;
95 right_point = w - 1 + f;
104static inline void PADDING_SQ_DATA_2(
VifBuffer buf,
int w,
unsigned fwidth_half)
106 for (
unsigned f = 1; f <= fwidth_half; ++f) {
107 int left_point = -(int)f;
109 buf.
tmp.ref_convol[left_point] = buf.
tmp.ref_convol[right_point];
110 buf.
tmp.dis_convol[left_point] = buf.
tmp.dis_convol[right_point];
112 left_point = w - 1 - f;
113 right_point = w - 1 + f;
114 buf.
tmp.ref_convol[right_point] = buf.
tmp.ref_convol[left_point];
115 buf.
tmp.dis_convol[right_point] = buf.
tmp.dis_convol[left_point];
128 unsigned to,
int scale);
134static inline int __builtin_clz(
unsigned x) {
135 return (
int)__lzcnt(x);
138static inline int __builtin_clzll(
unsigned long long x) {
139 return (
int)__lzcnt64(x);
144static inline int32_t log2_32(
const uint16_t *log2_table, uint32_t temp)
146 int k = __builtin_clz(temp);
149 return log2_table[temp] + 2048 * k;
152static inline int32_t log2_64(
const uint16_t *log2_table, uint64_t temp)
154 assert(temp >= 0x20000);
155 int k = __builtin_clzll(temp);
158 return log2_table[temp] + 2048 * k;
void vif_statistic_8(struct VifPublicState *s, float *num, float *den, unsigned w, unsigned h)
VifResiduals vif_compute_line_residuals(VifPublicState *s, unsigned from, unsigned to, int scale)
void vif_statistic_16(struct VifPublicState *s, float *num, float *den, unsigned w, unsigned h, int bpc, int scale)
Definition integer_vif.h:41
struct VifBuffer::@243371321022260352266053163127271242127303165275 tmp
ptrdiff_t stride_16
Definition integer_vif.h:65
ptrdiff_t stride_tmp
Definition integer_vif.h:67
ptrdiff_t stride_32
Definition integer_vif.h:66
uint16_t * mu1
Definition integer_vif.h:46
uint32_t * mu1_32
Definition integer_vif.h:48
void * dis
Definition integer_vif.h:45
uint16_t * mu2
Definition integer_vif.h:47
uint32_t * mu2_32
Definition integer_vif.h:49
uint32_t * ref_dis
Definition integer_vif.h:52
void * data
Definition integer_vif.h:42
uint32_t * dis_sq
Definition integer_vif.h:51
ptrdiff_t stride
Definition integer_vif.h:64
void * ref
Definition integer_vif.h:44
uint32_t * ref_sq
Definition integer_vif.h:50
Definition integer_vif.h:77
VifBuffer buf
Definition integer_vif.h:78
double vif_enhn_gain_limit
Definition integer_vif.h:80
uint16_t log2_table[65537]
Definition integer_vif.h:79
Definition integer_vif.h:70
int64_t accum_num_log
Definition integer_vif.h:71
int64_t accum_num_non_log
Definition integer_vif.h:73
int64_t accum_den_log
Definition integer_vif.h:72
int64_t accum_den_non_log
Definition integer_vif.h:74