140 lines
4.3 KiB
Markdown
140 lines
4.3 KiB
Markdown
|
---
|
|||
|
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
|
|||
|
<demo>
|
|||
|
<static ch_id = "0">
|
|||
|
|
|||
|
<frame_rate status = "off" value = "30"/>
|
|||
|
<bit_rate status = "off" value = "6291456"/>
|
|||
|
<vbv_size status = "on" value = "8388608"/>
|
|||
|
|
|||
|
<pixel_format status = "off"
|
|||
|
pxl_format = "VENC_PIXEL_YUV420SP"
|
|||
|
out_pxl_format = "1"
|
|||
|
/>
|
|||
|
</static>
|
|||
|
|
|||
|
<dynamic ch_id = "0">
|
|||
|
<frame_rate status = "on" value = "30"/>
|
|||
|
<bit_rate status = "off" value = "6291456"/>
|
|||
|
|
|||
|
<force_conf_win status = "off"
|
|||
|
u8_en_force_conf = "0"
|
|||
|
u32_lefet_offset = "0"
|
|||
|
u32_right_offset = "0"
|
|||
|
u32_top_offset = "0"
|
|||
|
u32_bottom_offset = "0"
|
|||
|
/>
|
|||
|
</dynamic>
|
|||
|
</demo>
|
|||
|
```
|
|||
|
|
|||
|
## 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
|
|||
|
<frame_rate status = "off" value = "30"/>
|
|||
|
```
|
|||
|
|
|||
|
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的内容。
|