blob: fbeaf7231a1c06f966773e7a36379bfb92bdc7d8
1 | /* |
2 | * libmad - MPEG audio decoder library |
3 | * Copyright (C) 2000-2004 Underbit Technologies, Inc. |
4 | * |
5 | * This program is free software; you can redistribute it and/or modify |
6 | * it under the terms of the GNU General Public License as published by |
7 | * the Free Software Foundation; either version 2 of the License, or |
8 | * (at your option) any later version. |
9 | * |
10 | * This program is distributed in the hope that it will be useful, |
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
13 | * GNU General Public License for more details. |
14 | * |
15 | * You should have received a copy of the GNU General Public License |
16 | * along with this program; if not, write to the Free Software |
17 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
18 | * |
19 | * $Id: synth.h,v 1.15 2004/01/23 09:41:33 rob Exp $ |
20 | */ |
21 | |
22 | # ifndef LIBMAD_SYNTH_H |
23 | # define LIBMAD_SYNTH_H |
24 | |
25 | # include "fixed.h" |
26 | # include "frame.h" |
27 | |
28 | struct mad_pcm { |
29 | unsigned int samplerate; /* sampling frequency (Hz) */ |
30 | unsigned short channels; /* number of channels */ |
31 | unsigned short length; /* number of samples per channel */ |
32 | mad_fixed_t samples[2][1152]; /* PCM output samples [ch][sample] */ |
33 | }; |
34 | |
35 | struct mad_synth { |
36 | mad_fixed_t filter[2][2][2][16][8]; /* polyphase filterbank outputs */ |
37 | /* [ch][eo][peo][s][v] */ |
38 | |
39 | unsigned int phase; /* current processing phase */ |
40 | |
41 | struct mad_pcm pcm; /* PCM output */ |
42 | }; |
43 | |
44 | /* single channel PCM selector */ |
45 | enum { |
46 | MAD_PCM_CHANNEL_SINGLE = 0 |
47 | }; |
48 | |
49 | /* dual channel PCM selector */ |
50 | enum { |
51 | MAD_PCM_CHANNEL_DUAL_1 = 0, |
52 | MAD_PCM_CHANNEL_DUAL_2 = 1 |
53 | }; |
54 | |
55 | /* stereo PCM selector */ |
56 | enum { |
57 | MAD_PCM_CHANNEL_STEREO_LEFT = 0, |
58 | MAD_PCM_CHANNEL_STEREO_RIGHT = 1 |
59 | }; |
60 | |
61 | void mad_synth_init(struct mad_synth *); |
62 | |
63 | # define mad_synth_finish(synth) /* nothing */ |
64 | |
65 | void mad_synth_mute(struct mad_synth *); |
66 | |
67 | void mad_synth_frame(struct mad_synth *, struct mad_frame const *); |
68 | |
69 | # endif |
70 |