大家好,最近在做一个mp3解码,要求用OpenMax DL层的mp3解码器实现
我现在用的是ARM的DL库,发现里面只有下面这些函数:
OMXResult omxACMP3_UnpackSideInfo_wrapper (
    const OMX_U8 **ppBitStream,
    OMX_INT *pBitStreamLoc,
    OMXMP3SideInfo *pDstSideInfo1,
    OMXMP3SideInfo *pDstSideInfo2,
    OMXMP3SideInfo *pDstSideInfo3,
    OMXMP3SideInfo *pDstSideInfo4,
    OMX_INT *pDstMainDataBegin,
    OMX_INT *pDstPrivateBits,
    OMX_INT *pDstScfsi,
    OMXMP3FrameHeader *pFrameHeader
);OMXResult omxACMP3_HuffmanDecode_S32_wrapper(
    const OMX_U8 **ppBitStream,
    OMX_INT *pBitStreamLoc,
    OMX_INT *pOffset,
    OMX_S32 *pDstIs,
    OMX_INT *pDstNonZeroBound,
    OMXMP3SideInfo *pSideInfo,
    OMXMP3FrameHeader *pFrameHeader,
    OMX_INT hufSize
);OMXResult omxACMP3_HuffmanDecodeSfbMbp_S32_wrapper (
    const OMX_U8 **ppBitStream,
    OMX_INT *pBitStreamLoc,
    OMX_INT *pOffset,
    OMX_S32 *pDstIs,
    OMX_INT *pDstNonZeroBound,
    OMXMP3SideInfo *pSideInfo,
    OMXMP3FrameHeader *pFrameHeader,
    OMX_INT hufSize,
    OMX_S16 *pSfbTableLong,
    OMX_S16 *pSfbTableShort,
    OMX_S16 *pMbpTable
);
 
OMXResult omxACMP3_HuffmanDecodeSfb_S32_wrapper (
    const OMX_U8 **ppBitStream,
    OMX_INT *pBitStreamLoc,
    OMX_INT *pOffset,
    OMX_S32 *pDstIs,
    OMX_INT *pDstNonZeroBound,
    OMXMP3SideInfo *pSideInfo,
    OMXMP3FrameHeader *pFrameHeader,
    OMX_INT hufSize,
    OMX_S16 *pSfbTableLong
);
 
OMXResult omxACMP3_ReQuantizeSfb_S32_I_wrapper(
     OMX_S32 *pSrcDstIsXr,
     OMX_INT *pNonZeroBound,
     OMX_S8 *pScaleFactor,
     OMXMP3SideInfo *pSideInfo1,
     OMXMP3SideInfo *pSideInfo2,
     OMXMP3FrameHeader *pFrameHeader,
     OMX_S32 *pBuffer,
     OMX_S16 *pSfbTableLong,
     OMX_S16 *pSfbTableShort
);OMXResult omxACMP3_ReQuantize_S32_I_wrapper(
     OMX_S32 *pSrcDstIsXr,
     OMX_INT *pNonZeroBound,
     OMX_S8 *pScaleFactor,
     OMXMP3SideInfo *pSideInfo1,
     OMXMP3SideInfo *pSideInfo2,
     OMXMP3FrameHeader *pFrameHeader,
     OMX_S32 *pBuffer
);OMXResult omxACMP3_UnpackFrameHeader_wrapper(
     const OMX_U8 **ppBitStream,
     OMX_INT *pBitStreamLoc,
     OMXMP3FrameHeader *pFrameHeader
);OMXResult omxACMP3_UnpackScaleFactors_S8_wrapper (
 const OMX_U8 **ppBitStream,
     OMX_INT *pBitStreamLoc,
     OMX_INT *pOffset,
     OMX_S8 *pDstScaleFactor,
     OMXMP3SideInfo *pSideInfo,
     OMX_INT *pScfsi,
     OMXMP3FrameHeader *pFrameHeader,
     OMX_INT granule,
     OMX_INT channel
);而里面的测试代码也仅仅是针对单个函数的测试,如果要实现解码,那么必须要研究mp3解码的整个流程
现在项目的重点不在mp3解码流程上,所以我想问问是否有这样的一个简单的接口,这个接口调用上面所列的函数实现解码,
我只要调用这个简单的接口即可(比如调用mp3_decode)?感谢大家,麻烦了!!!

解决方案 »

  1.   

    frameworks\base\media\libstagefright\codecs\mp3dec
    这里面有封装好的,能直接用,可以看一下代码
      

  2.   

    OpenMax DL层的mp3解码器,及吗器你可一参考STAGEFRIGHT中的,封装成OMX-DL层的接口就是了
      

  3.   

    这个目录下的MP3Decoder属于软件解码,硬件解码是OMXCodec.cpp中定义的OMX.qcom.audio.decoder.mp3啊。
      

  4.   

    谢谢各位问题是 我现在做的属于底层开发,做mp3解码是为了测试芯片的性能只是要用一下OpenMax DL层的代码,上层的代码就不管了好烦啊 不知道为啥非要用这个解码器 唉~~~
      

  5.   

    难道担心mp3解码性能不足?
    N年前的arm,就算软件解mp3,对CPU的影响也很小,
      

  6.   

    有个疑问,如果从mediaplayer接口播放音频,那么可以走到stagefright或者OpenMax(这个好像在代码中已经被从mediaplayservice移除了),进行解码,但是如果从audiotrack走,音频数据由什么来解码呢?困惑啊。