summaryrefslogtreecommitdiff
path: root/src/libffmpeg/libavcodec/i386/dsputil_mmx.c
diff options
context:
space:
mode:
authorMiguel Freitas <miguelfreitas@users.sourceforge.net>2002-11-11 13:45:34 +0000
committerMiguel Freitas <miguelfreitas@users.sourceforge.net>2002-11-11 13:45:34 +0000
commit810ddddbc0d5f6587b9154115fa60d546d728310 (patch)
tree67256930a6cd947fb3f09b070b19dedd4fbbcd10 /src/libffmpeg/libavcodec/i386/dsputil_mmx.c
parente38a8cca2c6be40954a44f167f7cc9fac0813ede (diff)
downloadxine-lib-810ddddbc0d5f6587b9154115fa60d546d728310.tar.gz
xine-lib-810ddddbc0d5f6587b9154115fa60d546d728310.tar.bz2
sync ffmpeg
- add wma decoder - fix mmx macro - remove changes from fdct_mmx.c (it should work fine now with the mmx macro fix) CVS patchset: 3234 CVS date: 2002/11/11 13:45:34
Diffstat (limited to 'src/libffmpeg/libavcodec/i386/dsputil_mmx.c')
-rw-r--r--src/libffmpeg/libavcodec/i386/dsputil_mmx.c241
1 files changed, 120 insertions, 121 deletions
diff --git a/src/libffmpeg/libavcodec/i386/dsputil_mmx.c b/src/libffmpeg/libavcodec/i386/dsputil_mmx.c
index 708d0b091..94b88b70e 100644
--- a/src/libffmpeg/libavcodec/i386/dsputil_mmx.c
+++ b/src/libffmpeg/libavcodec/i386/dsputil_mmx.c
@@ -22,7 +22,7 @@
#include "../dsputil.h"
int mm_flags; /* multimedia extension flags */
-
+/* FIXME use them in static form */
int pix_abs16x16_mmx(UINT8 *blk1, UINT8 *blk2, int lx);
int pix_abs16x16_x2_mmx(UINT8 *blk1, UINT8 *blk2, int lx);
int pix_abs16x16_y2_mmx(UINT8 *blk1, UINT8 *blk2, int lx);
@@ -242,7 +242,7 @@ static void diff_pixels_mmx(DCTELEM *block, const UINT8 *s1, const UINT8 *s2, in
);
}
-static void put_pixels_clamped_mmx(const DCTELEM *block, UINT8 *pixels, int line_size)
+void put_pixels_clamped_mmx(const DCTELEM *block, UINT8 *pixels, int line_size)
{
const DCTELEM *p;
UINT8 *pix;
@@ -297,7 +297,7 @@ static void put_pixels_clamped_mmx(const DCTELEM *block, UINT8 *pixels, int line
:"memory");
}
-static void add_pixels_clamped_mmx(const DCTELEM *block, UINT8 *pixels, int line_size)
+void add_pixels_clamped_mmx(const DCTELEM *block, UINT8 *pixels, int line_size)
{
const DCTELEM *p;
UINT8 *pix;
@@ -457,7 +457,7 @@ static int pix_sum16_mmx(UINT8 * pix, int line_size){
static void just_return() { return; }
#endif
-void dsputil_init_mmx(void)
+void dsputil_init_mmx(DSPContext* c, unsigned mask)
{
mm_flags = mm_support();
#if 0
@@ -476,112 +476,112 @@ void dsputil_init_mmx(void)
#endif
if (mm_flags & MM_MMX) {
- get_pixels = get_pixels_mmx;
- diff_pixels = diff_pixels_mmx;
- put_pixels_clamped = put_pixels_clamped_mmx;
- add_pixels_clamped = add_pixels_clamped_mmx;
- clear_blocks= clear_blocks_mmx;
- pix_sum= pix_sum16_mmx;
-
- pix_abs16x16 = pix_abs16x16_mmx;
- pix_abs16x16_x2 = pix_abs16x16_x2_mmx;
- pix_abs16x16_y2 = pix_abs16x16_y2_mmx;
- pix_abs16x16_xy2 = pix_abs16x16_xy2_mmx;
- pix_abs8x8 = pix_abs8x8_mmx;
- pix_abs8x8_x2 = pix_abs8x8_x2_mmx;
- pix_abs8x8_y2 = pix_abs8x8_y2_mmx;
- pix_abs8x8_xy2= pix_abs8x8_xy2_mmx;
-
- put_pixels_tab[0][0] = put_pixels16_mmx;
- put_pixels_tab[0][1] = put_pixels16_x2_mmx;
- put_pixels_tab[0][2] = put_pixels16_y2_mmx;
- put_pixels_tab[0][3] = put_pixels16_xy2_mmx;
-
- put_no_rnd_pixels_tab[0][0] = put_pixels16_mmx;
- put_no_rnd_pixels_tab[0][1] = put_no_rnd_pixels16_x2_mmx;
- put_no_rnd_pixels_tab[0][2] = put_no_rnd_pixels16_y2_mmx;
- put_no_rnd_pixels_tab[0][3] = put_no_rnd_pixels16_xy2_mmx;
-
- avg_pixels_tab[0][0] = avg_pixels16_mmx;
- avg_pixels_tab[0][1] = avg_pixels16_x2_mmx;
- avg_pixels_tab[0][2] = avg_pixels16_y2_mmx;
- avg_pixels_tab[0][3] = avg_pixels16_xy2_mmx;
-
- avg_no_rnd_pixels_tab[0][0] = avg_no_rnd_pixels16_mmx;
- avg_no_rnd_pixels_tab[0][1] = avg_no_rnd_pixels16_x2_mmx;
- avg_no_rnd_pixels_tab[0][2] = avg_no_rnd_pixels16_y2_mmx;
- avg_no_rnd_pixels_tab[0][3] = avg_no_rnd_pixels16_xy2_mmx;
-
- put_pixels_tab[1][0] = put_pixels8_mmx;
- put_pixels_tab[1][1] = put_pixels8_x2_mmx;
- put_pixels_tab[1][2] = put_pixels8_y2_mmx;
- put_pixels_tab[1][3] = put_pixels8_xy2_mmx;
-
- put_no_rnd_pixels_tab[1][0] = put_pixels8_mmx;
- put_no_rnd_pixels_tab[1][1] = put_no_rnd_pixels8_x2_mmx;
- put_no_rnd_pixels_tab[1][2] = put_no_rnd_pixels8_y2_mmx;
- put_no_rnd_pixels_tab[1][3] = put_no_rnd_pixels8_xy2_mmx;
-
- avg_pixels_tab[1][0] = avg_pixels8_mmx;
- avg_pixels_tab[1][1] = avg_pixels8_x2_mmx;
- avg_pixels_tab[1][2] = avg_pixels8_y2_mmx;
- avg_pixels_tab[1][3] = avg_pixels8_xy2_mmx;
-
- avg_no_rnd_pixels_tab[1][0] = avg_no_rnd_pixels8_mmx;
- avg_no_rnd_pixels_tab[1][1] = avg_no_rnd_pixels8_x2_mmx;
- avg_no_rnd_pixels_tab[1][2] = avg_no_rnd_pixels8_y2_mmx;
- avg_no_rnd_pixels_tab[1][3] = avg_no_rnd_pixels8_xy2_mmx;
+ c->get_pixels = get_pixels_mmx;
+ c->diff_pixels = diff_pixels_mmx;
+ c->put_pixels_clamped = put_pixels_clamped_mmx;
+ c->add_pixels_clamped = add_pixels_clamped_mmx;
+ c->clear_blocks = clear_blocks_mmx;
+ c->pix_sum = pix_sum16_mmx;
+
+ c->pix_abs16x16 = pix_abs16x16_mmx;
+ c->pix_abs16x16_x2 = pix_abs16x16_x2_mmx;
+ c->pix_abs16x16_y2 = pix_abs16x16_y2_mmx;
+ c->pix_abs16x16_xy2 = pix_abs16x16_xy2_mmx;
+ c->pix_abs8x8 = pix_abs8x8_mmx;
+ c->pix_abs8x8_x2 = pix_abs8x8_x2_mmx;
+ c->pix_abs8x8_y2 = pix_abs8x8_y2_mmx;
+ c->pix_abs8x8_xy2 = pix_abs8x8_xy2_mmx;
+
+ c->put_pixels_tab[0][0] = put_pixels16_mmx;
+ c->put_pixels_tab[0][1] = put_pixels16_x2_mmx;
+ c->put_pixels_tab[0][2] = put_pixels16_y2_mmx;
+ c->put_pixels_tab[0][3] = put_pixels16_xy2_mmx;
+
+ c->put_no_rnd_pixels_tab[0][0] = put_pixels16_mmx;
+ c->put_no_rnd_pixels_tab[0][1] = put_no_rnd_pixels16_x2_mmx;
+ c->put_no_rnd_pixels_tab[0][2] = put_no_rnd_pixels16_y2_mmx;
+ c->put_no_rnd_pixels_tab[0][3] = put_no_rnd_pixels16_xy2_mmx;
+
+ c->avg_pixels_tab[0][0] = avg_pixels16_mmx;
+ c->avg_pixels_tab[0][1] = avg_pixels16_x2_mmx;
+ c->avg_pixels_tab[0][2] = avg_pixels16_y2_mmx;
+ c->avg_pixels_tab[0][3] = avg_pixels16_xy2_mmx;
+
+ c->avg_no_rnd_pixels_tab[0][0] = avg_no_rnd_pixels16_mmx;
+ c->avg_no_rnd_pixels_tab[0][1] = avg_no_rnd_pixels16_x2_mmx;
+ c->avg_no_rnd_pixels_tab[0][2] = avg_no_rnd_pixels16_y2_mmx;
+ c->avg_no_rnd_pixels_tab[0][3] = avg_no_rnd_pixels16_xy2_mmx;
+
+ c->put_pixels_tab[1][0] = put_pixels8_mmx;
+ c->put_pixels_tab[1][1] = put_pixels8_x2_mmx;
+ c->put_pixels_tab[1][2] = put_pixels8_y2_mmx;
+ c->put_pixels_tab[1][3] = put_pixels8_xy2_mmx;
+
+ c->put_no_rnd_pixels_tab[1][0] = put_pixels8_mmx;
+ c->put_no_rnd_pixels_tab[1][1] = put_no_rnd_pixels8_x2_mmx;
+ c->put_no_rnd_pixels_tab[1][2] = put_no_rnd_pixels8_y2_mmx;
+ c->put_no_rnd_pixels_tab[1][3] = put_no_rnd_pixels8_xy2_mmx;
+
+ c->avg_pixels_tab[1][0] = avg_pixels8_mmx;
+ c->avg_pixels_tab[1][1] = avg_pixels8_x2_mmx;
+ c->avg_pixels_tab[1][2] = avg_pixels8_y2_mmx;
+ c->avg_pixels_tab[1][3] = avg_pixels8_xy2_mmx;
+
+ c->avg_no_rnd_pixels_tab[1][0] = avg_no_rnd_pixels8_mmx;
+ c->avg_no_rnd_pixels_tab[1][1] = avg_no_rnd_pixels8_x2_mmx;
+ c->avg_no_rnd_pixels_tab[1][2] = avg_no_rnd_pixels8_y2_mmx;
+ c->avg_no_rnd_pixels_tab[1][3] = avg_no_rnd_pixels8_xy2_mmx;
if (mm_flags & MM_MMXEXT) {
- pix_abs16x16 = pix_abs16x16_mmx2;
- pix_abs16x16_x2 = pix_abs16x16_x2_mmx2;
- pix_abs16x16_y2 = pix_abs16x16_y2_mmx2;
- pix_abs16x16_xy2= pix_abs16x16_xy2_mmx2;
-
- pix_abs8x8 = pix_abs8x8_mmx2;
- pix_abs8x8_x2 = pix_abs8x8_x2_mmx2;
- pix_abs8x8_y2 = pix_abs8x8_y2_mmx2;
- pix_abs8x8_xy2= pix_abs8x8_xy2_mmx2;
-
- put_pixels_tab[0][1] = put_pixels16_x2_mmx2;
- put_pixels_tab[0][2] = put_pixels16_y2_mmx2;
- put_no_rnd_pixels_tab[0][1] = put_no_rnd_pixels16_x2_mmx2;
- put_no_rnd_pixels_tab[0][2] = put_no_rnd_pixels16_y2_mmx2;
-
- avg_pixels_tab[0][0] = avg_pixels16_mmx2;
- avg_pixels_tab[0][1] = avg_pixels16_x2_mmx2;
- avg_pixels_tab[0][2] = avg_pixels16_y2_mmx2;
- avg_pixels_tab[0][3] = avg_pixels16_xy2_mmx2;
-
- put_pixels_tab[1][1] = put_pixels8_x2_mmx2;
- put_pixels_tab[1][2] = put_pixels8_y2_mmx2;
- put_no_rnd_pixels_tab[1][1] = put_no_rnd_pixels8_x2_mmx2;
- put_no_rnd_pixels_tab[1][2] = put_no_rnd_pixels8_y2_mmx2;
-
- avg_pixels_tab[1][0] = avg_pixels8_mmx2;
- avg_pixels_tab[1][1] = avg_pixels8_x2_mmx2;
- avg_pixels_tab[1][2] = avg_pixels8_y2_mmx2;
- avg_pixels_tab[1][3] = avg_pixels8_xy2_mmx2;
+ c->pix_abs16x16 = pix_abs16x16_mmx2;
+ c->pix_abs16x16_x2 = pix_abs16x16_x2_mmx2;
+ c->pix_abs16x16_y2 = pix_abs16x16_y2_mmx2;
+ c->pix_abs16x16_xy2 = pix_abs16x16_xy2_mmx2;
+
+ c->pix_abs8x8 = pix_abs8x8_mmx2;
+ c->pix_abs8x8_x2 = pix_abs8x8_x2_mmx2;
+ c->pix_abs8x8_y2 = pix_abs8x8_y2_mmx2;
+ c->pix_abs8x8_xy2 = pix_abs8x8_xy2_mmx2;
+
+ c->put_pixels_tab[0][1] = put_pixels16_x2_mmx2;
+ c->put_pixels_tab[0][2] = put_pixels16_y2_mmx2;
+ c->put_no_rnd_pixels_tab[0][1] = put_no_rnd_pixels16_x2_mmx2;
+ c->put_no_rnd_pixels_tab[0][2] = put_no_rnd_pixels16_y2_mmx2;
+
+ c->avg_pixels_tab[0][0] = avg_pixels16_mmx2;
+ c->avg_pixels_tab[0][1] = avg_pixels16_x2_mmx2;
+ c->avg_pixels_tab[0][2] = avg_pixels16_y2_mmx2;
+ c->avg_pixels_tab[0][3] = avg_pixels16_xy2_mmx2;
+
+ c->put_pixels_tab[1][1] = put_pixels8_x2_mmx2;
+ c->put_pixels_tab[1][2] = put_pixels8_y2_mmx2;
+ c->put_no_rnd_pixels_tab[1][1] = put_no_rnd_pixels8_x2_mmx2;
+ c->put_no_rnd_pixels_tab[1][2] = put_no_rnd_pixels8_y2_mmx2;
+
+ c->avg_pixels_tab[1][0] = avg_pixels8_mmx2;
+ c->avg_pixels_tab[1][1] = avg_pixels8_x2_mmx2;
+ c->avg_pixels_tab[1][2] = avg_pixels8_y2_mmx2;
+ c->avg_pixels_tab[1][3] = avg_pixels8_xy2_mmx2;
} else if (mm_flags & MM_3DNOW) {
- put_pixels_tab[0][1] = put_pixels16_x2_3dnow;
- put_pixels_tab[0][2] = put_pixels16_y2_3dnow;
- put_no_rnd_pixels_tab[0][1] = put_no_rnd_pixels16_x2_3dnow;
- put_no_rnd_pixels_tab[0][2] = put_no_rnd_pixels16_y2_3dnow;
-
- avg_pixels_tab[0][0] = avg_pixels16_3dnow;
- avg_pixels_tab[0][1] = avg_pixels16_x2_3dnow;
- avg_pixels_tab[0][2] = avg_pixels16_y2_3dnow;
- avg_pixels_tab[0][3] = avg_pixels16_xy2_3dnow;
-
- put_pixels_tab[1][1] = put_pixels8_x2_3dnow;
- put_pixels_tab[1][2] = put_pixels8_y2_3dnow;
- put_no_rnd_pixels_tab[1][1] = put_no_rnd_pixels8_x2_3dnow;
- put_no_rnd_pixels_tab[1][2] = put_no_rnd_pixels8_y2_3dnow;
-
- avg_pixels_tab[1][0] = avg_pixels8_3dnow;
- avg_pixels_tab[1][1] = avg_pixels8_x2_3dnow;
- avg_pixels_tab[1][2] = avg_pixels8_y2_3dnow;
- avg_pixels_tab[1][3] = avg_pixels8_xy2_3dnow;
+ c->put_pixels_tab[0][1] = put_pixels16_x2_3dnow;
+ c->put_pixels_tab[0][2] = put_pixels16_y2_3dnow;
+ c->put_no_rnd_pixels_tab[0][1] = put_no_rnd_pixels16_x2_3dnow;
+ c->put_no_rnd_pixels_tab[0][2] = put_no_rnd_pixels16_y2_3dnow;
+
+ c->avg_pixels_tab[0][0] = avg_pixels16_3dnow;
+ c->avg_pixels_tab[0][1] = avg_pixels16_x2_3dnow;
+ c->avg_pixels_tab[0][2] = avg_pixels16_y2_3dnow;
+ c->avg_pixels_tab[0][3] = avg_pixels16_xy2_3dnow;
+
+ c->put_pixels_tab[1][1] = put_pixels8_x2_3dnow;
+ c->put_pixels_tab[1][2] = put_pixels8_y2_3dnow;
+ c->put_no_rnd_pixels_tab[1][1] = put_no_rnd_pixels8_x2_3dnow;
+ c->put_no_rnd_pixels_tab[1][2] = put_no_rnd_pixels8_y2_3dnow;
+
+ c->avg_pixels_tab[1][0] = avg_pixels8_3dnow;
+ c->avg_pixels_tab[1][1] = avg_pixels8_x2_3dnow;
+ c->avg_pixels_tab[1][2] = avg_pixels8_y2_3dnow;
+ c->avg_pixels_tab[1][3] = avg_pixels8_xy2_3dnow;
}
}
@@ -624,25 +624,24 @@ void dsputil_init_mmx(void)
/* remove any non bit exact operation (testing purpose). NOTE that
this function should be kept as small as possible because it is
always difficult to test automatically non bit exact cases. */
-void dsputil_set_bit_exact_mmx(void)
+void dsputil_set_bit_exact_mmx(DSPContext* c, unsigned mask)
{
if (mm_flags & MM_MMX) {
-
/* MMX2 & 3DNOW */
- put_no_rnd_pixels_tab[0][1] = put_no_rnd_pixels16_x2_mmx;
- put_no_rnd_pixels_tab[0][2] = put_no_rnd_pixels16_y2_mmx;
- avg_pixels_tab[0][3] = avg_pixels16_xy2_mmx;
- put_no_rnd_pixels_tab[1][1] = put_no_rnd_pixels8_x2_mmx;
- put_no_rnd_pixels_tab[1][2] = put_no_rnd_pixels8_y2_mmx;
- avg_pixels_tab[1][3] = avg_pixels8_xy2_mmx;
+ c->put_no_rnd_pixels_tab[0][1] = put_no_rnd_pixels16_x2_mmx;
+ c->put_no_rnd_pixels_tab[0][2] = put_no_rnd_pixels16_y2_mmx;
+ c->avg_pixels_tab[0][3] = avg_pixels16_xy2_mmx;
+ c->put_no_rnd_pixels_tab[1][1] = put_no_rnd_pixels8_x2_mmx;
+ c->put_no_rnd_pixels_tab[1][2] = put_no_rnd_pixels8_y2_mmx;
+ c->avg_pixels_tab[1][3] = avg_pixels8_xy2_mmx;
if (mm_flags & MM_MMXEXT) {
- pix_abs16x16_x2 = pix_abs16x16_x2_mmx;
- pix_abs16x16_y2 = pix_abs16x16_y2_mmx;
- pix_abs16x16_xy2 = pix_abs16x16_xy2_mmx;
- pix_abs8x8_x2 = pix_abs8x8_x2_mmx;
- pix_abs8x8_y2 = pix_abs8x8_y2_mmx;
- pix_abs8x8_xy2= pix_abs8x8_xy2_mmx;
+ c->pix_abs16x16_x2 = pix_abs16x16_x2_mmx;
+ c->pix_abs16x16_y2 = pix_abs16x16_y2_mmx;
+ c->pix_abs16x16_xy2 = pix_abs16x16_xy2_mmx;
+ c->pix_abs8x8_x2 = pix_abs8x8_x2_mmx;
+ c->pix_abs8x8_y2 = pix_abs8x8_y2_mmx;
+ c->pix_abs8x8_xy2= pix_abs8x8_xy2_mmx;
}
}
}