基于联咏平台NT985XX 编码配置及常见问题解析

一、概述

hd_videoenc 的主要目的是从上层单元获取图像原始数据,并控制视频编码器对该图像进行编码,输出码流后可用于保存档案或进行在线串流。

二、HDAL interface介绍

这部分可以直接参考 video_record.c 这支 sample code,

开启与关闭一路的 venc 模块的顺序如下:

hd_videoenc_init: 对编码进行初始化。

hd_videoenc_open: 开启编码通道。

hd_videoenc_set: 设定 config参数与编码参数。

hd_videoenc_start: 用于生效videoenc模块之参数设定与绑定关系。

hd_videoenc_stop: 停止编码通道。

hd_videoenc_close: 关闭编码通道。

hd_videoenc_uninit:对编码进行去初始化。

hd_videoenc_push_in_buf: 非绑定模式下送入 yuv 给 venc 做编码。

hd_videoenc_pull_out_buf: 取出码流。

hd_videoenc_release_out_buf:释放kflow bs缓冲区空间。

三、hd_videoenc_set模块说明:

参数设置hd_videoenc_set可以分为两部分,一是设定Config 参数,二是设定编码参数。

3.1、设定config参数:

video_record.c 中的 set_enc_cfg()

hd_videoenc_set(path, HD_VIDEOENC_PARAM_PATH_CONFIG, &config); 

3.2、 设定编码参数:

参考 video_record.c 中的 set_enc_param()

3.2.1  in参数

hd_videoenc_set(path, HD_VIDEOENC_PARAM_IN, &param);

3.2.2  out参数

hd_videoenc_set(path, HD_VIDEOENC_PARAM_OUT_ENC_PARAM, &param);

3.2.3  rc参数

hd_videoenc_set(path, HD_VIDEOENC_PARAM_OUT_RATE_CONTROL, &rc_param)

四、cat /proc/hdal/venc/info

编码模块最常用的指令就是 cat /proc/hdal/venc/info,在板端跑完AP之后,下此指令可以打印与其他模块的绑定状态、编码器配置设定、编码参数设定值等等。

4.1、查看绑定状态

可以看到这里是绑定模式,videoenc_0_in_0与videoproc_0_out_0绑定:

若是非绑定模式,bind_src显示null

4.2、 venc max_mem size

Venc的max_mem size可以对应到sample code path config中的参数设定,

其大小则取决于max_w, max_h, svc, ltr, bitrate, enc_ms, sout。

max_mem size=codec_size + bs_buff_size + srcout_size。

五、FAQ

5.1、hd_videoenc_start这支API在流程中起到什么作用?

答:分配kflow和kdrv所需的内存,以及编码参数值设定给kdrv。

5.2、hd_videoenc_start会配置kflow和kdrv所需的内存,那会在什么阶段释放?

答:会在hd_videoenc_close释放内存。

5.3、Videoenc部分各个模块的参数该如何理解?

答:参考文档Novatek_HDAL_Videoenc_Programming_Guide_zh.pdf,该文档对videoenc的参数和api都有详细的解释。

5.4、如何理解报错WRN:_NMR_VdoTrig_TrigAndWait() [VDOTRIG][1] queue frame count >= 90, time = 3180304963 us 。

答:此错误表示videoenc path1没有pull out,导致bs满了会发WRN作警告。

解法:可以下指令echo vdoenc encinfo 1 > /proc/hdal/venc/cmd,看到Bque的值是不是很满,若是90,就要检查流程是否有pull out来解决问题。

5.5、WRN:_NMR_VdoTrig_TrigAndwait() [vDoTRIG][2] input frame idx = 410, size not enough, drop frame,time = 325564535 us。

答:表示videoenc path2 没有release out导致bs缓冲区没有释放空间而报错。

解法:下指令echo vdoenc encinfo 2 > /proc/hdal/venc/cmd查看Bque值,

下指令echo isfve showmsg 2 2048 > /proc/hdal/venc/cmd查看帧间隔时间是否过长或飘忽不定,若下此指令没有任何打印,代表没有取流,确认后需自行检查取流线程是否有误。

参考文献:Novatek HDAL Design Specification - hd_videoenc

          NT9852x_BRC_User_Guide_zh

欲知更多技术内容可点击此处前往大大通阅览~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值