主要涉及到三个文件:(我的开发包是合众达提供的DVRRDK_02.00.00.23)
1、在multich_vdec_vdis.c文件里有一个开关量enableVideoFrameExport控制
IpcFramesOutLinkHLOS、IpcFramesInLinkRTOS、MergeLink这三个link是否打开,
我将这个量设为TRUE;
2、在demo_vdec_vdis.c文件里也有一个开关量VDEC_VDIS_ENABLE_IPCFRAMESOUT控制
是否运行VdecVdis_ipcFramesCreate()与VdecVdis_ipcFramesStart()这两个函数,
我也将这个量设为TRUE
3、在demo_vdec_vdis_frames_send.c文件里有上面两个函数的实现方法,VdecVdis_ipcFramesCreate()先创建一个线程并等待数据的到来,
当数据到来之后,循环执行四个函数实现bufList的赋值、读取、清空。VdecVdis_ipcFramesStart()为bufList先分配内存空间,然后
读取一帧YUV图像到bufList,最后发送信号量激活VdecVdis_ipcFramesCreate()函数。
通过上面的配置,运行没有报错但结果却没有改变,仍然只显示解码的视频,YUV图像并没有显示出来。
————————————————————————分割线——————————————————————————————
我想可能是解码的一些link干扰了结果,于是删除了multich_vdec_vdis.c里面的解码一些links,对应着也修改了demo_vdec_vdis.c里的一些代码,
但运行的时候会出错,如下
[m3vpss ] 12894: Assertion @ Line: 2475 in links_m3vpss/swMs/swMsLink_drv.c: status == FVID2_SOK : failed !!!
并且抓取显示bufList.numFrames时它的值一直为0
请教大神,这里面哪里出现了错误,怎么才能让YUV图像显示出来呢?
ps:附件有log信息和源代码
Ternence_Hsu:
你好; 你先根据报错信息到 Line: 2475 in links_m3vpss/swMs/swMsLink_drv.c , 到这个位置确定一下错误的原因; 你的这个demo可以再简单一点,先做1路视频的yuv 的处理,再做多路; 先查一下你源码中的这个错误是原因吧。里面可以看到配置错误失败返回的位置的。
Ternence_Hsu:
回复 Ternence_Hsu:
刚才查了一下源码,错误在处理一帧数据的时候错误的; SwMsLink_drvModifyFramePointer(pObj, pDrvObj[i], 1); status = FVID2_processFrames(pDrvObj[i]->fvidHandle, &pDrvObj[i]->processList); UTILS_assert(status == FVID2_SOK);你可以跟一下 FVID2_processFrames 这个函数,在hdvpss中找到对应的源码;你这里已经接都到了yuv数据,在处理的时候报错的,具体还是跟代码好一点;无法帮你确定到底是哪个参数出现的问题。
buyu wang:
回复 Ternence_Hsu:
Ternence Hsu ,非常感谢您的回复
接下来我会跟踪一下SwMs里面的源码,但在这之前我还有一些疑问:
1、在原来的demo_vdec_vdis里,不会报错,而且检测bufList.numFrames的值显示的是1和0的交替(0的值比较多)。而输入结果只有解码视频的图像,从IPCframesOut读入的YUV并没有显示,这是不是与mergelink有关,mergelink是怎么处理两路图像的?我在开发包里没有找到它的详细说明。
2、在我修改的demo里,bufList.numFrames的值一直为0就是因为在swms处出现问题吗?各个link之间有制约关系吗?
TI中文支持网

