mpg123.h 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370
  1. /*
  2. * mpg123 defines
  3. * used source: musicout.h from mpegaudio package
  4. */
  5. #ifdef PLAN9
  6. #include <sys/types.h>
  7. #include <select.h>
  8. #include <time.h>
  9. #include <stdlib.h>
  10. #include <unistd.h>
  11. char* strdup(char*);
  12. # define M_PI 3.14159265358979323846
  13. # define M_SQRT2 1.41421356237309504880
  14. #endif
  15. #include <stdio.h>
  16. #include <string.h>
  17. #include <signal.h>
  18. #ifndef WIN32
  19. #include <signal.h>
  20. #include <unistd.h>
  21. #endif
  22. #include <math.h>
  23. typedef unsigned char byte;
  24. #ifdef OS2
  25. #include <float.h>
  26. #endif
  27. #define MPG123_REMOTE
  28. #ifdef HPUX
  29. #define random rand
  30. #define srandom srand
  31. #endif
  32. #define FRONTEND_SAJBER 1
  33. #define FRONTEND_TK3PLAY 2
  34. #define SKIP_JUNK 1
  35. #ifdef _WIN32 /* Win32 Additions By Tony Million */
  36. # undef WIN32
  37. # define WIN32
  38. # define M_PI 3.14159265358979323846
  39. # define M_SQRT2 1.41421356237309504880
  40. # define REAL_IS_FLOAT
  41. # define NEW_DCT9
  42. # define random rand
  43. # define srandom srand
  44. # undef MPG123_REMOTE /* Get rid of this stuff for Win32 */
  45. #endif
  46. #include "xfermem.h"
  47. #ifdef SUNOS
  48. #define memmove(dst,src,size) bcopy(src,dst,size)
  49. #endif
  50. #ifdef REAL_IS_FLOAT
  51. # define real float
  52. #elif defined(REAL_IS_LONG_DOUBLE)
  53. # define real long double
  54. #else
  55. # define real double
  56. #endif
  57. #ifdef __GNUC__
  58. #define INLINE inline
  59. #else
  60. #define INLINE
  61. #endif
  62. #include "audio.h"
  63. /* AUDIOBUFSIZE = n*64 with n=1,2,3 ... */
  64. #define AUDIOBUFSIZE 16384
  65. #define FALSE 0
  66. #define TRUE 1
  67. #define MAX_NAME_SIZE 81
  68. #define SBLIMIT 32
  69. #define SCALE_BLOCK 12
  70. #define SSLIMIT 18
  71. #define MPG_MD_STEREO 0
  72. #define MPG_MD_JOINT_STEREO 1
  73. #define MPG_MD_DUAL_CHANNEL 2
  74. #define MPG_MD_MONO 3
  75. #define MAXOUTBURST 32768
  76. /* Pre Shift fo 16 to 8 bit converter table */
  77. #define AUSHIFT (3)
  78. struct al_table
  79. {
  80. short bits;
  81. short d;
  82. };
  83. struct frame {
  84. struct al_table *alloc;
  85. int (*synth)(real *,int,unsigned char *,int *);
  86. int (*synth_mono)(real *,unsigned char *,int *);
  87. int stereo;
  88. int jsbound;
  89. int single;
  90. int II_sblimit;
  91. int down_sample_sblimit;
  92. int lsf;
  93. int mpeg25;
  94. int down_sample;
  95. int header_change;
  96. int lay;
  97. int (*do_layer)(struct frame *fr,int,struct audio_info_struct *);
  98. int error_protection;
  99. int bitrate_index;
  100. int sampling_frequency;
  101. int padding;
  102. int extension;
  103. int mode;
  104. int mode_ext;
  105. int copyright;
  106. int original;
  107. int emphasis;
  108. int framesize; /* computed framesize */
  109. };
  110. struct parameter {
  111. int aggressive; /* renice to max. priority */
  112. int shuffle; /* shuffle/random play */
  113. int remote; /* remote operation */
  114. int outmode; /* where to out the decoded sampels */
  115. int quiet; /* shut up! */
  116. long usebuffer; /* second level buffer size */
  117. int tryresync; /* resync stream after error */
  118. int verbose; /* verbose level */
  119. #ifdef TERM_CONTROL
  120. int term_ctrl;
  121. #endif
  122. int force_mono;
  123. int force_stereo;
  124. int force_8bit;
  125. long force_rate;
  126. int down_sample;
  127. int checkrange;
  128. long doublespeed;
  129. long halfspeed;
  130. int force_reopen;
  131. long realtime;
  132. char filename[256];
  133. };
  134. struct reader {
  135. int (*init)(struct reader *);
  136. void (*close)(struct reader *);
  137. int (*head_read)(struct reader *,unsigned long *newhead);
  138. int (*head_shift)(struct reader *,unsigned long *head);
  139. int (*skip_bytes)(struct reader *,int len);
  140. int (*read_frame_body)(struct reader *,unsigned char *,int size);
  141. int (*back_bytes)(struct reader *,int bytes);
  142. int (*back_frame)(struct reader *,struct frame *,int num);
  143. long (*tell)(struct reader *);
  144. void (*rewind)(struct reader *);
  145. long filelen;
  146. long filepos;
  147. int filept;
  148. int flags;
  149. unsigned char id3buf[128];
  150. };
  151. #define READER_FD_OPENED 0x1
  152. #define READER_ID3TAG 0x2
  153. extern struct reader *rd,readers[];
  154. extern char *equalfile;
  155. extern int halfspeed;
  156. extern int buffer_fd[2];
  157. extern txfermem *buffermem;
  158. extern char *prgName, *prgVersion;
  159. #ifndef NOXFERMEM
  160. extern void buffer_loop(struct audio_info_struct *ai,sigset_t *oldsigset);
  161. #endif
  162. /* ----- Declarations from "audio_esd.c" ------ */
  163. extern char *esdserver;
  164. /* ------ Declarations from "httpget.c" ------ */
  165. extern char *proxyurl;
  166. extern unsigned long proxyip;
  167. extern int http_open (char *url);
  168. extern char *httpauth;
  169. /* ------ Declarations from "common.c" ------ */
  170. extern void audio_flush(int, struct audio_info_struct *);
  171. extern void (*catchsignal(int signum, void(*handler)()))();
  172. extern void print_header(struct frame *);
  173. extern void print_header_compact(struct frame *);
  174. extern void print_id3_tag(unsigned char *buf);
  175. extern int split_dir_file(const char *path, char **dname, char **fname);
  176. extern unsigned int get1bit(void);
  177. extern unsigned int getbits(int);
  178. extern unsigned int getbits_fast(int);
  179. extern void backbits(int);
  180. extern int getbitoffset(void);
  181. extern int getbyte(void);
  182. extern void set_pointer(long);
  183. extern unsigned char *pcm_sample;
  184. extern int pcm_point;
  185. extern int audiobufsize;
  186. extern int OutputDescriptor;
  187. #ifdef VARMODESUPPORT
  188. extern int varmode;
  189. extern int playlimit;
  190. #endif
  191. struct gr_info_s {
  192. int scfsi;
  193. unsigned part2_3_length;
  194. unsigned big_values;
  195. unsigned scalefac_compress;
  196. unsigned block_type;
  197. unsigned mixed_block_flag;
  198. unsigned table_select[3];
  199. unsigned subblock_gain[3];
  200. unsigned maxband[3];
  201. unsigned maxbandl;
  202. unsigned maxb;
  203. unsigned region1start;
  204. unsigned region2start;
  205. unsigned preflag;
  206. unsigned scalefac_scale;
  207. unsigned count1table_select;
  208. real *full_gain[3];
  209. real *pow2gain;
  210. };
  211. struct III_sideinfo
  212. {
  213. unsigned main_data_begin;
  214. unsigned private_bits;
  215. struct {
  216. struct gr_info_s gr[2];
  217. } ch[2];
  218. };
  219. extern void open_stream(char *,int fd);
  220. extern void read_frame_init (void);
  221. extern int read_frame(struct frame *fr);
  222. extern void play_frame(int init,struct frame *fr);
  223. extern int do_layer3(struct frame *fr,int,struct audio_info_struct *);
  224. extern int do_layer2(struct frame *fr,int,struct audio_info_struct *);
  225. extern int do_layer1(struct frame *fr,int,struct audio_info_struct *);
  226. extern void do_equalizer(real *bandPtr,int channel);
  227. #ifdef PENTIUM_OPT
  228. extern int synth_1to1_pent (real *,int,unsigned char *);
  229. #endif
  230. #ifdef USE_3DNOW
  231. extern int synth_1to1_3dnow (real *,int,unsigned char *);
  232. #endif
  233. extern int synth_1to1 (real *,int,unsigned char *,int *);
  234. extern int synth_1to1_8bit (real *,int,unsigned char *,int *);
  235. extern int synth_1to1_mono (real *,unsigned char *,int *);
  236. extern int synth_1to1_mono2stereo (real *,unsigned char *,int *);
  237. extern int synth_1to1_8bit_mono (real *,unsigned char *,int *);
  238. extern int synth_1to1_8bit_mono2stereo (real *,unsigned char *,int *);
  239. extern int synth_2to1 (real *,int,unsigned char *,int *);
  240. extern int synth_2to1_8bit (real *,int,unsigned char *,int *);
  241. extern int synth_2to1_mono (real *,unsigned char *,int *);
  242. extern int synth_2to1_mono2stereo (real *,unsigned char *,int *);
  243. extern int synth_2to1_8bit_mono (real *,unsigned char *,int *);
  244. extern int synth_2to1_8bit_mono2stereo (real *,unsigned char *,int *);
  245. extern int synth_4to1 (real *,int,unsigned char *,int *);
  246. extern int synth_4to1_8bit (real *,int,unsigned char *,int *);
  247. extern int synth_4to1_mono (real *,unsigned char *,int *);
  248. extern int synth_4to1_mono2stereo (real *,unsigned char *,int *);
  249. extern int synth_4to1_8bit_mono (real *,unsigned char *,int *);
  250. extern int synth_4to1_8bit_mono2stereo (real *,unsigned char *,int *);
  251. extern int synth_ntom (real *,int,unsigned char *,int *);
  252. extern int synth_ntom_8bit (real *,int,unsigned char *,int *);
  253. extern int synth_ntom_mono (real *,unsigned char *,int *);
  254. extern int synth_ntom_mono2stereo (real *,unsigned char *,int *);
  255. extern int synth_ntom_8bit_mono (real *,unsigned char *,int *);
  256. extern int synth_ntom_8bit_mono2stereo (real *,unsigned char *,int *);
  257. extern void rewindNbits(int bits);
  258. extern int hsstell(void);
  259. extern void set_pointer(long);
  260. extern void huffman_decoder(int ,int *);
  261. extern void huffman_count1(int,int *);
  262. extern void print_stat(struct frame *fr,int no,long buffsize,struct audio_info_struct *ai);
  263. extern int get_songlen(struct frame *fr,int no);
  264. extern void init_layer3(int);
  265. extern void init_layer2(void);
  266. extern void make_decode_tables(long scale);
  267. extern void make_conv16to8_table(int);
  268. extern void dct64(real *,real *,real *);
  269. extern void synth_ntom_set_step(long,long);
  270. extern void control_generic(struct frame *fr);
  271. extern void control_sajber(struct frame *fr);
  272. extern void control_tk3play(struct frame *fr);
  273. extern int cdr_open(struct audio_info_struct *ai, char *ame);
  274. extern int au_open(struct audio_info_struct *ai, char *name);
  275. extern int wav_open(struct audio_info_struct *ai, char *wavfilename);
  276. extern int wav_write(unsigned char *buf,int len);
  277. extern int cdr_close(void);
  278. extern int au_close(void);
  279. extern int wav_close(void);
  280. extern int au_open(struct audio_info_struct *ai, char *aufilename);
  281. extern int au_close(void);
  282. extern int cdr_open(struct audio_info_struct *ai, char *cdrfilename);
  283. extern int cdr_close(void);
  284. extern unsigned char *conv16to8;
  285. extern long freqs[9];
  286. extern real muls[27][64];
  287. #ifdef USE_3DNOW
  288. extern real decwin[2*(512+32)];
  289. #else
  290. extern real decwin[512+32];
  291. #endif
  292. extern real *pnts[5];
  293. extern real equalizer[2][32];
  294. extern real equalizer_sum[2][32];
  295. extern int equalizer_cnt;
  296. extern struct audio_name audio_val2name[];
  297. extern struct parameter param;
  298. /* 486 optimizations */
  299. #define FIR_BUFFER_SIZE 128
  300. extern void dct64_486(int *a,int *b,real *c);
  301. extern int synth_1to1_486(real *bandPtr,int channel,unsigned char *out,int nb_blocks);