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();
}
zwh awe:
– -期待楼主搞通 我也是最近才玩8168。。只跑过mcfw和link的demo。。。看了点东西 还没自己弄过呢。。果断跟随
还有楼主。。你在用的时候 会用到ccs么
ipanda:
回复 zwh awe:
烧写Uboot的时候用到过,从sd卡烧写uboot失败有错误,只能通过ccs烧写,其他的没用过…
zwh awe:
回复 ipanda:
楼主你调好了么。。我也想弄个最简单的自己的写的源码 可是不会编译。。。。。求指导
楼主留个q呗
ipanda:
回复 zwh awe:
sorry,没有调好,帮不上忙了…
jone yang:
hi, SYSTEM_VIDEO_LINK_ID_IPC_FRAMES_IN_0 这个link id 在 system_linkId.h没有定义吧, 是不是你新增加的link id
sheng xie:
仁兄,你的这个问题解决没,我也遇到你同样的问题,搞了好久也不行,我的应用场景是capture通过VpassFramesOut 到A8,然后A8通过HostFramesOut到encode,也是出现你同样的错误.如果解决了,能否共享一下,谢谢!
zhul huang:
回复 jone yang:
你好,这个问题你解决了没?我也遇到了同样的问题,解决了希望你能共享一下经验
Ray Zheng:
我看到系统头文件中没有SYSTEM_VIDEO_LINK_ID_IPC_FRAMES_IN_0,是楼主自定义的吧?我用的是SYSTEM_HOST_LINK_ID_IPC_BITS_OUT_0和SYSTEM_VIDEO_LINK_ID_IPC_BITS_IN_0,执行起来没问题,不过就是在ipcBitsOutHost link中填充数据归还buffer后,ipcBitsInVideo link老是获取不到buffer,查代码也是ListMP_getHead返回为空造成,还在查原因。
zhong liu:
回复 Ray Zheng:
您好!
请问您的问题解决了吗?是什么导致的呢?
谢谢!
TI中文支持网
