7 #define RTCD_EXTERN extern
14 #include "vpx/vpx_integer.h"
15 #include "vp9/common/vp9_common.h"
16 #include "vp9/common/vp9_enums.h"
20 /* Encoder forward decls */
22 struct vp9_variance_vtable
;
23 struct search_site_config
;
26 struct yv12_buffer_config
;
32 unsigned int vp9_avg_4x4_c(const uint8_t *, int p
);
33 #define vp9_avg_4x4 vp9_avg_4x4_c
35 unsigned int vp9_avg_8x8_c(const uint8_t *, int p
);
36 unsigned int vp9_avg_8x8_neon(const uint8_t *, int p
);
37 RTCD_EXTERN
unsigned int (*vp9_avg_8x8
)(const uint8_t *, int p
);
39 int64_t vp9_block_error_c(const tran_low_t
*coeff
, const tran_low_t
*dqcoeff
, intptr_t block_size
, int64_t *ssz
);
40 #define vp9_block_error vp9_block_error_c
42 int64_t vp9_block_error_fp_c(const int16_t *coeff
, const int16_t *dqcoeff
, int block_size
);
43 int64_t vp9_block_error_fp_neon(const int16_t *coeff
, const int16_t *dqcoeff
, int block_size
);
44 RTCD_EXTERN
int64_t (*vp9_block_error_fp
)(const int16_t *coeff
, const int16_t *dqcoeff
, int block_size
);
46 int vp9_denoiser_filter_c(const uint8_t *sig
, int sig_stride
, const uint8_t *mc_avg
, int mc_avg_stride
, uint8_t *avg
, int avg_stride
, int increase_denoising
, BLOCK_SIZE bs
, int motion_magnitude
);
47 #define vp9_denoiser_filter vp9_denoiser_filter_c
49 int vp9_diamond_search_sad_c(const struct macroblock
*x
, const struct search_site_config
*cfg
, struct mv
*ref_mv
, struct mv
*best_mv
, int search_param
, int sad_per_bit
, int *num00
, const struct vp9_variance_vtable
*fn_ptr
, const struct mv
*center_mv
);
50 #define vp9_diamond_search_sad vp9_diamond_search_sad_c
52 void vp9_fdct8x8_quant_c(const int16_t *input
, int stride
, tran_low_t
*coeff_ptr
, intptr_t n_coeffs
, int skip_block
, const int16_t *zbin_ptr
, const int16_t *round_ptr
, const int16_t *quant_ptr
, const int16_t *quant_shift_ptr
, tran_low_t
*qcoeff_ptr
, tran_low_t
*dqcoeff_ptr
, const int16_t *dequant_ptr
, uint16_t *eob_ptr
, const int16_t *scan
, const int16_t *iscan
);
53 void vp9_fdct8x8_quant_neon(const int16_t *input
, int stride
, tran_low_t
*coeff_ptr
, intptr_t n_coeffs
, int skip_block
, const int16_t *zbin_ptr
, const int16_t *round_ptr
, const int16_t *quant_ptr
, const int16_t *quant_shift_ptr
, tran_low_t
*qcoeff_ptr
, tran_low_t
*dqcoeff_ptr
, const int16_t *dequant_ptr
, uint16_t *eob_ptr
, const int16_t *scan
, const int16_t *iscan
);
54 RTCD_EXTERN
void (*vp9_fdct8x8_quant
)(const int16_t *input
, int stride
, tran_low_t
*coeff_ptr
, intptr_t n_coeffs
, int skip_block
, const int16_t *zbin_ptr
, const int16_t *round_ptr
, const int16_t *quant_ptr
, const int16_t *quant_shift_ptr
, tran_low_t
*qcoeff_ptr
, tran_low_t
*dqcoeff_ptr
, const int16_t *dequant_ptr
, uint16_t *eob_ptr
, const int16_t *scan
, const int16_t *iscan
);
56 void vp9_fht16x16_c(const int16_t *input
, tran_low_t
*output
, int stride
, int tx_type
);
57 #define vp9_fht16x16 vp9_fht16x16_c
59 void vp9_fht4x4_c(const int16_t *input
, tran_low_t
*output
, int stride
, int tx_type
);
60 #define vp9_fht4x4 vp9_fht4x4_c
62 void vp9_fht8x8_c(const int16_t *input
, tran_low_t
*output
, int stride
, int tx_type
);
63 #define vp9_fht8x8 vp9_fht8x8_c
65 void vp9_filter_by_weight16x16_c(const uint8_t *src
, int src_stride
, uint8_t *dst
, int dst_stride
, int src_weight
);
66 #define vp9_filter_by_weight16x16 vp9_filter_by_weight16x16_c
68 void vp9_filter_by_weight8x8_c(const uint8_t *src
, int src_stride
, uint8_t *dst
, int dst_stride
, int src_weight
);
69 #define vp9_filter_by_weight8x8 vp9_filter_by_weight8x8_c
71 int vp9_full_range_search_c(const struct macroblock
*x
, const struct search_site_config
*cfg
, struct mv
*ref_mv
, struct mv
*best_mv
, int search_param
, int sad_per_bit
, int *num00
, const struct vp9_variance_vtable
*fn_ptr
, const struct mv
*center_mv
);
72 #define vp9_full_range_search vp9_full_range_search_c
74 int vp9_full_search_sad_c(const struct macroblock
*x
, const struct mv
*ref_mv
, int sad_per_bit
, int distance
, const struct vp9_variance_vtable
*fn_ptr
, const struct mv
*center_mv
, struct mv
*best_mv
);
75 #define vp9_full_search_sad vp9_full_search_sad_c
77 void vp9_fwht4x4_c(const int16_t *input
, tran_low_t
*output
, int stride
);
78 #define vp9_fwht4x4 vp9_fwht4x4_c
80 void vp9_hadamard_16x16_c(int16_t const *src_diff
, int src_stride
, int16_t *coeff
);
81 #define vp9_hadamard_16x16 vp9_hadamard_16x16_c
83 void vp9_hadamard_8x8_c(int16_t const *src_diff
, int src_stride
, int16_t *coeff
);
84 #define vp9_hadamard_8x8 vp9_hadamard_8x8_c
86 void vp9_iht16x16_256_add_c(const tran_low_t
*input
, uint8_t *output
, int pitch
, int tx_type
);
87 #define vp9_iht16x16_256_add vp9_iht16x16_256_add_c
89 void vp9_iht4x4_16_add_c(const tran_low_t
*input
, uint8_t *dest
, int dest_stride
, int tx_type
);
90 void vp9_iht4x4_16_add_neon(const tran_low_t
*input
, uint8_t *dest
, int dest_stride
, int tx_type
);
91 RTCD_EXTERN
void (*vp9_iht4x4_16_add
)(const tran_low_t
*input
, uint8_t *dest
, int dest_stride
, int tx_type
);
93 void vp9_iht8x8_64_add_c(const tran_low_t
*input
, uint8_t *dest
, int dest_stride
, int tx_type
);
94 void vp9_iht8x8_64_add_neon(const tran_low_t
*input
, uint8_t *dest
, int dest_stride
, int tx_type
);
95 RTCD_EXTERN
void (*vp9_iht8x8_64_add
)(const tran_low_t
*input
, uint8_t *dest
, int dest_stride
, int tx_type
);
97 int16_t vp9_int_pro_col_c(uint8_t const *ref
, const int width
);
98 int16_t vp9_int_pro_col_neon(uint8_t const *ref
, const int width
);
99 RTCD_EXTERN
int16_t (*vp9_int_pro_col
)(uint8_t const *ref
, const int width
);
101 void vp9_int_pro_row_c(int16_t *hbuf
, uint8_t const *ref
, const int ref_stride
, const int height
);
102 void vp9_int_pro_row_neon(int16_t *hbuf
, uint8_t const *ref
, const int ref_stride
, const int height
);
103 RTCD_EXTERN
void (*vp9_int_pro_row
)(int16_t *hbuf
, uint8_t const *ref
, const int ref_stride
, const int height
);
105 void vp9_mbpost_proc_across_ip_c(uint8_t *src
, int pitch
, int rows
, int cols
, int flimit
);
106 #define vp9_mbpost_proc_across_ip vp9_mbpost_proc_across_ip_c
108 void vp9_mbpost_proc_down_c(uint8_t *dst
, int pitch
, int rows
, int cols
, int flimit
);
109 #define vp9_mbpost_proc_down vp9_mbpost_proc_down_c
111 void vp9_minmax_8x8_c(const uint8_t *s
, int p
, const uint8_t *d
, int dp
, int *min
, int *max
);
112 #define vp9_minmax_8x8 vp9_minmax_8x8_c
114 void vp9_plane_add_noise_c(uint8_t *Start
, char *noise
, char blackclamp
[16], char whiteclamp
[16], char bothclamp
[16], unsigned int Width
, unsigned int Height
, int Pitch
);
115 #define vp9_plane_add_noise vp9_plane_add_noise_c
117 void vp9_post_proc_down_and_across_c(const uint8_t *src_ptr
, uint8_t *dst_ptr
, int src_pixels_per_line
, int dst_pixels_per_line
, int rows
, int cols
, int flimit
);
118 #define vp9_post_proc_down_and_across vp9_post_proc_down_and_across_c
120 void vp9_quantize_fp_c(const tran_low_t
*coeff_ptr
, intptr_t n_coeffs
, int skip_block
, const int16_t *zbin_ptr
, const int16_t *round_ptr
, const int16_t *quant_ptr
, const int16_t *quant_shift_ptr
, tran_low_t
*qcoeff_ptr
, tran_low_t
*dqcoeff_ptr
, const int16_t *dequant_ptr
, uint16_t *eob_ptr
, const int16_t *scan
, const int16_t *iscan
);
121 void vp9_quantize_fp_neon(const tran_low_t
*coeff_ptr
, intptr_t n_coeffs
, int skip_block
, const int16_t *zbin_ptr
, const int16_t *round_ptr
, const int16_t *quant_ptr
, const int16_t *quant_shift_ptr
, tran_low_t
*qcoeff_ptr
, tran_low_t
*dqcoeff_ptr
, const int16_t *dequant_ptr
, uint16_t *eob_ptr
, const int16_t *scan
, const int16_t *iscan
);
122 RTCD_EXTERN
void (*vp9_quantize_fp
)(const tran_low_t
*coeff_ptr
, intptr_t n_coeffs
, int skip_block
, const int16_t *zbin_ptr
, const int16_t *round_ptr
, const int16_t *quant_ptr
, const int16_t *quant_shift_ptr
, tran_low_t
*qcoeff_ptr
, tran_low_t
*dqcoeff_ptr
, const int16_t *dequant_ptr
, uint16_t *eob_ptr
, const int16_t *scan
, const int16_t *iscan
);
124 void vp9_quantize_fp_32x32_c(const tran_low_t
*coeff_ptr
, intptr_t n_coeffs
, int skip_block
, const int16_t *zbin_ptr
, const int16_t *round_ptr
, const int16_t *quant_ptr
, const int16_t *quant_shift_ptr
, tran_low_t
*qcoeff_ptr
, tran_low_t
*dqcoeff_ptr
, const int16_t *dequant_ptr
, uint16_t *eob_ptr
, const int16_t *scan
, const int16_t *iscan
);
125 #define vp9_quantize_fp_32x32 vp9_quantize_fp_32x32_c
127 int16_t vp9_satd_c(const int16_t *coeff
, int length
);
128 #define vp9_satd vp9_satd_c
130 void vp9_temporal_filter_apply_c(uint8_t *frame1
, unsigned int stride
, uint8_t *frame2
, unsigned int block_width
, unsigned int block_height
, int strength
, int filter_weight
, unsigned int *accumulator
, uint16_t *count
);
131 #define vp9_temporal_filter_apply vp9_temporal_filter_apply_c
133 int vp9_vector_var_c(int16_t const *ref
, int16_t const *src
, const int bwl
);
134 int vp9_vector_var_neon(int16_t const *ref
, int16_t const *src
, const int bwl
);
135 RTCD_EXTERN
int (*vp9_vector_var
)(int16_t const *ref
, int16_t const *src
, const int bwl
);
139 #include "vpx_config.h"
142 #include "vpx_ports/arm.h"
143 static void setup_rtcd_internal(void)
145 int flags
= arm_cpu_caps();
149 vp9_avg_8x8
= vp9_avg_8x8_c
;
150 if (flags
& HAS_NEON
) vp9_avg_8x8
= vp9_avg_8x8_neon
;
151 vp9_block_error_fp
= vp9_block_error_fp_c
;
152 if (flags
& HAS_NEON
) vp9_block_error_fp
= vp9_block_error_fp_neon
;
153 vp9_fdct8x8_quant
= vp9_fdct8x8_quant_c
;
154 if (flags
& HAS_NEON
) vp9_fdct8x8_quant
= vp9_fdct8x8_quant_neon
;
155 vp9_iht4x4_16_add
= vp9_iht4x4_16_add_c
;
156 if (flags
& HAS_NEON
) vp9_iht4x4_16_add
= vp9_iht4x4_16_add_neon
;
157 vp9_iht8x8_64_add
= vp9_iht8x8_64_add_c
;
158 if (flags
& HAS_NEON
) vp9_iht8x8_64_add
= vp9_iht8x8_64_add_neon
;
159 vp9_int_pro_col
= vp9_int_pro_col_c
;
160 if (flags
& HAS_NEON
) vp9_int_pro_col
= vp9_int_pro_col_neon
;
161 vp9_int_pro_row
= vp9_int_pro_row_c
;
162 if (flags
& HAS_NEON
) vp9_int_pro_row
= vp9_int_pro_row_neon
;
163 vp9_quantize_fp
= vp9_quantize_fp_c
;
164 if (flags
& HAS_NEON
) vp9_quantize_fp
= vp9_quantize_fp_neon
;
165 vp9_vector_var
= vp9_vector_var_c
;
166 if (flags
& HAS_NEON
) vp9_vector_var
= vp9_vector_var_neon
;