1*fb1b10abSAndroid Build Coastguard Worker## 2*fb1b10abSAndroid Build Coastguard Worker## Copyright (c) 2017 The WebM project authors. All Rights Reserved. 3*fb1b10abSAndroid Build Coastguard Worker## 4*fb1b10abSAndroid Build Coastguard Worker## Use of this source code is governed by a BSD-style license 5*fb1b10abSAndroid Build Coastguard Worker## that can be found in the LICENSE file in the root of the source 6*fb1b10abSAndroid Build Coastguard Worker## tree. An additional intellectual property rights grant can be found 7*fb1b10abSAndroid Build Coastguard Worker## in the file PATENTS. All contributing project authors may 8*fb1b10abSAndroid Build Coastguard Worker## be found in the AUTHORS file in the root of the source tree. 9*fb1b10abSAndroid Build Coastguard Worker## 10*fb1b10abSAndroid Build Coastguard Worker 11*fb1b10abSAndroid Build Coastguard Workersub vp9_common_forward_decls() { 12*fb1b10abSAndroid Build Coastguard Workerprint <<EOF 13*fb1b10abSAndroid Build Coastguard Worker/* 14*fb1b10abSAndroid Build Coastguard Worker * VP9 15*fb1b10abSAndroid Build Coastguard Worker */ 16*fb1b10abSAndroid Build Coastguard Worker 17*fb1b10abSAndroid Build Coastguard Worker#include "vpx/vpx_integer.h" 18*fb1b10abSAndroid Build Coastguard Worker#include "vp9/common/vp9_common.h" 19*fb1b10abSAndroid Build Coastguard Worker#include "vp9/common/vp9_enums.h" 20*fb1b10abSAndroid Build Coastguard Worker#include "vp9/common/vp9_filter.h" 21*fb1b10abSAndroid Build Coastguard Worker 22*fb1b10abSAndroid Build Coastguard Workerstruct macroblockd; 23*fb1b10abSAndroid Build Coastguard Worker 24*fb1b10abSAndroid Build Coastguard Worker/* Encoder forward decls */ 25*fb1b10abSAndroid Build Coastguard Workerstruct macroblock; 26*fb1b10abSAndroid Build Coastguard Workerstruct macroblock_plane; 27*fb1b10abSAndroid Build Coastguard Workerstruct vp9_sad_table; 28*fb1b10abSAndroid Build Coastguard Workerstruct ScanOrder; 29*fb1b10abSAndroid Build Coastguard Workerstruct search_site_config; 30*fb1b10abSAndroid Build Coastguard Workerstruct mv; 31*fb1b10abSAndroid Build Coastguard Workerunion int_mv; 32*fb1b10abSAndroid Build Coastguard Workerstruct yv12_buffer_config; 33*fb1b10abSAndroid Build Coastguard WorkerEOF 34*fb1b10abSAndroid Build Coastguard Worker} 35*fb1b10abSAndroid Build Coastguard Workerforward_decls qw/vp9_common_forward_decls/; 36*fb1b10abSAndroid Build Coastguard Worker 37*fb1b10abSAndroid Build Coastguard Worker# functions that are 64 bit only. 38*fb1b10abSAndroid Build Coastguard Worker$mmx_x86_64 = $sse2_x86_64 = $ssse3_x86_64 = $avx_x86_64 = $avx2_x86_64 = ''; 39*fb1b10abSAndroid Build Coastguard Workerif ($opts{arch} eq "x86_64") { 40*fb1b10abSAndroid Build Coastguard Worker $mmx_x86_64 = 'mmx'; 41*fb1b10abSAndroid Build Coastguard Worker $sse2_x86_64 = 'sse2'; 42*fb1b10abSAndroid Build Coastguard Worker $ssse3_x86_64 = 'ssse3'; 43*fb1b10abSAndroid Build Coastguard Worker $avx_x86_64 = 'avx'; 44*fb1b10abSAndroid Build Coastguard Worker $avx2_x86_64 = 'avx2'; 45*fb1b10abSAndroid Build Coastguard Worker $avx512_x86_64 = 'avx512'; 46*fb1b10abSAndroid Build Coastguard Worker} 47*fb1b10abSAndroid Build Coastguard Worker 48*fb1b10abSAndroid Build Coastguard Worker# 49*fb1b10abSAndroid Build Coastguard Worker# post proc 50*fb1b10abSAndroid Build Coastguard Worker# 51*fb1b10abSAndroid Build Coastguard Workerif (vpx_config("CONFIG_VP9_POSTPROC") eq "yes") { 52*fb1b10abSAndroid Build Coastguard Workeradd_proto qw/void vp9_filter_by_weight16x16/, "const uint8_t *src, int src_stride, uint8_t *dst, int dst_stride, int src_weight"; 53*fb1b10abSAndroid Build Coastguard Workerspecialize qw/vp9_filter_by_weight16x16 sse2 msa/; 54*fb1b10abSAndroid Build Coastguard Worker 55*fb1b10abSAndroid Build Coastguard Workeradd_proto qw/void vp9_filter_by_weight8x8/, "const uint8_t *src, int src_stride, uint8_t *dst, int dst_stride, int src_weight"; 56*fb1b10abSAndroid Build Coastguard Workerspecialize qw/vp9_filter_by_weight8x8 sse2 msa/; 57*fb1b10abSAndroid Build Coastguard Worker} 58*fb1b10abSAndroid Build Coastguard Worker 59*fb1b10abSAndroid Build Coastguard Worker# 60*fb1b10abSAndroid Build Coastguard Worker# dct 61*fb1b10abSAndroid Build Coastguard Worker# 62*fb1b10abSAndroid Build Coastguard Worker# Force C versions if CONFIG_EMULATE_HARDWARE is 1 63*fb1b10abSAndroid Build Coastguard Workeradd_proto qw/void vp9_iht4x4_16_add/, "const tran_low_t *input, uint8_t *dest, int stride, int tx_type"; 64*fb1b10abSAndroid Build Coastguard Worker 65*fb1b10abSAndroid Build Coastguard Workeradd_proto qw/void vp9_iht8x8_64_add/, "const tran_low_t *input, uint8_t *dest, int stride, int tx_type"; 66*fb1b10abSAndroid Build Coastguard Worker 67*fb1b10abSAndroid Build Coastguard Workeradd_proto qw/void vp9_iht16x16_256_add/, "const tran_low_t *input, uint8_t *dest, int stride, int tx_type"; 68*fb1b10abSAndroid Build Coastguard Worker 69*fb1b10abSAndroid Build Coastguard Workerif (vpx_config("CONFIG_EMULATE_HARDWARE") ne "yes") { 70*fb1b10abSAndroid Build Coastguard Worker # Note that there are more specializations appended when 71*fb1b10abSAndroid Build Coastguard Worker # CONFIG_VP9_HIGHBITDEPTH is off. 72*fb1b10abSAndroid Build Coastguard Worker specialize qw/vp9_iht4x4_16_add neon sse2 vsx/; 73*fb1b10abSAndroid Build Coastguard Worker specialize qw/vp9_iht8x8_64_add neon sse2 vsx/; 74*fb1b10abSAndroid Build Coastguard Worker specialize qw/vp9_iht16x16_256_add neon sse2 vsx/; 75*fb1b10abSAndroid Build Coastguard Worker if (vpx_config("CONFIG_VP9_HIGHBITDEPTH") ne "yes") { 76*fb1b10abSAndroid Build Coastguard Worker # Note that these specializations are appended to the above ones. 77*fb1b10abSAndroid Build Coastguard Worker specialize qw/vp9_iht4x4_16_add dspr2 msa/; 78*fb1b10abSAndroid Build Coastguard Worker specialize qw/vp9_iht8x8_64_add dspr2 msa/; 79*fb1b10abSAndroid Build Coastguard Worker specialize qw/vp9_iht16x16_256_add dspr2 msa/; 80*fb1b10abSAndroid Build Coastguard Worker } 81*fb1b10abSAndroid Build Coastguard Worker} 82*fb1b10abSAndroid Build Coastguard Worker 83*fb1b10abSAndroid Build Coastguard Worker# High bitdepth functions 84*fb1b10abSAndroid Build Coastguard Workerif (vpx_config("CONFIG_VP9_HIGHBITDEPTH") eq "yes") { 85*fb1b10abSAndroid Build Coastguard Worker # 86*fb1b10abSAndroid Build Coastguard Worker # post proc 87*fb1b10abSAndroid Build Coastguard Worker # 88*fb1b10abSAndroid Build Coastguard Worker if (vpx_config("CONFIG_VP9_POSTPROC") eq "yes") { 89*fb1b10abSAndroid Build Coastguard Worker add_proto qw/void vp9_highbd_mbpost_proc_down/, "uint16_t *dst, int pitch, int rows, int cols, int flimit"; 90*fb1b10abSAndroid Build Coastguard Worker 91*fb1b10abSAndroid Build Coastguard Worker add_proto qw/void vp9_highbd_mbpost_proc_across_ip/, "uint16_t *src, int pitch, int rows, int cols, int flimit"; 92*fb1b10abSAndroid Build Coastguard Worker 93*fb1b10abSAndroid Build Coastguard Worker add_proto qw/void vp9_highbd_post_proc_down_and_across/, "const uint16_t *src_ptr, uint16_t *dst_ptr, int src_pixels_per_line, int dst_pixels_per_line, int rows, int cols, int flimit"; 94*fb1b10abSAndroid Build Coastguard Worker } 95*fb1b10abSAndroid Build Coastguard Worker 96*fb1b10abSAndroid Build Coastguard Worker # 97*fb1b10abSAndroid Build Coastguard Worker # dct 98*fb1b10abSAndroid Build Coastguard Worker # 99*fb1b10abSAndroid Build Coastguard Worker # Note as optimized versions of these functions are added we need to add a check to ensure 100*fb1b10abSAndroid Build Coastguard Worker # that when CONFIG_EMULATE_HARDWARE is on, it defaults to the C versions only. 101*fb1b10abSAndroid Build Coastguard Worker add_proto qw/void vp9_highbd_iht4x4_16_add/, "const tran_low_t *input, uint16_t *dest, int stride, int tx_type, int bd"; 102*fb1b10abSAndroid Build Coastguard Worker 103*fb1b10abSAndroid Build Coastguard Worker add_proto qw/void vp9_highbd_iht8x8_64_add/, "const tran_low_t *input, uint16_t *dest, int stride, int tx_type, int bd"; 104*fb1b10abSAndroid Build Coastguard Worker 105*fb1b10abSAndroid Build Coastguard Worker add_proto qw/void vp9_highbd_iht16x16_256_add/, "const tran_low_t *input, uint16_t *dest, int stride, int tx_type, int bd"; 106*fb1b10abSAndroid Build Coastguard Worker 107*fb1b10abSAndroid Build Coastguard Worker if (vpx_config("CONFIG_EMULATE_HARDWARE") ne "yes") { 108*fb1b10abSAndroid Build Coastguard Worker specialize qw/vp9_highbd_iht4x4_16_add neon sse4_1/; 109*fb1b10abSAndroid Build Coastguard Worker specialize qw/vp9_highbd_iht8x8_64_add neon sse4_1/; 110*fb1b10abSAndroid Build Coastguard Worker specialize qw/vp9_highbd_iht16x16_256_add neon sse4_1/; 111*fb1b10abSAndroid Build Coastguard Worker } 112*fb1b10abSAndroid Build Coastguard Worker} 113*fb1b10abSAndroid Build Coastguard Worker 114*fb1b10abSAndroid Build Coastguard Worker# 115*fb1b10abSAndroid Build Coastguard Worker# Encoder functions below this point. 116*fb1b10abSAndroid Build Coastguard Worker# 117*fb1b10abSAndroid Build Coastguard Workerif (vpx_config("CONFIG_VP9_ENCODER") eq "yes") { 118*fb1b10abSAndroid Build Coastguard Worker 119*fb1b10abSAndroid Build Coastguard Worker# ENCODEMB INVOKE 120*fb1b10abSAndroid Build Coastguard Worker 121*fb1b10abSAndroid Build Coastguard Worker# 122*fb1b10abSAndroid Build Coastguard Worker# Denoiser 123*fb1b10abSAndroid Build Coastguard Worker# 124*fb1b10abSAndroid Build Coastguard Workerif (vpx_config("CONFIG_VP9_TEMPORAL_DENOISING") eq "yes") { 125*fb1b10abSAndroid Build Coastguard Worker add_proto qw/int vp9_denoiser_filter/, "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"; 126*fb1b10abSAndroid Build Coastguard Worker specialize qw/vp9_denoiser_filter neon sse2/; 127*fb1b10abSAndroid Build Coastguard Worker} 128*fb1b10abSAndroid Build Coastguard Worker 129*fb1b10abSAndroid Build Coastguard Workeradd_proto qw/int64_t vp9_block_error/, "const tran_low_t *coeff, const tran_low_t *dqcoeff, intptr_t block_size, int64_t *ssz"; 130*fb1b10abSAndroid Build Coastguard Worker 131*fb1b10abSAndroid Build Coastguard Workeradd_proto qw/int64_t vp9_block_error_fp/, "const tran_low_t *coeff, const tran_low_t *dqcoeff, int block_size"; 132*fb1b10abSAndroid Build Coastguard Workerspecialize qw/vp9_block_error_fp neon sve avx2 sse2/; 133*fb1b10abSAndroid Build Coastguard Worker 134*fb1b10abSAndroid Build Coastguard Workeradd_proto qw/void vp9_quantize_fp/, "const tran_low_t *coeff_ptr, intptr_t n_coeffs, const struct macroblock_plane *const mb_plane, tran_low_t *qcoeff_ptr, tran_low_t *dqcoeff_ptr, const int16_t *dequant_ptr, uint16_t *eob_ptr, const struct ScanOrder *const scan_order"; 135*fb1b10abSAndroid Build Coastguard Workerspecialize qw/vp9_quantize_fp neon sse2 ssse3 avx2 vsx/; 136*fb1b10abSAndroid Build Coastguard Worker 137*fb1b10abSAndroid Build Coastguard Workeradd_proto qw/void vp9_quantize_fp_32x32/, "const tran_low_t *coeff_ptr, intptr_t n_coeffs, const struct macroblock_plane *const mb_plane, tran_low_t *qcoeff_ptr, tran_low_t *dqcoeff_ptr, const int16_t *dequant_ptr, uint16_t *eob_ptr, const struct ScanOrder *const scan_order"; 138*fb1b10abSAndroid Build Coastguard Workerspecialize qw/vp9_quantize_fp_32x32 neon ssse3 avx2 vsx/; 139*fb1b10abSAndroid Build Coastguard Worker 140*fb1b10abSAndroid Build Coastguard Workerif (vpx_config("CONFIG_VP9_HIGHBITDEPTH") eq "yes") { 141*fb1b10abSAndroid Build Coastguard Worker specialize qw/vp9_block_error neon sve avx2 sse2/; 142*fb1b10abSAndroid Build Coastguard Worker 143*fb1b10abSAndroid Build Coastguard Worker add_proto qw/int64_t vp9_highbd_block_error/, "const tran_low_t *coeff, const tran_low_t *dqcoeff, intptr_t block_size, int64_t *ssz, int bd"; 144*fb1b10abSAndroid Build Coastguard Worker specialize qw/vp9_highbd_block_error neon sse2/; 145*fb1b10abSAndroid Build Coastguard Worker} else { 146*fb1b10abSAndroid Build Coastguard Worker specialize qw/vp9_block_error neon sve avx2 msa sse2/; 147*fb1b10abSAndroid Build Coastguard Worker} 148*fb1b10abSAndroid Build Coastguard Worker 149*fb1b10abSAndroid Build Coastguard Worker# fdct functions 150*fb1b10abSAndroid Build Coastguard Worker 151*fb1b10abSAndroid Build Coastguard Workeradd_proto qw/void vp9_fht4x4/, "const int16_t *input, tran_low_t *output, int stride, int tx_type"; 152*fb1b10abSAndroid Build Coastguard Worker 153*fb1b10abSAndroid Build Coastguard Workeradd_proto qw/void vp9_fht8x8/, "const int16_t *input, tran_low_t *output, int stride, int tx_type"; 154*fb1b10abSAndroid Build Coastguard Worker 155*fb1b10abSAndroid Build Coastguard Workeradd_proto qw/void vp9_fht16x16/, "const int16_t *input, tran_low_t *output, int stride, int tx_type"; 156*fb1b10abSAndroid Build Coastguard Worker 157*fb1b10abSAndroid Build Coastguard Workeradd_proto qw/void vp9_fwht4x4/, "const int16_t *input, tran_low_t *output, int stride"; 158*fb1b10abSAndroid Build Coastguard Worker 159*fb1b10abSAndroid Build Coastguard Worker# Note that there are more specializations appended when CONFIG_VP9_HIGHBITDEPTH 160*fb1b10abSAndroid Build Coastguard Worker# is off. 161*fb1b10abSAndroid Build Coastguard Workerspecialize qw/vp9_fht4x4 sse2 neon/; 162*fb1b10abSAndroid Build Coastguard Workerspecialize qw/vp9_fht8x8 sse2 neon/; 163*fb1b10abSAndroid Build Coastguard Workerspecialize qw/vp9_fht16x16 sse2 neon/; 164*fb1b10abSAndroid Build Coastguard Workerspecialize qw/vp9_fwht4x4 sse2/; 165*fb1b10abSAndroid Build Coastguard Workerif (vpx_config("CONFIG_VP9_HIGHBITDEPTH") ne "yes") { 166*fb1b10abSAndroid Build Coastguard Worker # Note that these specializations are appended to the above ones. 167*fb1b10abSAndroid Build Coastguard Worker specialize qw/vp9_fht4x4 msa/; 168*fb1b10abSAndroid Build Coastguard Worker specialize qw/vp9_fht8x8 msa/; 169*fb1b10abSAndroid Build Coastguard Worker specialize qw/vp9_fht16x16 msa/; 170*fb1b10abSAndroid Build Coastguard Worker specialize qw/vp9_fwht4x4 msa/; 171*fb1b10abSAndroid Build Coastguard Worker} 172*fb1b10abSAndroid Build Coastguard Worker 173*fb1b10abSAndroid Build Coastguard Worker# 174*fb1b10abSAndroid Build Coastguard Worker# Motion search 175*fb1b10abSAndroid Build Coastguard Worker# 176*fb1b10abSAndroid Build Coastguard Workeradd_proto qw/int vp9_diamond_search_sad/, "const struct macroblock *x, const struct search_site_config *cfg, struct mv *ref_mv, uint32_t start_mv_sad, struct mv *best_mv, int search_param, int sad_per_bit, int *num00, const struct vp9_sad_table *sad_fn_ptr, const struct mv *center_mv"; 177*fb1b10abSAndroid Build Coastguard Workerspecialize qw/vp9_diamond_search_sad neon/; 178*fb1b10abSAndroid Build Coastguard Worker 179*fb1b10abSAndroid Build Coastguard Worker# 180*fb1b10abSAndroid Build Coastguard Worker# Apply temporal filter 181*fb1b10abSAndroid Build Coastguard Worker# 182*fb1b10abSAndroid Build Coastguard Workerif (vpx_config("CONFIG_REALTIME_ONLY") ne "yes") { 183*fb1b10abSAndroid Build Coastguard Workeradd_proto qw/void vp9_apply_temporal_filter/, "const uint8_t *y_src, int y_src_stride, const uint8_t *y_pre, int y_pre_stride, const uint8_t *u_src, const uint8_t *v_src, int uv_src_stride, const uint8_t *u_pre, const uint8_t *v_pre, int uv_pre_stride, unsigned int block_width, unsigned int block_height, int ss_x, int ss_y, int strength, const int *const blk_fw, int use_32x32, uint32_t *y_accumulator, uint16_t *y_count, uint32_t *u_accumulator, uint16_t *u_count, uint32_t *v_accumulator, uint16_t *v_count"; 184*fb1b10abSAndroid Build Coastguard Workerspecialize qw/vp9_apply_temporal_filter sse4_1 neon/; 185*fb1b10abSAndroid Build Coastguard Worker 186*fb1b10abSAndroid Build Coastguard Worker if (vpx_config("CONFIG_VP9_HIGHBITDEPTH") eq "yes") { 187*fb1b10abSAndroid Build Coastguard Worker add_proto qw/void vp9_highbd_apply_temporal_filter/, "const uint16_t *y_src, int y_src_stride, const uint16_t *y_pre, int y_pre_stride, const uint16_t *u_src, const uint16_t *v_src, int uv_src_stride, const uint16_t *u_pre, const uint16_t *v_pre, int uv_pre_stride, unsigned int block_width, unsigned int block_height, int ss_x, int ss_y, int strength, const int *const blk_fw, int use_32x32, uint32_t *y_accum, uint16_t *y_count, uint32_t *u_accum, uint16_t *u_count, uint32_t *v_accum, uint16_t *v_count"; 188*fb1b10abSAndroid Build Coastguard Worker specialize qw/vp9_highbd_apply_temporal_filter sse4_1 neon/; 189*fb1b10abSAndroid Build Coastguard Worker } 190*fb1b10abSAndroid Build Coastguard Worker} 191*fb1b10abSAndroid Build Coastguard Worker 192*fb1b10abSAndroid Build Coastguard Worker 193*fb1b10abSAndroid Build Coastguard Workerif (vpx_config("CONFIG_VP9_HIGHBITDEPTH") eq "yes") { 194*fb1b10abSAndroid Build Coastguard Worker 195*fb1b10abSAndroid Build Coastguard Worker # ENCODEMB INVOKE 196*fb1b10abSAndroid Build Coastguard Worker 197*fb1b10abSAndroid Build Coastguard Worker add_proto qw/void vp9_highbd_quantize_fp/, "const tran_low_t *coeff_ptr, intptr_t n_coeffs, const struct macroblock_plane *const mb_plane, tran_low_t *qcoeff_ptr, tran_low_t *dqcoeff_ptr, const int16_t *dequant_ptr, uint16_t *eob_ptr, const struct ScanOrder *const scan_order"; 198*fb1b10abSAndroid Build Coastguard Worker specialize qw/vp9_highbd_quantize_fp avx2 neon/; 199*fb1b10abSAndroid Build Coastguard Worker 200*fb1b10abSAndroid Build Coastguard Worker add_proto qw/void vp9_highbd_quantize_fp_32x32/, "const tran_low_t *coeff_ptr, intptr_t n_coeffs, const struct macroblock_plane *const mb_plane, tran_low_t *qcoeff_ptr, tran_low_t *dqcoeff_ptr, const int16_t *dequant_ptr, uint16_t *eob_ptr, const struct ScanOrder *const scan_order"; 201*fb1b10abSAndroid Build Coastguard Worker specialize qw/vp9_highbd_quantize_fp_32x32 avx2 neon/; 202*fb1b10abSAndroid Build Coastguard Worker 203*fb1b10abSAndroid Build Coastguard Worker # fdct functions 204*fb1b10abSAndroid Build Coastguard Worker add_proto qw/void vp9_highbd_fht4x4/, "const int16_t *input, tran_low_t *output, int stride, int tx_type"; 205*fb1b10abSAndroid Build Coastguard Worker specialize qw/vp9_highbd_fht4x4 neon/; 206*fb1b10abSAndroid Build Coastguard Worker 207*fb1b10abSAndroid Build Coastguard Worker add_proto qw/void vp9_highbd_fht8x8/, "const int16_t *input, tran_low_t *output, int stride, int tx_type"; 208*fb1b10abSAndroid Build Coastguard Worker specialize qw/vp9_highbd_fht8x8 neon/; 209*fb1b10abSAndroid Build Coastguard Worker 210*fb1b10abSAndroid Build Coastguard Worker add_proto qw/void vp9_highbd_fht16x16/, "const int16_t *input, tran_low_t *output, int stride, int tx_type"; 211*fb1b10abSAndroid Build Coastguard Worker specialize qw/vp9_highbd_fht16x16 neon/; 212*fb1b10abSAndroid Build Coastguard Worker 213*fb1b10abSAndroid Build Coastguard Worker add_proto qw/void vp9_highbd_fwht4x4/, "const int16_t *input, tran_low_t *output, int stride"; 214*fb1b10abSAndroid Build Coastguard Worker 215*fb1b10abSAndroid Build Coastguard Worker add_proto qw/void vp9_highbd_temporal_filter_apply/, "const uint8_t *frame1, unsigned int stride, const uint8_t *frame2, unsigned int block_width, unsigned int block_height, int strength, int *blk_fw, int use_32x32, uint32_t *accumulator, uint16_t *count"; 216*fb1b10abSAndroid Build Coastguard Worker 217*fb1b10abSAndroid Build Coastguard Worker} 218*fb1b10abSAndroid Build Coastguard Worker# End vp9_high encoder functions 219*fb1b10abSAndroid Build Coastguard Worker 220*fb1b10abSAndroid Build Coastguard Worker# 221*fb1b10abSAndroid Build Coastguard Worker# frame based scale 222*fb1b10abSAndroid Build Coastguard Worker# 223*fb1b10abSAndroid Build Coastguard Workeradd_proto qw/void vp9_scale_and_extend_frame/, "const struct yv12_buffer_config *src, struct yv12_buffer_config *dst, INTERP_FILTER filter_type, int phase_scaler"; 224*fb1b10abSAndroid Build Coastguard Workerspecialize qw/vp9_scale_and_extend_frame neon ssse3/; 225*fb1b10abSAndroid Build Coastguard Worker 226*fb1b10abSAndroid Build Coastguard Worker} 227*fb1b10abSAndroid Build Coastguard Worker# end encoder functions 228*fb1b10abSAndroid Build Coastguard Worker1; 229