This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

A resolution change is detected error

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.