Hello,
I'm developing DM8168 Netra DVR, and having some problem with decoding process.
When decoding h.264 stream through RTSP (by live555),
occasionally system is gone, where step into following code:
In omx_05_00_00_09/......../omx_vdec.c,
and within OMX_TI_VIDDEC_Process() function :
OMX_TI_VIDDEC_Process() {
......
retval = VIDDEC3_process(.........);
if (retval == (OMX_U32) XDM_EFAIL) {
......
else if(((VIDDEC3_OutArgs *) frame->outArgs)->extendedError & (1 << IH264VDEC_ERR_PICSIZECHANGE)) {
eError = pVidDecComPvt->fpReturnEventNotify(pHandle, OMX_EventPortSettingsChanged, OMX_ErrorStreamCorrupt, ((VIDDEC3_OutArgs *) frame->outArgs)->extendedError, NULL); OMX_BASE_ASSERT(eError == OMX_ErrorNone, eError); nBufferCountActual = pVidDecComPvt->pPortdefs[OMX_VIDDEC_OUTPUT_PORT]->nBufferCountActual; /* There would not be any output but frames could be freed */ while (((VIDDEC3_OutArgs *) frame->outArgs)->freeBufID[i] != 0) { OMX_BUFFERHEADERTYPE *ptempBufHeader = (OMX_BUFFERHEADERTYPE *) ((VIDDEC3_OutArgs *) frame->outArgs)->freeBufID[i]; status = OMX_TI_VIDDEC_UTL_GetBufStatus(&(pVidDecComPvt->outBufHeaderArray[0]), nBufferCountActual, ptempBufHeader); if (status == OMX_BUFFER_DUP) { pVidDecComPvt->fpDioCancel(pHandle, OMX_VIDDEC_OUTPUT_PORT, ptempBufHeader); OMX_TI_VIDDEC_UTL_SetBufStatus(&(pVidDecComPvt->outBufHeaderArray[0]), nBufferCountActual, ptempBufHeader, OMX_BUFFER_FREE); } i++; } /* cancle o/p buffers for ready frames and mark current frame as ready */ IvaServer_utlCancelOutBuffers(pHandle, pVidDecComPvt->svrPtr); /* change pool ID */ /* Deque new buffers and put it in ready frames */ IvaServer_utlGetNewOutBuffers(pHandle, pVidDecComPvt->svrPtr); /* Flush the codec */ status = VIDDEC3_control(pVidDecComPvt->decHandle, XDM_FLUSH, pVidDecComPvt->pDecDynParams, (VIDDEC3_Status *) pVidDecComPvt->pDecStatus); if (status != VIDDEC3_EOK) { OMX_BASE_Error ("VIDDEC3_control XDM_FLUSH failed ....! \n"); eError = OMX_ErrorInsufficientResources; goto EXIT; } status = VIDDEC3_control(pVidDecComPvt->decHandle, XDM_GETSTATUS, pVidDecComPvt->pDecDynParams, (VIDDEC3_Status *) pVidDecComPvt->pDecStatus); /* set Flush for o/p buffers as pending */ IvaServer_setStatus(pVidDecComPvt->svrPtr, IVA_SERVER_STREAM_FLUSH_ON); pVidDecComPvt->cmdStatus = IVA_SERVER_STREAM_FLUSH_ON; }
.....
}
.....
}
Why is it detected to be "picture size changed" ?
I had not changed any setting.
(How can I check each frame resolution before sending buffer to decoder to detect resolution change?)
And, why is system gone with above code?
Any help will be welcomed.