From 669ac79cf52d68b39f4db26aab1e96f9190e1885 Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Thu, 15 May 2003 23:30:03 +0000 Subject: moving the svq3 motion compensation stuff to dsputil (this also means that existing optimized halfpel code is used now ...) Originally committed as revision 1885 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavcodec/dsputil.h | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) (limited to 'libavcodec/dsputil.h') diff --git a/libavcodec/dsputil.h b/libavcodec/dsputil.h index 0060d77dce..d43175e25b 100644 --- a/libavcodec/dsputil.h +++ b/libavcodec/dsputil.h @@ -77,6 +77,7 @@ void clear_blocks_c(DCTELEM *blocks); /* add and put pixel (decoding) */ // blocksizes for op_pixels_func are 8x4,8x8 16x8 16x16 typedef void (*op_pixels_func)(uint8_t *block/*align width (8 or 16)*/, const uint8_t *pixels/*align 1*/, int line_size, int h); +typedef void (*tpel_mc_func)(uint8_t *block/*align width (8 or 16)*/, const uint8_t *pixels/*align 1*/, int line_size, int w, int h); typedef void (*qpel_mc_func)(uint8_t *dst/*align width (8 or 16)*/, uint8_t *src/*align 1*/, int stride); typedef void (*h264_chroma_mc_func)(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int srcStride, int h, int x, int y); @@ -146,18 +147,18 @@ typedef struct DSPContext { me_cmp_func me_sub_cmp[11]; me_cmp_func mb_cmp[11]; - /* maybe create an array for 16/8 functions */ + /* maybe create an array for 16/8/4/2 functions */ /** * Halfpel motion compensation with rounding (a+b+1)>>1. - * this is an array[2][4] of motion compensation funcions for 2 - * horizontal blocksizes (8,16) and the 4 halfpel positions
+ * this is an array[4][4] of motion compensation funcions for 4 + * horizontal blocksizes (2,4,8,16) and the 4 halfpel positions
* *pixels_tab[ 0->16xH 1->8xH ][ xhalfpel + 2*yhalfpel ] * @param block destination where the result is stored * @param pixels source * @param line_size number of bytes in a horizontal line of block * @param h height */ - op_pixels_func put_pixels_tab[2][4]; + op_pixels_func put_pixels_tab[4][4]; /** * Halfpel motion compensation with rounding (a+b+1)>>1. @@ -194,6 +195,18 @@ typedef struct DSPContext { * @param h height */ op_pixels_func avg_no_rnd_pixels_tab[2][4]; + + /** + * Thirdpel motion compensation with rounding (a+b+1)>>1. + * this is an array[12] of motion compensation funcions for the 9 thirdpel positions
+ * *pixels_tab[ xthirdpel + 4*ythirdpel ] + * @param block destination where the result is stored + * @param pixels source + * @param line_size number of bytes in a horizontal line of block + * @param h height + */ + tpel_mc_func put_tpel_pixels_tab[11]; //FIXME individual func ptr per width? + qpel_mc_func put_qpel_pixels_tab[2][16]; qpel_mc_func avg_qpel_pixels_tab[2][16]; qpel_mc_func put_no_rnd_qpel_pixels_tab[2][16]; @@ -380,7 +393,9 @@ void dsputil_init_sh4(DSPContext* c, AVCodecContext *avctx); struct unaligned_64 { uint64_t l; } __attribute__((packed)); struct unaligned_32 { uint32_t l; } __attribute__((packed)); +struct unaligned_16 { uint16_t l; } __attribute__((packed)); +#define LD16(a) (((const struct unaligned_16 *) (a))->l) #define LD32(a) (((const struct unaligned_32 *) (a))->l) #define LD64(a) (((const struct unaligned_64 *) (a))->l) @@ -388,6 +403,7 @@ struct unaligned_32 { uint32_t l; } __attribute__((packed)); #else /* __GNUC__ */ +#define LD16(a) (*((uint16_t*)(a))) #define LD32(a) (*((uint32_t*)(a))) #define LD64(a) (*((uint64_t*)(a))) -- cgit v1.2.3