annotate liba52/test.c @ 18385:4cdb4082d899

French Fixes by Pierre Lombard, (and 10l to me for not checking they were conflicts on my tree before committing, so previous version was probably not even building cleanly).
author gpoirier
date Thu, 04 May 2006 12:36:34 +0000
parents 4e7d8679d6d8
children 531116b7693d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3396
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
1
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
2 // liba52 sample by A'rpi/ESP-team
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
3 // reads ac3 stream form stdin, decodes and downmix to s16 stereo pcm and
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
4 // writes it to stdout. resulting stream playbackable with sox:
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
5 // play -c 2 -r 48000 out.sw
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
6
3507
a57fce4ac936 benchmarking code (#define TIMING)
michael
parents: 3396
diff changeset
7 //#define TIMING //needs Pentium or newer
a57fce4ac936 benchmarking code (#define TIMING)
michael
parents: 3396
diff changeset
8
3396
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
9 #include <stdio.h>
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
10 #include <stdlib.h>
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
11 #include <inttypes.h>
12966
4e7d8679d6d8 compilation fix for test program
reimar
parents: 3908
diff changeset
12 #include <string.h>
3396
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
13
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
14 #include "a52.h"
3908
0cc94b1eec0f runtime cpudetect in liba52 way
michael
parents: 3579
diff changeset
15 #include "mm_accel.h"
3579
831860fada69 runtime cpu detection for the idct
michael
parents: 3565
diff changeset
16 #include "../cpudetect.h"
3396
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
17
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
18 static sample_t * samples;
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
19 static a52_state_t state;
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
20 static uint8_t buf[3840];
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
21 static int buf_size=0;
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
22
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
23 static int16_t out_buf[6*256*6];
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
24
12966
4e7d8679d6d8 compilation fix for test program
reimar
parents: 3908
diff changeset
25 void mp_msg_c( int x, const char *format, ... ) // stub for cpudetect.c
4e7d8679d6d8 compilation fix for test program
reimar
parents: 3908
diff changeset
26 {
4e7d8679d6d8 compilation fix for test program
reimar
parents: 3908
diff changeset
27 }
4e7d8679d6d8 compilation fix for test program
reimar
parents: 3908
diff changeset
28
3507
a57fce4ac936 benchmarking code (#define TIMING)
michael
parents: 3396
diff changeset
29 #ifdef TIMING
a57fce4ac936 benchmarking code (#define TIMING)
michael
parents: 3396
diff changeset
30 static inline long long rdtsc()
a57fce4ac936 benchmarking code (#define TIMING)
michael
parents: 3396
diff changeset
31 {
a57fce4ac936 benchmarking code (#define TIMING)
michael
parents: 3396
diff changeset
32 long long l;
a57fce4ac936 benchmarking code (#define TIMING)
michael
parents: 3396
diff changeset
33 asm volatile( "rdtsc\n\t"
a57fce4ac936 benchmarking code (#define TIMING)
michael
parents: 3396
diff changeset
34 : "=A" (l)
a57fce4ac936 benchmarking code (#define TIMING)
michael
parents: 3396
diff changeset
35 );
a57fce4ac936 benchmarking code (#define TIMING)
michael
parents: 3396
diff changeset
36 // printf("%d\n", int(l/1000));
a57fce4ac936 benchmarking code (#define TIMING)
michael
parents: 3396
diff changeset
37 return l;
a57fce4ac936 benchmarking code (#define TIMING)
michael
parents: 3396
diff changeset
38 }
a57fce4ac936 benchmarking code (#define TIMING)
michael
parents: 3396
diff changeset
39
a57fce4ac936 benchmarking code (#define TIMING)
michael
parents: 3396
diff changeset
40 #define STARTTIMING t=rdtsc();
a57fce4ac936 benchmarking code (#define TIMING)
michael
parents: 3396
diff changeset
41 #define ENDTIMING sum+=rdtsc()-t; t=rdtsc();
a57fce4ac936 benchmarking code (#define TIMING)
michael
parents: 3396
diff changeset
42 #else
a57fce4ac936 benchmarking code (#define TIMING)
michael
parents: 3396
diff changeset
43 #define STARTTIMING ;
a57fce4ac936 benchmarking code (#define TIMING)
michael
parents: 3396
diff changeset
44 #define ENDTIMING ;
a57fce4ac936 benchmarking code (#define TIMING)
michael
parents: 3396
diff changeset
45 #endif
a57fce4ac936 benchmarking code (#define TIMING)
michael
parents: 3396
diff changeset
46
a57fce4ac936 benchmarking code (#define TIMING)
michael
parents: 3396
diff changeset
47
3396
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
48 int main(){
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
49 int accel=0;
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
50 int sample_rate=0;
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
51 int bit_rate=0;
3507
a57fce4ac936 benchmarking code (#define TIMING)
michael
parents: 3396
diff changeset
52 #ifdef TIMING
3511
70a686041bbe better benchmarking
michael
parents: 3507
diff changeset
53 long long t, sum=0, min=256*256*256*64;
3507
a57fce4ac936 benchmarking code (#define TIMING)
michael
parents: 3396
diff changeset
54 #endif
3396
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
55
3579
831860fada69 runtime cpu detection for the idct
michael
parents: 3565
diff changeset
56 FILE *temp= stdout;
831860fada69 runtime cpu detection for the idct
michael
parents: 3565
diff changeset
57 stdout= stderr; //EVIL HACK FIXME
831860fada69 runtime cpu detection for the idct
michael
parents: 3565
diff changeset
58 GetCpuCaps(&gCpuCaps);
831860fada69 runtime cpu detection for the idct
michael
parents: 3565
diff changeset
59 stdout= temp;
3908
0cc94b1eec0f runtime cpudetect in liba52 way
michael
parents: 3579
diff changeset
60 // gCpuCaps.hasMMX=0;
0cc94b1eec0f runtime cpudetect in liba52 way
michael
parents: 3579
diff changeset
61 // gCpuCaps.hasSSE=0;
0cc94b1eec0f runtime cpudetect in liba52 way
michael
parents: 3579
diff changeset
62 if(gCpuCaps.hasMMX) accel |= MM_ACCEL_X86_MMX;
0cc94b1eec0f runtime cpudetect in liba52 way
michael
parents: 3579
diff changeset
63 if(gCpuCaps.hasMMX2) accel |= MM_ACCEL_X86_MMXEXT;
0cc94b1eec0f runtime cpudetect in liba52 way
michael
parents: 3579
diff changeset
64 if(gCpuCaps.hasSSE) accel |= MM_ACCEL_X86_SSE;
0cc94b1eec0f runtime cpudetect in liba52 way
michael
parents: 3579
diff changeset
65 if(gCpuCaps.has3DNow) accel |= MM_ACCEL_X86_3DNOW;
0cc94b1eec0f runtime cpudetect in liba52 way
michael
parents: 3579
diff changeset
66 // if(gCpuCaps.has3DNowExt) accel |= MM_ACCEL_X86_3DNOWEXT;
3579
831860fada69 runtime cpu detection for the idct
michael
parents: 3565
diff changeset
67
3396
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
68 samples = a52_init (accel);
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
69 if (samples == NULL) {
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
70 fprintf (stderr, "A52 init failed\n");
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
71 return 1;
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
72 }
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
73
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
74 while(1){
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
75 int length,i;
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
76 int16_t *s16;
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
77 sample_t level=1, bias=384;
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
78 int flags=0;
3565
7f7991864b96 use resample.c functions
arpi
parents: 3511
diff changeset
79 int channels=0;
3396
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
80
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
81 while(buf_size<7){
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
82 int c=getchar();
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
83 if(c<0) goto eof;
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
84 buf[buf_size++]=c;
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
85 }
3507
a57fce4ac936 benchmarking code (#define TIMING)
michael
parents: 3396
diff changeset
86 STARTTIMING
3396
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
87 length = a52_syncinfo (buf, &flags, &sample_rate, &bit_rate);
3507
a57fce4ac936 benchmarking code (#define TIMING)
michael
parents: 3396
diff changeset
88 ENDTIMING
3396
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
89 if(!length){
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
90 // bad file => resync
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
91 memcpy(buf,buf+1,6);
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
92 --buf_size;
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
93 continue;
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
94 }
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
95 fprintf(stderr,"sync. %d bytes 0x%X %d Hz %d kbit\n",length,flags,sample_rate,bit_rate);
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
96 while(buf_size<length){
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
97 buf[buf_size++]=getchar();
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
98 }
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
99
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
100 buf_size=0;
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
101
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
102 // decode:
3908
0cc94b1eec0f runtime cpudetect in liba52 way
michael
parents: 3579
diff changeset
103 flags=A52_STEREO; //A52_STEREO; //A52_DOLBY; //A52_STEREO; // A52_DOLBY // A52_2F2R // A52_3F2R | A52_LFE
3565
7f7991864b96 use resample.c functions
arpi
parents: 3511
diff changeset
104 channels=2;
7f7991864b96 use resample.c functions
arpi
parents: 3511
diff changeset
105
3396
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
106 flags |= A52_ADJUST_LEVEL;
3507
a57fce4ac936 benchmarking code (#define TIMING)
michael
parents: 3396
diff changeset
107 STARTTIMING
3396
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
108 if (a52_frame (&state, buf, &flags, &level, bias))
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
109 { fprintf(stderr,"error at decoding\n"); continue; }
3507
a57fce4ac936 benchmarking code (#define TIMING)
michael
parents: 3396
diff changeset
110 ENDTIMING
3396
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
111
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
112 // a52_dynrng (&state, NULL, NULL); // disable dynamic range compensation
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
113
3579
831860fada69 runtime cpu detection for the idct
michael
parents: 3565
diff changeset
114 STARTTIMING
3908
0cc94b1eec0f runtime cpudetect in liba52 way
michael
parents: 3579
diff changeset
115 a52_resample_init(accel,flags,channels);
3396
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
116 s16 = out_buf;
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
117 for (i = 0; i < 6; i++) {
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
118 if (a52_block (&state, samples))
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
119 { fprintf(stderr,"error at sampling\n"); break; }
3565
7f7991864b96 use resample.c functions
arpi
parents: 3511
diff changeset
120 // float->int + channels interleaving:
7f7991864b96 use resample.c functions
arpi
parents: 3511
diff changeset
121 s16+=a52_resample(samples,s16);
3579
831860fada69 runtime cpu detection for the idct
michael
parents: 3565
diff changeset
122 ENDTIMING
3396
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
123 }
3511
70a686041bbe better benchmarking
michael
parents: 3507
diff changeset
124 #ifdef TIMING
70a686041bbe better benchmarking
michael
parents: 3507
diff changeset
125 if(sum<min) min=sum;
70a686041bbe better benchmarking
michael
parents: 3507
diff changeset
126 sum=0;
70a686041bbe better benchmarking
michael
parents: 3507
diff changeset
127 #endif
3908
0cc94b1eec0f runtime cpudetect in liba52 way
michael
parents: 3579
diff changeset
128 fwrite(out_buf,6*256*2*channels,1,stdout);
3396
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
129
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
130 }
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
131
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
132 eof:
3507
a57fce4ac936 benchmarking code (#define TIMING)
michael
parents: 3396
diff changeset
133 #ifdef TIMING
3511
70a686041bbe better benchmarking
michael
parents: 3507
diff changeset
134 fprintf(stderr, "%4.4fk cycles ",min/1000.0);
70a686041bbe better benchmarking
michael
parents: 3507
diff changeset
135 sum=0;
3507
a57fce4ac936 benchmarking code (#define TIMING)
michael
parents: 3396
diff changeset
136 #endif
3396
098634f41331 sample program for testing liba52
arpi
parents:
diff changeset
137 }