数据传输过程:A8–videoM3–decode–vpssM3–sclr–dup–videoM3–encode–A8,link这样用对吗?
SYSTEM_HOST_LINK_ID_IPC_BITS_OUT_0,SYSTEM_VIDEO_LINK_ID_IPC_BITS_IN_0,
SYSTEM_LINK_ID_VDEC_0,SYSTEM_VIDEO_LINK_ID_IPC_OUT_M3_0,
SYSTEM_VPSS_LINK_ID_IPC_IN_M3_0,SYSTEM_LINK_ID_MP_SCLR_INST_0,
SYSTEM_VPSS_LINK_ID_DUP_0,SYSTEM_VPSS_LINK_ID_IPC_FRAMES_OUT_0,
SYSTEM_VIDEO_LINK_ID_IPC_FRAMES_IN_0,SYSTEM_LINK_ID_VENC_0,
SYSTEM_VIDEO_LINK_ID_IPC_BITS_OUT_0,SYSTEM_HOST_LINK_ID_IPC_BITS_IN_0。
编码那里好像没数据,有新数据的时候打印SYSTEM_CMD_NEW_DATA,打印信息查不到。希望高人指导一下,刚接触。
Ternence_Hsu:
你好;
SYSTEM_VPSS_LINK_ID_DUP_0,SYSTEM_VPSS_LINK_ID_IPC_FRAMES_OUT_0,
SYSTEM_VIDEO_LINK_ID_IPC_FRAMES_IN_0,SYSTEM_LINK_ID_VENC_0,
需要调整为:
SYSTEM_VPSS_LINK_ID_DUP_0,SYSTEM_VPSS_LINK_ID_IPC_OUT_M3_0,
SYSTEM_VIDEO_LINK_ID_IPC_IN_M3_0,SYSTEM_LINK_ID_VENC_0,
hl chu:
回复 Ternence_Hsu:
感谢Hsu的回复,解码那里case SYSTEM_CMD_NEW_DATA只有一次啊,原来也是,我后面数据还没做处理。解码完从videoM3出去在IpcFramesOutLink_tskMain也查不到case SYSTEM_CMD_NEW_DATA,你觉得问题出在哪里呢
SYSTEM_VPSS_LINK_ID_IPC_FRAMES_OUT_0和SYSTEM_VPSS_LINK_ID_IPC_OUT_M3_0有什么区别呢
Ternence_Hsu:
回复 hl chu:
你这里的解码应当是处理失败了,后面肯定是不会有数据的;
你的demo这样写,每一个环节都可能会出现问题,建议从简单的开始,确定dec 正常、enc正常、ipc正常、dup正常,再来实现上面的demo;
这样方便定位问题;
你可以把各模块的状态打印出来,分析link模块状态,在哪一步处理失败的;
Ternence_Hsu:
回复 hl chu:
hl chuSYSTEM_VPSS_LINK_ID_IPC_FRAMES_OUT_0和SYSTEM_VPSS_LINK_ID_IPC_OUT_M3_0有什么区别呢
SYSTEM_VPSS_LINK_ID_IPC_FRAMES_OUT_0 把m3vpss的YUV数据传送到a8或者是dsp;
SYSTEM_VPSS_LINK_ID_IPC_OUT_M3_0 把m3vpss的YUV数据传送到m3video;
hl chu:
回复 Ternence_Hsu:
感谢Hsu,我是在usecase里的multich_vdec_vdis.c基础上改的,加了2个dup:-> dup [0]-> swms0->display0-> dup[1] -> swms1->display1-> dup[2] -> ipcFramesOutVpss-> IpcFramesInDsp-> dup[3] -> ipcFramesOutVpss1-> ipcFramesInVideo-> enc-> ipcBitsOutVideo-> ipcBitsInHost.获取待解码数据的Utils_queGet获取到的类型不是DEC_LINK_REQ_OBJECT_TYPE_REGULAR,获取了两次是DEC_LINK_REQ_OBJECT_TYPE_DUMMY_CHDELETE和DEC_LINK_REQ_OBJECT_TYPE_DUMMY_FLUSHFRAME,后面没进入Declink_h264DecodeFrameBatch,会是什么原因呢
hl chu:
回复 hl chu:
数据进入videoM3后,IpcBitsInLink_processBitBufs里面获取数据的循环只循环了一次
while (1) { pListElem = ListMP_getHead(pObj->listMPOutHndl); if (pListElem == NULL) { break; } Vps_printf(" %d: IpcBitsInLink_processBitBufs:pListElem != NULL!!!\n", Utils_getCurTimeInMsec());
IpcBitsInLink_getBitBuf(pObj, pListElem, &pBitBuf); UTILS_assert(SYSTEM_IPC_BITS_GET_BUFSTATE(pListElem->bufState) == IPC_BITBUF_STATE_OUTQUE); pBitBuf->reserved[0] = curTime; SYSTEM_IPC_BITS_SET_BUFOWNERPROCID(pListElem->bufState); SYSTEM_IPC_BITS_SET_BUFSTATE(pListElem->bufState, IPC_BITBUF_STATE_DEQUEUED); pObj->stats.recvCount++; status = Utils_quePut(&pObj->outBitBufQue, pBitBuf, BIOS_NO_WAIT); UTILS_assert(status == FVID2_SOK);
numBitBufs++; }
后面打印numBitBufs为1,转换为bitBuf后,打印pBitBuf->bufSize[0], pBitBuf->fillLength[0], pBitBuf->mvDataFilledSize[0],这是没有数据吗,后面就是获取的类型不是DEC_LINK_REQ_OBJECT_TYPE_REGULAR,没进解码函数
hl chu:
回复 hl chu:
DEC_LINK_REQ_OBJECT_TYPE_DUMMY_FLUSHFRAME类型是什么