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://blog.csdn.net/weinyzhou/article/details/7657958
著作権所有、転載禁止