blob: 9d95d2d5cd33f81bcfdfd8ac2aff5255b16a6ac3
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: decoder.h,v 1.17 2004/01/23 09:41:32 rob Exp $ |
20 | */ |
21 | |
22 | # ifndef LIBMAD_DECODER_H |
23 | # define LIBMAD_DECODER_H |
24 | |
25 | # include "stream.h" |
26 | # include "frame.h" |
27 | # include "synth.h" |
28 | |
29 | enum mad_decoder_mode { |
30 | MAD_DECODER_MODE_SYNC = 0, |
31 | MAD_DECODER_MODE_ASYNC |
32 | }; |
33 | |
34 | enum mad_flow { |
35 | MAD_FLOW_CONTINUE = 0x0000, /* continue normally */ |
36 | MAD_FLOW_STOP = 0x0010, /* stop decoding normally */ |
37 | MAD_FLOW_BREAK = 0x0011, /* stop decoding and signal an error */ |
38 | MAD_FLOW_IGNORE = 0x0020 /* ignore the current frame */ |
39 | }; |
40 | |
41 | struct mad_decoder { |
42 | enum mad_decoder_mode mode; |
43 | |
44 | int options; |
45 | |
46 | struct { |
47 | long pid; |
48 | int in; |
49 | int out; |
50 | } async; |
51 | |
52 | struct { |
53 | struct mad_stream stream; |
54 | struct mad_frame frame; |
55 | struct mad_synth synth; |
56 | } *sync; |
57 | |
58 | void *cb_data; |
59 | |
60 | enum mad_flow(*input_func)(void *, struct mad_stream *); |
61 | enum mad_flow(*header_func)(void *, struct mad_header const *); |
62 | enum mad_flow(*filter_func)(void *, |
63 | struct mad_stream const *, struct mad_frame *); |
64 | enum mad_flow(*output_func)(void *, |
65 | struct mad_header const *, struct mad_pcm *); |
66 | enum mad_flow(*error_func)(void *, struct mad_stream *, struct mad_frame *); |
67 | enum mad_flow(*message_func)(void *, void *, unsigned int *); |
68 | }; |
69 | |
70 | void mad_decoder_init(struct mad_decoder *, void *, |
71 | enum mad_flow(*)(void *, struct mad_stream *), |
72 | enum mad_flow(*)(void *, struct mad_header const *), |
73 | enum mad_flow(*)(void *, |
74 | struct mad_stream const *, |
75 | struct mad_frame *), |
76 | enum mad_flow(*)(void *, |
77 | struct mad_header const *, |
78 | struct mad_pcm *), |
79 | enum mad_flow(*)(void *, |
80 | struct mad_stream *, |
81 | struct mad_frame *), |
82 | enum mad_flow(*)(void *, void *, unsigned int *)); |
83 | int mad_decoder_finish(struct mad_decoder *); |
84 | |
85 | # define mad_decoder_options(decoder, opts) \ |
86 | ((void) ((decoder)->options = (opts))) |
87 | |
88 | int mad_decoder_run(struct mad_decoder *, enum mad_decoder_mode); |
89 | int mad_decoder_message(struct mad_decoder *, void *, unsigned int *); |
90 | |
91 | # endif |
92 |