tWMAFileStatus WMA10FileCBGetNewPayload(OMX_PTR *state, OMX_U64 offset, OMX_U32 *pnum_bytes, \ OMX_U8 **ppData, OMX_PTR pAppContext, OMX_U32 *pbIsCompressedPayload) { tWMAFileStatus ret = cWMA_NoErr; WmaDec *pWmaDec = (WmaDec *)pAppContext; RingBuffer *pAudioRingBuffer = (RingBuffer *)&(pWmaDec->AudioRingBuffer); AudioTSManager *pAudioTSManager = (AudioTSManager *)&(pWmaDec->TS_Manager); *ppData = NULL; LOG_LOG("Wma need bytes: %d RingBuffer audio data len: %d\n", *pnum_bytes, pAudioRingBuffer->AudioDataLen()); if(pAudioRingBuffer->AudioDataLen()<=0 && pWmaDec->bReceivedEOS == OMX_TRUE) { return cWMA_NoMoreFrames; } if((pAudioRingBuffer->AudioDataLen() - pAudioRingBuffer->nPrevOffset)<*pnum_bytes && pWmaDec->bReceivedEOS == OMX_FALSE) { *ppData = NULL; *pnum_bytes=0; return cWMA_NoMoreDataThisTime; } pAudioRingBuffer->BufferConsumered(pAudioRingBuffer->nPrevOffset); pAudioTSManager->Consumered(pAudioRingBuffer->nPrevOffset); OMX_U32 nActuralLen; pAudioRingBuffer->BufferGet(ppData, *pnum_bytes, &nActuralLen); LOG_DEBUG("Get stream length: %d\n", nActuralLen); if(nActuralLen==0 && pWmaDec->bReceivedEOS == OMX_TRUE) { return cWMA_NoMoreFrames; } pAudioRingBuffer->nPrevOffset = nActuralLen; return ret; }