Link_tsk.c: dst->channelNum < pObj->info.queInfo[0].numCh : failed !!!
{
IpcFramesInLinkHLOS_CreateParams ipcFramesInHostPrm;
IpcFramesOutLinkRTOS_CreateParams ipcFramesOutVideoPrm;
IpcFramesOutLinkHLOS_CreateParams ipcFramesOutHostPrm;
IpcFramesInLinkRTOS_CreateParams ipcFramesInVideoPrm;
UInt32 ipcFrameOutHostId = SYSTEM_HOST_LINK_ID_IPC_FRAMES_OUT_0;
UInt32 ipcFrameInVideoId = SYSTEM_VIDEO_LINK_ID_IPC_FRAMES_IN_0;
UInt32 ipcFrameInHostId = SYSTEM_HOST_LINK_ID_IPC_FRAMES_IN_0;
UInt32 ipcFrameOutVideoId = SYSTEM_VIDEO_LINK_ID_IPC_FRAMES_OUT_0;
int i = 0;
//初始化组件参数
CHAINS_INIT_STRUCT(IpcFramesOutLinkHLOS_CreateParams,ipcFramesOutHostPrm);
CHAINS_INIT_STRUCT(IpcFramesInLinkRTOS_CreateParams,ipcFramesInVideoPrm);
CHAINS_INIT_STRUCT(IpcFramesInLinkHLOS_CreateParams,ipcFramesInHostPrm);
CHAINS_INIT_STRUCT(IpcFramesOutLinkRTOS_CreateParams,ipcFramesOutVideoPrm);
System_linkControl(
SYSTEM_LINK_ID_M3VIDEO,
SYSTEM_COMMON_CMD_SET_CH2IVAHD_MAP_TBL,
&systemVid_encDecIvaChMapTbl,
sizeof(SystemVideo_Ivahd2ChMap_Tbl),
TRUE
);
UInt32 numFrames=FRAME_NUM;
IpcFramesBufObj frameObj[FRAME_NUM];
int frameSize = MCFW_IPCBITS_GET_YUV420_FRAME_SIZE(FRAME_WIDTH,FRAME_HEIGHT);
Vsys_AllocBufInfo bufInfo;
memset(frameObj,0,sizeof(IpcFramesBufObj) * numFrames);
for (i = 0; i < numFrames;i++)
{
int status = Vsys_allocBuf(0,frameSize,128,&bufInfo);
if (ERROR_NONE == status)
{
frameObj[i].bufPhy = (UInt32)bufInfo.physAddr;
frameObj[i].bufVirt = bufInfo.virtAddr;
frameObj[i].maxWidth = FRAME_WIDTH;
frameObj[i].maxHeight = FRAME_HEIGHT;
frameObj[i].curWidth = FRAME_WIDTH;
frameObj[i].curHeight = FRAME_HEIGHT;
frameObj[i].numCh = 6;
frameObj[i].refCnt = 0;
printf("AllocBuf phyAddr 0x%x VirtAddr 0x%x\n",bufInfo.physAddr,bufInfo.virtAddr);
}
else
{
printf("allocBuf error\n");
break;
}
}
//配置FRAMEHOST
ipcFramesOutHostPrm.baseCreateParams.inQueParams.prevLinkId = SYSTEM_LINK_ID_INVALID;
ipcFramesOutHostPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
ipcFramesOutHostPrm.baseCreateParams.numOutQue = 1;
ipcFramesOutHostPrm.baseCreateParams.numChPerOutQue[0] = 1;
ipcFramesOutHostPrm.baseCreateParams.outQueParams[0].nextLink = ipcFrameInVideoId;
//ipcFramesOutHostPrm.inQueInfo.numCh
ipcFramesOutHostPrm.baseCreateParams.noNotifyMode = FALSE;
ipcFramesOutHostPrm.baseCreateParams.notifyNextLink =TRUE;
ipcFramesOutHostPrm.baseCreateParams.notifyPrevLink = FALSE;
// ipcFramesOutHostPrm.inQueInfo = *inQueInfo;
ipcFramesOutHostPrm.inQueInfo.numCh = 1;//gVdecModuleContext.vdecConfig.numChn;
for (i=0; i<=ipcFramesOutHostPrm.inQueInfo.numCh; i++)
{
ipcFramesOutHostPrm.inQueInfo.chInfo[i].dataFormat = SYSTEM_DF_YUV420SP_UV;
ipcFramesOutHostPrm.inQueInfo.chInfo[i].memType = SYSTEM_MT_TILEDMEM;
ipcFramesOutHostPrm.inQueInfo.chInfo[i].width = FRAME_WIDTH;
ipcFramesOutHostPrm.inQueInfo.chInfo[i].height = FRAME_HEIGHT;
ipcFramesOutHostPrm.inQueInfo.chInfo[i].scanFormat = SYSTEM_SF_PROGRESSIVE;
ipcFramesOutHostPrm.inQueInfo.chInfo[i].pitch[0] = SystemUtils_align(
ipcFramesOutHostPrm.inQueInfo.chInfo[i].width+ipcFramesOutHostPrm.inQueInfo.chInfo[i].startX,
SYSTEM_BUFFER_ALIGNMENT);
ipcFramesOutHostPrm.inQueInfo.chInfo[i].pitch[1] = ipcFramesOutHostPrm.inQueInfo.chInfo[i].pitch[0];
ipcFramesOutHostPrm.inQueInfo.chInfo[i].pitch[2] = 0;
}
//配置VIDEOIN
ipcFramesInVideoPrm.baseCreateParams.inQueParams.prevLinkId = ipcFrameOutHostId;
ipcFramesInVideoPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
ipcFramesInVideoPrm.baseCreateParams.numOutQue = 1;
ipcFramesInVideoPrm.baseCreateParams.outQueParams[0].nextLink = ipcFrameOutVideoId;
ipcFramesInVideoPrm.baseCreateParams.noNotifyMode = FALSE;
ipcFramesInVideoPrm.baseCreateParams.notifyNextLink = TRUE;
ipcFramesInVideoPrm.baseCreateParams.notifyPrevLink = TRUE;
//配置VIDEOOUT
ipcFramesOutVideoPrm.baseCreateParams.inQueParams.prevLinkId = ipcFrameInVideoId;
ipcFramesOutVideoPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
ipcFramesOutVideoPrm.baseCreateParams.numOutQue = 1;
ipcFramesOutVideoPrm.baseCreateParams.outQueParams[0].nextLink = ipcFrameInHostId;
ipcFramesOutVideoPrm.baseCreateParams.noNotifyMode = FALSE;
ipcFramesOutVideoPrm.baseCreateParams.notifyNextLink = TRUE;
ipcFramesOutVideoPrm.baseCreateParams.notifyPrevLink = TRUE;
//配置HostIn
ipcFramesInHostPrm.baseCreateParams.inQueParams.prevLinkId = ipcFrameOutVideoId;
ipcFramesInHostPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
ipcFramesInHostPrm.baseCreateParams.outQueParams[0].nextLink = SYSTEM_LINK_ID_INVALID;
ipcFramesInHostPrm.cbFxn = ipcFramesInCbFxn;
ipcFramesInHostPrm.cbCtx = NULL;
ipcFramesInHostPrm.exportOnlyPhyAddr = TRUE;
ipcFramesInHostPrm.baseCreateParams.noNotifyMode = FALSE;
ipcFramesInHostPrm.baseCreateParams.notifyNextLink = FALSE;
ipcFramesInHostPrm.baseCreateParams.notifyPrevLink = TRUE;
System_linkCreate(ipcFrameInVideoId, &ipcFramesInVideoPrm, sizeof(ipcFramesInVideoPrm));
System_linkCreate(ipcFrameOutHostId, &ipcFramesOutHostPrm, sizeof(ipcFramesOutHostPrm));
System_linkCreate(ipcFrameInHostId, &ipcFramesInHostPrm, sizeof(ipcFramesInHostPrm));
System_linkCreate(ipcFrameOutVideoId, &ipcFramesOutVideoPrm, sizeof(ipcFramesOutVideoPrm));
usleep(1000000);
System_linkStart(ipcFrameInHostId);
System_linkStart(ipcFrameOutVideoId);
System_linkStart(ipcFrameInVideoId);
System_linkStart(ipcFrameOutHostId);
usleep(1000000);
printf("Ok,all run!\n");
VIDFrame_BufList frameList;
VIDFrame_BufList bufList;
//frameList.numFrames =numFrames;
for(i=0;i<numFrames;i++)
{
frameList.numFrames =1;
frameList.frames[0].addr[0][0] = frameObj[i].bufVirt;
frameList.frames[0].phyAddr[0][0] = (Ptr)frameObj[i].bufPhy;
frameList.frames[0].frameWidth = frameObj[i].curWidth;
frameList.frames[0].frameHeight = frameObj[i].curHeight;
frameList.frames[0].fid = 0;
frameList.frames[0].channelNum = 0;
frameList.frames[0].timeStamp = 0;
printf("tes111111111111111\n");
IpcFramesOutLink_putFullVideoFrames(SYSTEM_HOST_LINK_ID_IPC_FRAMES_OUT_0,
&frameList);
printf("test============\n");
break;
Int status;
re:
status = IpcFramesOutLink_getEmptyVideoFrames(SYSTEM_HOST_LINK_ID_IPC_FRAMES_OUT_0,
&bufList);
if (bufList.numFrames)
{
printf("emptyVideoFrame %d!\n",bufList.numFrames);
continue;
/// status = IpcFramesInLink_putEmptyVideoFrames(SYSTEM_HOST_LINK_ID_IPC_FRAMES_IN_0,
// &bufList);
// OSA_assert(0 == status);
}
else
{
usleep(4000);
goto re;
}
}
while(1)
{
char ch = Chains_menuRunTime();
if(ch=='0')
break;
if(ch=='i')
{
}
}
System_linkStop(ipcFrameInHostId);
System_linkStop(ipcFrameOutVideoId);
System_linkStop(ipcFrameInVideoId);
System_linkStop(ipcFrameOutHostId);
System_linkDelete(ipcFrameInHostId);
System_linkDelete(ipcFrameOutVideoId);
System_linkDelete(ipcFrameInVideoId);
System_linkDelete(ipcFrameOutHostId);
// System_linkDelete(ipcInVpssId );
// System_linkDelete(snkId);
// Print the HWI, SWI and all tasks load
// Reset the accumulated timer ticks
//Chains_prfLoadCalcEnable(FALSE, TRUE, FALSE);
//Utils_encdecHdvicpPrfPrint();
//Chains_ipcBitsExit();
}