[Mplayer-cvslog] CVS: main/libao2 pl_resample.c,1.6,1.7 fir.h,1.5,1.6

Anders Johansson anders at mplayer.dev.hu
Thu Feb 21 17:05:12 CET 2002


Update of /cvsroot/mplayer/main/libao2
In directory mplayer:/var/tmp.root/cvs-serv12167/libao2

Modified Files:
	pl_resample.c fir.h 
Log Message:
Cleanup and comment

Index: pl_resample.c
===================================================================
RCS file: /cvsroot/mplayer/main/libao2/pl_resample.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- pl_resample.c	16 Feb 2002 13:08:14 -0000	1.6
+++ pl_resample.c	21 Feb 2002 16:05:09 -0000	1.7
@@ -48,13 +48,26 @@
 */
 
 #if !defined(HAVE_SSE) && !defined(HAVE_3DNOW) //This machine is slow
-#define L8    	1	// Filter bank type
+
 #define W 	W8	// Filter bank parameters
 #define L   	8	// Filter length
-#else	// Fat machine
-#define L16	1
+#ifdef HAVE_MMX
+#define FIR(x,w,y) *y=(int16_t)firn(x,w,8);
+#else /* HAVE_MMX */
+// Unrolled loop to speed up execution 
+#define FIR(x,w,y){ \
+  int16_t a = (w[0]*x[0]+w[1]*x[1]+w[2]*x[2]+w[3]*x[3]) >> 16; \
+  int16_t b = (w[4]*x[4]+w[5]*x[5]+w[6]*x[6]+w[7]*x[7]) >> 16; \
+  y[0]      = a+b; \
+}
+#endif /* HAVE_MMX */
+
+#else  /* Fast machine */
+
 #define W 	W16
 #define L   	16
+#define FIR(x,w,y) *y=(int16_t)firn(x,w,16);
+
 #endif
 
 #define CH  6	// Max number of channels
@@ -192,7 +205,7 @@
       register uint16_t	i = inc;
       if(wi<level) i++;
 
-      UPDATE_QUE(in,x,xi);
+      xi=updateq(x,in,xi,L);
       in+=nch;
       while(i--){
 	// Run the FIR filter
@@ -242,9 +255,8 @@
 
     while(in < end){
 
-      UPDATE_QUE(in,x,xi);
+      xi=updateq(x,in,xi,L);
       in+=nch;
-      
       if(!--i){
 	// Run the FIR filter
 	FIR((&x[xi]),(&pl_resample.w[wi*L]),out);

Index: fir.h
===================================================================
RCS file: /cvsroot/mplayer/main/libao2/fir.h,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- fir.h	16 Feb 2002 13:08:14 -0000	1.5
+++ fir.h	21 Feb 2002 16:05:09 -0000	1.6
@@ -11,14 +11,13 @@
 #ifndef __FIR_H__
 #define __FIR_H__
 
-/* Fixpoint 16 bit fir filter FIR filter. The filter is implemented
-both in C and MMX assembly. The filter consists of one macro
-UPDATE_QUE and one inline function firn. The macro can be used for
-adding new data to the circular buffer used by the filter firn.
-Limitations: max length of n = 16*4 and n must be multiple of 4 (pad
-fiter with zeros for other lengths). Sometimes it works with filters
-longer than 4*16 (the problem is overshoot and the acumulated energy
-in the filter taps). */
+/* Fixpoint 16 bit FIR filter. The filter is implemented both in C and
+MMX assembly. The filter consists of the two inline functions updateq
+and firn, update q is used for adding new data to the circular buffer
+used by the filter firn. Limitations: max length of n = 16*4 and n
+must be multiple of 4 (pad fiter with zeros for other lengths). 
+Sometimes it works with filters longer than 4*16 (the problem is
+overshoot and the acumulated energy in the filter taps). */
 
 #ifdef HAVE_MMX
 inline int32_t firn(int16_t* x, int16_t* w, int16_t n)
@@ -60,26 +59,14 @@
 
 #endif /* HAVE_MMX */
 
-// Macro to add new data to circular queue
-#define UPDATE_QUE(ind,xq,xid) \
-  xid=(--xid)&(L-1);      \
-  xq[xid]=xq[xid+L]=*(ind);
-
-#ifdef L8
-#ifdef HAVE_MMX
-#define FIR(x,w,y) *y=(int16_t)firn(x,w,8);
-#else /* HAVE_MMX */
-// Unrolled loop to speed up execution 
-#define FIR(x,w,y){ \
-  int16_t a = (w[0]*x[0]+w[1]*x[1]+w[2]*x[2]+w[3]*x[3]) >> 16; \
-  int16_t b = (w[4]*x[4]+w[5]*x[5]+w[6]*x[6]+w[7]*x[7]) >> 16; \
-  y[0]      = a+b; \
+/* Add new data to circular queue designed to be used with a FIR
+   filter. xq is the circular queue, in pointing at the new sample, xi
+   current index for in xq and l the lenght of the filter */
+inline uint16_t updateq(int16_t* xq, int16_t* in, uint16_t xi, uint16_t l)  
+{
+  xq[xi]=xq[xi+l]=*in;
+  return (--xi)&(l-1);      \
 }
-#endif /* HAVE_MMX */
-#endif /* L8 */
-
-#ifdef L16
-#define FIR(x,w,y) *y=(int16_t)firn(x,w,16);
-#endif /* L16 */
 
 #endif /* __FIR_H__ */
+




More information about the MPlayer-cvslog mailing list