diff libmpeg2/motion_comp.c @ 9852:47984e3f54ce

Importing libmpeg2 from mpeg2dec-0.3.1
author arpi
date Sun, 06 Apr 2003 16:36:02 +0000
parents 4059e05c480a
children 217eb10b2f2d
line wrap: on
line diff
--- a/libmpeg2/motion_comp.c	Sun Apr 06 16:34:26 2003 +0000
+++ b/libmpeg2/motion_comp.c	Sun Apr 06 16:36:02 2003 +0000
@@ -1,8 +1,10 @@
 /*
  * motion_comp.c
- * Copyright (C) 1999-2001 Aaron Holtzman <aholtzma@ess.engr.uvic.ca>
+ * Copyright (C) 2000-2002 Michel Lespinasse <walken@zoy.org>
+ * Copyright (C) 1999-2000 Aaron Holtzman <aholtzma@ess.engr.uvic.ca>
  *
  * This file is part of mpeg2dec, a free MPEG-2 video stream decoder.
+ * See http://libmpeg2.sourceforge.net/ for updates.
  *
  * mpeg2dec is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -21,100 +23,102 @@
 
 #include "config.h"
 
-#include <stdio.h>
 #include <inttypes.h>
 
+#include "mpeg2.h"
 #include "mpeg2_internal.h"
-#include "mm_accel.h"
 
-mc_functions_t mc_functions;
+mpeg2_mc_t mpeg2_mc;
 
-void motion_comp_init (void)
+void mpeg2_mc_init (uint32_t accel)
 {
-
 #ifdef ARCH_X86
-    if (config.flags & MM_ACCEL_X86_MMXEXT) {
-	printf ("libmpeg2: Using MMXEXT for motion compensation\n");
-	mc_functions = mc_functions_mmxext;
-    } else if (config.flags & MM_ACCEL_X86_3DNOW) {
-	printf ("libmpeg2: Using 3DNOW for motion compensation\n");
-	mc_functions = mc_functions_3dnow;
-    } else if (config.flags & MM_ACCEL_X86_MMX) {
-	printf ("libmpeg2: Using MMX for motion compensation\n");
-	mc_functions = mc_functions_mmx;
-    } else
+    if (accel & MPEG2_ACCEL_X86_MMXEXT)
+	mpeg2_mc = mpeg2_mc_mmxext;
+    else if (accel & MPEG2_ACCEL_X86_3DNOW)
+	mpeg2_mc = mpeg2_mc_3dnow;
+    else if (accel & MPEG2_ACCEL_X86_MMX)
+	mpeg2_mc = mpeg2_mc_mmx;
+    else
+#endif
+#ifdef ARCH_PPC
+    if (accel & MPEG2_ACCEL_PPC_ALTIVEC)
+	mpeg2_mc = mpeg2_mc_altivec;
+    else
+#endif
+#ifdef ARCH_ALPHA
+    if (accel & MPEG2_ACCEL_ALPHA)
+	mpeg2_mc = mpeg2_mc_alpha;
+    else
 #endif
 #ifdef LIBMPEG2_MLIB
-    if (config.flags & MM_ACCEL_MLIB) {
-	printf ("libmpeg2: Using mlib for motion compensation\n");
-	mc_functions = mc_functions_mlib;
-    } else
+    if (accel & MPEG2_ACCEL_MLIB)
+	mpeg2_mc = mpeg2_mc_mlib;
+    else
 #endif
-    {
-	printf ("libmpeg2: No accelerated motion compensation found\n");
-	mc_functions = mc_functions_c;
-    }
+	mpeg2_mc = mpeg2_mc_c;
 }
 
 #define avg2(a,b) ((a+b+1)>>1)
 #define avg4(a,b,c,d) ((a+b+c+d+2)>>2)
 
-#define predict_(i) (ref[i])
+#define predict_o(i) (ref[i])
 #define predict_x(i) (avg2 (ref[i], ref[i+1]))
 #define predict_y(i) (avg2 (ref[i], (ref+stride)[i]))
-#define predict_xy(i) (avg4 (ref[i], ref[i+1], (ref+stride)[i], (ref+stride)[i+1]))
+#define predict_xy(i) (avg4 (ref[i], ref[i+1], \
+			     (ref+stride)[i], (ref+stride)[i+1]))
 
 #define put(predictor,i) dest[i] = predictor (i)
 #define avg(predictor,i) dest[i] = avg2 (predictor (i), dest[i])
 
 /* mc function template */
 
-#define MC_FUNC(op,xy)						\
-static void MC_##op##_##xy##16_c (uint8_t * dest, uint8_t * ref,\
-				 int stride, int height)	\
-{								\
-    do {							\
-	op (predict_##xy, 0);					\
-	op (predict_##xy, 1);					\
-	op (predict_##xy, 2);					\
-	op (predict_##xy, 3);					\
-	op (predict_##xy, 4);					\
-	op (predict_##xy, 5);					\
-	op (predict_##xy, 6);					\
-	op (predict_##xy, 7);					\
-	op (predict_##xy, 8);					\
-	op (predict_##xy, 9);					\
-	op (predict_##xy, 10);					\
-	op (predict_##xy, 11);					\
-	op (predict_##xy, 12);					\
-	op (predict_##xy, 13);					\
-	op (predict_##xy, 14);					\
-	op (predict_##xy, 15);					\
-	ref += stride;						\
-	dest += stride;						\
-    } while (--height);						\
-}								\
-static void MC_##op##_##xy##8_c (uint8_t * dest, uint8_t * ref,	\
-				int stride, int height)		\
-{								\
-    do {							\
-	op (predict_##xy, 0);					\
-	op (predict_##xy, 1);					\
-	op (predict_##xy, 2);					\
-	op (predict_##xy, 3);					\
-	op (predict_##xy, 4);					\
-	op (predict_##xy, 5);					\
-	op (predict_##xy, 6);					\
-	op (predict_##xy, 7);					\
-	ref += stride;						\
-	dest += stride;						\
-    } while (--height);						\
+#define MC_FUNC(op,xy)							\
+static void MC_##op##_##xy##_16_c (uint8_t * dest, const uint8_t * ref,	\
+				   const int stride, int height)	\
+{									\
+    do {								\
+	op (predict_##xy, 0);						\
+	op (predict_##xy, 1);						\
+	op (predict_##xy, 2);						\
+	op (predict_##xy, 3);						\
+	op (predict_##xy, 4);						\
+	op (predict_##xy, 5);						\
+	op (predict_##xy, 6);						\
+	op (predict_##xy, 7);						\
+	op (predict_##xy, 8);						\
+	op (predict_##xy, 9);						\
+	op (predict_##xy, 10);						\
+	op (predict_##xy, 11);						\
+	op (predict_##xy, 12);						\
+	op (predict_##xy, 13);						\
+	op (predict_##xy, 14);						\
+	op (predict_##xy, 15);						\
+	ref += stride;							\
+	dest += stride;							\
+    } while (--height);							\
+}									\
+static void MC_##op##_##xy##_8_c (uint8_t * dest, const uint8_t * ref,	\
+				  const int stride, int height)		\
+{									\
+    do {								\
+	op (predict_##xy, 0);						\
+	op (predict_##xy, 1);						\
+	op (predict_##xy, 2);						\
+	op (predict_##xy, 3);						\
+	op (predict_##xy, 4);						\
+	op (predict_##xy, 5);						\
+	op (predict_##xy, 6);						\
+	op (predict_##xy, 7);						\
+	ref += stride;							\
+	dest += stride;							\
+    } while (--height);							\
 }
 
 /* definitions of the actual mc functions */
 
-MC_FUNC (put,)
-MC_FUNC (avg,)
+MC_FUNC (put,o)
+MC_FUNC (avg,o)
 MC_FUNC (put,x)
 MC_FUNC (avg,x)
 MC_FUNC (put,y)
@@ -122,4 +126,4 @@
 MC_FUNC (put,xy)
 MC_FUNC (avg,xy)
 
-MOTION_COMP_EXTERN (c)
+MPEG2_MC_EXTERN (c)