OMX_ERRORTYPE VideoSource::ProcessDataBuffer() { OMX_ERRORTYPE ret = OMX_ErrorNone; LOG_DEBUG("VideoSource port number: %d\n", ports[CAPTURED_FRAME_PORT]->BufferNum()); if (bSendEOS == OMX_TRUE || ports[CAPTURED_FRAME_PORT]->BufferNum() <= 0) return OMX_ErrorNoMore; ports[CAPTURED_FRAME_PORT]->GetBuffer(&pOutBufferHdr); if(pOutBufferHdr != NULL) { ret = SendBufferToDevice(); if (ret != OMX_ErrorNone) { LOG_ERROR("Send buffer to device fail.\n"); return ret; } } ret = GetOneFrameFromDevice(); if (ret != OMX_ErrorNone) return ret; ret = ProcessOutputBufferFlag(); if (ret != OMX_ErrorNone) return ret; ret = ProcessPreviewPort(); if (ret != OMX_ErrorNone) return ret; ret = SendOutputBuffer(); if (ret != OMX_ErrorNone) return ret; return OMX_ErrorNone; }
OMX_ERRORTYPE AudioSource::ProcessDataBuffer() { OMX_ERRORTYPE ret = OMX_ErrorNone; OMX_U32 nActuralLen; if (bSendEOS == OMX_TRUE) return OMX_ErrorNoMore; if (AudioRenderRingBuffer.AudioDataLen() <= nFadeInFadeOutProcessLen) { if (nDeviceReadLen == 0) { LOG_DEBUG("Ringbuffer data len: %d\n", AudioRenderRingBuffer.AudioDataLen()); ret = GetOneFrameFromDevice(); if (ret == OMX_ErrorUndefined) { OMX_U8 *pBuffer; AudioRenderRingBuffer.BufferGet(&pBuffer, nFadeInFadeOutProcessLen, &nActuralLen); AudioRenderFadeInFadeOut.SetMode(FADEOUT); AudioRenderFadeInFadeOut.Process(pBuffer, nActuralLen); AudioRenderRingBuffer.BufferConsumered(nActuralLen); AudioRenderRingBuffer.BufferAdd(pBuffer, nFadeInFadeOutProcessLen, &nActuralLen); nDeviceReadOffset = 0; AudioRenderRingBuffer.BufferAddZeros(nDeviceReadLen, &nActuralLen); LOG_LOG("Ringbuffer add len: %d\n", nActuralLen); nDeviceReadLen -= nActuralLen; nDeviceReadOffset += nActuralLen; bAddZeros = OMX_TRUE; if (nDeviceReadLen == 0) AudioRenderFadeInFadeOut.SetMode(FADEIN); } else { if (ret != OMX_ErrorNone) return ret; bAddZeros = OMX_FALSE; nDeviceReadOffset = 0; AudioRenderFadeInFadeOut.Process(pDeviceReadBuffer, nDeviceReadLen); AudioRenderRingBuffer.BufferAdd(pDeviceReadBuffer, nDeviceReadLen, &nActuralLen); LOG_LOG("Ringbuffer add len: %d\n", nActuralLen); nDeviceReadLen -= nActuralLen; nDeviceReadOffset += nActuralLen; } } else { if (bAddZeros == OMX_TRUE) { AudioRenderRingBuffer.BufferAddZeros(nDeviceReadLen, &nActuralLen); nDeviceReadLen -= nActuralLen; nDeviceReadOffset += nActuralLen; if (nDeviceReadLen == 0) AudioRenderFadeInFadeOut.SetMode(FADEIN); } else { AudioRenderFadeInFadeOut.Process(pDeviceReadBuffer + nDeviceReadOffset, nDeviceReadLen); AudioRenderRingBuffer.BufferAdd(pDeviceReadBuffer + nDeviceReadOffset, nDeviceReadLen, &nActuralLen); nDeviceReadLen -= nActuralLen; nDeviceReadOffset += nActuralLen; } } } LOG_LOG("Ringbuffer data len: %d\n", AudioRenderRingBuffer.AudioDataLen()); while(AudioRenderRingBuffer.AudioDataLen() > nFadeInFadeOutProcessLen) { if (ports[OUTPUT_PORT]->BufferNum() == 0 && pOutBufferHdr == NULL ) { fsl_osal_sleep(5000); continue; } if (ports[OUTPUT_PORT]->BufferNum() > 0 && pOutBufferHdr == NULL) { ports[OUTPUT_PORT]->GetBuffer(&pOutBufferHdr); } ret = ProcessOutputBufferData(); if (ret != OMX_ErrorNone) return ret; ret = ProcessOutputBufferFlag(); if (ret != OMX_ErrorNone) return ret; ret = SendOutputBuffer(); if (ret != OMX_ErrorNone) return ret; } return OMX_ErrorNone; }