summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/libffmpeg/Makefile.am5
-rw-r--r--src/libffmpeg/config.h6
-rw-r--r--src/libffmpeg/libavcodec/dsputil.c9
-rw-r--r--src/libffmpeg/libavcodec/dsputil.h15
-rw-r--r--src/libffmpeg/libavcodec/dsputil_mmx.c8
-rw-r--r--src/libffmpeg/libavcodec/mpegvideo.c2
-rw-r--r--src/libffmpeg/libavcodec/mpegvideo.h2
7 files changed, 20 insertions, 27 deletions
diff --git a/src/libffmpeg/Makefile.am b/src/libffmpeg/Makefile.am
index 992b45aec..b180b3ba4 100644
--- a/src/libffmpeg/Makefile.am
+++ b/src/libffmpeg/Makefile.am
@@ -21,7 +21,10 @@ xineplug_decode_ff_la_LDFLAGS = \
noinst_HEADERS = config.h
debug:
- @$(MAKE) CFLAGS="@DEBUG_CFLAGS@ -DCONFIG_DECODERS -DHAVE_AV_CONFIG_H"
+ @list='$(SUBDIRS)'; for subdir in $$list; do \
+ (cd $$subdir && $(MAKE) $@) || exit;\
+ done;
+ @$(MAKE) CFLAGS="@DEBUG_CFLAGS@"
install-debug: debug
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
diff --git a/src/libffmpeg/config.h b/src/libffmpeg/config.h
index 52fb2dff8..a28db4926 100644
--- a/src/libffmpeg/config.h
+++ b/src/libffmpeg/config.h
@@ -3,9 +3,3 @@
*/
#include "../../config.h"
-
-#ifdef ARCH_X86
-/*
-#define HAVE_MMX
-*/
-#endif
diff --git a/src/libffmpeg/libavcodec/dsputil.c b/src/libffmpeg/libavcodec/dsputil.c
index da8b24941..c29574303 100644
--- a/src/libffmpeg/libavcodec/dsputil.c
+++ b/src/libffmpeg/libavcodec/dsputil.c
@@ -20,6 +20,7 @@
#include <stdio.h>
#include "avcodec.h"
#include "dsputil.h"
+#include "cpu_accel.h"
void (*ff_idct)(DCTELEM *block);
void (*get_pixels)(DCTELEM *block, const UINT8 *pixels, int line_size);
@@ -413,9 +414,13 @@ void block_permute(INT16 *block)
void dsputil_init(void)
{
int i, j;
+#ifdef ARCH_X86
+ uint32_t mm = mm_accel();
+#endif
int use_permuted_mmx_idct;
int accel_dsputil;
+
for(i=0;i<256;i++) cropTbl[i + MAX_NEG_CROP] = i;
for(i=0;i<MAX_NEG_CROP;i++) {
cropTbl[i] = 0;
@@ -440,8 +445,8 @@ void dsputil_init(void)
use_permuted_mmx_idct = 1;
accel_dsputil = 0;
-#ifdef HAVE_MMX
- if (!accel_dsputil) {
+#ifdef ARCH_X86
+ if (!accel_dsputil && (mm & MM_ACCEL_X86_MMX)) {
dsputil_init_mmx();
accel_dsputil = 1;
/* printf("AVCODEC: Using mmx idct\n"); */
diff --git a/src/libffmpeg/libavcodec/dsputil.h b/src/libffmpeg/libavcodec/dsputil.h
index 1189747f3..f5e22e4c4 100644
--- a/src/libffmpeg/libavcodec/dsputil.h
+++ b/src/libffmpeg/libavcodec/dsputil.h
@@ -74,23 +74,12 @@ static inline int block_permute_op(int j)
void block_permute(INT16 *block);
-#if defined(HAVE_MMX)
+#if defined(ARCH_X86)
-#define MM_MMX 0x0001 /* standard MMX */
-#define MM_3DNOW 0x0004 /* AMD 3DNOW */
-#define MM_MMXEXT 0x0002 /* SSE integer functions or AMD MMX ext */
-#define MM_SSE 0x0008 /* SSE functions */
-#define MM_SSE2 0x0010 /* PIV SSE2 functions */
+#include "cpu_accel.h"
extern int mm_flags;
-int mm_support(void);
-
-static inline void emms(void)
-{
- __asm __volatile ("emms;":::"memory");
-}
-
#define emms_c() \
{\
if (mm_flags & MM_MMX)\
diff --git a/src/libffmpeg/libavcodec/dsputil_mmx.c b/src/libffmpeg/libavcodec/dsputil_mmx.c
index 29a069566..44b0b23d2 100644
--- a/src/libffmpeg/libavcodec/dsputil_mmx.c
+++ b/src/libffmpeg/libavcodec/dsputil_mmx.c
@@ -105,6 +105,7 @@ static void put_pixels_clamped_mmx(const DCTELEM *block, UINT8 *pixels, int line
const DCTELEM *p;
UINT8 *pix;
int i;
+ static int p_inc = 32; /* hack to avoid gcc-2.95.2 loop unrolling bug */
/* read the pixels */
p = block;
@@ -132,7 +133,7 @@ static void put_pixels_clamped_mmx(const DCTELEM *block, UINT8 *pixels, int line
:"m"(*p)
:"memory");
pix += line_size*4;
- p += 32;
+ p += p_inc;
}
}
@@ -141,6 +142,7 @@ static void add_pixels_clamped_mmx(const DCTELEM *block, UINT8 *pixels, int line
const DCTELEM *p;
UINT8 *pix;
int i;
+ static int p_inc = 16; /* hack to avoid gcc-2.95.2 loop unrolling bug */
/* read the pixels */
p = block;
@@ -172,7 +174,7 @@ static void add_pixels_clamped_mmx(const DCTELEM *block, UINT8 *pixels, int line
:"m"(*p)
:"memory");
pix += line_size*2;
- p += 16;
+ p += p_inc;
}
}
@@ -965,7 +967,7 @@ static void sub_pixels_xy2_mmx( DCTELEM *block, const UINT8 *pixels, int line
void dsputil_init_mmx(void)
{
- mm_flags = mm_support();
+ mm_flags = mm_accel();
#if 0
printf("CPU flags:");
if (mm_flags & MM_MMX)
diff --git a/src/libffmpeg/libavcodec/mpegvideo.c b/src/libffmpeg/libavcodec/mpegvideo.c
index ea7979bb8..5c66b3189 100644
--- a/src/libffmpeg/libavcodec/mpegvideo.c
+++ b/src/libffmpeg/libavcodec/mpegvideo.c
@@ -106,7 +106,7 @@ int MPV_common_init(MpegEncContext *s)
else
s->dct_unquantize = dct_unquantize_mpeg1_c;
-#ifdef HAVE_MMX
+#ifdef ARCH_X86
MPV_common_init_mmx(s);
#endif
s->mb_width = (s->width + 15) / 16;
diff --git a/src/libffmpeg/libavcodec/mpegvideo.h b/src/libffmpeg/libavcodec/mpegvideo.h
index e4a5617e8..31243471e 100644
--- a/src/libffmpeg/libavcodec/mpegvideo.h
+++ b/src/libffmpeg/libavcodec/mpegvideo.h
@@ -188,7 +188,7 @@ void MPV_common_end(MpegEncContext *s);
void MPV_decode_mb(MpegEncContext *s, DCTELEM block[6][64]);
void MPV_frame_start(MpegEncContext *s);
void MPV_frame_end(MpegEncContext *s);
-#ifdef HAVE_MMX
+#ifdef ARCH_X86
void MPV_common_init_mmx(MpegEncContext *s);
#endif