changeset 3565:7f7991864b96

use resample.c functions
author arpi
date Mon, 17 Dec 2001 17:21:50 +0000
parents e092aeeb966a
children 92b3028b10f3
files liba52/test.c
diffstat 1 files changed, 6 insertions(+), 113 deletions(-) [+]
line wrap: on
line diff
--- a/liba52/test.c	Mon Dec 17 17:15:16 2001 +0000
+++ b/liba52/test.c	Mon Dec 17 17:21:50 2001 +0000
@@ -38,111 +38,6 @@
 #endif
 
 
-static inline int16_t convert (int32_t i)
-{
-    if (i > 0x43c07fff)
-	return 32767;
-    else if (i < 0x43bf8000)
-	return -32768;
-    else
-	return i - 0x43c00000;
-}
-
-static inline void float_to_int (float * _f, int16_t * s16, int flags)
-{
-    int i;
-    int32_t * f = (int32_t *) _f;
-
-    switch (flags) {
-    case A52_MONO:
-	for (i = 0; i < 256; i++) {
-	    s16[5*i] = s16[5*i+1] = s16[5*i+2] = s16[5*i+3] = 0;
-	    s16[5*i+4] = convert (f[i]);
-	}
-	break;
-    case A52_CHANNEL:
-    case A52_STEREO:
-    case A52_DOLBY:
-	for (i = 0; i < 256; i++) {
-	    s16[2*i] = convert (f[i]);
-	    s16[2*i+1] = convert (f[i+256]);
-	}
-	break;
-    case A52_3F:
-	for (i = 0; i < 256; i++) {
-	    s16[5*i] = convert (f[i]);
-	    s16[5*i+1] = convert (f[i+512]);
-	    s16[5*i+2] = s16[5*i+3] = 0;
-	    s16[5*i+4] = convert (f[i+256]);
-	}
-	break;
-    case A52_2F2R:
-	for (i = 0; i < 256; i++) {
-	    s16[4*i] = convert (f[i]);
-	    s16[4*i+1] = convert (f[i+256]);
-	    s16[4*i+2] = convert (f[i+512]);
-	    s16[4*i+3] = convert (f[i+768]);
-	}
-	break;
-    case A52_3F2R:
-	for (i = 0; i < 256; i++) {
-	    s16[5*i] = convert (f[i]);
-	    s16[5*i+1] = convert (f[i+512]);
-	    s16[5*i+2] = convert (f[i+768]);
-	    s16[5*i+3] = convert (f[i+1024]);
-	    s16[5*i+4] = convert (f[i+256]);
-	}
-	break;
-    case A52_MONO | A52_LFE:
-	for (i = 0; i < 256; i++) {
-	    s16[6*i] = s16[6*i+1] = s16[6*i+2] = s16[6*i+3] = 0;
-	    s16[6*i+4] = convert (f[i+256]);
-	    s16[6*i+5] = convert (f[i]);
-	}
-	break;
-    case A52_CHANNEL | A52_LFE:
-    case A52_STEREO | A52_LFE:
-    case A52_DOLBY | A52_LFE:
-	for (i = 0; i < 256; i++) {
-	    s16[6*i] = convert (f[i+256]);
-	    s16[6*i+1] = convert (f[i+512]);
-	    s16[6*i+2] = s16[6*i+3] = s16[6*i+4] = 0;
-	    s16[6*i+5] = convert (f[i]);
-	}
-	break;
-    case A52_3F | A52_LFE:
-	for (i = 0; i < 256; i++) {
-	    s16[6*i] = convert (f[i+256]);
-	    s16[6*i+1] = convert (f[i+768]);
-	    s16[6*i+2] = s16[6*i+3] = 0;
-	    s16[6*i+4] = convert (f[i+512]);
-	    s16[6*i+5] = convert (f[i]);
-	}
-	break;
-    case A52_2F2R | A52_LFE:
-	for (i = 0; i < 256; i++) {
-	    s16[6*i] = convert (f[i+256]);
-	    s16[6*i+1] = convert (f[i+512]);
-	    s16[6*i+2] = convert (f[i+768]);
-	    s16[6*i+3] = convert (f[i+1024]);
-	    s16[6*i+4] = 0;
-	    s16[6*i+5] = convert (f[i]);
-	}
-	break;
-    case A52_3F2R | A52_LFE:
-	for (i = 0; i < 256; i++) {
-	    s16[6*i] = convert (f[i+256]);
-	    s16[6*i+1] = convert (f[i+768]);
-	    s16[6*i+2] = convert (f[i+1024]);
-	    s16[6*i+3] = convert (f[i+1280]);
-	    s16[6*i+4] = convert (f[i+512]);
-	    s16[6*i+5] = convert (f[i]);
-	}
-	break;
-    }
-}
-
-
 int main(){
 int accel=0;
 int sample_rate=0;
@@ -162,6 +57,7 @@
     int16_t *s16;
     sample_t level=1, bias=384;
     int flags=0;
+    int channels=0;
 
     while(buf_size<7){
 	int c=getchar();
@@ -186,6 +82,8 @@
 
     // decode:
     flags=A52_STEREO; // A52_DOLBY // A52_2F2R // A52_3F2R | A52_LFE
+    channels=2;
+    
     flags |= A52_ADJUST_LEVEL;
 STARTTIMING
     if (a52_frame (&state, buf, &flags, &level, bias))
@@ -194,20 +92,15 @@
 
     // a52_dynrng (&state, NULL, NULL); // disable dynamic range compensation
 
+    a52_resample_init(flags,channels);
     s16 = out_buf;
     for (i = 0; i < 6; i++) {
-	int32_t * f = (int32_t *) samples;
-	int i;
 STARTTIMING
 	if (a52_block (&state, samples))
 	    { fprintf(stderr,"error at sampling\n"); break; }
 ENDTIMING
-	// resample to STEREO/DOLBY:
-	for (i = 0; i < 256; i++) {
-	    s16[2*i] = convert (f[i]);
-	    s16[2*i+1] = convert (f[i+256]);
-	}
-	s16+=2*i;
+	// float->int + channels interleaving:
+	s16+=a52_resample(samples,s16);
     }
 #ifdef TIMING
 if(sum<min) min=sum;