--- title: ve编码参数xml配置使用指南 subtitle: author: Allwinner changelog: - ver: 1.0 date: 2023.12.29 author: 陈亦斌 desc: | 初稿 --- # 概述 ## 背景介绍 在一些场景下,如画质调节,存在编码方案在编码过程能够动态调整参数的需求。 ### 编写目的 指导基于ve_param_x.xml文件,如何进行参数的配置和使用。 ## 适用范围 AW系列编码方案。 ## 相关人员 编码相关产品的开发人员及技术支持人员。 # xml文件内容解释 举例,有xml文件ve_param_0.xml,配置内容如下: ```xml ``` ## xml文件路径 1. xml文件默认路径是/etc目录,默认文件名ve_param_[n].xml,eg. /etc/ve_param_0.xml 2. 用户可以自己修改路径,方法如下: - 在tmp目录下创建文件ve_param_file_path.conf,eg. touch ve_param_file_path.conf - 把xml路径和前缀输入到conf文件中,如 echo /tmp/ve_param_ > ve_param_file_path.conf。注意不需要输入完整的文件名,只输入前缀,这样是为了能够匹配到所有通道。 下次push xml文件就push到自己指定的路径中即可,eg. adb push ve_param_0.xml /tmp ## 文件名中的数字后缀 快起和非快起区别如下: 1. 在长电方案即非快起,表示第几通道,只是简单的増序id(非vipp num),如ve_param_4.xml表示要设置第四个通道的参数; 2. 在快起方案,表示第几通道,同时也代表了是哪个vipp num,如ve_param_4.xml表示第4通道,同时也表示vipp_num是4。 ## tag中的status属性 1. on,表示要设置该tag中的参数 2. off,表示不需要设置 ## tag中的static和dynamic属性 1. tag在static范围内的内容,在编码初始化的时候才会进行解析,会把用户设置的参数修改为xml中的内容; 2. tag在dynamic范围内的内容,在编码过程中进行解析,解析完后会自动给文件名添加后缀_used,表示已经解析过了,eg: ve_param_0_used.xml。 如需再次设置请重新push xml文件到/etc目录或者自己修改的目录中,或者直接mv ve_param_0_used.xml ve_param_0.xml后再次使用 ## 如何在代码中自己添加参数设置 请搜索关键函数check_ve_param_file去查看例子,简单概述如下: 1. xml文件添加tag和键值对,如 ```xml ``` 2. 代码start_parse_tag函数中添加相应的tag字符串比对,并把值赋值给对应添加的参数成员,同时设置参数到编码器中。 ```c if (strcmp(tag_name, "frame_rate") == 0) { for (unsigned int i = 0; attr[i]; i += 2) { parse_frame_rate_param(ve_param, attr, i); } VencSetParameter(pVideoEnc, VENC_IndexParamFramerate, &ve_param->fps); } ```     具体请查看对应函数代码 # 使用方式 以上面的ve_param_0.xml文件为例子,另改变了xml文件路径到tmp目录。 1. 首先在tmp目录创建ve_param_file_path.conf,并echo 文件路径进去,如下 ```shell root@TinaLinux:/tmp# touch ve_param_file_path.conf root@TinaLinux:/tmp# echo /tmp/ve_param_ > ve_param_file_path.conf root@TinaLinux:/tmp# cat ve_param_file_path.conf /tmp/ve_param_ ``` 2. 确认好哪些参数需要配置的,把status改为on,然后把文件ve_param_0.xml,用adb或者其他方式,放置到tmp目录 ```shell adb push .\ve_param_0.xml tmp ``` 3. 运行demo/app,编码器初始化的时候会配置xml中tag 为static并status 为on的内容,编码过程中会配置xml中tag 为dynamic并status 为on的内容。