X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Fdsputil.h;h=273069c1e8732c47e1b15bf9eb429b6f638267c7;hb=a0c013de34964a24871ed601e36f486c271aa149;hp=63e1c474a973854d05178041c70792bed67f1f07;hpb=43c7c7c7cfd5c176cef71ea7c1733e7bfa69787c;p=ffmpeg diff --git a/libavcodec/dsputil.h b/libavcodec/dsputil.h index 63e1c474a97..273069c1e87 100644 --- a/libavcodec/dsputil.h +++ b/libavcodec/dsputil.h @@ -27,8 +27,8 @@ * absolutely necessary to call emms_c() between dsp & float/double code */ -#ifndef DSPUTIL_H -#define DSPUTIL_H +#ifndef FFMPEG_DSPUTIL_H +#define FFMPEG_DSPUTIL_H #include "avcodec.h" @@ -37,6 +37,7 @@ /* dct code */ typedef short DCTELEM; typedef int DWTELEM; +typedef short IDWTELEM; void fdct_ifast (DCTELEM *data); void fdct_ifast248 (DCTELEM *data); @@ -47,6 +48,7 @@ void j_rev_dct (DCTELEM *data); void j_rev_dct4 (DCTELEM *data); void j_rev_dct2 (DCTELEM *data); void j_rev_dct1 (DCTELEM *data); +void ff_wmv2_idct_c(DCTELEM *data); void ff_fdct_mmx(DCTELEM *block); void ff_fdct_mmx2(DCTELEM *block); @@ -144,7 +146,7 @@ static void a(uint8_t *block, const uint8_t *pixels, int line_size, int h){\ /* motion estimation */ // h is limited to {width/2, width, 2*width} but never larger than 16 and never smaller then 2 -// allthough currently h<4 is not used as functions with width <8 are not used and neither implemented +// although currently h<4 is not used as functions with width <8 are neither used nor implemented typedef int (*me_cmp_func)(void /*MpegEncContext*/ *s, uint8_t *blk1/*align width (8 or 16)*/, uint8_t *blk2/*align 1*/, int line_size, int h)/* __attribute__ ((const))*/; @@ -200,7 +202,8 @@ typedef struct DSPContext { me_cmp_func ildct_cmp[5]; //only width 16 used me_cmp_func frame_skip_cmp[5]; //only width 8 used - int (*ssd_int8_vs_int16)(int8_t *pix1, int16_t *pix2, int size); + int (*ssd_int8_vs_int16)(const int8_t *pix1, const int16_t *pix2, + int size); /** * Halfpel motion compensation with rounding (a+b+1)>>1. @@ -324,8 +327,13 @@ typedef struct DSPContext { void (*h261_loop_filter)(uint8_t *src, int stride); + void (*x8_v_loop_filter)(uint8_t *src, int stride, int qscale); + void (*x8_h_loop_filter)(uint8_t *src, int stride, int qscale); + /* assume len is a multiple of 4, and arrays are 16-byte aligned */ void (*vorbis_inverse_coupling)(float *mag, float *ang, int blocksize); + /* no alignment needed */ + void (*flac_compute_autocorr)(const int32_t *data, int len, int lag, double *autoc); /* assume len is a multiple of 8, and arrays are 16-byte aligned */ void (*vector_fmul)(float *dst, const float *src, int len); void (*vector_fmul_reverse)(float *dst, const float *src0, const float *src1, int len); @@ -346,13 +354,13 @@ typedef struct DSPContext { /** * block -> idct -> clip to unsigned 8 bit -> dest. * (-1392, 0, 0, ...) -> idct -> (-174, -174, ...) -> put -> (0, 0, ...) - * @param line_size size in bytes of a horizotal line of dest + * @param line_size size in bytes of a horizontal line of dest */ void (*idct_put)(uint8_t *dest/*align 8*/, int line_size, DCTELEM *block/*align 16*/); /** * block -> idct -> add dest -> clip to unsigned 8 bit -> dest. - * @param line_size size in bytes of a horizotal line of dest + * @param line_size size in bytes of a horizontal line of dest */ void (*idct_add)(uint8_t *dest/*align 8*/, int line_size, DCTELEM *block/*align 16*/); @@ -389,8 +397,8 @@ typedef struct DSPContext { void (*h264_dct)(DCTELEM block[4][4]); /* snow wavelet */ - void (*vertical_compose97i)(DWTELEM *b0, DWTELEM *b1, DWTELEM *b2, DWTELEM *b3, DWTELEM *b4, DWTELEM *b5, int width); - void (*horizontal_compose97i)(DWTELEM *b, int width); + void (*vertical_compose97i)(IDWTELEM *b0, IDWTELEM *b1, IDWTELEM *b2, IDWTELEM *b3, IDWTELEM *b4, IDWTELEM *b5, int width); + void (*horizontal_compose97i)(IDWTELEM *b, int width); void (*inner_add_yblock)(const uint8_t *obmc, const int obmc_stride, uint8_t * * block, int b_w, int b_h, int src_x, int src_y, int src_stride, slice_buffer * sb, int add, uint8_t * dst8); void (*prefetch)(void *mem, int stride, int h); @@ -408,6 +416,12 @@ typedef struct DSPContext { * last argument is actually round value instead of height */ op_pixels_func put_vc1_mspel_pixels_tab[16]; + + /* intrax8 functions */ + void (*x8_spatial_compensation[12])(uint8_t *src , uint8_t *dst, int linesize); + void (*x8_setup_spatial_compensation)(uint8_t *src, uint8_t *dst, int linesize, + int * range, int * sum, int edges); + } DSPContext; void dsputil_static_init(void); @@ -470,6 +484,16 @@ static inline int get_penalty_factor(int lambda, int lambda2, int type){ one or more MultiMedia extension */ int mm_support(void); +void dsputil_init_alpha(DSPContext* c, AVCodecContext *avctx); +void dsputil_init_armv4l(DSPContext* c, AVCodecContext *avctx); +void dsputil_init_bfin(DSPContext* c, AVCodecContext *avctx); +void dsputil_init_mlib(DSPContext* c, AVCodecContext *avctx); +void dsputil_init_mmi(DSPContext* c, AVCodecContext *avctx); +void dsputil_init_mmx(DSPContext* c, AVCodecContext *avctx); +void dsputil_init_ppc(DSPContext* c, AVCodecContext *avctx); +void dsputil_init_sh4(DSPContext* c, AVCodecContext *avctx); +void dsputil_init_vis(DSPContext* c, AVCodecContext *avctx); + #define DECLARE_ALIGNED_16(t, v) DECLARE_ALIGNED(16, t, v) #if defined(HAVE_MMX) @@ -507,7 +531,6 @@ static inline void emms(void) #define STRIDE_ALIGN 8 -void dsputil_init_mmx(DSPContext* c, AVCodecContext *avctx); void dsputil_init_pix_mmx(DSPContext* c, AVCodecContext *avctx); #elif defined(ARCH_ARMV4L) @@ -521,68 +544,47 @@ void dsputil_init_pix_mmx(DSPContext* c, AVCodecContext *avctx); extern int mm_flags; -void dsputil_init_armv4l(DSPContext* c, AVCodecContext *avctx); - #elif defined(HAVE_MLIB) /* SPARC/VIS IDCT needs 8-byte aligned DCT blocks */ #define DECLARE_ALIGNED_8(t, v) DECLARE_ALIGNED(8, t, v) #define STRIDE_ALIGN 8 -void dsputil_init_mlib(DSPContext* c, AVCodecContext *avctx); - -#elif defined(ARCH_SPARC) +#elif defined(HAVE_VIS) /* SPARC/VIS IDCT needs 8-byte aligned DCT blocks */ #define DECLARE_ALIGNED_8(t, v) DECLARE_ALIGNED(8, t, v) #define STRIDE_ALIGN 8 -void dsputil_init_vis(DSPContext* c, AVCodecContext *avctx); #elif defined(ARCH_ALPHA) #define DECLARE_ALIGNED_8(t, v) DECLARE_ALIGNED(8, t, v) #define STRIDE_ALIGN 8 -void dsputil_init_alpha(DSPContext* c, AVCodecContext *avctx); - #elif defined(ARCH_POWERPC) #define MM_ALTIVEC 0x0001 /* standard AltiVec */ extern int mm_flags; -#if defined(HAVE_ALTIVEC) && !defined(CONFIG_DARWIN) -#define pixel altivec_pixel -#include -#undef pixel -#endif - #define DECLARE_ALIGNED_8(t, v) DECLARE_ALIGNED(16, t, v) #define STRIDE_ALIGN 16 -void dsputil_init_ppc(DSPContext* c, AVCodecContext *avctx); - #elif defined(HAVE_MMI) #define DECLARE_ALIGNED_8(t, v) DECLARE_ALIGNED(16, t, v) #define STRIDE_ALIGN 16 -void dsputil_init_mmi(DSPContext* c, AVCodecContext *avctx); - #elif defined(ARCH_SH4) #define DECLARE_ALIGNED_8(t, v) DECLARE_ALIGNED(8, t, v) #define STRIDE_ALIGN 8 -void dsputil_init_sh4(DSPContext* c, AVCodecContext *avctx); - #elif defined(ARCH_BFIN) #define DECLARE_ALIGNED_8(t, v) DECLARE_ALIGNED(8, t, v) #define STRIDE_ALIGN 8 -void dsputil_init_bfin(DSPContext* c, AVCodecContext *avctx); - #else #define DECLARE_ALIGNED_8(t, v) DECLARE_ALIGNED(8, t, v) @@ -680,7 +682,7 @@ static inline void copy_block2(uint8_t *dst, uint8_t *src, int dstStride, int sr int i; for(i=0; i