Mercurial > libavcodec.hg
diff i386/dsputil_mmx.c @ 2868:666064f710d4 libavcodec
xvids mmx&mmx2 idcts
needed to decode xvid without some minor artefacts
under #ifdef CONFIG_GPL of course
author | michael |
---|---|
date | Sat, 10 Sep 2005 17:01:30 +0000 |
parents | 95bac7109ff0 |
children | f4afa3812818 |
line wrap: on
line diff
--- a/i386/dsputil_mmx.c Sat Sep 10 01:13:10 2005 +0000 +++ b/i386/dsputil_mmx.c Sat Sep 10 17:01:30 2005 +0000 @@ -29,6 +29,8 @@ //#include <assert.h> extern const uint8_t ff_h263_loop_filter_strength[32]; +extern void ff_idct_xvid_mmx(short *block); +extern void ff_idct_xvid_mmx2(short *block); int mm_flags; /* multimedia extension flags */ @@ -2457,6 +2459,28 @@ ff_vp3_idct_mmx(block); add_pixels_clamped_mmx(block, dest, line_size); } +#ifdef CONFIG_GPL +static void ff_idct_xvid_mmx_put(uint8_t *dest, int line_size, DCTELEM *block) +{ + ff_idct_xvid_mmx (block); + put_pixels_clamped_mmx(block, dest, line_size); +} +static void ff_idct_xvid_mmx_add(uint8_t *dest, int line_size, DCTELEM *block) +{ + ff_idct_xvid_mmx (block); + add_pixels_clamped_mmx(block, dest, line_size); +} +static void ff_idct_xvid_mmx2_put(uint8_t *dest, int line_size, DCTELEM *block) +{ + ff_idct_xvid_mmx2 (block); + put_pixels_clamped_mmx(block, dest, line_size); +} +static void ff_idct_xvid_mmx2_add(uint8_t *dest, int line_size, DCTELEM *block) +{ + ff_idct_xvid_mmx2 (block); + add_pixels_clamped_mmx(block, dest, line_size); +} +#endif void dsputil_init_mmx(DSPContext* c, AVCodecContext *avctx) { @@ -2529,7 +2553,19 @@ c->idct = ff_vp3_idct_mmx; c->idct_permutation_type= FF_PARTTRANS_IDCT_PERM; } +#ifdef CONFIG_GPL + }else if(idct_algo==FF_IDCT_XVIDMMX){ + if(mm_flags & MM_MMXEXT){ + c->idct_put= ff_idct_xvid_mmx2_put; + c->idct_add= ff_idct_xvid_mmx2_add; + c->idct = ff_idct_xvid_mmx2; + }else{ + c->idct_put= ff_idct_xvid_mmx_put; + c->idct_add= ff_idct_xvid_mmx_add; + c->idct = ff_idct_xvid_mmx; + } } +#endif } #ifdef CONFIG_ENCODERS