summaryrefslogtreecommitdiff
path: root/libavcodec
diff options
context:
space:
mode:
authorGildas Bazin <gbazi@altern.org>2005-06-28 22:46:36 +0000
committerMichael Niedermayer <michaelni@gmx.at>2005-06-28 22:46:36 +0000
commiteba9ae3cfcfb924e2dd6e6c45838e73181bd1430 (patch)
tree8b76726c4a504880d78b894125cd36822c525fb8 /libavcodec
parentb4cad5371b72027627220e96b79ec0d65b2debe5 (diff)
IWMMXT configure support + runtime selection patch by (Gildas Bazin, gbazin : altern org)
Originally committed as revision 4409 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/armv4l/dsputil_arm.c2
-rw-r--r--libavcodec/armv4l/dsputil_iwmmxt.c18
-rw-r--r--libavcodec/armv4l/mpegvideo_iwmmxt.c2
-rw-r--r--libavcodec/avcodec.h7
-rw-r--r--libavcodec/dsputil.h4
5 files changed, 29 insertions, 4 deletions
diff --git a/libavcodec/armv4l/dsputil_arm.c b/libavcodec/armv4l/dsputil_arm.c
index 4ba6280963..0195c3ca6f 100644
--- a/libavcodec/armv4l/dsputil_arm.c
+++ b/libavcodec/armv4l/dsputil_arm.c
@@ -240,9 +240,7 @@ void dsputil_init_armv4l(DSPContext* c, AVCodecContext *avctx)
c->put_no_rnd_pixels_tab[1][2] = put_no_rnd_pixels8_y2_arm; //OK
/* c->put_no_rnd_pixels_tab[1][3] = put_no_rnd_pixels8_xy2_arm;//NG */
-#if 1
#ifdef HAVE_IWMMXT
dsputil_init_iwmmxt(c, avctx);
#endif
-#endif
}
diff --git a/libavcodec/armv4l/dsputil_iwmmxt.c b/libavcodec/armv4l/dsputil_iwmmxt.c
index 6e2465d7c8..99a55e7905 100644
--- a/libavcodec/armv4l/dsputil_iwmmxt.c
+++ b/libavcodec/armv4l/dsputil_iwmmxt.c
@@ -126,8 +126,26 @@ static void nop(uint8_t *block, const uint8_t *pixels, int line_size, int h)
return;
}
+int mm_flags; /* multimedia extension flags */
+
+int mm_support(void)
+{
+ return 0; /* TODO, implement proper detection */
+}
+
void dsputil_init_iwmmxt(DSPContext* c, AVCodecContext *avctx)
{
+ mm_flags = mm_support();
+
+ if (avctx->dsp_mask) {
+ if (avctx->dsp_mask & FF_MM_FORCE)
+ mm_flags |= (avctx->dsp_mask & 0xffff);
+ else
+ mm_flags &= ~(avctx->dsp_mask & 0xffff);
+ }
+
+ if (!(mm_flags & MM_IWMMXT)) return;
+
c->add_pixels_clamped = add_pixels_clamped_iwmmxt;
c->put_pixels_tab[0][0] = put_pixels16_iwmmxt;
diff --git a/libavcodec/armv4l/mpegvideo_iwmmxt.c b/libavcodec/armv4l/mpegvideo_iwmmxt.c
index 0f4c99e3ac..9724de8c4c 100644
--- a/libavcodec/armv4l/mpegvideo_iwmmxt.c
+++ b/libavcodec/armv4l/mpegvideo_iwmmxt.c
@@ -90,6 +90,8 @@ static void dct_unquantize_h263_inter_iwmmxt(MpegEncContext *s,
void MPV_common_init_iwmmxt(MpegEncContext *s)
{
+ if (!(mm_flags & MM_IWMMXT)) return;
+
s->dct_unquantize_h263_intra = dct_unquantize_h263_intra_iwmmxt;
#if 0
s->dct_unquantize_h263_inter = dct_unquantize_h263_inter_iwmmxt;
diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
index 6f644f6493..c6ebbb190d 100644
--- a/libavcodec/avcodec.h
+++ b/libavcodec/avcodec.h
@@ -17,7 +17,7 @@ extern "C" {
#define FFMPEG_VERSION_INT 0x000409
#define FFMPEG_VERSION "0.4.9-pre1"
-#define LIBAVCODEC_BUILD 4756
+#define LIBAVCODEC_BUILD 4757
#define LIBAVCODEC_VERSION_INT FFMPEG_VERSION_INT
#define LIBAVCODEC_VERSION FFMPEG_VERSION
@@ -1193,7 +1193,7 @@ typedef struct AVCodecContext {
#define FF_IDCT_SIMPLEARM 10
#define FF_IDCT_H264 11
#define FF_IDCT_VP3 12
-#define FP_IDCT_IPP 13
+#define FF_IDCT_IPP 13
/**
* slice count.
@@ -1236,6 +1236,9 @@ typedef struct AVCodecContext {
#define FF_MM_SSE2 0x0010 /* PIV SSE2 functions */
#define FF_MM_3DNOWEXT 0x0020 /* AMD 3DNowExt */
#endif /* HAVE_MMX */
+#ifdef HAVE_IWMMXT
+#define FF_MM_IWMMXT 0x0100 /* XScale IWMMXT */
+#endif /* HAVE_IWMMXT */
/**
* bits per sample/pixel from the demuxer (needed for huffyuv).
diff --git a/libavcodec/dsputil.h b/libavcodec/dsputil.h
index b9de38648b..cad32660db 100644
--- a/libavcodec/dsputil.h
+++ b/libavcodec/dsputil.h
@@ -432,6 +432,10 @@ void dsputil_init_pix_mmx(DSPContext* c, AVCodecContext *avctx);
#define __align8 __attribute__ ((aligned (4)))
#define STRIDE_ALIGN 4
+#define MM_IWMMXT 0x0100 /* XScale IWMMXT */
+
+extern int mm_flags;
+
void dsputil_init_armv4l(DSPContext* c, AVCodecContext *avctx);
#elif defined(HAVE_MLIB)