annotate mp3lib/sr1.c @ 7429:7a221aaf7012

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