michael@0: /******************************************************************** michael@0: * * michael@0: * THIS FILE IS PART OF THE OggTheora SOFTWARE CODEC SOURCE CODE. * michael@0: * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * michael@0: * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * michael@0: * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * michael@0: * * michael@0: * THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2010 * michael@0: * by the Xiph.Org Foundation and contributors http://www.xiph.org/ * michael@0: * * michael@0: ******************************************************************** michael@0: michael@0: function: michael@0: last mod: $Id: x86int.h 17344 2010-07-21 01:42:18Z tterribe $ michael@0: michael@0: ********************************************************************/ michael@0: #if !defined(_arm_armint_H) michael@0: # define _arm_armint_H (1) michael@0: # include "../internal.h" michael@0: michael@0: # if defined(OC_ARM_ASM) michael@0: michael@0: # if defined(__ARMEB__) michael@0: # error "Big-endian configurations are not supported by the ARM asm. " \ michael@0: "Reconfigure with --disable-asm or undefine OC_ARM_ASM." michael@0: # endif michael@0: michael@0: # define oc_state_accel_init oc_state_accel_init_arm michael@0: /*This function is implemented entirely in asm, so it's helpful to pull out all michael@0: of the things that depend on structure offsets. michael@0: We reuse the function pointer with the wrong prototype, though.*/ michael@0: # define oc_state_loop_filter_frag_rows(_state,_bv,_refi,_pli, \ michael@0: _fragy0,_fragy_end) \ michael@0: ((oc_loop_filter_frag_rows_arm_func) \ michael@0: (_state)->opt_vtable.state_loop_filter_frag_rows)( \ michael@0: (_state)->ref_frame_data[(_refi)],(_state)->ref_ystride[(_pli)], \ michael@0: (_bv), \ michael@0: (_state)->frags, \ michael@0: (_state)->fplanes[(_pli)].froffset \ michael@0: +(_fragy0)*(ptrdiff_t)(_state)->fplanes[(_pli)].nhfrags, \ michael@0: (_state)->fplanes[(_pli)].froffset \ michael@0: +(_fragy_end)*(ptrdiff_t)(_state)->fplanes[(_pli)].nhfrags, \ michael@0: (_state)->fplanes[(_pli)].froffset, \ michael@0: (_state)->fplanes[(_pli)].froffset+(_state)->fplanes[(_pli)].nfrags, \ michael@0: (_state)->frag_buf_offs, \ michael@0: (_state)->fplanes[(_pli)].nhfrags) michael@0: /*For everything else the default vtable macros are fine.*/ michael@0: # define OC_STATE_USE_VTABLE (1) michael@0: # endif michael@0: michael@0: # include "../state.h" michael@0: # include "armcpu.h" michael@0: michael@0: # if defined(OC_ARM_ASM) michael@0: typedef void (*oc_loop_filter_frag_rows_arm_func)( michael@0: unsigned char *_ref_frame_data,int _ystride,signed char _bv[256], michael@0: const oc_fragment *_frags,ptrdiff_t _fragi0,ptrdiff_t _fragi0_end, michael@0: ptrdiff_t _fragi_top,ptrdiff_t _fragi_bot, michael@0: const ptrdiff_t *_frag_buf_offs,int _nhfrags); michael@0: michael@0: void oc_state_accel_init_arm(oc_theora_state *_state); michael@0: void oc_frag_copy_list_arm(unsigned char *_dst_frame, michael@0: const unsigned char *_src_frame,int _ystride, michael@0: const ptrdiff_t *_fragis,ptrdiff_t _nfragis,const ptrdiff_t *_frag_buf_offs); michael@0: void oc_frag_recon_intra_arm(unsigned char *_dst,int _ystride, michael@0: const ogg_int16_t *_residue); michael@0: void oc_frag_recon_inter_arm(unsigned char *_dst,const unsigned char *_src, michael@0: int _ystride,const ogg_int16_t *_residue); michael@0: void oc_frag_recon_inter2_arm(unsigned char *_dst,const unsigned char *_src1, michael@0: const unsigned char *_src2,int _ystride,const ogg_int16_t *_residue); michael@0: void oc_idct8x8_1_arm(ogg_int16_t _y[64],ogg_uint16_t _dc); michael@0: void oc_idct8x8_arm(ogg_int16_t _y[64],ogg_int16_t _x[64],int _last_zzi); michael@0: void oc_state_frag_recon_arm(const oc_theora_state *_state,ptrdiff_t _fragi, michael@0: int _pli,ogg_int16_t _dct_coeffs[128],int _last_zzi,ogg_uint16_t _dc_quant); michael@0: void oc_loop_filter_frag_rows_arm(unsigned char *_ref_frame_data, michael@0: int _ystride,signed char *_bv,const oc_fragment *_frags,ptrdiff_t _fragi0, michael@0: ptrdiff_t _fragi0_end,ptrdiff_t _fragi_top,ptrdiff_t _fragi_bot, michael@0: const ptrdiff_t *_frag_buf_offs,int _nhfrags); michael@0: michael@0: # if defined(OC_ARM_ASM_EDSP) michael@0: void oc_frag_copy_list_edsp(unsigned char *_dst_frame, michael@0: const unsigned char *_src_frame,int _ystride, michael@0: const ptrdiff_t *_fragis,ptrdiff_t _nfragis,const ptrdiff_t *_frag_buf_offs); michael@0: michael@0: # if defined(OC_ARM_ASM_MEDIA) michael@0: void oc_frag_recon_intra_v6(unsigned char *_dst,int _ystride, michael@0: const ogg_int16_t *_residue); michael@0: void oc_frag_recon_inter_v6(unsigned char *_dst,const unsigned char *_src, michael@0: int _ystride,const ogg_int16_t *_residue); michael@0: void oc_frag_recon_inter2_v6(unsigned char *_dst,const unsigned char *_src1, michael@0: const unsigned char *_src2,int _ystride,const ogg_int16_t *_residue); michael@0: void oc_idct8x8_1_v6(ogg_int16_t _y[64],ogg_uint16_t _dc); michael@0: void oc_idct8x8_v6(ogg_int16_t _y[64],ogg_int16_t _x[64],int _last_zzi); michael@0: void oc_state_frag_recon_v6(const oc_theora_state *_state,ptrdiff_t _fragi, michael@0: int _pli,ogg_int16_t _dct_coeffs[128],int _last_zzi,ogg_uint16_t _dc_quant); michael@0: void oc_loop_filter_init_v6(signed char *_bv,int _flimit); michael@0: void oc_loop_filter_frag_rows_v6(unsigned char *_ref_frame_data, michael@0: int _ystride,signed char *_bv,const oc_fragment *_frags,ptrdiff_t _fragi0, michael@0: ptrdiff_t _fragi0_end,ptrdiff_t _fragi_top,ptrdiff_t _fragi_bot, michael@0: const ptrdiff_t *_frag_buf_offs,int _nhfrags); michael@0: michael@0: # if defined(OC_ARM_ASM_NEON) michael@0: void oc_frag_copy_list_neon(unsigned char *_dst_frame, michael@0: const unsigned char *_src_frame,int _ystride, michael@0: const ptrdiff_t *_fragis,ptrdiff_t _nfragis,const ptrdiff_t *_frag_buf_offs); michael@0: void oc_frag_recon_intra_neon(unsigned char *_dst,int _ystride, michael@0: const ogg_int16_t *_residue); michael@0: void oc_frag_recon_inter_neon(unsigned char *_dst,const unsigned char *_src, michael@0: int _ystride,const ogg_int16_t *_residue); michael@0: void oc_frag_recon_inter2_neon(unsigned char *_dst,const unsigned char *_src1, michael@0: const unsigned char *_src2,int _ystride,const ogg_int16_t *_residue); michael@0: void oc_idct8x8_1_neon(ogg_int16_t _y[64],ogg_uint16_t _dc); michael@0: void oc_idct8x8_neon(ogg_int16_t _y[64],ogg_int16_t _x[64],int _last_zzi); michael@0: void oc_state_frag_recon_neon(const oc_theora_state *_state,ptrdiff_t _fragi, michael@0: int _pli,ogg_int16_t _dct_coeffs[128],int _last_zzi,ogg_uint16_t _dc_quant); michael@0: void oc_loop_filter_init_neon(signed char *_bv,int _flimit); michael@0: void oc_loop_filter_frag_rows_neon(unsigned char *_ref_frame_data, michael@0: int _ystride,signed char *_bv,const oc_fragment *_frags,ptrdiff_t _fragi0, michael@0: ptrdiff_t _fragi0_end,ptrdiff_t _fragi_top,ptrdiff_t _fragi_bot, michael@0: const ptrdiff_t *_frag_buf_offs,int _nhfrags); michael@0: # endif michael@0: # endif michael@0: # endif michael@0: # endif michael@0: michael@0: #endif