TI中文支持网
TI专业的中文技术问题搜集分享网站

DM8168 H.264 编码无数据输出

软件环境 : DVRRDK_04.00.00.03
硬件环境 : DM8168, 一路PAL信号输入,需要对PAL信号进行H.264 baseline profile 进行编码,存储成文件,或者网络发送。

问题1 :
Cap(YUV420SP_UV) -> Dup -> swMs -> Dis
                                             |
                                             –> ipcOutVpss -> ipcInVideo -> Enc -> ipcBitsOutVideo -> ipcBitsInHost -> wirte file
在上面的这种链路下,如何H.264的格式为 high profile 和 main profile时, 可以输出显示,并且能生成H.264文件,
生成的文件可以用VLC播放。
但是,如果见profile 改成 baseline profile 运行是就会报错,错误信息如下:
————————————————————————-
[m3vpss ] 22018: IPC_OUT_M3 : Create in progress !!!
[m3vpss ] 22019: IPC_OUT_M3 : Create Done !!!
[m3video] 22037: ENCODE: Creating CH0 of 720 x 288, pitch = (736, 736) [INTERLACED ] [NON-TILED ], bitrate = 2000 Kbps … [m3video] 22048:!ERROR!:ENCLINK::links_m3video/iva_enc/encLink_h264.c:[232]::INTERNAL ERROR:-1
[m3video] ALGCONTROL FAILED:CMD:6
[m3video] ERROR: IH264ENC_PROFILE_INCOMPLAINT_CONTENTTYPE = 1,
[m3video] ERROR: XDM_UNSUPPORTEDPARAM = 14, [m3video] ERROR: XDM_FATALERROR = 15 [m3video] 22049:!ERROR!:ENCLINK::links_m3video/iva_enc/encLink_h264.c:[232]::INTERNAL ERROR:-1
[m3video] ALGCONTROL FAILED:CMD:3
[m3video] ERROR: IH264ENC_PROFILE_INCOMPLAINT_CONTENTTYPE = 1, [m3video] ERROR: XDM_UNSUPPORTEDPARAM = 14, [m3video] ERROR: XDM_FATALERROR = 15 [m3video] [m3video] 22049:ERR::linkID:10000021::channelID:0::errorCode:-5::FileName:links_m3video/iva_enc/encLink_h264.c::linuNum:1276::errorCondition:(algStatus == XDM_EOK)
[m3video] ENCLINK_H264:HEAPID:0 USED:1896
[m3video] 22050: Assertion @ Line: 949 in links_m3video/iva_enc/encLink_common.c: retVal == ENC_LINK_S_SUCCESS : failed !!
—————————————————————————–
问题2 :
针对问题1的情况,和查阅的相关资料,baseline profile 不支持interlace信号的编码(high 和 main 支持),于是改变了link连接如下:
Cap(YUV422I_YUYV) -> Nsf -> DEIH -> swMs -> Dis
                                                            |
                                                            –> ipcOutVpss -> ipcInVideo -> Enc -> ipcBitsOutVideo -> ipcBitsInHost -> wirte file
其中DEI设置如下:
———————————————————-
deiPrm.enableOut[DEI_LINK_OUT_QUE_DEI_SC] = TRUE; deiPrm.enableOut[DEI_LINK_OUT_QUE_VIP_SC] = TRUE;
deiPrm.comprEnable = FALSE;
deiPrm.setVipScYuv422Format = FALSE;

deiPrm.enableDeiForceBypass = FALSE;
deiPrm.enableLineSkipSc = FALSE;
deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_DEI_SC][0].scaleMode = DEI_SCALE_MODE_ABSOLUTE;

deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_DEI_SC][0].absoluteResolution.outWidth = 720;
deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_DEI_SC][0].absoluteResolution.outHeight = 576;

deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC][0].scaleMode = DEI_SCALE_MODE_ABSOLUTE;

deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC][0].absoluteResolution.outWidth = 720;
deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC][0].absoluteResolution.outHeight = 576;

deiPrm.outQueParams[DEI_LINK_OUT_QUE_DEI_SC].nextLink = gVdisModuleContext.swMsId[0];
deiPrm.outQueParams[DEI_LINK_OUT_QUE_VIP_SC].nextLink = ipcOutVpssId;
———————————————————-
希望DEIH的一路输出 DEI_SC 为 YUV422I 用于显示,另一路输出 VIP_SC 为YUV420SP 用于编码。
程序运行的时候出错,错误信息如下:
——————————————
[m3vpss ] 20841: DEI : Create Done !!!
[m3vpss ] 20841: IPC_OUT_M3 : Create in progress !!!
[m3vpss ] 20842: IPC_OUT_M3 : Create Done !!!
[m3video] 20861: ENCODE: Creating CH0 of 720 x 576, pitch = (1440, 1440) [PROGRESSIVE] [NON-TILED ], bitrate = 2000 Kbps … [m3video] 20861: Assertion @ Line: 759 in links_m3video/iva_enc/encLink_common.c: pChAlgCreatePrm->inputChromaFormat == XDM_YUV_420SP : failed !!! ——————————————
后来自己做了一个测试,发现如果 DEI_SC 和 VIP_SC 同时使能输出的话,传给ipcOutVpssId实际是DEI_SC的数据而不是 VIP_SC 的数据。
问题3 :
针对问题2存在的问题,再一次修改link链接,如下:
Cap(YUV422I_YUYV) -> Dup -> swMs -> Dis
                                               |
                                            Nsf -> DEIH(VIP_SC) –> ipcOutVpss -> ipcInVideo -> Enc -> ipcBitsOutVideo -> ipcBitsInHost -> wirte file
这样在DEIH中禁止DEI_SC输出,使能VIP_SC输出,如下:
—————————————————- deiPrm.enableOut[DEI_LINK_OUT_QUE_VIP_SC] = TRUE;
deiPrm.comprEnable = FALSE;
deiPrm.setVipScYuv422Format = FALSE;

deiPrm.enableDeiForceBypass = FALSE;
deiPrm.enableLineSkipSc = FALSE;

deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC][0].scaleMode = DEI_SCALE_MODE_ABSOLUTE;

deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC][0].absoluteResolution.outWidth = 720;
deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC][0].absoluteResolution.outHeight = 576;

deiPrm.outQueParams[DEI_LINK_OUT_QUE_VIP_SC].nextLink = ipcOutVpssId;
——————————————————–
修改之后,运行没有问题,能够显示输出,但是编码没有数据输出:
附件中是我的程序源码,以及针对问题3,调试串口打印的输出信息。
希望能够帮忙分析一下,给我一点建议,我现在调的没有头绪,呵呵。 附件中是的我程序源码和log。

yanbin ch:

回复 Ternence_Hsu:

还有个问题,回掉函数是在什么时候调用的?

编码前的link : ipcOutVpss 和 ipcInVideo 

编码后的link:  ipcBitsOutVideo 和 ipcBitsInHost 有没有出问题的可能?

ipcOutVpss -> ipcInVideo -> Enc -> ipcBitsOutVideo -> ipcBitsInHost

Ternence_Hsu:

回复 yanbin ch:

有可能有问题的

赞(0)
未经允许不得转载:TI中文支持网 » DM8168 H.264 编码无数据输出
分享到: 更多 (0)