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
著作権所有、転載禁止