在采集--编码--显示demo里,采集四路视频,0~3采集通道依次是pal、pal、sdi和vga;
发现问题:前三路没有编码数据,只有第四路vga有编码数据可存成h264文件,前3路文件大小一直为0,四路显示均正常。
排除过程:一度怀疑VcapVenc_bitsWriteCreate()--->status = OSA_thrCreate(&gVcapVenc_ctrl.wrThrHndl,VcapVenc_bitsWriteMain,OSA_THR_PRI_DEFAULT,0,&gVcapVenc_ctrl)中的条件变量等待,但是
MultiCh_ipcBitsInitCreateParams_BitsInHLOS(&ipcBitsInHostPrm);
System_linkCreate(gVencModuleContext.ipcBitsInHLOSId, &ipcBitsInHostPrm, sizeof(ipcBitsInHostPrm));
编码部分一直发信号量,不存在阻塞的。即是去掉VcapVenc_bitsWriteMain()中的等待条件变量一样没编码数据。
首先为了缩小问题范围,将采集改成只有pal一路视频,也就是一个采集实例,发现实际的阻塞是因为VcapVenc_bitsWriteMain(void *pPrm)-->status = Venc_getBitstreamBuffer(&bitsBuf, TIMEOUT_NO_WAIT),bitsBuf.numBufs= 0,也就是根本没有编码数据,至少是存编码文件这个线程中没有数据,即进去跟踪
IpcBitsInLink_getFullVideoBitStreamBufs(gVencModuleContext.ipcBitsInHLOSId,&ipcBufList),ipcBufList.numBufs = 0,再进去发现status = IpcBitsInLink_getFullBitBufs(pObj,bufList),bufList->numBufs = 0, 进去又发现
OSA_queGet(&pObj->outBitBufQue,(Int32 *) (&pBitBufList->bufs[idx]), OSA_TIMEOUT_NONE),hndl->count只有前3次不为0,后面一直为0。
问题在哪里,难道真是没有编码吗?通过上面的跟踪打印也只能看出事A8核确实没有编码数据,那么在M3Video核到底有没有产生数据呢,因为video核的都是link,没法打印调试具体有没有数据。因为同样的软件,有两个pal、一个sdi和第四路是vga时,vga可保存编码数据,可以说原来的软件流程是没问题,那么这个问题怎么调试可看出M3核到底有没有编码呢