Mercurial > mplayer.hg
annotate mp3lib/sr1.c @ 7743:a280cc3087ea
All right: The patch adresses two issues which I found, when I analyzed
the input from some DVDs with known subtitle-dropouts:
1. The packet-size at the beginning of the packet, which is used to
check, whether we got all fragments, is sometimes one byte too long. It
seems to be always padded to an even number, while the actual size can
be odd.
2. The original algorythm used to assemble the fragments relies on the
timestamps to check, whether a new packet begins. This has proven to be
unrelieable on some disks. So instead, I use the timestamp only to
check, whether it's been too long (defined as 0,01sec) since the last
fragment, which is probably indicating a broken packet, and normaly
starting a new packet when the last one has been finished.
patch by Christof Buergi <christof@buergi.lugs.ch>
author | arpi |
---|---|
date | Tue, 15 Oct 2002 00:47:17 +0000 |
parents | 8d21936b31d6 |
children | b22b29178258 |
rev | line source |
---|---|
1 | 1 // #define NEWBUFFERING |
2 //#define DEBUG_RESYNC | |
3 | |
4 /* 1 frame = 4608 byte PCM */ | |
5 | |
6 #ifdef __GNUC__ | |
7 #define LOCAL static inline | |
8 #else | |
9 #define LOCAL static _inline | |
10 #endif | |
11 | |
12 //#undef LOCAL | |
13 //#define LOCAL | |
14 | |
15 #include <stdlib.h> | |
16 #include <stdio.h> | |
17 #include <string.h> | |
18 #include <signal.h> | |
19 #include <math.h> | |
20 | |
21 #define real float | |
22 // #define int long | |
23 | |
24 #include "mpg123.h" | |
25 #include "huffman.h" | |
26 #include "mp3.h" | |
1040 | 27 #include "bswap.h" |
4262 | 28 #include "../cpudetect.h" |
29 #include "../liba52/mm_accel.h" | |
6138
523014df7d32
big cosmetics patch, cleanup of messages printed by mplayer and libs.
arpi
parents:
5888
diff
changeset
|
30 #include "../mp_msg.h" |
1 | 31 |
1045 | 32 #include "fastmemcpy.h" |
4262 | 33 |
34 #ifdef ARCH_X86 | |
35 #define CAN_COMPILE_X86_ASM | |
36 #endif | |
37 | |
1 | 38 //static FILE* mp3_file=NULL; |
39 | |
40 int MP3_frames=0; | |
41 int MP3_eof=0; | |
42 int MP3_pause=0; | |
43 int MP3_filesize=0; | |
44 int MP3_fpos=0; // current file position | |
45 int MP3_framesize=0; // current framesize | |
46 int MP3_bitrate=0; // current bitrate | |
47 int MP3_samplerate=0; // current samplerate | |
48 int MP3_resync=0; | |
49 int MP3_channels=0; | |
50 int MP3_bps=2; | |
51 | |
4150
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
52 static long outscale = 32768; |
1 | 53 #include "tabinit.c" |
54 | |
4150
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
55 #if 1 |
1 | 56 extern int mplayer_audio_read(char *buf,int size); |
57 | |
58 LOCAL int mp3_read(char *buf,int size){ | |
59 // int len=fread(buf,1,size,mp3_file); | |
60 int len=mplayer_audio_read(buf,size); | |
61 if(len>0) MP3_fpos+=len; | |
62 // if(len!=size) MP3_eof=1; | |
63 return len; | |
64 } | |
65 #else | |
66 extern int mp3_read(char *buf,int size); | |
67 #endif | |
68 | |
69 //void mp3_seek(int pos){ | |
70 // fseek(mp3_file,pos,SEEK_SET); | |
71 // return (MP3_fpos=ftell(mp3_file)); | |
72 //} | |
73 | |
74 /* Frame reader */ | |
75 | |
76 #define MAXFRAMESIZE 1280 | |
77 #define MAXFRAMESIZE2 (512+MAXFRAMESIZE) | |
78 | |
79 static int fsizeold=0,ssize=0; | |
80 static unsigned char bsspace[2][MAXFRAMESIZE2]; /* !!!!! */ | |
81 static unsigned char *bsbufold=bsspace[0]+512; | |
82 static unsigned char *bsbuf=bsspace[1]+512; | |
83 static int bsnum=0; | |
84 | |
85 static int bitindex; | |
86 static unsigned char *wordpointer; | |
87 static int bitsleft; | |
88 | |
4150
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
89 unsigned char *pcm_sample; /* outbuffer address */ |
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
90 int pcm_point = 0; /* outbuffer offset */ |
1 | 91 |
92 static struct frame fr; | |
93 | |
94 static int tabsel_123[2][3][16] = { | |
95 { {0,32,64,96,128,160,192,224,256,288,320,352,384,416,448,}, | |
96 {0,32,48,56, 64, 80, 96,112,128,160,192,224,256,320,384,}, | |
97 {0,32,40,48, 56, 64, 80, 96,112,128,160,192,224,256,320,} }, | |
98 | |
99 { {0,32,48,56,64,80,96,112,128,144,160,176,192,224,256,}, | |
100 {0,8,16,24,32,40,48,56,64,80,96,112,128,144,160,}, | |
101 {0,8,16,24,32,40,48,56,64,80,96,112,128,144,160,} } | |
102 }; | |
103 | |
104 static long freqs[9] = { 44100, 48000, 32000, 22050, 24000, 16000 , 11025 , 12000 , 8000 }; | |
105 | |
106 LOCAL unsigned int getbits(short number_of_bits) | |
107 { | |
108 unsigned long rval; | |
109 // if(MP3_frames>=7741) printf("getbits: bits=%d bitsleft=%d wordptr=%x\n",number_of_bits,bitsleft,wordpointer); | |
110 if((bitsleft-=number_of_bits)<0) return 0; | |
111 if(!number_of_bits) return 0; | |
112 rval = wordpointer[0]; | |
113 rval <<= 8; | |
114 rval |= wordpointer[1]; | |
115 rval <<= 8; | |
116 rval |= wordpointer[2]; | |
117 rval <<= bitindex; | |
118 rval &= 0xffffff; | |
119 bitindex += number_of_bits; | |
120 rval >>= (24-number_of_bits); | |
121 wordpointer += (bitindex>>3); | |
122 bitindex &= 7; | |
123 return rval; | |
124 } | |
125 | |
126 | |
127 LOCAL unsigned int getbits_fast(short number_of_bits) | |
128 { | |
129 unsigned long rval; | |
130 // if(MP3_frames>=7741) printf("getbits_fast: bits=%d bitsleft=%d wordptr=%x\n",number_of_bits,bitsleft,wordpointer); | |
131 if((bitsleft-=number_of_bits)<0) return 0; | |
132 if(!number_of_bits) return 0; | |
4321 | 133 #if defined(CAN_COMPILE_X86_ASM) |
1040 | 134 rval = bswap_16(*((unsigned short *)wordpointer)); |
1309
598e3047ce13
Add some preliminary support for non-x86 architectures to mplayer
jkeil
parents:
1276
diff
changeset
|
135 #else |
598e3047ce13
Add some preliminary support for non-x86 architectures to mplayer
jkeil
parents:
1276
diff
changeset
|
136 /* |
598e3047ce13
Add some preliminary support for non-x86 architectures to mplayer
jkeil
parents:
1276
diff
changeset
|
137 * we may not be able to address unaligned 16-bit data on non-x86 cpus. |
598e3047ce13
Add some preliminary support for non-x86 architectures to mplayer
jkeil
parents:
1276
diff
changeset
|
138 * Fall back to some portable code. |
598e3047ce13
Add some preliminary support for non-x86 architectures to mplayer
jkeil
parents:
1276
diff
changeset
|
139 */ |
598e3047ce13
Add some preliminary support for non-x86 architectures to mplayer
jkeil
parents:
1276
diff
changeset
|
140 rval = wordpointer[0] << 8 | wordpointer[1]; |
598e3047ce13
Add some preliminary support for non-x86 architectures to mplayer
jkeil
parents:
1276
diff
changeset
|
141 #endif |
1 | 142 rval <<= bitindex; |
143 rval &= 0xffff; | |
144 bitindex += number_of_bits; | |
145 rval >>= (16-number_of_bits); | |
146 wordpointer += (bitindex>>3); | |
147 bitindex &= 7; | |
148 return rval; | |
149 } | |
150 | |
151 LOCAL unsigned int get1bit(void) | |
152 { | |
153 unsigned char rval; | |
154 // if(MP3_frames>=7741) printf("get1bit: bitsleft=%d wordptr=%x\n",bitsleft,wordpointer); | |
155 if((--bitsleft)<0) return 0; | |
156 rval = *wordpointer << bitindex; | |
157 bitindex++; | |
158 wordpointer += (bitindex>>3); | |
159 bitindex &= 7; | |
160 return ((rval>>7)&1); | |
161 } | |
162 | |
163 LOCAL void set_pointer(long backstep) | |
164 { | |
165 // if(backstep!=512 && backstep>fsizeold) | |
166 // printf("\rWarning! backstep (%d>%d) \n",backstep,fsizeold); | |
167 wordpointer = bsbuf + ssize - backstep; | |
168 if (backstep) memcpy(wordpointer,bsbufold+fsizeold-backstep,backstep); | |
169 bitindex = 0; | |
170 bitsleft+=8*backstep; | |
171 // printf("Backstep %d (bitsleft=%d)\n",backstep,bitsleft); | |
172 } | |
173 | |
174 LOCAL int stream_head_read(unsigned char *hbuf,unsigned long *newhead){ | |
175 if(mp3_read(hbuf,4) != 4) return FALSE; | |
4321 | 176 #if defined(CAN_COMPILE_X86_ASM) |
1040 | 177 *newhead = bswap_32(*((unsigned long *)hbuf)); |
1309
598e3047ce13
Add some preliminary support for non-x86 architectures to mplayer
jkeil
parents:
1276
diff
changeset
|
178 #else |
598e3047ce13
Add some preliminary support for non-x86 architectures to mplayer
jkeil
parents:
1276
diff
changeset
|
179 /* |
598e3047ce13
Add some preliminary support for non-x86 architectures to mplayer
jkeil
parents:
1276
diff
changeset
|
180 * we may not be able to address unaligned 32-bit data on non-x86 cpus. |
598e3047ce13
Add some preliminary support for non-x86 architectures to mplayer
jkeil
parents:
1276
diff
changeset
|
181 * Fall back to some portable code. |
598e3047ce13
Add some preliminary support for non-x86 architectures to mplayer
jkeil
parents:
1276
diff
changeset
|
182 */ |
598e3047ce13
Add some preliminary support for non-x86 architectures to mplayer
jkeil
parents:
1276
diff
changeset
|
183 *newhead = |
598e3047ce13
Add some preliminary support for non-x86 architectures to mplayer
jkeil
parents:
1276
diff
changeset
|
184 hbuf[0] << 24 | |
598e3047ce13
Add some preliminary support for non-x86 architectures to mplayer
jkeil
parents:
1276
diff
changeset
|
185 hbuf[1] << 16 | |
598e3047ce13
Add some preliminary support for non-x86 architectures to mplayer
jkeil
parents:
1276
diff
changeset
|
186 hbuf[2] << 8 | |
598e3047ce13
Add some preliminary support for non-x86 architectures to mplayer
jkeil
parents:
1276
diff
changeset
|
187 hbuf[3]; |
598e3047ce13
Add some preliminary support for non-x86 architectures to mplayer
jkeil
parents:
1276
diff
changeset
|
188 #endif |
1040 | 189 return TRUE; |
1 | 190 } |
191 | |
192 LOCAL int stream_head_shift(unsigned char *hbuf,unsigned long *head){ | |
1040 | 193 *((unsigned long *)hbuf) >>= 8; |
1 | 194 if(mp3_read(hbuf+3,1) != 1) return 0; |
195 *head <<= 8; | |
196 *head |= hbuf[3]; | |
197 return 1; | |
198 } | |
199 | |
200 /* | |
201 * decode a header and write the information | |
202 * into the frame structure | |
203 */ | |
204 LOCAL int decode_header(struct frame *fr,unsigned long newhead){ | |
205 | |
206 // head_check: | |
1040 | 207 if( (newhead & 0xffe00000) != 0xffe00000 || |
1045 | 208 (newhead & 0x0000fc00) == 0x0000fc00) return FALSE; |
1 | 209 |
210 fr->lay = 4-((newhead>>17)&3); | |
211 // if(fr->lay!=3) return FALSE; | |
212 | |
213 if( newhead & ((long)1<<20) ) { | |
214 fr->lsf = (newhead & ((long)1<<19)) ? 0x0 : 0x1; | |
215 fr->mpeg25 = 0; | |
216 } else { | |
217 fr->lsf = 1; | |
218 fr->mpeg25 = 1; | |
219 } | |
220 | |
221 if(fr->mpeg25) | |
222 fr->sampling_frequency = 6 + ((newhead>>10)&0x3); | |
223 else | |
224 fr->sampling_frequency = ((newhead>>10)&0x3) + (fr->lsf*3); | |
225 | |
1166
95f6f14176c6
fr->sampling_frequency limitation (thanx to pl <p_l@tfz.net>)
arpi_esp
parents:
1045
diff
changeset
|
226 if(fr->sampling_frequency>8) return FALSE; // valid: 0..8 |
95f6f14176c6
fr->sampling_frequency limitation (thanx to pl <p_l@tfz.net>)
arpi_esp
parents:
1045
diff
changeset
|
227 |
1 | 228 fr->error_protection = ((newhead>>16)&0x1)^0x1; |
229 fr->bitrate_index = ((newhead>>12)&0xf); | |
230 fr->padding = ((newhead>>9)&0x1); | |
231 fr->extension = ((newhead>>8)&0x1); | |
232 fr->mode = ((newhead>>6)&0x3); | |
233 fr->mode_ext = ((newhead>>4)&0x3); | |
234 fr->copyright = ((newhead>>3)&0x1); | |
235 fr->original = ((newhead>>2)&0x1); | |
236 fr->emphasis = newhead & 0x3; | |
237 | |
238 MP3_channels = fr->stereo = (fr->mode == MPG_MD_MONO) ? 1 : 2; | |
239 | |
240 if(!fr->bitrate_index){ | |
241 // fprintf(stderr,"Free format not supported.\n"); | |
242 return FALSE; | |
243 } | |
244 | |
245 switch(fr->lay){ | |
246 case 2: | |
247 MP3_bitrate=tabsel_123[fr->lsf][1][fr->bitrate_index]; | |
248 MP3_samplerate=freqs[fr->sampling_frequency]; | |
249 fr->framesize = (long) MP3_bitrate * 144000; | |
250 fr->framesize /= MP3_samplerate; | |
251 MP3_framesize=fr->framesize; | |
252 fr->framesize += fr->padding - 4; | |
253 break; | |
254 case 3: | |
255 if(fr->lsf) | |
256 ssize = (fr->stereo == 1) ? 9 : 17; | |
257 else | |
258 ssize = (fr->stereo == 1) ? 17 : 32; | |
259 if(fr->error_protection) ssize += 2; | |
260 | |
261 MP3_bitrate=tabsel_123[fr->lsf][2][fr->bitrate_index]; | |
262 MP3_samplerate=freqs[fr->sampling_frequency]; | |
263 fr->framesize = (long) MP3_bitrate * 144000; | |
264 fr->framesize /= MP3_samplerate<<(fr->lsf); | |
265 MP3_framesize=fr->framesize; | |
266 fr->framesize += fr->padding - 4; | |
267 break; | |
7520 | 268 case 1: |
269 // fr->jsbound = (fr->mode == MPG_MD_JOINT_STEREO) ? (fr->mode_ext<<2)+4 : 32; | |
270 MP3_bitrate=tabsel_123[fr->lsf][0][fr->bitrate_index]; | |
271 MP3_samplerate=freqs[fr->sampling_frequency]; | |
272 fr->framesize = (long) MP3_bitrate * 12000; | |
273 fr->framesize /= MP3_samplerate; | |
274 MP3_framesize = fr->framesize; | |
275 fr->framesize = ((fr->framesize+fr->padding)<<2)-4; | |
276 break; | |
1 | 277 default: |
7520 | 278 MP3_framesize=fr->framesize=0; |
1 | 279 // fprintf(stderr,"Sorry, unsupported layer type.\n"); |
280 return 0; | |
281 } | |
282 if(fr->framesize<=0 || fr->framesize>MAXFRAMESIZE) return FALSE; | |
283 | |
284 return 1; | |
285 } | |
286 | |
287 | |
288 LOCAL int stream_read_frame_body(int size){ | |
289 | |
290 /* flip/init buffer for Layer 3 */ | |
291 bsbufold = bsbuf; | |
292 bsbuf = bsspace[bsnum]+512; | |
293 bsnum = (bsnum + 1) & 1; | |
294 | |
295 if( mp3_read(bsbuf,size) != size) return 0; // broken frame | |
296 | |
297 bitindex = 0; | |
298 wordpointer = (unsigned char *) bsbuf; | |
299 bitsleft=8*size; | |
300 | |
301 return 1; | |
302 } | |
303 | |
304 | |
305 /***************************************************************** | |
306 * read next frame return number of frames read. | |
307 */ | |
308 LOCAL int read_frame(struct frame *fr){ | |
309 unsigned long newhead; | |
310 unsigned char hbuf[8]; | |
311 int skipped,resyncpos; | |
312 int frames=0; | |
313 | |
314 resync: | |
315 skipped=MP3_fpos; | |
316 resyncpos=MP3_fpos; | |
317 | |
318 set_pointer(512); | |
319 fsizeold=fr->framesize; /* for Layer3 */ | |
320 if(!stream_head_read(hbuf,&newhead)) return 0; | |
321 if(!decode_header(fr,newhead)){ | |
322 // invalid header! try to resync stream! | |
323 #ifdef DEBUG_RESYNC | |
324 printf("ReSync: searching for a valid header... (pos=%X)\n",MP3_fpos); | |
325 #endif | |
326 retry1: | |
327 while(!decode_header(fr,newhead)){ | |
328 if(!stream_head_shift(hbuf,&newhead)) return 0; | |
329 } | |
330 resyncpos=MP3_fpos-4; | |
331 // found valid header | |
332 #ifdef DEBUG_RESYNC | |
333 printf("ReSync: found valid hdr at %X fsize=%ld ",resyncpos,fr->framesize); | |
334 #endif | |
335 if(!stream_read_frame_body(fr->framesize)) return 0; // read body | |
336 set_pointer(512); | |
337 fsizeold=fr->framesize; /* for Layer3 */ | |
338 if(!stream_head_read(hbuf,&newhead)) return 0; | |
339 if(!decode_header(fr,newhead)){ | |
340 // invalid hdr! go back... | |
341 #ifdef DEBUG_RESYNC | |
342 printf("INVALID\n"); | |
343 #endif | |
344 // mp3_seek(resyncpos+1); | |
345 if(!stream_head_read(hbuf,&newhead)) return 0; | |
346 goto retry1; | |
347 } | |
348 #ifdef DEBUG_RESYNC | |
349 printf("OK!\n"); | |
350 ++frames; | |
351 #endif | |
352 } | |
353 | |
354 skipped=resyncpos-skipped; | |
355 // if(skipped && !MP3_resync) printf("\r%d bad bytes skipped (resync at 0x%X) \n",skipped,resyncpos); | |
356 | |
357 // printf("%8X [%08X] %d %d (%d)%s%s\n",MP3_fpos-4,newhead,fr->framesize,fr->mode,fr->mode_ext,fr->error_protection?" CRC":"",fr->padding?" PAD":""); | |
358 | |
359 /* read main data into memory */ | |
360 if(!stream_read_frame_body(fr->framesize)){ | |
361 printf("\nBroken frame at 0x%X \n",resyncpos); | |
362 return 0; | |
363 } | |
364 ++frames; | |
365 | |
366 if(MP3_resync){ | |
367 MP3_resync=0; | |
368 if(frames==1) goto resync; | |
369 } | |
370 | |
371 return frames; | |
372 } | |
373 | |
4262 | 374 int _has_mmx = 0; |
375 | |
1 | 376 #include "layer2.c" |
377 #include "layer3.c" | |
378 | |
379 /******************************************************************************/ | |
380 /* PUBLIC FUNCTIONS */ | |
381 /******************************************************************************/ | |
382 | |
383 static int tables_done_flag=0; | |
384 | |
1245
03b7e2955a20
Added newest MMX-optimized decore which speedups decoding at least on 13% for any cpu.
nick
parents:
1166
diff
changeset
|
385 /* It's hidden from gcc in assembler */ |
6177 | 386 extern void __attribute__((__stdcall__)) dct64_MMX(real *, real *, real *); |
387 extern void __attribute__((__stdcall__)) dct64_MMX_3dnow(real *, real *, real *); | |
388 extern void __attribute__((__stdcall__)) dct64_MMX_3dnowex(real *, real *, real *); | |
389 extern void __attribute__((__stdcall__)) dct64_MMX_sse(real *, real *, real *); | |
390 void __attribute__((__stdcall__)) (*dct64_MMX_func)(real *, real *, real *); | |
1245
03b7e2955a20
Added newest MMX-optimized decore which speedups decoding at least on 13% for any cpu.
nick
parents:
1166
diff
changeset
|
391 |
3088
73c2e9304d08
changed to use cpudetect.c (to use change te #if 1 -> #if 0 :)
alex
parents:
1393
diff
changeset
|
392 #include "../cpudetect.h" |
73c2e9304d08
changed to use cpudetect.c (to use change te #if 1 -> #if 0 :)
alex
parents:
1393
diff
changeset
|
393 |
1 | 394 // Init decoder tables. Call first, once! |
732
e14114170e01
applied 'fakemono' patch by Bryan Chan scorpio@acm.org
arpi_esp
parents:
73
diff
changeset
|
395 #ifdef USE_FAKE_MONO |
e14114170e01
applied 'fakemono' patch by Bryan Chan scorpio@acm.org
arpi_esp
parents:
73
diff
changeset
|
396 void MP3_Init(int fakemono){ |
e14114170e01
applied 'fakemono' patch by Bryan Chan scorpio@acm.org
arpi_esp
parents:
73
diff
changeset
|
397 #else |
1 | 398 void MP3_Init(){ |
732
e14114170e01
applied 'fakemono' patch by Bryan Chan scorpio@acm.org
arpi_esp
parents:
73
diff
changeset
|
399 #endif |
4262 | 400 int accel=0; |
4150
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
401 |
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
402 #ifdef CAN_COMPILE_X86_ASM |
5888 | 403 // GetCpuCaps(&gCpuCaps); |
4262 | 404 if(gCpuCaps.hasMMX) accel |= MM_ACCEL_X86_MMX; |
405 if(gCpuCaps.hasMMX2) accel |= MM_ACCEL_X86_MMXEXT; | |
406 if(gCpuCaps.hasSSE) accel |= MM_ACCEL_X86_SSE; | |
407 if(gCpuCaps.has3DNow) accel |= MM_ACCEL_X86_3DNOW; | |
408 if(gCpuCaps.has3DNowExt) accel |= MM_ACCEL_X86_3DNOWEXT; | |
409 | |
410 if (accel & MM_ACCEL_X86_MMX) | |
4150
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
411 { |
4262 | 412 _has_mmx = 1; |
4150
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
413 make_decode_tables_MMX(outscale); |
6138
523014df7d32
big cosmetics patch, cleanup of messages printed by mplayer and libs.
arpi
parents:
5888
diff
changeset
|
414 mp_msg(MSGT_DECAUDIO,MSGL_V,"mp3lib: made decode tables with MMX optimization\n"); |
4150
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
415 } |
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
416 else |
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
417 make_decode_tables(outscale); |
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
418 #else |
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
419 make_decode_tables(outscale); |
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
420 #endif |
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
421 |
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
422 #ifdef USE_FAKE_MONO |
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
423 if (fakemono == 1) |
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
424 fr.synth = synth_1to1_l; |
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
425 else if (fakemono == 2) |
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
426 fr.synth = synth_1to1_r; |
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
427 else |
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
428 fr.synth = synth_1to1; |
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
429 #else |
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
430 fr.synth = synth_1to1; |
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
431 #endif |
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
432 fr.synth_mono = synth_1to1_mono2stereo; |
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
433 fr.down_sample = 0; |
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
434 fr.down_sample_sblimit = SBLIMIT>>(fr.down_sample); |
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
435 init_layer2(); |
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
436 init_layer3(fr.down_sample_sblimit); |
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
437 tables_done_flag = 1; |
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
438 |
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
439 dct36_func = dct36; |
6138
523014df7d32
big cosmetics patch, cleanup of messages printed by mplayer and libs.
arpi
parents:
5888
diff
changeset
|
440 mp_msg(MSGT_DECAUDIO,MSGL_V,"init layer2&3 finished, tables done\n"); |
4150
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
441 |
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
442 #ifdef CAN_COMPILE_X86_ASM |
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
443 #if 0 |
4262 | 444 if(accel & MM_ACCEL_X86_SSE) |
4150
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
445 { |
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
446 /* SSE version is buggy */ |
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
447 synth_func = synth_1to1_MMX; |
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
448 dct64_MMX_func = dct64_MMX_sse; |
6138
523014df7d32
big cosmetics patch, cleanup of messages printed by mplayer and libs.
arpi
parents:
5888
diff
changeset
|
449 mp_msg(MSGT_DECAUDIO,MSGL_V,"mp3lib: using SSE optimized decore!\n"); |
4150
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
450 } |
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
451 else |
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
452 #endif |
4262 | 453 if (accel & MM_ACCEL_X86_3DNOWEXT) |
4150
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
454 { |
4262 | 455 synth_func=synth_1to1_MMX; |
456 dct36_func=dct36_3dnowex; | |
7461
855ca896de24
pshufw is a mmx2 instruction, so don't use dct64_MMX_3dnowex on k6-3 which
arpi
parents:
6177
diff
changeset
|
457 dct64_MMX_func= (accel & MM_ACCEL_X86_MMXEXT) ? dct64_MMX_3dnowex : dct64_MMX_3dnow; |
6138
523014df7d32
big cosmetics patch, cleanup of messages printed by mplayer and libs.
arpi
parents:
5888
diff
changeset
|
458 mp_msg(MSGT_DECAUDIO,MSGL_V,"mp3lib: using 3DNow!Ex optimized decore!\n"); |
4150
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
459 } |
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
460 else |
4262 | 461 if (accel & MM_ACCEL_X86_3DNOW) |
4150
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
462 { |
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
463 synth_func = synth_1to1_MMX; |
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
464 dct36_func = dct36_3dnow; |
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
465 dct64_MMX_func = dct64_MMX_3dnow; |
6138
523014df7d32
big cosmetics patch, cleanup of messages printed by mplayer and libs.
arpi
parents:
5888
diff
changeset
|
466 mp_msg(MSGT_DECAUDIO,MSGL_V,"mp3lib: using 3DNow! optimized decore!\n"); |
4262 | 467 } |
468 else | |
469 if (accel & MM_ACCEL_X86_MMX) | |
470 { | |
4150
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
471 synth_func = synth_1to1_MMX; |
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
472 dct64_MMX_func = dct64_MMX; |
6138
523014df7d32
big cosmetics patch, cleanup of messages printed by mplayer and libs.
arpi
parents:
5888
diff
changeset
|
473 mp_msg(MSGT_DECAUDIO,MSGL_V,"mp3lib: using MMX optimized decore!\n"); |
4150
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
474 } |
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
475 else |
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
476 if (gCpuCaps.cpuType >= CPUTYPE_I586) |
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
477 { |
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
478 synth_func = synth_1to1_pent; |
6138
523014df7d32
big cosmetics patch, cleanup of messages printed by mplayer and libs.
arpi
parents:
5888
diff
changeset
|
479 mp_msg(MSGT_DECAUDIO,MSGL_V,"mp3lib: using Pentium optimized decore!\n"); |
4150
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
480 } |
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
481 else |
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
482 { |
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
483 synth_func = NULL; /* use default c version */ |
6138
523014df7d32
big cosmetics patch, cleanup of messages printed by mplayer and libs.
arpi
parents:
5888
diff
changeset
|
484 mp_msg(MSGT_DECAUDIO,MSGL_V,"mp3lib: using generic C decore!\n"); |
4150
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
485 } |
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
486 #else /* CAN_COMPILE_X86_ASM */ |
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
487 synth_func = NULL; |
6138
523014df7d32
big cosmetics patch, cleanup of messages printed by mplayer and libs.
arpi
parents:
5888
diff
changeset
|
488 mp_msg(MSGT_DECAUDIO,MSGL_V,"mp3lib: using generic C decore!\n"); |
4150
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
489 #endif |
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
490 |
732
e14114170e01
applied 'fakemono' patch by Bryan Chan scorpio@acm.org
arpi_esp
parents:
73
diff
changeset
|
491 #ifdef USE_FAKE_MONO |
e14114170e01
applied 'fakemono' patch by Bryan Chan scorpio@acm.org
arpi_esp
parents:
73
diff
changeset
|
492 if (fakemono == 1) |
e14114170e01
applied 'fakemono' patch by Bryan Chan scorpio@acm.org
arpi_esp
parents:
73
diff
changeset
|
493 fr.synth=synth_1to1_l; |
e14114170e01
applied 'fakemono' patch by Bryan Chan scorpio@acm.org
arpi_esp
parents:
73
diff
changeset
|
494 else if (fakemono == 2) |
e14114170e01
applied 'fakemono' patch by Bryan Chan scorpio@acm.org
arpi_esp
parents:
73
diff
changeset
|
495 fr.synth=synth_1to1_r; |
e14114170e01
applied 'fakemono' patch by Bryan Chan scorpio@acm.org
arpi_esp
parents:
73
diff
changeset
|
496 else |
e14114170e01
applied 'fakemono' patch by Bryan Chan scorpio@acm.org
arpi_esp
parents:
73
diff
changeset
|
497 fr.synth=synth_1to1; |
e14114170e01
applied 'fakemono' patch by Bryan Chan scorpio@acm.org
arpi_esp
parents:
73
diff
changeset
|
498 #else |
1 | 499 fr.synth=synth_1to1; |
732
e14114170e01
applied 'fakemono' patch by Bryan Chan scorpio@acm.org
arpi_esp
parents:
73
diff
changeset
|
500 #endif |
1 | 501 fr.synth_mono=synth_1to1_mono2stereo; |
502 fr.down_sample=0; | |
503 fr.down_sample_sblimit = SBLIMIT>>(fr.down_sample); | |
504 init_layer2(); | |
505 init_layer3(fr.down_sample_sblimit); | |
506 tables_done_flag=1; | |
507 } | |
508 | |
509 #if 0 | |
510 | |
511 void MP3_Close(){ | |
512 MP3_eof=1; | |
513 if(mp3_file) fclose(mp3_file); | |
514 mp3_file=NULL; | |
515 } | |
516 | |
517 // Open a file, init buffers. Call once per file! | |
518 int MP3_Open(char *filename,int buffsize){ | |
519 MP3_eof=1; // lock decoding | |
520 MP3_pause=1; // lock playing | |
521 if(mp3_file) MP3_Close(); // close prev. file | |
522 MP3_frames=0; | |
523 | |
524 mp3_file=fopen(filename,"rb"); | |
525 // printf("MP3_Open: file='%s'",filename); | |
526 // if(!mp3_file){ printf(" not found!\n"); return 0;} else printf("Ok!\n"); | |
527 if(!mp3_file) return 0; | |
528 | |
529 MP3_filesize=MP3_PrintTAG(); | |
530 fseek(mp3_file,0,SEEK_SET); | |
531 | |
532 MP3_InitBuffers(buffsize); | |
533 if(!tables_done_flag) MP3_Init(); | |
534 MP3_eof=0; // allow decoding | |
535 MP3_pause=0; // allow playing | |
536 return MP3_filesize; | |
537 } | |
538 | |
539 #endif | |
540 | |
541 // Read & decode a single frame. Called by sound driver. | |
542 int MP3_DecodeFrame(unsigned char *hova,short single){ | |
543 pcm_sample = hova; | |
544 pcm_point = 0; | |
545 if(!read_frame(&fr))return(0); | |
546 if(single==-2){ set_pointer(512); return(1); } | |
547 if(fr.error_protection) getbits(16); /* skip crc */ | |
548 fr.single=single; | |
549 switch(fr.lay){ | |
550 case 2: do_layer2(&fr,single);break; | |
551 case 3: do_layer3(&fr,single);break; | |
7520 | 552 case 1: |
553 printf("mp3lib: layer-1 audio not yet supported!\n"); | |
554 return 4608; | |
6138
523014df7d32
big cosmetics patch, cleanup of messages printed by mplayer and libs.
arpi
parents:
5888
diff
changeset
|
555 default: |
523014df7d32
big cosmetics patch, cleanup of messages printed by mplayer and libs.
arpi
parents:
5888
diff
changeset
|
556 return 0; // unsupported |
1 | 557 } |
558 // ++MP3_frames; | |
559 return(pcm_point?pcm_point:2); | |
560 } | |
561 | |
562 // Prints last frame header in ascii. | |
563 void MP3_PrintHeader(){ | |
564 static char *modes[4] = { "Stereo", "Joint-Stereo", "Dual-Channel", "Single-Channel" }; | |
565 static char *layers[4] = { "???" , "I", "II", "III" }; | |
566 | |
6138
523014df7d32
big cosmetics patch, cleanup of messages printed by mplayer and libs.
arpi
parents:
5888
diff
changeset
|
567 mp_msg(MSGT_DECAUDIO,MSGL_V,"\rMPEG %s, Layer %s, %ld Hz %d kbit %s, BPF: %ld\n", |
1 | 568 fr.mpeg25 ? "2.5" : (fr.lsf ? "2.0" : "1.0"), |
569 layers[fr.lay],freqs[fr.sampling_frequency], | |
570 tabsel_123[fr.lsf][fr.lay-1][fr.bitrate_index], | |
571 modes[fr.mode],fr.framesize+4); | |
6138
523014df7d32
big cosmetics patch, cleanup of messages printed by mplayer and libs.
arpi
parents:
5888
diff
changeset
|
572 mp_msg(MSGT_DECAUDIO,MSGL_V,"Channels: %d, copyright: %s, original: %s, CRC: %s, emphasis: %d\n", |
1 | 573 fr.stereo,fr.copyright?"Yes":"No", |
574 fr.original?"Yes":"No",fr.error_protection?"Yes":"No", | |
575 fr.emphasis); | |
576 } | |
577 | |
4150
01d0a5fabf65
runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
alex
parents:
3219
diff
changeset
|
578 #if 0 |
1 | 579 #include "genre.h" |
580 | |
581 // Read & print ID3 TAG. Do not call when playing!!! returns filesize. | |
582 int MP3_PrintTAG(){ | |
583 struct id3tag { | |
584 char tag[3]; | |
585 char title[30]; | |
586 char artist[30]; | |
587 char album[30]; | |
588 char year[4]; | |
589 char comment[30]; | |
590 unsigned char genre; | |
591 }; | |
592 struct id3tag tag; | |
593 char title[31]={0,}; | |
594 char artist[31]={0,}; | |
595 char album[31]={0,}; | |
596 char year[5]={0,}; | |
597 char comment[31]={0,}; | |
598 char genre[31]={0,}; | |
599 int fsize; | |
600 int ret; | |
601 | |
602 fseek(mp3_file,0,SEEK_END); | |
603 fsize=ftell(mp3_file); | |
604 if(fseek(mp3_file,-128,SEEK_END)) return fsize; | |
605 ret=fread(&tag,128,1,mp3_file); | |
606 if(ret!=1 || tag.tag[0]!='T' || tag.tag[1]!='A' || tag.tag[2]!='G') return fsize; | |
607 | |
608 strncpy(title,tag.title,30); | |
609 strncpy(artist,tag.artist,30); | |
610 strncpy(album,tag.album,30); | |
611 strncpy(year,tag.year,4); | |
612 strncpy(comment,tag.comment,30); | |
613 | |
614 if ( tag.genre <= sizeof(genre_table)/sizeof(*genre_table) ) { | |
615 strncpy(genre, genre_table[tag.genre], 30); | |
616 } else { | |
617 strncpy(genre,"Unknown",30); | |
618 } | |
619 | |
620 // printf("\n"); | |
621 printf("Title : %30s Artist: %s\n",title,artist); | |
622 printf("Album : %30s Year : %4s\n",album,year); | |
623 printf("Comment: %30s Genre : %s\n",comment,genre); | |
624 printf("\n"); | |
625 return fsize-128; | |
626 } | |
627 | |
628 #endif |