OMX_ERRORTYPE ISVComponent::ISV_FillBufferDone( OMX_OUT OMX_HANDLETYPE __maybe_unused hComponent, OMX_OUT OMX_PTR pAppData, OMX_OUT OMX_BUFFERHEADERTYPE* pBuffer) { ALOGD_IF(ISV_COMPONENT_DEBUG, "%s: %p <== buffer_handle_t %p. mVPPEnabled %d, mVPPOn %d", __func__, pBuffer, pBuffer->pBuffer, mVPPEnabled, mVPPOn); if (!mpCallBacks) { ALOGE("%s: no call back functions were registered.", __func__); return OMX_ErrorUndefined; } if(!mVPPEnabled || !mVPPOn || mVPPFlushing || pBuffer->nFilledLen == 0) { ALOGD_IF(ISV_COMPONENT_DEBUG, "%s: FillBufferDone pBuffer %p, timeStamp %.2f ms", __func__, pBuffer, pBuffer->nTimeStamp/1E3); return mpCallBacks->FillBufferDone(&mBaseComponent, pAppData, pBuffer); } if (mOutputCropChanged && mISVBufferManager != NULL) { ISVBuffer* isvBuffer = mISVBufferManager->mapBuffer(reinterpret_cast<unsigned long>(pBuffer->pBuffer)); if (isvBuffer != NULL) isvBuffer->setFlag(ISVBuffer::ISV_BUFFER_CROP_CHANGED); mOutputCropChanged = false; } mProcThread->addInput(pBuffer); return OMX_ErrorNone; }
status_t ISVBufferManager::setBuffersFlag(uint32_t flag) { Mutex::Autolock autoLock(mBufferLock); if (flag & ISVBuffer::ISV_BUFFER_NEED_CLEAR) { if (mBuffers.size() == 0) mNeedClearBuffers = true; else { for (uint32_t i = 0; i < mBuffers.size(); i++) { ISVBuffer* isvBuffer = mBuffers.itemAt(i); isvBuffer->setFlag(ISVBuffer::ISV_BUFFER_NEED_CLEAR); } } } return OK; }