minimad分析
时间:2009-04-16 来源:zhengwenwei_123
static int decode(unsigned char const *start, unsigned long length); |
mad_decoder_init(&decoder, &buffer, |
在decoder.c中定义如下:
void mad_decoder_init(struct mad_decoder *decoder, void *data, 初始化一个mad_decoder的实例。 注意到data时void *,那么程序如何得知处理data的方法呢? |
mad_decoder的结构:
struct mad_decoder { (notes: enum mad_decoder_mode { MAD_DECODER_MODE_SYNC = 0, MAD_DECODER_MODE_ASYNC } 同步/异步方式
) |
解码器运行:
int mad_decoder_run(struct mad_decoder *decoder, enum mad_decoder_mode mode) |
同步运行:
static ...
if (decoder->error_func) { //调用input_func,把cb_data的信息复制到stream中。
switch (decoder->input_func(decoder->cb_data, stream)) {
case MAD_FLOW_STOP:
... |
input_func在minimad中的实现是非常简单的:
static |
output_func在minimad中的实现是:
mad_stream--输入音频数据比特流关联到解码流 mad_frame--解码流关联到解码器 --mad_header--MPEG帧的基本信息 ----mad_mode--声道模型 ----.... mad_synth--解码器关联到PCM数据合成 --mad_pcm--合成的PCM数据 程序基本流程: 1.初始化stream, synth, frame 2.关联输入流到解码流 3.调用解码器 4.合成PCM数据 5.释放stream, synth, frame