summaryrefslogtreecommitdiffstats
path: root/media/libvpx
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-12 05:43:14 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-12 05:43:14 +0000
commit8dd16259287f58f9273002717ec4d27e97127719 (patch)
tree3863e62a53829a84037444beab3abd4ed9dfc7d0 /media/libvpx
parentReleasing progress-linux version 126.0.1-1~progress7.99u1. (diff)
downloadfirefox-8dd16259287f58f9273002717ec4d27e97127719.tar.xz
firefox-8dd16259287f58f9273002717ec4d27e97127719.zip
Merging upstream version 127.0.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'media/libvpx')
-rw-r--r--media/libvpx/arm_cpu_runtime_detection_code_on_openbsd.patch6
-rw-r--r--media/libvpx/config/linux/arm64/vp9_rtcd.h10
-rw-r--r--media/libvpx/config/linux/arm64/vpx_config.asm4
-rw-r--r--media/libvpx/config/linux/arm64/vpx_config.c2
-rw-r--r--media/libvpx/config/linux/arm64/vpx_config.h4
-rw-r--r--media/libvpx/config/linux/arm64/vpx_dsp_rtcd.h5
-rw-r--r--media/libvpx/config/mac/arm64/vp8_rtcd.h204
-rw-r--r--media/libvpx/config/mac/arm64/vp9_rtcd.h116
-rw-r--r--media/libvpx/config/mac/arm64/vpx_config.asm98
-rw-r--r--media/libvpx/config/mac/arm64/vpx_config.c10
-rw-r--r--media/libvpx/config/mac/arm64/vpx_config.h109
-rw-r--r--media/libvpx/config/mac/arm64/vpx_dsp_rtcd.h1187
-rw-r--r--media/libvpx/config/mac/arm64/vpx_scale_rtcd.h75
-rwxr-xr-xmedia/libvpx/generate_sources_mozbuild.sh85
-rwxr-xr-xmedia/libvpx/libvpx/build/make/rtcd.pl4
-rw-r--r--media/libvpx/libvpx/test/add_noise_test.cc1
-rw-r--r--media/libvpx/libvpx/test/altref_test.cc1
-rw-r--r--media/libvpx/libvpx/test/bench.cc1
-rw-r--r--media/libvpx/libvpx/test/borders_test.cc6
-rw-r--r--media/libvpx/libvpx/test/comp_avg_pred_test.cc1
-rw-r--r--media/libvpx/libvpx/test/convolve_test.cc22
-rw-r--r--media/libvpx/libvpx/test/cpu_speed_test.cc5
-rw-r--r--media/libvpx/libvpx/test/cq_test.cc6
-rw-r--r--media/libvpx/libvpx/test/dct16x16_test.cc1
-rw-r--r--media/libvpx/libvpx/test/dct_partial_test.cc1
-rw-r--r--media/libvpx/libvpx/test/dct_test.cc1
-rw-r--r--media/libvpx/libvpx/test/decode_corrupted.cc1
-rw-r--r--media/libvpx/libvpx/test/encode_api_test.cc154
-rw-r--r--media/libvpx/libvpx/test/encode_test_driver.h11
-rw-r--r--media/libvpx/libvpx/test/error_resilience_test.cc6
-rw-r--r--media/libvpx/libvpx/test/fdct8x8_test.cc1
-rw-r--r--media/libvpx/libvpx/test/frame_size_tests.cc13
-rw-r--r--media/libvpx/libvpx/test/hadamard_test.cc1
-rw-r--r--media/libvpx/libvpx/test/level_test.cc17
-rw-r--r--media/libvpx/libvpx/test/minmax_test.cc1
-rw-r--r--media/libvpx/libvpx/test/partial_idct_test.cc1
-rw-r--r--media/libvpx/libvpx/test/realtime_test.cc5
-rw-r--r--media/libvpx/libvpx/test/resize_test.cc1
-rw-r--r--media/libvpx/libvpx/test/test.mk9
-rw-r--r--media/libvpx/libvpx/test/test_vectors.cc1
-rw-r--r--media/libvpx/libvpx/test/timestamp_test.cc8
-rw-r--r--media/libvpx/libvpx/test/vp8_denoiser_sse2_test.cc1
-rw-r--r--media/libvpx/libvpx/test/vp9_arf_freq_test.cc1
-rw-r--r--media/libvpx/libvpx/test/vp9_boolcoder_test.cc25
-rw-r--r--media/libvpx/libvpx/test/vp9_denoiser_test.cc1
-rw-r--r--media/libvpx/libvpx/test/vp9_end_to_end_test.cc3
-rw-r--r--media/libvpx/libvpx/test/vp9_ethread_test.cc23
-rw-r--r--media/libvpx/libvpx/test/vp9_ext_ratectrl_test.cc20
-rw-r--r--media/libvpx/libvpx/test/vp9_lossless_test.cc5
-rw-r--r--media/libvpx/libvpx/test/vp9_motion_vector_test.cc3
-rw-r--r--media/libvpx/libvpx/test/vpx_image_test.cc127
-rw-r--r--media/libvpx/libvpx/test/yuv_temporal_filter_test.cc1
-rw-r--r--media/libvpx/libvpx/vp8/common/generic/systemdependent.c15
-rw-r--r--media/libvpx/libvpx/vp8/common/onyxc_int.h1
-rw-r--r--media/libvpx/libvpx/vp8/encoder/bitstream.c8
-rw-r--r--media/libvpx/libvpx/vp8/encoder/encodeframe.c3
-rw-r--r--media/libvpx/libvpx/vp8/vp8_cx_iface.c4
-rw-r--r--media/libvpx/libvpx/vp9/decoder/vp9_decodeframe.c1
-rw-r--r--media/libvpx/libvpx/vp9/encoder/vp9_bitstream.c125
-rw-r--r--media/libvpx/libvpx/vp9/encoder/vp9_bitstream.h5
-rw-r--r--media/libvpx/libvpx/vp9/encoder/vp9_encodeframe.c11
-rw-r--r--media/libvpx/libvpx/vp9/encoder/vp9_encoder.c58
-rw-r--r--media/libvpx/libvpx/vp9/encoder/vp9_encoder.h8
-rw-r--r--media/libvpx/libvpx/vp9/encoder/vp9_ethread.h1
-rw-r--r--media/libvpx/libvpx/vp9/encoder/vp9_firstpass.c40
-rw-r--r--media/libvpx/libvpx/vp9/encoder/vp9_multi_thread.c29
-rw-r--r--media/libvpx/libvpx/vp9/encoder/vp9_pickmode.c2
-rw-r--r--media/libvpx/libvpx/vp9/encoder/vp9_rdopt.c14
-rw-r--r--media/libvpx/libvpx/vp9/encoder/vp9_speed_features.h2
-rw-r--r--media/libvpx/libvpx/vp9/ratectrl_rtc.cc4
-rw-r--r--media/libvpx/libvpx/vp9/simple_encode.cc13
-rw-r--r--media/libvpx/libvpx/vp9/simple_encode.h1
-rw-r--r--media/libvpx/libvpx/vp9/vp9_cx_iface.c20
-rw-r--r--media/libvpx/libvpx/vpx/exports_com3
-rw-r--r--media/libvpx/libvpx/vpx/src/vpx_image.c83
-rw-r--r--media/libvpx/libvpx/vpx/src/vpx_tpl.c107
-rw-r--r--media/libvpx/libvpx/vpx/vpx_codec.mk1
-rw-r--r--media/libvpx/libvpx/vpx/vpx_encoder.h2
-rw-r--r--media/libvpx/libvpx/vpx/vpx_ext_ratectrl.h113
-rw-r--r--media/libvpx/libvpx/vpx/vpx_image.h26
-rw-r--r--media/libvpx/libvpx/vpx/vpx_tpl.h38
-rw-r--r--media/libvpx/libvpx/vpx_dsp/arm/highbd_convolve8_neon.h46
-rw-r--r--media/libvpx/libvpx/vpx_dsp/arm/highbd_convolve8_sve.h99
-rw-r--r--media/libvpx/libvpx/vpx_dsp/arm/highbd_vpx_convolve8_neon.c127
-rw-r--r--media/libvpx/libvpx/vpx_dsp/arm/highbd_vpx_convolve8_sve.c98
-rw-r--r--media/libvpx/libvpx/vpx_dsp/arm/highbd_vpx_convolve8_sve2.c336
-rw-r--r--media/libvpx/libvpx/vpx_dsp/arm/vpx_scaled_convolve8_neon.c1
-rw-r--r--media/libvpx/libvpx/vpx_dsp/bitwriter.c21
-rw-r--r--media/libvpx/libvpx/vpx_dsp/bitwriter.h34
-rw-r--r--media/libvpx/libvpx/vpx_dsp/bitwriter_buffer.c21
-rw-r--r--media/libvpx/libvpx/vpx_dsp/bitwriter_buffer.h16
-rw-r--r--media/libvpx/libvpx/vpx_dsp/vpx_dsp_rtcd_defs.pl4
-rw-r--r--media/libvpx/libvpx/vpx_ports/aarch64_cpudetect.c3
-rw-r--r--media/libvpx/libvpx/vpx_util/vpx_thread.h2
-rw-r--r--media/libvpx/missing_header.patch12
-rw-r--r--media/libvpx/moz.build57
-rw-r--r--media/libvpx/moz.yaml5
-rw-r--r--media/libvpx/sources.mozbuild1622
98 files changed, 4953 insertions, 694 deletions
diff --git a/media/libvpx/arm_cpu_runtime_detection_code_on_openbsd.patch b/media/libvpx/arm_cpu_runtime_detection_code_on_openbsd.patch
index 4788b3996a..6dc899e8ba 100644
--- a/media/libvpx/arm_cpu_runtime_detection_code_on_openbsd.patch
+++ b/media/libvpx/arm_cpu_runtime_detection_code_on_openbsd.patch
@@ -6,10 +6,10 @@ Bug 1888772 - Allow ARM CPU runtime detection code to build on OpenBSD
diff --git a/vpx_ports/aarch64_cpudetect.c b/vpx_ports/aarch64_cpudetect.c
--- a/vpx_ports/aarch64_cpudetect.c
+++ b/vpx_ports/aarch64_cpudetect.c
-@@ -10,30 +10,30 @@
-
+@@ -11,30 +11,30 @@
#include "./vpx_config.h"
- #include "arm_cpudetect.h"
+ #include "vpx_ports/arm.h"
+ #include "vpx_ports/arm_cpudetect.h"
#if defined(__APPLE__)
#include <sys/sysctl.h>
diff --git a/media/libvpx/config/linux/arm64/vp9_rtcd.h b/media/libvpx/config/linux/arm64/vp9_rtcd.h
index b7d828d446..738de4f9f4 100644
--- a/media/libvpx/config/linux/arm64/vp9_rtcd.h
+++ b/media/libvpx/config/linux/arm64/vp9_rtcd.h
@@ -35,13 +35,11 @@ extern "C" {
int64_t vp9_block_error_c(const tran_low_t *coeff, const tran_low_t *dqcoeff, intptr_t block_size, int64_t *ssz);
int64_t vp9_block_error_neon(const tran_low_t *coeff, const tran_low_t *dqcoeff, intptr_t block_size, int64_t *ssz);
-int64_t vp9_block_error_sve(const tran_low_t *coeff, const tran_low_t *dqcoeff, intptr_t block_size, int64_t *ssz);
-RTCD_EXTERN int64_t (*vp9_block_error)(const tran_low_t *coeff, const tran_low_t *dqcoeff, intptr_t block_size, int64_t *ssz);
+#define vp9_block_error vp9_block_error_neon
int64_t vp9_block_error_fp_c(const tran_low_t *coeff, const tran_low_t *dqcoeff, int block_size);
int64_t vp9_block_error_fp_neon(const tran_low_t *coeff, const tran_low_t *dqcoeff, int block_size);
-int64_t vp9_block_error_fp_sve(const tran_low_t *coeff, const tran_low_t *dqcoeff, int block_size);
-RTCD_EXTERN int64_t (*vp9_block_error_fp)(const tran_low_t *coeff, const tran_low_t *dqcoeff, int block_size);
+#define vp9_block_error_fp vp9_block_error_fp_neon
int vp9_diamond_search_sad_c(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);
int vp9_diamond_search_sad_neon(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);
@@ -98,10 +96,6 @@ static void setup_rtcd_internal(void)
(void)flags;
- vp9_block_error = vp9_block_error_neon;
- if (flags & HAS_SVE) vp9_block_error = vp9_block_error_sve;
- vp9_block_error_fp = vp9_block_error_fp_neon;
- if (flags & HAS_SVE) vp9_block_error_fp = vp9_block_error_fp_sve;
}
#endif
diff --git a/media/libvpx/config/linux/arm64/vpx_config.asm b/media/libvpx/config/linux/arm64/vpx_config.asm
index c51a76b3f6..a5b2d4303e 100644
--- a/media/libvpx/config/linux/arm64/vpx_config.asm
+++ b/media/libvpx/config/linux/arm64/vpx_config.asm
@@ -12,8 +12,8 @@
.equ HAVE_NEON , 1
.equ HAVE_NEON_DOTPROD , 1
.equ HAVE_NEON_I8MM , 1
-.equ HAVE_SVE , 1
-.equ HAVE_SVE2 , 1
+.equ HAVE_SVE , 0
+.equ HAVE_SVE2 , 0
.equ HAVE_MIPS32 , 0
.equ HAVE_DSPR2 , 0
.equ HAVE_MSA , 0
diff --git a/media/libvpx/config/linux/arm64/vpx_config.c b/media/libvpx/config/linux/arm64/vpx_config.c
index c0d714503f..5c4f1798e5 100644
--- a/media/libvpx/config/linux/arm64/vpx_config.c
+++ b/media/libvpx/config/linux/arm64/vpx_config.c
@@ -6,5 +6,5 @@
/* in the file PATENTS. All contributing project authors may */
/* be found in the AUTHORS file in the root of the source tree. */
#include "vpx/vpx_codec.h"
-static const char* const cfg = "--target=arm64-linux-gcc --enable-external-build --disable-examples --disable-install-docs --disable-unit-tests --enable-multi-res-encoding --size-limit=8192x4608 --enable-pic --disable-avx512 --enable-realtime-only --log=/home/cm/Work/gecko-dev/media/libvpx/config/linux/arm64/config.log";
+static const char* const cfg = "--target=arm64-linux-gcc --enable-external-build --disable-examples --disable-install-docs --disable-unit-tests --enable-multi-res-encoding --size-limit=8192x4608 --enable-pic --disable-avx512 --enable-realtime-only --disable-sve --log=/home/cm/Work/gecko-dev/media/libvpx/config/linux/arm64/config.log";
const char *vpx_codec_build_config(void) {return cfg;}
diff --git a/media/libvpx/config/linux/arm64/vpx_config.h b/media/libvpx/config/linux/arm64/vpx_config.h
index 12251ee0c1..526796879f 100644
--- a/media/libvpx/config/linux/arm64/vpx_config.h
+++ b/media/libvpx/config/linux/arm64/vpx_config.h
@@ -21,8 +21,8 @@
#define HAVE_NEON 1
#define HAVE_NEON_DOTPROD 1
#define HAVE_NEON_I8MM 1
-#define HAVE_SVE 1
-#define HAVE_SVE2 1
+#define HAVE_SVE 0
+#define HAVE_SVE2 0
#define HAVE_MIPS32 0
#define HAVE_DSPR2 0
#define HAVE_MSA 0
diff --git a/media/libvpx/config/linux/arm64/vpx_dsp_rtcd.h b/media/libvpx/config/linux/arm64/vpx_dsp_rtcd.h
index 2c31ee4ef9..5a9b05ca14 100644
--- a/media/libvpx/config/linux/arm64/vpx_dsp_rtcd.h
+++ b/media/libvpx/config/linux/arm64/vpx_dsp_rtcd.h
@@ -916,8 +916,7 @@ void vpx_subtract_block_neon(int rows, int cols, int16_t *diff_ptr, ptrdiff_t di
uint64_t vpx_sum_squares_2d_i16_c(const int16_t *src, int stride, int size);
uint64_t vpx_sum_squares_2d_i16_neon(const int16_t *src, int stride, int size);
-uint64_t vpx_sum_squares_2d_i16_sve(const int16_t *src, int stride, int size);
-RTCD_EXTERN uint64_t (*vpx_sum_squares_2d_i16)(const int16_t *src, int stride, int size);
+#define vpx_sum_squares_2d_i16 vpx_sum_squares_2d_i16_neon
void vpx_tm_predictor_16x16_c(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
void vpx_tm_predictor_16x16_neon(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
@@ -1149,8 +1148,6 @@ static void setup_rtcd_internal(void)
if (flags & HAS_NEON_DOTPROD) vpx_sad_skip_64x64x4d = vpx_sad_skip_64x64x4d_neon_dotprod;
vpx_sse = vpx_sse_neon;
if (flags & HAS_NEON_DOTPROD) vpx_sse = vpx_sse_neon_dotprod;
- vpx_sum_squares_2d_i16 = vpx_sum_squares_2d_i16_neon;
- if (flags & HAS_SVE) vpx_sum_squares_2d_i16 = vpx_sum_squares_2d_i16_sve;
vpx_variance16x16 = vpx_variance16x16_neon;
if (flags & HAS_NEON_DOTPROD) vpx_variance16x16 = vpx_variance16x16_neon_dotprod;
vpx_variance16x32 = vpx_variance16x32_neon;
diff --git a/media/libvpx/config/mac/arm64/vp8_rtcd.h b/media/libvpx/config/mac/arm64/vp8_rtcd.h
new file mode 100644
index 0000000000..c8826511ff
--- /dev/null
+++ b/media/libvpx/config/mac/arm64/vp8_rtcd.h
@@ -0,0 +1,204 @@
+// This file is generated. Do not edit.
+#ifndef VP8_RTCD_H_
+#define VP8_RTCD_H_
+
+#ifdef RTCD_C
+#define RTCD_EXTERN
+#else
+#define RTCD_EXTERN extern
+#endif
+
+/*
+ * VP8
+ */
+
+struct blockd;
+struct macroblockd;
+struct loop_filter_info;
+
+/* Encoder forward decls */
+struct block;
+struct macroblock;
+struct variance_vtable;
+union int_mv;
+struct yv12_buffer_config;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void vp8_bilinear_predict16x16_c(unsigned char *src_ptr, int src_pixels_per_line, int xoffset, int yoffset, unsigned char *dst_ptr, int dst_pitch);
+void vp8_bilinear_predict16x16_neon(unsigned char *src_ptr, int src_pixels_per_line, int xoffset, int yoffset, unsigned char *dst_ptr, int dst_pitch);
+#define vp8_bilinear_predict16x16 vp8_bilinear_predict16x16_neon
+
+void vp8_bilinear_predict4x4_c(unsigned char *src_ptr, int src_pixels_per_line, int xoffset, int yoffset, unsigned char *dst_ptr, int dst_pitch);
+void vp8_bilinear_predict4x4_neon(unsigned char *src_ptr, int src_pixels_per_line, int xoffset, int yoffset, unsigned char *dst_ptr, int dst_pitch);
+#define vp8_bilinear_predict4x4 vp8_bilinear_predict4x4_neon
+
+void vp8_bilinear_predict8x4_c(unsigned char *src_ptr, int src_pixels_per_line, int xoffset, int yoffset, unsigned char *dst_ptr, int dst_pitch);
+void vp8_bilinear_predict8x4_neon(unsigned char *src_ptr, int src_pixels_per_line, int xoffset, int yoffset, unsigned char *dst_ptr, int dst_pitch);
+#define vp8_bilinear_predict8x4 vp8_bilinear_predict8x4_neon
+
+void vp8_bilinear_predict8x8_c(unsigned char *src_ptr, int src_pixels_per_line, int xoffset, int yoffset, unsigned char *dst_ptr, int dst_pitch);
+void vp8_bilinear_predict8x8_neon(unsigned char *src_ptr, int src_pixels_per_line, int xoffset, int yoffset, unsigned char *dst_ptr, int dst_pitch);
+#define vp8_bilinear_predict8x8 vp8_bilinear_predict8x8_neon
+
+int vp8_block_error_c(short *coeff, short *dqcoeff);
+#define vp8_block_error vp8_block_error_c
+
+void vp8_copy32xn_c(const unsigned char *src_ptr, int src_stride, unsigned char *dst_ptr, int dst_stride, int height);
+#define vp8_copy32xn vp8_copy32xn_c
+
+void vp8_copy_mem16x16_c(unsigned char *src, int src_stride, unsigned char *dst, int dst_stride);
+void vp8_copy_mem16x16_neon(unsigned char *src, int src_stride, unsigned char *dst, int dst_stride);
+#define vp8_copy_mem16x16 vp8_copy_mem16x16_neon
+
+void vp8_copy_mem8x4_c(unsigned char *src, int src_stride, unsigned char *dst, int dst_stride);
+void vp8_copy_mem8x4_neon(unsigned char *src, int src_stride, unsigned char *dst, int dst_stride);
+#define vp8_copy_mem8x4 vp8_copy_mem8x4_neon
+
+void vp8_copy_mem8x8_c(unsigned char *src, int src_stride, unsigned char *dst, int dst_stride);
+void vp8_copy_mem8x8_neon(unsigned char *src, int src_stride, unsigned char *dst, int dst_stride);
+#define vp8_copy_mem8x8 vp8_copy_mem8x8_neon
+
+void vp8_dc_only_idct_add_c(short input_dc, unsigned char *pred_ptr, int pred_stride, unsigned char *dst_ptr, int dst_stride);
+void vp8_dc_only_idct_add_neon(short input_dc, unsigned char *pred_ptr, int pred_stride, unsigned char *dst_ptr, int dst_stride);
+#define vp8_dc_only_idct_add vp8_dc_only_idct_add_neon
+
+int vp8_denoiser_filter_c(unsigned char *mc_running_avg_y, int mc_avg_y_stride, unsigned char *running_avg_y, int avg_y_stride, unsigned char *sig, int sig_stride, unsigned int motion_magnitude, int increase_denoising);
+int vp8_denoiser_filter_neon(unsigned char *mc_running_avg_y, int mc_avg_y_stride, unsigned char *running_avg_y, int avg_y_stride, unsigned char *sig, int sig_stride, unsigned int motion_magnitude, int increase_denoising);
+#define vp8_denoiser_filter vp8_denoiser_filter_neon
+
+int vp8_denoiser_filter_uv_c(unsigned char *mc_running_avg, int mc_avg_stride, unsigned char *running_avg, int avg_stride, unsigned char *sig, int sig_stride, unsigned int motion_magnitude, int increase_denoising);
+int vp8_denoiser_filter_uv_neon(unsigned char *mc_running_avg, int mc_avg_stride, unsigned char *running_avg, int avg_stride, unsigned char *sig, int sig_stride, unsigned int motion_magnitude, int increase_denoising);
+#define vp8_denoiser_filter_uv vp8_denoiser_filter_uv_neon
+
+void vp8_dequant_idct_add_c(short *input, short *dq, unsigned char *dest, int stride);
+void vp8_dequant_idct_add_neon(short *input, short *dq, unsigned char *dest, int stride);
+#define vp8_dequant_idct_add vp8_dequant_idct_add_neon
+
+void vp8_dequant_idct_add_uv_block_c(short *q, short *dq, unsigned char *dst_u, unsigned char *dst_v, int stride, char *eobs);
+void vp8_dequant_idct_add_uv_block_neon(short *q, short *dq, unsigned char *dst_u, unsigned char *dst_v, int stride, char *eobs);
+#define vp8_dequant_idct_add_uv_block vp8_dequant_idct_add_uv_block_neon
+
+void vp8_dequant_idct_add_y_block_c(short *q, short *dq, unsigned char *dst, int stride, char *eobs);
+void vp8_dequant_idct_add_y_block_neon(short *q, short *dq, unsigned char *dst, int stride, char *eobs);
+#define vp8_dequant_idct_add_y_block vp8_dequant_idct_add_y_block_neon
+
+void vp8_dequantize_b_c(struct blockd*, short *DQC);
+void vp8_dequantize_b_neon(struct blockd*, short *DQC);
+#define vp8_dequantize_b vp8_dequantize_b_neon
+
+int vp8_diamond_search_sad_c(struct macroblock *x, struct block *b, struct blockd *d, union int_mv *ref_mv, union int_mv *best_mv, int search_param, int sad_per_bit, int *num00, struct variance_vtable *fn_ptr, int *mvcost[2], union int_mv *center_mv);
+#define vp8_diamond_search_sad vp8_diamond_search_sad_c
+
+void vp8_fast_quantize_b_c(struct block *, struct blockd *);
+void vp8_fast_quantize_b_neon(struct block *, struct blockd *);
+#define vp8_fast_quantize_b vp8_fast_quantize_b_neon
+
+void vp8_loop_filter_bh_c(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr, int y_stride, int uv_stride, struct loop_filter_info *lfi);
+void vp8_loop_filter_bh_neon(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr, int y_stride, int uv_stride, struct loop_filter_info *lfi);
+#define vp8_loop_filter_bh vp8_loop_filter_bh_neon
+
+void vp8_loop_filter_bv_c(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr, int y_stride, int uv_stride, struct loop_filter_info *lfi);
+void vp8_loop_filter_bv_neon(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr, int y_stride, int uv_stride, struct loop_filter_info *lfi);
+#define vp8_loop_filter_bv vp8_loop_filter_bv_neon
+
+void vp8_loop_filter_mbh_c(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr, int y_stride, int uv_stride, struct loop_filter_info *lfi);
+void vp8_loop_filter_mbh_neon(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr, int y_stride, int uv_stride, struct loop_filter_info *lfi);
+#define vp8_loop_filter_mbh vp8_loop_filter_mbh_neon
+
+void vp8_loop_filter_mbv_c(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr, int y_stride, int uv_stride, struct loop_filter_info *lfi);
+void vp8_loop_filter_mbv_neon(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr, int y_stride, int uv_stride, struct loop_filter_info *lfi);
+#define vp8_loop_filter_mbv vp8_loop_filter_mbv_neon
+
+void vp8_loop_filter_bhs_c(unsigned char *y_ptr, int y_stride, const unsigned char *blimit);
+void vp8_loop_filter_bhs_neon(unsigned char *y_ptr, int y_stride, const unsigned char *blimit);
+#define vp8_loop_filter_simple_bh vp8_loop_filter_bhs_neon
+
+void vp8_loop_filter_bvs_c(unsigned char *y_ptr, int y_stride, const unsigned char *blimit);
+void vp8_loop_filter_bvs_neon(unsigned char *y_ptr, int y_stride, const unsigned char *blimit);
+#define vp8_loop_filter_simple_bv vp8_loop_filter_bvs_neon
+
+void vp8_loop_filter_simple_horizontal_edge_c(unsigned char *y_ptr, int y_stride, const unsigned char *blimit);
+void vp8_loop_filter_mbhs_neon(unsigned char *y_ptr, int y_stride, const unsigned char *blimit);
+#define vp8_loop_filter_simple_mbh vp8_loop_filter_mbhs_neon
+
+void vp8_loop_filter_simple_vertical_edge_c(unsigned char *y_ptr, int y_stride, const unsigned char *blimit);
+void vp8_loop_filter_mbvs_neon(unsigned char *y_ptr, int y_stride, const unsigned char *blimit);
+#define vp8_loop_filter_simple_mbv vp8_loop_filter_mbvs_neon
+
+int vp8_mbblock_error_c(struct macroblock *mb, int dc);
+#define vp8_mbblock_error vp8_mbblock_error_c
+
+int vp8_mbuverror_c(struct macroblock *mb);
+#define vp8_mbuverror vp8_mbuverror_c
+
+int vp8_refining_search_sad_c(struct macroblock *x, struct block *b, struct blockd *d, union int_mv *ref_mv, int error_per_bit, int search_range, struct variance_vtable *fn_ptr, int *mvcost[2], union int_mv *center_mv);
+#define vp8_refining_search_sad vp8_refining_search_sad_c
+
+void vp8_regular_quantize_b_c(struct block *, struct blockd *);
+#define vp8_regular_quantize_b vp8_regular_quantize_b_c
+
+void vp8_short_fdct4x4_c(short *input, short *output, int pitch);
+void vp8_short_fdct4x4_neon(short *input, short *output, int pitch);
+#define vp8_short_fdct4x4 vp8_short_fdct4x4_neon
+
+void vp8_short_fdct8x4_c(short *input, short *output, int pitch);
+void vp8_short_fdct8x4_neon(short *input, short *output, int pitch);
+#define vp8_short_fdct8x4 vp8_short_fdct8x4_neon
+
+void vp8_short_idct4x4llm_c(short *input, unsigned char *pred_ptr, int pred_stride, unsigned char *dst_ptr, int dst_stride);
+void vp8_short_idct4x4llm_neon(short *input, unsigned char *pred_ptr, int pred_stride, unsigned char *dst_ptr, int dst_stride);
+#define vp8_short_idct4x4llm vp8_short_idct4x4llm_neon
+
+void vp8_short_inv_walsh4x4_c(short *input, short *mb_dqcoeff);
+void vp8_short_inv_walsh4x4_neon(short *input, short *mb_dqcoeff);
+#define vp8_short_inv_walsh4x4 vp8_short_inv_walsh4x4_neon
+
+void vp8_short_inv_walsh4x4_1_c(short *input, short *mb_dqcoeff);
+#define vp8_short_inv_walsh4x4_1 vp8_short_inv_walsh4x4_1_c
+
+void vp8_short_walsh4x4_c(short *input, short *output, int pitch);
+void vp8_short_walsh4x4_neon(short *input, short *output, int pitch);
+#define vp8_short_walsh4x4 vp8_short_walsh4x4_neon
+
+void vp8_sixtap_predict16x16_c(unsigned char *src_ptr, int src_pixels_per_line, int xoffset, int yoffset, unsigned char *dst_ptr, int dst_pitch);
+void vp8_sixtap_predict16x16_neon(unsigned char *src_ptr, int src_pixels_per_line, int xoffset, int yoffset, unsigned char *dst_ptr, int dst_pitch);
+#define vp8_sixtap_predict16x16 vp8_sixtap_predict16x16_neon
+
+void vp8_sixtap_predict4x4_c(unsigned char *src_ptr, int src_pixels_per_line, int xoffset, int yoffset, unsigned char *dst_ptr, int dst_pitch);
+void vp8_sixtap_predict4x4_neon(unsigned char *src_ptr, int src_pixels_per_line, int xoffset, int yoffset, unsigned char *dst_ptr, int dst_pitch);
+#define vp8_sixtap_predict4x4 vp8_sixtap_predict4x4_neon
+
+void vp8_sixtap_predict8x4_c(unsigned char *src_ptr, int src_pixels_per_line, int xoffset, int yoffset, unsigned char *dst_ptr, int dst_pitch);
+void vp8_sixtap_predict8x4_neon(unsigned char *src_ptr, int src_pixels_per_line, int xoffset, int yoffset, unsigned char *dst_ptr, int dst_pitch);
+#define vp8_sixtap_predict8x4 vp8_sixtap_predict8x4_neon
+
+void vp8_sixtap_predict8x8_c(unsigned char *src_ptr, int src_pixels_per_line, int xoffset, int yoffset, unsigned char *dst_ptr, int dst_pitch);
+void vp8_sixtap_predict8x8_neon(unsigned char *src_ptr, int src_pixels_per_line, int xoffset, int yoffset, unsigned char *dst_ptr, int dst_pitch);
+#define vp8_sixtap_predict8x8 vp8_sixtap_predict8x8_neon
+
+void vp8_temporal_filter_apply_c(unsigned char *frame1, unsigned int stride, unsigned char *frame2, unsigned int block_size, int strength, int filter_weight, unsigned int *accumulator, unsigned short *count);
+#define vp8_temporal_filter_apply vp8_temporal_filter_apply_c
+
+void vp8_rtcd(void);
+
+#include "vpx_config.h"
+
+#ifdef RTCD_C
+#include "vpx_ports/arm.h"
+static void setup_rtcd_internal(void)
+{
+ int flags = arm_cpu_caps();
+
+ (void)flags;
+
+}
+#endif
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
+
+#endif
diff --git a/media/libvpx/config/mac/arm64/vp9_rtcd.h b/media/libvpx/config/mac/arm64/vp9_rtcd.h
new file mode 100644
index 0000000000..b8fc782dfd
--- /dev/null
+++ b/media/libvpx/config/mac/arm64/vp9_rtcd.h
@@ -0,0 +1,116 @@
+// This file is generated. Do not edit.
+#ifndef VP9_RTCD_H_
+#define VP9_RTCD_H_
+
+#ifdef RTCD_C
+#define RTCD_EXTERN
+#else
+#define RTCD_EXTERN extern
+#endif
+
+/*
+ * VP9
+ */
+
+#include "vpx/vpx_integer.h"
+#include "vp9/common/vp9_common.h"
+#include "vp9/common/vp9_enums.h"
+#include "vp9/common/vp9_filter.h"
+
+struct macroblockd;
+
+/* Encoder forward decls */
+struct macroblock;
+struct macroblock_plane;
+struct vp9_sad_table;
+struct ScanOrder;
+struct search_site_config;
+struct mv;
+union int_mv;
+struct yv12_buffer_config;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void vp9_apply_temporal_filter_c(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);
+void vp9_apply_temporal_filter_neon(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);
+#define vp9_apply_temporal_filter vp9_apply_temporal_filter_neon
+
+int64_t vp9_block_error_c(const tran_low_t *coeff, const tran_low_t *dqcoeff, intptr_t block_size, int64_t *ssz);
+int64_t vp9_block_error_neon(const tran_low_t *coeff, const tran_low_t *dqcoeff, intptr_t block_size, int64_t *ssz);
+int64_t vp9_block_error_sve(const tran_low_t *coeff, const tran_low_t *dqcoeff, intptr_t block_size, int64_t *ssz);
+RTCD_EXTERN int64_t (*vp9_block_error)(const tran_low_t *coeff, const tran_low_t *dqcoeff, intptr_t block_size, int64_t *ssz);
+
+int64_t vp9_block_error_fp_c(const tran_low_t *coeff, const tran_low_t *dqcoeff, int block_size);
+int64_t vp9_block_error_fp_neon(const tran_low_t *coeff, const tran_low_t *dqcoeff, int block_size);
+int64_t vp9_block_error_fp_sve(const tran_low_t *coeff, const tran_low_t *dqcoeff, int block_size);
+RTCD_EXTERN int64_t (*vp9_block_error_fp)(const tran_low_t *coeff, const tran_low_t *dqcoeff, int block_size);
+
+int vp9_diamond_search_sad_c(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);
+int vp9_diamond_search_sad_neon(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);
+#define vp9_diamond_search_sad vp9_diamond_search_sad_neon
+
+void vp9_fht16x16_c(const int16_t *input, tran_low_t *output, int stride, int tx_type);
+void vp9_fht16x16_neon(const int16_t *input, tran_low_t *output, int stride, int tx_type);
+#define vp9_fht16x16 vp9_fht16x16_neon
+
+void vp9_fht4x4_c(const int16_t *input, tran_low_t *output, int stride, int tx_type);
+void vp9_fht4x4_neon(const int16_t *input, tran_low_t *output, int stride, int tx_type);
+#define vp9_fht4x4 vp9_fht4x4_neon
+
+void vp9_fht8x8_c(const int16_t *input, tran_low_t *output, int stride, int tx_type);
+void vp9_fht8x8_neon(const int16_t *input, tran_low_t *output, int stride, int tx_type);
+#define vp9_fht8x8 vp9_fht8x8_neon
+
+void vp9_fwht4x4_c(const int16_t *input, tran_low_t *output, int stride);
+#define vp9_fwht4x4 vp9_fwht4x4_c
+
+void vp9_iht16x16_256_add_c(const tran_low_t *input, uint8_t *dest, int stride, int tx_type);
+void vp9_iht16x16_256_add_neon(const tran_low_t *input, uint8_t *dest, int stride, int tx_type);
+#define vp9_iht16x16_256_add vp9_iht16x16_256_add_neon
+
+void vp9_iht4x4_16_add_c(const tran_low_t *input, uint8_t *dest, int stride, int tx_type);
+void vp9_iht4x4_16_add_neon(const tran_low_t *input, uint8_t *dest, int stride, int tx_type);
+#define vp9_iht4x4_16_add vp9_iht4x4_16_add_neon
+
+void vp9_iht8x8_64_add_c(const tran_low_t *input, uint8_t *dest, int stride, int tx_type);
+void vp9_iht8x8_64_add_neon(const tran_low_t *input, uint8_t *dest, int stride, int tx_type);
+#define vp9_iht8x8_64_add vp9_iht8x8_64_add_neon
+
+void vp9_quantize_fp_c(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);
+void vp9_quantize_fp_neon(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);
+#define vp9_quantize_fp vp9_quantize_fp_neon
+
+void vp9_quantize_fp_32x32_c(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);
+void vp9_quantize_fp_32x32_neon(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);
+#define vp9_quantize_fp_32x32 vp9_quantize_fp_32x32_neon
+
+void vp9_scale_and_extend_frame_c(const struct yv12_buffer_config *src, struct yv12_buffer_config *dst, INTERP_FILTER filter_type, int phase_scaler);
+void vp9_scale_and_extend_frame_neon(const struct yv12_buffer_config *src, struct yv12_buffer_config *dst, INTERP_FILTER filter_type, int phase_scaler);
+#define vp9_scale_and_extend_frame vp9_scale_and_extend_frame_neon
+
+void vp9_rtcd(void);
+
+#include "vpx_config.h"
+
+#ifdef RTCD_C
+#include "vpx_ports/arm.h"
+static void setup_rtcd_internal(void)
+{
+ int flags = arm_cpu_caps();
+
+ (void)flags;
+
+ vp9_block_error = vp9_block_error_neon;
+ if (flags & HAS_SVE) vp9_block_error = vp9_block_error_sve;
+ vp9_block_error_fp = vp9_block_error_fp_neon;
+ if (flags & HAS_SVE) vp9_block_error_fp = vp9_block_error_fp_sve;
+}
+#endif
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
+
+#endif
diff --git a/media/libvpx/config/mac/arm64/vpx_config.asm b/media/libvpx/config/mac/arm64/vpx_config.asm
new file mode 100644
index 0000000000..82a96985ec
--- /dev/null
+++ b/media/libvpx/config/mac/arm64/vpx_config.asm
@@ -0,0 +1,98 @@
+@ This file was created from a .asm file
+@ using the ads2gas.pl script.
+.syntax unified
+.equ VPX_ARCH_ARM , 1
+.equ VPX_ARCH_AARCH64 , 1
+.equ VPX_ARCH_MIPS , 0
+.equ VPX_ARCH_X86 , 0
+.equ VPX_ARCH_X86_64 , 0
+.equ VPX_ARCH_PPC , 0
+.equ VPX_ARCH_LOONGARCH , 0
+.equ HAVE_NEON_ASM , 0
+.equ HAVE_NEON , 1
+.equ HAVE_NEON_DOTPROD , 1
+.equ HAVE_NEON_I8MM , 1
+.equ HAVE_SVE , 1
+.equ HAVE_SVE2 , 1
+.equ HAVE_MIPS32 , 0
+.equ HAVE_DSPR2 , 0
+.equ HAVE_MSA , 0
+.equ HAVE_MIPS64 , 0
+.equ HAVE_MMX , 0
+.equ HAVE_SSE , 0
+.equ HAVE_SSE2 , 0
+.equ HAVE_SSE3 , 0
+.equ HAVE_SSSE3 , 0
+.equ HAVE_SSE4_1 , 0
+.equ HAVE_AVX , 0
+.equ HAVE_AVX2 , 0
+.equ HAVE_AVX512 , 0
+.equ HAVE_VSX , 0
+.equ HAVE_MMI , 0
+.equ HAVE_LSX , 0
+.equ HAVE_LASX , 0
+.equ HAVE_VPX_PORTS , 1
+.equ HAVE_PTHREAD_H , 1
+.equ CONFIG_DEPENDENCY_TRACKING , 1
+.equ CONFIG_EXTERNAL_BUILD , 1
+.equ CONFIG_INSTALL_DOCS , 0
+.equ CONFIG_INSTALL_BINS , 1
+.equ CONFIG_INSTALL_LIBS , 1
+.equ CONFIG_INSTALL_SRCS , 0
+.equ CONFIG_DEBUG , 0
+.equ CONFIG_GPROF , 0
+.equ CONFIG_GCOV , 0
+.equ CONFIG_RVCT , 0
+.equ CONFIG_GCC , 1
+.equ CONFIG_MSVS , 0
+.equ CONFIG_PIC , 1
+.equ CONFIG_BIG_ENDIAN , 0
+.equ CONFIG_CODEC_SRCS , 0
+.equ CONFIG_DEBUG_LIBS , 0
+.equ CONFIG_DEQUANT_TOKENS , 0
+.equ CONFIG_DC_RECON , 0
+.equ CONFIG_RUNTIME_CPU_DETECT , 1
+.equ CONFIG_POSTPROC , 0
+.equ CONFIG_VP9_POSTPROC , 0
+.equ CONFIG_MULTITHREAD , 1
+.equ CONFIG_INTERNAL_STATS , 0
+.equ CONFIG_VP8_ENCODER , 1
+.equ CONFIG_VP8_DECODER , 1
+.equ CONFIG_VP9_ENCODER , 1
+.equ CONFIG_VP9_DECODER , 1
+.equ CONFIG_VP8 , 1
+.equ CONFIG_VP9 , 1
+.equ CONFIG_ENCODERS , 1
+.equ CONFIG_DECODERS , 1
+.equ CONFIG_STATIC_MSVCRT , 0
+.equ CONFIG_SPATIAL_RESAMPLING , 1
+.equ CONFIG_REALTIME_ONLY , 0
+.equ CONFIG_ONTHEFLY_BITPACKING , 0
+.equ CONFIG_ERROR_CONCEALMENT , 0
+.equ CONFIG_SHARED , 0
+.equ CONFIG_STATIC , 1
+.equ CONFIG_SMALL , 0
+.equ CONFIG_POSTPROC_VISUALIZER , 0
+.equ CONFIG_OS_SUPPORT , 1
+.equ CONFIG_UNIT_TESTS , 0
+.equ CONFIG_WEBM_IO , 0
+.equ CONFIG_LIBYUV , 0
+.equ CONFIG_DECODE_PERF_TESTS , 0
+.equ CONFIG_ENCODE_PERF_TESTS , 0
+.equ CONFIG_MULTI_RES_ENCODING , 1
+.equ CONFIG_TEMPORAL_DENOISING , 1
+.equ CONFIG_VP9_TEMPORAL_DENOISING , 0
+.equ CONFIG_COEFFICIENT_RANGE_CHECKING , 0
+.equ CONFIG_VP9_HIGHBITDEPTH , 0
+.equ CONFIG_BETTER_HW_COMPATIBILITY , 0
+.equ CONFIG_EXPERIMENTAL , 0
+.equ CONFIG_SIZE_LIMIT , 1
+.equ CONFIG_ALWAYS_ADJUST_BPM , 0
+.equ CONFIG_BITSTREAM_DEBUG , 0
+.equ CONFIG_MISMATCH_DEBUG , 0
+.equ CONFIG_FP_MB_STATS , 0
+.equ CONFIG_EMULATE_HARDWARE , 0
+.equ CONFIG_NON_GREEDY_MV , 0
+.equ CONFIG_RATE_CTRL , 0
+.equ CONFIG_COLLECT_COMPONENT_TIMING , 0
+ .section .note.GNU-stack,"",%progbits
diff --git a/media/libvpx/config/mac/arm64/vpx_config.c b/media/libvpx/config/mac/arm64/vpx_config.c
new file mode 100644
index 0000000000..3cf744dc16
--- /dev/null
+++ b/media/libvpx/config/mac/arm64/vpx_config.c
@@ -0,0 +1,10 @@
+/* Copyright (c) 2011 The WebM project authors. All Rights Reserved. */
+/* */
+/* Use of this source code is governed by a BSD-style license */
+/* that can be found in the LICENSE file in the root of the source */
+/* tree. An additional intellectual property rights grant can be found */
+/* in the file PATENTS. All contributing project authors may */
+/* be found in the AUTHORS file in the root of the source tree. */
+#include "vpx/vpx_codec.h"
+static const char* const cfg = "--target=arm64-darwin-gcc --enable-external-build --disable-examples --disable-install-docs --disable-unit-tests --enable-multi-res-encoding --size-limit=8192x4608 --enable-pic --disable-avx512 --log=/home/cm/Work/gecko-dev/media/libvpx/config/mac/arm64/config.log";
+const char *vpx_codec_build_config(void) {return cfg;}
diff --git a/media/libvpx/config/mac/arm64/vpx_config.h b/media/libvpx/config/mac/arm64/vpx_config.h
new file mode 100644
index 0000000000..098ae3eff4
--- /dev/null
+++ b/media/libvpx/config/mac/arm64/vpx_config.h
@@ -0,0 +1,109 @@
+/* Copyright (c) 2011 The WebM project authors. All Rights Reserved. */
+/* */
+/* Use of this source code is governed by a BSD-style license */
+/* that can be found in the LICENSE file in the root of the source */
+/* tree. An additional intellectual property rights grant can be found */
+/* in the file PATENTS. All contributing project authors may */
+/* be found in the AUTHORS file in the root of the source tree. */
+/* This file automatically generated by configure. Do not edit! */
+#ifndef VPX_CONFIG_H
+#define VPX_CONFIG_H
+#define RESTRICT
+#define INLINE inline
+#define VPX_ARCH_ARM 1
+#define VPX_ARCH_AARCH64 1
+#define VPX_ARCH_MIPS 0
+#define VPX_ARCH_X86 0
+#define VPX_ARCH_X86_64 0
+#define VPX_ARCH_PPC 0
+#define VPX_ARCH_LOONGARCH 0
+#define HAVE_NEON_ASM 0
+#define HAVE_NEON 1
+#define HAVE_NEON_DOTPROD 1
+#define HAVE_NEON_I8MM 1
+#define HAVE_SVE 1
+#define HAVE_SVE2 1
+#define HAVE_MIPS32 0
+#define HAVE_DSPR2 0
+#define HAVE_MSA 0
+#define HAVE_MIPS64 0
+#define HAVE_MMX 0
+#define HAVE_SSE 0
+#define HAVE_SSE2 0
+#define HAVE_SSE3 0
+#define HAVE_SSSE3 0
+#define HAVE_SSE4_1 0
+#define HAVE_AVX 0
+#define HAVE_AVX2 0
+#define HAVE_AVX512 0
+#define HAVE_VSX 0
+#define HAVE_MMI 0
+#define HAVE_LSX 0
+#define HAVE_LASX 0
+#define HAVE_VPX_PORTS 1
+#define HAVE_PTHREAD_H 1
+#define CONFIG_DEPENDENCY_TRACKING 1
+#define CONFIG_EXTERNAL_BUILD 1
+#define CONFIG_INSTALL_DOCS 0
+#define CONFIG_INSTALL_BINS 1
+#define CONFIG_INSTALL_LIBS 1
+#define CONFIG_INSTALL_SRCS 0
+#define CONFIG_DEBUG 0
+#define CONFIG_GPROF 0
+#define CONFIG_GCOV 0
+#define CONFIG_RVCT 0
+#define CONFIG_GCC 1
+#define CONFIG_MSVS 0
+#define CONFIG_PIC 1
+#define CONFIG_BIG_ENDIAN 0
+#define CONFIG_CODEC_SRCS 0
+#define CONFIG_DEBUG_LIBS 0
+#define CONFIG_DEQUANT_TOKENS 0
+#define CONFIG_DC_RECON 0
+#define CONFIG_RUNTIME_CPU_DETECT 1
+#define CONFIG_POSTPROC 0
+#define CONFIG_VP9_POSTPROC 0
+#define CONFIG_MULTITHREAD 1
+#define CONFIG_INTERNAL_STATS 0
+#define CONFIG_VP8_ENCODER 1
+#define CONFIG_VP8_DECODER 1
+#define CONFIG_VP9_ENCODER 1
+#define CONFIG_VP9_DECODER 1
+#define CONFIG_VP8 1
+#define CONFIG_VP9 1
+#define CONFIG_ENCODERS 1
+#define CONFIG_DECODERS 1
+#define CONFIG_STATIC_MSVCRT 0
+#define CONFIG_SPATIAL_RESAMPLING 1
+#define CONFIG_REALTIME_ONLY 0
+#define CONFIG_ONTHEFLY_BITPACKING 0
+#define CONFIG_ERROR_CONCEALMENT 0
+#define CONFIG_SHARED 0
+#define CONFIG_STATIC 1
+#define CONFIG_SMALL 0
+#define CONFIG_POSTPROC_VISUALIZER 0
+#define CONFIG_OS_SUPPORT 1
+#define CONFIG_UNIT_TESTS 0
+#define CONFIG_WEBM_IO 0
+#define CONFIG_LIBYUV 0
+#define CONFIG_DECODE_PERF_TESTS 0
+#define CONFIG_ENCODE_PERF_TESTS 0
+#define CONFIG_MULTI_RES_ENCODING 1
+#define CONFIG_TEMPORAL_DENOISING 1
+#define CONFIG_VP9_TEMPORAL_DENOISING 0
+#define CONFIG_COEFFICIENT_RANGE_CHECKING 0
+#define CONFIG_VP9_HIGHBITDEPTH 0
+#define CONFIG_BETTER_HW_COMPATIBILITY 0
+#define CONFIG_EXPERIMENTAL 0
+#define CONFIG_SIZE_LIMIT 1
+#define CONFIG_ALWAYS_ADJUST_BPM 0
+#define CONFIG_BITSTREAM_DEBUG 0
+#define CONFIG_MISMATCH_DEBUG 0
+#define CONFIG_FP_MB_STATS 0
+#define CONFIG_EMULATE_HARDWARE 0
+#define CONFIG_NON_GREEDY_MV 0
+#define CONFIG_RATE_CTRL 0
+#define CONFIG_COLLECT_COMPONENT_TIMING 0
+#define DECODE_WIDTH_LIMIT 8192
+#define DECODE_HEIGHT_LIMIT 4608
+#endif /* VPX_CONFIG_H */
diff --git a/media/libvpx/config/mac/arm64/vpx_dsp_rtcd.h b/media/libvpx/config/mac/arm64/vpx_dsp_rtcd.h
new file mode 100644
index 0000000000..2c31ee4ef9
--- /dev/null
+++ b/media/libvpx/config/mac/arm64/vpx_dsp_rtcd.h
@@ -0,0 +1,1187 @@
+// This file is generated. Do not edit.
+#ifndef VPX_DSP_RTCD_H_
+#define VPX_DSP_RTCD_H_
+
+#ifdef RTCD_C
+#define RTCD_EXTERN
+#else
+#define RTCD_EXTERN extern
+#endif
+
+/*
+ * DSP
+ */
+
+#include "vpx/vpx_integer.h"
+#include "vpx_dsp/vpx_dsp_common.h"
+#include "vpx_dsp/vpx_filter.h"
+#if CONFIG_VP9_ENCODER
+ struct macroblock_plane;
+ struct ScanOrder;
+#endif
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+unsigned int vpx_avg_4x4_c(const uint8_t *, int p);
+unsigned int vpx_avg_4x4_neon(const uint8_t *, int p);
+#define vpx_avg_4x4 vpx_avg_4x4_neon
+
+unsigned int vpx_avg_8x8_c(const uint8_t *, int p);
+unsigned int vpx_avg_8x8_neon(const uint8_t *, int p);
+#define vpx_avg_8x8 vpx_avg_8x8_neon
+
+void vpx_comp_avg_pred_c(uint8_t *comp_pred, const uint8_t *pred, int width, int height, const uint8_t *ref, int ref_stride);
+void vpx_comp_avg_pred_neon(uint8_t *comp_pred, const uint8_t *pred, int width, int height, const uint8_t *ref, int ref_stride);
+#define vpx_comp_avg_pred vpx_comp_avg_pred_neon
+
+void vpx_convolve8_c(const uint8_t *src, ptrdiff_t src_stride, uint8_t *dst, ptrdiff_t dst_stride, const InterpKernel *filter, int x0_q4, int x_step_q4, int y0_q4, int y_step_q4, int w, int h);
+void vpx_convolve8_neon(const uint8_t *src, ptrdiff_t src_stride, uint8_t *dst, ptrdiff_t dst_stride, const InterpKernel *filter, int x0_q4, int x_step_q4, int y0_q4, int y_step_q4, int w, int h);
+void vpx_convolve8_neon_dotprod(const uint8_t *src, ptrdiff_t src_stride, uint8_t *dst, ptrdiff_t dst_stride, const InterpKernel *filter, int x0_q4, int x_step_q4, int y0_q4, int y_step_q4, int w, int h);
+void vpx_convolve8_neon_i8mm(const uint8_t *src, ptrdiff_t src_stride, uint8_t *dst, ptrdiff_t dst_stride, const InterpKernel *filter, int x0_q4, int x_step_q4, int y0_q4, int y_step_q4, int w, int h);
+RTCD_EXTERN void (*vpx_convolve8)(const uint8_t *src, ptrdiff_t src_stride, uint8_t *dst, ptrdiff_t dst_stride, const InterpKernel *filter, int x0_q4, int x_step_q4, int y0_q4, int y_step_q4, int w, int h);
+
+void vpx_convolve8_avg_c(const uint8_t *src, ptrdiff_t src_stride, uint8_t *dst, ptrdiff_t dst_stride, const InterpKernel *filter, int x0_q4, int x_step_q4, int y0_q4, int y_step_q4, int w, int h);
+void vpx_convolve8_avg_neon(const uint8_t *src, ptrdiff_t src_stride, uint8_t *dst, ptrdiff_t dst_stride, const InterpKernel *filter, int x0_q4, int x_step_q4, int y0_q4, int y_step_q4, int w, int h);
+void vpx_convolve8_avg_neon_dotprod(const uint8_t *src, ptrdiff_t src_stride, uint8_t *dst, ptrdiff_t dst_stride, const InterpKernel *filter, int x0_q4, int x_step_q4, int y0_q4, int y_step_q4, int w, int h);
+void vpx_convolve8_avg_neon_i8mm(const uint8_t *src, ptrdiff_t src_stride, uint8_t *dst, ptrdiff_t dst_stride, const InterpKernel *filter, int x0_q4, int x_step_q4, int y0_q4, int y_step_q4, int w, int h);
+RTCD_EXTERN void (*vpx_convolve8_avg)(const uint8_t *src, ptrdiff_t src_stride, uint8_t *dst, ptrdiff_t dst_stride, const InterpKernel *filter, int x0_q4, int x_step_q4, int y0_q4, int y_step_q4, int w, int h);
+
+void vpx_convolve8_avg_horiz_c(const uint8_t *src, ptrdiff_t src_stride, uint8_t *dst, ptrdiff_t dst_stride, const InterpKernel *filter, int x0_q4, int x_step_q4, int y0_q4, int y_step_q4, int w, int h);
+void vpx_convolve8_avg_horiz_neon(const uint8_t *src, ptrdiff_t src_stride, uint8_t *dst, ptrdiff_t dst_stride, const InterpKernel *filter, int x0_q4, int x_step_q4, int y0_q4, int y_step_q4, int w, int h);
+void vpx_convolve8_avg_horiz_neon_dotprod(const uint8_t *src, ptrdiff_t src_stride, uint8_t *dst, ptrdiff_t dst_stride, const InterpKernel *filter, int x0_q4, int x_step_q4, int y0_q4, int y_step_q4, int w, int h);
+void vpx_convolve8_avg_horiz_neon_i8mm(const uint8_t *src, ptrdiff_t src_stride, uint8_t *dst, ptrdiff_t dst_stride, const InterpKernel *filter, int x0_q4, int x_step_q4, int y0_q4, int y_step_q4, int w, int h);
+RTCD_EXTERN void (*vpx_convolve8_avg_horiz)(const uint8_t *src, ptrdiff_t src_stride, uint8_t *dst, ptrdiff_t dst_stride, const InterpKernel *filter, int x0_q4, int x_step_q4, int y0_q4, int y_step_q4, int w, int h);
+
+void vpx_convolve8_avg_vert_c(const uint8_t *src, ptrdiff_t src_stride, uint8_t *dst, ptrdiff_t dst_stride, const InterpKernel *filter, int x0_q4, int x_step_q4, int y0_q4, int y_step_q4, int w, int h);
+void vpx_convolve8_avg_vert_neon(const uint8_t *src, ptrdiff_t src_stride, uint8_t *dst, ptrdiff_t dst_stride, const InterpKernel *filter, int x0_q4, int x_step_q4, int y0_q4, int y_step_q4, int w, int h);
+void vpx_convolve8_avg_vert_neon_dotprod(const uint8_t *src, ptrdiff_t src_stride, uint8_t *dst, ptrdiff_t dst_stride, const InterpKernel *filter, int x0_q4, int x_step_q4, int y0_q4, int y_step_q4, int w, int h);
+void vpx_convolve8_avg_vert_neon_i8mm(const uint8_t *src, ptrdiff_t src_stride, uint8_t *dst, ptrdiff_t dst_stride, const InterpKernel *filter, int x0_q4, int x_step_q4, int y0_q4, int y_step_q4, int w, int h);
+RTCD_EXTERN void (*vpx_convolve8_avg_vert)(const uint8_t *src, ptrdiff_t src_stride, uint8_t *dst, ptrdiff_t dst_stride, const InterpKernel *filter, int x0_q4, int x_step_q4, int y0_q4, int y_step_q4, int w, int h);
+
+void vpx_convolve8_horiz_c(const uint8_t *src, ptrdiff_t src_stride, uint8_t *dst, ptrdiff_t dst_stride, const InterpKernel *filter, int x0_q4, int x_step_q4, int y0_q4, int y_step_q4, int w, int h);
+void vpx_convolve8_horiz_neon(const uint8_t *src, ptrdiff_t src_stride, uint8_t *dst, ptrdiff_t dst_stride, const InterpKernel *filter, int x0_q4, int x_step_q4, int y0_q4, int y_step_q4, int w, int h);
+void vpx_convolve8_horiz_neon_dotprod(const uint8_t *src, ptrdiff_t src_stride, uint8_t *dst, ptrdiff_t dst_stride, const InterpKernel *filter, int x0_q4, int x_step_q4, int y0_q4, int y_step_q4, int w, int h);
+void vpx_convolve8_horiz_neon_i8mm(const uint8_t *src, ptrdiff_t src_stride, uint8_t *dst, ptrdiff_t dst_stride, const InterpKernel *filter, int x0_q4, int x_step_q4, int y0_q4, int y_step_q4, int w, int h);
+RTCD_EXTERN void (*vpx_convolve8_horiz)(const uint8_t *src, ptrdiff_t src_stride, uint8_t *dst, ptrdiff_t dst_stride, const InterpKernel *filter, int x0_q4, int x_step_q4, int y0_q4, int y_step_q4, int w, int h);
+
+void vpx_convolve8_vert_c(const uint8_t *src, ptrdiff_t src_stride, uint8_t *dst, ptrdiff_t dst_stride, const InterpKernel *filter, int x0_q4, int x_step_q4, int y0_q4, int y_step_q4, int w, int h);
+void vpx_convolve8_vert_neon(const uint8_t *src, ptrdiff_t src_stride, uint8_t *dst, ptrdiff_t dst_stride, const InterpKernel *filter, int x0_q4, int x_step_q4, int y0_q4, int y_step_q4, int w, int h);
+void vpx_convolve8_vert_neon_dotprod(const uint8_t *src, ptrdiff_t src_stride, uint8_t *dst, ptrdiff_t dst_stride, const InterpKernel *filter, int x0_q4, int x_step_q4, int y0_q4, int y_step_q4, int w, int h);
+void vpx_convolve8_vert_neon_i8mm(const uint8_t *src, ptrdiff_t src_stride, uint8_t *dst, ptrdiff_t dst_stride, const InterpKernel *filter, int x0_q4, int x_step_q4, int y0_q4, int y_step_q4, int w, int h);
+RTCD_EXTERN void (*vpx_convolve8_vert)(const uint8_t *src, ptrdiff_t src_stride, uint8_t *dst, ptrdiff_t dst_stride, const InterpKernel *filter, int x0_q4, int x_step_q4, int y0_q4, int y_step_q4, int w, int h);
+
+void vpx_convolve_avg_c(const uint8_t *src, ptrdiff_t src_stride, uint8_t *dst, ptrdiff_t dst_stride, const InterpKernel *filter, int x0_q4, int x_step_q4, int y0_q4, int y_step_q4, int w, int h);
+void vpx_convolve_avg_neon(const uint8_t *src, ptrdiff_t src_stride, uint8_t *dst, ptrdiff_t dst_stride, const InterpKernel *filter, int x0_q4, int x_step_q4, int y0_q4, int y_step_q4, int w, int h);
+#define vpx_convolve_avg vpx_convolve_avg_neon
+
+void vpx_convolve_copy_c(const uint8_t *src, ptrdiff_t src_stride, uint8_t *dst, ptrdiff_t dst_stride, const InterpKernel *filter, int x0_q4, int x_step_q4, int y0_q4, int y_step_q4, int w, int h);
+void vpx_convolve_copy_neon(const uint8_t *src, ptrdiff_t src_stride, uint8_t *dst, ptrdiff_t dst_stride, const InterpKernel *filter, int x0_q4, int x_step_q4, int y0_q4, int y_step_q4, int w, int h);
+#define vpx_convolve_copy vpx_convolve_copy_neon
+
+void vpx_d117_predictor_16x16_c(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+void vpx_d117_predictor_16x16_neon(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+#define vpx_d117_predictor_16x16 vpx_d117_predictor_16x16_neon
+
+void vpx_d117_predictor_32x32_c(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+void vpx_d117_predictor_32x32_neon(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+#define vpx_d117_predictor_32x32 vpx_d117_predictor_32x32_neon
+
+void vpx_d117_predictor_4x4_c(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+void vpx_d117_predictor_4x4_neon(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+#define vpx_d117_predictor_4x4 vpx_d117_predictor_4x4_neon
+
+void vpx_d117_predictor_8x8_c(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+void vpx_d117_predictor_8x8_neon(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+#define vpx_d117_predictor_8x8 vpx_d117_predictor_8x8_neon
+
+void vpx_d135_predictor_16x16_c(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+void vpx_d135_predictor_16x16_neon(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+#define vpx_d135_predictor_16x16 vpx_d135_predictor_16x16_neon
+
+void vpx_d135_predictor_32x32_c(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+void vpx_d135_predictor_32x32_neon(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+#define vpx_d135_predictor_32x32 vpx_d135_predictor_32x32_neon
+
+void vpx_d135_predictor_4x4_c(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+void vpx_d135_predictor_4x4_neon(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+#define vpx_d135_predictor_4x4 vpx_d135_predictor_4x4_neon
+
+void vpx_d135_predictor_8x8_c(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+void vpx_d135_predictor_8x8_neon(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+#define vpx_d135_predictor_8x8 vpx_d135_predictor_8x8_neon
+
+void vpx_d153_predictor_16x16_c(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+void vpx_d153_predictor_16x16_neon(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+#define vpx_d153_predictor_16x16 vpx_d153_predictor_16x16_neon
+
+void vpx_d153_predictor_32x32_c(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+void vpx_d153_predictor_32x32_neon(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+#define vpx_d153_predictor_32x32 vpx_d153_predictor_32x32_neon
+
+void vpx_d153_predictor_4x4_c(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+void vpx_d153_predictor_4x4_neon(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+#define vpx_d153_predictor_4x4 vpx_d153_predictor_4x4_neon
+
+void vpx_d153_predictor_8x8_c(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+void vpx_d153_predictor_8x8_neon(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+#define vpx_d153_predictor_8x8 vpx_d153_predictor_8x8_neon
+
+void vpx_d207_predictor_16x16_c(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+void vpx_d207_predictor_16x16_neon(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+#define vpx_d207_predictor_16x16 vpx_d207_predictor_16x16_neon
+
+void vpx_d207_predictor_32x32_c(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+void vpx_d207_predictor_32x32_neon(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+#define vpx_d207_predictor_32x32 vpx_d207_predictor_32x32_neon
+
+void vpx_d207_predictor_4x4_c(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+void vpx_d207_predictor_4x4_neon(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+#define vpx_d207_predictor_4x4 vpx_d207_predictor_4x4_neon
+
+void vpx_d207_predictor_8x8_c(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+void vpx_d207_predictor_8x8_neon(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+#define vpx_d207_predictor_8x8 vpx_d207_predictor_8x8_neon
+
+void vpx_d45_predictor_16x16_c(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+void vpx_d45_predictor_16x16_neon(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+#define vpx_d45_predictor_16x16 vpx_d45_predictor_16x16_neon
+
+void vpx_d45_predictor_32x32_c(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+void vpx_d45_predictor_32x32_neon(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+#define vpx_d45_predictor_32x32 vpx_d45_predictor_32x32_neon
+
+void vpx_d45_predictor_4x4_c(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+void vpx_d45_predictor_4x4_neon(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+#define vpx_d45_predictor_4x4 vpx_d45_predictor_4x4_neon
+
+void vpx_d45_predictor_8x8_c(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+void vpx_d45_predictor_8x8_neon(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+#define vpx_d45_predictor_8x8 vpx_d45_predictor_8x8_neon
+
+void vpx_d45e_predictor_4x4_c(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+#define vpx_d45e_predictor_4x4 vpx_d45e_predictor_4x4_c
+
+void vpx_d63_predictor_16x16_c(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+void vpx_d63_predictor_16x16_neon(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+#define vpx_d63_predictor_16x16 vpx_d63_predictor_16x16_neon
+
+void vpx_d63_predictor_32x32_c(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+void vpx_d63_predictor_32x32_neon(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+#define vpx_d63_predictor_32x32 vpx_d63_predictor_32x32_neon
+
+void vpx_d63_predictor_4x4_c(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+void vpx_d63_predictor_4x4_neon(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+#define vpx_d63_predictor_4x4 vpx_d63_predictor_4x4_neon
+
+void vpx_d63_predictor_8x8_c(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+void vpx_d63_predictor_8x8_neon(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+#define vpx_d63_predictor_8x8 vpx_d63_predictor_8x8_neon
+
+void vpx_d63e_predictor_4x4_c(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+#define vpx_d63e_predictor_4x4 vpx_d63e_predictor_4x4_c
+
+void vpx_dc_128_predictor_16x16_c(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+void vpx_dc_128_predictor_16x16_neon(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+#define vpx_dc_128_predictor_16x16 vpx_dc_128_predictor_16x16_neon
+
+void vpx_dc_128_predictor_32x32_c(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+void vpx_dc_128_predictor_32x32_neon(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+#define vpx_dc_128_predictor_32x32 vpx_dc_128_predictor_32x32_neon
+
+void vpx_dc_128_predictor_4x4_c(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+void vpx_dc_128_predictor_4x4_neon(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+#define vpx_dc_128_predictor_4x4 vpx_dc_128_predictor_4x4_neon
+
+void vpx_dc_128_predictor_8x8_c(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+void vpx_dc_128_predictor_8x8_neon(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+#define vpx_dc_128_predictor_8x8 vpx_dc_128_predictor_8x8_neon
+
+void vpx_dc_left_predictor_16x16_c(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+void vpx_dc_left_predictor_16x16_neon(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+#define vpx_dc_left_predictor_16x16 vpx_dc_left_predictor_16x16_neon
+
+void vpx_dc_left_predictor_32x32_c(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+void vpx_dc_left_predictor_32x32_neon(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+#define vpx_dc_left_predictor_32x32 vpx_dc_left_predictor_32x32_neon
+
+void vpx_dc_left_predictor_4x4_c(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+void vpx_dc_left_predictor_4x4_neon(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+#define vpx_dc_left_predictor_4x4 vpx_dc_left_predictor_4x4_neon
+
+void vpx_dc_left_predictor_8x8_c(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+void vpx_dc_left_predictor_8x8_neon(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+#define vpx_dc_left_predictor_8x8 vpx_dc_left_predictor_8x8_neon
+
+void vpx_dc_predictor_16x16_c(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+void vpx_dc_predictor_16x16_neon(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+#define vpx_dc_predictor_16x16 vpx_dc_predictor_16x16_neon
+
+void vpx_dc_predictor_32x32_c(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+void vpx_dc_predictor_32x32_neon(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+#define vpx_dc_predictor_32x32 vpx_dc_predictor_32x32_neon
+
+void vpx_dc_predictor_4x4_c(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+void vpx_dc_predictor_4x4_neon(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+#define vpx_dc_predictor_4x4 vpx_dc_predictor_4x4_neon
+
+void vpx_dc_predictor_8x8_c(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+void vpx_dc_predictor_8x8_neon(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+#define vpx_dc_predictor_8x8 vpx_dc_predictor_8x8_neon
+
+void vpx_dc_top_predictor_16x16_c(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+void vpx_dc_top_predictor_16x16_neon(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+#define vpx_dc_top_predictor_16x16 vpx_dc_top_predictor_16x16_neon
+
+void vpx_dc_top_predictor_32x32_c(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+void vpx_dc_top_predictor_32x32_neon(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+#define vpx_dc_top_predictor_32x32 vpx_dc_top_predictor_32x32_neon
+
+void vpx_dc_top_predictor_4x4_c(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+void vpx_dc_top_predictor_4x4_neon(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+#define vpx_dc_top_predictor_4x4 vpx_dc_top_predictor_4x4_neon
+
+void vpx_dc_top_predictor_8x8_c(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+void vpx_dc_top_predictor_8x8_neon(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+#define vpx_dc_top_predictor_8x8 vpx_dc_top_predictor_8x8_neon
+
+void vpx_fdct16x16_c(const int16_t *input, tran_low_t *output, int stride);
+void vpx_fdct16x16_neon(const int16_t *input, tran_low_t *output, int stride);
+#define vpx_fdct16x16 vpx_fdct16x16_neon
+
+void vpx_fdct16x16_1_c(const int16_t *input, tran_low_t *output, int stride);
+void vpx_fdct16x16_1_neon(const int16_t *input, tran_low_t *output, int stride);
+#define vpx_fdct16x16_1 vpx_fdct16x16_1_neon
+
+void vpx_fdct32x32_c(const int16_t *input, tran_low_t *output, int stride);
+void vpx_fdct32x32_neon(const int16_t *input, tran_low_t *output, int stride);
+#define vpx_fdct32x32 vpx_fdct32x32_neon
+
+void vpx_fdct32x32_1_c(const int16_t *input, tran_low_t *output, int stride);
+void vpx_fdct32x32_1_neon(const int16_t *input, tran_low_t *output, int stride);
+#define vpx_fdct32x32_1 vpx_fdct32x32_1_neon
+
+void vpx_fdct32x32_rd_c(const int16_t *input, tran_low_t *output, int stride);
+void vpx_fdct32x32_rd_neon(const int16_t *input, tran_low_t *output, int stride);
+#define vpx_fdct32x32_rd vpx_fdct32x32_rd_neon
+
+void vpx_fdct4x4_c(const int16_t *input, tran_low_t *output, int stride);
+void vpx_fdct4x4_neon(const int16_t *input, tran_low_t *output, int stride);
+#define vpx_fdct4x4 vpx_fdct4x4_neon
+
+void vpx_fdct4x4_1_c(const int16_t *input, tran_low_t *output, int stride);
+void vpx_fdct4x4_1_neon(const int16_t *input, tran_low_t *output, int stride);
+#define vpx_fdct4x4_1 vpx_fdct4x4_1_neon
+
+void vpx_fdct8x8_c(const int16_t *input, tran_low_t *output, int stride);
+void vpx_fdct8x8_neon(const int16_t *input, tran_low_t *output, int stride);
+#define vpx_fdct8x8 vpx_fdct8x8_neon
+
+void vpx_fdct8x8_1_c(const int16_t *input, tran_low_t *output, int stride);
+void vpx_fdct8x8_1_neon(const int16_t *input, tran_low_t *output, int stride);
+#define vpx_fdct8x8_1 vpx_fdct8x8_1_neon
+
+void vpx_get16x16var_c(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse, int *sum);
+void vpx_get16x16var_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse, int *sum);
+void vpx_get16x16var_neon_dotprod(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse, int *sum);
+RTCD_EXTERN void (*vpx_get16x16var)(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse, int *sum);
+
+unsigned int vpx_get4x4sse_cs_c(const unsigned char *src_ptr, int src_stride, const unsigned char *ref_ptr, int ref_stride);
+unsigned int vpx_get4x4sse_cs_neon(const unsigned char *src_ptr, int src_stride, const unsigned char *ref_ptr, int ref_stride);
+unsigned int vpx_get4x4sse_cs_neon_dotprod(const unsigned char *src_ptr, int src_stride, const unsigned char *ref_ptr, int ref_stride);
+RTCD_EXTERN unsigned int (*vpx_get4x4sse_cs)(const unsigned char *src_ptr, int src_stride, const unsigned char *ref_ptr, int ref_stride);
+
+void vpx_get8x8var_c(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse, int *sum);
+void vpx_get8x8var_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse, int *sum);
+void vpx_get8x8var_neon_dotprod(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse, int *sum);
+RTCD_EXTERN void (*vpx_get8x8var)(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse, int *sum);
+
+unsigned int vpx_get_mb_ss_c(const int16_t *);
+#define vpx_get_mb_ss vpx_get_mb_ss_c
+
+void vpx_h_predictor_16x16_c(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+void vpx_h_predictor_16x16_neon(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+#define vpx_h_predictor_16x16 vpx_h_predictor_16x16_neon
+
+void vpx_h_predictor_32x32_c(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+void vpx_h_predictor_32x32_neon(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+#define vpx_h_predictor_32x32 vpx_h_predictor_32x32_neon
+
+void vpx_h_predictor_4x4_c(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+void vpx_h_predictor_4x4_neon(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+#define vpx_h_predictor_4x4 vpx_h_predictor_4x4_neon
+
+void vpx_h_predictor_8x8_c(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+void vpx_h_predictor_8x8_neon(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+#define vpx_h_predictor_8x8 vpx_h_predictor_8x8_neon
+
+void vpx_hadamard_16x16_c(const int16_t *src_diff, ptrdiff_t src_stride, int16_t *coeff);
+void vpx_hadamard_16x16_neon(const int16_t *src_diff, ptrdiff_t src_stride, int16_t *coeff);
+#define vpx_hadamard_16x16 vpx_hadamard_16x16_neon
+
+void vpx_hadamard_32x32_c(const int16_t *src_diff, ptrdiff_t src_stride, int16_t *coeff);
+void vpx_hadamard_32x32_neon(const int16_t *src_diff, ptrdiff_t src_stride, int16_t *coeff);
+#define vpx_hadamard_32x32 vpx_hadamard_32x32_neon
+
+void vpx_hadamard_8x8_c(const int16_t *src_diff, ptrdiff_t src_stride, int16_t *coeff);
+void vpx_hadamard_8x8_neon(const int16_t *src_diff, ptrdiff_t src_stride, int16_t *coeff);
+#define vpx_hadamard_8x8 vpx_hadamard_8x8_neon
+
+void vpx_he_predictor_4x4_c(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+#define vpx_he_predictor_4x4 vpx_he_predictor_4x4_c
+
+void vpx_idct16x16_10_add_c(const tran_low_t *input, uint8_t *dest, int stride);
+void vpx_idct16x16_10_add_neon(const tran_low_t *input, uint8_t *dest, int stride);
+#define vpx_idct16x16_10_add vpx_idct16x16_10_add_neon
+
+void vpx_idct16x16_1_add_c(const tran_low_t *input, uint8_t *dest, int stride);
+void vpx_idct16x16_1_add_neon(const tran_low_t *input, uint8_t *dest, int stride);
+#define vpx_idct16x16_1_add vpx_idct16x16_1_add_neon
+
+void vpx_idct16x16_256_add_c(const tran_low_t *input, uint8_t *dest, int stride);
+void vpx_idct16x16_256_add_neon(const tran_low_t *input, uint8_t *dest, int stride);
+#define vpx_idct16x16_256_add vpx_idct16x16_256_add_neon
+
+void vpx_idct16x16_38_add_c(const tran_low_t *input, uint8_t *dest, int stride);
+void vpx_idct16x16_38_add_neon(const tran_low_t *input, uint8_t *dest, int stride);
+#define vpx_idct16x16_38_add vpx_idct16x16_38_add_neon
+
+void vpx_idct32x32_1024_add_c(const tran_low_t *input, uint8_t *dest, int stride);
+void vpx_idct32x32_1024_add_neon(const tran_low_t *input, uint8_t *dest, int stride);
+#define vpx_idct32x32_1024_add vpx_idct32x32_1024_add_neon
+
+void vpx_idct32x32_135_add_c(const tran_low_t *input, uint8_t *dest, int stride);
+void vpx_idct32x32_135_add_neon(const tran_low_t *input, uint8_t *dest, int stride);
+#define vpx_idct32x32_135_add vpx_idct32x32_135_add_neon
+
+void vpx_idct32x32_1_add_c(const tran_low_t *input, uint8_t *dest, int stride);
+void vpx_idct32x32_1_add_neon(const tran_low_t *input, uint8_t *dest, int stride);
+#define vpx_idct32x32_1_add vpx_idct32x32_1_add_neon
+
+void vpx_idct32x32_34_add_c(const tran_low_t *input, uint8_t *dest, int stride);
+void vpx_idct32x32_34_add_neon(const tran_low_t *input, uint8_t *dest, int stride);
+#define vpx_idct32x32_34_add vpx_idct32x32_34_add_neon
+
+void vpx_idct4x4_16_add_c(const tran_low_t *input, uint8_t *dest, int stride);
+void vpx_idct4x4_16_add_neon(const tran_low_t *input, uint8_t *dest, int stride);
+#define vpx_idct4x4_16_add vpx_idct4x4_16_add_neon
+
+void vpx_idct4x4_1_add_c(const tran_low_t *input, uint8_t *dest, int stride);
+void vpx_idct4x4_1_add_neon(const tran_low_t *input, uint8_t *dest, int stride);
+#define vpx_idct4x4_1_add vpx_idct4x4_1_add_neon
+
+void vpx_idct8x8_12_add_c(const tran_low_t *input, uint8_t *dest, int stride);
+void vpx_idct8x8_12_add_neon(const tran_low_t *input, uint8_t *dest, int stride);
+#define vpx_idct8x8_12_add vpx_idct8x8_12_add_neon
+
+void vpx_idct8x8_1_add_c(const tran_low_t *input, uint8_t *dest, int stride);
+void vpx_idct8x8_1_add_neon(const tran_low_t *input, uint8_t *dest, int stride);
+#define vpx_idct8x8_1_add vpx_idct8x8_1_add_neon
+
+void vpx_idct8x8_64_add_c(const tran_low_t *input, uint8_t *dest, int stride);
+void vpx_idct8x8_64_add_neon(const tran_low_t *input, uint8_t *dest, int stride);
+#define vpx_idct8x8_64_add vpx_idct8x8_64_add_neon
+
+int16_t vpx_int_pro_col_c(const uint8_t *ref, const int width);
+int16_t vpx_int_pro_col_neon(const uint8_t *ref, const int width);
+#define vpx_int_pro_col vpx_int_pro_col_neon
+
+void vpx_int_pro_row_c(int16_t hbuf[16], const uint8_t *ref, const int ref_stride, const int height);
+void vpx_int_pro_row_neon(int16_t hbuf[16], const uint8_t *ref, const int ref_stride, const int height);
+#define vpx_int_pro_row vpx_int_pro_row_neon
+
+void vpx_iwht4x4_16_add_c(const tran_low_t *input, uint8_t *dest, int stride);
+#define vpx_iwht4x4_16_add vpx_iwht4x4_16_add_c
+
+void vpx_iwht4x4_1_add_c(const tran_low_t *input, uint8_t *dest, int stride);
+#define vpx_iwht4x4_1_add vpx_iwht4x4_1_add_c
+
+void vpx_lpf_horizontal_16_c(uint8_t *s, int pitch, const uint8_t *blimit, const uint8_t *limit, const uint8_t *thresh);
+void vpx_lpf_horizontal_16_neon(uint8_t *s, int pitch, const uint8_t *blimit, const uint8_t *limit, const uint8_t *thresh);
+#define vpx_lpf_horizontal_16 vpx_lpf_horizontal_16_neon
+
+void vpx_lpf_horizontal_16_dual_c(uint8_t *s, int pitch, const uint8_t *blimit, const uint8_t *limit, const uint8_t *thresh);
+void vpx_lpf_horizontal_16_dual_neon(uint8_t *s, int pitch, const uint8_t *blimit, const uint8_t *limit, const uint8_t *thresh);
+#define vpx_lpf_horizontal_16_dual vpx_lpf_horizontal_16_dual_neon
+
+void vpx_lpf_horizontal_4_c(uint8_t *s, int pitch, const uint8_t *blimit, const uint8_t *limit, const uint8_t *thresh);
+void vpx_lpf_horizontal_4_neon(uint8_t *s, int pitch, const uint8_t *blimit, const uint8_t *limit, const uint8_t *thresh);
+#define vpx_lpf_horizontal_4 vpx_lpf_horizontal_4_neon
+
+void vpx_lpf_horizontal_4_dual_c(uint8_t *s, int pitch, const uint8_t *blimit0, const uint8_t *limit0, const uint8_t *thresh0, const uint8_t *blimit1, const uint8_t *limit1, const uint8_t *thresh1);
+void vpx_lpf_horizontal_4_dual_neon(uint8_t *s, int pitch, const uint8_t *blimit0, const uint8_t *limit0, const uint8_t *thresh0, const uint8_t *blimit1, const uint8_t *limit1, const uint8_t *thresh1);
+#define vpx_lpf_horizontal_4_dual vpx_lpf_horizontal_4_dual_neon
+
+void vpx_lpf_horizontal_8_c(uint8_t *s, int pitch, const uint8_t *blimit, const uint8_t *limit, const uint8_t *thresh);
+void vpx_lpf_horizontal_8_neon(uint8_t *s, int pitch, const uint8_t *blimit, const uint8_t *limit, const uint8_t *thresh);
+#define vpx_lpf_horizontal_8 vpx_lpf_horizontal_8_neon
+
+void vpx_lpf_horizontal_8_dual_c(uint8_t *s, int pitch, const uint8_t *blimit0, const uint8_t *limit0, const uint8_t *thresh0, const uint8_t *blimit1, const uint8_t *limit1, const uint8_t *thresh1);
+void vpx_lpf_horizontal_8_dual_neon(uint8_t *s, int pitch, const uint8_t *blimit0, const uint8_t *limit0, const uint8_t *thresh0, const uint8_t *blimit1, const uint8_t *limit1, const uint8_t *thresh1);
+#define vpx_lpf_horizontal_8_dual vpx_lpf_horizontal_8_dual_neon
+
+void vpx_lpf_vertical_16_c(uint8_t *s, int pitch, const uint8_t *blimit, const uint8_t *limit, const uint8_t *thresh);
+void vpx_lpf_vertical_16_neon(uint8_t *s, int pitch, const uint8_t *blimit, const uint8_t *limit, const uint8_t *thresh);
+#define vpx_lpf_vertical_16 vpx_lpf_vertical_16_neon
+
+void vpx_lpf_vertical_16_dual_c(uint8_t *s, int pitch, const uint8_t *blimit, const uint8_t *limit, const uint8_t *thresh);
+void vpx_lpf_vertical_16_dual_neon(uint8_t *s, int pitch, const uint8_t *blimit, const uint8_t *limit, const uint8_t *thresh);
+#define vpx_lpf_vertical_16_dual vpx_lpf_vertical_16_dual_neon
+
+void vpx_lpf_vertical_4_c(uint8_t *s, int pitch, const uint8_t *blimit, const uint8_t *limit, const uint8_t *thresh);
+void vpx_lpf_vertical_4_neon(uint8_t *s, int pitch, const uint8_t *blimit, const uint8_t *limit, const uint8_t *thresh);
+#define vpx_lpf_vertical_4 vpx_lpf_vertical_4_neon
+
+void vpx_lpf_vertical_4_dual_c(uint8_t *s, int pitch, const uint8_t *blimit0, const uint8_t *limit0, const uint8_t *thresh0, const uint8_t *blimit1, const uint8_t *limit1, const uint8_t *thresh1);
+void vpx_lpf_vertical_4_dual_neon(uint8_t *s, int pitch, const uint8_t *blimit0, const uint8_t *limit0, const uint8_t *thresh0, const uint8_t *blimit1, const uint8_t *limit1, const uint8_t *thresh1);
+#define vpx_lpf_vertical_4_dual vpx_lpf_vertical_4_dual_neon
+
+void vpx_lpf_vertical_8_c(uint8_t *s, int pitch, const uint8_t *blimit, const uint8_t *limit, const uint8_t *thresh);
+void vpx_lpf_vertical_8_neon(uint8_t *s, int pitch, const uint8_t *blimit, const uint8_t *limit, const uint8_t *thresh);
+#define vpx_lpf_vertical_8 vpx_lpf_vertical_8_neon
+
+void vpx_lpf_vertical_8_dual_c(uint8_t *s, int pitch, const uint8_t *blimit0, const uint8_t *limit0, const uint8_t *thresh0, const uint8_t *blimit1, const uint8_t *limit1, const uint8_t *thresh1);
+void vpx_lpf_vertical_8_dual_neon(uint8_t *s, int pitch, const uint8_t *blimit0, const uint8_t *limit0, const uint8_t *thresh0, const uint8_t *blimit1, const uint8_t *limit1, const uint8_t *thresh1);
+#define vpx_lpf_vertical_8_dual vpx_lpf_vertical_8_dual_neon
+
+void vpx_minmax_8x8_c(const uint8_t *s, int p, const uint8_t *d, int dp, int *min, int *max);
+void vpx_minmax_8x8_neon(const uint8_t *s, int p, const uint8_t *d, int dp, int *min, int *max);
+#define vpx_minmax_8x8 vpx_minmax_8x8_neon
+
+unsigned int vpx_mse16x16_c(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+unsigned int vpx_mse16x16_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+unsigned int vpx_mse16x16_neon_dotprod(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+RTCD_EXTERN unsigned int (*vpx_mse16x16)(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+
+unsigned int vpx_mse16x8_c(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+unsigned int vpx_mse16x8_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+unsigned int vpx_mse16x8_neon_dotprod(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+RTCD_EXTERN unsigned int (*vpx_mse16x8)(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+
+unsigned int vpx_mse8x16_c(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+unsigned int vpx_mse8x16_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+unsigned int vpx_mse8x16_neon_dotprod(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+RTCD_EXTERN unsigned int (*vpx_mse8x16)(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+
+unsigned int vpx_mse8x8_c(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+unsigned int vpx_mse8x8_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+unsigned int vpx_mse8x8_neon_dotprod(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+RTCD_EXTERN unsigned int (*vpx_mse8x8)(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+
+void vpx_quantize_b_c(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);
+void vpx_quantize_b_neon(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);
+#define vpx_quantize_b vpx_quantize_b_neon
+
+void vpx_quantize_b_32x32_c(const tran_low_t *coeff_ptr, 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);
+void vpx_quantize_b_32x32_neon(const tran_low_t *coeff_ptr, 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);
+#define vpx_quantize_b_32x32 vpx_quantize_b_32x32_neon
+
+unsigned int vpx_sad16x16_c(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+unsigned int vpx_sad16x16_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+unsigned int vpx_sad16x16_neon_dotprod(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+RTCD_EXTERN unsigned int (*vpx_sad16x16)(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+
+unsigned int vpx_sad16x16_avg_c(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, const uint8_t *second_pred);
+unsigned int vpx_sad16x16_avg_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, const uint8_t *second_pred);
+unsigned int vpx_sad16x16_avg_neon_dotprod(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, const uint8_t *second_pred);
+RTCD_EXTERN unsigned int (*vpx_sad16x16_avg)(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, const uint8_t *second_pred);
+
+void vpx_sad16x16x4d_c(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+void vpx_sad16x16x4d_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+void vpx_sad16x16x4d_neon_dotprod(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+RTCD_EXTERN void (*vpx_sad16x16x4d)(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+
+unsigned int vpx_sad16x32_c(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+unsigned int vpx_sad16x32_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+unsigned int vpx_sad16x32_neon_dotprod(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+RTCD_EXTERN unsigned int (*vpx_sad16x32)(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+
+unsigned int vpx_sad16x32_avg_c(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, const uint8_t *second_pred);
+unsigned int vpx_sad16x32_avg_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, const uint8_t *second_pred);
+unsigned int vpx_sad16x32_avg_neon_dotprod(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, const uint8_t *second_pred);
+RTCD_EXTERN unsigned int (*vpx_sad16x32_avg)(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, const uint8_t *second_pred);
+
+void vpx_sad16x32x4d_c(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+void vpx_sad16x32x4d_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+void vpx_sad16x32x4d_neon_dotprod(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+RTCD_EXTERN void (*vpx_sad16x32x4d)(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+
+unsigned int vpx_sad16x8_c(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+unsigned int vpx_sad16x8_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+unsigned int vpx_sad16x8_neon_dotprod(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+RTCD_EXTERN unsigned int (*vpx_sad16x8)(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+
+unsigned int vpx_sad16x8_avg_c(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, const uint8_t *second_pred);
+unsigned int vpx_sad16x8_avg_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, const uint8_t *second_pred);
+unsigned int vpx_sad16x8_avg_neon_dotprod(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, const uint8_t *second_pred);
+RTCD_EXTERN unsigned int (*vpx_sad16x8_avg)(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, const uint8_t *second_pred);
+
+void vpx_sad16x8x4d_c(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+void vpx_sad16x8x4d_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+void vpx_sad16x8x4d_neon_dotprod(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+RTCD_EXTERN void (*vpx_sad16x8x4d)(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+
+unsigned int vpx_sad32x16_c(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+unsigned int vpx_sad32x16_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+unsigned int vpx_sad32x16_neon_dotprod(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+RTCD_EXTERN unsigned int (*vpx_sad32x16)(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+
+unsigned int vpx_sad32x16_avg_c(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, const uint8_t *second_pred);
+unsigned int vpx_sad32x16_avg_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, const uint8_t *second_pred);
+unsigned int vpx_sad32x16_avg_neon_dotprod(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, const uint8_t *second_pred);
+RTCD_EXTERN unsigned int (*vpx_sad32x16_avg)(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, const uint8_t *second_pred);
+
+void vpx_sad32x16x4d_c(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+void vpx_sad32x16x4d_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+void vpx_sad32x16x4d_neon_dotprod(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+RTCD_EXTERN void (*vpx_sad32x16x4d)(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+
+unsigned int vpx_sad32x32_c(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+unsigned int vpx_sad32x32_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+unsigned int vpx_sad32x32_neon_dotprod(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+RTCD_EXTERN unsigned int (*vpx_sad32x32)(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+
+unsigned int vpx_sad32x32_avg_c(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, const uint8_t *second_pred);
+unsigned int vpx_sad32x32_avg_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, const uint8_t *second_pred);
+unsigned int vpx_sad32x32_avg_neon_dotprod(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, const uint8_t *second_pred);
+RTCD_EXTERN unsigned int (*vpx_sad32x32_avg)(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, const uint8_t *second_pred);
+
+void vpx_sad32x32x4d_c(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+void vpx_sad32x32x4d_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+void vpx_sad32x32x4d_neon_dotprod(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+RTCD_EXTERN void (*vpx_sad32x32x4d)(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+
+unsigned int vpx_sad32x64_c(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+unsigned int vpx_sad32x64_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+unsigned int vpx_sad32x64_neon_dotprod(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+RTCD_EXTERN unsigned int (*vpx_sad32x64)(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+
+unsigned int vpx_sad32x64_avg_c(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, const uint8_t *second_pred);
+unsigned int vpx_sad32x64_avg_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, const uint8_t *second_pred);
+unsigned int vpx_sad32x64_avg_neon_dotprod(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, const uint8_t *second_pred);
+RTCD_EXTERN unsigned int (*vpx_sad32x64_avg)(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, const uint8_t *second_pred);
+
+void vpx_sad32x64x4d_c(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+void vpx_sad32x64x4d_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+void vpx_sad32x64x4d_neon_dotprod(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+RTCD_EXTERN void (*vpx_sad32x64x4d)(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+
+unsigned int vpx_sad4x4_c(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+unsigned int vpx_sad4x4_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+#define vpx_sad4x4 vpx_sad4x4_neon
+
+unsigned int vpx_sad4x4_avg_c(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, const uint8_t *second_pred);
+unsigned int vpx_sad4x4_avg_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, const uint8_t *second_pred);
+#define vpx_sad4x4_avg vpx_sad4x4_avg_neon
+
+void vpx_sad4x4x4d_c(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+void vpx_sad4x4x4d_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+#define vpx_sad4x4x4d vpx_sad4x4x4d_neon
+
+unsigned int vpx_sad4x8_c(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+unsigned int vpx_sad4x8_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+#define vpx_sad4x8 vpx_sad4x8_neon
+
+unsigned int vpx_sad4x8_avg_c(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, const uint8_t *second_pred);
+unsigned int vpx_sad4x8_avg_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, const uint8_t *second_pred);
+#define vpx_sad4x8_avg vpx_sad4x8_avg_neon
+
+void vpx_sad4x8x4d_c(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+void vpx_sad4x8x4d_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+#define vpx_sad4x8x4d vpx_sad4x8x4d_neon
+
+unsigned int vpx_sad64x32_c(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+unsigned int vpx_sad64x32_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+unsigned int vpx_sad64x32_neon_dotprod(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+RTCD_EXTERN unsigned int (*vpx_sad64x32)(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+
+unsigned int vpx_sad64x32_avg_c(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, const uint8_t *second_pred);
+unsigned int vpx_sad64x32_avg_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, const uint8_t *second_pred);
+unsigned int vpx_sad64x32_avg_neon_dotprod(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, const uint8_t *second_pred);
+RTCD_EXTERN unsigned int (*vpx_sad64x32_avg)(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, const uint8_t *second_pred);
+
+void vpx_sad64x32x4d_c(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+void vpx_sad64x32x4d_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+void vpx_sad64x32x4d_neon_dotprod(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+RTCD_EXTERN void (*vpx_sad64x32x4d)(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+
+unsigned int vpx_sad64x64_c(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+unsigned int vpx_sad64x64_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+unsigned int vpx_sad64x64_neon_dotprod(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+RTCD_EXTERN unsigned int (*vpx_sad64x64)(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+
+unsigned int vpx_sad64x64_avg_c(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, const uint8_t *second_pred);
+unsigned int vpx_sad64x64_avg_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, const uint8_t *second_pred);
+unsigned int vpx_sad64x64_avg_neon_dotprod(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, const uint8_t *second_pred);
+RTCD_EXTERN unsigned int (*vpx_sad64x64_avg)(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, const uint8_t *second_pred);
+
+void vpx_sad64x64x4d_c(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+void vpx_sad64x64x4d_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+void vpx_sad64x64x4d_neon_dotprod(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+RTCD_EXTERN void (*vpx_sad64x64x4d)(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+
+unsigned int vpx_sad8x16_c(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+unsigned int vpx_sad8x16_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+#define vpx_sad8x16 vpx_sad8x16_neon
+
+unsigned int vpx_sad8x16_avg_c(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, const uint8_t *second_pred);
+unsigned int vpx_sad8x16_avg_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, const uint8_t *second_pred);
+#define vpx_sad8x16_avg vpx_sad8x16_avg_neon
+
+void vpx_sad8x16x4d_c(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+void vpx_sad8x16x4d_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+#define vpx_sad8x16x4d vpx_sad8x16x4d_neon
+
+unsigned int vpx_sad8x4_c(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+unsigned int vpx_sad8x4_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+#define vpx_sad8x4 vpx_sad8x4_neon
+
+unsigned int vpx_sad8x4_avg_c(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, const uint8_t *second_pred);
+unsigned int vpx_sad8x4_avg_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, const uint8_t *second_pred);
+#define vpx_sad8x4_avg vpx_sad8x4_avg_neon
+
+void vpx_sad8x4x4d_c(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+void vpx_sad8x4x4d_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+#define vpx_sad8x4x4d vpx_sad8x4x4d_neon
+
+unsigned int vpx_sad8x8_c(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+unsigned int vpx_sad8x8_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+#define vpx_sad8x8 vpx_sad8x8_neon
+
+unsigned int vpx_sad8x8_avg_c(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, const uint8_t *second_pred);
+unsigned int vpx_sad8x8_avg_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, const uint8_t *second_pred);
+#define vpx_sad8x8_avg vpx_sad8x8_avg_neon
+
+void vpx_sad8x8x4d_c(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+void vpx_sad8x8x4d_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+#define vpx_sad8x8x4d vpx_sad8x8x4d_neon
+
+unsigned int vpx_sad_skip_16x16_c(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+unsigned int vpx_sad_skip_16x16_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+unsigned int vpx_sad_skip_16x16_neon_dotprod(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+RTCD_EXTERN unsigned int (*vpx_sad_skip_16x16)(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+
+void vpx_sad_skip_16x16x4d_c(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+void vpx_sad_skip_16x16x4d_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+void vpx_sad_skip_16x16x4d_neon_dotprod(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+RTCD_EXTERN void (*vpx_sad_skip_16x16x4d)(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+
+unsigned int vpx_sad_skip_16x32_c(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+unsigned int vpx_sad_skip_16x32_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+unsigned int vpx_sad_skip_16x32_neon_dotprod(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+RTCD_EXTERN unsigned int (*vpx_sad_skip_16x32)(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+
+void vpx_sad_skip_16x32x4d_c(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+void vpx_sad_skip_16x32x4d_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+void vpx_sad_skip_16x32x4d_neon_dotprod(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+RTCD_EXTERN void (*vpx_sad_skip_16x32x4d)(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+
+unsigned int vpx_sad_skip_16x8_c(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+unsigned int vpx_sad_skip_16x8_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+unsigned int vpx_sad_skip_16x8_neon_dotprod(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+RTCD_EXTERN unsigned int (*vpx_sad_skip_16x8)(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+
+void vpx_sad_skip_16x8x4d_c(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+void vpx_sad_skip_16x8x4d_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+void vpx_sad_skip_16x8x4d_neon_dotprod(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+RTCD_EXTERN void (*vpx_sad_skip_16x8x4d)(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+
+unsigned int vpx_sad_skip_32x16_c(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+unsigned int vpx_sad_skip_32x16_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+unsigned int vpx_sad_skip_32x16_neon_dotprod(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+RTCD_EXTERN unsigned int (*vpx_sad_skip_32x16)(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+
+void vpx_sad_skip_32x16x4d_c(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+void vpx_sad_skip_32x16x4d_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+void vpx_sad_skip_32x16x4d_neon_dotprod(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+RTCD_EXTERN void (*vpx_sad_skip_32x16x4d)(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+
+unsigned int vpx_sad_skip_32x32_c(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+unsigned int vpx_sad_skip_32x32_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+unsigned int vpx_sad_skip_32x32_neon_dotprod(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+RTCD_EXTERN unsigned int (*vpx_sad_skip_32x32)(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+
+void vpx_sad_skip_32x32x4d_c(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+void vpx_sad_skip_32x32x4d_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+void vpx_sad_skip_32x32x4d_neon_dotprod(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+RTCD_EXTERN void (*vpx_sad_skip_32x32x4d)(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+
+unsigned int vpx_sad_skip_32x64_c(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+unsigned int vpx_sad_skip_32x64_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+unsigned int vpx_sad_skip_32x64_neon_dotprod(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+RTCD_EXTERN unsigned int (*vpx_sad_skip_32x64)(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+
+void vpx_sad_skip_32x64x4d_c(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+void vpx_sad_skip_32x64x4d_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+void vpx_sad_skip_32x64x4d_neon_dotprod(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+RTCD_EXTERN void (*vpx_sad_skip_32x64x4d)(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+
+unsigned int vpx_sad_skip_4x4_c(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+unsigned int vpx_sad_skip_4x4_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+#define vpx_sad_skip_4x4 vpx_sad_skip_4x4_neon
+
+void vpx_sad_skip_4x4x4d_c(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+void vpx_sad_skip_4x4x4d_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+#define vpx_sad_skip_4x4x4d vpx_sad_skip_4x4x4d_neon
+
+unsigned int vpx_sad_skip_4x8_c(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+unsigned int vpx_sad_skip_4x8_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+#define vpx_sad_skip_4x8 vpx_sad_skip_4x8_neon
+
+void vpx_sad_skip_4x8x4d_c(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+void vpx_sad_skip_4x8x4d_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+#define vpx_sad_skip_4x8x4d vpx_sad_skip_4x8x4d_neon
+
+unsigned int vpx_sad_skip_64x32_c(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+unsigned int vpx_sad_skip_64x32_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+unsigned int vpx_sad_skip_64x32_neon_dotprod(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+RTCD_EXTERN unsigned int (*vpx_sad_skip_64x32)(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+
+void vpx_sad_skip_64x32x4d_c(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+void vpx_sad_skip_64x32x4d_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+void vpx_sad_skip_64x32x4d_neon_dotprod(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+RTCD_EXTERN void (*vpx_sad_skip_64x32x4d)(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+
+unsigned int vpx_sad_skip_64x64_c(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+unsigned int vpx_sad_skip_64x64_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+unsigned int vpx_sad_skip_64x64_neon_dotprod(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+RTCD_EXTERN unsigned int (*vpx_sad_skip_64x64)(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+
+void vpx_sad_skip_64x64x4d_c(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+void vpx_sad_skip_64x64x4d_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+void vpx_sad_skip_64x64x4d_neon_dotprod(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+RTCD_EXTERN void (*vpx_sad_skip_64x64x4d)(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+
+unsigned int vpx_sad_skip_8x16_c(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+unsigned int vpx_sad_skip_8x16_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+#define vpx_sad_skip_8x16 vpx_sad_skip_8x16_neon
+
+void vpx_sad_skip_8x16x4d_c(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+void vpx_sad_skip_8x16x4d_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+#define vpx_sad_skip_8x16x4d vpx_sad_skip_8x16x4d_neon
+
+unsigned int vpx_sad_skip_8x4_c(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+unsigned int vpx_sad_skip_8x4_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+#define vpx_sad_skip_8x4 vpx_sad_skip_8x4_neon
+
+void vpx_sad_skip_8x4x4d_c(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+void vpx_sad_skip_8x4x4d_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+#define vpx_sad_skip_8x4x4d vpx_sad_skip_8x4x4d_neon
+
+unsigned int vpx_sad_skip_8x8_c(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+unsigned int vpx_sad_skip_8x8_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride);
+#define vpx_sad_skip_8x8 vpx_sad_skip_8x8_neon
+
+void vpx_sad_skip_8x8x4d_c(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+void vpx_sad_skip_8x8x4d_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *const ref_array[4], int ref_stride, uint32_t sad_array[4]);
+#define vpx_sad_skip_8x8x4d vpx_sad_skip_8x8x4d_neon
+
+int vpx_satd_c(const int16_t *coeff, int length);
+int vpx_satd_neon(const int16_t *coeff, int length);
+#define vpx_satd vpx_satd_neon
+
+void vpx_scaled_2d_c(const uint8_t *src, ptrdiff_t src_stride, uint8_t *dst, ptrdiff_t dst_stride, const InterpKernel *filter, int x0_q4, int x_step_q4, int y0_q4, int y_step_q4, int w, int h);
+void vpx_scaled_2d_neon(const uint8_t *src, ptrdiff_t src_stride, uint8_t *dst, ptrdiff_t dst_stride, const InterpKernel *filter, int x0_q4, int x_step_q4, int y0_q4, int y_step_q4, int w, int h);
+#define vpx_scaled_2d vpx_scaled_2d_neon
+
+void vpx_scaled_avg_2d_c(const uint8_t *src, ptrdiff_t src_stride, uint8_t *dst, ptrdiff_t dst_stride, const InterpKernel *filter, int x0_q4, int x_step_q4, int y0_q4, int y_step_q4, int w, int h);
+#define vpx_scaled_avg_2d vpx_scaled_avg_2d_c
+
+void vpx_scaled_avg_horiz_c(const uint8_t *src, ptrdiff_t src_stride, uint8_t *dst, ptrdiff_t dst_stride, const InterpKernel *filter, int x0_q4, int x_step_q4, int y0_q4, int y_step_q4, int w, int h);
+#define vpx_scaled_avg_horiz vpx_scaled_avg_horiz_c
+
+void vpx_scaled_avg_vert_c(const uint8_t *src, ptrdiff_t src_stride, uint8_t *dst, ptrdiff_t dst_stride, const InterpKernel *filter, int x0_q4, int x_step_q4, int y0_q4, int y_step_q4, int w, int h);
+#define vpx_scaled_avg_vert vpx_scaled_avg_vert_c
+
+void vpx_scaled_horiz_c(const uint8_t *src, ptrdiff_t src_stride, uint8_t *dst, ptrdiff_t dst_stride, const InterpKernel *filter, int x0_q4, int x_step_q4, int y0_q4, int y_step_q4, int w, int h);
+#define vpx_scaled_horiz vpx_scaled_horiz_c
+
+void vpx_scaled_vert_c(const uint8_t *src, ptrdiff_t src_stride, uint8_t *dst, ptrdiff_t dst_stride, const InterpKernel *filter, int x0_q4, int x_step_q4, int y0_q4, int y_step_q4, int w, int h);
+#define vpx_scaled_vert vpx_scaled_vert_c
+
+int64_t vpx_sse_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, int width, int height);
+int64_t vpx_sse_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, int width, int height);
+int64_t vpx_sse_neon_dotprod(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, int width, int height);
+RTCD_EXTERN int64_t (*vpx_sse)(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, int width, int height);
+
+uint32_t vpx_sub_pixel_avg_variance16x16_c(const uint8_t *src_ptr, int src_stride, int x_offset, int y_offset, const uint8_t *ref_ptr, int ref_stride, uint32_t *sse, const uint8_t *second_pred);
+uint32_t vpx_sub_pixel_avg_variance16x16_neon(const uint8_t *src_ptr, int src_stride, int x_offset, int y_offset, const uint8_t *ref_ptr, int ref_stride, uint32_t *sse, const uint8_t *second_pred);
+#define vpx_sub_pixel_avg_variance16x16 vpx_sub_pixel_avg_variance16x16_neon
+
+uint32_t vpx_sub_pixel_avg_variance16x32_c(const uint8_t *src_ptr, int src_stride, int x_offset, int y_offset, const uint8_t *ref_ptr, int ref_stride, uint32_t *sse, const uint8_t *second_pred);
+uint32_t vpx_sub_pixel_avg_variance16x32_neon(const uint8_t *src_ptr, int src_stride, int x_offset, int y_offset, const uint8_t *ref_ptr, int ref_stride, uint32_t *sse, const uint8_t *second_pred);
+#define vpx_sub_pixel_avg_variance16x32 vpx_sub_pixel_avg_variance16x32_neon
+
+uint32_t vpx_sub_pixel_avg_variance16x8_c(const uint8_t *src_ptr, int src_stride, int x_offset, int y_offset, const uint8_t *ref_ptr, int ref_stride, uint32_t *sse, const uint8_t *second_pred);
+uint32_t vpx_sub_pixel_avg_variance16x8_neon(const uint8_t *src_ptr, int src_stride, int x_offset, int y_offset, const uint8_t *ref_ptr, int ref_stride, uint32_t *sse, const uint8_t *second_pred);
+#define vpx_sub_pixel_avg_variance16x8 vpx_sub_pixel_avg_variance16x8_neon
+
+uint32_t vpx_sub_pixel_avg_variance32x16_c(const uint8_t *src_ptr, int src_stride, int x_offset, int y_offset, const uint8_t *ref_ptr, int ref_stride, uint32_t *sse, const uint8_t *second_pred);
+uint32_t vpx_sub_pixel_avg_variance32x16_neon(const uint8_t *src_ptr, int src_stride, int x_offset, int y_offset, const uint8_t *ref_ptr, int ref_stride, uint32_t *sse, const uint8_t *second_pred);
+#define vpx_sub_pixel_avg_variance32x16 vpx_sub_pixel_avg_variance32x16_neon
+
+uint32_t vpx_sub_pixel_avg_variance32x32_c(const uint8_t *src_ptr, int src_stride, int x_offset, int y_offset, const uint8_t *ref_ptr, int ref_stride, uint32_t *sse, const uint8_t *second_pred);
+uint32_t vpx_sub_pixel_avg_variance32x32_neon(const uint8_t *src_ptr, int src_stride, int x_offset, int y_offset, const uint8_t *ref_ptr, int ref_stride, uint32_t *sse, const uint8_t *second_pred);
+#define vpx_sub_pixel_avg_variance32x32 vpx_sub_pixel_avg_variance32x32_neon
+
+uint32_t vpx_sub_pixel_avg_variance32x64_c(const uint8_t *src_ptr, int src_stride, int x_offset, int y_offset, const uint8_t *ref_ptr, int ref_stride, uint32_t *sse, const uint8_t *second_pred);
+uint32_t vpx_sub_pixel_avg_variance32x64_neon(const uint8_t *src_ptr, int src_stride, int x_offset, int y_offset, const uint8_t *ref_ptr, int ref_stride, uint32_t *sse, const uint8_t *second_pred);
+#define vpx_sub_pixel_avg_variance32x64 vpx_sub_pixel_avg_variance32x64_neon
+
+uint32_t vpx_sub_pixel_avg_variance4x4_c(const uint8_t *src_ptr, int src_stride, int x_offset, int y_offset, const uint8_t *ref_ptr, int ref_stride, uint32_t *sse, const uint8_t *second_pred);
+uint32_t vpx_sub_pixel_avg_variance4x4_neon(const uint8_t *src_ptr, int src_stride, int x_offset, int y_offset, const uint8_t *ref_ptr, int ref_stride, uint32_t *sse, const uint8_t *second_pred);
+#define vpx_sub_pixel_avg_variance4x4 vpx_sub_pixel_avg_variance4x4_neon
+
+uint32_t vpx_sub_pixel_avg_variance4x8_c(const uint8_t *src_ptr, int src_stride, int x_offset, int y_offset, const uint8_t *ref_ptr, int ref_stride, uint32_t *sse, const uint8_t *second_pred);
+uint32_t vpx_sub_pixel_avg_variance4x8_neon(const uint8_t *src_ptr, int src_stride, int x_offset, int y_offset, const uint8_t *ref_ptr, int ref_stride, uint32_t *sse, const uint8_t *second_pred);
+#define vpx_sub_pixel_avg_variance4x8 vpx_sub_pixel_avg_variance4x8_neon
+
+uint32_t vpx_sub_pixel_avg_variance64x32_c(const uint8_t *src_ptr, int src_stride, int x_offset, int y_offset, const uint8_t *ref_ptr, int ref_stride, uint32_t *sse, const uint8_t *second_pred);
+uint32_t vpx_sub_pixel_avg_variance64x32_neon(const uint8_t *src_ptr, int src_stride, int x_offset, int y_offset, const uint8_t *ref_ptr, int ref_stride, uint32_t *sse, const uint8_t *second_pred);
+#define vpx_sub_pixel_avg_variance64x32 vpx_sub_pixel_avg_variance64x32_neon
+
+uint32_t vpx_sub_pixel_avg_variance64x64_c(const uint8_t *src_ptr, int src_stride, int x_offset, int y_offset, const uint8_t *ref_ptr, int ref_stride, uint32_t *sse, const uint8_t *second_pred);
+uint32_t vpx_sub_pixel_avg_variance64x64_neon(const uint8_t *src_ptr, int src_stride, int x_offset, int y_offset, const uint8_t *ref_ptr, int ref_stride, uint32_t *sse, const uint8_t *second_pred);
+#define vpx_sub_pixel_avg_variance64x64 vpx_sub_pixel_avg_variance64x64_neon
+
+uint32_t vpx_sub_pixel_avg_variance8x16_c(const uint8_t *src_ptr, int src_stride, int x_offset, int y_offset, const uint8_t *ref_ptr, int ref_stride, uint32_t *sse, const uint8_t *second_pred);
+uint32_t vpx_sub_pixel_avg_variance8x16_neon(const uint8_t *src_ptr, int src_stride, int x_offset, int y_offset, const uint8_t *ref_ptr, int ref_stride, uint32_t *sse, const uint8_t *second_pred);
+#define vpx_sub_pixel_avg_variance8x16 vpx_sub_pixel_avg_variance8x16_neon
+
+uint32_t vpx_sub_pixel_avg_variance8x4_c(const uint8_t *src_ptr, int src_stride, int x_offset, int y_offset, const uint8_t *ref_ptr, int ref_stride, uint32_t *sse, const uint8_t *second_pred);
+uint32_t vpx_sub_pixel_avg_variance8x4_neon(const uint8_t *src_ptr, int src_stride, int x_offset, int y_offset, const uint8_t *ref_ptr, int ref_stride, uint32_t *sse, const uint8_t *second_pred);
+#define vpx_sub_pixel_avg_variance8x4 vpx_sub_pixel_avg_variance8x4_neon
+
+uint32_t vpx_sub_pixel_avg_variance8x8_c(const uint8_t *src_ptr, int src_stride, int x_offset, int y_offset, const uint8_t *ref_ptr, int ref_stride, uint32_t *sse, const uint8_t *second_pred);
+uint32_t vpx_sub_pixel_avg_variance8x8_neon(const uint8_t *src_ptr, int src_stride, int x_offset, int y_offset, const uint8_t *ref_ptr, int ref_stride, uint32_t *sse, const uint8_t *second_pred);
+#define vpx_sub_pixel_avg_variance8x8 vpx_sub_pixel_avg_variance8x8_neon
+
+uint32_t vpx_sub_pixel_variance16x16_c(const uint8_t *src_ptr, int src_stride, int x_offset, int y_offset, const uint8_t *ref_ptr, int ref_stride, uint32_t *sse);
+uint32_t vpx_sub_pixel_variance16x16_neon(const uint8_t *src_ptr, int src_stride, int x_offset, int y_offset, const uint8_t *ref_ptr, int ref_stride, uint32_t *sse);
+#define vpx_sub_pixel_variance16x16 vpx_sub_pixel_variance16x16_neon
+
+uint32_t vpx_sub_pixel_variance16x32_c(const uint8_t *src_ptr, int src_stride, int x_offset, int y_offset, const uint8_t *ref_ptr, int ref_stride, uint32_t *sse);
+uint32_t vpx_sub_pixel_variance16x32_neon(const uint8_t *src_ptr, int src_stride, int x_offset, int y_offset, const uint8_t *ref_ptr, int ref_stride, uint32_t *sse);
+#define vpx_sub_pixel_variance16x32 vpx_sub_pixel_variance16x32_neon
+
+uint32_t vpx_sub_pixel_variance16x8_c(const uint8_t *src_ptr, int src_stride, int x_offset, int y_offset, const uint8_t *ref_ptr, int ref_stride, uint32_t *sse);
+uint32_t vpx_sub_pixel_variance16x8_neon(const uint8_t *src_ptr, int src_stride, int x_offset, int y_offset, const uint8_t *ref_ptr, int ref_stride, uint32_t *sse);
+#define vpx_sub_pixel_variance16x8 vpx_sub_pixel_variance16x8_neon
+
+uint32_t vpx_sub_pixel_variance32x16_c(const uint8_t *src_ptr, int src_stride, int x_offset, int y_offset, const uint8_t *ref_ptr, int ref_stride, uint32_t *sse);
+uint32_t vpx_sub_pixel_variance32x16_neon(const uint8_t *src_ptr, int src_stride, int x_offset, int y_offset, const uint8_t *ref_ptr, int ref_stride, uint32_t *sse);
+#define vpx_sub_pixel_variance32x16 vpx_sub_pixel_variance32x16_neon
+
+uint32_t vpx_sub_pixel_variance32x32_c(const uint8_t *src_ptr, int src_stride, int x_offset, int y_offset, const uint8_t *ref_ptr, int ref_stride, uint32_t *sse);
+uint32_t vpx_sub_pixel_variance32x32_neon(const uint8_t *src_ptr, int src_stride, int x_offset, int y_offset, const uint8_t *ref_ptr, int ref_stride, uint32_t *sse);
+#define vpx_sub_pixel_variance32x32 vpx_sub_pixel_variance32x32_neon
+
+uint32_t vpx_sub_pixel_variance32x64_c(const uint8_t *src_ptr, int src_stride, int x_offset, int y_offset, const uint8_t *ref_ptr, int ref_stride, uint32_t *sse);
+uint32_t vpx_sub_pixel_variance32x64_neon(const uint8_t *src_ptr, int src_stride, int x_offset, int y_offset, const uint8_t *ref_ptr, int ref_stride, uint32_t *sse);
+#define vpx_sub_pixel_variance32x64 vpx_sub_pixel_variance32x64_neon
+
+uint32_t vpx_sub_pixel_variance4x4_c(const uint8_t *src_ptr, int src_stride, int x_offset, int y_offset, const uint8_t *ref_ptr, int ref_stride, uint32_t *sse);
+uint32_t vpx_sub_pixel_variance4x4_neon(const uint8_t *src_ptr, int src_stride, int x_offset, int y_offset, const uint8_t *ref_ptr, int ref_stride, uint32_t *sse);
+#define vpx_sub_pixel_variance4x4 vpx_sub_pixel_variance4x4_neon
+
+uint32_t vpx_sub_pixel_variance4x8_c(const uint8_t *src_ptr, int src_stride, int x_offset, int y_offset, const uint8_t *ref_ptr, int ref_stride, uint32_t *sse);
+uint32_t vpx_sub_pixel_variance4x8_neon(const uint8_t *src_ptr, int src_stride, int x_offset, int y_offset, const uint8_t *ref_ptr, int ref_stride, uint32_t *sse);
+#define vpx_sub_pixel_variance4x8 vpx_sub_pixel_variance4x8_neon
+
+uint32_t vpx_sub_pixel_variance64x32_c(const uint8_t *src_ptr, int src_stride, int x_offset, int y_offset, const uint8_t *ref_ptr, int ref_stride, uint32_t *sse);
+uint32_t vpx_sub_pixel_variance64x32_neon(const uint8_t *src_ptr, int src_stride, int x_offset, int y_offset, const uint8_t *ref_ptr, int ref_stride, uint32_t *sse);
+#define vpx_sub_pixel_variance64x32 vpx_sub_pixel_variance64x32_neon
+
+uint32_t vpx_sub_pixel_variance64x64_c(const uint8_t *src_ptr, int src_stride, int x_offset, int y_offset, const uint8_t *ref_ptr, int ref_stride, uint32_t *sse);
+uint32_t vpx_sub_pixel_variance64x64_neon(const uint8_t *src_ptr, int src_stride, int x_offset, int y_offset, const uint8_t *ref_ptr, int ref_stride, uint32_t *sse);
+#define vpx_sub_pixel_variance64x64 vpx_sub_pixel_variance64x64_neon
+
+uint32_t vpx_sub_pixel_variance8x16_c(const uint8_t *src_ptr, int src_stride, int x_offset, int y_offset, const uint8_t *ref_ptr, int ref_stride, uint32_t *sse);
+uint32_t vpx_sub_pixel_variance8x16_neon(const uint8_t *src_ptr, int src_stride, int x_offset, int y_offset, const uint8_t *ref_ptr, int ref_stride, uint32_t *sse);
+#define vpx_sub_pixel_variance8x16 vpx_sub_pixel_variance8x16_neon
+
+uint32_t vpx_sub_pixel_variance8x4_c(const uint8_t *src_ptr, int src_stride, int x_offset, int y_offset, const uint8_t *ref_ptr, int ref_stride, uint32_t *sse);
+uint32_t vpx_sub_pixel_variance8x4_neon(const uint8_t *src_ptr, int src_stride, int x_offset, int y_offset, const uint8_t *ref_ptr, int ref_stride, uint32_t *sse);
+#define vpx_sub_pixel_variance8x4 vpx_sub_pixel_variance8x4_neon
+
+uint32_t vpx_sub_pixel_variance8x8_c(const uint8_t *src_ptr, int src_stride, int x_offset, int y_offset, const uint8_t *ref_ptr, int ref_stride, uint32_t *sse);
+uint32_t vpx_sub_pixel_variance8x8_neon(const uint8_t *src_ptr, int src_stride, int x_offset, int y_offset, const uint8_t *ref_ptr, int ref_stride, uint32_t *sse);
+#define vpx_sub_pixel_variance8x8 vpx_sub_pixel_variance8x8_neon
+
+void vpx_subtract_block_c(int rows, int cols, int16_t *diff_ptr, ptrdiff_t diff_stride, const uint8_t *src_ptr, ptrdiff_t src_stride, const uint8_t *pred_ptr, ptrdiff_t pred_stride);
+void vpx_subtract_block_neon(int rows, int cols, int16_t *diff_ptr, ptrdiff_t diff_stride, const uint8_t *src_ptr, ptrdiff_t src_stride, const uint8_t *pred_ptr, ptrdiff_t pred_stride);
+#define vpx_subtract_block vpx_subtract_block_neon
+
+uint64_t vpx_sum_squares_2d_i16_c(const int16_t *src, int stride, int size);
+uint64_t vpx_sum_squares_2d_i16_neon(const int16_t *src, int stride, int size);
+uint64_t vpx_sum_squares_2d_i16_sve(const int16_t *src, int stride, int size);
+RTCD_EXTERN uint64_t (*vpx_sum_squares_2d_i16)(const int16_t *src, int stride, int size);
+
+void vpx_tm_predictor_16x16_c(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+void vpx_tm_predictor_16x16_neon(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+#define vpx_tm_predictor_16x16 vpx_tm_predictor_16x16_neon
+
+void vpx_tm_predictor_32x32_c(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+void vpx_tm_predictor_32x32_neon(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+#define vpx_tm_predictor_32x32 vpx_tm_predictor_32x32_neon
+
+void vpx_tm_predictor_4x4_c(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+void vpx_tm_predictor_4x4_neon(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+#define vpx_tm_predictor_4x4 vpx_tm_predictor_4x4_neon
+
+void vpx_tm_predictor_8x8_c(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+void vpx_tm_predictor_8x8_neon(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+#define vpx_tm_predictor_8x8 vpx_tm_predictor_8x8_neon
+
+void vpx_v_predictor_16x16_c(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+void vpx_v_predictor_16x16_neon(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+#define vpx_v_predictor_16x16 vpx_v_predictor_16x16_neon
+
+void vpx_v_predictor_32x32_c(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+void vpx_v_predictor_32x32_neon(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+#define vpx_v_predictor_32x32 vpx_v_predictor_32x32_neon
+
+void vpx_v_predictor_4x4_c(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+void vpx_v_predictor_4x4_neon(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+#define vpx_v_predictor_4x4 vpx_v_predictor_4x4_neon
+
+void vpx_v_predictor_8x8_c(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+void vpx_v_predictor_8x8_neon(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+#define vpx_v_predictor_8x8 vpx_v_predictor_8x8_neon
+
+unsigned int vpx_variance16x16_c(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+unsigned int vpx_variance16x16_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+unsigned int vpx_variance16x16_neon_dotprod(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+RTCD_EXTERN unsigned int (*vpx_variance16x16)(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+
+unsigned int vpx_variance16x32_c(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+unsigned int vpx_variance16x32_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+unsigned int vpx_variance16x32_neon_dotprod(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+RTCD_EXTERN unsigned int (*vpx_variance16x32)(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+
+unsigned int vpx_variance16x8_c(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+unsigned int vpx_variance16x8_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+unsigned int vpx_variance16x8_neon_dotprod(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+RTCD_EXTERN unsigned int (*vpx_variance16x8)(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+
+unsigned int vpx_variance32x16_c(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+unsigned int vpx_variance32x16_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+unsigned int vpx_variance32x16_neon_dotprod(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+RTCD_EXTERN unsigned int (*vpx_variance32x16)(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+
+unsigned int vpx_variance32x32_c(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+unsigned int vpx_variance32x32_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+unsigned int vpx_variance32x32_neon_dotprod(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+RTCD_EXTERN unsigned int (*vpx_variance32x32)(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+
+unsigned int vpx_variance32x64_c(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+unsigned int vpx_variance32x64_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+unsigned int vpx_variance32x64_neon_dotprod(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+RTCD_EXTERN unsigned int (*vpx_variance32x64)(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+
+unsigned int vpx_variance4x4_c(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+unsigned int vpx_variance4x4_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+unsigned int vpx_variance4x4_neon_dotprod(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+RTCD_EXTERN unsigned int (*vpx_variance4x4)(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+
+unsigned int vpx_variance4x8_c(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+unsigned int vpx_variance4x8_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+unsigned int vpx_variance4x8_neon_dotprod(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+RTCD_EXTERN unsigned int (*vpx_variance4x8)(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+
+unsigned int vpx_variance64x32_c(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+unsigned int vpx_variance64x32_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+unsigned int vpx_variance64x32_neon_dotprod(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+RTCD_EXTERN unsigned int (*vpx_variance64x32)(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+
+unsigned int vpx_variance64x64_c(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+unsigned int vpx_variance64x64_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+unsigned int vpx_variance64x64_neon_dotprod(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+RTCD_EXTERN unsigned int (*vpx_variance64x64)(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+
+unsigned int vpx_variance8x16_c(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+unsigned int vpx_variance8x16_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+unsigned int vpx_variance8x16_neon_dotprod(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+RTCD_EXTERN unsigned int (*vpx_variance8x16)(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+
+unsigned int vpx_variance8x4_c(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+unsigned int vpx_variance8x4_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+unsigned int vpx_variance8x4_neon_dotprod(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+RTCD_EXTERN unsigned int (*vpx_variance8x4)(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+
+unsigned int vpx_variance8x8_c(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+unsigned int vpx_variance8x8_neon(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+unsigned int vpx_variance8x8_neon_dotprod(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+RTCD_EXTERN unsigned int (*vpx_variance8x8)(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+
+void vpx_ve_predictor_4x4_c(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left);
+#define vpx_ve_predictor_4x4 vpx_ve_predictor_4x4_c
+
+int vpx_vector_var_c(const int16_t *ref, const int16_t *src, const int bwl);
+int vpx_vector_var_neon(const int16_t *ref, const int16_t *src, const int bwl);
+#define vpx_vector_var vpx_vector_var_neon
+
+void vpx_dsp_rtcd(void);
+
+#include "vpx_config.h"
+
+#ifdef RTCD_C
+#include "vpx_ports/arm.h"
+static void setup_rtcd_internal(void)
+{
+ int flags = arm_cpu_caps();
+
+ (void)flags;
+
+ vpx_convolve8 = vpx_convolve8_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_convolve8 = vpx_convolve8_neon_dotprod;
+ if (flags & HAS_NEON_I8MM) vpx_convolve8 = vpx_convolve8_neon_i8mm;
+ vpx_convolve8_avg = vpx_convolve8_avg_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_convolve8_avg = vpx_convolve8_avg_neon_dotprod;
+ if (flags & HAS_NEON_I8MM) vpx_convolve8_avg = vpx_convolve8_avg_neon_i8mm;
+ vpx_convolve8_avg_horiz = vpx_convolve8_avg_horiz_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_convolve8_avg_horiz = vpx_convolve8_avg_horiz_neon_dotprod;
+ if (flags & HAS_NEON_I8MM) vpx_convolve8_avg_horiz = vpx_convolve8_avg_horiz_neon_i8mm;
+ vpx_convolve8_avg_vert = vpx_convolve8_avg_vert_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_convolve8_avg_vert = vpx_convolve8_avg_vert_neon_dotprod;
+ if (flags & HAS_NEON_I8MM) vpx_convolve8_avg_vert = vpx_convolve8_avg_vert_neon_i8mm;
+ vpx_convolve8_horiz = vpx_convolve8_horiz_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_convolve8_horiz = vpx_convolve8_horiz_neon_dotprod;
+ if (flags & HAS_NEON_I8MM) vpx_convolve8_horiz = vpx_convolve8_horiz_neon_i8mm;
+ vpx_convolve8_vert = vpx_convolve8_vert_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_convolve8_vert = vpx_convolve8_vert_neon_dotprod;
+ if (flags & HAS_NEON_I8MM) vpx_convolve8_vert = vpx_convolve8_vert_neon_i8mm;
+ vpx_get16x16var = vpx_get16x16var_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_get16x16var = vpx_get16x16var_neon_dotprod;
+ vpx_get4x4sse_cs = vpx_get4x4sse_cs_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_get4x4sse_cs = vpx_get4x4sse_cs_neon_dotprod;
+ vpx_get8x8var = vpx_get8x8var_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_get8x8var = vpx_get8x8var_neon_dotprod;
+ vpx_mse16x16 = vpx_mse16x16_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_mse16x16 = vpx_mse16x16_neon_dotprod;
+ vpx_mse16x8 = vpx_mse16x8_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_mse16x8 = vpx_mse16x8_neon_dotprod;
+ vpx_mse8x16 = vpx_mse8x16_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_mse8x16 = vpx_mse8x16_neon_dotprod;
+ vpx_mse8x8 = vpx_mse8x8_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_mse8x8 = vpx_mse8x8_neon_dotprod;
+ vpx_sad16x16 = vpx_sad16x16_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_sad16x16 = vpx_sad16x16_neon_dotprod;
+ vpx_sad16x16_avg = vpx_sad16x16_avg_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_sad16x16_avg = vpx_sad16x16_avg_neon_dotprod;
+ vpx_sad16x16x4d = vpx_sad16x16x4d_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_sad16x16x4d = vpx_sad16x16x4d_neon_dotprod;
+ vpx_sad16x32 = vpx_sad16x32_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_sad16x32 = vpx_sad16x32_neon_dotprod;
+ vpx_sad16x32_avg = vpx_sad16x32_avg_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_sad16x32_avg = vpx_sad16x32_avg_neon_dotprod;
+ vpx_sad16x32x4d = vpx_sad16x32x4d_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_sad16x32x4d = vpx_sad16x32x4d_neon_dotprod;
+ vpx_sad16x8 = vpx_sad16x8_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_sad16x8 = vpx_sad16x8_neon_dotprod;
+ vpx_sad16x8_avg = vpx_sad16x8_avg_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_sad16x8_avg = vpx_sad16x8_avg_neon_dotprod;
+ vpx_sad16x8x4d = vpx_sad16x8x4d_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_sad16x8x4d = vpx_sad16x8x4d_neon_dotprod;
+ vpx_sad32x16 = vpx_sad32x16_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_sad32x16 = vpx_sad32x16_neon_dotprod;
+ vpx_sad32x16_avg = vpx_sad32x16_avg_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_sad32x16_avg = vpx_sad32x16_avg_neon_dotprod;
+ vpx_sad32x16x4d = vpx_sad32x16x4d_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_sad32x16x4d = vpx_sad32x16x4d_neon_dotprod;
+ vpx_sad32x32 = vpx_sad32x32_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_sad32x32 = vpx_sad32x32_neon_dotprod;
+ vpx_sad32x32_avg = vpx_sad32x32_avg_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_sad32x32_avg = vpx_sad32x32_avg_neon_dotprod;
+ vpx_sad32x32x4d = vpx_sad32x32x4d_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_sad32x32x4d = vpx_sad32x32x4d_neon_dotprod;
+ vpx_sad32x64 = vpx_sad32x64_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_sad32x64 = vpx_sad32x64_neon_dotprod;
+ vpx_sad32x64_avg = vpx_sad32x64_avg_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_sad32x64_avg = vpx_sad32x64_avg_neon_dotprod;
+ vpx_sad32x64x4d = vpx_sad32x64x4d_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_sad32x64x4d = vpx_sad32x64x4d_neon_dotprod;
+ vpx_sad64x32 = vpx_sad64x32_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_sad64x32 = vpx_sad64x32_neon_dotprod;
+ vpx_sad64x32_avg = vpx_sad64x32_avg_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_sad64x32_avg = vpx_sad64x32_avg_neon_dotprod;
+ vpx_sad64x32x4d = vpx_sad64x32x4d_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_sad64x32x4d = vpx_sad64x32x4d_neon_dotprod;
+ vpx_sad64x64 = vpx_sad64x64_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_sad64x64 = vpx_sad64x64_neon_dotprod;
+ vpx_sad64x64_avg = vpx_sad64x64_avg_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_sad64x64_avg = vpx_sad64x64_avg_neon_dotprod;
+ vpx_sad64x64x4d = vpx_sad64x64x4d_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_sad64x64x4d = vpx_sad64x64x4d_neon_dotprod;
+ vpx_sad_skip_16x16 = vpx_sad_skip_16x16_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_sad_skip_16x16 = vpx_sad_skip_16x16_neon_dotprod;
+ vpx_sad_skip_16x16x4d = vpx_sad_skip_16x16x4d_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_sad_skip_16x16x4d = vpx_sad_skip_16x16x4d_neon_dotprod;
+ vpx_sad_skip_16x32 = vpx_sad_skip_16x32_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_sad_skip_16x32 = vpx_sad_skip_16x32_neon_dotprod;
+ vpx_sad_skip_16x32x4d = vpx_sad_skip_16x32x4d_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_sad_skip_16x32x4d = vpx_sad_skip_16x32x4d_neon_dotprod;
+ vpx_sad_skip_16x8 = vpx_sad_skip_16x8_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_sad_skip_16x8 = vpx_sad_skip_16x8_neon_dotprod;
+ vpx_sad_skip_16x8x4d = vpx_sad_skip_16x8x4d_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_sad_skip_16x8x4d = vpx_sad_skip_16x8x4d_neon_dotprod;
+ vpx_sad_skip_32x16 = vpx_sad_skip_32x16_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_sad_skip_32x16 = vpx_sad_skip_32x16_neon_dotprod;
+ vpx_sad_skip_32x16x4d = vpx_sad_skip_32x16x4d_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_sad_skip_32x16x4d = vpx_sad_skip_32x16x4d_neon_dotprod;
+ vpx_sad_skip_32x32 = vpx_sad_skip_32x32_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_sad_skip_32x32 = vpx_sad_skip_32x32_neon_dotprod;
+ vpx_sad_skip_32x32x4d = vpx_sad_skip_32x32x4d_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_sad_skip_32x32x4d = vpx_sad_skip_32x32x4d_neon_dotprod;
+ vpx_sad_skip_32x64 = vpx_sad_skip_32x64_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_sad_skip_32x64 = vpx_sad_skip_32x64_neon_dotprod;
+ vpx_sad_skip_32x64x4d = vpx_sad_skip_32x64x4d_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_sad_skip_32x64x4d = vpx_sad_skip_32x64x4d_neon_dotprod;
+ vpx_sad_skip_64x32 = vpx_sad_skip_64x32_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_sad_skip_64x32 = vpx_sad_skip_64x32_neon_dotprod;
+ vpx_sad_skip_64x32x4d = vpx_sad_skip_64x32x4d_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_sad_skip_64x32x4d = vpx_sad_skip_64x32x4d_neon_dotprod;
+ vpx_sad_skip_64x64 = vpx_sad_skip_64x64_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_sad_skip_64x64 = vpx_sad_skip_64x64_neon_dotprod;
+ vpx_sad_skip_64x64x4d = vpx_sad_skip_64x64x4d_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_sad_skip_64x64x4d = vpx_sad_skip_64x64x4d_neon_dotprod;
+ vpx_sse = vpx_sse_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_sse = vpx_sse_neon_dotprod;
+ vpx_sum_squares_2d_i16 = vpx_sum_squares_2d_i16_neon;
+ if (flags & HAS_SVE) vpx_sum_squares_2d_i16 = vpx_sum_squares_2d_i16_sve;
+ vpx_variance16x16 = vpx_variance16x16_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_variance16x16 = vpx_variance16x16_neon_dotprod;
+ vpx_variance16x32 = vpx_variance16x32_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_variance16x32 = vpx_variance16x32_neon_dotprod;
+ vpx_variance16x8 = vpx_variance16x8_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_variance16x8 = vpx_variance16x8_neon_dotprod;
+ vpx_variance32x16 = vpx_variance32x16_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_variance32x16 = vpx_variance32x16_neon_dotprod;
+ vpx_variance32x32 = vpx_variance32x32_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_variance32x32 = vpx_variance32x32_neon_dotprod;
+ vpx_variance32x64 = vpx_variance32x64_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_variance32x64 = vpx_variance32x64_neon_dotprod;
+ vpx_variance4x4 = vpx_variance4x4_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_variance4x4 = vpx_variance4x4_neon_dotprod;
+ vpx_variance4x8 = vpx_variance4x8_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_variance4x8 = vpx_variance4x8_neon_dotprod;
+ vpx_variance64x32 = vpx_variance64x32_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_variance64x32 = vpx_variance64x32_neon_dotprod;
+ vpx_variance64x64 = vpx_variance64x64_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_variance64x64 = vpx_variance64x64_neon_dotprod;
+ vpx_variance8x16 = vpx_variance8x16_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_variance8x16 = vpx_variance8x16_neon_dotprod;
+ vpx_variance8x4 = vpx_variance8x4_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_variance8x4 = vpx_variance8x4_neon_dotprod;
+ vpx_variance8x8 = vpx_variance8x8_neon;
+ if (flags & HAS_NEON_DOTPROD) vpx_variance8x8 = vpx_variance8x8_neon_dotprod;
+}
+#endif
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
+
+#endif
diff --git a/media/libvpx/config/mac/arm64/vpx_scale_rtcd.h b/media/libvpx/config/mac/arm64/vpx_scale_rtcd.h
new file mode 100644
index 0000000000..b371368275
--- /dev/null
+++ b/media/libvpx/config/mac/arm64/vpx_scale_rtcd.h
@@ -0,0 +1,75 @@
+// This file is generated. Do not edit.
+#ifndef VPX_SCALE_RTCD_H_
+#define VPX_SCALE_RTCD_H_
+
+#ifdef RTCD_C
+#define RTCD_EXTERN
+#else
+#define RTCD_EXTERN extern
+#endif
+
+struct yv12_buffer_config;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void vp8_horizontal_line_2_1_scale_c(const unsigned char *source, unsigned int source_width, unsigned char *dest, unsigned int dest_width);
+#define vp8_horizontal_line_2_1_scale vp8_horizontal_line_2_1_scale_c
+
+void vp8_horizontal_line_5_3_scale_c(const unsigned char *source, unsigned int source_width, unsigned char *dest, unsigned int dest_width);
+#define vp8_horizontal_line_5_3_scale vp8_horizontal_line_5_3_scale_c
+
+void vp8_horizontal_line_5_4_scale_c(const unsigned char *source, unsigned int source_width, unsigned char *dest, unsigned int dest_width);
+#define vp8_horizontal_line_5_4_scale vp8_horizontal_line_5_4_scale_c
+
+void vp8_vertical_band_2_1_scale_c(unsigned char *source, unsigned int src_pitch, unsigned char *dest, unsigned int dest_pitch, unsigned int dest_width);
+#define vp8_vertical_band_2_1_scale vp8_vertical_band_2_1_scale_c
+
+void vp8_vertical_band_2_1_scale_i_c(unsigned char *source, unsigned int src_pitch, unsigned char *dest, unsigned int dest_pitch, unsigned int dest_width);
+#define vp8_vertical_band_2_1_scale_i vp8_vertical_band_2_1_scale_i_c
+
+void vp8_vertical_band_5_3_scale_c(unsigned char *source, unsigned int src_pitch, unsigned char *dest, unsigned int dest_pitch, unsigned int dest_width);
+#define vp8_vertical_band_5_3_scale vp8_vertical_band_5_3_scale_c
+
+void vp8_vertical_band_5_4_scale_c(unsigned char *source, unsigned int src_pitch, unsigned char *dest, unsigned int dest_pitch, unsigned int dest_width);
+#define vp8_vertical_band_5_4_scale vp8_vertical_band_5_4_scale_c
+
+void vp8_yv12_copy_frame_c(const struct yv12_buffer_config *src_ybc, struct yv12_buffer_config *dst_ybc);
+#define vp8_yv12_copy_frame vp8_yv12_copy_frame_c
+
+void vp8_yv12_extend_frame_borders_c(struct yv12_buffer_config *ybf);
+#define vp8_yv12_extend_frame_borders vp8_yv12_extend_frame_borders_c
+
+void vpx_extend_frame_borders_c(struct yv12_buffer_config *ybf);
+#define vpx_extend_frame_borders vpx_extend_frame_borders_c
+
+void vpx_extend_frame_inner_borders_c(struct yv12_buffer_config *ybf);
+#define vpx_extend_frame_inner_borders vpx_extend_frame_inner_borders_c
+
+void vpx_yv12_copy_frame_c(const struct yv12_buffer_config *src_ybc, struct yv12_buffer_config *dst_ybc);
+#define vpx_yv12_copy_frame vpx_yv12_copy_frame_c
+
+void vpx_yv12_copy_y_c(const struct yv12_buffer_config *src_ybc, struct yv12_buffer_config *dst_ybc);
+#define vpx_yv12_copy_y vpx_yv12_copy_y_c
+
+void vpx_scale_rtcd(void);
+
+#include "vpx_config.h"
+
+#ifdef RTCD_C
+#include "vpx_ports/arm.h"
+static void setup_rtcd_internal(void)
+{
+ int flags = arm_cpu_caps();
+
+ (void)flags;
+
+}
+#endif
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
+
+#endif
diff --git a/media/libvpx/generate_sources_mozbuild.sh b/media/libvpx/generate_sources_mozbuild.sh
index 4efcb54aa1..f84dc75be1 100755
--- a/media/libvpx/generate_sources_mozbuild.sh
+++ b/media/libvpx/generate_sources_mozbuild.sh
@@ -69,6 +69,7 @@ function write_sources {
# Convert a list of source files into sources.mozbuild.
# $1 - Input file.
# $2 - Output prefix.
+# $3 - Path of vpx_config.c under $LIBVPX_CONFIG_DIR
function convert_srcs_to_project_files {
# Do the following here:
# 1. Filter .c, .h, .s, .S and .asm files.
@@ -76,9 +77,17 @@ function convert_srcs_to_project_files {
local source_list=$(grep -E '(\.c|\.h|\.S|\.s|\.asm)$' $1)
- # Remove vpx_config.c.
- # The platform-specific vpx_config.c will be added into in moz.build later.
+ # Adjust the path for vpx_config.c while maintaining list order:
+ # Since the config file resides in $BASE_DIR/$LIBVPX_CONFIG_DIR, while the
+ # files in $source_list are placed under $BASE_DIR/libvpx (see write_sources),
+ # the config file path requires adjustment. To ensure the list remains sorted,
+ # we must first remove it and then insert it at the beginning of the list.
+
+ # Remove vpx_config.c
source_list=$(echo "$source_list" | grep -v 'vpx_config\.c')
+ # Insert vpx_config.c at the beginning of the list.
+ local config=$(echo "../$LIBVPX_CONFIG_DIR/$3/vpx_config.c")
+ source_list=$(echo "$config" ; echo "$source_list")
# Remove include-only asm files (no object code emitted)
source_list=$(echo "$source_list" | grep -v 'x86_abi_support\.asm')
@@ -169,6 +178,7 @@ function gen_rtcd_header {
# $1 - Header file directory.
# $2 - Config command line.
function gen_config_files {
+ mkdir -p $BASE_DIR/$LIBVPX_CONFIG_DIR/$1
./configure $2 --log=$BASE_DIR/$LIBVPX_CONFIG_DIR/$1/config.log > /dev/null
echo "Log file: $BASE_DIR/$LIBVPX_CONFIG_DIR/$1/config.log"
@@ -202,9 +212,9 @@ all_platforms="--enable-external-build --disable-examples --disable-install-docs
all_platforms="${all_platforms} --enable-multi-res-encoding --size-limit=8192x4608 --enable-pic"
all_platforms="${all_platforms} --disable-avx512"
x86_platforms="--enable-postproc --enable-vp9-postproc --as=yasm"
-arm_platforms="--enable-runtime-cpu-detect --enable-realtime-only"
-arm64_platforms="--enable-realtime-only"
-disable_sve="--disable-sve" # Bug 1885585
+runtime_cpu_detect="--enable-runtime-cpu-detect"
+realtime_only="--enable-realtime-only"
+disable_sve="--disable-sve" # Bug 1885585, Bug 1889813
gen_config_files linux/x64 "--target=x86_64-linux-gcc ${all_platforms} ${x86_platforms}"
gen_config_files linux/ia32 "--target=x86-linux-gcc ${all_platforms} ${x86_platforms}"
@@ -213,9 +223,10 @@ gen_config_files mac/ia32 "--target=x86-darwin9-gcc ${all_platforms} ${x86_platf
gen_config_files win/x64 "--target=x86_64-win64-vs15 ${all_platforms} ${x86_platforms}"
gen_config_files win/ia32 "--target=x86-win32-gcc ${all_platforms} ${x86_platforms}"
-gen_config_files linux/arm "--target=armv7-linux-gcc ${all_platforms} ${arm_platforms}"
-gen_config_files linux/arm64 "--target=arm64-linux-gcc ${all_platforms} ${arm64_platforms}"
-gen_config_files win/aarch64 "--target=arm64-win64-vs15 ${all_platforms} ${arm64_platforms} ${disable_sve}" # Bug 1885585
+gen_config_files linux/arm "--target=armv7-linux-gcc ${all_platforms} ${runtime_cpu_detect} ${realtime_only}"
+gen_config_files linux/arm64 "--target=arm64-linux-gcc ${all_platforms} ${realtime_only} ${disable_sve}" # Bug 1889813
+gen_config_files mac/arm64 "--target=arm64-darwin-gcc ${all_platforms}"
+gen_config_files win/aarch64 "--target=arm64-win64-vs15 ${all_platforms} ${realtime_only} ${disable_sve}" # Bug 1885585
gen_config_files generic "--target=generic-gnu ${all_platforms}"
@@ -237,7 +248,8 @@ gen_rtcd_header win/x64 x86_64
gen_rtcd_header win/ia32 x86
gen_rtcd_header linux/arm armv7
-gen_rtcd_header linux/arm64 arm64
+gen_rtcd_header linux/arm64 arm64 $disable_sve # Bug 1889813
+gen_rtcd_header mac/arm64 arm64
gen_rtcd_header win/aarch64 arm64 $disable_sve # Bug 1885585
gen_rtcd_header generic generic
@@ -251,39 +263,74 @@ rm -rf $BASE_DIR/sources.mozbuild
write_license $BASE_DIR/sources.mozbuild
echo "files = {" >> $BASE_DIR/sources.mozbuild
-echo "Generate X86_64 source list."
+echo "Generate X86_64 source list on Linux."
config=$(print_config linux/x64)
make_clean
make libvpx_srcs.txt target=libs $config > /dev/null
-convert_srcs_to_project_files libvpx_srcs.txt X64
+convert_srcs_to_project_files libvpx_srcs.txt LINUX_X64 linux/x64
+
+echo "Generate X86_64 source list on Mac."
+config=$(print_config mac/x64)
+make_clean
+make libvpx_srcs.txt target=libs $config > /dev/null
+convert_srcs_to_project_files libvpx_srcs.txt MAC_X64 mac/x64
+
+echo "Generate X86_64 source list on Windows."
+config=$(print_config win/x64)
+make_clean
+make libvpx_srcs.txt target=libs $config > /dev/null
+convert_srcs_to_project_files libvpx_srcs.txt WIN_X64 win/x64
# Copy vpx_version.h once. The file is the same for all platforms.
cp vpx_version.h $BASE_DIR/$LIBVPX_CONFIG_DIR
-echo "Generate IA32 source list."
+echo "Generate IA32 source list on Linux."
config=$(print_config linux/ia32)
make_clean
make libvpx_srcs.txt target=libs $config > /dev/null
-convert_srcs_to_project_files libvpx_srcs.txt IA32
+convert_srcs_to_project_files libvpx_srcs.txt LINUX_IA32 linux/ia32
+
+echo "Generate IA32 source list on Mac."
+config=$(print_config mac/ia32)
+make_clean
+make libvpx_srcs.txt target=libs $config > /dev/null
+convert_srcs_to_project_files libvpx_srcs.txt MAC_IA32 mac/ia32
-echo "Generate ARM source list."
+echo "Generate IA32 source list on Windows."
+config=$(print_config win/ia32)
+make_clean
+make libvpx_srcs.txt target=libs $config > /dev/null
+convert_srcs_to_project_files libvpx_srcs.txt WIN_IA32 win/ia32
+
+echo "Generate ARM source list on Linux."
config=$(print_config linux/arm)
make_clean
make libvpx_srcs.txt target=libs $config > /dev/null
-convert_srcs_to_project_files libvpx_srcs.txt ARM
+convert_srcs_to_project_files libvpx_srcs.txt LINUX_ARM linux/arm
-echo "Generate ARM64 source list."
+echo "Generate ARM64 source list on Linux"
config=$(print_config linux/arm64)
make_clean
make libvpx_srcs.txt target=libs $config > /dev/null
-convert_srcs_to_project_files libvpx_srcs.txt ARM64
-# Bug 1885585: The sve files will be excluded from the win/aarch64 build in moz.build.
+convert_srcs_to_project_files libvpx_srcs.txt LINUX_ARM64 linux/arm64
+
+echo "Generate ARM64 source list on Mac"
+config=$(print_config mac/arm64)
+make_clean
+make libvpx_srcs.txt target=libs $config > /dev/null
+convert_srcs_to_project_files libvpx_srcs.txt MAC_ARM64 mac/arm64
+
+echo "Generate AARCH64 source list on Windows."
+config=$(print_config win/aarch64)
+make_clean
+make libvpx_srcs.txt target=libs $config > /dev/null
+convert_srcs_to_project_files libvpx_srcs.txt WIN_AARCH64 win/aarch64
echo "Generate generic source list."
config=$(print_config generic)
make_clean
make libvpx_srcs.txt target=libs $config > /dev/null
-convert_srcs_to_project_files libvpx_srcs.txt GENERIC
+convert_srcs_to_project_files libvpx_srcs.txt GENERIC generic
echo "}" >> $BASE_DIR/sources.mozbuild
diff --git a/media/libvpx/libvpx/build/make/rtcd.pl b/media/libvpx/libvpx/build/make/rtcd.pl
index 025238d678..d84966d83b 100755
--- a/media/libvpx/libvpx/build/make/rtcd.pl
+++ b/media/libvpx/libvpx/build/make/rtcd.pl
@@ -73,6 +73,10 @@ sub vpx_config($) {
}
sub specialize {
+ if (@_ <= 1) {
+ die "'specialize' must be called with a function name and at least one ",
+ "architecture ('C' is implied): \n@_\n";
+ }
my $fn=$_[0];
shift;
foreach my $opt (@_) {
diff --git a/media/libvpx/libvpx/test/add_noise_test.cc b/media/libvpx/libvpx/test/add_noise_test.cc
index 4fc4e81e63..8f1c3be041 100644
--- a/media/libvpx/libvpx/test/add_noise_test.cc
+++ b/media/libvpx/libvpx/test/add_noise_test.cc
@@ -16,6 +16,7 @@
#include "third_party/googletest/src/include/gtest/gtest.h"
#include "./vpx_dsp_rtcd.h"
#include "vpx/vpx_integer.h"
+#include "vpx_config.h"
#include "vpx_dsp/postproc.h"
#include "vpx_mem/vpx_mem.h"
diff --git a/media/libvpx/libvpx/test/altref_test.cc b/media/libvpx/libvpx/test/altref_test.cc
index 903230fde9..edd2e58361 100644
--- a/media/libvpx/libvpx/test/altref_test.cc
+++ b/media/libvpx/libvpx/test/altref_test.cc
@@ -12,6 +12,7 @@
#include "test/encode_test_driver.h"
#include "test/i420_video_source.h"
#include "test/util.h"
+#include "vpx_config.h"
namespace {
#if CONFIG_VP8_ENCODER
diff --git a/media/libvpx/libvpx/test/bench.cc b/media/libvpx/libvpx/test/bench.cc
index 4b883d8250..0783f2a734 100644
--- a/media/libvpx/libvpx/test/bench.cc
+++ b/media/libvpx/libvpx/test/bench.cc
@@ -10,6 +10,7 @@
#include <stdio.h>
#include <algorithm>
+#include <cstdlib>
#include "test/bench.h"
#include "vpx_ports/vpx_timer.h"
diff --git a/media/libvpx/libvpx/test/borders_test.cc b/media/libvpx/libvpx/test/borders_test.cc
index 2726bd557d..cf8fbd9c83 100644
--- a/media/libvpx/libvpx/test/borders_test.cc
+++ b/media/libvpx/libvpx/test/borders_test.cc
@@ -14,6 +14,7 @@
#include "test/encode_test_driver.h"
#include "test/i420_video_source.h"
#include "test/util.h"
+#include "vpx_config.h"
namespace {
@@ -79,6 +80,11 @@ TEST_P(BordersTest, TestLowBitrate) {
ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
}
+#if CONFIG_REALTIME_ONLY
+VP9_INSTANTIATE_TEST_SUITE(BordersTest,
+ ::testing::Values(::libvpx_test::kRealTime));
+#else
VP9_INSTANTIATE_TEST_SUITE(BordersTest,
::testing::Values(::libvpx_test::kTwoPassGood));
+#endif
} // namespace
diff --git a/media/libvpx/libvpx/test/comp_avg_pred_test.cc b/media/libvpx/libvpx/test/comp_avg_pred_test.cc
index 3234cc9a25..2e8fb5c61d 100644
--- a/media/libvpx/libvpx/test/comp_avg_pred_test.cc
+++ b/media/libvpx/libvpx/test/comp_avg_pred_test.cc
@@ -15,6 +15,7 @@
#include "test/acm_random.h"
#include "test/buffer.h"
#include "test/register_state_check.h"
+#include "vpx_config.h"
#include "vpx_ports/vpx_timer.h"
namespace {
diff --git a/media/libvpx/libvpx/test/convolve_test.cc b/media/libvpx/libvpx/test/convolve_test.cc
index 11f7625137..7594bb77e5 100644
--- a/media/libvpx/libvpx/test/convolve_test.cc
+++ b/media/libvpx/libvpx/test/convolve_test.cc
@@ -1228,10 +1228,16 @@ WRAP(convolve8_avg_horiz_sve, 12)
#endif // HAVE_SVE
#if HAVE_SVE2
+WRAP(convolve8_sve2, 8)
+WRAP(convolve8_avg_sve2, 8)
WRAP(convolve8_vert_sve2, 8)
WRAP(convolve8_avg_vert_sve2, 8)
+WRAP(convolve8_sve2, 10)
+WRAP(convolve8_avg_sve2, 10)
WRAP(convolve8_vert_sve2, 10)
WRAP(convolve8_avg_vert_sve2, 10)
+WRAP(convolve8_sve2, 12)
+WRAP(convolve8_avg_sve2, 12)
WRAP(convolve8_vert_sve2, 12)
WRAP(convolve8_avg_vert_sve2, 12)
#endif // HAVE_SVE2
@@ -1495,23 +1501,23 @@ INSTANTIATE_TEST_SUITE_P(SVE, ConvolveTest,
const ConvolveFunctions convolve8_sve2(
wrap_convolve_copy_c_8, wrap_convolve_avg_c_8, wrap_convolve8_horiz_c_8,
wrap_convolve8_avg_horiz_c_8, wrap_convolve8_vert_sve2_8,
- wrap_convolve8_avg_vert_sve2_8, wrap_convolve8_c_8, wrap_convolve8_avg_c_8,
- wrap_convolve8_horiz_c_8, wrap_convolve8_avg_horiz_c_8,
- wrap_convolve8_vert_c_8, wrap_convolve8_avg_vert_c_8, wrap_convolve8_c_8,
- wrap_convolve8_avg_c_8, 8);
+ wrap_convolve8_avg_vert_sve2_8, wrap_convolve8_sve2_8,
+ wrap_convolve8_avg_sve2_8, wrap_convolve8_horiz_c_8,
+ wrap_convolve8_avg_horiz_c_8, wrap_convolve8_vert_c_8,
+ wrap_convolve8_avg_vert_c_8, wrap_convolve8_c_8, wrap_convolve8_avg_c_8, 8);
const ConvolveFunctions convolve10_sve2(
wrap_convolve_copy_c_10, wrap_convolve_avg_c_10, wrap_convolve8_horiz_c_10,
wrap_convolve8_avg_horiz_c_10, wrap_convolve8_vert_sve2_10,
- wrap_convolve8_avg_vert_sve2_10, wrap_convolve8_c_10,
- wrap_convolve8_avg_c_10, wrap_convolve8_horiz_c_10,
+ wrap_convolve8_avg_vert_sve2_10, wrap_convolve8_sve2_10,
+ wrap_convolve8_avg_sve2_10, wrap_convolve8_horiz_c_10,
wrap_convolve8_avg_horiz_c_10, wrap_convolve8_vert_c_10,
wrap_convolve8_avg_vert_c_10, wrap_convolve8_c_10, wrap_convolve8_avg_c_10,
10);
const ConvolveFunctions convolve12_sve2(
wrap_convolve_copy_c_12, wrap_convolve_avg_c_12, wrap_convolve8_horiz_c_12,
wrap_convolve8_avg_horiz_c_12, wrap_convolve8_vert_sve2_12,
- wrap_convolve8_avg_vert_sve2_12, wrap_convolve8_c_12,
- wrap_convolve8_avg_c_12, wrap_convolve8_horiz_c_12,
+ wrap_convolve8_avg_vert_sve2_12, wrap_convolve8_sve2_12,
+ wrap_convolve8_avg_sve2_12, wrap_convolve8_horiz_c_12,
wrap_convolve8_avg_horiz_c_12, wrap_convolve8_vert_c_12,
wrap_convolve8_avg_vert_c_12, wrap_convolve8_c_12, wrap_convolve8_avg_c_12,
12);
diff --git a/media/libvpx/libvpx/test/cpu_speed_test.cc b/media/libvpx/libvpx/test/cpu_speed_test.cc
index 22f4552963..ee00cc4cf2 100644
--- a/media/libvpx/libvpx/test/cpu_speed_test.cc
+++ b/media/libvpx/libvpx/test/cpu_speed_test.cc
@@ -148,9 +148,6 @@ TEST_P(CpuSpeedTest, TestLowBitrate) {
ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
}
-VP9_INSTANTIATE_TEST_SUITE(CpuSpeedTest,
- ::testing::Values(::libvpx_test::kTwoPassGood,
- ::libvpx_test::kOnePassGood,
- ::libvpx_test::kRealTime),
+VP9_INSTANTIATE_TEST_SUITE(CpuSpeedTest, ONE_PASS_TEST_MODES,
::testing::Range(0, 10));
} // namespace
diff --git a/media/libvpx/libvpx/test/cq_test.cc b/media/libvpx/libvpx/test/cq_test.cc
index b74915a336..4ccdf8538b 100644
--- a/media/libvpx/libvpx/test/cq_test.cc
+++ b/media/libvpx/libvpx/test/cq_test.cc
@@ -14,6 +14,7 @@
#include "test/encode_test_driver.h"
#include "test/i420_video_source.h"
#include "test/util.h"
+#include "vpx_config.h"
namespace {
@@ -104,6 +105,10 @@ CQTest::BitrateMap CQTest::bitrates_;
TEST_P(CQTest, LinearPSNRIsHigherForCQLevel) {
const vpx_rational timebase = { 33333333, 1000000000 };
+#if CONFIG_REALTIME_ONlY
+ GTEST_SKIP()
+ << "Non-zero g_lag_in_frames is unsupported with CONFIG_REALTIME_ONLY";
+#else
cfg_.g_timebase = timebase;
cfg_.rc_target_bitrate = kCQTargetBitrate;
cfg_.g_lag_in_frames = 25;
@@ -124,6 +129,7 @@ TEST_P(CQTest, LinearPSNRIsHigherForCQLevel) {
ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
const double vbr_psnr_lin = GetLinearPSNROverBitrate();
EXPECT_GE(cq_psnr_lin, vbr_psnr_lin);
+#endif // CONFIG_REALTIME_ONLY
}
VP8_INSTANTIATE_TEST_SUITE(CQTest, ::testing::Range(kCQLevelMin, kCQLevelMax,
diff --git a/media/libvpx/libvpx/test/dct16x16_test.cc b/media/libvpx/libvpx/test/dct16x16_test.cc
index 8c4213ee16..f5e1cbb15b 100644
--- a/media/libvpx/libvpx/test/dct16x16_test.cc
+++ b/media/libvpx/libvpx/test/dct16x16_test.cc
@@ -25,6 +25,7 @@
#include "vp9/common/vp9_scan.h"
#include "vpx/vpx_codec.h"
#include "vpx/vpx_integer.h"
+#include "vpx_config.h"
#include "vpx_ports/mem.h"
#include "vpx_ports/msvc.h" // for round()
#include "vpx_ports/vpx_timer.h"
diff --git a/media/libvpx/libvpx/test/dct_partial_test.cc b/media/libvpx/libvpx/test/dct_partial_test.cc
index ec6f543f71..d9844c6c48 100644
--- a/media/libvpx/libvpx/test/dct_partial_test.cc
+++ b/media/libvpx/libvpx/test/dct_partial_test.cc
@@ -22,6 +22,7 @@
#include "test/clear_system_state.h"
#include "test/register_state_check.h"
#include "test/util.h"
+#include "vpx_config.h"
#include "vpx/vpx_codec.h"
#include "vpx/vpx_integer.h"
#include "vpx_dsp/vpx_dsp_common.h"
diff --git a/media/libvpx/libvpx/test/dct_test.cc b/media/libvpx/libvpx/test/dct_test.cc
index c3d3081c42..d5ae81b498 100644
--- a/media/libvpx/libvpx/test/dct_test.cc
+++ b/media/libvpx/libvpx/test/dct_test.cc
@@ -23,6 +23,7 @@
#include "test/register_state_check.h"
#include "test/util.h"
#include "vp9/common/vp9_entropy.h"
+#include "vpx_config.h"
#include "vpx/vpx_codec.h"
#include "vpx/vpx_integer.h"
#include "vpx_ports/mem.h"
diff --git a/media/libvpx/libvpx/test/decode_corrupted.cc b/media/libvpx/libvpx/test/decode_corrupted.cc
index 58773d7b86..a03bf3ba86 100644
--- a/media/libvpx/libvpx/test/decode_corrupted.cc
+++ b/media/libvpx/libvpx/test/decode_corrupted.cc
@@ -16,6 +16,7 @@
#include "test/encode_test_driver.h"
#include "test/util.h"
#include "test/i420_video_source.h"
+#include "vpx_config.h"
#include "vpx_mem/vpx_mem.h"
namespace {
diff --git a/media/libvpx/libvpx/test/encode_api_test.cc b/media/libvpx/libvpx/test/encode_api_test.cc
index ca3b17a5d5..155b83544a 100644
--- a/media/libvpx/libvpx/test/encode_api_test.cc
+++ b/media/libvpx/libvpx/test/encode_api_test.cc
@@ -847,6 +847,10 @@ TEST(EncodeAPI, PtsOrDurationTooBig) {
// 32-bit systems defined by VPX_MAX_ALLOCABLE_MEMORY
#if VPX_ARCH_X86_64 || VPX_ARCH_AARCH64
TEST(EncodeAPI, ConfigLargeTargetBitrateVp9) {
+#ifdef CHROMIUM
+ GTEST_SKIP() << "Under Chromium's configuration the allocator is unable"
+ "to provide the space required for the frames below.";
+#else
constexpr int kWidth = 12383;
constexpr int kHeight = 8192;
constexpr auto *iface = &vpx_codec_vp9_cx_algo;
@@ -868,6 +872,7 @@ TEST(EncodeAPI, ConfigLargeTargetBitrateVp9) {
EXPECT_NO_FATAL_FAILURE(InitCodec(*iface, kWidth, kHeight, &enc.ctx, &cfg))
<< "target bitrate: " << cfg.rc_target_bitrate << " framerate: "
<< static_cast<double>(cfg.g_timebase.den) / cfg.g_timebase.num;
+#endif // defined(CHROMIUM)
}
#endif // VPX_ARCH_X86_64 || VPX_ARCH_AARCH64
@@ -875,12 +880,14 @@ TEST(EncodeAPI, ConfigLargeTargetBitrateVp9) {
class VP9Encoder {
public:
explicit VP9Encoder(int speed)
- : speed_(speed), bit_depth_(VPX_BITS_8), fmt_(VPX_IMG_FMT_I420) {}
+ : speed_(speed), row_mt_(0), bit_depth_(VPX_BITS_8),
+ fmt_(VPX_IMG_FMT_I420) {}
// The image format `fmt` must not have the VPX_IMG_FMT_HIGHBITDEPTH bit set.
// If bit_depth > 8, we will set the VPX_IMG_FMT_HIGHBITDEPTH bit before
// passing the image format to vpx_img_alloc().
- VP9Encoder(int speed, vpx_bit_depth_t bit_depth, vpx_img_fmt_t fmt)
- : speed_(speed), bit_depth_(bit_depth), fmt_(fmt) {}
+ VP9Encoder(int speed, unsigned int row_mt, vpx_bit_depth_t bit_depth,
+ vpx_img_fmt_t fmt)
+ : speed_(speed), row_mt_(row_mt), bit_depth_(bit_depth), fmt_(fmt) {}
~VP9Encoder();
void Configure(unsigned int threads, unsigned int width, unsigned int height,
@@ -889,6 +896,7 @@ class VP9Encoder {
private:
const int speed_;
+ const unsigned int row_mt_;
const vpx_bit_depth_t bit_depth_;
const vpx_img_fmt_t fmt_;
bool initialized_ = false;
@@ -938,6 +946,7 @@ void VP9Encoder::Configure(unsigned int threads, unsigned int width,
high_bit_depth ? VPX_CODEC_USE_HIGHBITDEPTH : 0),
VPX_CODEC_OK);
ASSERT_EQ(vpx_codec_control(&enc_, VP8E_SET_CPUUSED, speed_), VPX_CODEC_OK);
+ ASSERT_EQ(vpx_codec_control(&enc_, VP9E_SET_ROW_MT, row_mt_), VPX_CODEC_OK);
initialized_ = true;
return;
}
@@ -1312,6 +1321,145 @@ TEST(EncodeAPI, Buganizer319964497) {
encoder.Encode(/*key_frame=*/false);
}
+TEST(EncodeAPI, Buganizer329088759RowMT0) {
+ VP9Encoder encoder(8, 0, VPX_BITS_8, VPX_IMG_FMT_I444);
+ encoder.Configure(/*threads=*/8, /*width=*/1686, /*height=*/398, VPX_VBR,
+ VPX_DL_REALTIME);
+ encoder.Encode(/*key_frame=*/true);
+ encoder.Encode(/*key_frame=*/false);
+ encoder.Configure(/*threads=*/0, /*width=*/1686, /*height=*/1, VPX_VBR,
+ VPX_DL_REALTIME);
+ encoder.Encode(/*key_frame=*/true);
+ encoder.Configure(/*threads=*/0, /*width=*/1482, /*height=*/113, VPX_CBR,
+ VPX_DL_REALTIME);
+ encoder.Encode(/*key_frame=*/true);
+ encoder.Configure(/*threads=*/0, /*width=*/881, /*height=*/59, VPX_CBR,
+ VPX_DL_REALTIME);
+ encoder.Configure(/*threads=*/13, /*width=*/1271, /*height=*/385, VPX_CBR,
+ VPX_DL_REALTIME);
+ encoder.Encode(/*key_frame=*/false);
+ encoder.Configure(/*threads=*/2, /*width=*/1, /*height=*/62, VPX_VBR,
+ VPX_DL_REALTIME);
+}
+
+TEST(EncodeAPI, Buganizer329088759RowMT1) {
+ VP9Encoder encoder(8, 1, VPX_BITS_8, VPX_IMG_FMT_I444);
+ encoder.Configure(/*threads=*/8, /*width=*/1686, /*height=*/398, VPX_VBR,
+ VPX_DL_REALTIME);
+ encoder.Encode(/*key_frame=*/true);
+ encoder.Encode(/*key_frame=*/false);
+ // Needs to set threads to non-zero to repro the issue.
+ encoder.Configure(/*threads=*/2, /*width=*/1686, /*height=*/1, VPX_VBR,
+ VPX_DL_REALTIME);
+ encoder.Encode(/*key_frame=*/true);
+ encoder.Configure(/*threads=*/2, /*width=*/1482, /*height=*/113, VPX_CBR,
+ VPX_DL_REALTIME);
+ encoder.Encode(/*key_frame=*/true);
+ encoder.Configure(/*threads=*/2, /*width=*/881, /*height=*/59, VPX_CBR,
+ VPX_DL_REALTIME);
+ encoder.Configure(/*threads=*/13, /*width=*/1271, /*height=*/385, VPX_CBR,
+ VPX_DL_REALTIME);
+ encoder.Encode(/*key_frame=*/false);
+ encoder.Configure(/*threads=*/2, /*width=*/1, /*height=*/62, VPX_VBR,
+ VPX_DL_REALTIME);
+}
+
+TEST(EncodeAPI, Buganizer331086799) {
+ VP9Encoder encoder(6, 1, VPX_BITS_8, VPX_IMG_FMT_I420);
+ encoder.Configure(0, 1385, 1, VPX_CBR, VPX_DL_REALTIME);
+ encoder.Configure(0, 1, 1, VPX_VBR, VPX_DL_REALTIME);
+ encoder.Encode(false);
+ encoder.Configure(16, 1385, 1, VPX_VBR, VPX_DL_GOOD_QUALITY);
+ encoder.Encode(false);
+ encoder.Encode(false);
+ encoder.Configure(0, 1, 1, VPX_CBR, VPX_DL_REALTIME);
+ encoder.Encode(true);
+}
+
+TEST(EncodeAPI, Buganizer331108729) {
+ VP9Encoder encoder(1, 1, VPX_BITS_8, VPX_IMG_FMT_I422);
+ encoder.Configure(0, 1919, 260, VPX_VBR, VPX_DL_REALTIME);
+ encoder.Configure(9, 440, 1, VPX_CBR, VPX_DL_GOOD_QUALITY);
+ encoder.Encode(true);
+ encoder.Configure(8, 1919, 260, VPX_VBR, VPX_DL_REALTIME);
+ encoder.Encode(false);
+}
+
+TEST(EncodeAPI, Buganizer331108922BitDepth8) {
+ VP9Encoder encoder(9, 1, VPX_BITS_8, VPX_IMG_FMT_I420);
+ encoder.Configure(/*threads=*/1, /*width=*/1, /*height=*/1080, VPX_VBR,
+ VPX_DL_REALTIME);
+ encoder.Encode(/*key_frame=*/false);
+ encoder.Configure(/*threads=*/0, /*width=*/1, /*height=*/1080, VPX_CBR,
+ VPX_DL_GOOD_QUALITY);
+ encoder.Configure(/*threads=*/16, /*width=*/1, /*height=*/394, VPX_CBR,
+ VPX_DL_REALTIME);
+ encoder.Encode(/*key_frame=*/false);
+ encoder.Encode(/*key_frame=*/true);
+ encoder.Configure(/*threads=*/16, /*width=*/1, /*height=*/798, VPX_CBR,
+ VPX_DL_REALTIME);
+ encoder.Encode(/*key_frame=*/false);
+}
+
+#if CONFIG_VP9_HIGHBITDEPTH
+TEST(EncodeAPI, Buganizer329674887RowMT0BitDepth12) {
+ VP9Encoder encoder(8, 0, VPX_BITS_12, VPX_IMG_FMT_I444);
+ encoder.Configure(/*threads=*/2, /*width=*/1030, /*height=*/583, VPX_VBR,
+ VPX_DL_REALTIME);
+ encoder.Encode(/*key_frame=*/true);
+ encoder.Configure(/*threads=*/0, /*width=*/1030, /*height=*/1, VPX_CBR,
+ VPX_DL_REALTIME);
+ encoder.Encode(/*key_frame=*/true);
+ encoder.Configure(/*threads=*/0, /*width=*/548, /*height=*/322, VPX_VBR,
+ VPX_DL_REALTIME);
+ encoder.Encode(/*key_frame=*/false);
+ encoder.Configure(/*threads=*/16, /*width=*/24, /*height=*/583, VPX_CBR,
+ VPX_DL_GOOD_QUALITY);
+}
+
+TEST(EncodeAPI, Buganizer329179808RowMT0BitDepth10) {
+ VP9Encoder encoder(4, 0, VPX_BITS_10, VPX_IMG_FMT_I444);
+ encoder.Configure(/*threads=*/16, /*width=*/1488, /*height=*/5, VPX_VBR,
+ VPX_DL_REALTIME);
+ encoder.Encode(/*key_frame=*/true);
+ encoder.Configure(/*threads=*/16, /*width=*/839, /*height=*/1, VPX_CBR,
+ VPX_DL_REALTIME);
+ encoder.Encode(/*key_frame=*/false);
+ encoder.Configure(/*threads=*/11, /*width=*/657, /*height=*/5, VPX_CBR,
+ VPX_DL_REALTIME);
+ encoder.Encode(/*key_frame=*/false);
+}
+
+TEST(EncodeAPI, Buganizer329179808RowMT1BitDepth10) {
+ VP9Encoder encoder(4, 1, VPX_BITS_10, VPX_IMG_FMT_I444);
+ encoder.Configure(/*threads=*/16, /*width=*/1488, /*height=*/5, VPX_VBR,
+ VPX_DL_REALTIME);
+ encoder.Encode(/*key_frame=*/true);
+ encoder.Configure(/*threads=*/16, /*width=*/839, /*height=*/1, VPX_CBR,
+ VPX_DL_REALTIME);
+ encoder.Encode(/*key_frame=*/false);
+ encoder.Configure(/*threads=*/11, /*width=*/657, /*height=*/5, VPX_CBR,
+ VPX_DL_REALTIME);
+ encoder.Encode(/*key_frame=*/false);
+}
+
+TEST(EncodeAPI, Buganizer331108922BitDepth12) {
+ VP9Encoder encoder(9, 1, VPX_BITS_12, VPX_IMG_FMT_I444);
+ encoder.Configure(/*threads=*/1, /*width=*/1, /*height=*/1080, VPX_VBR,
+ VPX_DL_REALTIME);
+ encoder.Encode(/*key_frame=*/false);
+ encoder.Configure(/*threads=*/0, /*width=*/1, /*height=*/1080, VPX_CBR,
+ VPX_DL_GOOD_QUALITY);
+ encoder.Configure(/*threads=*/16, /*width=*/1, /*height=*/394, VPX_CBR,
+ VPX_DL_REALTIME);
+ encoder.Encode(/*key_frame=*/false);
+ encoder.Encode(/*key_frame=*/true);
+ encoder.Configure(/*threads=*/16, /*width=*/1, /*height=*/798, VPX_CBR,
+ VPX_DL_REALTIME);
+ encoder.Encode(/*key_frame=*/false);
+}
+#endif
+
#endif // CONFIG_VP9_ENCODER
} // namespace
diff --git a/media/libvpx/libvpx/test/encode_test_driver.h b/media/libvpx/libvpx/test/encode_test_driver.h
index 7dd80d6664..76a5718021 100644
--- a/media/libvpx/libvpx/test/encode_test_driver.h
+++ b/media/libvpx/libvpx/test/encode_test_driver.h
@@ -33,15 +33,24 @@ enum TestMode {
kTwoPassGood,
kTwoPassBest
};
+
+#if CONFIG_REALTIME_ONLY
+#define ALL_TEST_MODES ::testing::Values(::libvpx_test::kRealTime)
+#define ONE_PASS_TEST_MODES ::testing::Values(::libvpx_test::kRealTime)
+#define ONE_OR_TWO_PASS_TEST_MODES ::testing::Values(::libvpx_test::kRealTime)
+#else
#define ALL_TEST_MODES \
::testing::Values(::libvpx_test::kRealTime, ::libvpx_test::kOnePassGood, \
::libvpx_test::kOnePassBest, ::libvpx_test::kTwoPassGood, \
::libvpx_test::kTwoPassBest)
-
#define ONE_PASS_TEST_MODES \
::testing::Values(::libvpx_test::kRealTime, ::libvpx_test::kOnePassGood, \
::libvpx_test::kOnePassBest)
+#define ONE_OR_TWO_PASS_TEST_MODES \
+ ::testing::Values(::libvpx_test::kOnePassGood, ::libvpx_test::kTwoPassGood)
+#endif
+
#define TWO_PASS_TEST_MODES \
::testing::Values(::libvpx_test::kTwoPassGood, ::libvpx_test::kTwoPassBest)
diff --git a/media/libvpx/libvpx/test/error_resilience_test.cc b/media/libvpx/libvpx/test/error_resilience_test.cc
index 6b019b2bfb..2fbf98fde0 100644
--- a/media/libvpx/libvpx/test/error_resilience_test.cc
+++ b/media/libvpx/libvpx/test/error_resilience_test.cc
@@ -13,6 +13,7 @@
#include "test/encode_test_driver.h"
#include "test/i420_video_source.h"
#include "test/util.h"
+#include "vpx_config.h"
namespace {
@@ -194,6 +195,10 @@ class ErrorResilienceTestLarge
};
TEST_P(ErrorResilienceTestLarge, OnVersusOff) {
+#if CONFIG_REALTIME_ONLY
+ GTEST_SKIP()
+ << "Non-zero g_lag_in_frames is unsupported with CONFIG_REALTIME_ONLY";
+#else
const vpx_rational timebase = { 33333333, 1000000000 };
cfg_.g_timebase = timebase;
cfg_.rc_target_bitrate = 2000;
@@ -222,6 +227,7 @@ TEST_P(ErrorResilienceTestLarge, OnVersusOff) {
EXPECT_GE(psnr_ratio, 0.9);
EXPECT_LE(psnr_ratio, 1.1);
}
+#endif // CONFIG_REALTIME_ONLY
}
// Check for successful decoding and no encoder/decoder mismatch
diff --git a/media/libvpx/libvpx/test/fdct8x8_test.cc b/media/libvpx/libvpx/test/fdct8x8_test.cc
index 3cdf909d46..042f96b0a6 100644
--- a/media/libvpx/libvpx/test/fdct8x8_test.cc
+++ b/media/libvpx/libvpx/test/fdct8x8_test.cc
@@ -23,6 +23,7 @@
#include "test/util.h"
#include "vp9/common/vp9_entropy.h"
#include "vp9/common/vp9_scan.h"
+#include "vpx_config.h"
#include "vpx/vpx_codec.h"
#include "vpx/vpx_integer.h"
#include "vpx_ports/mem.h"
diff --git a/media/libvpx/libvpx/test/frame_size_tests.cc b/media/libvpx/libvpx/test/frame_size_tests.cc
index 6306e4f2ca..235f34857a 100644
--- a/media/libvpx/libvpx/test/frame_size_tests.cc
+++ b/media/libvpx/libvpx/test/frame_size_tests.cc
@@ -13,6 +13,7 @@
#include "test/codec_factory.h"
#include "test/register_state_check.h"
#include "test/video_source.h"
+#include "vpx_config.h"
namespace {
@@ -167,6 +168,9 @@ class VP9FrameSizeTestsLarge : public ::libvpx_test::EncoderTest,
};
TEST_F(VP9FrameSizeTestsLarge, TestInvalidSizes) {
+#ifdef CHROMIUM
+ GTEST_SKIP() << "16K framebuffers are not supported by Chromium's allocator.";
+#else
::libvpx_test::RandomVideoSource video;
#if CONFIG_SIZE_LIMIT
@@ -175,9 +179,16 @@ TEST_F(VP9FrameSizeTestsLarge, TestInvalidSizes) {
expected_res_ = VPX_CODEC_MEM_ERROR;
ASSERT_NO_FATAL_FAILURE(RunLoop(&video, expected_res_));
#endif
+
+#endif
}
TEST_F(VP9FrameSizeTestsLarge, ValidSizes) {
+#ifdef CHROMIUM
+ GTEST_SKIP()
+ << "Under Chromium's configuration the allocator is unable to provide"
+ "the space required for a single frame at the maximum resolution.";
+#else
::libvpx_test::RandomVideoSource video;
#if CONFIG_SIZE_LIMIT
@@ -202,6 +213,8 @@ TEST_F(VP9FrameSizeTestsLarge, ValidSizes) {
expected_res_ = VPX_CODEC_OK;
ASSERT_NO_FATAL_FAILURE(::libvpx_test::EncoderTest::RunLoop(&video));
#endif
+
+#endif // defined(CHROMIUM)
}
TEST_F(VP9FrameSizeTestsLarge, OneByOneVideo) {
diff --git a/media/libvpx/libvpx/test/hadamard_test.cc b/media/libvpx/libvpx/test/hadamard_test.cc
index b22bae87cc..5e50984418 100644
--- a/media/libvpx/libvpx/test/hadamard_test.cc
+++ b/media/libvpx/libvpx/test/hadamard_test.cc
@@ -17,6 +17,7 @@
#include "test/acm_random.h"
#include "test/register_state_check.h"
+#include "vpx_config.h"
namespace {
diff --git a/media/libvpx/libvpx/test/level_test.cc b/media/libvpx/libvpx/test/level_test.cc
index 36cfd645c9..1f2f904698 100644
--- a/media/libvpx/libvpx/test/level_test.cc
+++ b/media/libvpx/libvpx/test/level_test.cc
@@ -12,6 +12,7 @@
#include "test/encode_test_driver.h"
#include "test/i420_video_source.h"
#include "test/util.h"
+#include "vpx_config.h"
namespace {
class LevelTest
@@ -67,6 +68,9 @@ class LevelTest
};
TEST_P(LevelTest, TestTargetLevel11Large) {
+#if CONFIG_REALTIME_ONLY
+ GTEST_SKIP();
+#else
ASSERT_NE(encoding_mode_, ::libvpx_test::kRealTime);
::libvpx_test::I420VideoSource video("hantro_odd.yuv", 208, 144, 30, 1, 0,
60);
@@ -74,9 +78,13 @@ TEST_P(LevelTest, TestTargetLevel11Large) {
cfg_.rc_target_bitrate = 150;
ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
ASSERT_GE(target_level_, level_);
+#endif
}
TEST_P(LevelTest, TestTargetLevel20Large) {
+#if CONFIG_REALTIME_ONLY
+ GTEST_SKIP();
+#else
ASSERT_NE(encoding_mode_, ::libvpx_test::kRealTime);
::libvpx_test::I420VideoSource video("hantro_collage_w352h288.yuv", 352, 288,
30, 1, 0, 60);
@@ -84,9 +92,13 @@ TEST_P(LevelTest, TestTargetLevel20Large) {
cfg_.rc_target_bitrate = 1200;
ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
ASSERT_GE(target_level_, level_);
+#endif
}
TEST_P(LevelTest, TestTargetLevel31Large) {
+#if CONFIG_REALTIME_ONLY
+ GTEST_SKIP();
+#else
ASSERT_NE(encoding_mode_, ::libvpx_test::kRealTime);
::libvpx_test::I420VideoSource video("niklas_1280_720_30.y4m", 1280, 720, 30,
1, 0, 60);
@@ -94,6 +106,7 @@ TEST_P(LevelTest, TestTargetLevel31Large) {
cfg_.rc_target_bitrate = 8000;
ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
ASSERT_GE(target_level_, level_);
+#endif
}
// Test for keeping level stats only
@@ -140,8 +153,6 @@ TEST_P(LevelTest, TestTargetLevelApi) {
EXPECT_EQ(VPX_CODEC_OK, vpx_codec_destroy(&enc));
}
-VP9_INSTANTIATE_TEST_SUITE(LevelTest,
- ::testing::Values(::libvpx_test::kTwoPassGood,
- ::libvpx_test::kOnePassGood),
+VP9_INSTANTIATE_TEST_SUITE(LevelTest, ONE_OR_TWO_PASS_TEST_MODES,
::testing::Range(0, 9));
} // namespace
diff --git a/media/libvpx/libvpx/test/minmax_test.cc b/media/libvpx/libvpx/test/minmax_test.cc
index b495709063..2d616ad15f 100644
--- a/media/libvpx/libvpx/test/minmax_test.cc
+++ b/media/libvpx/libvpx/test/minmax_test.cc
@@ -13,6 +13,7 @@
#include "third_party/googletest/src/include/gtest/gtest.h"
+#include "vpx_config.h"
#include "./vpx_dsp_rtcd.h"
#include "vpx/vpx_integer.h"
#include "vpx_mem/vpx_mem.h"
diff --git a/media/libvpx/libvpx/test/partial_idct_test.cc b/media/libvpx/libvpx/test/partial_idct_test.cc
index 01e63eb691..4cf0b2b02e 100644
--- a/media/libvpx/libvpx/test/partial_idct_test.cc
+++ b/media/libvpx/libvpx/test/partial_idct_test.cc
@@ -25,6 +25,7 @@
#include "vp9/common/vp9_blockd.h"
#include "vp9/common/vp9_scan.h"
#include "vpx/vpx_integer.h"
+#include "vpx_config.h"
#include "vpx_ports/vpx_timer.h"
using libvpx_test::ACMRandom;
diff --git a/media/libvpx/libvpx/test/realtime_test.cc b/media/libvpx/libvpx/test/realtime_test.cc
index a9870b3cbf..b5ab7f8ce2 100644
--- a/media/libvpx/libvpx/test/realtime_test.cc
+++ b/media/libvpx/libvpx/test/realtime_test.cc
@@ -14,6 +14,7 @@
#include "test/util.h"
#include "test/video_source.h"
#include "third_party/googletest/src/include/gtest/gtest.h"
+#include "vpx_config.h"
namespace {
@@ -94,6 +95,9 @@ TEST_P(RealtimeTest, RealtimeDefaultCpuUsed) {
TEST_P(RealtimeTest, IntegerOverflow) { TestIntegerOverflow(2048, 2048); }
TEST_P(RealtimeTest, IntegerOverflowLarge) {
+#ifdef CHROMIUM
+ GTEST_SKIP() << "16K framebuffers are not supported by Chromium's allocator.";
+#else
if (IsVP9()) {
#if VPX_ARCH_AARCH64 || VPX_ARCH_X86_64
TestIntegerOverflow(16384, 16384);
@@ -107,6 +111,7 @@ TEST_P(RealtimeTest, IntegerOverflowLarge) {
"warnings are fixed.";
// TestIntegerOverflow(16383, 16383);
}
+#endif // defined(CHROMIUM)
}
VP8_INSTANTIATE_TEST_SUITE(RealtimeTest,
diff --git a/media/libvpx/libvpx/test/resize_test.cc b/media/libvpx/libvpx/test/resize_test.cc
index f27bd7ebbc..cecd058f51 100644
--- a/media/libvpx/libvpx/test/resize_test.cc
+++ b/media/libvpx/libvpx/test/resize_test.cc
@@ -15,6 +15,7 @@
#include "test/i420_video_source.h"
#include "test/video_source.h"
#include "test/util.h"
+#include "vpx_config.h"
// Enable(1) or Disable(0) writing of the compressed bitstream.
#define WRITE_COMPRESSED_STREAM 0
diff --git a/media/libvpx/libvpx/test/test.mk b/media/libvpx/libvpx/test/test.mk
index d4521f08bf..28fe9dbb8d 100644
--- a/media/libvpx/libvpx/test/test.mk
+++ b/media/libvpx/libvpx/test/test.mk
@@ -21,9 +21,12 @@ LIBVPX_TEST_SRCS-yes += video_source.h
## Black box tests only use the public API.
##
LIBVPX_TEST_SRCS-yes += ../md5_utils.h ../md5_utils.c
+LIBVPX_TEST_SRCS-yes += vpx_image_test.cc
LIBVPX_TEST_SRCS-$(CONFIG_DECODERS) += ivf_video_source.h
LIBVPX_TEST_SRCS-$(CONFIG_ENCODERS) += ../y4minput.h ../y4minput.c
+ifneq ($(CONFIG_REALTIME_ONLY),yes)
LIBVPX_TEST_SRCS-$(CONFIG_ENCODERS) += altref_test.cc
+endif
LIBVPX_TEST_SRCS-$(CONFIG_ENCODERS) += encode_api_test.cc
LIBVPX_TEST_SRCS-$(CONFIG_ENCODERS) += error_resilience_test.cc
LIBVPX_TEST_SRCS-$(CONFIG_ENCODERS) += i420_video_source.h
@@ -32,7 +35,9 @@ LIBVPX_TEST_SRCS-$(CONFIG_ENCODERS) += resize_test.cc
LIBVPX_TEST_SRCS-$(CONFIG_ENCODERS) += y4m_video_source.h
LIBVPX_TEST_SRCS-$(CONFIG_ENCODERS) += yuv_video_source.h
+ifneq ($(CONFIG_REALTIME_ONLY),yes)
LIBVPX_TEST_SRCS-$(CONFIG_VP8_ENCODER) += config_test.cc
+endif
LIBVPX_TEST_SRCS-$(CONFIG_VP8_ENCODER) += cq_test.cc
LIBVPX_TEST_SRCS-$(CONFIG_VP8_ENCODER) += keyframe_test.cc
LIBVPX_TEST_SRCS-$(CONFIG_VP8_ENCODER) += vp8_datarate_test.cc
@@ -43,7 +48,9 @@ LIBVPX_TEST_SRCS-$(CONFIG_VP9_DECODER) += external_frame_buffer_test.cc
LIBVPX_TEST_SRCS-$(CONFIG_VP9_DECODER) += user_priv_test.cc
LIBVPX_TEST_SRCS-$(CONFIG_VP9_ENCODER) += active_map_refresh_test.cc
LIBVPX_TEST_SRCS-$(CONFIG_VP9_ENCODER) += active_map_test.cc
+ifneq ($(CONFIG_REALTIME_ONLY),yes)
LIBVPX_TEST_SRCS-$(CONFIG_VP9_ENCODER) += alt_ref_aq_segment_test.cc
+endif
LIBVPX_TEST_SRCS-$(CONFIG_VP9_ENCODER) += aq_segment_test.cc
LIBVPX_TEST_SRCS-$(CONFIG_VP9_ENCODER) += borders_test.cc
LIBVPX_TEST_SRCS-$(CONFIG_VP9_ENCODER) += cpu_speed_test.cc
@@ -60,7 +67,9 @@ LIBVPX_TEST_SRCS-$(CONFIG_VP9_ENCODER) += svc_test.h
LIBVPX_TEST_SRCS-$(CONFIG_VP9_ENCODER) += svc_end_to_end_test.cc
LIBVPX_TEST_SRCS-$(CONFIG_VP9_ENCODER) += timestamp_test.cc
LIBVPX_TEST_SRCS-$(CONFIG_VP9_ENCODER) += vp9_datarate_test.cc
+ifneq ($(CONFIG_REALTIME_ONLY),yes)
LIBVPX_TEST_SRCS-$(CONFIG_VP9_ENCODER) += vp9_ext_ratectrl_test.cc
+endif
LIBVPX_TEST_SRCS-$(CONFIG_VP9_ENCODER) += ../vp9/simple_encode.h
LIBVPX_TEST_SRCS-yes += decode_test_driver.cc
diff --git a/media/libvpx/libvpx/test/test_vectors.cc b/media/libvpx/libvpx/test/test_vectors.cc
index 3ffc3efc41..954ff771a9 100644
--- a/media/libvpx/libvpx/test/test_vectors.cc
+++ b/media/libvpx/libvpx/test/test_vectors.cc
@@ -9,6 +9,7 @@
*/
#include "test/test_vectors.h"
+#include "vpx_config.h"
namespace libvpx_test {
diff --git a/media/libvpx/libvpx/test/timestamp_test.cc b/media/libvpx/libvpx/test/timestamp_test.cc
index 00abf8f31c..da9e81952c 100644
--- a/media/libvpx/libvpx/test/timestamp_test.cc
+++ b/media/libvpx/libvpx/test/timestamp_test.cc
@@ -12,6 +12,7 @@
#include "test/util.h"
#include "test/video_source.h"
#include "third_party/googletest/src/include/gtest/gtest.h"
+#include "vpx_config.h"
namespace {
@@ -94,8 +95,15 @@ TEST_P(TimestampTest, TestVpxRollover) {
ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
}
+#if CONFIG_REALTIME_ONLY
+VP8_INSTANTIATE_TEST_SUITE(TimestampTest,
+ ::testing::Values(::libvpx_test::kRealTime));
+VP9_INSTANTIATE_TEST_SUITE(TimestampTest,
+ ::testing::Values(::libvpx_test::kRealTime));
+#else
VP8_INSTANTIATE_TEST_SUITE(TimestampTest,
::testing::Values(::libvpx_test::kTwoPassGood));
VP9_INSTANTIATE_TEST_SUITE(TimestampTest,
::testing::Values(::libvpx_test::kTwoPassGood));
+#endif
} // namespace
diff --git a/media/libvpx/libvpx/test/vp8_denoiser_sse2_test.cc b/media/libvpx/libvpx/test/vp8_denoiser_sse2_test.cc
index 7fa867d8bb..0918049f0f 100644
--- a/media/libvpx/libvpx/test/vp8_denoiser_sse2_test.cc
+++ b/media/libvpx/libvpx/test/vp8_denoiser_sse2_test.cc
@@ -21,6 +21,7 @@
#include "vp8/encoder/denoising.h"
#include "vp8/common/reconinter.h"
#include "vpx/vpx_integer.h"
+#include "vpx_config.h"
#include "vpx_mem/vpx_mem.h"
using libvpx_test::ACMRandom;
diff --git a/media/libvpx/libvpx/test/vp9_arf_freq_test.cc b/media/libvpx/libvpx/test/vp9_arf_freq_test.cc
index 3882326d2f..14ce96ce25 100644
--- a/media/libvpx/libvpx/test/vp9_arf_freq_test.cc
+++ b/media/libvpx/libvpx/test/vp9_arf_freq_test.cc
@@ -18,6 +18,7 @@
#include "test/y4m_video_source.h"
#include "test/yuv_video_source.h"
#include "vp9/encoder/vp9_ratectrl.h"
+#include "vpx_config.h"
namespace {
diff --git a/media/libvpx/libvpx/test/vp9_boolcoder_test.cc b/media/libvpx/libvpx/test/vp9_boolcoder_test.cc
index 6ba171a000..aeff0d7a50 100644
--- a/media/libvpx/libvpx/test/vp9_boolcoder_test.cc
+++ b/media/libvpx/libvpx/test/vp9_boolcoder_test.cc
@@ -53,7 +53,7 @@ TEST(VP9, TestBitIO) {
ACMRandom bit_rnd(random_seed);
vpx_writer bw;
uint8_t bw_buffer[kBufferSize];
- vpx_start_encode(&bw, bw_buffer);
+ vpx_start_encode(&bw, bw_buffer, sizeof(bw_buffer));
int bit = (bit_method == 0) ? 0 : (bit_method == 1) ? 1 : 0;
for (int i = 0; i < kBitsToTest; ++i) {
@@ -65,7 +65,7 @@ TEST(VP9, TestBitIO) {
vpx_write(&bw, bit, static_cast<int>(probas[i]));
}
- vpx_stop_encode(&bw);
+ GTEST_ASSERT_EQ(vpx_stop_encode(&bw), 0);
// vpx_reader_fill() may read into uninitialized data that
// isn't used meaningfully, but may trigger an MSan warning.
memset(bw_buffer + bw.pos, 0, sizeof(BD_VALUE) - 1);
@@ -90,3 +90,24 @@ TEST(VP9, TestBitIO) {
}
}
}
+
+TEST(VP9, TestBitIOBufferSize0) {
+ vpx_writer bw;
+ uint8_t bw_buffer[1];
+ vpx_start_encode(&bw, bw_buffer, 0);
+ GTEST_ASSERT_EQ(vpx_stop_encode(&bw), -1);
+}
+
+TEST(VP9, TestBitIOBufferSize1) {
+ vpx_writer bw;
+ uint8_t bw_buffer[1];
+ vpx_start_encode(&bw, bw_buffer, sizeof(bw_buffer));
+ GTEST_ASSERT_EQ(vpx_stop_encode(&bw), -1);
+}
+
+TEST(VP9, TestBitIOBufferSize2) {
+ vpx_writer bw;
+ uint8_t bw_buffer[2];
+ vpx_start_encode(&bw, bw_buffer, sizeof(bw_buffer));
+ GTEST_ASSERT_EQ(vpx_stop_encode(&bw), 0);
+}
diff --git a/media/libvpx/libvpx/test/vp9_denoiser_test.cc b/media/libvpx/libvpx/test/vp9_denoiser_test.cc
index 831f83305c..b5a2c1c0a2 100644
--- a/media/libvpx/libvpx/test/vp9_denoiser_test.cc
+++ b/media/libvpx/libvpx/test/vp9_denoiser_test.cc
@@ -24,6 +24,7 @@
#include "vp9/common/vp9_reconinter.h"
#include "vp9/encoder/vp9_context_tree.h"
#include "vp9/encoder/vp9_denoiser.h"
+#include "vpx_config.h"
using libvpx_test::ACMRandom;
diff --git a/media/libvpx/libvpx/test/vp9_end_to_end_test.cc b/media/libvpx/libvpx/test/vp9_end_to_end_test.cc
index 79be4ee146..0ed48ef051 100644
--- a/media/libvpx/libvpx/test/vp9_end_to_end_test.cc
+++ b/media/libvpx/libvpx/test/vp9_end_to_end_test.cc
@@ -18,6 +18,7 @@
#include "test/util.h"
#include "test/y4m_video_source.h"
#include "test/yuv_video_source.h"
+#include "vpx_config.h"
namespace {
@@ -65,7 +66,9 @@ const TestVideoParam kTestVectorsNv12[] = {
// Encoding modes tested
const libvpx_test::TestMode kEncodingModeVectors[] = {
+#if !CONFIG_REALTIME_ONLY
::libvpx_test::kTwoPassGood, ::libvpx_test::kOnePassGood,
+#endif
::libvpx_test::kRealTime
};
diff --git a/media/libvpx/libvpx/test/vp9_ethread_test.cc b/media/libvpx/libvpx/test/vp9_ethread_test.cc
index c8d3cba7fb..c3f288aabb 100644
--- a/media/libvpx/libvpx/test/vp9_ethread_test.cc
+++ b/media/libvpx/libvpx/test/vp9_ethread_test.cc
@@ -17,6 +17,7 @@
#include "test/util.h"
#include "test/y4m_video_source.h"
#include "vp9/encoder/vp9_firstpass.h"
+#include "vpx_config.h"
namespace {
// FIRSTPASS_STATS struct:
@@ -168,6 +169,9 @@ static void compare_fp_stats_md5(vpx_fixed_buf_t *fp_stats) {
}
TEST_P(VPxFirstPassEncoderThreadTest, FirstPassStatsTest) {
+#if CONFIG_REALTIME_ONLY
+ GTEST_SKIP();
+#else
::libvpx_test::Y4mVideoSource video("niklas_1280_720_30.y4m", 0, 60);
first_pass_only_ = true;
@@ -216,6 +220,7 @@ TEST_P(VPxFirstPassEncoderThreadTest, FirstPassStatsTest) {
// Compare to check if stats match with row-mt=0/1.
compare_fp_stats_md5(&firstpass_stats_);
+#endif // CONFIG_REALTIME_ONLY
}
class VPxEncoderThreadTest
@@ -407,23 +412,17 @@ INSTANTIATE_TEST_SUITE_P(
::testing::Combine(
::testing::Values(
static_cast<const libvpx_test::CodecFactory *>(&libvpx_test::kVP9)),
- ::testing::Values(::libvpx_test::kTwoPassGood,
- ::libvpx_test::kOnePassGood,
- ::libvpx_test::kRealTime),
- ::testing::Range(3, 10), // cpu_used
- ::testing::Range(0, 3), // tile_columns
- ::testing::Range(2, 5))); // threads
+ ONE_PASS_TEST_MODES, ::testing::Range(3, 10), // cpu_used
+ ::testing::Range(0, 3), // tile_columns
+ ::testing::Range(2, 5))); // threads
INSTANTIATE_TEST_SUITE_P(
VP9Large, VPxEncoderThreadTest,
::testing::Combine(
::testing::Values(
static_cast<const libvpx_test::CodecFactory *>(&libvpx_test::kVP9)),
- ::testing::Values(::libvpx_test::kTwoPassGood,
- ::libvpx_test::kOnePassGood,
- ::libvpx_test::kRealTime),
- ::testing::Range(0, 3), // cpu_used
- ::testing::Range(0, 3), // tile_columns
- ::testing::Range(2, 5))); // threads
+ ONE_PASS_TEST_MODES, ::testing::Range(0, 3), // cpu_used
+ ::testing::Range(0, 3), // tile_columns
+ ::testing::Range(2, 5))); // threads
} // namespace
diff --git a/media/libvpx/libvpx/test/vp9_ext_ratectrl_test.cc b/media/libvpx/libvpx/test/vp9_ext_ratectrl_test.cc
index 5c23a5b0d5..3f3fc23854 100644
--- a/media/libvpx/libvpx/test/vp9_ext_ratectrl_test.cc
+++ b/media/libvpx/libvpx/test/vp9_ext_ratectrl_test.cc
@@ -51,6 +51,22 @@ class RateControllerForTest {
gop_decision.use_key_frame = current_gop_ == 0 ? 1 : 0;
gop_decision.use_alt_ref = 1;
gop_decision.gop_coding_frames = kFixedGOPSize;
+ // First frame is key frame
+ gop_decision.update_type[0] = VPX_RC_KF_UPDATE;
+ for (int i = 1; i < kFixedGOPSize; i++) {
+ gop_decision.update_type[i] = VPX_RC_LF_UPDATE;
+ gop_decision.update_ref_index[i] = 0;
+ gop_decision.ref_frame_list[i].index[0] = 0;
+ gop_decision.ref_frame_list[i].name[0] = VPX_RC_LAST_FRAME;
+ gop_decision.ref_frame_list[i].index[1] = 0;
+ gop_decision.ref_frame_list[i].name[1] = VPX_RC_GOLDEN_FRAME;
+ gop_decision.ref_frame_list[i].index[2] = 0;
+ gop_decision.ref_frame_list[i].name[1] = VPX_RC_ALTREF_FRAME;
+ }
+
+ // Second frame is altref
+ gop_decision.update_type[1] = VPX_RC_ARF_UPDATE;
+ gop_decision.update_ref_index[1] = 2;
return gop_decision;
}
@@ -136,7 +152,11 @@ class ExtRateCtrlTest : public ::libvpx_test::EncoderTest,
void SetUp() override {
InitializeConfig();
+#if CONFIG_REALTIME_ONLY
+ SetMode(::libvpx_test::kRealTime);
+#else
SetMode(::libvpx_test::kTwoPassGood);
+#endif
}
void PreEncodeFrameHook(::libvpx_test::VideoSource *video,
diff --git a/media/libvpx/libvpx/test/vp9_lossless_test.cc b/media/libvpx/libvpx/test/vp9_lossless_test.cc
index fe3cd1aba4..a955132f01 100644
--- a/media/libvpx/libvpx/test/vp9_lossless_test.cc
+++ b/media/libvpx/libvpx/test/vp9_lossless_test.cc
@@ -118,8 +118,13 @@ TEST_P(LosslessTest, TestLossLessEncodingCtrl) {
EXPECT_GE(psnr_lossless, kMaxPsnr);
}
+#if CONFIG_REALTIME_ONLY
+VP9_INSTANTIATE_TEST_SUITE(LosslessTest,
+ ::testing::Values(::libvpx_test::kRealTime));
+#else
VP9_INSTANTIATE_TEST_SUITE(LosslessTest,
::testing::Values(::libvpx_test::kRealTime,
::libvpx_test::kOnePassGood,
::libvpx_test::kTwoPassGood));
+#endif
} // namespace
diff --git a/media/libvpx/libvpx/test/vp9_motion_vector_test.cc b/media/libvpx/libvpx/test/vp9_motion_vector_test.cc
index 495ea11fce..37111e2461 100644
--- a/media/libvpx/libvpx/test/vp9_motion_vector_test.cc
+++ b/media/libvpx/libvpx/test/vp9_motion_vector_test.cc
@@ -16,6 +16,7 @@
#include "test/encode_test_driver.h"
#include "test/util.h"
#include "test/yuv_video_source.h"
+#include "vpx_config.h"
namespace {
#define MAX_EXTREME_MV 1
@@ -23,7 +24,9 @@ namespace {
// Encoding modes
const libvpx_test::TestMode kEncodingModeVectors[] = {
+#if !CONFIG_REALTIME_ONLY
::libvpx_test::kTwoPassGood, ::libvpx_test::kOnePassGood,
+#endif
::libvpx_test::kRealTime
};
diff --git a/media/libvpx/libvpx/test/vpx_image_test.cc b/media/libvpx/libvpx/test/vpx_image_test.cc
new file mode 100644
index 0000000000..3d24b239a8
--- /dev/null
+++ b/media/libvpx/libvpx/test/vpx_image_test.cc
@@ -0,0 +1,127 @@
+/*
+ * Copyright (c) 2024 The WebM project authors. All Rights Reserved.
+ *
+ * Use of this source code is governed by a BSD-style license
+ * that can be found in the LICENSE file in the root of the source
+ * tree. An additional intellectual property rights grant can be found
+ * in the file PATENTS. All contributing project authors may
+ * be found in the AUTHORS file in the root of the source tree.
+ */
+
+#include <climits>
+
+#include "vpx/vpx_image.h"
+#include "third_party/googletest/src/include/gtest/gtest.h"
+
+TEST(VpxImageTest, VpxImgWrapInvalidAlign) {
+ const int kWidth = 128;
+ const int kHeight = 128;
+ unsigned char buf[kWidth * kHeight * 3];
+
+ vpx_image_t img;
+ // Set img_data and img_data_owner to junk values. vpx_img_wrap() should
+ // not read these values on failure.
+ unsigned char empty[] = "";
+ img.img_data = empty;
+ img.img_data_owner = 1;
+
+ vpx_img_fmt_t format = VPX_IMG_FMT_I444;
+ // 'align' must be a power of 2 but is not. This causes the vpx_img_wrap()
+ // call to fail. The test verifies we do not read the junk values in 'img'.
+ unsigned int align = 31;
+ EXPECT_EQ(vpx_img_wrap(&img, format, kWidth, kHeight, align, buf), nullptr);
+}
+
+TEST(VpxImageTest, VpxImgSetRectOverflow) {
+ const int kWidth = 128;
+ const int kHeight = 128;
+ unsigned char buf[kWidth * kHeight * 3];
+
+ vpx_image_t img;
+ vpx_img_fmt_t format = VPX_IMG_FMT_I444;
+ unsigned int align = 32;
+ EXPECT_EQ(vpx_img_wrap(&img, format, kWidth, kHeight, align, buf), &img);
+
+ EXPECT_EQ(vpx_img_set_rect(&img, 0, 0, kWidth, kHeight), 0);
+ // This would result in overflow because -1 is cast to UINT_MAX.
+ EXPECT_NE(vpx_img_set_rect(&img, static_cast<unsigned int>(-1),
+ static_cast<unsigned int>(-1), kWidth, kHeight),
+ 0);
+}
+
+TEST(VpxImageTest, VpxImgAllocNone) {
+ const int kWidth = 128;
+ const int kHeight = 128;
+
+ vpx_image_t img;
+ vpx_img_fmt_t format = VPX_IMG_FMT_NONE;
+ unsigned int align = 32;
+ ASSERT_EQ(vpx_img_alloc(&img, format, kWidth, kHeight, align), nullptr);
+}
+
+TEST(VpxImageTest, VpxImgAllocNv12) {
+ const int kWidth = 128;
+ const int kHeight = 128;
+
+ vpx_image_t img;
+ vpx_img_fmt_t format = VPX_IMG_FMT_NV12;
+ unsigned int align = 32;
+ EXPECT_EQ(vpx_img_alloc(&img, format, kWidth, kHeight, align), &img);
+ EXPECT_EQ(img.stride[VPX_PLANE_U], img.stride[VPX_PLANE_Y]);
+ EXPECT_EQ(img.stride[VPX_PLANE_V], img.stride[VPX_PLANE_U]);
+ EXPECT_EQ(img.planes[VPX_PLANE_V], img.planes[VPX_PLANE_U] + 1);
+ vpx_img_free(&img);
+}
+
+TEST(VpxImageTest, VpxImgAllocHugeWidth) {
+ // The stride (0x80000000 * 2) would overflow unsigned int.
+ vpx_image_t *image =
+ vpx_img_alloc(nullptr, VPX_IMG_FMT_I42016, 0x80000000, 1, 1);
+ ASSERT_EQ(image, nullptr);
+
+ // The stride (0x80000000) would overflow int.
+ image = vpx_img_alloc(nullptr, VPX_IMG_FMT_I420, 0x80000000, 1, 1);
+ ASSERT_EQ(image, nullptr);
+
+ // The aligned width (UINT_MAX + 1) would overflow unsigned int.
+ image = vpx_img_alloc(nullptr, VPX_IMG_FMT_I420, UINT_MAX, 1, 1);
+ ASSERT_EQ(image, nullptr);
+
+ image = vpx_img_alloc(nullptr, VPX_IMG_FMT_I420, 0x7ffffffe, 1, 1);
+ if (image) {
+ vpx_img_free(image);
+ }
+
+ image = vpx_img_alloc(nullptr, VPX_IMG_FMT_I420, 285245883, 64, 1);
+ if (image) {
+ vpx_img_free(image);
+ }
+
+ image = vpx_img_alloc(nullptr, VPX_IMG_FMT_NV12, 285245883, 64, 1);
+ if (image) {
+ vpx_img_free(image);
+ }
+
+ image = vpx_img_alloc(nullptr, VPX_IMG_FMT_YV12, 285245883, 64, 1);
+ if (image) {
+ vpx_img_free(image);
+ }
+
+ image = vpx_img_alloc(nullptr, VPX_IMG_FMT_I42016, 65536, 2, 1);
+ if (image) {
+ uint16_t *y_plane =
+ reinterpret_cast<uint16_t *>(image->planes[VPX_PLANE_Y]);
+ y_plane[0] = 0;
+ y_plane[image->d_w - 1] = 0;
+ vpx_img_free(image);
+ }
+
+ image = vpx_img_alloc(nullptr, VPX_IMG_FMT_I42016, 285245883, 2, 1);
+ if (image) {
+ uint16_t *y_plane =
+ reinterpret_cast<uint16_t *>(image->planes[VPX_PLANE_Y]);
+ y_plane[0] = 0;
+ y_plane[image->d_w - 1] = 0;
+ vpx_img_free(image);
+ }
+}
diff --git a/media/libvpx/libvpx/test/yuv_temporal_filter_test.cc b/media/libvpx/libvpx/test/yuv_temporal_filter_test.cc
index 0677d55688..5319bfec43 100644
--- a/media/libvpx/libvpx/test/yuv_temporal_filter_test.cc
+++ b/media/libvpx/libvpx/test/yuv_temporal_filter_test.cc
@@ -14,6 +14,7 @@
#include "test/acm_random.h"
#include "test/buffer.h"
#include "test/register_state_check.h"
+#include "vpx_config.h"
#include "vpx_ports/vpx_timer.h"
namespace {
diff --git a/media/libvpx/libvpx/vp8/common/generic/systemdependent.c b/media/libvpx/libvpx/vp8/common/generic/systemdependent.c
index 7c8e083f4f..4aef15eef0 100644
--- a/media/libvpx/libvpx/vp8/common/generic/systemdependent.c
+++ b/media/libvpx/libvpx/vp8/common/generic/systemdependent.c
@@ -64,19 +64,4 @@ void vp8_machine_specific_config(VP8_COMMON *ctx) {
#if CONFIG_MULTITHREAD
ctx->processor_core_count = get_cpu_count();
#endif /* CONFIG_MULTITHREAD */
-
-#if VPX_ARCH_ARM
- ctx->cpu_caps = arm_cpu_caps();
-#elif VPX_ARCH_X86 || VPX_ARCH_X86_64
- ctx->cpu_caps = x86_simd_caps();
-#elif VPX_ARCH_PPC
- ctx->cpu_caps = ppc_simd_caps();
-#elif VPX_ARCH_MIPS
- ctx->cpu_caps = mips_cpu_caps();
-#elif VPX_ARCH_LOONGARCH
- ctx->cpu_caps = loongarch_cpu_caps();
-#else
- // generic-gnu targets.
- ctx->cpu_caps = 0;
-#endif
}
diff --git a/media/libvpx/libvpx/vp8/common/onyxc_int.h b/media/libvpx/libvpx/vp8/common/onyxc_int.h
index ef8d007620..d4824d24e4 100644
--- a/media/libvpx/libvpx/vp8/common/onyxc_int.h
+++ b/media/libvpx/libvpx/vp8/common/onyxc_int.h
@@ -167,7 +167,6 @@ typedef struct VP8Common {
#if CONFIG_POSTPROC
struct postproc_state postproc_state;
#endif
- int cpu_caps;
} VP8_COMMON;
#ifdef __cplusplus
diff --git a/media/libvpx/libvpx/vp8/encoder/bitstream.c b/media/libvpx/libvpx/vp8/encoder/bitstream.c
index 03691fc9d1..7bcdf77708 100644
--- a/media/libvpx/libvpx/vp8/encoder/bitstream.c
+++ b/media/libvpx/libvpx/vp8/encoder/bitstream.c
@@ -501,7 +501,7 @@ static void pack_inter_mode_mvs(VP8_COMP *const cpi) {
int ct[4];
vp8_find_near_mvs(xd, m, &n1, &n2, &best_mv, ct, rf,
- cpi->common.ref_frame_sign_bias);
+ pc->ref_frame_sign_bias);
vp8_clamp_mv2(&best_mv, xd);
vp8_mv_ref_probs(mv_ref_p, ct);
@@ -1021,7 +1021,7 @@ void vp8_pack_bitstream(VP8_COMP *cpi, unsigned char *dest,
bc[0].error = &pc->error;
- validate_buffer(cx_data, 3, cx_data_end, &cpi->common.error);
+ validate_buffer(cx_data, 3, cx_data_end, &pc->error);
cx_data += 3;
#if defined(SECTIONBITS_OUTPUT)
@@ -1034,7 +1034,7 @@ void vp8_pack_bitstream(VP8_COMP *cpi, unsigned char *dest,
if (oh.type == KEY_FRAME) {
int v;
- validate_buffer(cx_data, 7, cx_data_end, &cpi->common.error);
+ validate_buffer(cx_data, 7, cx_data_end, &pc->error);
/* Start / synch code */
cx_data[0] = 0x9D;
@@ -1243,7 +1243,7 @@ void vp8_pack_bitstream(VP8_COMP *cpi, unsigned char *dest,
#else
if (pc->refresh_entropy_probs == 0) {
/* save a copy for later refresh */
- memcpy(&cpi->common.lfc, &cpi->common.fc, sizeof(cpi->common.fc));
+ pc->lfc = pc->fc;
}
vp8_update_coef_probs(cpi);
diff --git a/media/libvpx/libvpx/vp8/encoder/encodeframe.c b/media/libvpx/libvpx/vp8/encoder/encodeframe.c
index d0117897db..fa43340406 100644
--- a/media/libvpx/libvpx/vp8/encoder/encodeframe.c
+++ b/media/libvpx/libvpx/vp8/encoder/encodeframe.c
@@ -15,7 +15,6 @@
#include "vp8/common/common.h"
#include "vp8/common/entropymode.h"
#include "vp8/common/extend.h"
-#include "vp8/common/findnearmv.h"
#include "vp8/common/invtrans.h"
#include "vp8/common/quant_common.h"
#include "vp8/common/reconinter.h"
@@ -25,11 +24,9 @@
#include "vp8/encoder/encodeframe.h"
#include "vp8/encoder/encodeintra.h"
#include "vp8/encoder/encodemb.h"
-#include "vp8/encoder/encodemv.h"
#include "vp8/encoder/onyx_int.h"
#include "vp8/encoder/pickinter.h"
#include "vp8/encoder/rdopt.h"
-#include "vp8/encoder/segmentation.h"
#include "vp8_rtcd.h"
#include "vpx/internal/vpx_codec_internal.h"
#include "vpx_dsp_rtcd.h"
diff --git a/media/libvpx/libvpx/vp8/vp8_cx_iface.c b/media/libvpx/libvpx/vp8/vp8_cx_iface.c
index 2b238c1a97..668bd0816d 100644
--- a/media/libvpx/libvpx/vp8/vp8_cx_iface.c
+++ b/media/libvpx/libvpx/vp8/vp8_cx_iface.c
@@ -23,7 +23,6 @@
#include "vpx_mem/vpx_mem.h"
#include "vpx_ports/static_assert.h"
#include "vpx_ports/system_state.h"
-#include "vpx_util/vpx_thread.h"
#include "vpx_util/vpx_timestamp.h"
#if CONFIG_MULTITHREAD
#include "vp8/encoder/ethreading.h"
@@ -152,7 +151,7 @@ static vpx_codec_err_t validate_config(vpx_codec_alg_priv_t *ctx,
RANGE_CHECK_HI(cfg, g_profile, 3);
RANGE_CHECK_HI(cfg, rc_max_quantizer, 63);
RANGE_CHECK_HI(cfg, rc_min_quantizer, cfg->rc_max_quantizer);
- RANGE_CHECK_HI(cfg, g_threads, MAX_NUM_THREADS);
+ RANGE_CHECK_HI(cfg, g_threads, 64);
#if CONFIG_REALTIME_ONLY
RANGE_CHECK_HI(cfg, g_lag_in_frames, 0);
#elif CONFIG_MULTI_RES_ENCODING
@@ -710,6 +709,7 @@ static vpx_codec_err_t vp8e_init(vpx_codec_ctx_t *ctx,
priv->cx_data = malloc(priv->cx_data_sz);
if (!priv->cx_data) {
+ priv->cx_data_sz = 0;
return VPX_CODEC_MEM_ERROR;
}
diff --git a/media/libvpx/libvpx/vp9/decoder/vp9_decodeframe.c b/media/libvpx/libvpx/vp9/decoder/vp9_decodeframe.c
index 4fe680cefc..45ef99adf9 100644
--- a/media/libvpx/libvpx/vp9/decoder/vp9_decodeframe.c
+++ b/media/libvpx/libvpx/vp9/decoder/vp9_decodeframe.c
@@ -68,6 +68,7 @@ static int decode_unsigned_max(struct vpx_read_bit_buffer *rb, int max) {
static TX_MODE read_tx_mode(vpx_reader *r) {
TX_MODE tx_mode = vpx_read_literal(r, 2);
if (tx_mode == ALLOW_32X32) tx_mode += vpx_read_bit(r);
+ assert(tx_mode < TX_MODES);
return tx_mode;
}
diff --git a/media/libvpx/libvpx/vp9/encoder/vp9_bitstream.c b/media/libvpx/libvpx/vp9/encoder/vp9_bitstream.c
index ca56d14aa1..161a6fd535 100644
--- a/media/libvpx/libvpx/vp9/encoder/vp9_bitstream.c
+++ b/media/libvpx/libvpx/vp9/encoder/vp9_bitstream.c
@@ -9,6 +9,7 @@
*/
#include <assert.h>
+#include <stdint.h>
#include <stdio.h>
#include <limits.h>
@@ -943,12 +944,11 @@ static int encode_tile_worker(void *arg1, void *arg2) {
VP9BitstreamWorkerData *data = (VP9BitstreamWorkerData *)arg2;
MACROBLOCKD *const xd = &data->xd;
const int tile_row = 0;
- vpx_start_encode(&data->bit_writer, data->dest);
+ vpx_start_encode(&data->bit_writer, data->dest, data->dest_size);
write_modes(cpi, xd, &cpi->tile_data[data->tile_idx].tile_info,
&data->bit_writer, tile_row, data->tile_idx,
&data->max_mv_magnitude, data->interp_filter_selected);
- vpx_stop_encode(&data->bit_writer);
- return 1;
+ return vpx_stop_encode(&data->bit_writer) == 0;
}
void vp9_bitstream_encode_tiles_buffer_dealloc(VP9_COMP *const cpi) {
@@ -962,7 +962,18 @@ void vp9_bitstream_encode_tiles_buffer_dealloc(VP9_COMP *const cpi) {
}
}
-static void encode_tiles_buffer_alloc(VP9_COMP *const cpi) {
+static size_t encode_tiles_buffer_alloc_size(const VP9_COMP *cpi) {
+ const VP9_COMMON *cm = &cpi->common;
+ const int image_bps =
+ (8 + 2 * (8 >> (cm->subsampling_x + cm->subsampling_y))) *
+ (1 + (cm->bit_depth > 8));
+ const int64_t size =
+ (int64_t)cpi->oxcf.width * cpi->oxcf.height * image_bps / 8;
+ return (size_t)size;
+}
+
+static void encode_tiles_buffer_alloc(VP9_COMP *const cpi,
+ size_t buffer_alloc_size) {
VP9_COMMON *const cm = &cpi->common;
int i;
const size_t worker_data_size =
@@ -971,14 +982,14 @@ static void encode_tiles_buffer_alloc(VP9_COMP *const cpi) {
vpx_memalign(16, worker_data_size));
memset(cpi->vp9_bitstream_worker_data, 0, worker_data_size);
for (i = 1; i < cpi->num_workers; ++i) {
- cpi->vp9_bitstream_worker_data[i].dest_size =
- cpi->oxcf.width * cpi->oxcf.height;
CHECK_MEM_ERROR(&cm->error, cpi->vp9_bitstream_worker_data[i].dest,
- vpx_malloc(cpi->vp9_bitstream_worker_data[i].dest_size));
+ vpx_malloc(buffer_alloc_size));
+ cpi->vp9_bitstream_worker_data[i].dest_size = buffer_alloc_size;
}
}
-static size_t encode_tiles_mt(VP9_COMP *cpi, uint8_t *data_ptr) {
+static size_t encode_tiles_mt(VP9_COMP *cpi, uint8_t *data_ptr,
+ size_t data_size) {
const VPxWorkerInterface *const winterface = vpx_get_worker_interface();
VP9_COMMON *const cm = &cpi->common;
const int tile_cols = 1 << cm->log2_tile_cols;
@@ -986,11 +997,11 @@ static size_t encode_tiles_mt(VP9_COMP *cpi, uint8_t *data_ptr) {
size_t total_size = 0;
int tile_col = 0;
+ const size_t buffer_alloc_size = encode_tiles_buffer_alloc_size(cpi);
if (!cpi->vp9_bitstream_worker_data ||
- cpi->vp9_bitstream_worker_data[1].dest_size >
- (cpi->oxcf.width * cpi->oxcf.height)) {
+ cpi->vp9_bitstream_worker_data[1].dest_size != buffer_alloc_size) {
vp9_bitstream_encode_tiles_buffer_dealloc(cpi);
- encode_tiles_buffer_alloc(cpi);
+ encode_tiles_buffer_alloc(cpi, buffer_alloc_size);
}
while (tile_col < tile_cols) {
@@ -1010,8 +1021,13 @@ static size_t encode_tiles_mt(VP9_COMP *cpi, uint8_t *data_ptr) {
if (i == 0) {
// If this worker happens to be for the last tile, then do not offset it
// by 4 for the tile size.
- data->dest =
- data_ptr + total_size + (tile_col == tile_cols - 1 ? 0 : 4);
+ const size_t offset = total_size + (tile_col == tile_cols - 1 ? 0 : 4);
+ if (data_size < offset) {
+ vpx_internal_error(&cm->error, VPX_CODEC_ERROR,
+ "encode_tiles_mt: output buffer full");
+ }
+ data->dest = data_ptr + offset;
+ data->dest_size = data_size - offset;
}
worker->data1 = cpi;
worker->data2 = data;
@@ -1032,7 +1048,10 @@ static size_t encode_tiles_mt(VP9_COMP *cpi, uint8_t *data_ptr) {
uint32_t tile_size;
int k;
- if (!winterface->sync(worker)) return 0;
+ if (!winterface->sync(worker)) {
+ vpx_internal_error(&cm->error, VPX_CODEC_ERROR,
+ "encode_tiles_mt: worker had error");
+ }
tile_size = data->bit_writer.pos;
// Aggregate per-thread bitstream stats.
@@ -1044,10 +1063,18 @@ static size_t encode_tiles_mt(VP9_COMP *cpi, uint8_t *data_ptr) {
// Prefix the size of the tile on all but the last.
if (tile_col != tile_cols || j < i - 1) {
+ if (data_size - total_size < 4) {
+ vpx_internal_error(&cm->error, VPX_CODEC_ERROR,
+ "encode_tiles_mt: output buffer full");
+ }
mem_put_be32(data_ptr + total_size, tile_size);
total_size += 4;
}
if (j > 0) {
+ if (data_size - total_size < tile_size) {
+ vpx_internal_error(&cm->error, VPX_CODEC_ERROR,
+ "encode_tiles_mt: output buffer full");
+ }
memcpy(data_ptr + total_size, data->dest, tile_size);
}
total_size += tile_size;
@@ -1056,7 +1083,7 @@ static size_t encode_tiles_mt(VP9_COMP *cpi, uint8_t *data_ptr) {
return total_size;
}
-static size_t encode_tiles(VP9_COMP *cpi, uint8_t *data_ptr) {
+static size_t encode_tiles(VP9_COMP *cpi, uint8_t *data_ptr, size_t data_size) {
VP9_COMMON *const cm = &cpi->common;
MACROBLOCKD *const xd = &cpi->td.mb.e_mbd;
vpx_writer residual_bc;
@@ -1073,23 +1100,32 @@ static size_t encode_tiles(VP9_COMP *cpi, uint8_t *data_ptr) {
// that it does not make the overall process worse in any case.
if (cpi->oxcf.mode == REALTIME && cpi->num_workers > 1 && tile_rows == 1 &&
tile_cols > 1) {
- return encode_tiles_mt(cpi, data_ptr);
+ return encode_tiles_mt(cpi, data_ptr, data_size);
}
for (tile_row = 0; tile_row < tile_rows; tile_row++) {
for (tile_col = 0; tile_col < tile_cols; tile_col++) {
int tile_idx = tile_row * tile_cols + tile_col;
+ size_t offset;
if (tile_col < tile_cols - 1 || tile_row < tile_rows - 1)
- vpx_start_encode(&residual_bc, data_ptr + total_size + 4);
+ offset = total_size + 4;
else
- vpx_start_encode(&residual_bc, data_ptr + total_size);
+ offset = total_size;
+ if (data_size < offset) {
+ vpx_internal_error(&cm->error, VPX_CODEC_ERROR,
+ "encode_tiles: output buffer full");
+ }
+ vpx_start_encode(&residual_bc, data_ptr + offset, data_size - offset);
write_modes(cpi, xd, &cpi->tile_data[tile_idx].tile_info, &residual_bc,
tile_row, tile_col, &cpi->max_mv_magnitude,
cpi->interp_filter_selected);
- vpx_stop_encode(&residual_bc);
+ if (vpx_stop_encode(&residual_bc)) {
+ vpx_internal_error(&cm->error, VPX_CODEC_ERROR,
+ "encode_tiles: output buffer full");
+ }
if (tile_col < tile_cols - 1 || tile_row < tile_rows - 1) {
// size of this tile
mem_put_be32(data_ptr + total_size, residual_bc.pos);
@@ -1271,14 +1307,15 @@ static void write_uncompressed_header(VP9_COMP *cpi,
write_tile_info(cm, wb);
}
-static size_t write_compressed_header(VP9_COMP *cpi, uint8_t *data) {
+static size_t write_compressed_header(VP9_COMP *cpi, uint8_t *data,
+ size_t data_size) {
VP9_COMMON *const cm = &cpi->common;
MACROBLOCKD *const xd = &cpi->td.mb.e_mbd;
FRAME_CONTEXT *const fc = cm->fc;
FRAME_COUNTS *counts = cpi->td.counts;
vpx_writer header_bc;
- vpx_start_encode(&header_bc, data);
+ vpx_start_encode(&header_bc, data, data_size);
if (xd->lossless)
cm->tx_mode = ONLY_4X4;
@@ -1342,46 +1379,68 @@ static size_t write_compressed_header(VP9_COMP *cpi, uint8_t *data) {
&counts->mv);
}
- vpx_stop_encode(&header_bc);
- assert(header_bc.pos <= 0xffff);
+ if (vpx_stop_encode(&header_bc)) {
+ vpx_internal_error(&cm->error, VPX_CODEC_ERROR,
+ "write_compressed_header: output buffer full");
+ }
return header_bc.pos;
}
-void vp9_pack_bitstream(VP9_COMP *cpi, uint8_t *dest, size_t *size) {
+void vp9_pack_bitstream(VP9_COMP *cpi, uint8_t *dest, size_t dest_size,
+ size_t *size) {
+ VP9_COMMON *const cm = &cpi->common;
uint8_t *data = dest;
- size_t first_part_size, uncompressed_hdr_size;
- struct vpx_write_bit_buffer wb = { data, 0 };
+ size_t data_size = dest_size;
+ size_t uncompressed_hdr_size, compressed_hdr_size;
+ struct vpx_write_bit_buffer wb;
struct vpx_write_bit_buffer saved_wb;
#if CONFIG_BITSTREAM_DEBUG
bitstream_queue_reset_write();
#endif
+ vpx_wb_init(&wb, data, data_size);
write_uncompressed_header(cpi, &wb);
+ if (vpx_wb_has_error(&wb)) {
+ vpx_internal_error(&cm->error, VPX_CODEC_ERROR,
+ "vp9_pack_bitstream: output buffer full");
+ }
// Skip the rest coding process if use show existing frame.
- if (cpi->common.show_existing_frame) {
+ if (cm->show_existing_frame) {
uncompressed_hdr_size = vpx_wb_bytes_written(&wb);
data += uncompressed_hdr_size;
+ data_size -= uncompressed_hdr_size;
*size = data - dest;
return;
}
saved_wb = wb;
- vpx_wb_write_literal(&wb, 0, 16); // don't know in advance first part. size
+ // don't know in advance compressed header size
+ vpx_wb_write_literal(&wb, 0, 16);
+ if (vpx_wb_has_error(&wb)) {
+ vpx_internal_error(&cm->error, VPX_CODEC_ERROR,
+ "vp9_pack_bitstream: output buffer full");
+ }
uncompressed_hdr_size = vpx_wb_bytes_written(&wb);
data += uncompressed_hdr_size;
+ data_size -= uncompressed_hdr_size;
vpx_clear_system_state();
- first_part_size = write_compressed_header(cpi, data);
- data += first_part_size;
- // TODO(jbb): Figure out what to do if first_part_size > 16 bits.
- vpx_wb_write_literal(&saved_wb, (int)first_part_size, 16);
+ compressed_hdr_size = write_compressed_header(cpi, data, data_size);
+ data += compressed_hdr_size;
+ data_size -= compressed_hdr_size;
+ if (compressed_hdr_size > UINT16_MAX) {
+ vpx_internal_error(&cm->error, VPX_CODEC_ERROR,
+ "compressed_hdr_size > 16 bits");
+ }
+ vpx_wb_write_literal(&saved_wb, (int)compressed_hdr_size, 16);
+ assert(!vpx_wb_has_error(&saved_wb));
- data += encode_tiles(cpi, data);
+ data += encode_tiles(cpi, data, data_size);
*size = data - dest;
}
diff --git a/media/libvpx/libvpx/vp9/encoder/vp9_bitstream.h b/media/libvpx/libvpx/vp9/encoder/vp9_bitstream.h
index 208651dc22..1120841ecb 100644
--- a/media/libvpx/libvpx/vp9/encoder/vp9_bitstream.h
+++ b/media/libvpx/libvpx/vp9/encoder/vp9_bitstream.h
@@ -19,7 +19,7 @@ extern "C" {
typedef struct VP9BitstreamWorkerData {
uint8_t *dest;
- int dest_size;
+ size_t dest_size;
vpx_writer bit_writer;
int tile_idx;
unsigned int max_mv_magnitude;
@@ -35,7 +35,8 @@ int vp9_get_refresh_mask(VP9_COMP *cpi);
void vp9_bitstream_encode_tiles_buffer_dealloc(VP9_COMP *const cpi);
-void vp9_pack_bitstream(VP9_COMP *cpi, uint8_t *dest, size_t *size);
+void vp9_pack_bitstream(VP9_COMP *cpi, uint8_t *dest, size_t dest_size,
+ size_t *size);
static INLINE int vp9_preserve_existing_gf(VP9_COMP *cpi) {
return cpi->refresh_golden_frame && cpi->rc.is_src_frame_alt_ref &&
diff --git a/media/libvpx/libvpx/vp9/encoder/vp9_encodeframe.c b/media/libvpx/libvpx/vp9/encoder/vp9_encodeframe.c
index b24c85f406..937f22e835 100644
--- a/media/libvpx/libvpx/vp9/encoder/vp9_encodeframe.c
+++ b/media/libvpx/libvpx/vp9/encoder/vp9_encodeframe.c
@@ -5853,7 +5853,12 @@ void vp9_init_tile_data(VP9_COMP *cpi) {
int tplist_count = 0;
if (cpi->tile_data == NULL || cpi->allocated_tiles < tile_cols * tile_rows) {
- if (cpi->tile_data != NULL) vpx_free(cpi->tile_data);
+ if (cpi->tile_data != NULL) {
+ // Free the row mt memory in cpi->tile_data first.
+ vp9_row_mt_mem_dealloc(cpi);
+ vpx_free(cpi->tile_data);
+ }
+ cpi->allocated_tiles = 0;
CHECK_MEM_ERROR(
&cm->error, cpi->tile_data,
vpx_malloc(tile_cols * tile_rows * sizeof(*cpi->tile_data)));
@@ -5883,9 +5888,9 @@ void vp9_init_tile_data(VP9_COMP *cpi) {
for (tile_col = 0; tile_col < tile_cols; ++tile_col) {
TileDataEnc *this_tile = &cpi->tile_data[tile_row * tile_cols + tile_col];
TileInfo *tile_info = &this_tile->tile_info;
- if (cpi->sf.adaptive_rd_thresh_row_mt &&
- this_tile->row_base_thresh_freq_fact == NULL)
+ if (cpi->sf.adaptive_rd_thresh_row_mt) {
vp9_row_mt_alloc_rd_thresh(cpi, this_tile);
+ }
vp9_tile_init(tile_info, cm, tile_row, tile_col);
cpi->tile_tok[tile_row][tile_col] = pre_tok + tile_tok;
diff --git a/media/libvpx/libvpx/vp9/encoder/vp9_encoder.c b/media/libvpx/libvpx/vp9/encoder/vp9_encoder.c
index 3b8b5345f1..8616cdc630 100644
--- a/media/libvpx/libvpx/vp9/encoder/vp9_encoder.c
+++ b/media/libvpx/libvpx/vp9/encoder/vp9_encoder.c
@@ -3901,7 +3901,7 @@ static void set_frame_size(VP9_COMP *cpi) {
}
if (!frame_is_intra_only(cm) && !has_valid_ref_frame) {
vpx_internal_error(
- &cm->error, VPX_CODEC_CORRUPT_FRAME,
+ &cm->error, VPX_CODEC_ERROR,
"Can't find at least one reference frame with valid size");
}
@@ -3973,7 +3973,7 @@ static YV12_BUFFER_CONFIG *svc_twostage_scale(
}
static int encode_without_recode_loop(VP9_COMP *cpi, size_t *size,
- uint8_t *dest) {
+ uint8_t *dest, size_t dest_size) {
VP9_COMMON *const cm = &cpi->common;
SVC *const svc = &cpi->svc;
int q = 0, bottom_index = 0, top_index = 0;
@@ -4269,7 +4269,7 @@ static int encode_without_recode_loop(VP9_COMP *cpi, size_t *size,
int frame_size = 0;
// Get an estimate of the encoded frame size.
save_coding_context(cpi);
- vp9_pack_bitstream(cpi, dest, size);
+ vp9_pack_bitstream(cpi, dest, dest_size, size);
restore_coding_context(cpi);
frame_size = (int)(*size) << 3;
// Check if encoded frame will overshoot too much, and if so, set the q and
@@ -4472,7 +4472,8 @@ static void rq_model_update(const RATE_QINDEX_HISTORY *rq_history,
}
#endif // CONFIG_RATE_CTRL
-static void encode_with_recode_loop(VP9_COMP *cpi, size_t *size, uint8_t *dest
+static void encode_with_recode_loop(VP9_COMP *cpi, size_t *size, uint8_t *dest,
+ size_t dest_size
#if CONFIG_RATE_CTRL
,
RATE_QINDEX_HISTORY *rq_history
@@ -4665,7 +4666,8 @@ static void encode_with_recode_loop(VP9_COMP *cpi, size_t *size, uint8_t *dest
// to recode.
if (cpi->sf.recode_loop >= ALLOW_RECODE_KFARFGF) {
save_coding_context(cpi);
- if (!cpi->sf.use_nonrd_pick_mode) vp9_pack_bitstream(cpi, dest, size);
+ if (!cpi->sf.use_nonrd_pick_mode)
+ vp9_pack_bitstream(cpi, dest, dest_size, size);
rc->projected_frame_size = (int)(*size) << 3;
@@ -5173,7 +5175,7 @@ static void spatial_denoise_frame(VP9_COMP *cpi) {
#if !CONFIG_REALTIME_ONLY
static void vp9_try_disable_lookahead_aq(VP9_COMP *cpi, size_t *size,
- uint8_t *dest) {
+ uint8_t *dest, size_t dest_size) {
if (cpi->common.seg.enabled)
if (ALT_REF_AQ_PROTECT_GAIN) {
size_t nsize = *size;
@@ -5184,7 +5186,7 @@ static void vp9_try_disable_lookahead_aq(VP9_COMP *cpi, size_t *size,
save_coding_context(cpi);
vp9_disable_segmentation(&cpi->common.seg);
- vp9_pack_bitstream(cpi, dest, &nsize);
+ vp9_pack_bitstream(cpi, dest, dest_size, &nsize);
restore_coding_context(cpi);
overhead = (int)*size - (int)nsize;
@@ -5477,8 +5479,8 @@ static void update_encode_frame_result_simple_encode(
#endif // !CONFIG_REALTIME_ONLY
static void encode_frame_to_data_rate(
- VP9_COMP *cpi, size_t *size, uint8_t *dest, unsigned int *frame_flags,
- ENCODE_FRAME_RESULT *encode_frame_result) {
+ VP9_COMP *cpi, size_t *size, uint8_t *dest, size_t dest_size,
+ unsigned int *frame_flags, ENCODE_FRAME_RESULT *encode_frame_result) {
VP9_COMMON *const cm = &cpi->common;
const VP9EncoderConfig *const oxcf = &cpi->oxcf;
struct segmentation *const seg = &cm->seg;
@@ -5585,16 +5587,17 @@ static void encode_frame_to_data_rate(
}
if (cpi->sf.recode_loop == DISALLOW_RECODE) {
- if (!encode_without_recode_loop(cpi, size, dest)) return;
+ if (!encode_without_recode_loop(cpi, size, dest, dest_size)) return;
} else {
#if !CONFIG_REALTIME_ONLY
#if CONFIG_RATE_CTRL
- encode_with_recode_loop(cpi, size, dest, &encode_frame_result->rq_history);
+ encode_with_recode_loop(cpi, size, dest, dest_size,
+ &encode_frame_result->rq_history);
#else // CONFIG_RATE_CTRL
#if CONFIG_COLLECT_COMPONENT_TIMING
start_timing(cpi, encode_with_recode_loop_time);
#endif
- encode_with_recode_loop(cpi, size, dest);
+ encode_with_recode_loop(cpi, size, dest, dest_size);
#if CONFIG_COLLECT_COMPONENT_TIMING
end_timing(cpi, encode_with_recode_loop_time);
#endif
@@ -5614,7 +5617,7 @@ static void encode_frame_to_data_rate(
#if !CONFIG_REALTIME_ONLY
// Disable segmentation if it decrease rate/distortion ratio
if (cpi->oxcf.aq_mode == LOOKAHEAD_AQ)
- vp9_try_disable_lookahead_aq(cpi, size, dest);
+ vp9_try_disable_lookahead_aq(cpi, size, dest, dest_size);
#endif
#if CONFIG_VP9_TEMPORAL_DENOISING
@@ -5671,7 +5674,7 @@ static void encode_frame_to_data_rate(
start_timing(cpi, vp9_pack_bitstream_time);
#endif
// build the bitstream
- vp9_pack_bitstream(cpi, dest, size);
+ vp9_pack_bitstream(cpi, dest, dest_size, size);
#if CONFIG_COLLECT_COMPONENT_TIMING
end_timing(cpi, vp9_pack_bitstream_time);
#endif
@@ -5862,32 +5865,33 @@ static void encode_frame_to_data_rate(
}
static void SvcEncode(VP9_COMP *cpi, size_t *size, uint8_t *dest,
- unsigned int *frame_flags) {
+ size_t dest_size, unsigned int *frame_flags) {
vp9_rc_get_svc_params(cpi);
- encode_frame_to_data_rate(cpi, size, dest, frame_flags,
+ encode_frame_to_data_rate(cpi, size, dest, dest_size, frame_flags,
/*encode_frame_result = */ NULL);
}
static void Pass0Encode(VP9_COMP *cpi, size_t *size, uint8_t *dest,
- unsigned int *frame_flags) {
+ size_t dest_size, unsigned int *frame_flags) {
if (cpi->oxcf.rc_mode == VPX_CBR) {
vp9_rc_get_one_pass_cbr_params(cpi);
} else {
vp9_rc_get_one_pass_vbr_params(cpi);
}
- encode_frame_to_data_rate(cpi, size, dest, frame_flags,
+ encode_frame_to_data_rate(cpi, size, dest, dest_size, frame_flags,
/*encode_frame_result = */ NULL);
}
#if !CONFIG_REALTIME_ONLY
static void Pass2Encode(VP9_COMP *cpi, size_t *size, uint8_t *dest,
- unsigned int *frame_flags,
+ size_t dest_size, unsigned int *frame_flags,
ENCODE_FRAME_RESULT *encode_frame_result) {
cpi->allow_encode_breakout = ENCODE_BREAKOUT_ENABLED;
#if CONFIG_MISMATCH_DEBUG
mismatch_move_frame_idx_w();
#endif
- encode_frame_to_data_rate(cpi, size, dest, frame_flags, encode_frame_result);
+ encode_frame_to_data_rate(cpi, size, dest, dest_size, frame_flags,
+ encode_frame_result);
}
#endif // !CONFIG_REALTIME_ONLY
@@ -6300,8 +6304,8 @@ void vp9_init_encode_frame_result(ENCODE_FRAME_RESULT *encode_frame_result) {
}
int vp9_get_compressed_data(VP9_COMP *cpi, unsigned int *frame_flags,
- size_t *size, uint8_t *dest, int64_t *time_stamp,
- int64_t *time_end, int flush,
+ size_t *size, uint8_t *dest, size_t dest_size,
+ int64_t *time_stamp, int64_t *time_end, int flush,
ENCODE_FRAME_RESULT *encode_frame_result) {
const VP9EncoderConfig *const oxcf = &cpi->oxcf;
VP9_COMMON *const cm = &cpi->common;
@@ -6583,10 +6587,10 @@ int vp9_get_compressed_data(VP9_COMP *cpi, unsigned int *frame_flags,
#if CONFIG_REALTIME_ONLY
(void)encode_frame_result;
if (cpi->use_svc) {
- SvcEncode(cpi, size, dest, frame_flags);
+ SvcEncode(cpi, size, dest, dest_size, frame_flags);
} else {
// One pass encode
- Pass0Encode(cpi, size, dest, frame_flags);
+ Pass0Encode(cpi, size, dest, dest_size, frame_flags);
}
#else // !CONFIG_REALTIME_ONLY
if (oxcf->pass == 1 && !cpi->use_svc) {
@@ -6609,16 +6613,16 @@ int vp9_get_compressed_data(VP9_COMP *cpi, unsigned int *frame_flags,
// Accumulate 2nd pass time in 2-pass case.
start_timing(cpi, Pass2Encode_time);
#endif
- Pass2Encode(cpi, size, dest, frame_flags, encode_frame_result);
+ Pass2Encode(cpi, size, dest, dest_size, frame_flags, encode_frame_result);
vp9_twopass_postencode_update(cpi);
#if CONFIG_COLLECT_COMPONENT_TIMING
end_timing(cpi, Pass2Encode_time);
#endif
} else if (cpi->use_svc) {
- SvcEncode(cpi, size, dest, frame_flags);
+ SvcEncode(cpi, size, dest, dest_size, frame_flags);
} else {
// One pass encode
- Pass0Encode(cpi, size, dest, frame_flags);
+ Pass0Encode(cpi, size, dest, dest_size, frame_flags);
}
#endif // CONFIG_REALTIME_ONLY
diff --git a/media/libvpx/libvpx/vp9/encoder/vp9_encoder.h b/media/libvpx/libvpx/vp9/encoder/vp9_encoder.h
index 898855d10d..e3e740f17e 100644
--- a/media/libvpx/libvpx/vp9/encoder/vp9_encoder.h
+++ b/media/libvpx/libvpx/vp9/encoder/vp9_encoder.h
@@ -339,6 +339,10 @@ typedef struct TileDataEnc {
// Used for adaptive_rd_thresh with row multithreading
int *row_base_thresh_freq_fact;
+ // The value of sb_rows when row_base_thresh_freq_fact is allocated.
+ // The row_base_thresh_freq_fact array has sb_rows * BLOCK_SIZES * MAX_MODES
+ // elements.
+ int sb_rows;
MV firstpass_top_mv;
} TileDataEnc;
@@ -1221,8 +1225,8 @@ int vp9_receive_raw_frame(VP9_COMP *cpi, vpx_enc_frame_flags_t frame_flags,
int64_t end_time);
int vp9_get_compressed_data(VP9_COMP *cpi, unsigned int *frame_flags,
- size_t *size, uint8_t *dest, int64_t *time_stamp,
- int64_t *time_end, int flush,
+ size_t *size, uint8_t *dest, size_t dest_size,
+ int64_t *time_stamp, int64_t *time_end, int flush,
ENCODE_FRAME_RESULT *encode_frame_result);
int vp9_get_preview_raw_frame(VP9_COMP *cpi, YV12_BUFFER_CONFIG *dest,
diff --git a/media/libvpx/libvpx/vp9/encoder/vp9_ethread.h b/media/libvpx/libvpx/vp9/encoder/vp9_ethread.h
index 359cdd1290..46478bef9f 100644
--- a/media/libvpx/libvpx/vp9/encoder/vp9_ethread.h
+++ b/media/libvpx/libvpx/vp9/encoder/vp9_ethread.h
@@ -19,6 +19,7 @@ extern "C" {
#define MAX_NUM_TILE_COLS (1 << 6)
#define MAX_NUM_TILE_ROWS 4
+#define MAX_NUM_THREADS 64
struct VP9_COMP;
struct ThreadData;
diff --git a/media/libvpx/libvpx/vp9/encoder/vp9_firstpass.c b/media/libvpx/libvpx/vp9/encoder/vp9_firstpass.c
index 58b9b7ba61..2bf1bfcaf4 100644
--- a/media/libvpx/libvpx/vp9/encoder/vp9_firstpass.c
+++ b/media/libvpx/libvpx/vp9/encoder/vp9_firstpass.c
@@ -2302,6 +2302,44 @@ static void define_gf_group_structure(VP9_COMP *cpi) {
gf_group->gf_group_size = frame_index;
}
+static void ext_rc_define_gf_group_structure(
+ VP9_COMP *cpi, vpx_rc_gop_decision_t *gop_decision) {
+ RATE_CONTROL *const rc = &cpi->rc;
+ TWO_PASS *const twopass = &cpi->twopass;
+ GF_GROUP *const gf_group = &twopass->gf_group;
+ const int key_frame = cpi->common.frame_type == KEY_FRAME;
+
+ if (!key_frame) {
+ set_gf_overlay_frame_type(gf_group, 0, rc->source_alt_ref_active);
+ }
+
+ for (int frame_index = 1; frame_index < gop_decision->gop_coding_frames;
+ frame_index++) {
+ const int ext_frame_index = key_frame ? frame_index : frame_index - 1;
+ const vpx_rc_frame_update_type_t update_type =
+ gop_decision->update_type[ext_frame_index];
+ gf_group->update_type[frame_index] = (FRAME_UPDATE_TYPE)update_type;
+ if (update_type == VPX_RC_ARF_UPDATE) {
+ gf_group->rf_level[frame_index] = GF_ARF_STD;
+ gf_group->layer_depth[frame_index] = 1;
+ gf_group->arf_src_offset[frame_index] =
+ (unsigned char)(rc->baseline_gf_interval - 1);
+ gf_group->frame_gop_index[frame_index] = rc->baseline_gf_interval;
+ } else if (update_type == VPX_RC_LF_UPDATE) {
+ gf_group->frame_gop_index[frame_index] = frame_index;
+ gf_group->arf_src_offset[frame_index] = 0;
+ gf_group->rf_level[frame_index] = INTER_NORMAL;
+ gf_group->layer_depth[frame_index] = 2;
+ } else if (update_type == VPX_RC_OVERLAY_UPDATE) {
+ set_gf_overlay_frame_type(gf_group, frame_index,
+ rc->source_alt_ref_pending);
+ gf_group->arf_src_offset[frame_index] = 0;
+ gf_group->frame_gop_index[frame_index] = rc->baseline_gf_interval;
+ }
+ }
+ gf_group->max_layer_depth = 2;
+}
+
static void allocate_gf_group_bits(VP9_COMP *cpi, int64_t gf_group_bits,
int gf_arf_bits) {
VP9EncoderConfig *const oxcf = &cpi->oxcf;
@@ -3604,7 +3642,7 @@ void vp9_rc_get_second_pass_params(VP9_COMP *cpi) {
rc->baseline_gf_interval =
gop_decision.gop_coding_frames - rc->source_alt_ref_pending;
rc->frames_till_gf_update_due = rc->baseline_gf_interval;
- define_gf_group_structure(cpi);
+ ext_rc_define_gf_group_structure(cpi, &gop_decision);
}
} else {
// Keyframe and section processing.
diff --git a/media/libvpx/libvpx/vp9/encoder/vp9_multi_thread.c b/media/libvpx/libvpx/vp9/encoder/vp9_multi_thread.c
index 6e124f9944..8437ce7531 100644
--- a/media/libvpx/libvpx/vp9/encoder/vp9_multi_thread.c
+++ b/media/libvpx/libvpx/vp9/encoder/vp9_multi_thread.c
@@ -55,16 +55,23 @@ void *vp9_enc_grp_get_next_job(MultiThreadHandle *multi_thread_ctxt,
void vp9_row_mt_alloc_rd_thresh(VP9_COMP *const cpi,
TileDataEnc *const this_tile) {
VP9_COMMON *const cm = &cpi->common;
- const int sb_rows =
- (mi_cols_aligned_to_sb(cm->mi_rows) >> MI_BLOCK_SIZE_LOG2) + 1;
+ const int sb_rows = mi_cols_aligned_to_sb(cm->mi_rows) >> MI_BLOCK_SIZE_LOG2;
int i;
+ if (this_tile->row_base_thresh_freq_fact != NULL) {
+ if (sb_rows <= this_tile->sb_rows) {
+ return;
+ }
+ vpx_free(this_tile->row_base_thresh_freq_fact);
+ this_tile->row_base_thresh_freq_fact = NULL;
+ }
CHECK_MEM_ERROR(
&cm->error, this_tile->row_base_thresh_freq_fact,
(int *)vpx_calloc(sb_rows * BLOCK_SIZES * MAX_MODES,
sizeof(*(this_tile->row_base_thresh_freq_fact))));
for (i = 0; i < sb_rows * BLOCK_SIZES * MAX_MODES; i++)
this_tile->row_base_thresh_freq_fact[i] = RD_THRESH_INIT_FACT;
+ this_tile->sb_rows = sb_rows;
}
void vp9_row_mt_mem_alloc(VP9_COMP *cpi) {
@@ -101,13 +108,6 @@ void vp9_row_mt_mem_alloc(VP9_COMP *cpi) {
for (tile_col = 0; tile_col < tile_cols; tile_col++) {
TileDataEnc *this_tile = &cpi->tile_data[tile_col];
vp9_row_mt_sync_mem_alloc(&this_tile->row_mt_sync, cm, jobs_per_tile_col);
- if (cpi->sf.adaptive_rd_thresh_row_mt) {
- if (this_tile->row_base_thresh_freq_fact != NULL) {
- vpx_free(this_tile->row_base_thresh_freq_fact);
- this_tile->row_base_thresh_freq_fact = NULL;
- }
- vp9_row_mt_alloc_rd_thresh(cpi, this_tile);
- }
}
// Assign the sync pointer of tile row zero for every tile row > 0
@@ -136,14 +136,17 @@ void vp9_row_mt_mem_dealloc(VP9_COMP *cpi) {
#endif
// Deallocate memory for job queue
- if (multi_thread_ctxt->job_queue) vpx_free(multi_thread_ctxt->job_queue);
+ if (multi_thread_ctxt->job_queue) {
+ vpx_free(multi_thread_ctxt->job_queue);
+ multi_thread_ctxt->job_queue = NULL;
+ }
#if CONFIG_MULTITHREAD
// Destroy mutex for each tile
for (tile_col = 0; tile_col < multi_thread_ctxt->allocated_tile_cols;
tile_col++) {
RowMTInfo *row_mt_info = &multi_thread_ctxt->row_mt_info[tile_col];
- if (row_mt_info) pthread_mutex_destroy(&row_mt_info->job_mutex);
+ pthread_mutex_destroy(&row_mt_info->job_mutex);
}
#endif
@@ -169,6 +172,10 @@ void vp9_row_mt_mem_dealloc(VP9_COMP *cpi) {
}
}
#endif
+
+ multi_thread_ctxt->allocated_tile_cols = 0;
+ multi_thread_ctxt->allocated_tile_rows = 0;
+ multi_thread_ctxt->allocated_vert_unit_rows = 0;
}
void vp9_multi_thread_tile_init(VP9_COMP *cpi) {
diff --git a/media/libvpx/libvpx/vp9/encoder/vp9_pickmode.c b/media/libvpx/libvpx/vp9/encoder/vp9_pickmode.c
index 6f2524b36e..d561b5062c 100644
--- a/media/libvpx/libvpx/vp9/encoder/vp9_pickmode.c
+++ b/media/libvpx/libvpx/vp9/encoder/vp9_pickmode.c
@@ -1698,7 +1698,7 @@ void vp9_pick_inter_mode(VP9_COMP *cpi, MACROBLOCK *x, TileDataEnc *tile_data,
MV_REFERENCE_FRAME usable_ref_frame, second_ref_frame;
int_mv frame_mv[MB_MODE_COUNT][MAX_REF_FRAMES];
uint8_t mode_checked[MB_MODE_COUNT][MAX_REF_FRAMES];
- struct buf_2d yv12_mb[4][MAX_MB_PLANE];
+ struct buf_2d yv12_mb[4][MAX_MB_PLANE] = { 0 };
RD_COST this_rdc, best_rdc;
// var_y and sse_y are saved to be used in skipping checking
unsigned int var_y = UINT_MAX;
diff --git a/media/libvpx/libvpx/vp9/encoder/vp9_rdopt.c b/media/libvpx/libvpx/vp9/encoder/vp9_rdopt.c
index 447136ed84..c1a8c10891 100644
--- a/media/libvpx/libvpx/vp9/encoder/vp9_rdopt.c
+++ b/media/libvpx/libvpx/vp9/encoder/vp9_rdopt.c
@@ -3435,6 +3435,14 @@ int vp9_active_edge_sb(VP9_COMP *cpi, int mi_row, int mi_col) {
}
#if !CONFIG_REALTIME_ONLY
+void init_frame_mv(int_mv frame_mv[MB_MODE_COUNT][MAX_REF_FRAMES]) {
+ for (int mode = 0; mode < MB_MODE_COUNT; ++mode) {
+ for (int ref_frame = 0; ref_frame < MAX_REF_FRAMES; ++ref_frame) {
+ frame_mv[mode][ref_frame].as_int = INVALID_MV;
+ }
+ }
+}
+
void vp9_rd_pick_inter_mode_sb(VP9_COMP *cpi, TileDataEnc *tile_data,
MACROBLOCK *x, int mi_row, int mi_col,
RD_COST *rd_cost, BLOCK_SIZE bsize,
@@ -3452,7 +3460,7 @@ void vp9_rd_pick_inter_mode_sb(VP9_COMP *cpi, TileDataEnc *tile_data,
unsigned char segment_id = mi->segment_id;
int comp_pred, i, k;
int_mv frame_mv[MB_MODE_COUNT][MAX_REF_FRAMES];
- struct buf_2d yv12_mb[4][MAX_MB_PLANE];
+ struct buf_2d yv12_mb[4][MAX_MB_PLANE] = { 0 };
int_mv single_newmv[MAX_REF_FRAMES] = { { 0 } };
INTERP_FILTER single_inter_filter[MB_MODE_COUNT][MAX_REF_FRAMES];
int single_skippable[MB_MODE_COUNT][MAX_REF_FRAMES];
@@ -3530,6 +3538,8 @@ void vp9_rd_pick_inter_mode_sb(VP9_COMP *cpi, TileDataEnc *tile_data,
rd_cost->rate = INT_MAX;
+ init_frame_mv(frame_mv);
+
for (ref_frame = LAST_FRAME; ref_frame <= ALTREF_FRAME; ++ref_frame) {
x->pred_mv_sad[ref_frame] = INT_MAX;
if ((cpi->ref_frame_flags & ref_frame_to_flag(ref_frame)) &&
@@ -4297,7 +4307,7 @@ void vp9_rd_pick_inter_mode_sub8x8(VP9_COMP *cpi, TileDataEnc *tile_data,
unsigned char segment_id = mi->segment_id;
int comp_pred, i;
int_mv frame_mv[MB_MODE_COUNT][MAX_REF_FRAMES];
- struct buf_2d yv12_mb[4][MAX_MB_PLANE];
+ struct buf_2d yv12_mb[4][MAX_MB_PLANE] = { 0 };
int64_t best_rd = best_rd_so_far;
int64_t best_yrd = best_rd_so_far; // FIXME(rbultje) more precise
int64_t best_pred_diff[REFERENCE_MODES];
diff --git a/media/libvpx/libvpx/vp9/encoder/vp9_speed_features.h b/media/libvpx/libvpx/vp9/encoder/vp9_speed_features.h
index 941de639ac..513ae93526 100644
--- a/media/libvpx/libvpx/vp9/encoder/vp9_speed_features.h
+++ b/media/libvpx/libvpx/vp9/encoder/vp9_speed_features.h
@@ -306,7 +306,7 @@ typedef struct SPEED_FEATURES {
// Turned off when (row_mt_bit_exact == 1 && adaptive_rd_thresh_row_mt == 0).
int adaptive_rd_thresh;
- // Flag to use adaptive_rd_thresh when row-mt it enabled, only for non-rd
+ // Flag to use adaptive_rd_thresh when row-mt is enabled, only for non-rd
// pickmode.
int adaptive_rd_thresh_row_mt;
diff --git a/media/libvpx/libvpx/vp9/ratectrl_rtc.cc b/media/libvpx/libvpx/vp9/ratectrl_rtc.cc
index 942c15ce49..a1be595353 100644
--- a/media/libvpx/libvpx/vp9/ratectrl_rtc.cc
+++ b/media/libvpx/libvpx/vp9/ratectrl_rtc.cc
@@ -305,7 +305,9 @@ int VP9RateControlRTC::GetLoopfilterLevel() const {
bool VP9RateControlRTC::GetSegmentationData(
VP9SegmentationData *segmentation_data) const {
- if (!cpi_->cyclic_refresh->apply_cyclic_refresh) return false;
+ if (!cpi_->cyclic_refresh || !cpi_->cyclic_refresh->apply_cyclic_refresh) {
+ return false;
+ }
segmentation_data->segmentation_map = cpi_->segmentation_map;
segmentation_data->segmentation_map_size =
diff --git a/media/libvpx/libvpx/vp9/simple_encode.cc b/media/libvpx/libvpx/vp9/simple_encode.cc
index 5e565d1b1a..54b4f38559 100644
--- a/media/libvpx/libvpx/vp9/simple_encode.cc
+++ b/media/libvpx/libvpx/vp9/simple_encode.cc
@@ -502,6 +502,7 @@ static bool init_encode_frame_result(EncodeFrameResult *encode_frame_result,
encode_frame_result->coding_data.reset(
new (std::nothrow) uint8_t[max_coding_data_byte_size]);
+ encode_frame_result->max_coding_data_byte_size = max_coding_data_byte_size;
encode_frame_result->num_rows_4x4 = get_num_unit_4x4(frame_height);
encode_frame_result->num_cols_4x4 = get_num_unit_4x4(frame_width);
@@ -512,6 +513,7 @@ static bool init_encode_frame_result(EncodeFrameResult *encode_frame_result,
encode_frame_result->tpl_stats_info.resize(MAX_LAG_BUFFERS);
if (encode_frame_result->coding_data.get() == nullptr) {
+ encode_frame_result->max_coding_data_byte_size = 0;
return false;
}
return init_image_buffer(&encode_frame_result->coded_frame, frame_width,
@@ -919,7 +921,7 @@ void SimpleEncode::ComputeFirstPassStats() {
ENCODE_FRAME_RESULT encode_frame_info;
vp9_init_encode_frame_result(&encode_frame_info);
// TODO(angiebird): Call vp9_first_pass directly
- vp9_get_compressed_data(impl_ptr_->cpi, &frame_flags, &size, nullptr,
+ vp9_get_compressed_data(impl_ptr_->cpi, &frame_flags, &size, nullptr, 0,
&time_stamp, &time_end, flush,
&encode_frame_info);
// vp9_get_compressed_data only generates first pass stats not
@@ -1205,8 +1207,9 @@ void SimpleEncode::EncodeFrame(EncodeFrameResult *encode_frame_result) {
&encode_frame_info.coded_frame);
vp9_get_compressed_data(cpi, &frame_flags,
&encode_frame_result->coding_data_byte_size,
- encode_frame_result->coding_data.get(), &time_stamp,
- &time_end, flush, &encode_frame_info);
+ encode_frame_result->coding_data.get(),
+ encode_frame_result->max_coding_data_byte_size,
+ &time_stamp, &time_end, flush, &encode_frame_info);
if (out_file_ != nullptr) {
ivf_write_frame_header(out_file_, time_stamp,
encode_frame_result->coding_data_byte_size);
@@ -1220,10 +1223,8 @@ void SimpleEncode::EncodeFrame(EncodeFrameResult *encode_frame_result) {
fprintf(stderr, "Coding data size <= 0\n");
abort();
}
- const size_t max_coding_data_byte_size =
- get_max_coding_data_byte_size(frame_width_, frame_height_);
if (encode_frame_result->coding_data_byte_size >
- max_coding_data_byte_size) {
+ encode_frame_result->max_coding_data_byte_size) {
fprintf(stderr, "Coding data size exceeds the maximum.\n");
abort();
}
diff --git a/media/libvpx/libvpx/vp9/simple_encode.h b/media/libvpx/libvpx/vp9/simple_encode.h
index d610a5e159..94ecbf284c 100644
--- a/media/libvpx/libvpx/vp9/simple_encode.h
+++ b/media/libvpx/libvpx/vp9/simple_encode.h
@@ -263,6 +263,7 @@ struct EncodeFrameResult {
// The EncodeFrame will allocate a buffer, write the coding data into the
// buffer and give the ownership of the buffer to coding_data.
std::unique_ptr<unsigned char[]> coding_data;
+ size_t max_coding_data_byte_size;
double psnr;
uint64_t sse;
int quantize_index;
diff --git a/media/libvpx/libvpx/vp9/vp9_cx_iface.c b/media/libvpx/libvpx/vp9/vp9_cx_iface.c
index fe62bac5f2..f365e578d8 100644
--- a/media/libvpx/libvpx/vp9/vp9_cx_iface.c
+++ b/media/libvpx/libvpx/vp9/vp9_cx_iface.c
@@ -19,11 +19,11 @@
#include "vpx_dsp/psnr.h"
#include "vpx_ports/static_assert.h"
#include "vpx_ports/system_state.h"
-#include "vpx_util/vpx_thread.h"
#include "vpx_util/vpx_timestamp.h"
#include "vpx/internal/vpx_codec_internal.h"
#include "./vpx_version.h"
#include "vp9/encoder/vp9_encoder.h"
+#include "vp9/encoder/vp9_ethread.h"
#include "vpx/vp8cx.h"
#include "vp9/common/vp9_alloccommon.h"
#include "vp9/common/vp9_scale.h"
@@ -1459,13 +1459,14 @@ static vpx_codec_err_t encoder_encode(vpx_codec_alg_priv_t *ctx,
/* Any pending invisible frames? */
if (ctx->pending_cx_data) {
+ assert(cx_data_sz >= ctx->pending_cx_data_sz);
memmove(cx_data, ctx->pending_cx_data, ctx->pending_cx_data_sz);
ctx->pending_cx_data = cx_data;
cx_data += ctx->pending_cx_data_sz;
cx_data_sz -= ctx->pending_cx_data_sz;
- /* TODO: this is a minimal check, the underlying codec doesn't respect
- * the buffer size anyway.
+ /* TODO(webm:1844): this is a minimal check, the underlying codec doesn't
+ * respect the buffer size anyway.
*/
if (cx_data_sz < ctx->cx_data_sz / 2) {
vpx_internal_error(&cpi->common.error, VPX_CODEC_ERROR,
@@ -1484,9 +1485,9 @@ static vpx_codec_err_t encoder_encode(vpx_codec_alg_priv_t *ctx,
ENCODE_FRAME_RESULT encode_frame_result;
vp9_init_encode_frame_result(&encode_frame_result);
// TODO(angiebird): Call vp9_first_pass directly
- ret = vp9_get_compressed_data(cpi, &lib_flags, &size, cx_data,
- &dst_time_stamp, &dst_end_time_stamp,
- !img, &encode_frame_result);
+ ret = vp9_get_compressed_data(
+ cpi, &lib_flags, &size, cx_data, cx_data_sz, &dst_time_stamp,
+ &dst_end_time_stamp, !img, &encode_frame_result);
assert(size == 0); // There is no compressed data in the first pass
(void)ret;
assert(ret == 0);
@@ -1510,8 +1511,9 @@ static vpx_codec_err_t encoder_encode(vpx_codec_alg_priv_t *ctx,
vp9_init_encode_frame_result(&encode_frame_result);
while (cx_data_sz >= ctx->cx_data_sz / 2 &&
-1 != vp9_get_compressed_data(cpi, &lib_flags, &size, cx_data,
- &dst_time_stamp, &dst_end_time_stamp,
- !img, &encode_frame_result)) {
+ cx_data_sz, &dst_time_stamp,
+ &dst_end_time_stamp, !img,
+ &encode_frame_result)) {
// Pack psnr pkt
if (size > 0 && !cpi->use_svc) {
// TODO(angiebird): Figure out while we don't need psnr pkt when
@@ -1528,7 +1530,7 @@ static vpx_codec_err_t encoder_encode(vpx_codec_alg_priv_t *ctx,
if (!cpi->common.show_frame ||
(cpi->use_svc && cpi->svc.spatial_layer_id <
cpi->svc.number_spatial_layers - 1)) {
- if (ctx->pending_cx_data == 0) ctx->pending_cx_data = cx_data;
+ if (ctx->pending_cx_data == NULL) ctx->pending_cx_data = cx_data;
ctx->pending_cx_data_sz += size;
if (size)
ctx->pending_frame_sizes[ctx->pending_frame_count++] = size;
diff --git a/media/libvpx/libvpx/vpx/exports_com b/media/libvpx/libvpx/vpx/exports_com
index f0b46aa175..2ab05099f8 100644
--- a/media/libvpx/libvpx/vpx/exports_com
+++ b/media/libvpx/libvpx/vpx/exports_com
@@ -14,6 +14,3 @@ text vpx_img_flip
text vpx_img_free
text vpx_img_set_rect
text vpx_img_wrap
-text vpx_free_tpl_gop_stats
-text vpx_read_tpl_gop_stats
-text vpx_write_tpl_gop_stats
diff --git a/media/libvpx/libvpx/vpx/src/vpx_image.c b/media/libvpx/libvpx/vpx/src/vpx_image.c
index 3f7ff74244..8ef218a252 100644
--- a/media/libvpx/libvpx/vpx/src/vpx_image.c
+++ b/media/libvpx/libvpx/vpx/src/vpx_image.c
@@ -8,6 +8,7 @@
* be found in the AUTHORS file in the root of the source tree.
*/
+#include <assert.h>
#include <limits.h>
#include <stdlib.h>
#include <string.h>
@@ -21,14 +22,23 @@ static vpx_image_t *img_alloc_helper(vpx_image_t *img, vpx_img_fmt_t fmt,
unsigned int buf_align,
unsigned int stride_align,
unsigned char *img_data) {
- unsigned int h, w, s, xcs, ycs, bps;
- unsigned int stride_in_bytes;
+ unsigned int h, w, xcs, ycs, bps;
+ uint64_t s;
+ int stride_in_bytes;
unsigned int align;
if (img != NULL) memset(img, 0, sizeof(vpx_image_t));
if (fmt == VPX_IMG_FMT_NONE) goto fail;
+ /* Impose maximum values on input parameters so that this function can
+ * perform arithmetic operations without worrying about overflows.
+ */
+ if (d_w > 0x08000000 || d_h > 0x08000000 || buf_align > 65536 ||
+ stride_align > 65536) {
+ goto fail;
+ }
+
/* Treat align==0 like align==1 */
if (!buf_align) buf_align = 1;
@@ -78,13 +88,28 @@ static vpx_image_t *img_alloc_helper(vpx_image_t *img, vpx_img_fmt_t fmt,
default: ycs = 0; break;
}
- /* Calculate storage sizes. If the buffer was allocated externally, the width
- * and height shouldn't be adjusted. */
- w = d_w;
- h = d_h;
- s = (fmt & VPX_IMG_FMT_PLANAR) ? w : bps * w / 8;
- s = (s + stride_align - 1) & ~(stride_align - 1);
- stride_in_bytes = (fmt & VPX_IMG_FMT_HIGHBITDEPTH) ? s * 2 : s;
+ /* Calculate storage sizes. */
+ if (img_data) {
+ /* If the buffer was allocated externally, the width and height shouldn't
+ * be adjusted. */
+ w = d_w;
+ h = d_h;
+ } else {
+ /* Calculate storage sizes given the chroma subsampling */
+ align = (1 << xcs) - 1;
+ w = (d_w + align) & ~align;
+ assert(d_w <= w);
+ align = (1 << ycs) - 1;
+ h = (d_h + align) & ~align;
+ assert(d_h <= h);
+ }
+
+ s = (fmt & VPX_IMG_FMT_PLANAR) ? w : (uint64_t)bps * w / 8;
+ s = (fmt & VPX_IMG_FMT_HIGHBITDEPTH) ? s * 2 : s;
+ s = (s + stride_align - 1) & ~((uint64_t)stride_align - 1);
+ if (s > INT_MAX) goto fail;
+ stride_in_bytes = (int)s;
+ s = (fmt & VPX_IMG_FMT_HIGHBITDEPTH) ? s / 2 : s;
/* Allocate the new image */
if (!img) {
@@ -99,15 +124,6 @@ static vpx_image_t *img_alloc_helper(vpx_image_t *img, vpx_img_fmt_t fmt,
if (!img_data) {
uint64_t alloc_size;
- /* Calculate storage sizes given the chroma subsampling */
- align = (1 << xcs) - 1;
- w = (d_w + align) & ~align;
- align = (1 << ycs) - 1;
- h = (d_h + align) & ~align;
-
- s = (fmt & VPX_IMG_FMT_PLANAR) ? w : bps * w / 8;
- s = (s + stride_align - 1) & ~(stride_align - 1);
- stride_in_bytes = (fmt & VPX_IMG_FMT_HIGHBITDEPTH) ? s * 2 : s;
alloc_size = (fmt & VPX_IMG_FMT_PLANAR) ? (uint64_t)h * s * bps / 8
: (uint64_t)h * s;
@@ -148,8 +164,8 @@ vpx_image_t *vpx_img_alloc(vpx_image_t *img, vpx_img_fmt_t fmt,
vpx_image_t *vpx_img_wrap(vpx_image_t *img, vpx_img_fmt_t fmt, unsigned int d_w,
unsigned int d_h, unsigned int stride_align,
unsigned char *img_data) {
- /* By setting buf_align = 1, we don't change buffer alignment in this
- * function. */
+ /* Set buf_align = 1. It is ignored by img_alloc_helper because img_data is
+ * not NULL. */
return img_alloc_helper(img, fmt, d_w, d_h, 1, stride_align, img_data);
}
@@ -172,34 +188,33 @@ int vpx_img_set_rect(vpx_image_t *img, unsigned int x, unsigned int y,
if (img->fmt & VPX_IMG_FMT_HAS_ALPHA) {
img->planes[VPX_PLANE_ALPHA] =
data + x * bytes_per_sample + y * img->stride[VPX_PLANE_ALPHA];
- data += img->h * img->stride[VPX_PLANE_ALPHA];
+ data += (size_t)img->h * img->stride[VPX_PLANE_ALPHA];
}
img->planes[VPX_PLANE_Y] =
data + x * bytes_per_sample + y * img->stride[VPX_PLANE_Y];
- data += img->h * img->stride[VPX_PLANE_Y];
+ data += (size_t)img->h * img->stride[VPX_PLANE_Y];
+ unsigned int uv_x = x >> img->x_chroma_shift;
+ unsigned int uv_y = y >> img->y_chroma_shift;
if (img->fmt == VPX_IMG_FMT_NV12) {
img->planes[VPX_PLANE_U] =
- data + (x >> img->x_chroma_shift) +
- (y >> img->y_chroma_shift) * img->stride[VPX_PLANE_U];
+ data + uv_x + uv_y * img->stride[VPX_PLANE_U];
img->planes[VPX_PLANE_V] = img->planes[VPX_PLANE_U] + 1;
} else if (!(img->fmt & VPX_IMG_FMT_UV_FLIP)) {
img->planes[VPX_PLANE_U] =
- data + (x >> img->x_chroma_shift) * bytes_per_sample +
- (y >> img->y_chroma_shift) * img->stride[VPX_PLANE_U];
- data += (img->h >> img->y_chroma_shift) * img->stride[VPX_PLANE_U];
+ data + uv_x * bytes_per_sample + uv_y * img->stride[VPX_PLANE_U];
+ data +=
+ (size_t)(img->h >> img->y_chroma_shift) * img->stride[VPX_PLANE_U];
img->planes[VPX_PLANE_V] =
- data + (x >> img->x_chroma_shift) * bytes_per_sample +
- (y >> img->y_chroma_shift) * img->stride[VPX_PLANE_V];
+ data + uv_x * bytes_per_sample + uv_y * img->stride[VPX_PLANE_V];
} else {
img->planes[VPX_PLANE_V] =
- data + (x >> img->x_chroma_shift) * bytes_per_sample +
- (y >> img->y_chroma_shift) * img->stride[VPX_PLANE_V];
- data += (img->h >> img->y_chroma_shift) * img->stride[VPX_PLANE_V];
+ data + uv_x * bytes_per_sample + uv_y * img->stride[VPX_PLANE_V];
+ data +=
+ (size_t)(img->h >> img->y_chroma_shift) * img->stride[VPX_PLANE_V];
img->planes[VPX_PLANE_U] =
- data + (x >> img->x_chroma_shift) * bytes_per_sample +
- (y >> img->y_chroma_shift) * img->stride[VPX_PLANE_U];
+ data + uv_x * bytes_per_sample + uv_y * img->stride[VPX_PLANE_U];
}
}
return 0;
diff --git a/media/libvpx/libvpx/vpx/src/vpx_tpl.c b/media/libvpx/libvpx/vpx/src/vpx_tpl.c
deleted file mode 100644
index b0687a8135..0000000000
--- a/media/libvpx/libvpx/vpx/src/vpx_tpl.c
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Copyright (c) 2023 The WebM project authors. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license
- * that can be found in the LICENSE file in the root of the source
- * tree. An additional intellectual property rights grant can be found
- * in the file PATENTS. All contributing project authors may
- * be found in the AUTHORS file in the root of the source tree.
- */
-
-#include <stdlib.h>
-
-#include "vpx/vpx_codec.h"
-#include "vpx/vpx_tpl.h"
-#include "vpx_mem/vpx_mem.h"
-
-#define CHECK_FPRINTF_ERROR(expr) \
- do { \
- if (expr < 0) { \
- return VPX_CODEC_ERROR; \
- } \
- } while (0)
-
-#define CHECK_FSCANF_ERROR(expr, expected_value) \
- do { \
- if (expr != expected_value) { \
- return VPX_CODEC_ERROR; \
- } \
- } while (0)
-
-vpx_codec_err_t vpx_write_tpl_gop_stats(FILE *tpl_file,
- const VpxTplGopStats *tpl_gop_stats) {
- int i;
- if (tpl_file == NULL || tpl_gop_stats == NULL) return VPX_CODEC_INVALID_PARAM;
- CHECK_FPRINTF_ERROR(fprintf(tpl_file, "%d\n", tpl_gop_stats->size));
-
- for (i = 0; i < tpl_gop_stats->size; i++) {
- VpxTplFrameStats frame_stats = tpl_gop_stats->frame_stats_list[i];
- const int num_blocks = frame_stats.num_blocks;
- int block;
- CHECK_FPRINTF_ERROR(fprintf(tpl_file, "%d %d %d\n", frame_stats.frame_width,
- frame_stats.frame_height, num_blocks));
- for (block = 0; block < num_blocks; block++) {
- VpxTplBlockStats block_stats = frame_stats.block_stats_list[block];
- CHECK_FPRINTF_ERROR(
- fprintf(tpl_file,
- "%" PRId64 " %" PRId64 " %" PRId16 " %" PRId16 " %" PRId64
- " %" PRId64 " %d\n",
- block_stats.inter_cost, block_stats.intra_cost,
- block_stats.mv_c, block_stats.mv_r, block_stats.srcrf_dist,
- block_stats.srcrf_rate, block_stats.ref_frame_index));
- }
- }
-
- return VPX_CODEC_OK;
-}
-
-vpx_codec_err_t vpx_read_tpl_gop_stats(FILE *tpl_file,
- VpxTplGopStats *tpl_gop_stats) {
- int i, frame_list_size;
- if (tpl_file == NULL || tpl_gop_stats == NULL) return VPX_CODEC_INVALID_PARAM;
- CHECK_FSCANF_ERROR(fscanf(tpl_file, "%d\n", &frame_list_size), 1);
- tpl_gop_stats->size = frame_list_size;
- tpl_gop_stats->frame_stats_list = (VpxTplFrameStats *)vpx_calloc(
- frame_list_size, sizeof(tpl_gop_stats->frame_stats_list[0]));
- if (tpl_gop_stats->frame_stats_list == NULL) {
- return VPX_CODEC_MEM_ERROR;
- }
- for (i = 0; i < frame_list_size; i++) {
- VpxTplFrameStats *frame_stats = &tpl_gop_stats->frame_stats_list[i];
- int num_blocks, width, height, block;
- CHECK_FSCANF_ERROR(
- fscanf(tpl_file, "%d %d %d\n", &width, &height, &num_blocks), 3);
- frame_stats->num_blocks = num_blocks;
- frame_stats->frame_width = width;
- frame_stats->frame_height = height;
- frame_stats->block_stats_list = (VpxTplBlockStats *)vpx_calloc(
- num_blocks, sizeof(frame_stats->block_stats_list[0]));
- if (frame_stats->block_stats_list == NULL) {
- vpx_free_tpl_gop_stats(tpl_gop_stats);
- return VPX_CODEC_MEM_ERROR;
- }
- for (block = 0; block < num_blocks; block++) {
- VpxTplBlockStats *block_stats = &frame_stats->block_stats_list[block];
- CHECK_FSCANF_ERROR(
- fscanf(tpl_file,
- "%" SCNd64 " %" SCNd64 " %" SCNd16 " %" SCNd16 " %" SCNd64
- " %" SCNd64 " %d\n",
- &block_stats->inter_cost, &block_stats->intra_cost,
- &block_stats->mv_c, &block_stats->mv_r,
- &block_stats->srcrf_dist, &block_stats->srcrf_rate,
- &block_stats->ref_frame_index),
- 7);
- }
- }
-
- return VPX_CODEC_OK;
-}
-
-void vpx_free_tpl_gop_stats(VpxTplGopStats *tpl_gop_stats) {
- int frame;
- if (tpl_gop_stats == NULL) return;
- for (frame = 0; frame < tpl_gop_stats->size; frame++) {
- vpx_free(tpl_gop_stats->frame_stats_list[frame].block_stats_list);
- }
- vpx_free(tpl_gop_stats->frame_stats_list);
-}
diff --git a/media/libvpx/libvpx/vpx/vpx_codec.mk b/media/libvpx/libvpx/vpx/vpx_codec.mk
index 25c815ef51..4aec88b300 100644
--- a/media/libvpx/libvpx/vpx/vpx_codec.mk
+++ b/media/libvpx/libvpx/vpx/vpx_codec.mk
@@ -37,7 +37,6 @@ API_SRCS-yes += internal/vpx_codec_internal.h
API_SRCS-yes += internal/vpx_ratectrl_rtc.h
API_SRCS-yes += src/vpx_codec.c
API_SRCS-yes += src/vpx_image.c
-API_SRCS-yes += src/vpx_tpl.c
API_SRCS-yes += vpx_codec.h
API_SRCS-yes += vpx_codec.mk
API_SRCS-yes += vpx_frame_buffer.h
diff --git a/media/libvpx/libvpx/vpx/vpx_encoder.h b/media/libvpx/libvpx/vpx/vpx_encoder.h
index 809a097d94..740e7aa444 100644
--- a/media/libvpx/libvpx/vpx/vpx_encoder.h
+++ b/media/libvpx/libvpx/vpx/vpx_encoder.h
@@ -1019,6 +1019,8 @@ typedef unsigned long vpx_enc_deadline_t;
*
* \param[in] ctx Pointer to this instance's context
* \param[in] img Image data to encode, NULL to flush.
+ * Encoding sample values outside the range
+ * [0..(1<<img->bit_depth)-1] is undefined behavior.
* \param[in] pts Presentation time stamp, in timebase units.
* \param[in] duration Duration to show frame, in timebase units.
* \param[in] flags Flags to use for encoding this frame.
diff --git a/media/libvpx/libvpx/vpx/vpx_ext_ratectrl.h b/media/libvpx/libvpx/vpx/vpx_ext_ratectrl.h
index ba12e4f83b..d56e151114 100644
--- a/media/libvpx/libvpx/vpx/vpx_ext_ratectrl.h
+++ b/media/libvpx/libvpx/vpx/vpx_ext_ratectrl.h
@@ -28,6 +28,15 @@ extern "C" {
*/
#define VPX_EXT_RATECTRL_ABI_VERSION (5 + VPX_TPL_ABI_VERSION)
+/*!\brief This is correspondent to MAX_STATIC_GF_GROUP_LENGTH defined in
+ * vp9_ratectrl.h
+ */
+#define VPX_RC_MAX_STATIC_GF_GROUP_LENGTH 250
+
+/*!\brief Max number of ref frames returned by the external RC. Correspondent to
+ * MAX_REF_FRAMES defined in vp9_blockd.h. */
+#define VPX_RC_MAX_REF_FRAMES 4
+
/*!\brief The control type of the inference API.
* In VPX_RC_QP mode, the external rate control model determines the
* quantization parameter (QP) for each frame.
@@ -56,6 +65,29 @@ typedef enum vpx_ext_rc_mode {
VPX_RC_CQ = 2,
} vpx_ext_rc_mode_t;
+/*!\brief This is correspondent to FRAME_UPDATE_TYPE defined in vp9_firstpass.h.
+ */
+typedef enum vpx_rc_frame_update_type {
+ VPX_RC_INVALID_UPDATE_TYPE = -1,
+ VPX_RC_KF_UPDATE = 0,
+ VPX_RC_LF_UPDATE = 1,
+ VPX_RC_GF_UPDATE = 2,
+ VPX_RC_ARF_UPDATE = 3,
+ VPX_RC_OVERLAY_UPDATE = 4,
+ VPX_RC_MID_OVERLAY_UPDATE = 5,
+ VPX_RC_USE_BUF_FRAME = 6,
+} vpx_rc_frame_update_type_t;
+
+/*!\brief Name for the ref frames returned by the external RC. Correspondent to
+ * the ref frames defined in vp9_blockd.h. */
+typedef enum vpx_rc_ref_name {
+ VPX_RC_INVALID_REF_FRAME = -1,
+ VPX_RC_INTRA_FRAME = 0,
+ VPX_RC_LAST_FRAME = 1,
+ VPX_RC_GOLDEN_FRAME = 2,
+ VPX_RC_ALTREF_FRAME = 3,
+} vpx_rc_ref_name_t;
+
/*!\brief Abstract rate control model handler
*
* The encoder will receive the model handler from create_model() defined in
@@ -318,75 +350,12 @@ typedef struct vpx_rc_config {
int base_qp; /**< base QP for leaf frames, 0-255 */
} vpx_rc_config_t;
-/*!\brief Information passed to the external rate control model to
- * help make GOP decisions.
+/*!\brief Control what ref frame to use and its index.
*/
-typedef struct vpx_rc_gop_info {
- /*!
- * Minimum allowed gf interval, fixed for the whole clip.
- * Note that it will be modified to match vp9's level constraints
- * in the encoder.
- * The level constraint is defined in vp9_encoder.c:
- * const Vp9LevelSpec vp9_level_defs[VP9_LEVELS].
- */
- int min_gf_interval;
- /*!
- * Maximum allowed gf interval, fixed for the whole clip.
- */
- int max_gf_interval;
- /*!
- * Minimum allowed gf interval for the current GOP, determined
- * by the encoder.
- */
- int active_min_gf_interval;
- /*!
- * Maximum allowed gf interval for the current GOP, determined
- * by the encoder.
- */
- int active_max_gf_interval;
- /*!
- * Whether to allow the use of alt ref, determined by the encoder.
- * It is fixed for the entire encode.
- * See function "is_altref_enabled" in vp9_encoder.h.
- */
- int allow_alt_ref;
- /*!
- * Is the current frame a key frame.
- */
- int is_key_frame;
- /*!
- * Does the previous gop use alt ref or not.
- */
- int last_gop_use_alt_ref;
- /*!
- * Current frame distance to the last keyframe, e.g., if Nth frame is a key,
- * then the value of the N+1 th frame is 1.
- */
- int frames_since_key;
- /*!
- * Current frame distance to the next keyframe, e.g. if Nth frame is a key,
- * then the value of frame N - 1 is 1.
- */
- int frames_to_key;
- /*!
- * Number of lookahead source frames.
- */
- int lag_in_frames;
- /*!
- * Display index (temporal stamp) of this frame in the whole clip,
- * starts from zero.
- */
- int show_index;
- /*!
- * Coding index of this frame in the whole clip, starts from zero.
- */
- int coding_index;
- /*!
- * The index of the current gop, starts from zero, resets to zero
- * when a keyframe is set.
- */
- int gop_global_index;
-} vpx_rc_gop_info_t;
+typedef struct vpx_rc_ref_frame {
+ int index[VPX_RC_MAX_REF_FRAMES];
+ vpx_rc_ref_name_t name[VPX_RC_MAX_REF_FRAMES];
+} vpx_rc_ref_frame_t;
/*!\brief The decision made by the external rate control model to set the
* group of picture.
@@ -395,6 +364,14 @@ typedef struct vpx_rc_gop_decision {
int gop_coding_frames; /**< The number of frames of this GOP */
int use_alt_ref; /**< Whether to use alt ref for this GOP */
int use_key_frame; /**< Whether to set key frame for this GOP */
+ // Frame type for each frame in this GOP.
+ // This will be populated to |update_type| in GF_GROUP defined in
+ // vp9_firstpass.h
+ vpx_rc_frame_update_type_t update_type[VPX_RC_MAX_STATIC_GF_GROUP_LENGTH + 2];
+ // Ref frame buffer index to be updated for each frame in this GOP.
+ int update_ref_index[VPX_RC_MAX_STATIC_GF_GROUP_LENGTH + 2];
+ // Ref frame list to be used for each frame in this GOP.
+ vpx_rc_ref_frame_t ref_frame_list[VPX_RC_MAX_STATIC_GF_GROUP_LENGTH + 2];
} vpx_rc_gop_decision_t;
/*!\brief Create an external rate control model callback prototype
diff --git a/media/libvpx/libvpx/vpx/vpx_image.h b/media/libvpx/libvpx/vpx/vpx_image.h
index 1adc9b9d9e..af8bf8e6c3 100644
--- a/media/libvpx/libvpx/vpx/vpx_image.h
+++ b/media/libvpx/libvpx/vpx/vpx_image.h
@@ -64,8 +64,12 @@ typedef enum vpx_color_space {
/*!\brief List of supported color range */
typedef enum vpx_color_range {
- VPX_CR_STUDIO_RANGE = 0, /**< Y [16..235], UV [16..240] */
- VPX_CR_FULL_RANGE = 1 /**< YUV/RGB [0..255] */
+ VPX_CR_STUDIO_RANGE = 0, /**<- Y [16..235], UV [16..240] (bit depth 8) */
+ /**<- Y [64..940], UV [64..960] (bit depth 10) */
+ /**<- Y [256..3760], UV [256..3840] (bit depth 12) */
+ VPX_CR_FULL_RANGE = 1 /**<- YUV/RGB [0..255] (bit depth 8) */
+ /**<- YUV/RGB [0..1023] (bit depth 10) */
+ /**<- YUV/RGB [0..4095] (bit depth 12) */
} vpx_color_range_t; /**< alias for enum vpx_color_range */
/**\brief Image Descriptor */
@@ -132,10 +136,13 @@ typedef struct vpx_image_rect {
* is NULL, the storage for the descriptor will be
* allocated on the heap.
* \param[in] fmt Format for the image
- * \param[in] d_w Width of the image
- * \param[in] d_h Height of the image
+ * \param[in] d_w Width of the image. Must not exceed 0x08000000
+ * (2^27).
+ * \param[in] d_h Height of the image. Must not exceed 0x08000000
+ * (2^27).
* \param[in] align Alignment, in bytes, of the image buffer and
- * each row in the image(stride).
+ * each row in the image (stride). Must not exceed
+ * 65536.
*
* \return Returns a pointer to the initialized image descriptor. If the img
* parameter is non-null, the value of the img parameter will be
@@ -155,9 +162,12 @@ vpx_image_t *vpx_img_alloc(vpx_image_t *img, vpx_img_fmt_t fmt,
* parameter is NULL, the storage for the descriptor
* will be allocated on the heap.
* \param[in] fmt Format for the image
- * \param[in] d_w Width of the image
- * \param[in] d_h Height of the image
- * \param[in] stride_align Alignment, in bytes, of each row in the image.
+ * \param[in] d_w Width of the image. Must not exceed 0x08000000
+ * (2^27).
+ * \param[in] d_h Height of the image. Must not exceed 0x08000000
+ * (2^27).
+ * \param[in] stride_align Alignment, in bytes, of each row in the image
+ * (stride). Must not exceed 65536.
* \param[in] img_data Storage to use for the image
*
* \return Returns a pointer to the initialized image descriptor. If the img
diff --git a/media/libvpx/libvpx/vpx/vpx_tpl.h b/media/libvpx/libvpx/vpx/vpx_tpl.h
index 7e4c9ab7e1..e14eefcdce 100644
--- a/media/libvpx/libvpx/vpx/vpx_tpl.h
+++ b/media/libvpx/libvpx/vpx/vpx_tpl.h
@@ -15,8 +15,6 @@
#ifndef VPX_VPX_VPX_TPL_H_
#define VPX_VPX_VPX_TPL_H_
-#include <stdio.h>
-
#include "./vpx_integer.h"
#include "./vpx_codec.h"
@@ -32,7 +30,7 @@ extern "C" {
* types, removing or reassigning enums, adding/removing/rearranging
* fields to structures
*/
-#define VPX_TPL_ABI_VERSION (3) /**<\hideinitializer*/
+#define VPX_TPL_ABI_VERSION 4 /**<\hideinitializer*/
/*!\brief Temporal dependency model stats for each block before propagation */
typedef struct VpxTplBlockStats {
@@ -63,40 +61,6 @@ typedef struct VpxTplGopStats {
VpxTplFrameStats *frame_stats_list; /**< List of tpl stats for each frame */
} VpxTplGopStats;
-/*!\brief Write VpxTplGopStats to file
- *
- * Accepts an opened file handle and writes \p tpl_gop_stats.
- *
- * \param[in] tpl_file A FILE pointer that's already been opened.
- * \param[in] tpl_gop_stats VpxTplGopStats that contains TPL stats for the
- * whole GOP.
- *
- * \return VPX_CODEC_OK if TPL stats are successfully written.
- */
-vpx_codec_err_t vpx_write_tpl_gop_stats(FILE *tpl_file,
- const VpxTplGopStats *tpl_gop_stats);
-
-/*!\brief Read VpxTplGopStats from file
- *
- * Accepts an opened file handle and reads TPL stats and stores them into
- * \p tpl_gop_stats. Allocates memory for TPL stats.
- *
- * \param[in] tpl_file A FILE pointer that's already been opened.
- * \param[out] tpl_gop_stats VpxTplGopStats that contains TPL stats for the
- * whole GOP.
- *
- * \return VPX_CODEC_OK if TPL stats are successfully read from file.
- */
-vpx_codec_err_t vpx_read_tpl_gop_stats(FILE *tpl_file,
- VpxTplGopStats *tpl_gop_stats);
-
-/*!\brief Free the memory allocated for VpxTplGopStats
- *
- * \param[in] tpl_gop_stats VpxTplGopStats that contains TPL stats for the
- * whole GOP.
- */
-void vpx_free_tpl_gop_stats(VpxTplGopStats *tpl_gop_stats);
-
#ifdef __cplusplus
} // extern "C"
#endif
diff --git a/media/libvpx/libvpx/vpx_dsp/arm/highbd_convolve8_neon.h b/media/libvpx/libvpx/vpx_dsp/arm/highbd_convolve8_neon.h
new file mode 100644
index 0000000000..ccc4a797b7
--- /dev/null
+++ b/media/libvpx/libvpx/vpx_dsp/arm/highbd_convolve8_neon.h
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2024 The WebM project authors. All Rights Reserved.
+ *
+ * Use of this source code is governed by a BSD-style license
+ * that can be found in the LICENSE file in the root of the source
+ * tree. An additional intellectual property rights grant can be found
+ * in the file PATENTS. All contributing project authors may
+ * be found in the AUTHORS file in the root of the source tree.
+ */
+
+#ifndef VPX_VPX_DSP_ARM_HIGHBD_CONVOLVE8_NEON_H_
+#define VPX_VPX_DSP_ARM_HIGHBD_CONVOLVE8_NEON_H_
+
+#include <arm_neon.h>
+
+static INLINE uint16x4_t highbd_convolve4_4_neon(
+ const int16x4_t s0, const int16x4_t s1, const int16x4_t s2,
+ const int16x4_t s3, const int16x4_t filters, const uint16x4_t max) {
+ int32x4_t sum = vmull_lane_s16(s0, filters, 0);
+ sum = vmlal_lane_s16(sum, s1, filters, 1);
+ sum = vmlal_lane_s16(sum, s2, filters, 2);
+ sum = vmlal_lane_s16(sum, s3, filters, 3);
+
+ uint16x4_t res = vqrshrun_n_s32(sum, FILTER_BITS);
+ return vmin_u16(res, max);
+}
+
+static INLINE uint16x8_t highbd_convolve4_8_neon(
+ const int16x8_t s0, const int16x8_t s1, const int16x8_t s2,
+ const int16x8_t s3, const int16x4_t filters, const uint16x8_t max) {
+ int32x4_t sum0 = vmull_lane_s16(vget_low_s16(s0), filters, 0);
+ sum0 = vmlal_lane_s16(sum0, vget_low_s16(s1), filters, 1);
+ sum0 = vmlal_lane_s16(sum0, vget_low_s16(s2), filters, 2);
+ sum0 = vmlal_lane_s16(sum0, vget_low_s16(s3), filters, 3);
+
+ int32x4_t sum1 = vmull_lane_s16(vget_high_s16(s0), filters, 0);
+ sum1 = vmlal_lane_s16(sum1, vget_high_s16(s1), filters, 1);
+ sum1 = vmlal_lane_s16(sum1, vget_high_s16(s2), filters, 2);
+ sum1 = vmlal_lane_s16(sum1, vget_high_s16(s3), filters, 3);
+
+ uint16x8_t res = vcombine_u16(vqrshrun_n_s32(sum0, FILTER_BITS),
+ vqrshrun_n_s32(sum1, FILTER_BITS));
+ return vminq_u16(res, max);
+}
+
+#endif // VPX_VPX_DSP_ARM_HIGHBD_CONVOLVE8_NEON_H_
diff --git a/media/libvpx/libvpx/vpx_dsp/arm/highbd_convolve8_sve.h b/media/libvpx/libvpx/vpx_dsp/arm/highbd_convolve8_sve.h
new file mode 100644
index 0000000000..bc90d9b4dd
--- /dev/null
+++ b/media/libvpx/libvpx/vpx_dsp/arm/highbd_convolve8_sve.h
@@ -0,0 +1,99 @@
+/*
+ * Copyright (c) 2024 The WebM project authors. All Rights Reserved.
+ *
+ * Use of this source code is governed by a BSD-style license
+ * that can be found in the LICENSE file in the root of the source
+ * tree. An additional intellectual property rights grant can be found
+ * in the file PATENTS. All contributing project authors may
+ * be found in the AUTHORS file in the root of the source tree.
+ */
+
+#ifndef VPX_VPX_DSP_ARM_HIGHBD_CONVOLVE8_SVE_H_
+#define VPX_VPX_DSP_ARM_HIGHBD_CONVOLVE8_SVE_H_
+
+#include <arm_neon.h>
+
+#include "vpx_dsp/arm/vpx_neon_sve_bridge.h"
+
+static INLINE uint16x4_t highbd_convolve4_4_sve(const int16x4_t s[4],
+ const int16x8_t filter,
+ const uint16x4_t max) {
+ int16x8_t s01 = vcombine_s16(s[0], s[1]);
+ int16x8_t s23 = vcombine_s16(s[2], s[3]);
+
+ int64x2_t sum01 = vpx_dotq_lane_s16(vdupq_n_s64(0), s01, filter, 0);
+ int64x2_t sum23 = vpx_dotq_lane_s16(vdupq_n_s64(0), s23, filter, 0);
+
+ int32x4_t res_s32 = vcombine_s32(vmovn_s64(sum01), vmovn_s64(sum23));
+
+ uint16x4_t res_u16 = vqrshrun_n_s32(res_s32, FILTER_BITS);
+ return vmin_u16(res_u16, max);
+}
+
+static INLINE uint16x8_t highbd_convolve4_8_sve(const int16x8_t s[4],
+ const int16x8_t filter,
+ const uint16x8_t max,
+ uint16x8_t idx) {
+ int64x2_t sum04 = vpx_dotq_lane_s16(vdupq_n_s64(0), s[0], filter, 0);
+ int64x2_t sum15 = vpx_dotq_lane_s16(vdupq_n_s64(0), s[1], filter, 0);
+ int64x2_t sum26 = vpx_dotq_lane_s16(vdupq_n_s64(0), s[2], filter, 0);
+ int64x2_t sum37 = vpx_dotq_lane_s16(vdupq_n_s64(0), s[3], filter, 0);
+
+ int32x4_t res0 = vcombine_s32(vmovn_s64(sum04), vmovn_s64(sum15));
+ int32x4_t res1 = vcombine_s32(vmovn_s64(sum26), vmovn_s64(sum37));
+
+ uint16x8_t res = vcombine_u16(vqrshrun_n_s32(res0, FILTER_BITS),
+ vqrshrun_n_s32(res1, FILTER_BITS));
+
+ res = vpx_tbl_u16(res, idx);
+
+ return vminq_u16(res, max);
+}
+
+static INLINE uint16x4_t highbd_convolve8_4(const int16x8_t s[4],
+ const int16x8_t filter,
+ const uint16x4_t max) {
+ int64x2_t sum[4];
+
+ sum[0] = vpx_dotq_s16(vdupq_n_s64(0), s[0], filter);
+ sum[1] = vpx_dotq_s16(vdupq_n_s64(0), s[1], filter);
+ sum[2] = vpx_dotq_s16(vdupq_n_s64(0), s[2], filter);
+ sum[3] = vpx_dotq_s16(vdupq_n_s64(0), s[3], filter);
+
+ sum[0] = vpaddq_s64(sum[0], sum[1]);
+ sum[2] = vpaddq_s64(sum[2], sum[3]);
+
+ int32x4_t res_s32 = vcombine_s32(vmovn_s64(sum[0]), vmovn_s64(sum[2]));
+
+ uint16x4_t res_u16 = vqrshrun_n_s32(res_s32, FILTER_BITS);
+ return vmin_u16(res_u16, max);
+}
+
+static INLINE uint16x8_t highbd_convolve8_8(const int16x8_t s[8],
+ const int16x8_t filter,
+ const uint16x8_t max) {
+ int64x2_t sum[8];
+
+ sum[0] = vpx_dotq_s16(vdupq_n_s64(0), s[0], filter);
+ sum[1] = vpx_dotq_s16(vdupq_n_s64(0), s[1], filter);
+ sum[2] = vpx_dotq_s16(vdupq_n_s64(0), s[2], filter);
+ sum[3] = vpx_dotq_s16(vdupq_n_s64(0), s[3], filter);
+ sum[4] = vpx_dotq_s16(vdupq_n_s64(0), s[4], filter);
+ sum[5] = vpx_dotq_s16(vdupq_n_s64(0), s[5], filter);
+ sum[6] = vpx_dotq_s16(vdupq_n_s64(0), s[6], filter);
+ sum[7] = vpx_dotq_s16(vdupq_n_s64(0), s[7], filter);
+
+ int64x2_t sum01 = vpaddq_s64(sum[0], sum[1]);
+ int64x2_t sum23 = vpaddq_s64(sum[2], sum[3]);
+ int64x2_t sum45 = vpaddq_s64(sum[4], sum[5]);
+ int64x2_t sum67 = vpaddq_s64(sum[6], sum[7]);
+
+ int32x4_t res0 = vcombine_s32(vmovn_s64(sum01), vmovn_s64(sum23));
+ int32x4_t res1 = vcombine_s32(vmovn_s64(sum45), vmovn_s64(sum67));
+
+ uint16x8_t res = vcombine_u16(vqrshrun_n_s32(res0, FILTER_BITS),
+ vqrshrun_n_s32(res1, FILTER_BITS));
+ return vminq_u16(res, max);
+}
+
+#endif // VPX_VPX_DSP_ARM_HIGHBD_CONVOLVE8_SVE_H_
diff --git a/media/libvpx/libvpx/vpx_dsp/arm/highbd_vpx_convolve8_neon.c b/media/libvpx/libvpx/vpx_dsp/arm/highbd_vpx_convolve8_neon.c
index b5a944d299..cc6307f923 100644
--- a/media/libvpx/libvpx/vpx_dsp/arm/highbd_vpx_convolve8_neon.c
+++ b/media/libvpx/libvpx/vpx_dsp/arm/highbd_vpx_convolve8_neon.c
@@ -14,42 +14,13 @@
#include "./vpx_config.h"
#include "./vpx_dsp_rtcd.h"
#include "vpx/vpx_integer.h"
+#include "vpx_dsp/arm/highbd_convolve8_neon.h"
#include "vpx_dsp/arm/mem_neon.h"
#include "vpx_dsp/arm/transpose_neon.h"
#include "vpx_dsp/vpx_dsp_common.h"
#include "vpx_dsp/vpx_filter.h"
#include "vpx_ports/mem.h"
-static INLINE uint16x4_t highbd_convolve4_4(
- const int16x4_t s0, const int16x4_t s1, const int16x4_t s2,
- const int16x4_t s3, const int16x4_t filters, const uint16x4_t max) {
- int32x4_t sum = vmull_lane_s16(s0, filters, 0);
- sum = vmlal_lane_s16(sum, s1, filters, 1);
- sum = vmlal_lane_s16(sum, s2, filters, 2);
- sum = vmlal_lane_s16(sum, s3, filters, 3);
-
- uint16x4_t res = vqrshrun_n_s32(sum, FILTER_BITS);
- return vmin_u16(res, max);
-}
-
-static INLINE uint16x8_t highbd_convolve4_8(
- const int16x8_t s0, const int16x8_t s1, const int16x8_t s2,
- const int16x8_t s3, const int16x4_t filters, const uint16x8_t max) {
- int32x4_t sum0 = vmull_lane_s16(vget_low_s16(s0), filters, 0);
- sum0 = vmlal_lane_s16(sum0, vget_low_s16(s1), filters, 1);
- sum0 = vmlal_lane_s16(sum0, vget_low_s16(s2), filters, 2);
- sum0 = vmlal_lane_s16(sum0, vget_low_s16(s3), filters, 3);
-
- int32x4_t sum1 = vmull_lane_s16(vget_high_s16(s0), filters, 0);
- sum1 = vmlal_lane_s16(sum1, vget_high_s16(s1), filters, 1);
- sum1 = vmlal_lane_s16(sum1, vget_high_s16(s2), filters, 2);
- sum1 = vmlal_lane_s16(sum1, vget_high_s16(s3), filters, 3);
-
- uint16x8_t res = vcombine_u16(vqrshrun_n_s32(sum0, FILTER_BITS),
- vqrshrun_n_s32(sum1, FILTER_BITS));
- return vminq_u16(res, max);
-}
-
static INLINE uint16x4_t
highbd_convolve8_4(const int16x4_t s0, const int16x4_t s1, const int16x4_t s2,
const int16x4_t s3, const int16x4_t s4, const int16x4_t s5,
@@ -118,13 +89,13 @@ static INLINE void highbd_convolve_4tap_horiz_neon(
load_s16_4x4(s + 3 * src_stride, 1, &s3[0], &s3[1], &s3[2], &s3[3]);
uint16x4_t d0 =
- highbd_convolve4_4(s0[0], s0[1], s0[2], s0[3], filter, max);
+ highbd_convolve4_4_neon(s0[0], s0[1], s0[2], s0[3], filter, max);
uint16x4_t d1 =
- highbd_convolve4_4(s1[0], s1[1], s1[2], s1[3], filter, max);
+ highbd_convolve4_4_neon(s1[0], s1[1], s1[2], s1[3], filter, max);
uint16x4_t d2 =
- highbd_convolve4_4(s2[0], s2[1], s2[2], s2[3], filter, max);
+ highbd_convolve4_4_neon(s2[0], s2[1], s2[2], s2[3], filter, max);
uint16x4_t d3 =
- highbd_convolve4_4(s3[0], s3[1], s3[2], s3[3], filter, max);
+ highbd_convolve4_4_neon(s3[0], s3[1], s3[2], s3[3], filter, max);
store_u16_4x4(d, dst_stride, d0, d1, d2, d3);
@@ -148,13 +119,13 @@ static INLINE void highbd_convolve_4tap_horiz_neon(
load_s16_8x4(s + 3 * src_stride, 1, &s3[0], &s3[1], &s3[2], &s3[3]);
uint16x8_t d0 =
- highbd_convolve4_8(s0[0], s0[1], s0[2], s0[3], filter, max);
+ highbd_convolve4_8_neon(s0[0], s0[1], s0[2], s0[3], filter, max);
uint16x8_t d1 =
- highbd_convolve4_8(s1[0], s1[1], s1[2], s1[3], filter, max);
+ highbd_convolve4_8_neon(s1[0], s1[1], s1[2], s1[3], filter, max);
uint16x8_t d2 =
- highbd_convolve4_8(s2[0], s2[1], s2[2], s2[3], filter, max);
+ highbd_convolve4_8_neon(s2[0], s2[1], s2[2], s2[3], filter, max);
uint16x8_t d3 =
- highbd_convolve4_8(s3[0], s3[1], s3[2], s3[3], filter, max);
+ highbd_convolve4_8_neon(s3[0], s3[1], s3[2], s3[3], filter, max);
store_u16_8x4(d, dst_stride, d0, d1, d2, d3);
@@ -393,10 +364,10 @@ static INLINE void highbd_convolve_4tap_vert_neon(
int16x4_t s3, s4, s5, s6;
load_s16_4x4(s, src_stride, &s3, &s4, &s5, &s6);
- uint16x4_t d0 = highbd_convolve4_4(s0, s1, s2, s3, filter, max);
- uint16x4_t d1 = highbd_convolve4_4(s1, s2, s3, s4, filter, max);
- uint16x4_t d2 = highbd_convolve4_4(s2, s3, s4, s5, filter, max);
- uint16x4_t d3 = highbd_convolve4_4(s3, s4, s5, s6, filter, max);
+ uint16x4_t d0 = highbd_convolve4_4_neon(s0, s1, s2, s3, filter, max);
+ uint16x4_t d1 = highbd_convolve4_4_neon(s1, s2, s3, s4, filter, max);
+ uint16x4_t d2 = highbd_convolve4_4_neon(s2, s3, s4, s5, filter, max);
+ uint16x4_t d3 = highbd_convolve4_4_neon(s3, s4, s5, s6, filter, max);
store_u16_4x4(d, dst_stride, d0, d1, d2, d3);
@@ -424,10 +395,10 @@ static INLINE void highbd_convolve_4tap_vert_neon(
int16x8_t s3, s4, s5, s6;
load_s16_8x4(s, src_stride, &s3, &s4, &s5, &s6);
- uint16x8_t d0 = highbd_convolve4_8(s0, s1, s2, s3, filter, max);
- uint16x8_t d1 = highbd_convolve4_8(s1, s2, s3, s4, filter, max);
- uint16x8_t d2 = highbd_convolve4_8(s2, s3, s4, s5, filter, max);
- uint16x8_t d3 = highbd_convolve4_8(s3, s4, s5, s6, filter, max);
+ uint16x8_t d0 = highbd_convolve4_8_neon(s0, s1, s2, s3, filter, max);
+ uint16x8_t d1 = highbd_convolve4_8_neon(s1, s2, s3, s4, filter, max);
+ uint16x8_t d2 = highbd_convolve4_8_neon(s2, s3, s4, s5, filter, max);
+ uint16x8_t d3 = highbd_convolve4_8_neon(s3, s4, s5, s6, filter, max);
store_u16_8x4(d, dst_stride, d0, d1, d2, d3);
@@ -686,12 +657,12 @@ static INLINE void highbd_convolve_2d_4tap_neon(
load_s16_4x4(s + 1 * src_stride, 1, &h_s1[0], &h_s1[1], &h_s1[2], &h_s1[3]);
load_s16_4x4(s + 2 * src_stride, 1, &h_s2[0], &h_s2[1], &h_s2[2], &h_s2[3]);
- int16x4_t v_s0 = vreinterpret_s16_u16(
- highbd_convolve4_4(h_s0[0], h_s0[1], h_s0[2], h_s0[3], x_filter, max));
- int16x4_t v_s1 = vreinterpret_s16_u16(
- highbd_convolve4_4(h_s1[0], h_s1[1], h_s1[2], h_s1[3], x_filter, max));
- int16x4_t v_s2 = vreinterpret_s16_u16(
- highbd_convolve4_4(h_s2[0], h_s2[1], h_s2[2], h_s2[3], x_filter, max));
+ int16x4_t v_s0 = vreinterpret_s16_u16(highbd_convolve4_4_neon(
+ h_s0[0], h_s0[1], h_s0[2], h_s0[3], x_filter, max));
+ int16x4_t v_s1 = vreinterpret_s16_u16(highbd_convolve4_4_neon(
+ h_s1[0], h_s1[1], h_s1[2], h_s1[3], x_filter, max));
+ int16x4_t v_s2 = vreinterpret_s16_u16(highbd_convolve4_4_neon(
+ h_s2[0], h_s2[1], h_s2[2], h_s2[3], x_filter, max));
s += 3 * src_stride;
@@ -706,19 +677,23 @@ static INLINE void highbd_convolve_2d_4tap_neon(
load_s16_4x4(s + 3 * src_stride, 1, &h_s6[0], &h_s6[1], &h_s6[2],
&h_s6[3]);
- int16x4_t v_s3 = vreinterpret_s16_u16(highbd_convolve4_4(
+ int16x4_t v_s3 = vreinterpret_s16_u16(highbd_convolve4_4_neon(
h_s3[0], h_s3[1], h_s3[2], h_s3[3], x_filter, max));
- int16x4_t v_s4 = vreinterpret_s16_u16(highbd_convolve4_4(
+ int16x4_t v_s4 = vreinterpret_s16_u16(highbd_convolve4_4_neon(
h_s4[0], h_s4[1], h_s4[2], h_s4[3], x_filter, max));
- int16x4_t v_s5 = vreinterpret_s16_u16(highbd_convolve4_4(
+ int16x4_t v_s5 = vreinterpret_s16_u16(highbd_convolve4_4_neon(
h_s5[0], h_s5[1], h_s5[2], h_s5[3], x_filter, max));
- int16x4_t v_s6 = vreinterpret_s16_u16(highbd_convolve4_4(
+ int16x4_t v_s6 = vreinterpret_s16_u16(highbd_convolve4_4_neon(
h_s6[0], h_s6[1], h_s6[2], h_s6[3], x_filter, max));
- uint16x4_t d0 = highbd_convolve4_4(v_s0, v_s1, v_s2, v_s3, y_filter, max);
- uint16x4_t d1 = highbd_convolve4_4(v_s1, v_s2, v_s3, v_s4, y_filter, max);
- uint16x4_t d2 = highbd_convolve4_4(v_s2, v_s3, v_s4, v_s5, y_filter, max);
- uint16x4_t d3 = highbd_convolve4_4(v_s3, v_s4, v_s5, v_s6, y_filter, max);
+ uint16x4_t d0 =
+ highbd_convolve4_4_neon(v_s0, v_s1, v_s2, v_s3, y_filter, max);
+ uint16x4_t d1 =
+ highbd_convolve4_4_neon(v_s1, v_s2, v_s3, v_s4, y_filter, max);
+ uint16x4_t d2 =
+ highbd_convolve4_4_neon(v_s2, v_s3, v_s4, v_s5, y_filter, max);
+ uint16x4_t d3 =
+ highbd_convolve4_4_neon(v_s3, v_s4, v_s5, v_s6, y_filter, max);
store_u16_4x4(d, dst_stride, d0, d1, d2, d3);
@@ -745,12 +720,12 @@ static INLINE void highbd_convolve_2d_4tap_neon(
load_s16_8x4(s + 1 * src_stride, 1, &h_s1[0], &h_s1[1], &h_s1[2], &h_s1[3]);
load_s16_8x4(s + 2 * src_stride, 1, &h_s2[0], &h_s2[1], &h_s2[2], &h_s2[3]);
- int16x8_t v_s0 = vreinterpretq_s16_u16(
- highbd_convolve4_8(h_s0[0], h_s0[1], h_s0[2], h_s0[3], x_filter, max));
- int16x8_t v_s1 = vreinterpretq_s16_u16(
- highbd_convolve4_8(h_s1[0], h_s1[1], h_s1[2], h_s1[3], x_filter, max));
- int16x8_t v_s2 = vreinterpretq_s16_u16(
- highbd_convolve4_8(h_s2[0], h_s2[1], h_s2[2], h_s2[3], x_filter, max));
+ int16x8_t v_s0 = vreinterpretq_s16_u16(highbd_convolve4_8_neon(
+ h_s0[0], h_s0[1], h_s0[2], h_s0[3], x_filter, max));
+ int16x8_t v_s1 = vreinterpretq_s16_u16(highbd_convolve4_8_neon(
+ h_s1[0], h_s1[1], h_s1[2], h_s1[3], x_filter, max));
+ int16x8_t v_s2 = vreinterpretq_s16_u16(highbd_convolve4_8_neon(
+ h_s2[0], h_s2[1], h_s2[2], h_s2[3], x_filter, max));
s += 3 * src_stride;
@@ -765,19 +740,23 @@ static INLINE void highbd_convolve_2d_4tap_neon(
load_s16_8x4(s + 3 * src_stride, 1, &h_s6[0], &h_s6[1], &h_s6[2],
&h_s6[3]);
- int16x8_t v_s3 = vreinterpretq_s16_u16(highbd_convolve4_8(
+ int16x8_t v_s3 = vreinterpretq_s16_u16(highbd_convolve4_8_neon(
h_s3[0], h_s3[1], h_s3[2], h_s3[3], x_filter, max));
- int16x8_t v_s4 = vreinterpretq_s16_u16(highbd_convolve4_8(
+ int16x8_t v_s4 = vreinterpretq_s16_u16(highbd_convolve4_8_neon(
h_s4[0], h_s4[1], h_s4[2], h_s4[3], x_filter, max));
- int16x8_t v_s5 = vreinterpretq_s16_u16(highbd_convolve4_8(
+ int16x8_t v_s5 = vreinterpretq_s16_u16(highbd_convolve4_8_neon(
h_s5[0], h_s5[1], h_s5[2], h_s5[3], x_filter, max));
- int16x8_t v_s6 = vreinterpretq_s16_u16(highbd_convolve4_8(
+ int16x8_t v_s6 = vreinterpretq_s16_u16(highbd_convolve4_8_neon(
h_s6[0], h_s6[1], h_s6[2], h_s6[3], x_filter, max));
- uint16x8_t d0 = highbd_convolve4_8(v_s0, v_s1, v_s2, v_s3, y_filter, max);
- uint16x8_t d1 = highbd_convolve4_8(v_s1, v_s2, v_s3, v_s4, y_filter, max);
- uint16x8_t d2 = highbd_convolve4_8(v_s2, v_s3, v_s4, v_s5, y_filter, max);
- uint16x8_t d3 = highbd_convolve4_8(v_s3, v_s4, v_s5, v_s6, y_filter, max);
+ uint16x8_t d0 =
+ highbd_convolve4_8_neon(v_s0, v_s1, v_s2, v_s3, y_filter, max);
+ uint16x8_t d1 =
+ highbd_convolve4_8_neon(v_s1, v_s2, v_s3, v_s4, y_filter, max);
+ uint16x8_t d2 =
+ highbd_convolve4_8_neon(v_s2, v_s3, v_s4, v_s5, y_filter, max);
+ uint16x8_t d3 =
+ highbd_convolve4_8_neon(v_s3, v_s4, v_s5, v_s6, y_filter, max);
store_u16_8x4(d, dst_stride, d0, d1, d2, d3);
diff --git a/media/libvpx/libvpx/vpx_dsp/arm/highbd_vpx_convolve8_sve.c b/media/libvpx/libvpx/vpx_dsp/arm/highbd_vpx_convolve8_sve.c
index 7fc0a57c90..f909e06a18 100644
--- a/media/libvpx/libvpx/vpx_dsp/arm/highbd_vpx_convolve8_sve.c
+++ b/media/libvpx/libvpx/vpx_dsp/arm/highbd_vpx_convolve8_sve.c
@@ -15,6 +15,7 @@
#include "./vpx_dsp_rtcd.h"
#include "vpx/vpx_integer.h"
+#include "vpx_dsp/arm/highbd_convolve8_sve.h"
#include "vpx_dsp/arm/mem_neon.h"
#include "vpx_dsp/arm/transpose_neon.h"
#include "vpx_dsp/arm/vpx_neon_sve_bridge.h"
@@ -22,87 +23,6 @@
DECLARE_ALIGNED(16, static const uint16_t, kTblConv4_8[8]) = { 0, 2, 4, 6,
1, 3, 5, 7 };
-static INLINE uint16x4_t highbd_convolve4_4(const int16x4_t s[4],
- const int16x8_t filter,
- const uint16x4_t max) {
- int16x8_t s01 = vcombine_s16(s[0], s[1]);
- int16x8_t s23 = vcombine_s16(s[2], s[3]);
-
- int64x2_t sum01 = vpx_dotq_lane_s16(vdupq_n_s64(0), s01, filter, 0);
- int64x2_t sum23 = vpx_dotq_lane_s16(vdupq_n_s64(0), s23, filter, 0);
-
- int32x4_t res_s32 = vcombine_s32(vmovn_s64(sum01), vmovn_s64(sum23));
-
- uint16x4_t res_u16 = vqrshrun_n_s32(res_s32, FILTER_BITS);
- return vmin_u16(res_u16, max);
-}
-
-static INLINE uint16x8_t highbd_convolve4_8(const int16x8_t s[4],
- const int16x8_t filter,
- const uint16x8_t max,
- uint16x8_t idx) {
- int64x2_t sum04 = vpx_dotq_lane_s16(vdupq_n_s64(0), s[0], filter, 0);
- int64x2_t sum15 = vpx_dotq_lane_s16(vdupq_n_s64(0), s[1], filter, 0);
- int64x2_t sum26 = vpx_dotq_lane_s16(vdupq_n_s64(0), s[2], filter, 0);
- int64x2_t sum37 = vpx_dotq_lane_s16(vdupq_n_s64(0), s[3], filter, 0);
-
- int32x4_t res0 = vcombine_s32(vmovn_s64(sum04), vmovn_s64(sum15));
- int32x4_t res1 = vcombine_s32(vmovn_s64(sum26), vmovn_s64(sum37));
-
- uint16x8_t res = vcombine_u16(vqrshrun_n_s32(res0, FILTER_BITS),
- vqrshrun_n_s32(res1, FILTER_BITS));
-
- res = vpx_tbl_u16(res, idx);
-
- return vminq_u16(res, max);
-}
-
-static INLINE uint16x4_t highbd_convolve8_4(const int16x8_t s[4],
- const int16x8_t filter,
- const uint16x4_t max) {
- int64x2_t sum[4];
-
- sum[0] = vpx_dotq_s16(vdupq_n_s64(0), s[0], filter);
- sum[1] = vpx_dotq_s16(vdupq_n_s64(0), s[1], filter);
- sum[2] = vpx_dotq_s16(vdupq_n_s64(0), s[2], filter);
- sum[3] = vpx_dotq_s16(vdupq_n_s64(0), s[3], filter);
-
- sum[0] = vpaddq_s64(sum[0], sum[1]);
- sum[2] = vpaddq_s64(sum[2], sum[3]);
-
- int32x4_t res_s32 = vcombine_s32(vmovn_s64(sum[0]), vmovn_s64(sum[2]));
-
- uint16x4_t res_u16 = vqrshrun_n_s32(res_s32, FILTER_BITS);
- return vmin_u16(res_u16, max);
-}
-
-static INLINE uint16x8_t highbd_convolve8_8(const int16x8_t s[8],
- const int16x8_t filter,
- const uint16x8_t max) {
- int64x2_t sum[8];
-
- sum[0] = vpx_dotq_s16(vdupq_n_s64(0), s[0], filter);
- sum[1] = vpx_dotq_s16(vdupq_n_s64(0), s[1], filter);
- sum[2] = vpx_dotq_s16(vdupq_n_s64(0), s[2], filter);
- sum[3] = vpx_dotq_s16(vdupq_n_s64(0), s[3], filter);
- sum[4] = vpx_dotq_s16(vdupq_n_s64(0), s[4], filter);
- sum[5] = vpx_dotq_s16(vdupq_n_s64(0), s[5], filter);
- sum[6] = vpx_dotq_s16(vdupq_n_s64(0), s[6], filter);
- sum[7] = vpx_dotq_s16(vdupq_n_s64(0), s[7], filter);
-
- int64x2_t sum01 = vpaddq_s64(sum[0], sum[1]);
- int64x2_t sum23 = vpaddq_s64(sum[2], sum[3]);
- int64x2_t sum45 = vpaddq_s64(sum[4], sum[5]);
- int64x2_t sum67 = vpaddq_s64(sum[6], sum[7]);
-
- int32x4_t res0 = vcombine_s32(vmovn_s64(sum01), vmovn_s64(sum23));
- int32x4_t res1 = vcombine_s32(vmovn_s64(sum45), vmovn_s64(sum67));
-
- uint16x8_t res = vcombine_u16(vqrshrun_n_s32(res0, FILTER_BITS),
- vqrshrun_n_s32(res1, FILTER_BITS));
- return vminq_u16(res, max);
-}
-
static INLINE void highbd_convolve_4tap_horiz_sve(
const uint16_t *src, ptrdiff_t src_stride, uint16_t *dst,
ptrdiff_t dst_stride, int w, int h, const int16x4_t filters, int bd) {
@@ -120,10 +40,10 @@ static INLINE void highbd_convolve_4tap_horiz_sve(
load_s16_4x4(s + 2 * src_stride, 1, &s2[0], &s2[1], &s2[2], &s2[3]);
load_s16_4x4(s + 3 * src_stride, 1, &s3[0], &s3[1], &s3[2], &s3[3]);
- uint16x4_t d0 = highbd_convolve4_4(s0, filter, max);
- uint16x4_t d1 = highbd_convolve4_4(s1, filter, max);
- uint16x4_t d2 = highbd_convolve4_4(s2, filter, max);
- uint16x4_t d3 = highbd_convolve4_4(s3, filter, max);
+ uint16x4_t d0 = highbd_convolve4_4_sve(s0, filter, max);
+ uint16x4_t d1 = highbd_convolve4_4_sve(s1, filter, max);
+ uint16x4_t d2 = highbd_convolve4_4_sve(s2, filter, max);
+ uint16x4_t d3 = highbd_convolve4_4_sve(s3, filter, max);
store_u16_4x4(d, dst_stride, d0, d1, d2, d3);
@@ -147,10 +67,10 @@ static INLINE void highbd_convolve_4tap_horiz_sve(
load_s16_8x4(s + 2 * src_stride, 1, &s2[0], &s2[1], &s2[2], &s2[3]);
load_s16_8x4(s + 3 * src_stride, 1, &s3[0], &s3[1], &s3[2], &s3[3]);
- uint16x8_t d0 = highbd_convolve4_8(s0, filter, max, idx);
- uint16x8_t d1 = highbd_convolve4_8(s1, filter, max, idx);
- uint16x8_t d2 = highbd_convolve4_8(s2, filter, max, idx);
- uint16x8_t d3 = highbd_convolve4_8(s3, filter, max, idx);
+ uint16x8_t d0 = highbd_convolve4_8_sve(s0, filter, max, idx);
+ uint16x8_t d1 = highbd_convolve4_8_sve(s1, filter, max, idx);
+ uint16x8_t d2 = highbd_convolve4_8_sve(s2, filter, max, idx);
+ uint16x8_t d3 = highbd_convolve4_8_sve(s3, filter, max, idx);
store_u16_8x4(d, dst_stride, d0, d1, d2, d3);
diff --git a/media/libvpx/libvpx/vpx_dsp/arm/highbd_vpx_convolve8_sve2.c b/media/libvpx/libvpx/vpx_dsp/arm/highbd_vpx_convolve8_sve2.c
index 4ed7718f7d..6f0581d3ed 100644
--- a/media/libvpx/libvpx/vpx_dsp/arm/highbd_vpx_convolve8_sve2.c
+++ b/media/libvpx/libvpx/vpx_dsp/arm/highbd_vpx_convolve8_sve2.c
@@ -15,6 +15,8 @@
#include "./vpx_dsp_rtcd.h"
#include "vpx/vpx_integer.h"
+#include "vpx_dsp/arm/highbd_convolve8_neon.h"
+#include "vpx_dsp/arm/highbd_convolve8_sve.h"
#include "vpx_dsp/arm/mem_neon.h"
#include "vpx_dsp/arm/transpose_neon.h"
#include "vpx_dsp/arm/vpx_neon_sve_bridge.h"
@@ -31,6 +33,9 @@ DECLARE_ALIGNED(16, static const uint16_t, kDotProdMergeBlockTbl[24]) = {
};
// clang-format on
+DECLARE_ALIGNED(16, static const uint16_t, kTblConv4_8[8]) = { 0, 2, 4, 6,
+ 1, 3, 5, 7 };
+
static INLINE void transpose_concat_4x4(const int16x4_t s0, const int16x4_t s1,
const int16x4_t s2, const int16x4_t s3,
int16x8_t res[2]) {
@@ -450,3 +455,334 @@ void vpx_highbd_convolve8_avg_vert_sve2(const uint16_t *src,
} while (w != 0);
}
}
+
+static INLINE void highbd_convolve_2d_4tap_sve2(
+ const uint16_t *src, ptrdiff_t src_stride, uint16_t *dst,
+ ptrdiff_t dst_stride, int w, int h, const int16x4_t x_filters,
+ const int16x4_t y_filters, int bd) {
+ const int16x8_t x_filter = vcombine_s16(x_filters, vdup_n_s16(0));
+
+ if (w == 4) {
+ const uint16x4_t max = vdup_n_u16((1 << bd) - 1);
+ const int16_t *s = (const int16_t *)src;
+ uint16_t *d = dst;
+
+ int16x4_t h_s0[4], h_s1[4], h_s2[4];
+ load_s16_4x4(s + 0 * src_stride, 1, &h_s0[0], &h_s0[1], &h_s0[2], &h_s0[3]);
+ load_s16_4x4(s + 1 * src_stride, 1, &h_s1[0], &h_s1[1], &h_s1[2], &h_s1[3]);
+ load_s16_4x4(s + 2 * src_stride, 1, &h_s2[0], &h_s2[1], &h_s2[2], &h_s2[3]);
+
+ int16x4_t v_s0 =
+ vreinterpret_s16_u16(highbd_convolve4_4_sve(h_s0, x_filter, max));
+ int16x4_t v_s1 =
+ vreinterpret_s16_u16(highbd_convolve4_4_sve(h_s1, x_filter, max));
+ int16x4_t v_s2 =
+ vreinterpret_s16_u16(highbd_convolve4_4_sve(h_s2, x_filter, max));
+
+ s += 3 * src_stride;
+
+ do {
+ int16x4_t h_s3[4], h_s4[4], h_s5[4], h_s6[4];
+ load_s16_4x4(s + 0 * src_stride, 1, &h_s3[0], &h_s3[1], &h_s3[2],
+ &h_s3[3]);
+ load_s16_4x4(s + 1 * src_stride, 1, &h_s4[0], &h_s4[1], &h_s4[2],
+ &h_s4[3]);
+ load_s16_4x4(s + 2 * src_stride, 1, &h_s5[0], &h_s5[1], &h_s5[2],
+ &h_s5[3]);
+ load_s16_4x4(s + 3 * src_stride, 1, &h_s6[0], &h_s6[1], &h_s6[2],
+ &h_s6[3]);
+
+ int16x4_t v_s3 =
+ vreinterpret_s16_u16(highbd_convolve4_4_sve(h_s3, x_filter, max));
+ int16x4_t v_s4 =
+ vreinterpret_s16_u16(highbd_convolve4_4_sve(h_s4, x_filter, max));
+ int16x4_t v_s5 =
+ vreinterpret_s16_u16(highbd_convolve4_4_sve(h_s5, x_filter, max));
+ int16x4_t v_s6 =
+ vreinterpret_s16_u16(highbd_convolve4_4_sve(h_s6, x_filter, max));
+
+ uint16x4_t d0 =
+ highbd_convolve4_4_neon(v_s0, v_s1, v_s2, v_s3, y_filters, max);
+ uint16x4_t d1 =
+ highbd_convolve4_4_neon(v_s1, v_s2, v_s3, v_s4, y_filters, max);
+ uint16x4_t d2 =
+ highbd_convolve4_4_neon(v_s2, v_s3, v_s4, v_s5, y_filters, max);
+ uint16x4_t d3 =
+ highbd_convolve4_4_neon(v_s3, v_s4, v_s5, v_s6, y_filters, max);
+
+ store_u16_4x4(d, dst_stride, d0, d1, d2, d3);
+
+ v_s0 = v_s4;
+ v_s1 = v_s5;
+ v_s2 = v_s6;
+ s += 4 * src_stride;
+ d += 4 * dst_stride;
+ h -= 4;
+ } while (h != 0);
+
+ } else {
+ const uint16x8_t max = vdupq_n_u16((1 << bd) - 1);
+ const uint16x8_t idx = vld1q_u16(kTblConv4_8);
+
+ do {
+ const int16_t *s = (const int16_t *)src;
+ uint16_t *d = dst;
+ int height = h;
+
+ int16x8_t h_s0[4], h_s1[4], h_s2[4];
+ load_s16_8x4(s + 0 * src_stride, 1, &h_s0[0], &h_s0[1], &h_s0[2],
+ &h_s0[3]);
+ load_s16_8x4(s + 1 * src_stride, 1, &h_s1[0], &h_s1[1], &h_s1[2],
+ &h_s1[3]);
+ load_s16_8x4(s + 2 * src_stride, 1, &h_s2[0], &h_s2[1], &h_s2[2],
+ &h_s2[3]);
+
+ int16x8_t v_s0 = vreinterpretq_s16_u16(
+ highbd_convolve4_8_sve(h_s0, x_filter, max, idx));
+ int16x8_t v_s1 = vreinterpretq_s16_u16(
+ highbd_convolve4_8_sve(h_s1, x_filter, max, idx));
+ int16x8_t v_s2 = vreinterpretq_s16_u16(
+ highbd_convolve4_8_sve(h_s2, x_filter, max, idx));
+
+ s += 3 * src_stride;
+
+ do {
+ int16x8_t h_s3[4], h_s4[4], h_s5[4], h_s6[4];
+ load_s16_8x4(s + 0 * src_stride, 1, &h_s3[0], &h_s3[1], &h_s3[2],
+ &h_s3[3]);
+ load_s16_8x4(s + 1 * src_stride, 1, &h_s4[0], &h_s4[1], &h_s4[2],
+ &h_s4[3]);
+ load_s16_8x4(s + 2 * src_stride, 1, &h_s5[0], &h_s5[1], &h_s5[2],
+ &h_s5[3]);
+ load_s16_8x4(s + 3 * src_stride, 1, &h_s6[0], &h_s6[1], &h_s6[2],
+ &h_s6[3]);
+
+ int16x8_t v_s3 = vreinterpretq_s16_u16(
+ highbd_convolve4_8_sve(h_s3, x_filter, max, idx));
+ int16x8_t v_s4 = vreinterpretq_s16_u16(
+ highbd_convolve4_8_sve(h_s4, x_filter, max, idx));
+ int16x8_t v_s5 = vreinterpretq_s16_u16(
+ highbd_convolve4_8_sve(h_s5, x_filter, max, idx));
+ int16x8_t v_s6 = vreinterpretq_s16_u16(
+ highbd_convolve4_8_sve(h_s6, x_filter, max, idx));
+
+ uint16x8_t d0 =
+ highbd_convolve4_8_neon(v_s0, v_s1, v_s2, v_s3, y_filters, max);
+ uint16x8_t d1 =
+ highbd_convolve4_8_neon(v_s1, v_s2, v_s3, v_s4, y_filters, max);
+ uint16x8_t d2 =
+ highbd_convolve4_8_neon(v_s2, v_s3, v_s4, v_s5, y_filters, max);
+ uint16x8_t d3 =
+ highbd_convolve4_8_neon(v_s3, v_s4, v_s5, v_s6, y_filters, max);
+
+ store_u16_8x4(d, dst_stride, d0, d1, d2, d3);
+
+ v_s0 = v_s4;
+ v_s1 = v_s5;
+ v_s2 = v_s6;
+ s += 4 * src_stride;
+ d += 4 * dst_stride;
+ height -= 4;
+ } while (height != 0);
+ src += 8;
+ dst += 8;
+ w -= 8;
+ } while (w != 0);
+ }
+}
+
+static INLINE void highbd_convolve8_2d_horiz_sve2(
+ const uint16_t *src, ptrdiff_t src_stride, uint16_t *dst,
+ ptrdiff_t dst_stride, const InterpKernel *filter, int x0_q4, int x_step_q4,
+ int y0_q4, int y_step_q4, int w, int h, int bd) {
+ assert((intptr_t)dst % 4 == 0);
+ assert(dst_stride % 4 == 0);
+ assert(x_step_q4 == 16);
+ assert(h % 4 == 3 && h >= 7);
+
+ (void)x_step_q4;
+ (void)y0_q4;
+ (void)y_step_q4;
+
+ const int16x8_t filters = vld1q_s16(filter[x0_q4]);
+
+ src -= 3;
+
+ if (w == 4) {
+ const uint16x4_t max = vdup_n_u16((1 << bd) - 1);
+ const int16_t *s = (const int16_t *)src;
+ uint16_t *d = dst;
+
+ do {
+ int16x8_t s0[4], s1[4], s2[4], s3[4];
+ load_s16_8x4(s + 0 * src_stride, 1, &s0[0], &s0[1], &s0[2], &s0[3]);
+ load_s16_8x4(s + 1 * src_stride, 1, &s1[0], &s1[1], &s1[2], &s1[3]);
+ load_s16_8x4(s + 2 * src_stride, 1, &s2[0], &s2[1], &s2[2], &s2[3]);
+ load_s16_8x4(s + 3 * src_stride, 1, &s3[0], &s3[1], &s3[2], &s3[3]);
+
+ uint16x4_t d0 = highbd_convolve8_4(s0, filters, max);
+ uint16x4_t d1 = highbd_convolve8_4(s1, filters, max);
+ uint16x4_t d2 = highbd_convolve8_4(s2, filters, max);
+ uint16x4_t d3 = highbd_convolve8_4(s3, filters, max);
+
+ store_u16_4x4(d, dst_stride, d0, d1, d2, d3);
+
+ s += 4 * src_stride;
+ d += 4 * dst_stride;
+ h -= 4;
+ } while (h != 3);
+
+ // Process final three rows (h % 4 == 3).
+ int16x8_t s0[4], s1[4], s2[4];
+ load_s16_8x4(s + 0 * src_stride, 1, &s0[0], &s0[1], &s0[2], &s0[3]);
+ load_s16_8x4(s + 1 * src_stride, 1, &s1[0], &s1[1], &s1[2], &s1[3]);
+ load_s16_8x4(s + 2 * src_stride, 1, &s2[0], &s2[1], &s2[2], &s2[3]);
+
+ uint16x4_t d0 = highbd_convolve8_4(s0, filters, max);
+ uint16x4_t d1 = highbd_convolve8_4(s1, filters, max);
+ uint16x4_t d2 = highbd_convolve8_4(s2, filters, max);
+
+ store_u16_4x3(d, dst_stride, d0, d1, d2);
+ } else {
+ const uint16x8_t max = vdupq_n_u16((1 << bd) - 1);
+
+ do {
+ const int16_t *s = (const int16_t *)src;
+ uint16_t *d = dst;
+ int width = w;
+
+ do {
+ int16x8_t s0[8], s1[8], s2[8], s3[8];
+ load_s16_8x8(s + 0 * src_stride, 1, &s0[0], &s0[1], &s0[2], &s0[3],
+ &s0[4], &s0[5], &s0[6], &s0[7]);
+ load_s16_8x8(s + 1 * src_stride, 1, &s1[0], &s1[1], &s1[2], &s1[3],
+ &s1[4], &s1[5], &s1[6], &s1[7]);
+ load_s16_8x8(s + 2 * src_stride, 1, &s2[0], &s2[1], &s2[2], &s2[3],
+ &s2[4], &s2[5], &s2[6], &s2[7]);
+ load_s16_8x8(s + 3 * src_stride, 1, &s3[0], &s3[1], &s3[2], &s3[3],
+ &s3[4], &s3[5], &s3[6], &s3[7]);
+
+ uint16x8_t d0 = highbd_convolve8_8(s0, filters, max);
+ uint16x8_t d1 = highbd_convolve8_8(s1, filters, max);
+ uint16x8_t d2 = highbd_convolve8_8(s2, filters, max);
+ uint16x8_t d3 = highbd_convolve8_8(s3, filters, max);
+
+ store_u16_8x4(d, dst_stride, d0, d1, d2, d3);
+
+ s += 8;
+ d += 8;
+ width -= 8;
+ } while (width != 0);
+ src += 4 * src_stride;
+ dst += 4 * dst_stride;
+ h -= 4;
+ } while (h != 3);
+
+ // Process final three rows (h % 4 == 3).
+ const int16_t *s = (const int16_t *)src;
+ uint16_t *d = dst;
+ int width = w;
+
+ do {
+ int16x8_t s0[8], s1[8], s2[8];
+ load_s16_8x8(s + 0 * src_stride, 1, &s0[0], &s0[1], &s0[2], &s0[3],
+ &s0[4], &s0[5], &s0[6], &s0[7]);
+ load_s16_8x8(s + 1 * src_stride, 1, &s1[0], &s1[1], &s1[2], &s1[3],
+ &s1[4], &s1[5], &s1[6], &s1[7]);
+ load_s16_8x8(s + 2 * src_stride, 1, &s2[0], &s2[1], &s2[2], &s2[3],
+ &s2[4], &s2[5], &s2[6], &s2[7]);
+
+ uint16x8_t d0 = highbd_convolve8_8(s0, filters, max);
+ uint16x8_t d1 = highbd_convolve8_8(s1, filters, max);
+ uint16x8_t d2 = highbd_convolve8_8(s2, filters, max);
+
+ store_u16_8x3(d, dst_stride, d0, d1, d2);
+
+ s += 8;
+ d += 8;
+ width -= 8;
+ } while (width != 0);
+ }
+}
+
+void vpx_highbd_convolve8_sve2(const uint16_t *src, ptrdiff_t src_stride,
+ uint16_t *dst, ptrdiff_t dst_stride,
+ const InterpKernel *filter, int x0_q4,
+ int x_step_q4, int y0_q4, int y_step_q4, int w,
+ int h, int bd) {
+ if (x_step_q4 != 16 || y_step_q4 != 16) {
+ vpx_highbd_convolve8_c(src, src_stride, dst, dst_stride, filter, x0_q4,
+ x_step_q4, y0_q4, y_step_q4, w, h, bd);
+ return;
+ }
+
+ assert(y_step_q4 == 16);
+ assert(x_step_q4 == 16);
+
+ const int horiz_filter_taps = vpx_get_filter_taps(filter[x0_q4]) <= 4 ? 4 : 8;
+ const int vert_filter_taps = vpx_get_filter_taps(filter[y0_q4]) <= 4 ? 4 : 8;
+
+ if (horiz_filter_taps == 4 || vert_filter_taps == 4) {
+ const ptrdiff_t horiz_offset = horiz_filter_taps / 2 - 1;
+ const ptrdiff_t vert_offset = (vert_filter_taps / 2 - 1) * src_stride;
+ const int16x4_t x_filter = vld1_s16(filter[x0_q4] + 2);
+ const int16x4_t y_filter = vld1_s16(filter[y0_q4] + 2);
+
+ highbd_convolve_2d_4tap_sve2(src - horiz_offset - vert_offset, src_stride,
+ dst, dst_stride, w, h, x_filter, y_filter, bd);
+ return;
+ }
+
+ // Given our constraints: w <= 64, h <= 64, taps <= 8 we can reduce the
+ // maximum buffer size to 64 * (64 + 7).
+ DECLARE_ALIGNED(32, uint16_t, im_block[64 * 71]);
+ const int im_stride = 64;
+
+ // Account for the vertical phase needing SUBPEL_TAPS / 2 - 1 lines prior
+ // and SUBPEL_TAPS / 2 lines post.
+ const int im_height = h + SUBPEL_TAPS - 1;
+ const ptrdiff_t border_offset = SUBPEL_TAPS / 2 - 1;
+
+ highbd_convolve8_2d_horiz_sve2(src - src_stride * border_offset, src_stride,
+ im_block, im_stride, filter, x0_q4, x_step_q4,
+ y0_q4, y_step_q4, w, im_height, bd);
+
+ // Step into the temporary buffer border_offset rows to get actual frame data.
+ vpx_highbd_convolve8_vert_sve2(im_block + im_stride * border_offset,
+ im_stride, dst, dst_stride, filter, x0_q4,
+ x_step_q4, y0_q4, y_step_q4, w, h, bd);
+}
+
+void vpx_highbd_convolve8_avg_sve2(const uint16_t *src, ptrdiff_t src_stride,
+ uint16_t *dst, ptrdiff_t dst_stride,
+ const InterpKernel *filter, int x0_q4,
+ int x_step_q4, int y0_q4, int y_step_q4,
+ int w, int h, int bd) {
+ if (x_step_q4 != 16 || y_step_q4 != 16) {
+ vpx_highbd_convolve8_c(src, src_stride, dst, dst_stride, filter, x0_q4,
+ x_step_q4, y0_q4, y_step_q4, w, h, bd);
+ return;
+ }
+
+ assert(y_step_q4 == 16);
+ assert(x_step_q4 == 16);
+
+ // Given our constraints: w <= 64, h <= 64, taps <= 8 we can reduce the
+ // maximum buffer size to 64 * (64 + 7).
+ DECLARE_ALIGNED(32, uint16_t, im_block[64 * 71]);
+ const int im_stride = 64;
+
+ // Account for the vertical phase needing SUBPEL_TAPS / 2 - 1 lines prior
+ // and SUBPEL_TAPS / 2 lines post.
+ const int im_height = h + SUBPEL_TAPS - 1;
+ const ptrdiff_t border_offset = SUBPEL_TAPS / 2 - 1;
+
+ highbd_convolve8_2d_horiz_sve2(src - src_stride * border_offset, src_stride,
+ im_block, im_stride, filter, x0_q4, x_step_q4,
+ y0_q4, y_step_q4, w, im_height, bd);
+
+ // Step into the temporary buffer border_offset rows to get actual frame data.
+ vpx_highbd_convolve8_avg_vert_sve2(im_block + im_stride * border_offset,
+ im_stride, dst, dst_stride, filter, x0_q4,
+ x_step_q4, y0_q4, y_step_q4, w, h, bd);
+}
diff --git a/media/libvpx/libvpx/vpx_dsp/arm/vpx_scaled_convolve8_neon.c b/media/libvpx/libvpx/vpx_dsp/arm/vpx_scaled_convolve8_neon.c
index 9bd5ec285c..f40b6a907f 100644
--- a/media/libvpx/libvpx/vpx_dsp/arm/vpx_scaled_convolve8_neon.c
+++ b/media/libvpx/libvpx/vpx_dsp/arm/vpx_scaled_convolve8_neon.c
@@ -18,6 +18,7 @@
#include "vpx_dsp/arm/mem_neon.h"
#include "vpx_dsp/arm/transpose_neon.h"
#include "vpx_dsp/arm/vpx_convolve8_neon.h"
+#include "vpx_dsp/vpx_filter.h"
#include "vpx_ports/mem.h"
static INLINE void scaledconvolve_horiz_neon(
diff --git a/media/libvpx/libvpx/vpx_dsp/bitwriter.c b/media/libvpx/libvpx/vpx_dsp/bitwriter.c
index 5b41aa54dd..d3ef9bd89a 100644
--- a/media/libvpx/libvpx/vpx_dsp/bitwriter.c
+++ b/media/libvpx/libvpx/vpx_dsp/bitwriter.c
@@ -9,6 +9,7 @@
*/
#include <assert.h>
+#include <limits.h>
#include "./bitwriter.h"
@@ -16,16 +17,20 @@
#include "vpx_util/vpx_debug_util.h"
#endif
-void vpx_start_encode(vpx_writer *br, uint8_t *source) {
+void vpx_start_encode(vpx_writer *br, uint8_t *source, size_t size) {
br->lowvalue = 0;
br->range = 255;
br->count = -24;
- br->buffer = source;
+ br->error = 0;
br->pos = 0;
+ // Make sure it is safe to cast br->pos to int in vpx_write().
+ if (size > INT_MAX) size = INT_MAX;
+ br->size = (unsigned int)size;
+ br->buffer = source;
vpx_write_bit(br, 0);
}
-void vpx_stop_encode(vpx_writer *br) {
+int vpx_stop_encode(vpx_writer *br) {
int i;
#if CONFIG_BITSTREAM_DEBUG
@@ -34,9 +39,17 @@ void vpx_stop_encode(vpx_writer *br) {
for (i = 0; i < 32; i++) vpx_write_bit(br, 0);
// Ensure there's no ambigous collision with any index marker bytes
- if ((br->buffer[br->pos - 1] & 0xe0) == 0xc0) br->buffer[br->pos++] = 0;
+ if (!br->error && (br->buffer[br->pos - 1] & 0xe0) == 0xc0) {
+ if (br->pos < br->size) {
+ br->buffer[br->pos++] = 0;
+ } else {
+ br->error = 1;
+ }
+ }
#if CONFIG_BITSTREAM_DEBUG
bitstream_queue_set_skip_write(0);
#endif
+
+ return br->error ? -1 : 0;
}
diff --git a/media/libvpx/libvpx/vpx_dsp/bitwriter.h b/media/libvpx/libvpx/vpx_dsp/bitwriter.h
index 5f1ee69ec2..daff331daf 100644
--- a/media/libvpx/libvpx/vpx_dsp/bitwriter.h
+++ b/media/libvpx/libvpx/vpx_dsp/bitwriter.h
@@ -29,12 +29,19 @@ typedef struct vpx_writer {
unsigned int lowvalue;
unsigned int range;
int count;
+ // Whether there has been an error.
+ int error;
+ // We maintain the invariant that pos <= size, i.e., we never write beyond
+ // the end of the buffer. If pos would be incremented to be greater than
+ // size, leave pos unchanged and set error to 1.
unsigned int pos;
+ unsigned int size;
uint8_t *buffer;
} vpx_writer;
-void vpx_start_encode(vpx_writer *br, uint8_t *source);
-void vpx_stop_encode(vpx_writer *br);
+void vpx_start_encode(vpx_writer *br, uint8_t *source, size_t size);
+// Returns 0 on success and returns -1 in case of error.
+int vpx_stop_encode(vpx_writer *br);
static INLINE VPX_NO_UNSIGNED_SHIFT_CHECK void vpx_write(vpx_writer *br,
int bit,
@@ -77,18 +84,25 @@ static INLINE VPX_NO_UNSIGNED_SHIFT_CHECK void vpx_write(vpx_writer *br,
if (count >= 0) {
int offset = shift - count;
- if ((lowvalue << (offset - 1)) & 0x80000000) {
- int x = br->pos - 1;
+ if (!br->error) {
+ if ((lowvalue << (offset - 1)) & 0x80000000) {
+ int x = (int)br->pos - 1;
- while (x >= 0 && br->buffer[x] == 0xff) {
- br->buffer[x] = 0;
- x--;
+ while (x >= 0 && br->buffer[x] == 0xff) {
+ br->buffer[x] = 0;
+ x--;
+ }
+
+ // TODO(wtc): How to prove x >= 0?
+ br->buffer[x] += 1;
}
- br->buffer[x] += 1;
+ if (br->pos < br->size) {
+ br->buffer[br->pos++] = (lowvalue >> (24 - offset)) & 0xff;
+ } else {
+ br->error = 1;
+ }
}
-
- br->buffer[br->pos++] = (lowvalue >> (24 - offset)) & 0xff;
lowvalue <<= offset;
shift = count;
lowvalue &= 0xffffff;
diff --git a/media/libvpx/libvpx/vpx_dsp/bitwriter_buffer.c b/media/libvpx/libvpx/vpx_dsp/bitwriter_buffer.c
index 7a7e96f02e..b3a2490f2c 100644
--- a/media/libvpx/libvpx/vpx_dsp/bitwriter_buffer.c
+++ b/media/libvpx/libvpx/vpx_dsp/bitwriter_buffer.c
@@ -8,24 +8,43 @@
* be found in the AUTHORS file in the root of the source tree.
*/
+#include <assert.h>
#include <limits.h>
#include <stdlib.h>
#include "./vpx_config.h"
#include "./bitwriter_buffer.h"
+void vpx_wb_init(struct vpx_write_bit_buffer *wb, uint8_t *bit_buffer,
+ size_t size) {
+ wb->error = 0;
+ wb->bit_offset = 0;
+ wb->size = size;
+ wb->bit_buffer = bit_buffer;
+}
+
+int vpx_wb_has_error(const struct vpx_write_bit_buffer *wb) {
+ return wb->error;
+}
+
size_t vpx_wb_bytes_written(const struct vpx_write_bit_buffer *wb) {
+ assert(!wb->error);
return wb->bit_offset / CHAR_BIT + (wb->bit_offset % CHAR_BIT > 0);
}
void vpx_wb_write_bit(struct vpx_write_bit_buffer *wb, int bit) {
+ if (wb->error) return;
const int off = (int)wb->bit_offset;
const int p = off / CHAR_BIT;
const int q = CHAR_BIT - 1 - off % CHAR_BIT;
+ if ((size_t)p >= wb->size) {
+ wb->error = 1;
+ return;
+ }
if (q == CHAR_BIT - 1) {
wb->bit_buffer[p] = bit << q;
} else {
- wb->bit_buffer[p] &= ~(1 << q);
+ assert((wb->bit_buffer[p] & (1 << q)) == 0);
wb->bit_buffer[p] |= bit << q;
}
wb->bit_offset = off + 1;
diff --git a/media/libvpx/libvpx/vpx_dsp/bitwriter_buffer.h b/media/libvpx/libvpx/vpx_dsp/bitwriter_buffer.h
index 3662cb64df..3ee0e9658b 100644
--- a/media/libvpx/libvpx/vpx_dsp/bitwriter_buffer.h
+++ b/media/libvpx/libvpx/vpx_dsp/bitwriter_buffer.h
@@ -18,10 +18,24 @@ extern "C" {
#endif
struct vpx_write_bit_buffer {
- uint8_t *bit_buffer;
+ // Whether there has been an error.
+ int error;
+ // We maintain the invariant that bit_offset <= size * CHAR_BIT, i.e., we
+ // never write beyond the end of bit_buffer. If bit_offset would be
+ // incremented to be greater than size * CHAR_BIT, leave bit_offset unchanged
+ // and set error to 1.
size_t bit_offset;
+ // Size of bit_buffer in bytes.
+ size_t size;
+ uint8_t *bit_buffer;
};
+void vpx_wb_init(struct vpx_write_bit_buffer *wb, uint8_t *bit_buffer,
+ size_t size);
+
+int vpx_wb_has_error(const struct vpx_write_bit_buffer *wb);
+
+// Must not be called if vpx_wb_has_error(wb) returns true.
size_t vpx_wb_bytes_written(const struct vpx_write_bit_buffer *wb);
void vpx_wb_write_bit(struct vpx_write_bit_buffer *wb, int bit);
diff --git a/media/libvpx/libvpx/vpx_dsp/vpx_dsp_rtcd_defs.pl b/media/libvpx/libvpx/vpx_dsp/vpx_dsp_rtcd_defs.pl
index f40f85c036..d08f44ac1d 100644
--- a/media/libvpx/libvpx/vpx_dsp/vpx_dsp_rtcd_defs.pl
+++ b/media/libvpx/libvpx/vpx_dsp/vpx_dsp_rtcd_defs.pl
@@ -424,7 +424,7 @@ if (vpx_config("CONFIG_VP9_HIGHBITDEPTH") eq "yes") {
specialize qw/vpx_highbd_convolve_avg sse2 avx2 neon/;
add_proto qw/void vpx_highbd_convolve8/, "const uint16_t *src, ptrdiff_t src_stride, uint16_t *dst, ptrdiff_t dst_stride, const InterpKernel *filter, int x0_q4, int x_step_q4, int y0_q4, int y_step_q4, int w, int h, int bd";
- specialize qw/vpx_highbd_convolve8 avx2 neon/, "$sse2_x86_64";
+ specialize qw/vpx_highbd_convolve8 avx2 neon sve2/, "$sse2_x86_64";
add_proto qw/void vpx_highbd_convolve8_horiz/, "const uint16_t *src, ptrdiff_t src_stride, uint16_t *dst, ptrdiff_t dst_stride, const InterpKernel *filter, int x0_q4, int x_step_q4, int y0_q4, int y_step_q4, int w, int h, int bd";
specialize qw/vpx_highbd_convolve8_horiz avx2 neon sve/, "$sse2_x86_64";
@@ -433,7 +433,7 @@ if (vpx_config("CONFIG_VP9_HIGHBITDEPTH") eq "yes") {
specialize qw/vpx_highbd_convolve8_vert avx2 neon sve2/, "$sse2_x86_64";
add_proto qw/void vpx_highbd_convolve8_avg/, "const uint16_t *src, ptrdiff_t src_stride, uint16_t *dst, ptrdiff_t dst_stride, const InterpKernel *filter, int x0_q4, int x_step_q4, int y0_q4, int y_step_q4, int w, int h, int bd";
- specialize qw/vpx_highbd_convolve8_avg avx2 neon/, "$sse2_x86_64";
+ specialize qw/vpx_highbd_convolve8_avg avx2 neon sve2/, "$sse2_x86_64";
add_proto qw/void vpx_highbd_convolve8_avg_horiz/, "const uint16_t *src, ptrdiff_t src_stride, uint16_t *dst, ptrdiff_t dst_stride, const InterpKernel *filter, int x0_q4, int x_step_q4, int y0_q4, int y_step_q4, int w, int h, int bd";
specialize qw/vpx_highbd_convolve8_avg_horiz avx2 neon sve/, "$sse2_x86_64";
diff --git a/media/libvpx/libvpx/vpx_ports/aarch64_cpudetect.c b/media/libvpx/libvpx/vpx_ports/aarch64_cpudetect.c
index eba12d312a..5c4c16a390 100644
--- a/media/libvpx/libvpx/vpx_ports/aarch64_cpudetect.c
+++ b/media/libvpx/libvpx/vpx_ports/aarch64_cpudetect.c
@@ -9,7 +9,8 @@
*/
#include "./vpx_config.h"
-#include "arm_cpudetect.h"
+#include "vpx_ports/arm.h"
+#include "vpx_ports/arm_cpudetect.h"
#if defined(__APPLE__)
#include <sys/sysctl.h>
diff --git a/media/libvpx/libvpx/vpx_util/vpx_thread.h b/media/libvpx/libvpx/vpx_util/vpx_thread.h
index 11a1d74387..22051eae41 100644
--- a/media/libvpx/libvpx/vpx_util/vpx_thread.h
+++ b/media/libvpx/libvpx/vpx_util/vpx_thread.h
@@ -19,8 +19,6 @@
extern "C" {
#endif
-#define MAX_NUM_THREADS 64
-
// State of the worker thread object
typedef enum {
VPX_WORKER_STATUS_NOT_OK = 0, // object is unusable
diff --git a/media/libvpx/missing_header.patch b/media/libvpx/missing_header.patch
deleted file mode 100644
index 02b77170ee..0000000000
--- a/media/libvpx/missing_header.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-Add missing header for EBUSY
-
---- a/vpx_util/vpx_pthread.h
-+++ b/vpx_util/vpx_pthread.h
-@@ -26,6 +26,7 @@ extern "C" {
- #define NOMINMAX
- #undef WIN32_LEAN_AND_MEAN
- #define WIN32_LEAN_AND_MEAN
-+#include <errno.h> // NOLINT
- #include <process.h> // NOLINT
- #include <stddef.h> // NOLINT
- #include <windows.h> // NOLINT
diff --git a/media/libvpx/moz.build b/media/libvpx/moz.build
index 635b5d0fdd..df29c9aae8 100644
--- a/media/libvpx/moz.build
+++ b/media/libvpx/moz.build
@@ -14,45 +14,46 @@ if CONFIG['VPX_USE_NASM']:
# Linux, Mac and Win share file lists for x86* but not configurations.
if CONFIG['TARGET_CPU'] == 'x86_64':
- EXPORTS.vpx += files['X64_EXPORTS']
- SOURCES += files['X64_SOURCES']
if CONFIG['OS_TARGET'] == 'WINNT':
+ EXPORTS.vpx += files['WIN_X64_EXPORTS']
+ SOURCES += files['WIN_X64_SOURCES']
ASFLAGS += [ '-I%s/media/libvpx/config/win/x64/' % TOPSRCDIR ]
LOCAL_INCLUDES += [ '/media/libvpx/config/win/x64/' ]
- SOURCES += [ '/media/libvpx/config/win/x64/vpx_config.c' ]
elif CONFIG['OS_TARGET'] == 'Darwin':
+ EXPORTS.vpx += files['MAC_X64_EXPORTS']
+ SOURCES += files['MAC_X64_SOURCES']
ASFLAGS += [ '-I%s/media/libvpx/config/mac/x64/' % TOPSRCDIR ]
LOCAL_INCLUDES += [ '/media/libvpx/config/mac/x64/' ]
- SOURCES += [ '/media/libvpx/config/mac/x64/vpx_config.c' ]
else: # Android, Linux, BSDs, etc.
+ EXPORTS.vpx += files['LINUX_X64_EXPORTS']
+ SOURCES += files['LINUX_X64_SOURCES']
ASFLAGS += [ '-I%s/media/libvpx/config/linux/x64/' % TOPSRCDIR ]
LOCAL_INCLUDES += [ '/media/libvpx/config/linux/x64/' ]
- SOURCES += [ '/media/libvpx/config/linux/x64/vpx_config.c' ]
elif CONFIG['TARGET_CPU'] == 'x86':
- EXPORTS.vpx += files['IA32_EXPORTS']
- SOURCES += files['IA32_SOURCES']
if CONFIG['OS_TARGET'] == 'WINNT':
+ EXPORTS.vpx += files['WIN_IA32_EXPORTS']
+ SOURCES += files['WIN_IA32_SOURCES']
ASFLAGS += [ '-I%s/media/libvpx/config/win/ia32/' % TOPSRCDIR ]
LOCAL_INCLUDES += [ '/media/libvpx/config/win/ia32/' ]
- SOURCES += [ '/media/libvpx/config/win/ia32/vpx_config.c' ]
elif CONFIG['OS_TARGET'] == 'Darwin':
+ EXPORTS.vpx += files['MAC_IA32_EXPORTS']
+ SOURCES += files['MAC_IA32_SOURCES']
ASFLAGS += [ '-I%s/media/libvpx/config/mac/ia32/' % TOPSRCDIR ]
LOCAL_INCLUDES += [ '/media/libvpx/config/mac/ia32/' ]
- SOURCES += [ '/media/libvpx/config/mac/ia32/vpx_config.c' ]
else: # Android, Linux, BSDs, etc.
+ EXPORTS.vpx += files['LINUX_IA32_EXPORTS']
+ SOURCES += files['LINUX_IA32_SOURCES']
ASFLAGS += [ '-I%s/media/libvpx/config/linux/ia32/' % TOPSRCDIR ]
LOCAL_INCLUDES += [ '/media/libvpx/config/linux/ia32/' ]
- SOURCES += [ '/media/libvpx/config/linux/ia32/vpx_config.c' ]
elif CONFIG['TARGET_CPU'] == 'arm':
- EXPORTS.vpx += files['ARM_EXPORTS']
+ EXPORTS.vpx += files['LINUX_ARM_EXPORTS']
ASFLAGS += [
'-I%s/media/libvpx/config/linux/arm/' % TOPSRCDIR,
'-I%s/libvpx' % OBJDIR,
]
LOCAL_INCLUDES += [ '/media/libvpx/config/linux/arm/' ]
- SOURCES += [ '/media/libvpx/config/linux/arm/vpx_config.c' ]
- arm_asm_files = files['ARM_SOURCES']
+ arm_asm_files = files['LINUX_ARM_SOURCES']
if CONFIG['GNU_AS']:
SOURCES += sorted([
@@ -70,28 +71,28 @@ elif CONFIG['TARGET_CPU'] == 'arm':
LOCAL_INCLUDES += [
'%%%s/sources/android/cpufeatures' % CONFIG['ANDROID_NDK'],
]
-elif CONFIG['TARGET_CPU'] == 'aarch64' and CONFIG['OS_TARGET'] == 'WINNT':
- EXPORTS.vpx += files['ARM64_EXPORTS']
- # Bug 1885585: clang on win/aarch64 cannot compile SVInt8_t type for now.
- SOURCES += [
- f for f in files['ARM64_SOURCES'] if not f.endswith('_sve.c')
- ]
- ASFLAGS += [ '-I%s/media/libvpx/config/win/aarch64/' % TOPSRCDIR ]
- LOCAL_INCLUDES += [ '/media/libvpx/config/win/aarch64/' ]
- SOURCES += [ '/media/libvpx/config/win/aarch64/vpx_config.c' ]
elif CONFIG['TARGET_CPU'] == 'aarch64':
- EXPORTS.vpx += files['ARM64_EXPORTS']
- SOURCES += files['ARM64_SOURCES']
- ASFLAGS += [ '-I%s/media/libvpx/config/linux/arm64/' % TOPSRCDIR ]
- LOCAL_INCLUDES += [ '/media/libvpx/config/linux/arm64/' ]
- SOURCES += [ '/media/libvpx/config/linux/arm64/vpx_config.c' ]
+ if CONFIG['OS_TARGET'] == 'WINNT':
+ EXPORTS.vpx += files['WIN_AARCH64_EXPORTS']
+ SOURCES += files['WIN_AARCH64_SOURCES']
+ ASFLAGS += [ '-I%s/media/libvpx/config/win/aarch64/' % TOPSRCDIR ]
+ LOCAL_INCLUDES += [ '/media/libvpx/config/win/aarch64/' ]
+ elif CONFIG['OS_TARGET'] == 'Darwin':
+ EXPORTS.vpx += files['MAC_ARM64_EXPORTS']
+ SOURCES += files['MAC_ARM64_SOURCES']
+ ASFLAGS += [ '-I%s/media/libvpx/config/mac/arm64/' % TOPSRCDIR ]
+ LOCAL_INCLUDES += [ '/media/libvpx/config/mac/arm64/' ]
+ else: # Android, Linux, BSDs, etc.
+ EXPORTS.vpx += files['LINUX_ARM64_EXPORTS']
+ SOURCES += files['LINUX_ARM64_SOURCES']
+ ASFLAGS += [ '-I%s/media/libvpx/config/linux/arm64/' % TOPSRCDIR ]
+ LOCAL_INCLUDES += [ '/media/libvpx/config/linux/arm64/' ]
else:
# Generic C-only configuration
EXPORTS.vpx += files['GENERIC_EXPORTS']
SOURCES += files['GENERIC_SOURCES']
ASFLAGS += [ '-I%s/media/libvpx/config/generic/' % TOPSRCDIR ]
LOCAL_INCLUDES += [ '/media/libvpx/config/generic/' ]
- SOURCES += [ '/media/libvpx/config/generic/vpx_config.c' ]
# We allow warnings for third-party code that can be updated from upstream.
AllowCompilerWarnings()
diff --git a/media/libvpx/moz.yaml b/media/libvpx/moz.yaml
index 0b3ec52482..15f1398932 100644
--- a/media/libvpx/moz.yaml
+++ b/media/libvpx/moz.yaml
@@ -20,11 +20,11 @@ origin:
# Human-readable identifier for this version/release
# Generally "version NNN", "tag SSS", "bookmark SSS"
- release: 7fb8ceccf92c35cd5131b05c0502916715ebc76b (Fri Mar 15 01:11:50 2024).
+ release: 85dafa9c61f99330f484e77297684b42af6ff37d (Tue Apr 16 18:51:27 2024).
# Revision to pull in
# Must be a long or short commit SHA (long preferred)
- revision: 7fb8ceccf92c35cd5131b05c0502916715ebc76b
+ revision: 85dafa9c61f99330f484e77297684b42af6ff37d
# The package's license, where possible using the mnemonic from
# https://spdx.org/licenses/
@@ -56,7 +56,6 @@ vendoring:
- arm_cpu_runtime_detection_code_on_openbsd.patch
- input_frame_validation.patch
- input_frame_validation_vp9.patch
- - missing_header.patch
update-actions:
- action: move-file
diff --git a/media/libvpx/sources.mozbuild b/media/libvpx/sources.mozbuild
index 1ad5d4447c..12c20ede9f 100644
--- a/media/libvpx/sources.mozbuild
+++ b/media/libvpx/sources.mozbuild
@@ -1,7 +1,7 @@
# This file is generated. Do not edit.
files = {
- 'X64_EXPORTS': [
+ 'LINUX_X64_EXPORTS': [
'libvpx/vpx/vp8.h',
'libvpx/vpx/vp8cx.h',
'libvpx/vpx/vp8dx.h',
@@ -25,7 +25,8 @@ files = {
'libvpx/vpx_scale/vpx_scale.h',
'libvpx/vpx_scale/yv12config.h',
],
- 'X64_SOURCES': [
+ 'LINUX_X64_SOURCES': [
+ 'libvpx/../config/linux/x64/vpx_config.c',
'libvpx/vp8/common/alloccommon.c',
'libvpx/vp8/common/blockd.c',
'libvpx/vp8/common/dequantize.c',
@@ -200,7 +201,6 @@ files = {
'libvpx/vpx/src/vpx_decoder.c',
'libvpx/vpx/src/vpx_encoder.c',
'libvpx/vpx/src/vpx_image.c',
- 'libvpx/vpx/src/vpx_tpl.c',
'libvpx/vpx_dsp/add_noise.c',
'libvpx/vpx_dsp/avg.c',
'libvpx/vpx_dsp/bitreader.c',
@@ -278,7 +278,7 @@ files = {
'libvpx/vpx_util/vpx_thread.c',
'libvpx/vpx_util/vpx_write_yuv_frame.c',
],
- 'IA32_EXPORTS': [
+ 'MAC_X64_EXPORTS': [
'libvpx/vpx/vp8.h',
'libvpx/vpx/vp8cx.h',
'libvpx/vpx/vp8dx.h',
@@ -302,7 +302,562 @@ files = {
'libvpx/vpx_scale/vpx_scale.h',
'libvpx/vpx_scale/yv12config.h',
],
- 'IA32_SOURCES': [
+ 'MAC_X64_SOURCES': [
+ 'libvpx/../config/mac/x64/vpx_config.c',
+ 'libvpx/vp8/common/alloccommon.c',
+ 'libvpx/vp8/common/blockd.c',
+ 'libvpx/vp8/common/dequantize.c',
+ 'libvpx/vp8/common/entropy.c',
+ 'libvpx/vp8/common/entropymode.c',
+ 'libvpx/vp8/common/entropymv.c',
+ 'libvpx/vp8/common/extend.c',
+ 'libvpx/vp8/common/filter.c',
+ 'libvpx/vp8/common/findnearmv.c',
+ 'libvpx/vp8/common/generic/systemdependent.c',
+ 'libvpx/vp8/common/idct_blk.c',
+ 'libvpx/vp8/common/idctllm.c',
+ 'libvpx/vp8/common/loopfilter_filters.c',
+ 'libvpx/vp8/common/mbpitch.c',
+ 'libvpx/vp8/common/mfqe.c',
+ 'libvpx/vp8/common/modecont.c',
+ 'libvpx/vp8/common/postproc.c',
+ 'libvpx/vp8/common/quant_common.c',
+ 'libvpx/vp8/common/reconinter.c',
+ 'libvpx/vp8/common/reconintra.c',
+ 'libvpx/vp8/common/reconintra4x4.c',
+ 'libvpx/vp8/common/rtcd.c',
+ 'libvpx/vp8/common/setupintrarecon.c',
+ 'libvpx/vp8/common/swapyv12buffer.c',
+ 'libvpx/vp8/common/treecoder.c',
+ 'libvpx/vp8/common/vp8_loopfilter.c',
+ 'libvpx/vp8/common/vp8_skin_detection.c',
+ 'libvpx/vp8/common/x86/bilinear_filter_sse2.c',
+ 'libvpx/vp8/common/x86/dequantize_mmx.asm',
+ 'libvpx/vp8/common/x86/idct_blk_mmx.c',
+ 'libvpx/vp8/common/x86/idct_blk_sse2.c',
+ 'libvpx/vp8/common/x86/idctllm_mmx.asm',
+ 'libvpx/vp8/common/x86/idctllm_sse2.asm',
+ 'libvpx/vp8/common/x86/iwalsh_sse2.asm',
+ 'libvpx/vp8/common/x86/loopfilter_block_sse2_x86_64.asm',
+ 'libvpx/vp8/common/x86/loopfilter_sse2.asm',
+ 'libvpx/vp8/common/x86/loopfilter_x86.c',
+ 'libvpx/vp8/common/x86/mfqe_sse2.asm',
+ 'libvpx/vp8/common/x86/recon_mmx.asm',
+ 'libvpx/vp8/common/x86/recon_sse2.asm',
+ 'libvpx/vp8/common/x86/subpixel_mmx.asm',
+ 'libvpx/vp8/common/x86/subpixel_sse2.asm',
+ 'libvpx/vp8/common/x86/subpixel_ssse3.asm',
+ 'libvpx/vp8/common/x86/vp8_asm_stubs.c',
+ 'libvpx/vp8/decoder/dboolhuff.c',
+ 'libvpx/vp8/decoder/decodeframe.c',
+ 'libvpx/vp8/decoder/decodemv.c',
+ 'libvpx/vp8/decoder/detokenize.c',
+ 'libvpx/vp8/decoder/onyxd_if.c',
+ 'libvpx/vp8/decoder/threading.c',
+ 'libvpx/vp8/encoder/bitstream.c',
+ 'libvpx/vp8/encoder/boolhuff.c',
+ 'libvpx/vp8/encoder/copy_c.c',
+ 'libvpx/vp8/encoder/dct.c',
+ 'libvpx/vp8/encoder/denoising.c',
+ 'libvpx/vp8/encoder/encodeframe.c',
+ 'libvpx/vp8/encoder/encodeintra.c',
+ 'libvpx/vp8/encoder/encodemb.c',
+ 'libvpx/vp8/encoder/encodemv.c',
+ 'libvpx/vp8/encoder/ethreading.c',
+ 'libvpx/vp8/encoder/firstpass.c',
+ 'libvpx/vp8/encoder/lookahead.c',
+ 'libvpx/vp8/encoder/mcomp.c',
+ 'libvpx/vp8/encoder/modecosts.c',
+ 'libvpx/vp8/encoder/mr_dissim.c',
+ 'libvpx/vp8/encoder/onyx_if.c',
+ 'libvpx/vp8/encoder/pickinter.c',
+ 'libvpx/vp8/encoder/picklpf.c',
+ 'libvpx/vp8/encoder/ratectrl.c',
+ 'libvpx/vp8/encoder/rdopt.c',
+ 'libvpx/vp8/encoder/segmentation.c',
+ 'libvpx/vp8/encoder/temporal_filter.c',
+ 'libvpx/vp8/encoder/tokenize.c',
+ 'libvpx/vp8/encoder/treewriter.c',
+ 'libvpx/vp8/encoder/vp8_quantize.c',
+ 'libvpx/vp8/encoder/x86/block_error_sse2.asm',
+ 'libvpx/vp8/encoder/x86/copy_sse2.asm',
+ 'libvpx/vp8/encoder/x86/copy_sse3.asm',
+ 'libvpx/vp8/encoder/x86/dct_sse2.asm',
+ 'libvpx/vp8/encoder/x86/denoising_sse2.c',
+ 'libvpx/vp8/encoder/x86/fwalsh_sse2.asm',
+ 'libvpx/vp8/encoder/x86/quantize_sse4.c',
+ 'libvpx/vp8/encoder/x86/temporal_filter_apply_sse2.asm',
+ 'libvpx/vp8/encoder/x86/vp8_enc_stubs_sse2.c',
+ 'libvpx/vp8/encoder/x86/vp8_quantize_sse2.c',
+ 'libvpx/vp8/encoder/x86/vp8_quantize_ssse3.c',
+ 'libvpx/vp8/vp8_cx_iface.c',
+ 'libvpx/vp8/vp8_dx_iface.c',
+ 'libvpx/vp9/common/vp9_alloccommon.c',
+ 'libvpx/vp9/common/vp9_blockd.c',
+ 'libvpx/vp9/common/vp9_common_data.c',
+ 'libvpx/vp9/common/vp9_entropy.c',
+ 'libvpx/vp9/common/vp9_entropymode.c',
+ 'libvpx/vp9/common/vp9_entropymv.c',
+ 'libvpx/vp9/common/vp9_filter.c',
+ 'libvpx/vp9/common/vp9_frame_buffers.c',
+ 'libvpx/vp9/common/vp9_idct.c',
+ 'libvpx/vp9/common/vp9_loopfilter.c',
+ 'libvpx/vp9/common/vp9_mfqe.c',
+ 'libvpx/vp9/common/vp9_mvref_common.c',
+ 'libvpx/vp9/common/vp9_postproc.c',
+ 'libvpx/vp9/common/vp9_pred_common.c',
+ 'libvpx/vp9/common/vp9_quant_common.c',
+ 'libvpx/vp9/common/vp9_reconinter.c',
+ 'libvpx/vp9/common/vp9_reconintra.c',
+ 'libvpx/vp9/common/vp9_rtcd.c',
+ 'libvpx/vp9/common/vp9_scale.c',
+ 'libvpx/vp9/common/vp9_scan.c',
+ 'libvpx/vp9/common/vp9_seg_common.c',
+ 'libvpx/vp9/common/vp9_thread_common.c',
+ 'libvpx/vp9/common/vp9_tile_common.c',
+ 'libvpx/vp9/common/x86/vp9_idct_intrin_sse2.c',
+ 'libvpx/vp9/common/x86/vp9_mfqe_sse2.asm',
+ 'libvpx/vp9/decoder/vp9_decodeframe.c',
+ 'libvpx/vp9/decoder/vp9_decodemv.c',
+ 'libvpx/vp9/decoder/vp9_decoder.c',
+ 'libvpx/vp9/decoder/vp9_detokenize.c',
+ 'libvpx/vp9/decoder/vp9_dsubexp.c',
+ 'libvpx/vp9/decoder/vp9_job_queue.c',
+ 'libvpx/vp9/encoder/vp9_alt_ref_aq.c',
+ 'libvpx/vp9/encoder/vp9_aq_360.c',
+ 'libvpx/vp9/encoder/vp9_aq_complexity.c',
+ 'libvpx/vp9/encoder/vp9_aq_cyclicrefresh.c',
+ 'libvpx/vp9/encoder/vp9_aq_variance.c',
+ 'libvpx/vp9/encoder/vp9_bitstream.c',
+ 'libvpx/vp9/encoder/vp9_context_tree.c',
+ 'libvpx/vp9/encoder/vp9_cost.c',
+ 'libvpx/vp9/encoder/vp9_dct.c',
+ 'libvpx/vp9/encoder/vp9_encodeframe.c',
+ 'libvpx/vp9/encoder/vp9_encodemb.c',
+ 'libvpx/vp9/encoder/vp9_encodemv.c',
+ 'libvpx/vp9/encoder/vp9_encoder.c',
+ 'libvpx/vp9/encoder/vp9_ethread.c',
+ 'libvpx/vp9/encoder/vp9_ext_ratectrl.c',
+ 'libvpx/vp9/encoder/vp9_extend.c',
+ 'libvpx/vp9/encoder/vp9_firstpass.c',
+ 'libvpx/vp9/encoder/vp9_frame_scale.c',
+ 'libvpx/vp9/encoder/vp9_lookahead.c',
+ 'libvpx/vp9/encoder/vp9_mbgraph.c',
+ 'libvpx/vp9/encoder/vp9_mcomp.c',
+ 'libvpx/vp9/encoder/vp9_multi_thread.c',
+ 'libvpx/vp9/encoder/vp9_noise_estimate.c',
+ 'libvpx/vp9/encoder/vp9_picklpf.c',
+ 'libvpx/vp9/encoder/vp9_pickmode.c',
+ 'libvpx/vp9/encoder/vp9_quantize.c',
+ 'libvpx/vp9/encoder/vp9_ratectrl.c',
+ 'libvpx/vp9/encoder/vp9_rd.c',
+ 'libvpx/vp9/encoder/vp9_rdopt.c',
+ 'libvpx/vp9/encoder/vp9_resize.c',
+ 'libvpx/vp9/encoder/vp9_segmentation.c',
+ 'libvpx/vp9/encoder/vp9_skin_detection.c',
+ 'libvpx/vp9/encoder/vp9_speed_features.c',
+ 'libvpx/vp9/encoder/vp9_subexp.c',
+ 'libvpx/vp9/encoder/vp9_svc_layercontext.c',
+ 'libvpx/vp9/encoder/vp9_temporal_filter.c',
+ 'libvpx/vp9/encoder/vp9_tokenize.c',
+ 'libvpx/vp9/encoder/vp9_tpl_model.c',
+ 'libvpx/vp9/encoder/vp9_treewriter.c',
+ 'libvpx/vp9/encoder/x86/temporal_filter_sse4.c',
+ 'libvpx/vp9/encoder/x86/vp9_dct_intrin_sse2.c',
+ 'libvpx/vp9/encoder/x86/vp9_dct_sse2.asm',
+ 'libvpx/vp9/encoder/x86/vp9_error_avx2.c',
+ 'libvpx/vp9/encoder/x86/vp9_error_sse2.asm',
+ 'libvpx/vp9/encoder/x86/vp9_frame_scale_ssse3.c',
+ 'libvpx/vp9/encoder/x86/vp9_quantize_avx2.c',
+ 'libvpx/vp9/encoder/x86/vp9_quantize_sse2.c',
+ 'libvpx/vp9/encoder/x86/vp9_quantize_ssse3.c',
+ 'libvpx/vp9/vp9_cx_iface.c',
+ 'libvpx/vp9/vp9_dx_iface.c',
+ 'libvpx/vp9/vp9_iface_common.c',
+ 'libvpx/vpx/src/vpx_codec.c',
+ 'libvpx/vpx/src/vpx_decoder.c',
+ 'libvpx/vpx/src/vpx_encoder.c',
+ 'libvpx/vpx/src/vpx_image.c',
+ 'libvpx/vpx_dsp/add_noise.c',
+ 'libvpx/vpx_dsp/avg.c',
+ 'libvpx/vpx_dsp/bitreader.c',
+ 'libvpx/vpx_dsp/bitreader_buffer.c',
+ 'libvpx/vpx_dsp/bitwriter.c',
+ 'libvpx/vpx_dsp/bitwriter_buffer.c',
+ 'libvpx/vpx_dsp/deblock.c',
+ 'libvpx/vpx_dsp/fwd_txfm.c',
+ 'libvpx/vpx_dsp/intrapred.c',
+ 'libvpx/vpx_dsp/inv_txfm.c',
+ 'libvpx/vpx_dsp/loopfilter.c',
+ 'libvpx/vpx_dsp/prob.c',
+ 'libvpx/vpx_dsp/psnr.c',
+ 'libvpx/vpx_dsp/quantize.c',
+ 'libvpx/vpx_dsp/sad.c',
+ 'libvpx/vpx_dsp/skin_detection.c',
+ 'libvpx/vpx_dsp/sse.c',
+ 'libvpx/vpx_dsp/subtract.c',
+ 'libvpx/vpx_dsp/sum_squares.c',
+ 'libvpx/vpx_dsp/variance.c',
+ 'libvpx/vpx_dsp/vpx_convolve.c',
+ 'libvpx/vpx_dsp/vpx_dsp_rtcd.c',
+ 'libvpx/vpx_dsp/x86/add_noise_sse2.asm',
+ 'libvpx/vpx_dsp/x86/avg_intrin_avx2.c',
+ 'libvpx/vpx_dsp/x86/avg_intrin_sse2.c',
+ 'libvpx/vpx_dsp/x86/avg_pred_avx2.c',
+ 'libvpx/vpx_dsp/x86/avg_pred_sse2.c',
+ 'libvpx/vpx_dsp/x86/avg_ssse3_x86_64.asm',
+ 'libvpx/vpx_dsp/x86/deblock_sse2.asm',
+ 'libvpx/vpx_dsp/x86/fwd_txfm_avx2.c',
+ 'libvpx/vpx_dsp/x86/fwd_txfm_sse2.c',
+ 'libvpx/vpx_dsp/x86/fwd_txfm_ssse3_x86_64.asm',
+ 'libvpx/vpx_dsp/x86/intrapred_sse2.asm',
+ 'libvpx/vpx_dsp/x86/intrapred_ssse3.asm',
+ 'libvpx/vpx_dsp/x86/inv_txfm_avx2.c',
+ 'libvpx/vpx_dsp/x86/inv_txfm_sse2.c',
+ 'libvpx/vpx_dsp/x86/inv_txfm_ssse3.c',
+ 'libvpx/vpx_dsp/x86/inv_wht_sse2.asm',
+ 'libvpx/vpx_dsp/x86/loopfilter_avx2.c',
+ 'libvpx/vpx_dsp/x86/loopfilter_intrin_sse2.c',
+ 'libvpx/vpx_dsp/x86/post_proc_sse2.c',
+ 'libvpx/vpx_dsp/x86/quantize_avx.c',
+ 'libvpx/vpx_dsp/x86/quantize_avx2.c',
+ 'libvpx/vpx_dsp/x86/quantize_sse2.c',
+ 'libvpx/vpx_dsp/x86/quantize_ssse3.c',
+ 'libvpx/vpx_dsp/x86/sad4d_avx2.c',
+ 'libvpx/vpx_dsp/x86/sad4d_sse2.asm',
+ 'libvpx/vpx_dsp/x86/sad_avx2.c',
+ 'libvpx/vpx_dsp/x86/sad_sse2.asm',
+ 'libvpx/vpx_dsp/x86/sse_avx2.c',
+ 'libvpx/vpx_dsp/x86/sse_sse4.c',
+ 'libvpx/vpx_dsp/x86/ssim_opt_x86_64.asm',
+ 'libvpx/vpx_dsp/x86/subpel_variance_sse2.asm',
+ 'libvpx/vpx_dsp/x86/subtract_avx2.c',
+ 'libvpx/vpx_dsp/x86/subtract_sse2.asm',
+ 'libvpx/vpx_dsp/x86/sum_squares_sse2.c',
+ 'libvpx/vpx_dsp/x86/variance_avx2.c',
+ 'libvpx/vpx_dsp/x86/variance_sse2.c',
+ 'libvpx/vpx_dsp/x86/vpx_convolve_copy_sse2.asm',
+ 'libvpx/vpx_dsp/x86/vpx_subpixel_4t_intrin_sse2.c',
+ 'libvpx/vpx_dsp/x86/vpx_subpixel_8t_intrin_avx2.c',
+ 'libvpx/vpx_dsp/x86/vpx_subpixel_8t_intrin_ssse3.c',
+ 'libvpx/vpx_dsp/x86/vpx_subpixel_8t_sse2.asm',
+ 'libvpx/vpx_dsp/x86/vpx_subpixel_8t_ssse3.asm',
+ 'libvpx/vpx_dsp/x86/vpx_subpixel_bilinear_sse2.asm',
+ 'libvpx/vpx_dsp/x86/vpx_subpixel_bilinear_ssse3.asm',
+ 'libvpx/vpx_mem/vpx_mem.c',
+ 'libvpx/vpx_ports/emms_mmx.asm',
+ 'libvpx/vpx_ports/float_control_word.asm',
+ 'libvpx/vpx_scale/generic/gen_scalers.c',
+ 'libvpx/vpx_scale/generic/vpx_scale.c',
+ 'libvpx/vpx_scale/generic/yv12config.c',
+ 'libvpx/vpx_scale/generic/yv12extend.c',
+ 'libvpx/vpx_scale/vpx_scale_rtcd.c',
+ 'libvpx/vpx_util/vpx_thread.c',
+ 'libvpx/vpx_util/vpx_write_yuv_frame.c',
+],
+ 'WIN_X64_EXPORTS': [
+ 'libvpx/vpx/vp8.h',
+ 'libvpx/vpx/vp8cx.h',
+ 'libvpx/vpx/vp8dx.h',
+ 'libvpx/vpx/vpx_codec.h',
+ 'libvpx/vpx/vpx_decoder.h',
+ 'libvpx/vpx/vpx_encoder.h',
+ 'libvpx/vpx/vpx_ext_ratectrl.h',
+ 'libvpx/vpx/vpx_frame_buffer.h',
+ 'libvpx/vpx/vpx_image.h',
+ 'libvpx/vpx/vpx_integer.h',
+ 'libvpx/vpx/vpx_tpl.h',
+ 'libvpx/vpx_mem/include/vpx_mem_intrnl.h',
+ 'libvpx/vpx_mem/vpx_mem.h',
+ 'libvpx/vpx_ports/bitops.h',
+ 'libvpx/vpx_ports/compiler_attributes.h',
+ 'libvpx/vpx_ports/mem.h',
+ 'libvpx/vpx_ports/static_assert.h',
+ 'libvpx/vpx_ports/system_state.h',
+ 'libvpx/vpx_ports/vpx_timer.h',
+ 'libvpx/vpx_ports/x86.h',
+ 'libvpx/vpx_scale/vpx_scale.h',
+ 'libvpx/vpx_scale/yv12config.h',
+],
+ 'WIN_X64_SOURCES': [
+ 'libvpx/../config/win/x64/vpx_config.c',
+ 'libvpx/vp8/common/alloccommon.c',
+ 'libvpx/vp8/common/blockd.c',
+ 'libvpx/vp8/common/dequantize.c',
+ 'libvpx/vp8/common/entropy.c',
+ 'libvpx/vp8/common/entropymode.c',
+ 'libvpx/vp8/common/entropymv.c',
+ 'libvpx/vp8/common/extend.c',
+ 'libvpx/vp8/common/filter.c',
+ 'libvpx/vp8/common/findnearmv.c',
+ 'libvpx/vp8/common/generic/systemdependent.c',
+ 'libvpx/vp8/common/idct_blk.c',
+ 'libvpx/vp8/common/idctllm.c',
+ 'libvpx/vp8/common/loopfilter_filters.c',
+ 'libvpx/vp8/common/mbpitch.c',
+ 'libvpx/vp8/common/mfqe.c',
+ 'libvpx/vp8/common/modecont.c',
+ 'libvpx/vp8/common/postproc.c',
+ 'libvpx/vp8/common/quant_common.c',
+ 'libvpx/vp8/common/reconinter.c',
+ 'libvpx/vp8/common/reconintra.c',
+ 'libvpx/vp8/common/reconintra4x4.c',
+ 'libvpx/vp8/common/rtcd.c',
+ 'libvpx/vp8/common/setupintrarecon.c',
+ 'libvpx/vp8/common/swapyv12buffer.c',
+ 'libvpx/vp8/common/treecoder.c',
+ 'libvpx/vp8/common/vp8_loopfilter.c',
+ 'libvpx/vp8/common/vp8_skin_detection.c',
+ 'libvpx/vp8/common/x86/bilinear_filter_sse2.c',
+ 'libvpx/vp8/common/x86/dequantize_mmx.asm',
+ 'libvpx/vp8/common/x86/idct_blk_mmx.c',
+ 'libvpx/vp8/common/x86/idct_blk_sse2.c',
+ 'libvpx/vp8/common/x86/idctllm_mmx.asm',
+ 'libvpx/vp8/common/x86/idctllm_sse2.asm',
+ 'libvpx/vp8/common/x86/iwalsh_sse2.asm',
+ 'libvpx/vp8/common/x86/loopfilter_block_sse2_x86_64.asm',
+ 'libvpx/vp8/common/x86/loopfilter_sse2.asm',
+ 'libvpx/vp8/common/x86/loopfilter_x86.c',
+ 'libvpx/vp8/common/x86/mfqe_sse2.asm',
+ 'libvpx/vp8/common/x86/recon_mmx.asm',
+ 'libvpx/vp8/common/x86/recon_sse2.asm',
+ 'libvpx/vp8/common/x86/subpixel_mmx.asm',
+ 'libvpx/vp8/common/x86/subpixel_sse2.asm',
+ 'libvpx/vp8/common/x86/subpixel_ssse3.asm',
+ 'libvpx/vp8/common/x86/vp8_asm_stubs.c',
+ 'libvpx/vp8/decoder/dboolhuff.c',
+ 'libvpx/vp8/decoder/decodeframe.c',
+ 'libvpx/vp8/decoder/decodemv.c',
+ 'libvpx/vp8/decoder/detokenize.c',
+ 'libvpx/vp8/decoder/onyxd_if.c',
+ 'libvpx/vp8/decoder/threading.c',
+ 'libvpx/vp8/encoder/bitstream.c',
+ 'libvpx/vp8/encoder/boolhuff.c',
+ 'libvpx/vp8/encoder/copy_c.c',
+ 'libvpx/vp8/encoder/dct.c',
+ 'libvpx/vp8/encoder/denoising.c',
+ 'libvpx/vp8/encoder/encodeframe.c',
+ 'libvpx/vp8/encoder/encodeintra.c',
+ 'libvpx/vp8/encoder/encodemb.c',
+ 'libvpx/vp8/encoder/encodemv.c',
+ 'libvpx/vp8/encoder/ethreading.c',
+ 'libvpx/vp8/encoder/firstpass.c',
+ 'libvpx/vp8/encoder/lookahead.c',
+ 'libvpx/vp8/encoder/mcomp.c',
+ 'libvpx/vp8/encoder/modecosts.c',
+ 'libvpx/vp8/encoder/mr_dissim.c',
+ 'libvpx/vp8/encoder/onyx_if.c',
+ 'libvpx/vp8/encoder/pickinter.c',
+ 'libvpx/vp8/encoder/picklpf.c',
+ 'libvpx/vp8/encoder/ratectrl.c',
+ 'libvpx/vp8/encoder/rdopt.c',
+ 'libvpx/vp8/encoder/segmentation.c',
+ 'libvpx/vp8/encoder/temporal_filter.c',
+ 'libvpx/vp8/encoder/tokenize.c',
+ 'libvpx/vp8/encoder/treewriter.c',
+ 'libvpx/vp8/encoder/vp8_quantize.c',
+ 'libvpx/vp8/encoder/x86/block_error_sse2.asm',
+ 'libvpx/vp8/encoder/x86/copy_sse2.asm',
+ 'libvpx/vp8/encoder/x86/copy_sse3.asm',
+ 'libvpx/vp8/encoder/x86/dct_sse2.asm',
+ 'libvpx/vp8/encoder/x86/denoising_sse2.c',
+ 'libvpx/vp8/encoder/x86/fwalsh_sse2.asm',
+ 'libvpx/vp8/encoder/x86/quantize_sse4.c',
+ 'libvpx/vp8/encoder/x86/temporal_filter_apply_sse2.asm',
+ 'libvpx/vp8/encoder/x86/vp8_enc_stubs_sse2.c',
+ 'libvpx/vp8/encoder/x86/vp8_quantize_sse2.c',
+ 'libvpx/vp8/encoder/x86/vp8_quantize_ssse3.c',
+ 'libvpx/vp8/vp8_cx_iface.c',
+ 'libvpx/vp8/vp8_dx_iface.c',
+ 'libvpx/vp9/common/vp9_alloccommon.c',
+ 'libvpx/vp9/common/vp9_blockd.c',
+ 'libvpx/vp9/common/vp9_common_data.c',
+ 'libvpx/vp9/common/vp9_entropy.c',
+ 'libvpx/vp9/common/vp9_entropymode.c',
+ 'libvpx/vp9/common/vp9_entropymv.c',
+ 'libvpx/vp9/common/vp9_filter.c',
+ 'libvpx/vp9/common/vp9_frame_buffers.c',
+ 'libvpx/vp9/common/vp9_idct.c',
+ 'libvpx/vp9/common/vp9_loopfilter.c',
+ 'libvpx/vp9/common/vp9_mfqe.c',
+ 'libvpx/vp9/common/vp9_mvref_common.c',
+ 'libvpx/vp9/common/vp9_postproc.c',
+ 'libvpx/vp9/common/vp9_pred_common.c',
+ 'libvpx/vp9/common/vp9_quant_common.c',
+ 'libvpx/vp9/common/vp9_reconinter.c',
+ 'libvpx/vp9/common/vp9_reconintra.c',
+ 'libvpx/vp9/common/vp9_rtcd.c',
+ 'libvpx/vp9/common/vp9_scale.c',
+ 'libvpx/vp9/common/vp9_scan.c',
+ 'libvpx/vp9/common/vp9_seg_common.c',
+ 'libvpx/vp9/common/vp9_thread_common.c',
+ 'libvpx/vp9/common/vp9_tile_common.c',
+ 'libvpx/vp9/common/x86/vp9_idct_intrin_sse2.c',
+ 'libvpx/vp9/common/x86/vp9_mfqe_sse2.asm',
+ 'libvpx/vp9/decoder/vp9_decodeframe.c',
+ 'libvpx/vp9/decoder/vp9_decodemv.c',
+ 'libvpx/vp9/decoder/vp9_decoder.c',
+ 'libvpx/vp9/decoder/vp9_detokenize.c',
+ 'libvpx/vp9/decoder/vp9_dsubexp.c',
+ 'libvpx/vp9/decoder/vp9_job_queue.c',
+ 'libvpx/vp9/encoder/vp9_alt_ref_aq.c',
+ 'libvpx/vp9/encoder/vp9_aq_360.c',
+ 'libvpx/vp9/encoder/vp9_aq_complexity.c',
+ 'libvpx/vp9/encoder/vp9_aq_cyclicrefresh.c',
+ 'libvpx/vp9/encoder/vp9_aq_variance.c',
+ 'libvpx/vp9/encoder/vp9_bitstream.c',
+ 'libvpx/vp9/encoder/vp9_context_tree.c',
+ 'libvpx/vp9/encoder/vp9_cost.c',
+ 'libvpx/vp9/encoder/vp9_dct.c',
+ 'libvpx/vp9/encoder/vp9_encodeframe.c',
+ 'libvpx/vp9/encoder/vp9_encodemb.c',
+ 'libvpx/vp9/encoder/vp9_encodemv.c',
+ 'libvpx/vp9/encoder/vp9_encoder.c',
+ 'libvpx/vp9/encoder/vp9_ethread.c',
+ 'libvpx/vp9/encoder/vp9_ext_ratectrl.c',
+ 'libvpx/vp9/encoder/vp9_extend.c',
+ 'libvpx/vp9/encoder/vp9_firstpass.c',
+ 'libvpx/vp9/encoder/vp9_frame_scale.c',
+ 'libvpx/vp9/encoder/vp9_lookahead.c',
+ 'libvpx/vp9/encoder/vp9_mbgraph.c',
+ 'libvpx/vp9/encoder/vp9_mcomp.c',
+ 'libvpx/vp9/encoder/vp9_multi_thread.c',
+ 'libvpx/vp9/encoder/vp9_noise_estimate.c',
+ 'libvpx/vp9/encoder/vp9_picklpf.c',
+ 'libvpx/vp9/encoder/vp9_pickmode.c',
+ 'libvpx/vp9/encoder/vp9_quantize.c',
+ 'libvpx/vp9/encoder/vp9_ratectrl.c',
+ 'libvpx/vp9/encoder/vp9_rd.c',
+ 'libvpx/vp9/encoder/vp9_rdopt.c',
+ 'libvpx/vp9/encoder/vp9_resize.c',
+ 'libvpx/vp9/encoder/vp9_segmentation.c',
+ 'libvpx/vp9/encoder/vp9_skin_detection.c',
+ 'libvpx/vp9/encoder/vp9_speed_features.c',
+ 'libvpx/vp9/encoder/vp9_subexp.c',
+ 'libvpx/vp9/encoder/vp9_svc_layercontext.c',
+ 'libvpx/vp9/encoder/vp9_temporal_filter.c',
+ 'libvpx/vp9/encoder/vp9_tokenize.c',
+ 'libvpx/vp9/encoder/vp9_tpl_model.c',
+ 'libvpx/vp9/encoder/vp9_treewriter.c',
+ 'libvpx/vp9/encoder/x86/temporal_filter_sse4.c',
+ 'libvpx/vp9/encoder/x86/vp9_dct_intrin_sse2.c',
+ 'libvpx/vp9/encoder/x86/vp9_dct_sse2.asm',
+ 'libvpx/vp9/encoder/x86/vp9_error_avx2.c',
+ 'libvpx/vp9/encoder/x86/vp9_error_sse2.asm',
+ 'libvpx/vp9/encoder/x86/vp9_frame_scale_ssse3.c',
+ 'libvpx/vp9/encoder/x86/vp9_quantize_avx2.c',
+ 'libvpx/vp9/encoder/x86/vp9_quantize_sse2.c',
+ 'libvpx/vp9/encoder/x86/vp9_quantize_ssse3.c',
+ 'libvpx/vp9/vp9_cx_iface.c',
+ 'libvpx/vp9/vp9_dx_iface.c',
+ 'libvpx/vp9/vp9_iface_common.c',
+ 'libvpx/vpx/src/vpx_codec.c',
+ 'libvpx/vpx/src/vpx_decoder.c',
+ 'libvpx/vpx/src/vpx_encoder.c',
+ 'libvpx/vpx/src/vpx_image.c',
+ 'libvpx/vpx_dsp/add_noise.c',
+ 'libvpx/vpx_dsp/avg.c',
+ 'libvpx/vpx_dsp/bitreader.c',
+ 'libvpx/vpx_dsp/bitreader_buffer.c',
+ 'libvpx/vpx_dsp/bitwriter.c',
+ 'libvpx/vpx_dsp/bitwriter_buffer.c',
+ 'libvpx/vpx_dsp/deblock.c',
+ 'libvpx/vpx_dsp/fwd_txfm.c',
+ 'libvpx/vpx_dsp/intrapred.c',
+ 'libvpx/vpx_dsp/inv_txfm.c',
+ 'libvpx/vpx_dsp/loopfilter.c',
+ 'libvpx/vpx_dsp/prob.c',
+ 'libvpx/vpx_dsp/psnr.c',
+ 'libvpx/vpx_dsp/quantize.c',
+ 'libvpx/vpx_dsp/sad.c',
+ 'libvpx/vpx_dsp/skin_detection.c',
+ 'libvpx/vpx_dsp/sse.c',
+ 'libvpx/vpx_dsp/subtract.c',
+ 'libvpx/vpx_dsp/sum_squares.c',
+ 'libvpx/vpx_dsp/variance.c',
+ 'libvpx/vpx_dsp/vpx_convolve.c',
+ 'libvpx/vpx_dsp/vpx_dsp_rtcd.c',
+ 'libvpx/vpx_dsp/x86/add_noise_sse2.asm',
+ 'libvpx/vpx_dsp/x86/avg_intrin_avx2.c',
+ 'libvpx/vpx_dsp/x86/avg_intrin_sse2.c',
+ 'libvpx/vpx_dsp/x86/avg_pred_avx2.c',
+ 'libvpx/vpx_dsp/x86/avg_pred_sse2.c',
+ 'libvpx/vpx_dsp/x86/avg_ssse3_x86_64.asm',
+ 'libvpx/vpx_dsp/x86/deblock_sse2.asm',
+ 'libvpx/vpx_dsp/x86/fwd_txfm_avx2.c',
+ 'libvpx/vpx_dsp/x86/fwd_txfm_sse2.c',
+ 'libvpx/vpx_dsp/x86/fwd_txfm_ssse3_x86_64.asm',
+ 'libvpx/vpx_dsp/x86/intrapred_sse2.asm',
+ 'libvpx/vpx_dsp/x86/intrapred_ssse3.asm',
+ 'libvpx/vpx_dsp/x86/inv_txfm_avx2.c',
+ 'libvpx/vpx_dsp/x86/inv_txfm_sse2.c',
+ 'libvpx/vpx_dsp/x86/inv_txfm_ssse3.c',
+ 'libvpx/vpx_dsp/x86/inv_wht_sse2.asm',
+ 'libvpx/vpx_dsp/x86/loopfilter_avx2.c',
+ 'libvpx/vpx_dsp/x86/loopfilter_intrin_sse2.c',
+ 'libvpx/vpx_dsp/x86/post_proc_sse2.c',
+ 'libvpx/vpx_dsp/x86/quantize_avx.c',
+ 'libvpx/vpx_dsp/x86/quantize_avx2.c',
+ 'libvpx/vpx_dsp/x86/quantize_sse2.c',
+ 'libvpx/vpx_dsp/x86/quantize_ssse3.c',
+ 'libvpx/vpx_dsp/x86/sad4d_avx2.c',
+ 'libvpx/vpx_dsp/x86/sad4d_sse2.asm',
+ 'libvpx/vpx_dsp/x86/sad_avx2.c',
+ 'libvpx/vpx_dsp/x86/sad_sse2.asm',
+ 'libvpx/vpx_dsp/x86/sse_avx2.c',
+ 'libvpx/vpx_dsp/x86/sse_sse4.c',
+ 'libvpx/vpx_dsp/x86/ssim_opt_x86_64.asm',
+ 'libvpx/vpx_dsp/x86/subpel_variance_sse2.asm',
+ 'libvpx/vpx_dsp/x86/subtract_avx2.c',
+ 'libvpx/vpx_dsp/x86/subtract_sse2.asm',
+ 'libvpx/vpx_dsp/x86/sum_squares_sse2.c',
+ 'libvpx/vpx_dsp/x86/variance_avx2.c',
+ 'libvpx/vpx_dsp/x86/variance_sse2.c',
+ 'libvpx/vpx_dsp/x86/vpx_convolve_copy_sse2.asm',
+ 'libvpx/vpx_dsp/x86/vpx_subpixel_4t_intrin_sse2.c',
+ 'libvpx/vpx_dsp/x86/vpx_subpixel_8t_intrin_avx2.c',
+ 'libvpx/vpx_dsp/x86/vpx_subpixel_8t_intrin_ssse3.c',
+ 'libvpx/vpx_dsp/x86/vpx_subpixel_8t_sse2.asm',
+ 'libvpx/vpx_dsp/x86/vpx_subpixel_8t_ssse3.asm',
+ 'libvpx/vpx_dsp/x86/vpx_subpixel_bilinear_sse2.asm',
+ 'libvpx/vpx_dsp/x86/vpx_subpixel_bilinear_ssse3.asm',
+ 'libvpx/vpx_mem/vpx_mem.c',
+ 'libvpx/vpx_ports/emms_mmx.asm',
+ 'libvpx/vpx_ports/float_control_word.asm',
+ 'libvpx/vpx_scale/generic/gen_scalers.c',
+ 'libvpx/vpx_scale/generic/vpx_scale.c',
+ 'libvpx/vpx_scale/generic/yv12config.c',
+ 'libvpx/vpx_scale/generic/yv12extend.c',
+ 'libvpx/vpx_scale/vpx_scale_rtcd.c',
+ 'libvpx/vpx_util/vpx_thread.c',
+ 'libvpx/vpx_util/vpx_write_yuv_frame.c',
+],
+ 'LINUX_IA32_EXPORTS': [
+ 'libvpx/vpx/vp8.h',
+ 'libvpx/vpx/vp8cx.h',
+ 'libvpx/vpx/vp8dx.h',
+ 'libvpx/vpx/vpx_codec.h',
+ 'libvpx/vpx/vpx_decoder.h',
+ 'libvpx/vpx/vpx_encoder.h',
+ 'libvpx/vpx/vpx_ext_ratectrl.h',
+ 'libvpx/vpx/vpx_frame_buffer.h',
+ 'libvpx/vpx/vpx_image.h',
+ 'libvpx/vpx/vpx_integer.h',
+ 'libvpx/vpx/vpx_tpl.h',
+ 'libvpx/vpx_mem/include/vpx_mem_intrnl.h',
+ 'libvpx/vpx_mem/vpx_mem.h',
+ 'libvpx/vpx_ports/bitops.h',
+ 'libvpx/vpx_ports/compiler_attributes.h',
+ 'libvpx/vpx_ports/mem.h',
+ 'libvpx/vpx_ports/static_assert.h',
+ 'libvpx/vpx_ports/system_state.h',
+ 'libvpx/vpx_ports/vpx_timer.h',
+ 'libvpx/vpx_ports/x86.h',
+ 'libvpx/vpx_scale/vpx_scale.h',
+ 'libvpx/vpx_scale/yv12config.h',
+],
+ 'LINUX_IA32_SOURCES': [
+ 'libvpx/../config/linux/ia32/vpx_config.c',
'libvpx/vp8/common/alloccommon.c',
'libvpx/vp8/common/blockd.c',
'libvpx/vp8/common/dequantize.c',
@@ -476,7 +1031,6 @@ files = {
'libvpx/vpx/src/vpx_decoder.c',
'libvpx/vpx/src/vpx_encoder.c',
'libvpx/vpx/src/vpx_image.c',
- 'libvpx/vpx/src/vpx_tpl.c',
'libvpx/vpx_dsp/add_noise.c',
'libvpx/vpx_dsp/avg.c',
'libvpx/vpx_dsp/bitreader.c',
@@ -550,7 +1104,551 @@ files = {
'libvpx/vpx_util/vpx_thread.c',
'libvpx/vpx_util/vpx_write_yuv_frame.c',
],
- 'ARM_EXPORTS': [
+ 'MAC_IA32_EXPORTS': [
+ 'libvpx/vpx/vp8.h',
+ 'libvpx/vpx/vp8cx.h',
+ 'libvpx/vpx/vp8dx.h',
+ 'libvpx/vpx/vpx_codec.h',
+ 'libvpx/vpx/vpx_decoder.h',
+ 'libvpx/vpx/vpx_encoder.h',
+ 'libvpx/vpx/vpx_ext_ratectrl.h',
+ 'libvpx/vpx/vpx_frame_buffer.h',
+ 'libvpx/vpx/vpx_image.h',
+ 'libvpx/vpx/vpx_integer.h',
+ 'libvpx/vpx/vpx_tpl.h',
+ 'libvpx/vpx_mem/include/vpx_mem_intrnl.h',
+ 'libvpx/vpx_mem/vpx_mem.h',
+ 'libvpx/vpx_ports/bitops.h',
+ 'libvpx/vpx_ports/compiler_attributes.h',
+ 'libvpx/vpx_ports/mem.h',
+ 'libvpx/vpx_ports/static_assert.h',
+ 'libvpx/vpx_ports/system_state.h',
+ 'libvpx/vpx_ports/vpx_timer.h',
+ 'libvpx/vpx_ports/x86.h',
+ 'libvpx/vpx_scale/vpx_scale.h',
+ 'libvpx/vpx_scale/yv12config.h',
+],
+ 'MAC_IA32_SOURCES': [
+ 'libvpx/../config/mac/ia32/vpx_config.c',
+ 'libvpx/vp8/common/alloccommon.c',
+ 'libvpx/vp8/common/blockd.c',
+ 'libvpx/vp8/common/dequantize.c',
+ 'libvpx/vp8/common/entropy.c',
+ 'libvpx/vp8/common/entropymode.c',
+ 'libvpx/vp8/common/entropymv.c',
+ 'libvpx/vp8/common/extend.c',
+ 'libvpx/vp8/common/filter.c',
+ 'libvpx/vp8/common/findnearmv.c',
+ 'libvpx/vp8/common/generic/systemdependent.c',
+ 'libvpx/vp8/common/idct_blk.c',
+ 'libvpx/vp8/common/idctllm.c',
+ 'libvpx/vp8/common/loopfilter_filters.c',
+ 'libvpx/vp8/common/mbpitch.c',
+ 'libvpx/vp8/common/mfqe.c',
+ 'libvpx/vp8/common/modecont.c',
+ 'libvpx/vp8/common/postproc.c',
+ 'libvpx/vp8/common/quant_common.c',
+ 'libvpx/vp8/common/reconinter.c',
+ 'libvpx/vp8/common/reconintra.c',
+ 'libvpx/vp8/common/reconintra4x4.c',
+ 'libvpx/vp8/common/rtcd.c',
+ 'libvpx/vp8/common/setupintrarecon.c',
+ 'libvpx/vp8/common/swapyv12buffer.c',
+ 'libvpx/vp8/common/treecoder.c',
+ 'libvpx/vp8/common/vp8_loopfilter.c',
+ 'libvpx/vp8/common/vp8_skin_detection.c',
+ 'libvpx/vp8/common/x86/bilinear_filter_sse2.c',
+ 'libvpx/vp8/common/x86/dequantize_mmx.asm',
+ 'libvpx/vp8/common/x86/idct_blk_mmx.c',
+ 'libvpx/vp8/common/x86/idct_blk_sse2.c',
+ 'libvpx/vp8/common/x86/idctllm_mmx.asm',
+ 'libvpx/vp8/common/x86/idctllm_sse2.asm',
+ 'libvpx/vp8/common/x86/iwalsh_sse2.asm',
+ 'libvpx/vp8/common/x86/loopfilter_sse2.asm',
+ 'libvpx/vp8/common/x86/loopfilter_x86.c',
+ 'libvpx/vp8/common/x86/mfqe_sse2.asm',
+ 'libvpx/vp8/common/x86/recon_mmx.asm',
+ 'libvpx/vp8/common/x86/recon_sse2.asm',
+ 'libvpx/vp8/common/x86/subpixel_mmx.asm',
+ 'libvpx/vp8/common/x86/subpixel_sse2.asm',
+ 'libvpx/vp8/common/x86/subpixel_ssse3.asm',
+ 'libvpx/vp8/common/x86/vp8_asm_stubs.c',
+ 'libvpx/vp8/decoder/dboolhuff.c',
+ 'libvpx/vp8/decoder/decodeframe.c',
+ 'libvpx/vp8/decoder/decodemv.c',
+ 'libvpx/vp8/decoder/detokenize.c',
+ 'libvpx/vp8/decoder/onyxd_if.c',
+ 'libvpx/vp8/decoder/threading.c',
+ 'libvpx/vp8/encoder/bitstream.c',
+ 'libvpx/vp8/encoder/boolhuff.c',
+ 'libvpx/vp8/encoder/copy_c.c',
+ 'libvpx/vp8/encoder/dct.c',
+ 'libvpx/vp8/encoder/denoising.c',
+ 'libvpx/vp8/encoder/encodeframe.c',
+ 'libvpx/vp8/encoder/encodeintra.c',
+ 'libvpx/vp8/encoder/encodemb.c',
+ 'libvpx/vp8/encoder/encodemv.c',
+ 'libvpx/vp8/encoder/ethreading.c',
+ 'libvpx/vp8/encoder/firstpass.c',
+ 'libvpx/vp8/encoder/lookahead.c',
+ 'libvpx/vp8/encoder/mcomp.c',
+ 'libvpx/vp8/encoder/modecosts.c',
+ 'libvpx/vp8/encoder/mr_dissim.c',
+ 'libvpx/vp8/encoder/onyx_if.c',
+ 'libvpx/vp8/encoder/pickinter.c',
+ 'libvpx/vp8/encoder/picklpf.c',
+ 'libvpx/vp8/encoder/ratectrl.c',
+ 'libvpx/vp8/encoder/rdopt.c',
+ 'libvpx/vp8/encoder/segmentation.c',
+ 'libvpx/vp8/encoder/temporal_filter.c',
+ 'libvpx/vp8/encoder/tokenize.c',
+ 'libvpx/vp8/encoder/treewriter.c',
+ 'libvpx/vp8/encoder/vp8_quantize.c',
+ 'libvpx/vp8/encoder/x86/block_error_sse2.asm',
+ 'libvpx/vp8/encoder/x86/copy_sse2.asm',
+ 'libvpx/vp8/encoder/x86/copy_sse3.asm',
+ 'libvpx/vp8/encoder/x86/dct_sse2.asm',
+ 'libvpx/vp8/encoder/x86/denoising_sse2.c',
+ 'libvpx/vp8/encoder/x86/fwalsh_sse2.asm',
+ 'libvpx/vp8/encoder/x86/quantize_sse4.c',
+ 'libvpx/vp8/encoder/x86/temporal_filter_apply_sse2.asm',
+ 'libvpx/vp8/encoder/x86/vp8_enc_stubs_sse2.c',
+ 'libvpx/vp8/encoder/x86/vp8_quantize_sse2.c',
+ 'libvpx/vp8/encoder/x86/vp8_quantize_ssse3.c',
+ 'libvpx/vp8/vp8_cx_iface.c',
+ 'libvpx/vp8/vp8_dx_iface.c',
+ 'libvpx/vp9/common/vp9_alloccommon.c',
+ 'libvpx/vp9/common/vp9_blockd.c',
+ 'libvpx/vp9/common/vp9_common_data.c',
+ 'libvpx/vp9/common/vp9_entropy.c',
+ 'libvpx/vp9/common/vp9_entropymode.c',
+ 'libvpx/vp9/common/vp9_entropymv.c',
+ 'libvpx/vp9/common/vp9_filter.c',
+ 'libvpx/vp9/common/vp9_frame_buffers.c',
+ 'libvpx/vp9/common/vp9_idct.c',
+ 'libvpx/vp9/common/vp9_loopfilter.c',
+ 'libvpx/vp9/common/vp9_mfqe.c',
+ 'libvpx/vp9/common/vp9_mvref_common.c',
+ 'libvpx/vp9/common/vp9_postproc.c',
+ 'libvpx/vp9/common/vp9_pred_common.c',
+ 'libvpx/vp9/common/vp9_quant_common.c',
+ 'libvpx/vp9/common/vp9_reconinter.c',
+ 'libvpx/vp9/common/vp9_reconintra.c',
+ 'libvpx/vp9/common/vp9_rtcd.c',
+ 'libvpx/vp9/common/vp9_scale.c',
+ 'libvpx/vp9/common/vp9_scan.c',
+ 'libvpx/vp9/common/vp9_seg_common.c',
+ 'libvpx/vp9/common/vp9_thread_common.c',
+ 'libvpx/vp9/common/vp9_tile_common.c',
+ 'libvpx/vp9/common/x86/vp9_idct_intrin_sse2.c',
+ 'libvpx/vp9/common/x86/vp9_mfqe_sse2.asm',
+ 'libvpx/vp9/decoder/vp9_decodeframe.c',
+ 'libvpx/vp9/decoder/vp9_decodemv.c',
+ 'libvpx/vp9/decoder/vp9_decoder.c',
+ 'libvpx/vp9/decoder/vp9_detokenize.c',
+ 'libvpx/vp9/decoder/vp9_dsubexp.c',
+ 'libvpx/vp9/decoder/vp9_job_queue.c',
+ 'libvpx/vp9/encoder/vp9_alt_ref_aq.c',
+ 'libvpx/vp9/encoder/vp9_aq_360.c',
+ 'libvpx/vp9/encoder/vp9_aq_complexity.c',
+ 'libvpx/vp9/encoder/vp9_aq_cyclicrefresh.c',
+ 'libvpx/vp9/encoder/vp9_aq_variance.c',
+ 'libvpx/vp9/encoder/vp9_bitstream.c',
+ 'libvpx/vp9/encoder/vp9_context_tree.c',
+ 'libvpx/vp9/encoder/vp9_cost.c',
+ 'libvpx/vp9/encoder/vp9_dct.c',
+ 'libvpx/vp9/encoder/vp9_encodeframe.c',
+ 'libvpx/vp9/encoder/vp9_encodemb.c',
+ 'libvpx/vp9/encoder/vp9_encodemv.c',
+ 'libvpx/vp9/encoder/vp9_encoder.c',
+ 'libvpx/vp9/encoder/vp9_ethread.c',
+ 'libvpx/vp9/encoder/vp9_ext_ratectrl.c',
+ 'libvpx/vp9/encoder/vp9_extend.c',
+ 'libvpx/vp9/encoder/vp9_firstpass.c',
+ 'libvpx/vp9/encoder/vp9_frame_scale.c',
+ 'libvpx/vp9/encoder/vp9_lookahead.c',
+ 'libvpx/vp9/encoder/vp9_mbgraph.c',
+ 'libvpx/vp9/encoder/vp9_mcomp.c',
+ 'libvpx/vp9/encoder/vp9_multi_thread.c',
+ 'libvpx/vp9/encoder/vp9_noise_estimate.c',
+ 'libvpx/vp9/encoder/vp9_picklpf.c',
+ 'libvpx/vp9/encoder/vp9_pickmode.c',
+ 'libvpx/vp9/encoder/vp9_quantize.c',
+ 'libvpx/vp9/encoder/vp9_ratectrl.c',
+ 'libvpx/vp9/encoder/vp9_rd.c',
+ 'libvpx/vp9/encoder/vp9_rdopt.c',
+ 'libvpx/vp9/encoder/vp9_resize.c',
+ 'libvpx/vp9/encoder/vp9_segmentation.c',
+ 'libvpx/vp9/encoder/vp9_skin_detection.c',
+ 'libvpx/vp9/encoder/vp9_speed_features.c',
+ 'libvpx/vp9/encoder/vp9_subexp.c',
+ 'libvpx/vp9/encoder/vp9_svc_layercontext.c',
+ 'libvpx/vp9/encoder/vp9_temporal_filter.c',
+ 'libvpx/vp9/encoder/vp9_tokenize.c',
+ 'libvpx/vp9/encoder/vp9_tpl_model.c',
+ 'libvpx/vp9/encoder/vp9_treewriter.c',
+ 'libvpx/vp9/encoder/x86/temporal_filter_sse4.c',
+ 'libvpx/vp9/encoder/x86/vp9_dct_intrin_sse2.c',
+ 'libvpx/vp9/encoder/x86/vp9_dct_sse2.asm',
+ 'libvpx/vp9/encoder/x86/vp9_error_avx2.c',
+ 'libvpx/vp9/encoder/x86/vp9_error_sse2.asm',
+ 'libvpx/vp9/encoder/x86/vp9_frame_scale_ssse3.c',
+ 'libvpx/vp9/encoder/x86/vp9_quantize_avx2.c',
+ 'libvpx/vp9/encoder/x86/vp9_quantize_sse2.c',
+ 'libvpx/vp9/encoder/x86/vp9_quantize_ssse3.c',
+ 'libvpx/vp9/vp9_cx_iface.c',
+ 'libvpx/vp9/vp9_dx_iface.c',
+ 'libvpx/vp9/vp9_iface_common.c',
+ 'libvpx/vpx/src/vpx_codec.c',
+ 'libvpx/vpx/src/vpx_decoder.c',
+ 'libvpx/vpx/src/vpx_encoder.c',
+ 'libvpx/vpx/src/vpx_image.c',
+ 'libvpx/vpx_dsp/add_noise.c',
+ 'libvpx/vpx_dsp/avg.c',
+ 'libvpx/vpx_dsp/bitreader.c',
+ 'libvpx/vpx_dsp/bitreader_buffer.c',
+ 'libvpx/vpx_dsp/bitwriter.c',
+ 'libvpx/vpx_dsp/bitwriter_buffer.c',
+ 'libvpx/vpx_dsp/deblock.c',
+ 'libvpx/vpx_dsp/fwd_txfm.c',
+ 'libvpx/vpx_dsp/intrapred.c',
+ 'libvpx/vpx_dsp/inv_txfm.c',
+ 'libvpx/vpx_dsp/loopfilter.c',
+ 'libvpx/vpx_dsp/prob.c',
+ 'libvpx/vpx_dsp/psnr.c',
+ 'libvpx/vpx_dsp/quantize.c',
+ 'libvpx/vpx_dsp/sad.c',
+ 'libvpx/vpx_dsp/skin_detection.c',
+ 'libvpx/vpx_dsp/sse.c',
+ 'libvpx/vpx_dsp/subtract.c',
+ 'libvpx/vpx_dsp/sum_squares.c',
+ 'libvpx/vpx_dsp/variance.c',
+ 'libvpx/vpx_dsp/vpx_convolve.c',
+ 'libvpx/vpx_dsp/vpx_dsp_rtcd.c',
+ 'libvpx/vpx_dsp/x86/add_noise_sse2.asm',
+ 'libvpx/vpx_dsp/x86/avg_intrin_avx2.c',
+ 'libvpx/vpx_dsp/x86/avg_intrin_sse2.c',
+ 'libvpx/vpx_dsp/x86/avg_pred_avx2.c',
+ 'libvpx/vpx_dsp/x86/avg_pred_sse2.c',
+ 'libvpx/vpx_dsp/x86/deblock_sse2.asm',
+ 'libvpx/vpx_dsp/x86/fwd_txfm_avx2.c',
+ 'libvpx/vpx_dsp/x86/fwd_txfm_sse2.c',
+ 'libvpx/vpx_dsp/x86/intrapred_sse2.asm',
+ 'libvpx/vpx_dsp/x86/intrapred_ssse3.asm',
+ 'libvpx/vpx_dsp/x86/inv_txfm_avx2.c',
+ 'libvpx/vpx_dsp/x86/inv_txfm_sse2.c',
+ 'libvpx/vpx_dsp/x86/inv_txfm_ssse3.c',
+ 'libvpx/vpx_dsp/x86/inv_wht_sse2.asm',
+ 'libvpx/vpx_dsp/x86/loopfilter_avx2.c',
+ 'libvpx/vpx_dsp/x86/loopfilter_intrin_sse2.c',
+ 'libvpx/vpx_dsp/x86/post_proc_sse2.c',
+ 'libvpx/vpx_dsp/x86/quantize_avx.c',
+ 'libvpx/vpx_dsp/x86/quantize_avx2.c',
+ 'libvpx/vpx_dsp/x86/quantize_sse2.c',
+ 'libvpx/vpx_dsp/x86/quantize_ssse3.c',
+ 'libvpx/vpx_dsp/x86/sad4d_avx2.c',
+ 'libvpx/vpx_dsp/x86/sad4d_sse2.asm',
+ 'libvpx/vpx_dsp/x86/sad_avx2.c',
+ 'libvpx/vpx_dsp/x86/sad_sse2.asm',
+ 'libvpx/vpx_dsp/x86/sse_avx2.c',
+ 'libvpx/vpx_dsp/x86/sse_sse4.c',
+ 'libvpx/vpx_dsp/x86/subpel_variance_sse2.asm',
+ 'libvpx/vpx_dsp/x86/subtract_avx2.c',
+ 'libvpx/vpx_dsp/x86/subtract_sse2.asm',
+ 'libvpx/vpx_dsp/x86/sum_squares_sse2.c',
+ 'libvpx/vpx_dsp/x86/variance_avx2.c',
+ 'libvpx/vpx_dsp/x86/variance_sse2.c',
+ 'libvpx/vpx_dsp/x86/vpx_convolve_copy_sse2.asm',
+ 'libvpx/vpx_dsp/x86/vpx_subpixel_4t_intrin_sse2.c',
+ 'libvpx/vpx_dsp/x86/vpx_subpixel_8t_intrin_avx2.c',
+ 'libvpx/vpx_dsp/x86/vpx_subpixel_8t_intrin_ssse3.c',
+ 'libvpx/vpx_dsp/x86/vpx_subpixel_8t_sse2.asm',
+ 'libvpx/vpx_dsp/x86/vpx_subpixel_8t_ssse3.asm',
+ 'libvpx/vpx_dsp/x86/vpx_subpixel_bilinear_sse2.asm',
+ 'libvpx/vpx_dsp/x86/vpx_subpixel_bilinear_ssse3.asm',
+ 'libvpx/vpx_mem/vpx_mem.c',
+ 'libvpx/vpx_ports/emms_mmx.c',
+ 'libvpx/vpx_scale/generic/gen_scalers.c',
+ 'libvpx/vpx_scale/generic/vpx_scale.c',
+ 'libvpx/vpx_scale/generic/yv12config.c',
+ 'libvpx/vpx_scale/generic/yv12extend.c',
+ 'libvpx/vpx_scale/vpx_scale_rtcd.c',
+ 'libvpx/vpx_util/vpx_thread.c',
+ 'libvpx/vpx_util/vpx_write_yuv_frame.c',
+],
+ 'WIN_IA32_EXPORTS': [
+ 'libvpx/vpx/vp8.h',
+ 'libvpx/vpx/vp8cx.h',
+ 'libvpx/vpx/vp8dx.h',
+ 'libvpx/vpx/vpx_codec.h',
+ 'libvpx/vpx/vpx_decoder.h',
+ 'libvpx/vpx/vpx_encoder.h',
+ 'libvpx/vpx/vpx_ext_ratectrl.h',
+ 'libvpx/vpx/vpx_frame_buffer.h',
+ 'libvpx/vpx/vpx_image.h',
+ 'libvpx/vpx/vpx_integer.h',
+ 'libvpx/vpx/vpx_tpl.h',
+ 'libvpx/vpx_mem/include/vpx_mem_intrnl.h',
+ 'libvpx/vpx_mem/vpx_mem.h',
+ 'libvpx/vpx_ports/bitops.h',
+ 'libvpx/vpx_ports/compiler_attributes.h',
+ 'libvpx/vpx_ports/mem.h',
+ 'libvpx/vpx_ports/static_assert.h',
+ 'libvpx/vpx_ports/system_state.h',
+ 'libvpx/vpx_ports/vpx_timer.h',
+ 'libvpx/vpx_ports/x86.h',
+ 'libvpx/vpx_scale/vpx_scale.h',
+ 'libvpx/vpx_scale/yv12config.h',
+],
+ 'WIN_IA32_SOURCES': [
+ 'libvpx/../config/win/ia32/vpx_config.c',
+ 'libvpx/vp8/common/alloccommon.c',
+ 'libvpx/vp8/common/blockd.c',
+ 'libvpx/vp8/common/dequantize.c',
+ 'libvpx/vp8/common/entropy.c',
+ 'libvpx/vp8/common/entropymode.c',
+ 'libvpx/vp8/common/entropymv.c',
+ 'libvpx/vp8/common/extend.c',
+ 'libvpx/vp8/common/filter.c',
+ 'libvpx/vp8/common/findnearmv.c',
+ 'libvpx/vp8/common/generic/systemdependent.c',
+ 'libvpx/vp8/common/idct_blk.c',
+ 'libvpx/vp8/common/idctllm.c',
+ 'libvpx/vp8/common/loopfilter_filters.c',
+ 'libvpx/vp8/common/mbpitch.c',
+ 'libvpx/vp8/common/mfqe.c',
+ 'libvpx/vp8/common/modecont.c',
+ 'libvpx/vp8/common/postproc.c',
+ 'libvpx/vp8/common/quant_common.c',
+ 'libvpx/vp8/common/reconinter.c',
+ 'libvpx/vp8/common/reconintra.c',
+ 'libvpx/vp8/common/reconintra4x4.c',
+ 'libvpx/vp8/common/rtcd.c',
+ 'libvpx/vp8/common/setupintrarecon.c',
+ 'libvpx/vp8/common/swapyv12buffer.c',
+ 'libvpx/vp8/common/treecoder.c',
+ 'libvpx/vp8/common/vp8_loopfilter.c',
+ 'libvpx/vp8/common/vp8_skin_detection.c',
+ 'libvpx/vp8/common/x86/bilinear_filter_sse2.c',
+ 'libvpx/vp8/common/x86/dequantize_mmx.asm',
+ 'libvpx/vp8/common/x86/idct_blk_mmx.c',
+ 'libvpx/vp8/common/x86/idct_blk_sse2.c',
+ 'libvpx/vp8/common/x86/idctllm_mmx.asm',
+ 'libvpx/vp8/common/x86/idctllm_sse2.asm',
+ 'libvpx/vp8/common/x86/iwalsh_sse2.asm',
+ 'libvpx/vp8/common/x86/loopfilter_sse2.asm',
+ 'libvpx/vp8/common/x86/loopfilter_x86.c',
+ 'libvpx/vp8/common/x86/mfqe_sse2.asm',
+ 'libvpx/vp8/common/x86/recon_mmx.asm',
+ 'libvpx/vp8/common/x86/recon_sse2.asm',
+ 'libvpx/vp8/common/x86/subpixel_mmx.asm',
+ 'libvpx/vp8/common/x86/subpixel_sse2.asm',
+ 'libvpx/vp8/common/x86/subpixel_ssse3.asm',
+ 'libvpx/vp8/common/x86/vp8_asm_stubs.c',
+ 'libvpx/vp8/decoder/dboolhuff.c',
+ 'libvpx/vp8/decoder/decodeframe.c',
+ 'libvpx/vp8/decoder/decodemv.c',
+ 'libvpx/vp8/decoder/detokenize.c',
+ 'libvpx/vp8/decoder/onyxd_if.c',
+ 'libvpx/vp8/decoder/threading.c',
+ 'libvpx/vp8/encoder/bitstream.c',
+ 'libvpx/vp8/encoder/boolhuff.c',
+ 'libvpx/vp8/encoder/copy_c.c',
+ 'libvpx/vp8/encoder/dct.c',
+ 'libvpx/vp8/encoder/denoising.c',
+ 'libvpx/vp8/encoder/encodeframe.c',
+ 'libvpx/vp8/encoder/encodeintra.c',
+ 'libvpx/vp8/encoder/encodemb.c',
+ 'libvpx/vp8/encoder/encodemv.c',
+ 'libvpx/vp8/encoder/ethreading.c',
+ 'libvpx/vp8/encoder/firstpass.c',
+ 'libvpx/vp8/encoder/lookahead.c',
+ 'libvpx/vp8/encoder/mcomp.c',
+ 'libvpx/vp8/encoder/modecosts.c',
+ 'libvpx/vp8/encoder/mr_dissim.c',
+ 'libvpx/vp8/encoder/onyx_if.c',
+ 'libvpx/vp8/encoder/pickinter.c',
+ 'libvpx/vp8/encoder/picklpf.c',
+ 'libvpx/vp8/encoder/ratectrl.c',
+ 'libvpx/vp8/encoder/rdopt.c',
+ 'libvpx/vp8/encoder/segmentation.c',
+ 'libvpx/vp8/encoder/temporal_filter.c',
+ 'libvpx/vp8/encoder/tokenize.c',
+ 'libvpx/vp8/encoder/treewriter.c',
+ 'libvpx/vp8/encoder/vp8_quantize.c',
+ 'libvpx/vp8/encoder/x86/block_error_sse2.asm',
+ 'libvpx/vp8/encoder/x86/copy_sse2.asm',
+ 'libvpx/vp8/encoder/x86/copy_sse3.asm',
+ 'libvpx/vp8/encoder/x86/dct_sse2.asm',
+ 'libvpx/vp8/encoder/x86/denoising_sse2.c',
+ 'libvpx/vp8/encoder/x86/fwalsh_sse2.asm',
+ 'libvpx/vp8/encoder/x86/quantize_sse4.c',
+ 'libvpx/vp8/encoder/x86/temporal_filter_apply_sse2.asm',
+ 'libvpx/vp8/encoder/x86/vp8_enc_stubs_sse2.c',
+ 'libvpx/vp8/encoder/x86/vp8_quantize_sse2.c',
+ 'libvpx/vp8/encoder/x86/vp8_quantize_ssse3.c',
+ 'libvpx/vp8/vp8_cx_iface.c',
+ 'libvpx/vp8/vp8_dx_iface.c',
+ 'libvpx/vp9/common/vp9_alloccommon.c',
+ 'libvpx/vp9/common/vp9_blockd.c',
+ 'libvpx/vp9/common/vp9_common_data.c',
+ 'libvpx/vp9/common/vp9_entropy.c',
+ 'libvpx/vp9/common/vp9_entropymode.c',
+ 'libvpx/vp9/common/vp9_entropymv.c',
+ 'libvpx/vp9/common/vp9_filter.c',
+ 'libvpx/vp9/common/vp9_frame_buffers.c',
+ 'libvpx/vp9/common/vp9_idct.c',
+ 'libvpx/vp9/common/vp9_loopfilter.c',
+ 'libvpx/vp9/common/vp9_mfqe.c',
+ 'libvpx/vp9/common/vp9_mvref_common.c',
+ 'libvpx/vp9/common/vp9_postproc.c',
+ 'libvpx/vp9/common/vp9_pred_common.c',
+ 'libvpx/vp9/common/vp9_quant_common.c',
+ 'libvpx/vp9/common/vp9_reconinter.c',
+ 'libvpx/vp9/common/vp9_reconintra.c',
+ 'libvpx/vp9/common/vp9_rtcd.c',
+ 'libvpx/vp9/common/vp9_scale.c',
+ 'libvpx/vp9/common/vp9_scan.c',
+ 'libvpx/vp9/common/vp9_seg_common.c',
+ 'libvpx/vp9/common/vp9_thread_common.c',
+ 'libvpx/vp9/common/vp9_tile_common.c',
+ 'libvpx/vp9/common/x86/vp9_idct_intrin_sse2.c',
+ 'libvpx/vp9/common/x86/vp9_mfqe_sse2.asm',
+ 'libvpx/vp9/decoder/vp9_decodeframe.c',
+ 'libvpx/vp9/decoder/vp9_decodemv.c',
+ 'libvpx/vp9/decoder/vp9_decoder.c',
+ 'libvpx/vp9/decoder/vp9_detokenize.c',
+ 'libvpx/vp9/decoder/vp9_dsubexp.c',
+ 'libvpx/vp9/decoder/vp9_job_queue.c',
+ 'libvpx/vp9/encoder/vp9_alt_ref_aq.c',
+ 'libvpx/vp9/encoder/vp9_aq_360.c',
+ 'libvpx/vp9/encoder/vp9_aq_complexity.c',
+ 'libvpx/vp9/encoder/vp9_aq_cyclicrefresh.c',
+ 'libvpx/vp9/encoder/vp9_aq_variance.c',
+ 'libvpx/vp9/encoder/vp9_bitstream.c',
+ 'libvpx/vp9/encoder/vp9_context_tree.c',
+ 'libvpx/vp9/encoder/vp9_cost.c',
+ 'libvpx/vp9/encoder/vp9_dct.c',
+ 'libvpx/vp9/encoder/vp9_encodeframe.c',
+ 'libvpx/vp9/encoder/vp9_encodemb.c',
+ 'libvpx/vp9/encoder/vp9_encodemv.c',
+ 'libvpx/vp9/encoder/vp9_encoder.c',
+ 'libvpx/vp9/encoder/vp9_ethread.c',
+ 'libvpx/vp9/encoder/vp9_ext_ratectrl.c',
+ 'libvpx/vp9/encoder/vp9_extend.c',
+ 'libvpx/vp9/encoder/vp9_firstpass.c',
+ 'libvpx/vp9/encoder/vp9_frame_scale.c',
+ 'libvpx/vp9/encoder/vp9_lookahead.c',
+ 'libvpx/vp9/encoder/vp9_mbgraph.c',
+ 'libvpx/vp9/encoder/vp9_mcomp.c',
+ 'libvpx/vp9/encoder/vp9_multi_thread.c',
+ 'libvpx/vp9/encoder/vp9_noise_estimate.c',
+ 'libvpx/vp9/encoder/vp9_picklpf.c',
+ 'libvpx/vp9/encoder/vp9_pickmode.c',
+ 'libvpx/vp9/encoder/vp9_quantize.c',
+ 'libvpx/vp9/encoder/vp9_ratectrl.c',
+ 'libvpx/vp9/encoder/vp9_rd.c',
+ 'libvpx/vp9/encoder/vp9_rdopt.c',
+ 'libvpx/vp9/encoder/vp9_resize.c',
+ 'libvpx/vp9/encoder/vp9_segmentation.c',
+ 'libvpx/vp9/encoder/vp9_skin_detection.c',
+ 'libvpx/vp9/encoder/vp9_speed_features.c',
+ 'libvpx/vp9/encoder/vp9_subexp.c',
+ 'libvpx/vp9/encoder/vp9_svc_layercontext.c',
+ 'libvpx/vp9/encoder/vp9_temporal_filter.c',
+ 'libvpx/vp9/encoder/vp9_tokenize.c',
+ 'libvpx/vp9/encoder/vp9_tpl_model.c',
+ 'libvpx/vp9/encoder/vp9_treewriter.c',
+ 'libvpx/vp9/encoder/x86/temporal_filter_sse4.c',
+ 'libvpx/vp9/encoder/x86/vp9_dct_intrin_sse2.c',
+ 'libvpx/vp9/encoder/x86/vp9_dct_sse2.asm',
+ 'libvpx/vp9/encoder/x86/vp9_error_avx2.c',
+ 'libvpx/vp9/encoder/x86/vp9_error_sse2.asm',
+ 'libvpx/vp9/encoder/x86/vp9_frame_scale_ssse3.c',
+ 'libvpx/vp9/encoder/x86/vp9_quantize_avx2.c',
+ 'libvpx/vp9/encoder/x86/vp9_quantize_sse2.c',
+ 'libvpx/vp9/encoder/x86/vp9_quantize_ssse3.c',
+ 'libvpx/vp9/vp9_cx_iface.c',
+ 'libvpx/vp9/vp9_dx_iface.c',
+ 'libvpx/vp9/vp9_iface_common.c',
+ 'libvpx/vpx/src/vpx_codec.c',
+ 'libvpx/vpx/src/vpx_decoder.c',
+ 'libvpx/vpx/src/vpx_encoder.c',
+ 'libvpx/vpx/src/vpx_image.c',
+ 'libvpx/vpx_dsp/add_noise.c',
+ 'libvpx/vpx_dsp/avg.c',
+ 'libvpx/vpx_dsp/bitreader.c',
+ 'libvpx/vpx_dsp/bitreader_buffer.c',
+ 'libvpx/vpx_dsp/bitwriter.c',
+ 'libvpx/vpx_dsp/bitwriter_buffer.c',
+ 'libvpx/vpx_dsp/deblock.c',
+ 'libvpx/vpx_dsp/fwd_txfm.c',
+ 'libvpx/vpx_dsp/intrapred.c',
+ 'libvpx/vpx_dsp/inv_txfm.c',
+ 'libvpx/vpx_dsp/loopfilter.c',
+ 'libvpx/vpx_dsp/prob.c',
+ 'libvpx/vpx_dsp/psnr.c',
+ 'libvpx/vpx_dsp/quantize.c',
+ 'libvpx/vpx_dsp/sad.c',
+ 'libvpx/vpx_dsp/skin_detection.c',
+ 'libvpx/vpx_dsp/sse.c',
+ 'libvpx/vpx_dsp/subtract.c',
+ 'libvpx/vpx_dsp/sum_squares.c',
+ 'libvpx/vpx_dsp/variance.c',
+ 'libvpx/vpx_dsp/vpx_convolve.c',
+ 'libvpx/vpx_dsp/vpx_dsp_rtcd.c',
+ 'libvpx/vpx_dsp/x86/add_noise_sse2.asm',
+ 'libvpx/vpx_dsp/x86/avg_intrin_avx2.c',
+ 'libvpx/vpx_dsp/x86/avg_intrin_sse2.c',
+ 'libvpx/vpx_dsp/x86/avg_pred_avx2.c',
+ 'libvpx/vpx_dsp/x86/avg_pred_sse2.c',
+ 'libvpx/vpx_dsp/x86/deblock_sse2.asm',
+ 'libvpx/vpx_dsp/x86/fwd_txfm_avx2.c',
+ 'libvpx/vpx_dsp/x86/fwd_txfm_sse2.c',
+ 'libvpx/vpx_dsp/x86/intrapred_sse2.asm',
+ 'libvpx/vpx_dsp/x86/intrapred_ssse3.asm',
+ 'libvpx/vpx_dsp/x86/inv_txfm_avx2.c',
+ 'libvpx/vpx_dsp/x86/inv_txfm_sse2.c',
+ 'libvpx/vpx_dsp/x86/inv_txfm_ssse3.c',
+ 'libvpx/vpx_dsp/x86/inv_wht_sse2.asm',
+ 'libvpx/vpx_dsp/x86/loopfilter_avx2.c',
+ 'libvpx/vpx_dsp/x86/loopfilter_intrin_sse2.c',
+ 'libvpx/vpx_dsp/x86/post_proc_sse2.c',
+ 'libvpx/vpx_dsp/x86/quantize_avx.c',
+ 'libvpx/vpx_dsp/x86/quantize_avx2.c',
+ 'libvpx/vpx_dsp/x86/quantize_sse2.c',
+ 'libvpx/vpx_dsp/x86/quantize_ssse3.c',
+ 'libvpx/vpx_dsp/x86/sad4d_avx2.c',
+ 'libvpx/vpx_dsp/x86/sad4d_sse2.asm',
+ 'libvpx/vpx_dsp/x86/sad_avx2.c',
+ 'libvpx/vpx_dsp/x86/sad_sse2.asm',
+ 'libvpx/vpx_dsp/x86/sse_avx2.c',
+ 'libvpx/vpx_dsp/x86/sse_sse4.c',
+ 'libvpx/vpx_dsp/x86/subpel_variance_sse2.asm',
+ 'libvpx/vpx_dsp/x86/subtract_avx2.c',
+ 'libvpx/vpx_dsp/x86/subtract_sse2.asm',
+ 'libvpx/vpx_dsp/x86/sum_squares_sse2.c',
+ 'libvpx/vpx_dsp/x86/variance_avx2.c',
+ 'libvpx/vpx_dsp/x86/variance_sse2.c',
+ 'libvpx/vpx_dsp/x86/vpx_convolve_copy_sse2.asm',
+ 'libvpx/vpx_dsp/x86/vpx_subpixel_4t_intrin_sse2.c',
+ 'libvpx/vpx_dsp/x86/vpx_subpixel_8t_intrin_avx2.c',
+ 'libvpx/vpx_dsp/x86/vpx_subpixel_8t_intrin_ssse3.c',
+ 'libvpx/vpx_dsp/x86/vpx_subpixel_8t_sse2.asm',
+ 'libvpx/vpx_dsp/x86/vpx_subpixel_8t_ssse3.asm',
+ 'libvpx/vpx_dsp/x86/vpx_subpixel_bilinear_sse2.asm',
+ 'libvpx/vpx_dsp/x86/vpx_subpixel_bilinear_ssse3.asm',
+ 'libvpx/vpx_mem/vpx_mem.c',
+ 'libvpx/vpx_ports/emms_mmx.c',
+ 'libvpx/vpx_scale/generic/gen_scalers.c',
+ 'libvpx/vpx_scale/generic/vpx_scale.c',
+ 'libvpx/vpx_scale/generic/yv12config.c',
+ 'libvpx/vpx_scale/generic/yv12extend.c',
+ 'libvpx/vpx_scale/vpx_scale_rtcd.c',
+ 'libvpx/vpx_util/vpx_thread.c',
+ 'libvpx/vpx_util/vpx_write_yuv_frame.c',
+],
+ 'LINUX_ARM_EXPORTS': [
'libvpx/vpx/vp8.h',
'libvpx/vpx/vp8cx.h',
'libvpx/vpx/vp8dx.h',
@@ -575,7 +1673,8 @@ files = {
'libvpx/vpx_scale/vpx_scale.h',
'libvpx/vpx_scale/yv12config.h',
],
- 'ARM_SOURCES': [
+ 'LINUX_ARM_SOURCES': [
+ 'libvpx/../config/linux/arm/vpx_config.c',
'libvpx/vp8/common/alloccommon.c',
'libvpx/vp8/common/arm/loopfilter_arm.c',
'libvpx/vp8/common/arm/neon/bilinearpredict_neon.c',
@@ -724,7 +1823,6 @@ files = {
'libvpx/vpx/src/vpx_decoder.c',
'libvpx/vpx/src/vpx_encoder.c',
'libvpx/vpx/src/vpx_image.c',
- 'libvpx/vpx/src/vpx_tpl.c',
'libvpx/vpx_dsp/arm/avg_neon.c',
'libvpx/vpx_dsp/arm/avg_pred_neon.c',
'libvpx/vpx_dsp/arm/fdct16x16_neon.c',
@@ -801,7 +1899,251 @@ files = {
'libvpx/vpx_util/vpx_thread.c',
'libvpx/vpx_util/vpx_write_yuv_frame.c',
],
- 'ARM64_EXPORTS': [
+ 'LINUX_ARM64_EXPORTS': [
+ 'libvpx/vpx/vp8.h',
+ 'libvpx/vpx/vp8cx.h',
+ 'libvpx/vpx/vp8dx.h',
+ 'libvpx/vpx/vpx_codec.h',
+ 'libvpx/vpx/vpx_decoder.h',
+ 'libvpx/vpx/vpx_encoder.h',
+ 'libvpx/vpx/vpx_ext_ratectrl.h',
+ 'libvpx/vpx/vpx_frame_buffer.h',
+ 'libvpx/vpx/vpx_image.h',
+ 'libvpx/vpx/vpx_integer.h',
+ 'libvpx/vpx/vpx_tpl.h',
+ 'libvpx/vpx_mem/include/vpx_mem_intrnl.h',
+ 'libvpx/vpx_mem/vpx_mem.h',
+ 'libvpx/vpx_ports/arm.h',
+ 'libvpx/vpx_ports/arm_cpudetect.h',
+ 'libvpx/vpx_ports/bitops.h',
+ 'libvpx/vpx_ports/compiler_attributes.h',
+ 'libvpx/vpx_ports/mem.h',
+ 'libvpx/vpx_ports/static_assert.h',
+ 'libvpx/vpx_ports/system_state.h',
+ 'libvpx/vpx_ports/vpx_timer.h',
+ 'libvpx/vpx_scale/vpx_scale.h',
+ 'libvpx/vpx_scale/yv12config.h',
+],
+ 'LINUX_ARM64_SOURCES': [
+ 'libvpx/../config/linux/arm64/vpx_config.c',
+ 'libvpx/vp8/common/alloccommon.c',
+ 'libvpx/vp8/common/arm/loopfilter_arm.c',
+ 'libvpx/vp8/common/arm/neon/bilinearpredict_neon.c',
+ 'libvpx/vp8/common/arm/neon/copymem_neon.c',
+ 'libvpx/vp8/common/arm/neon/dc_only_idct_add_neon.c',
+ 'libvpx/vp8/common/arm/neon/dequant_idct_neon.c',
+ 'libvpx/vp8/common/arm/neon/dequantizeb_neon.c',
+ 'libvpx/vp8/common/arm/neon/idct_blk_neon.c',
+ 'libvpx/vp8/common/arm/neon/iwalsh_neon.c',
+ 'libvpx/vp8/common/arm/neon/loopfiltersimplehorizontaledge_neon.c',
+ 'libvpx/vp8/common/arm/neon/loopfiltersimpleverticaledge_neon.c',
+ 'libvpx/vp8/common/arm/neon/mbloopfilter_neon.c',
+ 'libvpx/vp8/common/arm/neon/shortidct4x4llm_neon.c',
+ 'libvpx/vp8/common/arm/neon/sixtappredict_neon.c',
+ 'libvpx/vp8/common/arm/neon/vp8_loopfilter_neon.c',
+ 'libvpx/vp8/common/blockd.c',
+ 'libvpx/vp8/common/dequantize.c',
+ 'libvpx/vp8/common/entropy.c',
+ 'libvpx/vp8/common/entropymode.c',
+ 'libvpx/vp8/common/entropymv.c',
+ 'libvpx/vp8/common/extend.c',
+ 'libvpx/vp8/common/filter.c',
+ 'libvpx/vp8/common/findnearmv.c',
+ 'libvpx/vp8/common/generic/systemdependent.c',
+ 'libvpx/vp8/common/idct_blk.c',
+ 'libvpx/vp8/common/idctllm.c',
+ 'libvpx/vp8/common/loopfilter_filters.c',
+ 'libvpx/vp8/common/mbpitch.c',
+ 'libvpx/vp8/common/modecont.c',
+ 'libvpx/vp8/common/quant_common.c',
+ 'libvpx/vp8/common/reconinter.c',
+ 'libvpx/vp8/common/reconintra.c',
+ 'libvpx/vp8/common/reconintra4x4.c',
+ 'libvpx/vp8/common/rtcd.c',
+ 'libvpx/vp8/common/setupintrarecon.c',
+ 'libvpx/vp8/common/swapyv12buffer.c',
+ 'libvpx/vp8/common/treecoder.c',
+ 'libvpx/vp8/common/vp8_loopfilter.c',
+ 'libvpx/vp8/common/vp8_skin_detection.c',
+ 'libvpx/vp8/decoder/dboolhuff.c',
+ 'libvpx/vp8/decoder/decodeframe.c',
+ 'libvpx/vp8/decoder/decodemv.c',
+ 'libvpx/vp8/decoder/detokenize.c',
+ 'libvpx/vp8/decoder/onyxd_if.c',
+ 'libvpx/vp8/decoder/threading.c',
+ 'libvpx/vp8/encoder/arm/neon/denoising_neon.c',
+ 'libvpx/vp8/encoder/arm/neon/fastquantizeb_neon.c',
+ 'libvpx/vp8/encoder/arm/neon/shortfdct_neon.c',
+ 'libvpx/vp8/encoder/arm/neon/vp8_shortwalsh4x4_neon.c',
+ 'libvpx/vp8/encoder/bitstream.c',
+ 'libvpx/vp8/encoder/boolhuff.c',
+ 'libvpx/vp8/encoder/copy_c.c',
+ 'libvpx/vp8/encoder/dct.c',
+ 'libvpx/vp8/encoder/denoising.c',
+ 'libvpx/vp8/encoder/encodeframe.c',
+ 'libvpx/vp8/encoder/encodeintra.c',
+ 'libvpx/vp8/encoder/encodemb.c',
+ 'libvpx/vp8/encoder/encodemv.c',
+ 'libvpx/vp8/encoder/ethreading.c',
+ 'libvpx/vp8/encoder/lookahead.c',
+ 'libvpx/vp8/encoder/mcomp.c',
+ 'libvpx/vp8/encoder/modecosts.c',
+ 'libvpx/vp8/encoder/mr_dissim.c',
+ 'libvpx/vp8/encoder/onyx_if.c',
+ 'libvpx/vp8/encoder/pickinter.c',
+ 'libvpx/vp8/encoder/picklpf.c',
+ 'libvpx/vp8/encoder/ratectrl.c',
+ 'libvpx/vp8/encoder/rdopt.c',
+ 'libvpx/vp8/encoder/segmentation.c',
+ 'libvpx/vp8/encoder/tokenize.c',
+ 'libvpx/vp8/encoder/treewriter.c',
+ 'libvpx/vp8/encoder/vp8_quantize.c',
+ 'libvpx/vp8/vp8_cx_iface.c',
+ 'libvpx/vp8/vp8_dx_iface.c',
+ 'libvpx/vp9/common/arm/neon/vp9_iht16x16_add_neon.c',
+ 'libvpx/vp9/common/arm/neon/vp9_iht4x4_add_neon.c',
+ 'libvpx/vp9/common/arm/neon/vp9_iht8x8_add_neon.c',
+ 'libvpx/vp9/common/vp9_alloccommon.c',
+ 'libvpx/vp9/common/vp9_blockd.c',
+ 'libvpx/vp9/common/vp9_common_data.c',
+ 'libvpx/vp9/common/vp9_entropy.c',
+ 'libvpx/vp9/common/vp9_entropymode.c',
+ 'libvpx/vp9/common/vp9_entropymv.c',
+ 'libvpx/vp9/common/vp9_filter.c',
+ 'libvpx/vp9/common/vp9_frame_buffers.c',
+ 'libvpx/vp9/common/vp9_idct.c',
+ 'libvpx/vp9/common/vp9_loopfilter.c',
+ 'libvpx/vp9/common/vp9_mvref_common.c',
+ 'libvpx/vp9/common/vp9_pred_common.c',
+ 'libvpx/vp9/common/vp9_quant_common.c',
+ 'libvpx/vp9/common/vp9_reconinter.c',
+ 'libvpx/vp9/common/vp9_reconintra.c',
+ 'libvpx/vp9/common/vp9_rtcd.c',
+ 'libvpx/vp9/common/vp9_scale.c',
+ 'libvpx/vp9/common/vp9_scan.c',
+ 'libvpx/vp9/common/vp9_seg_common.c',
+ 'libvpx/vp9/common/vp9_thread_common.c',
+ 'libvpx/vp9/common/vp9_tile_common.c',
+ 'libvpx/vp9/decoder/vp9_decodeframe.c',
+ 'libvpx/vp9/decoder/vp9_decodemv.c',
+ 'libvpx/vp9/decoder/vp9_decoder.c',
+ 'libvpx/vp9/decoder/vp9_detokenize.c',
+ 'libvpx/vp9/decoder/vp9_dsubexp.c',
+ 'libvpx/vp9/decoder/vp9_job_queue.c',
+ 'libvpx/vp9/encoder/arm/neon/vp9_dct_neon.c',
+ 'libvpx/vp9/encoder/arm/neon/vp9_diamond_search_sad_neon.c',
+ 'libvpx/vp9/encoder/arm/neon/vp9_error_neon.c',
+ 'libvpx/vp9/encoder/arm/neon/vp9_frame_scale_neon.c',
+ 'libvpx/vp9/encoder/arm/neon/vp9_quantize_neon.c',
+ 'libvpx/vp9/encoder/vp9_aq_cyclicrefresh.c',
+ 'libvpx/vp9/encoder/vp9_bitstream.c',
+ 'libvpx/vp9/encoder/vp9_context_tree.c',
+ 'libvpx/vp9/encoder/vp9_cost.c',
+ 'libvpx/vp9/encoder/vp9_dct.c',
+ 'libvpx/vp9/encoder/vp9_encodeframe.c',
+ 'libvpx/vp9/encoder/vp9_encodemb.c',
+ 'libvpx/vp9/encoder/vp9_encodemv.c',
+ 'libvpx/vp9/encoder/vp9_encoder.c',
+ 'libvpx/vp9/encoder/vp9_ethread.c',
+ 'libvpx/vp9/encoder/vp9_ext_ratectrl.c',
+ 'libvpx/vp9/encoder/vp9_extend.c',
+ 'libvpx/vp9/encoder/vp9_frame_scale.c',
+ 'libvpx/vp9/encoder/vp9_lookahead.c',
+ 'libvpx/vp9/encoder/vp9_mcomp.c',
+ 'libvpx/vp9/encoder/vp9_multi_thread.c',
+ 'libvpx/vp9/encoder/vp9_noise_estimate.c',
+ 'libvpx/vp9/encoder/vp9_picklpf.c',
+ 'libvpx/vp9/encoder/vp9_pickmode.c',
+ 'libvpx/vp9/encoder/vp9_quantize.c',
+ 'libvpx/vp9/encoder/vp9_ratectrl.c',
+ 'libvpx/vp9/encoder/vp9_rd.c',
+ 'libvpx/vp9/encoder/vp9_rdopt.c',
+ 'libvpx/vp9/encoder/vp9_resize.c',
+ 'libvpx/vp9/encoder/vp9_segmentation.c',
+ 'libvpx/vp9/encoder/vp9_skin_detection.c',
+ 'libvpx/vp9/encoder/vp9_speed_features.c',
+ 'libvpx/vp9/encoder/vp9_subexp.c',
+ 'libvpx/vp9/encoder/vp9_svc_layercontext.c',
+ 'libvpx/vp9/encoder/vp9_tokenize.c',
+ 'libvpx/vp9/encoder/vp9_tpl_model.c',
+ 'libvpx/vp9/encoder/vp9_treewriter.c',
+ 'libvpx/vp9/vp9_cx_iface.c',
+ 'libvpx/vp9/vp9_dx_iface.c',
+ 'libvpx/vp9/vp9_iface_common.c',
+ 'libvpx/vpx/src/vpx_codec.c',
+ 'libvpx/vpx/src/vpx_decoder.c',
+ 'libvpx/vpx/src/vpx_encoder.c',
+ 'libvpx/vpx/src/vpx_image.c',
+ 'libvpx/vpx_dsp/arm/avg_neon.c',
+ 'libvpx/vpx_dsp/arm/avg_pred_neon.c',
+ 'libvpx/vpx_dsp/arm/fdct16x16_neon.c',
+ 'libvpx/vpx_dsp/arm/fdct32x32_neon.c',
+ 'libvpx/vpx_dsp/arm/fdct4x4_neon.c',
+ 'libvpx/vpx_dsp/arm/fdct8x8_neon.c',
+ 'libvpx/vpx_dsp/arm/fdct_partial_neon.c',
+ 'libvpx/vpx_dsp/arm/hadamard_neon.c',
+ 'libvpx/vpx_dsp/arm/idct16x16_1_add_neon.c',
+ 'libvpx/vpx_dsp/arm/idct16x16_add_neon.c',
+ 'libvpx/vpx_dsp/arm/idct32x32_135_add_neon.c',
+ 'libvpx/vpx_dsp/arm/idct32x32_1_add_neon.c',
+ 'libvpx/vpx_dsp/arm/idct32x32_34_add_neon.c',
+ 'libvpx/vpx_dsp/arm/idct32x32_add_neon.c',
+ 'libvpx/vpx_dsp/arm/idct4x4_1_add_neon.c',
+ 'libvpx/vpx_dsp/arm/idct4x4_add_neon.c',
+ 'libvpx/vpx_dsp/arm/idct8x8_1_add_neon.c',
+ 'libvpx/vpx_dsp/arm/idct8x8_add_neon.c',
+ 'libvpx/vpx_dsp/arm/intrapred_neon.c',
+ 'libvpx/vpx_dsp/arm/loopfilter_neon.c',
+ 'libvpx/vpx_dsp/arm/quantize_neon.c',
+ 'libvpx/vpx_dsp/arm/sad4d_neon.c',
+ 'libvpx/vpx_dsp/arm/sad4d_neon_dotprod.c',
+ 'libvpx/vpx_dsp/arm/sad_neon.c',
+ 'libvpx/vpx_dsp/arm/sad_neon_dotprod.c',
+ 'libvpx/vpx_dsp/arm/sse_neon.c',
+ 'libvpx/vpx_dsp/arm/sse_neon_dotprod.c',
+ 'libvpx/vpx_dsp/arm/subpel_variance_neon.c',
+ 'libvpx/vpx_dsp/arm/subtract_neon.c',
+ 'libvpx/vpx_dsp/arm/sum_squares_neon.c',
+ 'libvpx/vpx_dsp/arm/variance_neon.c',
+ 'libvpx/vpx_dsp/arm/variance_neon_dotprod.c',
+ 'libvpx/vpx_dsp/arm/vpx_convolve8_neon.c',
+ 'libvpx/vpx_dsp/arm/vpx_convolve8_neon_dotprod.c',
+ 'libvpx/vpx_dsp/arm/vpx_convolve8_neon_i8mm.c',
+ 'libvpx/vpx_dsp/arm/vpx_convolve_avg_neon.c',
+ 'libvpx/vpx_dsp/arm/vpx_convolve_copy_neon.c',
+ 'libvpx/vpx_dsp/arm/vpx_convolve_neon.c',
+ 'libvpx/vpx_dsp/arm/vpx_scaled_convolve8_neon.c',
+ 'libvpx/vpx_dsp/avg.c',
+ 'libvpx/vpx_dsp/bitreader.c',
+ 'libvpx/vpx_dsp/bitreader_buffer.c',
+ 'libvpx/vpx_dsp/bitwriter.c',
+ 'libvpx/vpx_dsp/bitwriter_buffer.c',
+ 'libvpx/vpx_dsp/fwd_txfm.c',
+ 'libvpx/vpx_dsp/intrapred.c',
+ 'libvpx/vpx_dsp/inv_txfm.c',
+ 'libvpx/vpx_dsp/loopfilter.c',
+ 'libvpx/vpx_dsp/prob.c',
+ 'libvpx/vpx_dsp/psnr.c',
+ 'libvpx/vpx_dsp/quantize.c',
+ 'libvpx/vpx_dsp/sad.c',
+ 'libvpx/vpx_dsp/skin_detection.c',
+ 'libvpx/vpx_dsp/sse.c',
+ 'libvpx/vpx_dsp/subtract.c',
+ 'libvpx/vpx_dsp/sum_squares.c',
+ 'libvpx/vpx_dsp/variance.c',
+ 'libvpx/vpx_dsp/vpx_convolve.c',
+ 'libvpx/vpx_dsp/vpx_dsp_rtcd.c',
+ 'libvpx/vpx_mem/vpx_mem.c',
+ 'libvpx/vpx_ports/aarch64_cpudetect.c',
+ 'libvpx/vpx_scale/generic/gen_scalers.c',
+ 'libvpx/vpx_scale/generic/vpx_scale.c',
+ 'libvpx/vpx_scale/generic/yv12config.c',
+ 'libvpx/vpx_scale/generic/yv12extend.c',
+ 'libvpx/vpx_scale/vpx_scale_rtcd.c',
+ 'libvpx/vpx_util/vpx_thread.c',
+ 'libvpx/vpx_util/vpx_write_yuv_frame.c',
+],
+ 'MAC_ARM64_EXPORTS': [
'libvpx/vpx/vp8.h',
'libvpx/vpx/vp8cx.h',
'libvpx/vpx/vp8dx.h',
@@ -826,7 +2168,8 @@ files = {
'libvpx/vpx_scale/vpx_scale.h',
'libvpx/vpx_scale/yv12config.h',
],
- 'ARM64_SOURCES': [
+ 'MAC_ARM64_SOURCES': [
+ 'libvpx/../config/mac/arm64/vpx_config.c',
'libvpx/vp8/common/alloccommon.c',
'libvpx/vp8/common/arm/loopfilter_arm.c',
'libvpx/vp8/common/arm/neon/bilinearpredict_neon.c',
@@ -886,6 +2229,7 @@ files = {
'libvpx/vp8/encoder/encodemb.c',
'libvpx/vp8/encoder/encodemv.c',
'libvpx/vp8/encoder/ethreading.c',
+ 'libvpx/vp8/encoder/firstpass.c',
'libvpx/vp8/encoder/lookahead.c',
'libvpx/vp8/encoder/mcomp.c',
'libvpx/vp8/encoder/modecosts.c',
@@ -896,6 +2240,7 @@ files = {
'libvpx/vp8/encoder/ratectrl.c',
'libvpx/vp8/encoder/rdopt.c',
'libvpx/vp8/encoder/segmentation.c',
+ 'libvpx/vp8/encoder/temporal_filter.c',
'libvpx/vp8/encoder/tokenize.c',
'libvpx/vp8/encoder/treewriter.c',
'libvpx/vp8/encoder/vp8_quantize.c',
@@ -937,7 +2282,12 @@ files = {
'libvpx/vp9/encoder/arm/neon/vp9_error_sve.c',
'libvpx/vp9/encoder/arm/neon/vp9_frame_scale_neon.c',
'libvpx/vp9/encoder/arm/neon/vp9_quantize_neon.c',
+ 'libvpx/vp9/encoder/arm/neon/vp9_temporal_filter_neon.c',
+ 'libvpx/vp9/encoder/vp9_alt_ref_aq.c',
+ 'libvpx/vp9/encoder/vp9_aq_360.c',
+ 'libvpx/vp9/encoder/vp9_aq_complexity.c',
'libvpx/vp9/encoder/vp9_aq_cyclicrefresh.c',
+ 'libvpx/vp9/encoder/vp9_aq_variance.c',
'libvpx/vp9/encoder/vp9_bitstream.c',
'libvpx/vp9/encoder/vp9_context_tree.c',
'libvpx/vp9/encoder/vp9_cost.c',
@@ -949,8 +2299,10 @@ files = {
'libvpx/vp9/encoder/vp9_ethread.c',
'libvpx/vp9/encoder/vp9_ext_ratectrl.c',
'libvpx/vp9/encoder/vp9_extend.c',
+ 'libvpx/vp9/encoder/vp9_firstpass.c',
'libvpx/vp9/encoder/vp9_frame_scale.c',
'libvpx/vp9/encoder/vp9_lookahead.c',
+ 'libvpx/vp9/encoder/vp9_mbgraph.c',
'libvpx/vp9/encoder/vp9_mcomp.c',
'libvpx/vp9/encoder/vp9_multi_thread.c',
'libvpx/vp9/encoder/vp9_noise_estimate.c',
@@ -966,6 +2318,7 @@ files = {
'libvpx/vp9/encoder/vp9_speed_features.c',
'libvpx/vp9/encoder/vp9_subexp.c',
'libvpx/vp9/encoder/vp9_svc_layercontext.c',
+ 'libvpx/vp9/encoder/vp9_temporal_filter.c',
'libvpx/vp9/encoder/vp9_tokenize.c',
'libvpx/vp9/encoder/vp9_tpl_model.c',
'libvpx/vp9/encoder/vp9_treewriter.c',
@@ -976,7 +2329,6 @@ files = {
'libvpx/vpx/src/vpx_decoder.c',
'libvpx/vpx/src/vpx_encoder.c',
'libvpx/vpx/src/vpx_image.c',
- 'libvpx/vpx/src/vpx_tpl.c',
'libvpx/vpx_dsp/arm/avg_neon.c',
'libvpx/vpx_dsp/arm/avg_pred_neon.c',
'libvpx/vpx_dsp/arm/fdct16x16_neon.c',
@@ -1047,6 +2399,250 @@ files = {
'libvpx/vpx_util/vpx_thread.c',
'libvpx/vpx_util/vpx_write_yuv_frame.c',
],
+ 'WIN_AARCH64_EXPORTS': [
+ 'libvpx/vpx/vp8.h',
+ 'libvpx/vpx/vp8cx.h',
+ 'libvpx/vpx/vp8dx.h',
+ 'libvpx/vpx/vpx_codec.h',
+ 'libvpx/vpx/vpx_decoder.h',
+ 'libvpx/vpx/vpx_encoder.h',
+ 'libvpx/vpx/vpx_ext_ratectrl.h',
+ 'libvpx/vpx/vpx_frame_buffer.h',
+ 'libvpx/vpx/vpx_image.h',
+ 'libvpx/vpx/vpx_integer.h',
+ 'libvpx/vpx/vpx_tpl.h',
+ 'libvpx/vpx_mem/include/vpx_mem_intrnl.h',
+ 'libvpx/vpx_mem/vpx_mem.h',
+ 'libvpx/vpx_ports/arm.h',
+ 'libvpx/vpx_ports/arm_cpudetect.h',
+ 'libvpx/vpx_ports/bitops.h',
+ 'libvpx/vpx_ports/compiler_attributes.h',
+ 'libvpx/vpx_ports/mem.h',
+ 'libvpx/vpx_ports/static_assert.h',
+ 'libvpx/vpx_ports/system_state.h',
+ 'libvpx/vpx_ports/vpx_timer.h',
+ 'libvpx/vpx_scale/vpx_scale.h',
+ 'libvpx/vpx_scale/yv12config.h',
+],
+ 'WIN_AARCH64_SOURCES': [
+ 'libvpx/../config/win/aarch64/vpx_config.c',
+ 'libvpx/vp8/common/alloccommon.c',
+ 'libvpx/vp8/common/arm/loopfilter_arm.c',
+ 'libvpx/vp8/common/arm/neon/bilinearpredict_neon.c',
+ 'libvpx/vp8/common/arm/neon/copymem_neon.c',
+ 'libvpx/vp8/common/arm/neon/dc_only_idct_add_neon.c',
+ 'libvpx/vp8/common/arm/neon/dequant_idct_neon.c',
+ 'libvpx/vp8/common/arm/neon/dequantizeb_neon.c',
+ 'libvpx/vp8/common/arm/neon/idct_blk_neon.c',
+ 'libvpx/vp8/common/arm/neon/iwalsh_neon.c',
+ 'libvpx/vp8/common/arm/neon/loopfiltersimplehorizontaledge_neon.c',
+ 'libvpx/vp8/common/arm/neon/loopfiltersimpleverticaledge_neon.c',
+ 'libvpx/vp8/common/arm/neon/mbloopfilter_neon.c',
+ 'libvpx/vp8/common/arm/neon/shortidct4x4llm_neon.c',
+ 'libvpx/vp8/common/arm/neon/sixtappredict_neon.c',
+ 'libvpx/vp8/common/arm/neon/vp8_loopfilter_neon.c',
+ 'libvpx/vp8/common/blockd.c',
+ 'libvpx/vp8/common/dequantize.c',
+ 'libvpx/vp8/common/entropy.c',
+ 'libvpx/vp8/common/entropymode.c',
+ 'libvpx/vp8/common/entropymv.c',
+ 'libvpx/vp8/common/extend.c',
+ 'libvpx/vp8/common/filter.c',
+ 'libvpx/vp8/common/findnearmv.c',
+ 'libvpx/vp8/common/generic/systemdependent.c',
+ 'libvpx/vp8/common/idct_blk.c',
+ 'libvpx/vp8/common/idctllm.c',
+ 'libvpx/vp8/common/loopfilter_filters.c',
+ 'libvpx/vp8/common/mbpitch.c',
+ 'libvpx/vp8/common/modecont.c',
+ 'libvpx/vp8/common/quant_common.c',
+ 'libvpx/vp8/common/reconinter.c',
+ 'libvpx/vp8/common/reconintra.c',
+ 'libvpx/vp8/common/reconintra4x4.c',
+ 'libvpx/vp8/common/rtcd.c',
+ 'libvpx/vp8/common/setupintrarecon.c',
+ 'libvpx/vp8/common/swapyv12buffer.c',
+ 'libvpx/vp8/common/treecoder.c',
+ 'libvpx/vp8/common/vp8_loopfilter.c',
+ 'libvpx/vp8/common/vp8_skin_detection.c',
+ 'libvpx/vp8/decoder/dboolhuff.c',
+ 'libvpx/vp8/decoder/decodeframe.c',
+ 'libvpx/vp8/decoder/decodemv.c',
+ 'libvpx/vp8/decoder/detokenize.c',
+ 'libvpx/vp8/decoder/onyxd_if.c',
+ 'libvpx/vp8/decoder/threading.c',
+ 'libvpx/vp8/encoder/arm/neon/denoising_neon.c',
+ 'libvpx/vp8/encoder/arm/neon/fastquantizeb_neon.c',
+ 'libvpx/vp8/encoder/arm/neon/shortfdct_neon.c',
+ 'libvpx/vp8/encoder/arm/neon/vp8_shortwalsh4x4_neon.c',
+ 'libvpx/vp8/encoder/bitstream.c',
+ 'libvpx/vp8/encoder/boolhuff.c',
+ 'libvpx/vp8/encoder/copy_c.c',
+ 'libvpx/vp8/encoder/dct.c',
+ 'libvpx/vp8/encoder/denoising.c',
+ 'libvpx/vp8/encoder/encodeframe.c',
+ 'libvpx/vp8/encoder/encodeintra.c',
+ 'libvpx/vp8/encoder/encodemb.c',
+ 'libvpx/vp8/encoder/encodemv.c',
+ 'libvpx/vp8/encoder/ethreading.c',
+ 'libvpx/vp8/encoder/lookahead.c',
+ 'libvpx/vp8/encoder/mcomp.c',
+ 'libvpx/vp8/encoder/modecosts.c',
+ 'libvpx/vp8/encoder/mr_dissim.c',
+ 'libvpx/vp8/encoder/onyx_if.c',
+ 'libvpx/vp8/encoder/pickinter.c',
+ 'libvpx/vp8/encoder/picklpf.c',
+ 'libvpx/vp8/encoder/ratectrl.c',
+ 'libvpx/vp8/encoder/rdopt.c',
+ 'libvpx/vp8/encoder/segmentation.c',
+ 'libvpx/vp8/encoder/tokenize.c',
+ 'libvpx/vp8/encoder/treewriter.c',
+ 'libvpx/vp8/encoder/vp8_quantize.c',
+ 'libvpx/vp8/vp8_cx_iface.c',
+ 'libvpx/vp8/vp8_dx_iface.c',
+ 'libvpx/vp9/common/arm/neon/vp9_iht16x16_add_neon.c',
+ 'libvpx/vp9/common/arm/neon/vp9_iht4x4_add_neon.c',
+ 'libvpx/vp9/common/arm/neon/vp9_iht8x8_add_neon.c',
+ 'libvpx/vp9/common/vp9_alloccommon.c',
+ 'libvpx/vp9/common/vp9_blockd.c',
+ 'libvpx/vp9/common/vp9_common_data.c',
+ 'libvpx/vp9/common/vp9_entropy.c',
+ 'libvpx/vp9/common/vp9_entropymode.c',
+ 'libvpx/vp9/common/vp9_entropymv.c',
+ 'libvpx/vp9/common/vp9_filter.c',
+ 'libvpx/vp9/common/vp9_frame_buffers.c',
+ 'libvpx/vp9/common/vp9_idct.c',
+ 'libvpx/vp9/common/vp9_loopfilter.c',
+ 'libvpx/vp9/common/vp9_mvref_common.c',
+ 'libvpx/vp9/common/vp9_pred_common.c',
+ 'libvpx/vp9/common/vp9_quant_common.c',
+ 'libvpx/vp9/common/vp9_reconinter.c',
+ 'libvpx/vp9/common/vp9_reconintra.c',
+ 'libvpx/vp9/common/vp9_rtcd.c',
+ 'libvpx/vp9/common/vp9_scale.c',
+ 'libvpx/vp9/common/vp9_scan.c',
+ 'libvpx/vp9/common/vp9_seg_common.c',
+ 'libvpx/vp9/common/vp9_thread_common.c',
+ 'libvpx/vp9/common/vp9_tile_common.c',
+ 'libvpx/vp9/decoder/vp9_decodeframe.c',
+ 'libvpx/vp9/decoder/vp9_decodemv.c',
+ 'libvpx/vp9/decoder/vp9_decoder.c',
+ 'libvpx/vp9/decoder/vp9_detokenize.c',
+ 'libvpx/vp9/decoder/vp9_dsubexp.c',
+ 'libvpx/vp9/decoder/vp9_job_queue.c',
+ 'libvpx/vp9/encoder/arm/neon/vp9_dct_neon.c',
+ 'libvpx/vp9/encoder/arm/neon/vp9_diamond_search_sad_neon.c',
+ 'libvpx/vp9/encoder/arm/neon/vp9_error_neon.c',
+ 'libvpx/vp9/encoder/arm/neon/vp9_frame_scale_neon.c',
+ 'libvpx/vp9/encoder/arm/neon/vp9_quantize_neon.c',
+ 'libvpx/vp9/encoder/vp9_aq_cyclicrefresh.c',
+ 'libvpx/vp9/encoder/vp9_bitstream.c',
+ 'libvpx/vp9/encoder/vp9_context_tree.c',
+ 'libvpx/vp9/encoder/vp9_cost.c',
+ 'libvpx/vp9/encoder/vp9_dct.c',
+ 'libvpx/vp9/encoder/vp9_encodeframe.c',
+ 'libvpx/vp9/encoder/vp9_encodemb.c',
+ 'libvpx/vp9/encoder/vp9_encodemv.c',
+ 'libvpx/vp9/encoder/vp9_encoder.c',
+ 'libvpx/vp9/encoder/vp9_ethread.c',
+ 'libvpx/vp9/encoder/vp9_ext_ratectrl.c',
+ 'libvpx/vp9/encoder/vp9_extend.c',
+ 'libvpx/vp9/encoder/vp9_frame_scale.c',
+ 'libvpx/vp9/encoder/vp9_lookahead.c',
+ 'libvpx/vp9/encoder/vp9_mcomp.c',
+ 'libvpx/vp9/encoder/vp9_multi_thread.c',
+ 'libvpx/vp9/encoder/vp9_noise_estimate.c',
+ 'libvpx/vp9/encoder/vp9_picklpf.c',
+ 'libvpx/vp9/encoder/vp9_pickmode.c',
+ 'libvpx/vp9/encoder/vp9_quantize.c',
+ 'libvpx/vp9/encoder/vp9_ratectrl.c',
+ 'libvpx/vp9/encoder/vp9_rd.c',
+ 'libvpx/vp9/encoder/vp9_rdopt.c',
+ 'libvpx/vp9/encoder/vp9_resize.c',
+ 'libvpx/vp9/encoder/vp9_segmentation.c',
+ 'libvpx/vp9/encoder/vp9_skin_detection.c',
+ 'libvpx/vp9/encoder/vp9_speed_features.c',
+ 'libvpx/vp9/encoder/vp9_subexp.c',
+ 'libvpx/vp9/encoder/vp9_svc_layercontext.c',
+ 'libvpx/vp9/encoder/vp9_tokenize.c',
+ 'libvpx/vp9/encoder/vp9_tpl_model.c',
+ 'libvpx/vp9/encoder/vp9_treewriter.c',
+ 'libvpx/vp9/vp9_cx_iface.c',
+ 'libvpx/vp9/vp9_dx_iface.c',
+ 'libvpx/vp9/vp9_iface_common.c',
+ 'libvpx/vpx/src/vpx_codec.c',
+ 'libvpx/vpx/src/vpx_decoder.c',
+ 'libvpx/vpx/src/vpx_encoder.c',
+ 'libvpx/vpx/src/vpx_image.c',
+ 'libvpx/vpx_dsp/arm/avg_neon.c',
+ 'libvpx/vpx_dsp/arm/avg_pred_neon.c',
+ 'libvpx/vpx_dsp/arm/fdct16x16_neon.c',
+ 'libvpx/vpx_dsp/arm/fdct32x32_neon.c',
+ 'libvpx/vpx_dsp/arm/fdct4x4_neon.c',
+ 'libvpx/vpx_dsp/arm/fdct8x8_neon.c',
+ 'libvpx/vpx_dsp/arm/fdct_partial_neon.c',
+ 'libvpx/vpx_dsp/arm/hadamard_neon.c',
+ 'libvpx/vpx_dsp/arm/idct16x16_1_add_neon.c',
+ 'libvpx/vpx_dsp/arm/idct16x16_add_neon.c',
+ 'libvpx/vpx_dsp/arm/idct32x32_135_add_neon.c',
+ 'libvpx/vpx_dsp/arm/idct32x32_1_add_neon.c',
+ 'libvpx/vpx_dsp/arm/idct32x32_34_add_neon.c',
+ 'libvpx/vpx_dsp/arm/idct32x32_add_neon.c',
+ 'libvpx/vpx_dsp/arm/idct4x4_1_add_neon.c',
+ 'libvpx/vpx_dsp/arm/idct4x4_add_neon.c',
+ 'libvpx/vpx_dsp/arm/idct8x8_1_add_neon.c',
+ 'libvpx/vpx_dsp/arm/idct8x8_add_neon.c',
+ 'libvpx/vpx_dsp/arm/intrapred_neon.c',
+ 'libvpx/vpx_dsp/arm/loopfilter_neon.c',
+ 'libvpx/vpx_dsp/arm/quantize_neon.c',
+ 'libvpx/vpx_dsp/arm/sad4d_neon.c',
+ 'libvpx/vpx_dsp/arm/sad4d_neon_dotprod.c',
+ 'libvpx/vpx_dsp/arm/sad_neon.c',
+ 'libvpx/vpx_dsp/arm/sad_neon_dotprod.c',
+ 'libvpx/vpx_dsp/arm/sse_neon.c',
+ 'libvpx/vpx_dsp/arm/sse_neon_dotprod.c',
+ 'libvpx/vpx_dsp/arm/subpel_variance_neon.c',
+ 'libvpx/vpx_dsp/arm/subtract_neon.c',
+ 'libvpx/vpx_dsp/arm/sum_squares_neon.c',
+ 'libvpx/vpx_dsp/arm/variance_neon.c',
+ 'libvpx/vpx_dsp/arm/variance_neon_dotprod.c',
+ 'libvpx/vpx_dsp/arm/vpx_convolve8_neon.c',
+ 'libvpx/vpx_dsp/arm/vpx_convolve8_neon_dotprod.c',
+ 'libvpx/vpx_dsp/arm/vpx_convolve8_neon_i8mm.c',
+ 'libvpx/vpx_dsp/arm/vpx_convolve_avg_neon.c',
+ 'libvpx/vpx_dsp/arm/vpx_convolve_copy_neon.c',
+ 'libvpx/vpx_dsp/arm/vpx_convolve_neon.c',
+ 'libvpx/vpx_dsp/arm/vpx_scaled_convolve8_neon.c',
+ 'libvpx/vpx_dsp/avg.c',
+ 'libvpx/vpx_dsp/bitreader.c',
+ 'libvpx/vpx_dsp/bitreader_buffer.c',
+ 'libvpx/vpx_dsp/bitwriter.c',
+ 'libvpx/vpx_dsp/bitwriter_buffer.c',
+ 'libvpx/vpx_dsp/fwd_txfm.c',
+ 'libvpx/vpx_dsp/intrapred.c',
+ 'libvpx/vpx_dsp/inv_txfm.c',
+ 'libvpx/vpx_dsp/loopfilter.c',
+ 'libvpx/vpx_dsp/prob.c',
+ 'libvpx/vpx_dsp/psnr.c',
+ 'libvpx/vpx_dsp/quantize.c',
+ 'libvpx/vpx_dsp/sad.c',
+ 'libvpx/vpx_dsp/skin_detection.c',
+ 'libvpx/vpx_dsp/sse.c',
+ 'libvpx/vpx_dsp/subtract.c',
+ 'libvpx/vpx_dsp/sum_squares.c',
+ 'libvpx/vpx_dsp/variance.c',
+ 'libvpx/vpx_dsp/vpx_convolve.c',
+ 'libvpx/vpx_dsp/vpx_dsp_rtcd.c',
+ 'libvpx/vpx_mem/vpx_mem.c',
+ 'libvpx/vpx_ports/aarch64_cpudetect.c',
+ 'libvpx/vpx_scale/generic/gen_scalers.c',
+ 'libvpx/vpx_scale/generic/vpx_scale.c',
+ 'libvpx/vpx_scale/generic/yv12config.c',
+ 'libvpx/vpx_scale/generic/yv12extend.c',
+ 'libvpx/vpx_scale/vpx_scale_rtcd.c',
+ 'libvpx/vpx_util/vpx_thread.c',
+ 'libvpx/vpx_util/vpx_write_yuv_frame.c',
+],
'GENERIC_EXPORTS': [
'libvpx/vpx/vp8.h',
'libvpx/vpx/vp8cx.h',
@@ -1071,6 +2667,7 @@ files = {
'libvpx/vpx_scale/yv12config.h',
],
'GENERIC_SOURCES': [
+ 'libvpx/../config/generic/vpx_config.c',
'libvpx/vp8/common/alloccommon.c',
'libvpx/vp8/common/blockd.c',
'libvpx/vp8/common/dequantize.c',
@@ -1202,7 +2799,6 @@ files = {
'libvpx/vpx/src/vpx_decoder.c',
'libvpx/vpx/src/vpx_encoder.c',
'libvpx/vpx/src/vpx_image.c',
- 'libvpx/vpx/src/vpx_tpl.c',
'libvpx/vpx_dsp/avg.c',
'libvpx/vpx_dsp/bitreader.c',
'libvpx/vpx_dsp/bitreader_buffer.c',