In rdkdvr 4.0, AlgLink_ScdAlgCopyFrame, there are some code:
Utils_queGet(&pChObj->scdProcessObj.freeQ, (Ptr*)&pEmptyFrame, 1, BIOS_NO_WAIT);
.......
status = Utils_quePut(&pObj->processQ, pEmptyFrame, BIOS_NO_WAIT);
if(status!=FVID2_SOK)
{
/* cannot submit frame now process queue is full, release frame to free Q */
pChObj->inFrameUserSkipCount++;
status = Utils_quePut(&pChObj->scdProcessObj.freeQ, pEmptyFrame, BIOS_NO_WAIT);
/* this assert should never occur */
UTILS_assert(status==FVID2_SOK);
return FVID2_SOK;
}
Utils_quePut(&pObj->processQ, pEmptyFrame, BIOS_NO_WAIT); will return FVID2_SOK! so it cann't release pEmptyBuffer!, Because Utils_queGet won't get pEmptyFrame, it will be NULL!
Why?