00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00025 # ifndef LIBMAD_DECODER_H
00026 # define LIBMAD_DECODER_H
00027
00028 # include "stream.h"
00029 # include "frame.h"
00030 # include "synth.h"
00031 # include "callbacks.h"
00032
00033 enum mad_decoder_mode {
00034 MAD_DECODER_MODE_SYNC = 0,
00035 MAD_DECODER_MODE_ASYNC
00036 };
00037
00038 enum mad_flow {
00039 MAD_FLOW_CONTINUE = 0x0000,
00040 MAD_FLOW_STOP = 0x0010,
00041 MAD_FLOW_BREAK = 0x0011,
00042 MAD_FLOW_IGNORE = 0x0020
00043 };
00044
00050 struct mad_decoder {
00051 enum mad_decoder_mode mode;
00052
00053 int options;
00054
00055 struct {
00056 long pid;
00057 int in;
00058 int out;
00059 } async;
00060
00061 struct {
00062 struct mad_stream stream;
00063 struct mad_frame frame;
00064 struct mad_synth synth;
00065 } *sync;
00066
00067 void *cb_data;
00068
00069 input_callback input_func;
00070 header_callback header_func;
00071 filter_callback filter_func;
00072 output_callback output_func;
00073 error_callback error_func;
00074 message_callback message_func;
00075 };
00076
00077 void mad_decoder_init(struct mad_decoder *decoder, void *data,
00078 input_callback input_func,
00079 header_callback header_func,
00080 filter_callback filter_func,
00081 output_callback output_func,
00082 error_callback error_func,
00083 message_callback message_func);
00084
00085 int mad_decoder_finish(struct mad_decoder *);
00086
00087 # define mad_decoder_options(decoder, opts) \
00088 ((void) ((decoder)->options = (opts)))
00089
00090 int mad_decoder_run(struct mad_decoder *, enum mad_decoder_mode);
00091 int mad_decoder_message(struct mad_decoder *, void *, unsigned int *);
00092
00093 # endif