From 47fdbb9d840edc146b126dedaa6521334e653c26 Mon Sep 17 00:00:00 2001 From: Bernhard Rosenkraenzer Date: Sat, 26 Nov 2011 03:09:22 +0059 Subject: libvpx: Build the encoder Build the encoder into libvpx so ffmpeg can use it Signed-off-by: Bernhard Rosenkraenzer --- Android.mk | 58 +++++++++++++++++++++++++++++++++++++++++++++++++- asm_com_offsets.asm | 14 ++++++++++++ asm_enc_offsets.asm | 46 +++++++++++++++++++++++++++++++++++++++ vp8/encoder/variance.h | 1 + vpx_config.h | 42 +++++++++++++++++++----------------- 5 files changed, 140 insertions(+), 21 deletions(-) create mode 100644 asm_com_offsets.asm create mode 100644 asm_enc_offsets.asm diff --git a/Android.mk b/Android.mk index 4e8c2b1ab..28b543053 100644 --- a/Android.mk +++ b/Android.mk @@ -5,6 +5,7 @@ LOCAL_SRC_FILES = \ mkvparser/mkvparser.cpp \ vpx/src/vpx_codec.c \ vpx/src/vpx_decoder.c \ + vpx/src/vpx_encoder.c \ vpx/src/vpx_image.c \ vpx_mem/vpx_mem.c \ vpx_scale/generic/vpxscale.c \ @@ -53,8 +54,41 @@ LOCAL_SRC_FILES = \ vp8/decoder/onyxd_if.c \ vp8/decoder/reconintra_mt.c \ vp8/decoder/threading.c \ + vp8/encoder/asm_enc_offsets.c \ + vp8/encoder/bitstream.c \ + vp8/encoder/boolhuff.c \ + vp8/encoder/dct.c \ + vp8/encoder/encodeframe.c \ + vp8/encoder/encodeintra.c \ + vp8/encoder/encodemb.c \ + vp8/encoder/encodemv.c \ + vp8/encoder/ethreading.c \ + vp8/encoder/firstpass.c \ + vp8/encoder/mcomp.c \ + vp8/encoder/modecosts.c \ + vp8/encoder/onyx_if.c \ + vp8/encoder/parms.cpp \ + vp8/encoder/pickinter.c \ + vp8/encoder/picklpf.c \ + vp8/encoder/psnr.c \ + vp8/encoder/quantize.c \ + vp8/encoder/ratectrl.c \ + vp8/encoder/rdopt.c \ + vp8/encoder/sad_c.c \ + vp8/encoder/segmentation.c \ + vp8/encoder/temporal_filter.c \ + vp8/encoder/tokenize.c \ + vp8/encoder/treewriter.c \ + vp8/encoder/variance_c.c \ + vp8/encoder/generic/csystemdependent.c \ + vp8/encoder/arm/arm_csystemdependent.c \ + vp8/encoder/arm/dct_arm.c \ + vp8/encoder/arm/picklpf_arm.c \ + vp8/encoder/arm/quantize_arm.c \ + vp8/encoder/arm/variance_arm.c \ vpx_config.c \ - vp8/decoder/arm/neon/idct_blk_neon.c + vp8/decoder/arm/neon/idct_blk_neon.c \ + vp8/decoder/idct_blk.c LOCAL_CFLAGS := \ -DHAVE_CONFIG_H=vpx_config.h @@ -68,7 +102,9 @@ intermediates := $(call local-intermediates-dir) LOCAL_SRC_FILES += \ vp8/common/arm/loopfilter_arm.c \ + vp8/common/arm/neon/recon_neon.c \ vp8/decoder/arm/dequantize_arm.c \ + vpx_ports/arm_cpudetect.c ifeq ($(ARCH_ARM_HAVE_NEON),true) @@ -104,8 +140,25 @@ ASM_FILES = \ vp8/decoder/arm/neon/idct_dequant_dc_0_2x_neon.s \ vp8/decoder/arm/neon/idct_dequant_dc_full_2x_neon.s \ vp8/decoder/arm/neon/idct_dequant_full_2x_neon.s \ + vp8/encoder/arm/neon/fastfdct4x4_neon.s \ + vp8/encoder/arm/neon/shortfdct_neon.s \ + vp8/encoder/arm/neon/vp8_shortwalsh4x4_neon.s \ + vp8/encoder/arm/neon/fastfdct8x4_neon.s \ + vp8/encoder/arm/neon/subtract_neon.s \ + vp8/encoder/arm/neon/vp8_subpixelvariance16x16_neon.s \ + vp8/encoder/arm/neon/fastquantizeb_neon.s \ + vp8/encoder/arm/neon/variance_neon.s \ + vp8/encoder/arm/neon/vp8_subpixelvariance16x16s_neon.s \ + vp8/encoder/arm/neon/sad16_neon.s \ + vp8/encoder/arm/neon/vp8_memcpy_neon.s \ + vp8/encoder/arm/neon/vp8_subpixelvariance8x8_neon.s \ + vp8/encoder/arm/neon/sad8_neon.s \ + vp8/encoder/arm/neon/vp8_mse16x16_neon.s \ vp8/common/arm/neon/loopfilter_neon.s \ vp8/common/arm/neon/mbloopfilter_neon.s \ + vpx_scale/arm/neon/vp8_vpxyv12_copyframeyonly_neon.s \ + vpx_scale/arm/neon/vp8_vpxyv12_copysrcframe_func_neon.s \ + vpx_scale/arm/neon/vp8_vpxyv12_extendframeborders_neon.s \ else ifeq ($(ARCH_ARM_HAVE_ARMV7A),true) @@ -147,6 +200,9 @@ $(VPX_GEN) : PRIVATE_PATH := $(LOCAL_PATH) $(VPX_GEN) : PRIVATE_CUSTOM_TOOL = cat $< | perl external/libvpx/build/make/ads2gas.pl > $@ $(VPX_GEN) : $(intermediates)/%.s : $(LOCAL_PATH)/%.asm $(transform-generated-source) +$(intermediates)/encoder/arm/neon/subtract_neon.s : $(intermediates)/asm_enc_offsets.asm +$(intermediates)/encoder/arm/neon/fastquantizeb_neon.s : $(intermediates)/asm_enc_offsets.asm +$(intermediates)/asm_enc_offsets.asm : external/libvpx/asm_enc_offsets.asm LOCAL_GENERATED_SOURCES += $(VPX_GEN) diff --git a/asm_com_offsets.asm b/asm_com_offsets.asm new file mode 100644 index 000000000..2b5be63af --- /dev/null +++ b/asm_com_offsets.asm @@ -0,0 +1,14 @@ +@ This file was created from a .asm file +@ using the ads2gas.pl script. + .equ DO1STROUNDING, 0 +.equ yv12_buffer_config_y_width , 0 +.equ yv12_buffer_config_y_height , 4 +.equ yv12_buffer_config_y_stride , 8 +.equ yv12_buffer_config_uv_width , 12 +.equ yv12_buffer_config_uv_height , 16 +.equ yv12_buffer_config_uv_stride , 20 +.equ yv12_buffer_config_y_buffer , 24 +.equ yv12_buffer_config_u_buffer , 28 +.equ yv12_buffer_config_v_buffer , 32 +.equ yv12_buffer_config_border , 40 + .section .note.GNU-stack,"",%progbits diff --git a/asm_enc_offsets.asm b/asm_enc_offsets.asm new file mode 100644 index 000000000..0e1816981 --- /dev/null +++ b/asm_enc_offsets.asm @@ -0,0 +1,46 @@ +@ This file was created from a .asm file +@ using the ads2gas.pl script. + .equ DO1STROUNDING, 0 +.equ vp8_block_coeff , 4 +.equ vp8_block_zbin , 20 +.equ vp8_block_round , 28 +.equ vp8_block_quant , 8 +.equ vp8_block_quant_fast , 12 +.equ vp8_block_zbin_extra , 32 +.equ vp8_block_zrun_zbin_boost , 24 +.equ vp8_block_quant_shift , 16 +.equ vp8_blockd_qcoeff , 0 +.equ vp8_blockd_dequant , 16 +.equ vp8_blockd_dqcoeff , 4 +.equ vp8_blockd_eob , 44 +.equ vp8_block_base_src , 36 +.equ vp8_block_src , 40 +.equ vp8_block_src_diff , 0 +.equ vp8_block_src_stride , 44 +.equ vp8_blockd_predictor , 8 +.equ vp8_writer_lowvalue , 0 +.equ vp8_writer_range , 4 +.equ vp8_writer_value , 8 +.equ vp8_writer_count , 12 +.equ vp8_writer_pos , 16 +.equ vp8_writer_buffer , 20 +.equ tokenextra_token , 6 +.equ tokenextra_extra , 4 +.equ tokenextra_context_tree , 0 +.equ tokenextra_skip_eob_node , 7 +.equ TOKENEXTRA_SZ , 8 +.equ vp8_extra_bit_struct_sz , 16 +.equ vp8_token_value , 0 +.equ vp8_token_len , 4 +.equ vp8_extra_bit_struct_tree , 0 +.equ vp8_extra_bit_struct_prob , 4 +.equ vp8_extra_bit_struct_len , 8 +.equ vp8_extra_bit_struct_base_val , 12 +.equ vp8_comp_tplist , 180568 +.equ vp8_comp_common , 104640 +.equ vp8_comp_bc2 , 127712 +.equ tokenlist_start , 0 +.equ tokenlist_stop , 4 +.equ TOKENLIST_SZ , 8 +.equ vp8_common_mb_rows , 12984 + .section .note.GNU-stack,"",%progbits diff --git a/vp8/encoder/variance.h b/vp8/encoder/variance.h index bf17ea8b6..f373937f4 100644 --- a/vp8/encoder/variance.h +++ b/vp8/encoder/variance.h @@ -11,6 +11,7 @@ #ifndef VARIANCE_H #define VARIANCE_H +#include #define prototype_sad(sym)\ unsigned int (sym)\ diff --git a/vpx_config.h b/vpx_config.h index 598d21568..d93e2f34d 100644 --- a/vpx_config.h +++ b/vpx_config.h @@ -3,31 +3,26 @@ #define FORCEINLINE #define RESTRICT +#undef ARCH_ARM // On Android, ARCH_ARM is defined to nothing in AndroidConfig.h - get rid of that #if defined(__arm__) - #define ARCH_ARM 1 -#define HAVE_ARMV5TE 0 #else #define ARCH_ARM 0 #endif -#if defined(__ARM_HAVE_NEON) -#define HAVE_ARMV7 1 -#else -#define HAVE_ARMV7 0 -#endif - -#if defined(__ARM_HAVE_ARMV6) -#define HAVE_ARMV6 1 -#else -#define HAVE_ARMV6 0 -#endif - #define ARCH_MIPS 0 #define ARCH_X86 0 #define ARCH_X86_64 0 #define ARCH_PPC32 0 #define ARCH_PPC64 0 +#define HAVE_ARMV5TE 0 +#define HAVE_ARMV6 0 + +#if defined(__ARM_HAVE_NEON) +#define HAVE_ARMV7 1 +#else +#define HAVE_ARMV7 0 +#endif #define HAVE_IWMMXT 0 #define HAVE_IWMMXT2 0 @@ -37,12 +32,14 @@ #define HAVE_SSE2 0 #define HAVE_SSE3 0 #define HAVE_SSSE3 0 +#define HAVE_SSE4_1 0 #define HAVE_ALTIVEC 0 #define HAVE_VPX_PORTS 1 #define HAVE_STDINT_H 1 #define HAVE_ALT_TREE_LAYOUT 0 #define HAVE_PTHREAD_H 1 #define HAVE_SYS_MMAN_H 1 +#define HAVE_UNISTD_H 1 #define CONFIG_EXTERNAL_BUILD 0 #define CONFIG_INSTALL_DOCS 0 #define CONFIG_INSTALL_BINS 1 @@ -65,14 +62,13 @@ #define CONFIG_MD5 1 #define CONFIG_DEQUANT_TOKENS 0 #define CONFIG_DC_RECON 0 -#define CONFIG_NEW_TOKENS 0 -#define CONFIG_EVAL_LIMIT 0 -#define CONFIG_RUNTIME_CPU_DETECT 0 -#define CONFIG_POSTPROC 0 -#define CONFIG_POSTPROC_GENERIC 0 -#define CONFIG_OS_SUPPORT 1 +#define CONFIG_RUNTIME_CPU_DETECT 1 +#define CONFIG_POSTPROC 1 +/* FIXME if we want to be really smart, set + CONFIG_MULTITHREAD to 0 if TARGET_CPU_SMP is false */ #define CONFIG_MULTITHREAD 1 #define CONFIG_PSNR 0 +#define CONFIG_INTERNAL_STATS 0 #define CONFIG_VP8_ENCODER 1 #define CONFIG_VP8_DECODER 1 #define CONFIG_VP8 1 @@ -81,3 +77,9 @@ #define CONFIG_STATIC_MSVCRT 0 #define CONFIG_SPATIAL_RESAMPLING 1 #define CONFIG_REALTIME_ONLY 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 -- cgit v1.2.3