目录
错误1,标清设备dev2 使用了视频层2,在初始化视屏层时发现错误
ss524 调试vdec->vo
程序根据HDMI例子修改
概念理解
设备 :超高清 高清 标清
程序中的定义
#define SAMPLE_VO_DEV_DHD0 0 /* VO's device HD0 */
#define SAMPLE_VO_DEV_DHD1 1 /* VO's device HD1 */
#define SAMPLE_VO_DEV_DSD0 2 /* VO's device SD0 */
视频层 :视屏层1 视频层2 视屏层3
#define SAMPLE_VO_LAYER_VHD0 0
#define SAMPLE_VO_LAYER_VHD1 1
#define SAMPLE_VO_LAYER_VHD2 2
视频层:SDK中 没有给出标清视频层的定义,在手册中查看到,标清的视频层LAYER3,在SDK中添加进入
#define SAMPLE_VO_LAYER_VSD0 3
错误1,标清设备dev2 使用了视频层2,在初始化视屏层时发现错误
<3>[ vo] [Func]:vo_drv_check_video_bind_support [Line]:601 [Info]:video layer(2) binded dev(2) is invalid, do not support to binded!
<3>[ vo] [Func]:vo_check_set_video_layer_attr [Line]:1158 [Info]:vo layer 2 can't set layer attr when the layer has not been binded!
通过 cat /dev/logmpp 查看
[ vo] [Func]:vo_check_set_video_layer_attr [Line]:1165 [Info]:vo layer 2 bind dev 0 doesn’t enable!
默认情况下,视频层2 绑定了设备0
dev0 绑定视频层2,在启用标清SAMPLE_VO_DEV_DSD0 layer时,需要先使能dev 0 所以单独cvbs输出,必须要先使能Dev 0,否则提示未使能绑定的设备。
dev 0 绑定设备层0 也是可以的,所以出现了 hdmi上显示cvbs的内容,因为 dev 0 bind layer2
将视频层2与设备0 解绑进行重新绑定
dev2 绑定视频层2 不支持 layer2是默认绑定到dev0 超高清上的,所以在设置layer2的属性时提示没有使能dev 0
总结:错误的原因是视频设备与图层绑定错误。查看手册 dev layer的对应关系。
启用视频层3 dev2 对应 layer3
在vdec与vo绑定的时候(不需要经过vpss),不能绑定错误,以下是绑定的程序
//vdec bind vo
ret = sample_comm_dec_bind_vo(1, 1, 3, 0);
if (ret != TD_SUCCESS) {
sample_print("vdec bind vo fail for %#x!\n", ret);
return ret;
}
td_s32 sample_comm_dec_bind_vo(ot_vpss_grp vpss_grp, ot_vpss_chn vpss_chn, ot_vo_layer vo_layer, ot_vo_chn vo_chn)
{
ot_mpp_chn src_chn;
ot_mpp_chn dest_chn;
src_chn.mod_id = OT_ID_VDEC;
src_chn.dev_id = 1;
src_chn.chn_id = 1;//这个地方是解码的第1通道,第0通道是高清视屏;并不是第1个设备的第1通道。
dest_chn.mod_id = OT_ID_VO;
dest_chn.dev_id = vo_layer;
dest_chn.chn_id = vo_chn;
check_return(ss_mpi_sys_bind(&src_chn, &dest_chn), "ss_mpi_sys_bind(VDEC-VO)");
return TD_SUCCESS;
}
错误2:干扰信息
这个输出是从logmpp上输出的,是在停止sample_vdec时的输出,而不是开启的时候。这点严重影响问题的定位,一直以为是开启的时候的错误。
<3>[ vo] [Func]:vo_drv_check_video_bind_support [Line]:596 [Info]:video layer(3) is invalid, do not support to change bind!
<3>[ vdec] [Func]:vdec_check_send_stream [Line]:651 [Info]:chn 0 not start to receive stream!
<3>[ vdec] [Func]:vdec_check_send_stream [Line]:651 [Info]:chn 0 not start to receive stream!
<3>[ vdec] [Func]:vdec_check_send_stream [Line]:651 [Info]:chn 1 not start to receive stream!
<3>[ sys] [Func]:sys_really_unbind [Line]:692 [Info]:src and dest is not binded!
<3>[ vo] [Func]:vo_is_dev_layer_enabled [Line]:265 [Info]:vo 2's video layer 3 doesn't disable!
错误3:视频格式不支持的错误
[ vdec] [Func]:vdec_event_unsupport [Line]:2781 [Info]:video format unsuport at event chn 1, errcode = a0233b13
[ vdec] [Func]:vdec_event_unsupport [Line]:2781 [Info]:video format unsuport at event chn 1, errcode = a0233b13
视频格式在手册上写的很清楚,只支持
所以修改了其他参数,也是报错的,只有这个参数不报错。
通过 cat /proc/umap/vo 输出的video format是正确的
这是因为解码的时候,出现不能解码的视频,而不是通道的问题。为啥不是通道?
思路:cvbs路的解码视频绑定到layer2上,验证解码有没有问题
于是我将layer 2层启用,layer 2默认是 绑定到vo 0上的,所以在hdmi上看到了视频的输出,但同时也看到了上面的错误打印。
得出结论:在vdec 参数不变,仅仅修改了vo layer,确能输出,说明vdec的问题不影响视频的输出。
进一步推论,在hdmi上显示出来的视频,有花屏的现场,解码有问题,猜测与logmpp的输出有关系。
总结:视频是能输出的,只是有一部分错误,这部分错误应该与花屏有关。
花屏的问题?如何解决
视频源没有问题,解码参数的问题,通过
发现默认视频解码模式选择的IP,没有解码B帧。将参数改为IPB后,错误输出没有了,花屏也没有了。