libmad 解码库用法

//初始化
mad_stream_init(&pDecoder->stream);
mad_frame_init(&pDecoder->frame);
mad_timer_reset(&(pDecoder->timer));
mad_synth_init(&pDecoder->synth);
mad_stream_options(&pDecoder->stream, MAD_OPTION_IGNORECRC);

//解码过程
mad_stream_buffer(stream, pBuffer, mlength);
while(1){
if(pMad->nMadFlag&MAD_HEADER_FLAG)
{
if(-1==mad_header_decode(&pMad->frame.header,&pMad->stream)){
if(!MAD_RECOVERABLE(pMad->stream.error))
break;


}
mResult=wzMadReadHeader(pBuffer,ulSize,&pMad->stream);
MADDECODER_ERROR(mResult,nResult);
}
if(-1==mad_frame_decode(&pMad->frame,&pMad->stream))
{
if (!MAD_RECOVERABLE(pMad->stream.error))
break;
}
else
pMad->nBadLastFrame=0;
if(pMad->nMadFlag&MAD_FILTER_FLAG)
{
mResult=wzMadFilter(pBuffer,ulSize,
&pMad->stream,&pMad->frame);
MADDECODER_ERROR(mResult,nResult);
}
mad_timer_add(&pMad->timer,pMad->frame.header.duration);
mad_synth_frame(&pMad->synth,&pMad->frame);
if(pMad->push_buffer)
{
//write file
MADDECODER_ERROR(mResult,nResult);
}
}

//释放资源
mad_synth_finish(&pMad->synth);
mad_frame_finish(&pMad->frame);
mad_stream_finish(&pMad->stream);

以上代码摘自官方例子,自己只是做了一些简单的修改。

以上代码兼容所有平台。

from:http://www.cnblogs.com/weinyzhou

版权所有,禁止转载

原文地址:https://www.cnblogs.com/weinyzhou/p/2427671.html