This is the error message that I have encountered:
[m3vpss ] 147549: MP_SCLR: - Input Resolution Changed, updating...
[m3vpss ] 147552: MP_SCLR: ERROR could not update channel info!!!
[m3vpss ] 147552: Assertion @ Line: 769 in links_m3vpss/mpSclr/mpSclrLink_drv.c: status == FVID2_SOK : failed !!!
Read YUV file, a channel is 2048*2048, the two channel is 640*480
My software version is DVRRDK 4.0.My LINK is as follows:
Read YUV -> ipcframesouthost -> ipcframesinvpss -> MP_SCLR (Vpss) -> SW Mosaic -> display
static Void MultiCh_setIpcFramesOutInQueInfo(System_LinkQueInfo *inQueInfo)
{
inQueInfo->numCh = 2;
inQueInfo->chInfo[0].bufType = SYSTEM_BUF_TYPE_VIDFRAME;
inQueInfo->chInfo[0].dataFormat = SYSTEM_DF_YUV420P;
inQueInfo->chInfo[0].memType = SYSTEM_MT_NONTILEDMEM;
inQueInfo->chInfo[0].scanFormat = SYSTEM_SF_PROGRESSIVE;
inQueInfo->chInfo[0].startX = 0;
inQueInfo->chInfo[0].startY = 0;
inQueInfo->chInfo[0].width = 2048;
inQueInfo->chInfo[0].height = 2048;
inQueInfo->chInfo[0].pitch[0] = 2048*2;
inQueInfo->chInfo[0].pitch[1] = 0;
inQueInfo->chInfo[0].pitch[2] = 0;
inQueInfo->chInfo[1].bufType = SYSTEM_BUF_TYPE_VIDFRAME;
inQueInfo->chInfo[1].dataFormat = SYSTEM_DF_YUV420P;
inQueInfo->chInfo[1].memType = SYSTEM_MT_NONTILEDMEM;
inQueInfo->chInfo[1].scanFormat = SYSTEM_SF_PROGRESSIVE;
inQueInfo->chInfo[1].startX = 0;
inQueInfo->chInfo[1].startY = 0;
inQueInfo->chInfo[1].width = 640;
inQueInfo->chInfo[1].height = 480;
inQueInfo->chInfo[1].pitch[0] = 640*2;
inQueInfo->chInfo[1].pitch[1] = 0;
inQueInfo->chInfo[1].pitch[2] = 0;
}
ipcFramesOutA8Prm.baseCreateParams.noNotifyMode = FALSE;
ipcFramesOutA8Prm.baseCreateParams.notifyNextLink = TRUE;
ipcFramesOutA8Prm.baseCreateParams.notifyPrevLink = FALSE;
ipcFramesOutA8Prm.baseCreateParams.inQueParams.prevLinkId = SYSTEM_LINK_ID_INVALID;
ipcFramesOutA8Prm.baseCreateParams.inQueParams.prevLinkQueId = 0;
ipcFramesOutA8Prm.baseCreateParams.numOutQue = 1;
ipcFramesOutA8Prm.baseCreateParams.outQueParams[0].nextLink = gVdisModuleContext.ipcFramesInVpssFromHostId;
MultiCh_setIpcFramesOutInQueInfo(&ipcFramesOutA8Prm.inQueInfo);
ipcFramesInVpssFromA8Prm.baseCreateParams.noNotifyMode = FALSE;
ipcFramesInVpssFromA8Prm.baseCreateParams.notifyNextLink = TRUE;
ipcFramesInVpssFromA8Prm.baseCreateParams.notifyPrevLink = TRUE;
ipcFramesInVpssFromA8Prm.baseCreateParams.inQueParams.prevLinkId = gVdisModuleContext.ipcFramesOutHostId;
ipcFramesInVpssFromA8Prm.baseCreateParams.inQueParams.prevLinkQueId = 0;
ipcFramesInVpssFromA8Prm.baseCreateParams.numOutQue = 1;
ipcFramesInVpssFromA8Prm.baseCreateParams.outQueParams[0].nextLink = gMultiCh_VdecVdisObj.mpSclrId;
mpSclrPrm.pathId = MP_SCLR_LINK_SEC1_SC4_VIP1;
mpSclrPrm.numCh = 4;
mpSclrPrm.enableLineSkip = FALSE;
mpSclrPrm.outQueParams.nextLink = gVdisModuleContext.swMsId[0] ;
mpSclrPrm.inQueParams.prevLinkId = gVdisModuleContext.ipcFramesInVpssFromHostId;
This is a function of the YUV 420p data that I read the 2048*2048 resolution:
void ReadYuvToA8(void *ptr1, void *ptr2, UInt32 width)
{
VIDFrame_BufList emptyFrameList;
Int i;
Int status;
Vsys_AllocBufInfo *videoBufInfo[2];
videoBufInfo[0] = (Vsys_AllocBufInfo *)ptr1;
videoBufInfo[1] = (Vsys_AllocBufInfo *)ptr2;
FILE *fp=NULL;
OSA_printf("Entered YUV read function\n");
OPEN:
fp=fopen("/opt/dvr_rdk/ti816x/bin/jiang.yuv","rb");
if(fp == NULL)
{
OSA_printf("cannot open the jiang.yuv\n");
goto OPEN;
}
OSA_printf("BEGIN TO READ VIDEO!!!\n");
while(1)
{
if(!feof(fp))
{
fread(videoBufInfo[0]->virtAddr,1, 2048*2048*1*3/2, fp);
}
else
{
printf("\n\n\nread over !!!\n\n\n");
break;
}
emptyFrameList.numFrames=1;
for(i = 0;i < emptyFrameList.numFrames;i++)
{
emptyFrameList.frames[i].addr[0][0] = (Ptr)videoBufInfo[0]->virtAddr;
emptyFrameList.frames[i].phyAddr[0][0] = (Ptr)videoBufInfo[0]->physAddr;
emptyFrameList.frames[i].channelNum = 0;
emptyFrameList.frames[i].fid = 0;
emptyFrameList.frames[i].frameWidth = 2048;
emptyFrameList.frames[i].frameHeight = 2048;
emptyFrameList.frames[i].framePitch[0] = 2048*2;
emptyFrameList.frames[i].framePitch[1] = 0;
emptyFrameList.frames[i].framePitch[2] = 0;
}
status = IpcFramesOutLink_putFullVideoFrames(gVdisModuleContext.ipcFramesOutHostId,&emptyFrameList);
if(ERROR_NONE != status)
{
OSA_printf("PUT FULL FRAME FAIL!!!\n");
}
OSA_waitMsecs(30);
status = IpcFramesOutLink_getEmptyVideoFrames(gVdisModuleContext.ipcFramesOutHostId,&emptyFrameList);
}
fclose(fp);
OSA_printf("Exiting YUV read function\n");
}
How do I solve this problem?
In addition, I can not find the problem in the E2E class, is not very convenient to the local FAE, please help me, thank you.