MI VENC API
REVISION HISTORY¶
Revision No. | Description |
Date |
---|---|---|
3.0 | 12/04/2020 | |
3.1 | 01/19/2021 | |
3.2 | 01/26/2021 | |
08/25/2021 | ||
3.3 | 11/17/2021 | |
3.4 | 02/18/2022 | |
03/04/2022 | ||
3.5 | 03/24/2022 | |
03/25/2022 | ||
04/22/2022 | ||
3.6 | 05/31/2022 | |
06/27/2022 | ||
07/21/2022 | ||
09/30/2022 | ||
10/14/2022 | ||
3.7 | 10/27/2022 | |
12/01/2022 | ||
01/10/2023 | ||
3.8 | 03/13/2023 | |
04/06/2023 | ||
04/12/2023 | ||
05/05/2023 | ||
05/06/2023 | ||
06/05/2023 | ||
06/12/2023 | ||
06/13/2023 | ||
3.9 | 06/21/2023 | |
3.10 | 07/03/2023 | |
07/25/2023 | ||
3.11 | 08/07/2023 | |
11/17/2023 | ||
3.12 | 12/08/2023 | |
3.13 | 05/11/2024 |
1. 概述¶
1.1. 模块介绍¶
视频编码模块主要提供视频编码通道的创建和销毁、开启和停止接收图像、设置和获取编码通道属性、获取和释放码流等功能。 本模块支持多路实时编码,每路独立,且可以设置不同编码协议和profile。不同CHIP支持的编码协议如下:
Chip |
编码协议 |
|||
---|---|---|---|---|
JPEG |
H264 |
H265 |
AV1 |
|
Maruko | Y | Y | Y | N |
Opera | Y | Y | Y | N |
Souffle | Y | Y | Y | Y |
Iford | Y | Y | Y | N |
1.2. 编码流程¶
编码流程包含了输入图像的接收,对输入图像的编码,和编码后码流的输出等过程。
H.264/H.265/AV1的输入图像YUV格式只支持NV12,JPEG的输入图像YUV格式支持NV12或YUYV422。本模块的输入源包括以下两类:
-
APP直接注入图像数据到编码模块。
-
绑定的前级模块发送图像数据到编码模块。
如下图所示:
1.2.1. Maruko编码流程图¶
Device id为MI_VENC_DEV_ID_H264_H265_0的device,用于编码H.264/H.265; Device id为MI_VENC_DEV_ID_JPEG_0的device,用于编码JPEG。
1.2.2. Opera编码缩略图¶
Device id为MI_VENC_DEV_ID_H264_H265_0的device,用于编码H.264/H.265; Device id为MI_VENC_DEV_ID_JPEG_0的device,用于编码JPEG。
1.2.3. Souffle编码缩略图¶
Device id为MI_VENC_DEV_ID_H264_H265_0的device,用于编码H.264/H.265/AV1; Device id为MI_VENC_DEV_ID_JPEG_0的device,用于编码JPEG。
1.2.4. Iford编码缩略图¶
Device id为MI_VENC_DEV_ID_H264_H265_0的device,用于编码H.264/H.265; Device id为MI_VENC_DEV_ID_JPEG_0的device,用于编码JPEG。
1.3. 编码通道¶
编码通道作为基本的控制单元,相互之间是完全独立的。
Encoder(HW)完成原始图像转化为码流的功能,具体由Rate Controller和Encoder(SW)协同控制完成。
每个通道的Rate Controller和Encoder(SW)会保存当前编码的所有用户设定和管理编码通道内部的所有资源,诸如码率控制,Buffer的需求与分配等。
码率控制保证输出码率与图像质量的平衡稳定,编码器则专注于各个Codec的语法元素实现。
软件与硬件同时控制,同一个Codec硬件分时复用。以两个编码通道为例,基本框图如下
1.4. 关键字说明¶
1.4.1. QP¶
Quantization 参数:QP值对应量化步长的序号,值越小,量化步长越小,量化的精度就越高,画质也就越好,编码出来的size也越大。
1.4.2. GOP¶
Group Of Pictures:指的是两个I帧的间隔。视频图像序列由一个或多个图像组GOP组成,GOP之间是独立的。
1.4.3. MB¶
Macroblock:编码宏块,H.264编码的基本单元。
1.4.4. CU¶
Coding Unit:编码单元,H.265编码的基本单元。
1.4.5. SPS¶
Sequence 参数 Set:序列参数集,包含了一个GOP中所有图像的公有信息。
1.4.6. PPS¶
Picture 参数 Set:图像参数集,包含了一张图像编码所用的参数。
1.4.7. SEI¶
Supplemental Enhancement information:辅助增强信息。
1.4.8. ECS¶
Entropy-coded segment:JPEG熵编码后的压缩图像条带。
1.4.9. MCU¶
Minimum code unit:JPEG编码的基本单元。
1.4.10. 码率控制¶
从信息学角度来看,图像压缩比与质量成反比:压缩比越高,质量越低;压缩比越低,质量越高。以H.264为例,一般图像Qp越低,图像质量越高,码率越高;图像Qp越高,图像质量越低,码率越低。 不同编码协议对码率控制算法支持如下表:
Chip |
Rate Control Algorithm |
|||||
---|---|---|---|---|---|---|
FIXQP |
CBR |
VBR |
AVBR |
UBR |
CVBR |
|
Maruko | H.264/H.265/JPEG | H.264/H.265/JPEG | H.264/H.265 | H.264/H.265 | NONE | NONE |
Opera | H.264/H.265/JPEG | H.264/H.265/JPEG | H.264/H.265/JPEG | H.264/H.265 | NONE | NONE |
Souffle | H.264/H.265/AV1/JPEG | H.264/H.265/AV1/JPEG | H.264/H.265/AV1/JPEG | H.264/H.265/AV1 | H.264/H.265/AV1 | H.264/H.265/AV1 |
Iford | H.264/H.265/JPEG | H.264/H.265/JPEG | H.264/H.265/JPEG | H.264/H.265 | H.264/H.265 | H.264/H.265 |
-
FIXQP
FIXQP(Fix Quantization 参数)固定Qp,在任意时间点,编码图像的所有基本单元Qp 都直接采用用户设定值,H.264/H.265/AV1 I帧和P帧的Qp可以分别设置
H.264/H.265/AV1的控制流程图如下:
JPEG的控制流程图如下:
采用ITU-t81 K.1节推荐的Qp表,将用户设置的Qfactor按照一定公式转化成比例因子,两者相乘就是最后的Qp。
-
CBR
CBR(Constant Bit Rate)为固定比特率,在码率统计时间内保证编码码率稳定。编码中I帧与P帧预测方式不同,造成编码后Size的明显差异,底层的统计时间以Gop为基本单位,在Gop之间会实现比特的累积与补偿。
主要步骤如下:
-
将用户设定的Fps/Gop/Bitrate转换成每个Gop的Bits;
-
I/P区分处理,按照Gop Bits以及分辨率计算Bpp(BitPerPixel);
-
通过码率控制模型,将Bpp映像到Frame Qp;
-
HW在Frame Qp基础上通过画面纹理复杂度等信息进一步调整MB/CU Qp;
-
编码结束后更新码率控制模型,以达到整个序列的不断稳定,同时累积Bit误差, 用于后续帧Bit分配的微调;
-
整个Gop结束后累积整个Gop的Bit误差,用于下一个Gop Bit分配的微调。
控制流程图如下:
-
-
VBR
VBR(Variable Bit Rate)为可变比特率,允许在码率统计时间内编码码率波动,从而保证编码图像质量平稳。
以H.264为例,用户可设置MaxQp,MinQp,MaxBitRate和ChangePos,具体可以参考MI_VENC_ParamH264Vbr_t。MaxQp和MinQP用于控制图像的质量范围; MaxBitRate用于钳位码率统计时间内的最大编码码率;ChangePos用于控制开始调整Qp的码率基准线,是一个相对于最大码率的百分比,即当编码码率大于MaxBitRate*ChangePos时,图像Qp会逐步向MaxQp调整,若图像Qp已到达MaxQp,图像Qp会被钳位到最大值,MaxBitRate的钳位效果失去,编码码率可能会超过MaxBitRate; 若编码码率小于MaxBitRate*ChangePos,图像Qp会逐步向MinQp调整,若图像Qp已到达MinQp,编码码率已达到最大值,图像质量最好。
具体流程如下:
-
将用户设定的Fps/Gop/MaxBitrate/ChangePos以及Resolution转换成序列的初始质量基准设定序列起始Qp。
-
HW在Frame Qp基础上通过画面纹理复杂度等信息进一步调整MB/CU Qp。
-
编码完后更新码率控制模型。
-
更新整体序列的质量。
-
根据当前期望的Bit与实际编码的Bit差计算偏差系数Deviation以及决定是否可以提高或者降低质量。
-
通过偏差系数以及两个质量系数计算当前帧的目标质量。
-
将目标质量映射为Frame Qp,从2循环。
控制流程图如下:
-
-
AVBR
AVBR(Adaptive Variable Bit Rate)自适应可变比特率,允许在码率统计时间内编码码率波动,从而保证编码图像质量平稳。码率控制内部会检测当前场景的运动静止状态,在运动时采用较高码率编码,静止时主动降低码率。以H.264为例,用户可设置MaxBitRate, ChangePos和MinStillPercent,具体可参考MI_VENC_ParamH264Avbr_t。MaxBitRate表示运动场景下的最大码率;MinStillPercent表示静止状态下最小码率相对于调节阈值码率的百分比,MaxBitRate * ChangePos * MinStillPercent表示静止场景下的最小码率,目标码率根据运动程度的不同会在最小码率和最大码率之间调整;MaxQp和MinQp用于控制图像的质量范围,码率控制以Qp钳位为最高优先级,超出MinQp和MaxQp范围码率控制将失效。
-
注意事项
SAD功能从Muffin平台开始集成到VENC AVBR模式中, 也就是说, Muffin之后的平台, 编码器内部集成了SAD计算功能,不再需要SED模块帮忙计算SAD。
-
-
UBR
UBR(Unspecified Bit Rate)为未定比特率, 允许用户根据回调函数输出的参数进行下一帧的编码参数设置。
-
使用场景
用户希望使用自己的帧级码控算法时设置,块级QP支持全部相同,只参考复杂度调整和同时参考复杂度与用户设定的帧目标大小三种不同模式。
-
流程介绍
-
API实现
在app内,实现四个函数OnVencUserRcInit()、OnVencUserRcDeinit()、OnVencUserRcAttrChange()、OnVencUserRcCalc(), VENC内部会调用这四个函数;
-
Create venc channel, 设置UBR mode
使用上和CBR, VBR类似;
模式选择E_MI_VENC_RC_MODE_H264UBR或E_MI_VENC_RC_MODE_H265UBR, 见MI_VENC_RcMode_e;
-
Start channel, 开始编码
VENC会每接收到一张编码帧,会执行OnVencUserRcCalc,然后根据计算出来的Qp值进行编码,保证实时性。
OnVencUserRcCalc内耗时长短可能会影响venc编码的性能。
-
实现流程图如下:
-
-
API说明
在APP内,实现四个函数OnVencUserRcInit()、OnVencUserRcDeinit()、OnVencUserRcAttrChange()、OnVencUserRcCalc(), 详情见以下接口:
-
-
CVBR
CVBR(Constrained Variable Bit Rate)约束可变比特率,简单场景会在保证画质的同时节省码率,复杂运动场景时,利用简单场景节省的码率尽可能地提高图像质量,达到同时兼顾码率和图像质量的目的。以H.264为例,用户可设置码率参数MaxBitRate、LongTermMaxBitRate、LongTermMinBitRate和周期参数ShortTermStatsTime、LongTermStatsTime,具体可参考MI_VENC_AttrH264Cvbr_t。MaxBitRate表示在ShortTermStatsTime统计时间内可以达到的最大码率,当简单场景节省下码率后,复杂运动的场景下可以达到MaxBitRate。LongTermMaxBitRate表示LongTermStatsTime统计时间内的码率上限,简单场景下会调节码率低于LongTermMaxBitRate从而为复杂场景节省码率。LongTermMinBitRate表示LongTermStatsTime统计时间内的码率下限,简单场景的码率不会低于LongTermMinBitRate。
例如:
1.当场景全程静态简单时,CVBR会始终控制码率低于长期最大码率来节省码率。
2.当场景全程运动复杂时,由于没有节省的码率,CVBR会控制码率保持在长期最大码率,此时效果与CBR相同。
3.当场景前期静态简单,后期运动复杂时,CVBR前期会节省码率,当运动复杂时码率可以超过长期最大码率来改善画质,但最多不会超过短期最大码率。如果前期节省的码率使用完毕,CVBR会控制码率保持在长期最大码率。
4.当场景前期运动复杂,后期静态简单时,CVBR前期会控制码率保持在长期最大码率,后期会控制码率低于长期最大码率来节省码率。
1.4.11. QPMAP¶
QPMAP模式下允许用户自由决定码率控制的策略,支持绝对QpMap和相对QpMap。请参考MI_VENC_AllocCustomMap。
1.4.12. 参考帧结构¶
H.264/H.265单帧只支持参考1个参考帧,但是整个码流支持多个参考帧缓存。例如: LTR/TSVC3模式,每张P都只可以参考一个,但是最多会保存2个参考帧供不同p帧参考
参考帧共支持5种模式:NormalP,LTR(VI Ref IDR),LTR(VI Ref VI),TSVC-2和TSVC-3。 所有参考帧结构由三个参数控制:u32Base,u32Enhance和bEnablePred,具体含义请参考MI_VENC_ParamRef_t。u32Enhance设置为0将转换为NormalP参考帧结构,其余结构开启请参考对应结构图,系统默认为NormalP参考帧结构。以下详细介绍每种参考关系结构图和参数设定。
-
NormalP
NormalP为最基本和常见的参考关系,P帧直接参考前一张,其结构图如下图所示:
-
LTR mode
LTR(Long Term Reference)采用长期参考帧+短期参考帧实现同一帧可以被多张参考, 该模式定义一种特殊的P为虚拟I帧(VI),与全部使用IDR相比,采用VI可以降低码率, 同时又保持一定的错误恢复能力。目前LTR支持两种模式:VI全部参考最近的IDR和VI参考 上一个VI或者IDR(第一个VI的情况下)。两种参考模式结构示意图如下:
注意:开启LTR底层需要额外占用一张Buffer。
-
TSVC-2
TSVC-2提供两层编码,帧率可以在½和全帧率之间变化,其结构图如下:
-
TSVC-3
TSVC-3提供三层编码,帧率可以在¼,½,¾和全帧率之间变化。其结构图如下:
注意:开启TSVC-3底层需要额外占用一张Buffer。
1.4.13. 裁剪编码¶
裁剪编码,即从图像中裁剪出一部分进行编码,用户可以设置裁剪的起始点left/top、 width和height,具体功能请参考相关API:MI_VENC_SetCrop。示意图如下:
1.4.14. ROI¶
ROI(Region Of Interest)编码,感兴趣区域编码,用户可以通过配置ROI区域,对该区域的图像Qp进行限制,从而实现图像中该区域的Qp与其他图像区域的差异化。系统支持H264、H265和AV1编码设置ROI,根据平台不同,最大提供8或者16个ROI区域供用户同时使用。
若平台最大支持16个ROI区域,16个ROI区域可以互相叠加,且叠加时的优先级按照0 ~ 15的索引号依次提高,也即叠加区域的Qp最终判定只按最高优先级的区域处理。ROI区域可以配置绝对Qp与相对Qp两种模式:
绝对Qp:ROI区域的Qp为用户设定的Qp值。
相对Qp:ROI区域的Qp为码率控制产生的Qp与用户设定的Qp偏移值的和。
以下示例为编码图像采用FixQp模式,设置图像Qp为30,即图像所有宏块Qp值为30。ROI 区域0设置为绝对Qp模式,Qp值为20,索引为0;ROI区域1设置为相对Qp模式,Qp为-15, 索引为1。因为ROI区域0的index小于ROI区域1的index,所以在发生重叠的图像区域按 高优先级的ROI区域1的Qp设置。除了重叠部分的ROI区域0的Qp值为20,区域1的Qp值为 30-15=15。
1.4.15. 非ROI区域的低帧率编码¶
为了减低传输码率,对于非ROI区域,可采用低帧率编码,即开启ROI后ROI区域正常编码, 而非ROI区域则可以通过设定源和目标的比例关系降低帧率,根据该比例关系,一个GOP 里面一些帧的非ROI区域会直接用上一帧对应区域的数据,用户可以根据实际情况设置 非ROI区域相对帧率,注意只有ROI开启才生效。请参考API:MI_VENC_SetRoiBgFrameRate, 其中s32SrcFrmRate与s32DstFrmRate只表示比例关系,与实际帧率无关。
注意:Souffle平台不支持非ROI区域的低帧率编码功能。
1.4.16. Bind Type¶
一般来说前级与venc的bind type是E_MI_SYS_BIND_TYPE_FRAME_BASE,即前级完整做完一张Frame buffer,再输出给venc,这种模式至少需要分配3张Frame buffer。不过若前级是SCL,还有另外两种节省内存的bind type: E_MI_SYS_BIND_TYPE_HW_RING和E_MI_SYS_BIND_TYPE_REALTIME。
E_MI_SYS_BIND_TYPE_HW_RING是指SCL与VENC只在同一张Frame buffer上边读边写,可以有效的节省模块之间的Buffer,但不同CHIP支持的最小Buffer不同。
E_MI_SYS_BIND_TYPE_REALTIME有两种模式,一种是IMI mode,一种是EMI mode。如果使用IMI mode,则SCL与VENC之间无需额外分配Dram buffer,SCL与VENC在内部Sram buffer上边读边写;如果使用EMI mode,则SCL与VENC之间需要分配一张Dram buffer,SCL与VENC在这张Dram buffer上边读边写。Souffle/Iford平台上由于不支持IMI mode,所以E_MI_SYS_BIND_TYPE_REALTIME绑定时默认为EMI mode,需要消耗一张Dram buffer。其他平台默认使用IMI mode,暂不支持修改这个模式。
不同Chip和编码协议对bind type的支持如下:
Chip |
Codec |
Bind Type |
||
---|---|---|---|---|
FRAME_BASE | HW_RING | REALTIME | ||
Maruko | H.264/H.265 | Y | Y | N |
JPEG | Y | N | Y | |
Opera | H.264/H.265 | Y | Y | N |
JPEG | Y | N | Y | |
Souffle | H.264/H.265/AV1 | Y | Y | N |
JPEG | Y | N | Y | |
Iford | H.264/H.265 | Y | Y | N |
JPEG | Y | N | Y |
E_MI_SYS_BIND_TYPE_REALTIME绑定并且为IMI mode时,不同Chip和输入图像YUV格式支持的最大宽度如下:
Chip |
Input Yuv Format |
|
---|---|---|
NV12 | YUYV422 | |
Maruko | 不支持 | 3840 |
Opera | 1920 | 1920 |
Souffle | 不支持 | 不支持 |
Iford | 不支持 | 不支持 |
E_MI_SYS_BIND_TYPE_REALTIME绑定并且为EMI mode时,不同Chip和输入图像YUV格式支持的最大宽度如下:
Chip |
Input Yuv Format |
|
---|---|---|
NV12 | YUYV422 | |
Souffle | 8192 | 8192 |
Iford | 3840 | 3840 |
配置SCL与VENC之间采用E_MI_SYS_BIND_TYPE_HW_RING方式绑定,并通过MI_VENC_SetInputSourceConfig设置buffer mode为E_MI_VENC_INPUT_MODE_RING_UNIFIED_DMA(JPEG编码时不支持此功能)。该Frame buffer可在初始化SCL时调用SYS提供的MI_SYS_ConfigPrivateMMAPool接口进行配置,具体使用方法详见MI SYS API介绍。如果两路SCL输出YUV的大小不一致,Frame buffer按最大输出大小申请。 不同Chip SCL与VENC共用的Frame buffer最小值如下:
Chip |
Codec |
Bind Type |
||
---|---|---|---|---|
HW_RING | REALTIME | |||
Maruko | H.264/H.265 | IFC开启1/4张Buffer, 不开启1/2张Buffer | N | |
JPEG | N | 不支持设定,默认16条线 | ||
Opera | H.264/H.265 | IFC开启1/4张Buffer, 不开启1/2张Buffer | N | |
JPEG | N | 不支持设定,默认16条线 | ||
Souffle | H.264/H.265/AV1 | 1张Buffer | N | |
JPEG | N | 不支持设定,默认一张 | ||
Iford | H.264/H.265 | 1张Buffer | N | |
JPEG | N | 不支持设定,默认一张 |
注意事项:
-
VENC支持同时输出YUV后级可以级联VENC子通道。VENC各通道之间的bind type采用E_MI_SYS_BIND_TYPE_HW_RING,并且无需调用MI_VENC_SetInputSourceConfig进行额外设置。VENC各子通道之间共用一块Frame buffer进行YUV数据流传输,只支持整张读写。由于VENC级联时只支持缩小,后级通道输出图像的大小必须小于或等于前级通道的输出,所以该Frame buffer由VENC主通道调用MI_SYS_ConfigPrivateMMAPool接口并根据子通道中最大输出图像大小进行配置一次即可。工作模型如下图:
VENC级联时,输出ES的分辨率与输入yuv的分辨率一致,SCL_D输出的分辨率必须小于等于输入yuv的分辨率。例如下图中VENC OUTPUT ES PORT的分辨率会与VENC INPUT YUV PORT保持一致。
-
VENC最后一级输出YUV支持用户Get/Put,此时用户需要配置独立的YUV输出Buffer
-
Maruko平台在E_MI_SYS_BIND_TYPE_REALTIME绑定时不支持输入图像格式为NV12格式,仅支持输入图像YUV格式使用YUYV422。
1.4.17. 编码码流输出Buffer配置¶
不同Chip由于SW架构不同,支持不同的方式,底层的默认分配方式如下表:
Chip | H.264 | H.265 | JPEG |
---|---|---|---|
Maruko | Ring pool:WidthxHeight/2 | Ring pool:WidthxHeight/2 | Ring pool:WidthxHeight/2 |
Opera | Ring pool:WidthxHeight/2 | Ring pool:WidthxHeight/2 | Ring pool:WidthxHeight/2 |
Souffle | Ring pool:WidthxHeight/2 | Ring pool:WidthxHeight/2 | Ring pool:WidthxHeight/2 |
Iford | Ring pool:WidthxHeight/2 | Ring pool:WidthxHeight/2 | Ring pool:WidthxHeight/2 |
以上为各Chip的默认输出Buffer配置,用户可以通过MI_VENC_CreateChn去指定输出Buffer配置。以H.264为例,可以通过设置stVeAttr.stAttrH264e.u32BufSize去指定输出Buffer配置,若为0,则采用上表默认配置。采取Ring pool模式,每个Channel会单独分配一个output pool,每次编码都从该pool里获取空闲的最大Buffer,有效提高了Buffer的使用率,减少了内存碎片。
注意:Maruko/Opera/Souffle Chip下jpe内部会申请两个output pool,以支持realtime mode满帧输出,否则只能达到前端mi scl输出帧率的一半。若jpe只有frame mode或者在realtime mode下帧率要求不高时,调整参数max_jpe_task=1,强制开一个output pool节省内存。
举例,修改modparam.json文件(一般在板端/config目录下),增加如下字段:
"E_MI_MODULE_ID_VENC" : { "max_jpe_task": 1 }
1.4.18. 多进程支持的场景说明¶
支援的场景:
-
支援相同device,不同channel的多进程编码。
例如:
process1创建了device0,channel0编码。process2创建了device0,channel1编码。process3创建了device0,channel2编码。
-
支援不同device的多进程编码。
例如:
process1创建了device0,channel0编码。process2创建了device8,channel0编码。process3创建了device9,channel0编码。
-
支援在编码进程1外的进程2进行参数获取与设置。
例如:
process1创建了device0,channel0编码和device1,channel0编码。process2创建了device0,channel1编码和device1,channel1编码。可以在process3中对device0的channel0和channel1编码通道,device1的channel0和channel1编码通道进行参数的获取与设置。如process3调用MI_VENC_SetChnAttr函数去设置device0,channel0的编码通道属性。
注意:在进程1创建的资源如device0,channel0,需要在进程1中进行销毁。
不支援的场景:
-
不支援在进程2中对进程1创建的编码通道进行送流和取流。
例如:
process1创建了device0,channel0,但是不做送流取流。process2对device0,channel0进行送流和取流操作。
-
进程1创建的前级模块通道不支援与进程2创建的VENC通道绑定,串流需要保证前后级通道是在同一进程中创建的。
例如:
process1创建了SCL的device1,channel0通道。process2创建了VENC的device0,channel0通道。在process1或者process2中将SCL的device1,channel0,port0与VENC的device0,channel0,port0进行绑定是不支援的。如果希望串流,需要保证绑定的前后级通道是在同一个进程中创建的。
1.4.19. 帧率控制¶
当venc模块与前级模块绑定(BindType介绍详见1.4.16小节),并且 venc主路后级没有接venc子流 时,用户控制venc某一通道输出帧率的方式可通过调用 MI_SYS_BindChnPort2 接口设置前级(scl模块)输入帧率参数u32SrcFrmrate与后级输出帧率参数u32DstFrmrate实现,并且 输出帧率只能小于等于输入帧率 。如果中途改变venc输出帧率,需要调用 MI_SYS_UnBindChnPort 接口解绑,再调用 MI_SYS_BindChnPort2 接口重新设置帧率参数。
当venc模块与前级模块采用HW_RING方式绑定,并且 venc主路后级接有子流 时,用户控制venc某一通道输出帧率的方式有所改变,即调用 MI_SYS_BindChnPort2 接口设置前级(venc或者scl模块)输入帧率参数u32SrcFrmrate等于后级输出帧率参数u32DstFrmrate,并在MI_VENC_CreateChn时设置该通道的输出帧率参数,最终实际输出帧率由MI_VENC_CreateChn时设置的帧率参数控制。以H264编码FixQp为例:
MI_VENC_ChnAttr_t stChnAttr; stChnAttr.stRcAttr.stAttrH264FixQp.u32SrcFrmRateNum = 30; stChnAttr.stRcAttr.stAttrH264FixQp.u32SrcFrmRateDen = 1; MI_VENC_CreateChn(VeDev, VeChn, &stChnAttr);
此种方式可以做到 后级通道输出帧率大于前级通道输出帧率,但是如果主路进来的帧率(scl模块输入)小于设置的输出帧率,将不做帧率控制,以主路输入为准 。图示如下:
如果需要中途改变venc的输出帧率,用户需调用MI_VENC_SetChnAttr接口,重新设置输出帧率。以H264编码FixQp为例:
MI_VENC_ChnAttr_t stChnAttr; MI_VENC_GetChnAttr(VeDev, VeChn, &stChnAttr); stChnAttr.stRcAttr.stAttrH264FixQp.u32SrcFrmRateNum = 15; stChnAttr.stRcAttr.stAttrH264FixQp.u32SrcFrmRateDen = 1; MI_VENC_SetChnAttr(VeDev, VeChn, &stChnAttr);
1.5. modparam¶
-
venc支持通过modparam修改部分参数配置, 用户可以根据需要进行修改。各参数具体信息如下表:
参数名
是否支持客户配置
作用
默认参数
Maruko Opera Souffle Iford use_ring_ref Y 是否开启帧节省模式, 开启后不支持超大帧重编 1 1 1 1 default_h26x_width Y H264/H265编码默认的device级宽的最大值, 单位为pixel
未使用MI_VENC_CreateDev创建device时内部会先使用此宽值创建相应的device3840 3840 8192 3840 default_h26x_height Y H264/H265编码默认的device级高的最大值, 单位为pixel
未使用MI_VENC_CreateDev创建device时内部会先使用此高值创建相应的device2176 2176 2176 2176 default_jpe_width Y JPEG编码默认的device级宽的最大值, 单位为pixel
未使用MI_VENC_CreateDev创建device时内部会先使用此高值创建相应的device8192 8192 8192 8192 default_jpe_height Y JPEG编码默认的device级高的最大值, 单位为pixel
未使用MI_VENC_CreateDev创建device时内部会先使用此高值创建相应的device8192 8192 8192 8192 max_h26x_task Y H264/H265/AV1编码同一设备最大同时编码task数量 2 2 4 4 max_jpe_task Y JPEG编码同一设备最大同时编码task数量 2 2 2 2 compress_mode Y 默认的输入数据压缩模式, 参见MI_SYS_CompressMode_e 6 6 6 None max_chn_num Y 同一设备可创建的最大通道数 64 64 64 64 rtpm_timeout_us Y VENC RTPM模式默认超时时间, 超过该时间venc会尝试进入suspend状态 None None 1000000 None enable_early_terminate Y 是否使能HW加速编码, 目前仅H264 High profile及H265编码时支持, 开启后编码性能有所提高,但同等码率时画质有极小降低 None None 0 None -
模块参数可通过文件modparam.json进行配置和修改,该文件一般放在板端/config目录下。参数配置可参照如下方式:
"E_MI_MODULE_ID_VENC" : { "use_ring_ref" : 1, "default_h26x_width" : 4096, "default_h26x_height" : 2176, "default_jpe_width" : 8192, "default_jpe_height" : 8192, "max_h26x_task" : 4, "max_jpe_task" : 2, "compress_mode" : 6, "max_chn_num" : 64, "rtpm_timeout_us" : 1000000, "enable_early_terminate" : 0, }
-
模块参数也可通过echo命令导入修改后的配置, 流程如下:
-
用户需在调用VENC相关api之前进行设置;
-
新建json文件, 举例需要修改enable_bsp_ring为1, 新建文件命名为enable_bsp_ring.json, 内容如下:
"E_MI_MODULE_ID_VENC" : { "enable_bsp_ring": 1 }
-
使用echo命令导入json配置,参见procfs load_modparam命令使用说明。
echo enable_bsp_ring.json > /proc/mi_modules/mi_common/modparam echo load_modparam > /proc/mi_modules/mi_venc/mi_venc0
-
-
注意
-
insmod ko时参数初始化完成。
-
发送load_param命令时重新初始化模块参数。
-
2. API参考¶
2.1. MI_VENC_CreateDev¶
-
描述
创建venc设备。
-
语法
MI_S32 MI_VENC_CreateDev(MI_VENC_DEV VeDev, MI_VENC_InitParam_t *pstInitParam);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 pstInitParam 设备初始化参数指针。 输入 -
返回值
-
MI_SUCCESS:成功。
-
非MI_SUCCESS:失败,参照错误码。
-
-
依赖
-
头文件:mi_venc.h, mi_venc_datatype.h
-
库文件:libmi_venc.a/libmi_venc.so
-
-
注意
-
此函数可以不调用,但MI_VENC_CreateChn需要指定有效的device id,内部会创建相应的device。
-
本接口必须和MI_VENC_DestroyDev成对使用,不可单独重复调用,否则返回失败。
-
Opera内部特性:
-
调用本接口创建VENC Device时必须正确传入pstInitParam的最大宽高值u32MaxWidth、u32MaxHeight,内部默认的最大宽高为 352*288。
-
VENC与VDEC共同使用时,必须先调用本接口创建VENC Device再调用MI_VDEC_CreateDev创建VDEC Device。
-
-
2.2. MI_VENC_DestroyDev¶
-
描述
销毁venc设备。
-
语法
MI_S32 MI_VENC_DestroyDev(MI_VENC_DEV VeDev);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 -
返回值
-
MI_SUCCESS:成功。
-
非MI_SUCCESS:失败,参照错误码。
-
-
依赖
-
头文件:mi_venc.h, mi_venc_datatype.h
-
库文件:libmi_venc.a/libmi_venc.so
-
-
注意
-
此函数必须在创建设备后调用,否则返回失败。
-
如果本接口在app退出前没有调用,内部会自动销毁设备。
-
本接口必须和MI_VENC_CreateDev成对使用,不可单独重复调用,否则返回失败。
-
2.3. MI_VENC_CreateChn¶
-
功能
创建编码通道。
-
语法
MI_S32 MI_VENC_CreateChn(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_ChnAttr_t *pstAttr);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM) 输入 pstAttr 编码通道属性指针 输入 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件:mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
芯片差异
不同Chip支持的编码规格如下表所示:
Chip
H.264
H.265
JPEG
AV1
Baseline Profile Main Profile High Profile Main Profile Baseline Profile Profile 0 Maruko Y Y Y Y Y N Opera Y Y Y Y Y N Souffle Y Y Y Y Y Y Iford Y Y Y Y Y N HW要求的input YUV buffer数据对齐参数如下表所示:
编码协议 绑定模式 输入YUV格式 宽度对齐(字节) 高度对齐(字节) H264/H265/AV1 Frame mode sp420 32 32 Ring mode 32 2 JPE Frame mode sp420 32 16 yuyv422 32 16 Realtime mode sp420 32 16 yuyv422 32 16 不同Chip支持的编码通道宽高差异如下表所示:
Chip Resolution Spec H.264 H.265 JPEG AV1 Maruko MIN_WIDTHxMIN_HEIGHT 256x128 256x128 16x16 None MAX_WIDTHxMAX_HEIGHT 4096x2176 4096x2176 8192x6480 None MIN_ALIGN 8x2 8x2 8x2 None Opera MIN_WIDTHxMIN_HEIGHT 256x128 256x128 16x16 None MAX_WIDTHxMAX_HEIGHT 2688x1952 2688x1952 3840x3840 None MIN_ALIGN 8x2 8x2 8x2 None Souffle MIN_WIDTHxMIN_HEIGHT 256x128 256x128 16x16 256x128 MAX_WIDTHxMAX_HEIGHT 8192x8192 8192x8192 8192x8192 4096x4096 MIN_ALIGN 8x2 8x2 8x2 8x2 Iford MIN_WIDTHxMIN_HEIGHT 114x114 114x114 16x16 None MAX_WIDTHxMAX_HEIGHT 3840x3840 3840x3840 3840x3840 None MIN_ALIGN 8x2 8x2 8x2 None 不同Chip支持的最大VENC_MAX_CHN_NUM 规格如下表所示:
芯片 最大值 Maruko 64 Opera 32 Souffle 64 Iford 64 -
注意
-
调用该API之前如果没有调用MI_VENC_CreateDev,但传入了有效的device id,则内部会先创建相应的device。
-
编码通道属性由两部分组成,编码器属性和码率控制器属性。
-
编码器属性首先需要选择编码协议,然后分别对各种协议对应的属性进行赋值。
-
编码器属性最大宽高,通道宽高必须满足如下约束:
MaxPicWidth∈[MIN_WIDTH,MAX_WIDTH]
MaxPicHeight∈[MIN_HEIGHT,MAX_HEIGHT]
PicWidth∈[MIN_WIDTH,MaxPicwidth]
PicHeight∈[MIN_HEIGHT,MaxPicHeight]
-
最大宽高,通道宽高必须是MIN_ALIGN的整数倍。
-
其中MIN_WIDTH,MAX_WIDTH,MIN_HEIGHT,MAX_HEIGHT,MIN_ALIGN分别表示编码通道支持的最小宽度,最大宽度,最小高度,最大高度,最小对齐单元(像素)。
-
当输入图像大小不大于通道编码图像最大宽高时,才能启动编码通道进行编码。
-
推荐的编码宽高为:3840x2160(4k*2k)、1920x1080(1080P)、1280x720(720P)、960x540、640x360、704x576、704x480、352x288、352x240。
-
编码器属性stVeAttr中除通道宽高(u32PicWidth/u32PicHeight)和profile以外,都是静态属性,一旦创建编码通道成功,静态属性不支持被修改,除非该通道被销毁,重新创建。设置时需要注意的事项请参考MI_VENC_SetChnAttr接口说明。
-
码率控制器属性首先需要配置RC模式,码率控制器属性RC模式必须与编码器属性协议类型匹配。
-
u32SrcFrmRateNum指编码模块帧率的分子部分,u32SrcFrmRateDen指编码模块帧率的分母部分。u32SrcFrmRateNum/u32SrcFrmRateDen应该设置为实际输入帧率,RC需要根据u32SrcFrmRateNum/u32SrcFrmRateDen统计实际帧率以及进行码率控制。如果编码图像的输入实际输入帧率为30,则u32SrcFrmRateNum设为30,u32SrcFrmRateDen设为1。
-
CBR除了上述的属性之外,还需要设置目标比特率。目标比特率的单位是bps。目标比特率的设置与编码通道宽高以及图像帧率都有关系。典型的目标比特率的设置如下表所示。注意,下表中的目标比特率的设置是在通道编码帧率为满帧率(30fps)时的设置。当用户设置编码输出帧率不为满帧率时,可以对下表中的码率按用户设置帧率与满帧率(30fps)的比例进行换算。
Image W/H/bitrate level D1 (720x576) 720p (1280x720) 1080p (1920x1080) Low bit rate < 400Kbps < 800Kbps < 2000Kbps Medium bit rate 400 ~ 1000Kbps 800kbps ~ 4000Kpbs 2000 ~ 8000Kbps High bit rate > 1000Kbps > 4000Kbps > 8000Kbps -
波动等级设置分为5档,波动等级越大,系统允许码率的波动范围更大。如果波动等级设置高,对于一些图像复杂,变化剧烈的场景,图像质量可能会更平稳,适用于网络带宽富裕的场景;如果波动等级设置低,编码的码率会比较平稳,对于一些图像复杂,变化剧烈的场景,图像质量可能不如高波动等级,适用于带宽不富裕的场景。这个字段保留,暂时没有使用到。
-
VBR除了上述属性之外,还需要设置MaxBitRate,MaxQp,MinQp。 MaxBitRate: 编码通道在码率统计时间内允许的最大码率。 MaxQp: 图像允许的最大QP。MinQp: 图像允许的最小QP。
-
FIXQP除了上述属性之外,还需要设置IQp,PQp。IQp:I帧时,图像固定使用的QP值。PQp: P帧时,图像固定使用的QP值。在设置I帧QP,P帧QP时,可以根据当前的带宽限制对I帧QP和P帧QP同时进行向上或是向下调整。为了减少呼吸效应,推荐I帧QP始终比P帧的QP小2~3。
-
-
举例
MI_S32 StartVenc() { MI_S32 s32Ret; MI_VENC_DEV VeDev = MI_VENC_DEV_ID_H264_H265_0; MI_VENC_CHN VeChn = 0; MI_VENC_ChnAttr_t stAttr; /*set h264 channel video encode attribute*/ stAttr.stVeAttr.eType = E_MI_VENC_MODTYPE_H264E; stAttr.stVeAttr.stAttrH264e.u32PicWidth = u32PicWidth; stAttr.stVeAttr.stAttrH264e.u32PicHeight = u32PicHeight; stAttr.stVeAttr.stAttrH264e.u32MaxPicWidth = u32MaxPicWidth; stAttr.stVeAttr.stAttrH264e.u32MaxPicHeight = u32MaxPicHeight; stAttr.stVeAttr.stAttrH264e.u32Profile = 2; /*set h264 channel rate control attribute*/ stAttr.stRcAttr.enRcMode = E_MI_VENC_RC_MODE_H264CBR; stAttr.stRcAttr.stAttrH264Cbr.u32BitRate = 10*1024*1024; stAttr.stRcAttr.stAttrH264Cbr.u32SrcFrmRateNum = 30; stAttr.stRcAttr.stAttrH264Cbr.u32SrcFrmRateDen = 1; stAttr.stRcAttr.stAttrH264Cbr.u32Gop = 30; stAttr.stRcAttr.stAttrH264Cbr.u32FluctuateLevel = 1; stAttr.stRcAttr.stAttrH264Cbr.u32StatTime = 1; s32Ret = MI_VENC_CreateChn(VeDev, VeChn, &stAttr); if (MI_SUCCESS != s32Ret) { printf("MI_VENC_CreateChn err0x%x\n", s32Ret); return E_MI_ERR_FAILED; } s32Ret = MI_VENC_StartRecvPic(VeDev, VeChn); if (s32Ret != MI_SUCCESS) { printf("MI_VENC_StartRecvPic err0x%x\n",s32Ret); return E_MI_ERR_FAILED; } return MI_SUCCESS; }
2.4. MI_VENC_DestroyChn¶
-
功能
销毁编码通道。
-
语法
MI_S32 MI_VENC_DestroyChn(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM) 输入 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件:mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
- 销毁并不存在的通道,返回失败。
-
举例
MI_S32 StopVenc() { MI_S32 s32Ret; MI_VENC_DEV VeDev = MI_VENC_DEV_ID_H264_H265_0; MI_VENC_CHN VeChn = 0; s32Ret = MI_VENC_StopRecvPic(VeDev, VeChn); if (s32Ret != MI_SUCCESS) { printf("MI_VENC_StopRecvPic err0x%x\n", s32Ret); return E_MI_ERR_FAILED; } s32Ret = MI_VENC_DestroyChn(VeDev, VeChn); if (s32Ret != MI_SUCCESS) { printf("MI_VENC_DestroyChn err0x%x\n", s32Ret); return E_MI_ERR_FAILED; } return MI_SUCCESS; }
2.5. MI_VENC_ResetChn¶
-
功能
复位通道,清除调用该接口之前缓存的图像和码流。
-
语法
MI_S32 MI_VENC_ResetChn(MI_VENC_CHN VeChn);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 通道号
取值范围:[0, VENC_MAX_CHN_NUM)输入 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件:mi_venc.h, mi_venc_datatype.h
-
库文件:libmi_venc.a/libmi_venc.so
-
-
注意
-
Reset并不存在的通道,返回失败MI_ERR_VENC_UNEXIST。
-
如果一个通道没有停止接收图像而reset通道,则返回失败。
-
2.6. MI_VENC_StartRecvPic¶
-
功能
开启编码通道接收输入图像。
-
语法
MI_S32 MI_VENC_StartRecvPic(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM) 输入 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件:mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
-
如果通道未创建,则返回失败MI_ERR_VENC_UNEXIST。
-
此接口不判断当前是否已经开启接收,即允许重复开启不返回错误。
-
只有调用该接口后编码器才开始接收图像编码。
-
-
举例
请参见MI_VENC_CreateChn的举例。
2.7. MI_VENC_StartRecvPicEx¶
-
功能
开启编码通道接收输入图像,超出指定的帧数后自动停止接收图像。
-
语法
MI_S32 MI_VENC_StartRecvPicEx(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_RecvPicParam_t *pstRecvParam);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM) 输入 pstRecvParam 接收图像参数结构体指针,用于指定需要接收的图像帧数。 输入 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件:mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
-
如果通道未创建,则返回失败MI_ERR_VENC_UNEXIST。
-
如果通道已经调用了MI_VENC_StartRecvPic 开始接收图像而没有停止接收图像,或者上次调用MI_VENC_StartRecvPicEx后还没有接收到足够的图像,再一次调用此接口将会返回MI_SUCCESS,并且此次操作无效。
-
该接口用于连续接收N帧并编码的场景,当N=0时,该接口等同于MI_VENC_StartRecvPic 。
-
如果通道已经调用了MI_VENC_StartRecvPic 开始接收图像,停止接收图像,再次调用MI_VENC_StartRecvPicEx启动编码时,建议用户调用MI_VENC_ResetChn清除编码模块在调用该接口之前缓存的图像和码流。
-
如果创建jpeg通道抓拍,建议用户调用MI_VENC_StartRecvPicEx,可以设定抓拍通道接收整数张图像后自动停止接收。
-
-
举例
MI_S32 JpegSnapProcess() { MI_S32 s32Ret; MI_VENC_DEV VeDev = MI_VENC_DEV_ID_JPEG_0; MI_VENC_CHN VeChn=0; MI_VENC_ChnAttr_t stAttr; MI_VENC_RecvPicParam_t stRecvParam; /*set jpeg channel video encode attribute*/ stAttr.stVeAttr.eType = E_MI_VENC_MODTYPE_JPEGE; stAttr.stVeAttr.stAttrJpeg.u32PicWidth = u32PicWidth; stAttr.stVeAttr.stAttrJpeg.u32PicHeight = u32PicHeight; stAttr.stVeAttr.stAttrJpeg.u32MaxPicWidth = u32MaxPicWidth; stAttr.stVeAttr.stAttrJpeg.u32MaxPicHeight = u32MaxPicHeight; //…omit other video encode assignments here. //create jpeg channel s32Ret = MI_VENC_CreateChn(VeDev, VeChn, &stAttr); if (MI_SUCCESS != s32Ret) { printf("MI_VENC_CreateChn err0x%x\n", s32Ret); return E_MI_ERR_FAILED; } //start snapping stRecvParam.s32RecvPicNum = 2; s32Ret = MI_VENC_StartRecvPicEx(VeDev, VeChn, &stRecvParam); if (s32Ret != MI_SUCCESS) { printf("MI_VENC_StartRecvPicEx err0x%x\n", s32Ret); return E_MI_ERR_FAILED; } //…wait until all pictures have been encoded. s32Ret = MI_VENC_StopRecvPic(VeDev, VeChn); if (s32Ret != MI_SUCCESS) { printf("MI_VENC_StopRecvPic err0x%x\n", s32Ret); return E_MI_ERR_FAILED; } s32Ret = MI_VENC_ResetChn(VeDev, VeChn); if (s32Ret != MI_SUCCESS) { printf("MI_VENC_ResetChn err0x%x\n", s32Ret); return E_MI_ERR_FAILED; } //destroy jpeg channel s32Ret = MI_VENC_DestroyChn(VeDev, VeChn); if (s32Ret != MI_SUCCESS) { printf("MI_VENC_DestroyChn err0x%x\n", s32Ret); return E_MI_ERR_FAILED; } return MI_SUCCESS; }
2.8. MI_VENC_StopRecvPic¶
-
功能
停止编码通道接收输入图像。
-
语法
MI_S32 MI_VENC_StopRecvPic(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM) 输入 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件:mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
-
如果通道未创建,则返回失败。
-
此接口并不判断当前是否停止接收,即允许重复停止接收不返回错误。
-
此接口用于编码通道停止接收图像来编码,在编码通道销毁或复位前必须停止接收图像。
-
调用此接口仅停止接收原始数据编码,码流buffer已经缓存的帧数据并不会被清除。
-
调用MI_VENC_StartRecvPic 和MI_VENC_StartRecvPicEx接口开始接收图像,都可以调用该接口来停止接收。
-
调用此接口前, 需要检查APP代码是否将MI_VENC_GetStream/MI_VENC_ReleaseStream成对使用, 如若未成对使用, 就会出现接口返回MI_ERR_VENC_BUSY的情况。
-
-
举例
请参见MI_VENC_DestroyChn的举例。
2.9. MI_VENC_Query¶
-
功能
查询编码通道状态。
-
语法
MI_S32 MI_VENC_Query(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_ChnStat_t *pstStat);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM) 输入 pstStat 编码通道的状态指针 输出 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件:mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
-
如果通道未创建,则返回失败。
此接口用于查询此函数调用时刻的编码器状态,pstStat包含四个主要的信息:
-
u32LeftPics 表示待编码的帧个数。在复位通道前,可以通过查询是否还有图像待编码来决定复位时机,防止复位时将可能需要编码的帧清理出去。
-
u32LeftStreamBytes 表示码流buffer中所有未读取数据的byte数。在复位通道前,可以通过查询是否还有码流没有被读取来决定复位时机,防止复位时将可能需要的码流清理出去。
-
u32LeftStreamFrames 表示码流buffer中还未读取的帧数。在复位通道前,可以通过查询是否还有图像的码流没有被取走来决定复位时机,防止复位时将可能需要的码流清理出去。
-
u32CurPacks 表示当前帧的码流包个数。在调用MI_VENC_GetStream之前应确保u32CurPacks大于0,否则会返回无buffer可取的error。
-
-
当通过packet获取时,当前的帧可能不是一个完整的帧(作为一部分);当通过frame获取时(或者如果没有帧数据时),表示当前完整帧的数量。当用户想要以帧为单位获取码流,需要查询一个完整帧的包的数量。在这种情况中,查询操作通常可以在选择成功之后执行。此时,u32CurPacks是当前完整帧的包数。
-
在编码通道状态结构体中,u32LeftRecvPics表示调用MI_VENC_StartRecvPicEx接口后剩余等待接收的帧数目。
-
如果没有调用MI_VENC_StartRecvPicEx,u32LeftRecvPics和u32LeftEncPics数目始终为0。
-
-
举例
请参见MI_VENC_GetStream的举例。
2.10. MI_VENC_SetChnAttr¶
-
功能
设置编码通道动态属性,包含编码宽高,profile,以及码控参数。
-
语法
MI_S32 MI_VENC_SetChnAttr(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_ChnAttr_t *pstAttr);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM) 输入 pstAttr 编码通道属性指针 输入 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件:mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
-
不能动态设置编码通道最大宽、最大高等属性。
-
编码通道属性包括了编码器属性和码率控制器属性两部分。
-
设置未创建的通道的属性,则返回失败。
-
如果pstAttr为空,则返回失败。
-
设置编码图像大小时的限制和创建通道时的限制一样。
-
编码通道属性分为动态属性和静态属性两种。其中,动态属性的属性值在通道创建时配置,在通道销毁之前可以被修改;静态属性的属性值在通道创建时配置,在通道创建之后不能被修改。
-
此接口只能设置编码通道属性中的动态属性,如果设置静态属性,则返回失败。编码通道的编码协议、获取码流的方式(按帧还是按包获取码流)、编码图像最大宽高属性属于静态属性。另外,各个编码协议的静态属性由各个协议模块指定,具体请参见MI_VENC_ChnAttr_t。
-
设置新的通道宽高属性时,其中通道的优先级并不会恢复默认,编码通道的其它所有参数配置恢复默认值,并且清空码流buffer和缓存图像队列。
-
2.11. MI_VENC_GetChnAttr¶
-
功能
获取编码通道属性。
-
语法
MI_S32 MI_VENC_GetChnAttr(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_ChnAttr_t *pstAttr);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM) 输入 pstAttr 编码通道属性指针 输出 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件:mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
-
获取未创建的通道的属性,返回失败MI_ERR_VENC_UNEXIST。
-
如果pstAttr为空,则返回失败。
-
2.12. MI_VENC_GetStream¶
-
功能
获取编码码流。
-
语法
MI_S32 MI_VENC_GetStream(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_Stream_t *pstStream, MI_S32 s32MilliSec);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM) 输入 pstStream 码流结构体指针。上层需要将该指针指向一块分配好的内存,而且其内的成员MI_VENC_Pack_t *pstPack同样需要自行配置相应PackCount*sizeof(MI_VENC_Pack_t)的内存。 输入/输出 s32MilliSec 调用该api直到获取到码流的超时等待时间。
取值范围:>=-1
-1:阻塞
0:非阻塞
>0:超时等待时间,该时间为相对时间,单位ms输入 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件:mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
-
如果通道未创建,返回失败。
-
如果pstStream为空,返回MI_ERR_VENC_NULL_PTR。
-
如果s32MilliSec小于-1,返回MI_ERR_VENC_ILLEGAL_PARAM。
-
支持超时方式获取。支持select/poll系统调用。
-
s32MilliSec=0时,则为非阻塞获取,即如果缓冲无数据,则返回失败MI_ERR_VENC_BUF_EMPTY。
-
s32MilliSec=-1时,则为阻塞,即如果缓冲无数据,则会等待有数据时才返回获取成功。
-
s32MilliSec>0时,则为超时,即如果缓冲无数据,则会等待用户设定的超时时间,若在设定的时间内有数据则返回获取成功,否则返回超时失败。
-
码流结构体MI_VENC_Stream_t包含4个部分:
-
码流包信息指针pstPack指向一组MI_VENC_Pack_t的内存空间,该空间由调用者分配。大小为u32PackCount x sizeof(MI_VENC_Pack_t), 可以在select之后通过调用MI_VENC_Query获得。
-
码流包个数u32PackCount指定pstPack中MI_VENC_Pack_t的个数。一张完整的帧是由u32PackCount个码流包构成。
-
序列号u32Seq表示帧序列号。
-
码流特征信息stH264Info/stJpegInfo/stH265Info/stAv1Info,数据类型为联合体,包含了不同编码协议对应的码流特征信息,码流特征信息的输出用于支持用户的上层应用。
-
-
此接口应当和MI_VENC ReleaseStream 配对起来使用,用户获取码流后系统不会主动释放码流缓存,需要用户及时释放已经获取的码流缓存,否则可能会导致码流buffer满,影响编码器编码,并且用户必须按先获取先释放的顺序释放已经获取的码流缓存。
-
建议用户使用select方式获取码流,流程如下:
-
调用MI_VENC_Query函数查询编码通道状态;
-
确保u32CurPacks和u32LeftStreamFrames同时大于0;
-
调用malloc分配u32CurPacks个包信息结构体;
-
调用MI_VENC_GetStream获取编码码流;
-
调用MI_VENC_ReleaseStream释放码流缓存。
-
-
以H.264为例介绍pstPack[0]存储的码流结构,pstPack[0]对应信息如下:
pstPack[0].u32DataNum=3, pstPack[0].stPackInfo[0].u32PackType.enH264EType=E_MI_VENC_H264E_NALU_SPS, pstPack[0].stPackInfo[1].u32PackType.enH264EType=E_MI_VENC_H264E_NALU_PPS, pstPack[0].stPackInfo[2].u32PackType.enH264EType=E_MI_VENC_H264E_NALU_SEI ;
即pstPack[0]包含三个NALU包:SPS/PPS/SEI。如下图所示:
-
-
举例
MI_S32 VencGetH264Stream() { MI_S32 i; MI_S32 s32Ret; MI_S32 s32VencFd; MI_U32 u32FrameIdx = 0; MI_VENC_DEV VeDev = MI_VENC_DEV_ID_H264_H265_0; MI_VENC_CHN VeChn = 0; MI_VENC_ChnStat_t stStat; MI_VENC_Stream_t stStream; fd_set read_fds; FILE* pFile=NULL; pFile = fopen("stream.h264","wb"); if (pFile == NULL) { return E_MI_ERR_FAILED; } s32VencFd = MI_VENC_GetFd(VeDev, VeChn); do{ FD_ZERO(&read_fds); FD_SET(s32VencFd, &read_fds); s32Ret = select(s32VencFd+1, &read_fds, NULL, NULL, NULL); if (s32Ret < 0) { printf("select err\n"); return E_MI_ERR_FAILED; } else if (0 == s32Ret) { printf("timeout\n"); return E_MI_ERR_FAILED; } else { if (FD_ISSET(s32VencFd, &read_fds)) { s32Ret = MI_VENC_Query(VeDev, VeChn, &stStat); if (s32Ret != MI_SUCCESS) { return E_MI_ERR_FAILED; } /******************************************************* suggest to check both u32CurPacks and u32LeftStreamFrames at the same time,for 举例: if (0 == stStat.u32CurPacks || 0 == stStat.u32LeftStreamFrames) { continue; } *******************************************************/ if (0 == stStat.u32CurPacks) { continue; } stStream.pstPack = (MI_VENC_Pack_t*)malloc(sizeof(MI_VENC_Pack_t)*stStat.u32CurPacks); if (NULL == stStream.pstPack) { return E_MI_ERR_FAILED; } stStream.u32PackCount = stStat.u32CurPacks; s32Ret = MI_VENC_GetStream(VeDev, VeChn, &stStream, -1); if (MI_SUCCESS != s32Ret) { free(stStream.pstPack); stStream.pstPack = NULL; return E_MI_ERR_FAILED; } for (i=0; i<stStream.u32PackCount; i++) { fwrite(stStream.pstPack[i].pu8Addr+stStream.pstPack[i].u32Offset, 1, stStream.pstPack[i].u32Len-stStream.pstPack[i].u32Offset, pFile); } s32Ret = MI_VENC_ReleaseStream(VeDev, VeChn, &stStream); if (MI_SUCCESS != s32Ret) { free(stStream.pstPack); stStream.pstPack=NULL; return E_MI_ERR_FAILED; } free(stStream.pstPack); stStream.pstPack = NULL; } } u32FrameIdx++; }while(u32FrameIdx<0xff); fclose(pFile); return s32Ret; }
2.13. MI_VENC_ReleaseStream¶
-
功能
释放码流缓存。
-
语法
MI_S32 MI_VENC_ReleaseStream(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_Stream_t *pstStream);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM) 输入 pstStream 码流结构体指针 输入 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件:mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
-
如果通道未创建,则返回错误码MI_ERR_VENC_UNEXIST。
-
如果pstStream为空,则返回错误码MI_ERR_VENC_NULL_PTR。
-
此接口应当和MI_VENC_GetStream配对起来使用,用户获取码流后必须及时释放已经获取的码流缓存,否则可能会导致码流buffer满,影响编码器编码,并且用户必须按先获取先释放的顺序释放已经获取的码流缓存。
-
在编码通道复位以后,所有未释放的码流包均无效,不能再使用或者释放这部分无效的码流缓存。
-
释放无效的码流会返回失败MI_ERR_VENC_ILLEGAL_PARAM。
-
-
举例
请参见MI_VENC_GetStream的举例。
2.14. MI_VENC_InsertUserData¶
-
功能
插入用户数据。用户首先申请一块空间,填充自定义的信息,传入对应的指针和数据长度,在下一个SEI的NAL(跟在最新的码流包之前)就会有相应的信息,SDK内部只保存最后一次未生效的用户数据。
-
语法
MI_S32 MI_VENC_InsertUserData(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_U8 *pu8Data, MI_U32 u32Len);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM) 输入 pu8Data 用户数据指针 输入 u32Len 用户数据长度
取值范围:(0,1024],以byte为单位输入 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件:mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
-
如果通道未创建,则返回失败。
-
如果pu8Data为空,则返回失败。
-
插入用户数据,只支持H.264/H.265/AV1编码协议。
-
H.264/H.265/AV1协议通道每段用户数据大小不超过1k bytes,否则此接口会返回错误。每段用户数据以SEI包的形式被插入到最新的码流包之前。在某段用户数据包被编码发送之后,H.264/H.265/AV1通道内缓存这段用户数据的内存空间被清零,用于存放新的用户数据。
-
-
举例
MI_S32 VencInsertUserData() { MI_S32 s32Ret; MI_VENC_DEV VeDev = MI_VENC_DEV_ID_H264_H265_0; MI_VENC_CHN VeChn = 0; MI_U8 au8UserData[]="sigmastar2020"; s32Ret = MI_VENC_InsertUserData(VeDev, VeChn, au8UserData, sizeof(au8UserData)); if (MI_SUCCESS != s32Ret) { printf("MI_VENC_InsertUserData err0x%x\n", s32Ret); return E_MI_ERR_FAILED; } return s32Ret; }
2.15. MI_VENC_SetMaxStreamCnt¶
-
功能
设置码流最大缓存帧数。
-
语法
MI_S32 MI_VENC_SetMaxStreamCnt(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_U32 u32MaxStrmCnt);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM) 输入 u32MaxStrmCnt 最大码流缓存帧数
取值范围:>=0
默认值: 3输入 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件:mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
-
此接口用于设置编码通道的码流buffer中能够缓存的最大码流帧数。
-
当缓存的码流帧数达到最大缓存帧数时,待编码图像会直接丢弃,不再进行编码。
-
最大缓存帧数在创建通道时由系统内部指定默认值,默认值为3。
-
此接口在创建通道之后,销毁编码通道之前均可以被调用。在下一帧开始编码之前生效。
-
此接口允许被多次调用。建议在创建编码通道成功之后,启动编码前进行设置,不建议在编码过程中动态调整。
-
2.16. MI_VENC_GetMaxStreamCnt¶
-
功能
获取码流最大缓存帧数。
-
语法
MI_S32 MI_VENC_GetMaxStreamCnt(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_U32 *pu32MaxStrmCnt);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM) 输入 pu32MaxStrmCnt 最大码流缓存帧数的指针 输出 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件:mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
2.17. MI_VENC_RequestIdr¶
-
功能
请求一张IDR帧。
-
语法
MI_S32 MI_VENC_RequestIdr(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_BOOL bInstant);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM) 输入 bInstant 是否使能立即编码IDR帧:
0: 在尽可能短的时间内编出IDR帧;
1: 下帧立即编码IDR帧。输入 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件:mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
-
如果通道未创建,则返回失败。
-
IDR帧请求,只支持H.264/H.265/AV1编码协议。
-
由于此接口不受帧率控制影响,每调用一次即编出一个IDR,频繁调用会影响码流帧率和码率的稳定,使用时需注意。
-
-
举例
MI_S32 VencRequestIdr() { MI_S32 s32Ret; MI_VENC_DEV VeDev = MI_VENC_DEV_ID_H264_H265_0; MI_VENC_CHN VeChn = 0; MI_BOOL bInstant; bInstant = TRUE; s32Ret = MI_VENC_RequestIdr(VeDev, VeChn, bInstant); if (MI_SUCCESS != s32Ret) { printf("MI_VENC_RequestIDR err0x%x\n", s32Ret); return E_MI_ERR_FAILED; } return s32Ret; }
2.18. MI_VENC_GetFd¶
-
功能
获取编码通道对应的设备文件句柄,用于调用select/poll监听是否有编码数据,与轮询CPU相比有效降低了cpu使用率。
-
语法
MI_S32 MI_VENC_GetFd(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM) 输入 -
返回值
-
设备文件句柄:成功
-
其他:失败,参照错误码
-
-
依赖
-
头文件:mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
举例
请参见MI_VENC_GetStream的举例。
2.19. MI_VENC_CloseFd¶
-
功能
关闭编码通道对应的设备文件句柄。
-
语法
MI_S32 MI_VENC_CloseFd(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 视频编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM) 输入 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件:mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
2.20. MI_VENC_SetRoiCfg¶
-
功能
设置H.264/H.265/AV1通道的ROI属性,最大支持可设置16个ROI区域。
-
语法
MI_S32 MI_VENC_SetRoiCfg(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_RoiCfg_t *pstVencRoiCfg);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM)。 输入 pstVencRoiCfg ROI区域参数指针。 输入 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件:mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
芯片差异
不同Chip和编码协议对ROI参数的限制也不同,如下表:
Chip
Codec
Alignment
bAbsQp
u32Left u32Top u32Width u32Height AbsQp RelQP Maruko H.264 16 16 16 16 不支持 [-32,31] H.265 32 32 32 32 不支持 [-32,31] Opera H.264 16 16 16 16 不支持 [-32,31] H.265 32 32 32 32 不支持 [-32,31] Souffle H.264 32 32 32 32 [12,48] [-32,31] H.265 32 32 32 32 [12,48] [-32,31] AV1 64 64 64 64 [12,48] [-32,31] Iford H.264 32 32 32 32 [12,48] [-32,31] H.265 32 32 32 32 [12,48] [-32,31] -
注意
-
本接口用于设置H.264/H.265/AV1协议编码通道ROI区域的参数。ROI参数主要由5个参数决定:
-
u32Index:假设系统最大支持每个通道可设置16个ROI区域,系统内部将按照0~15的索引号对ROI区域进行管理,u32Index表示的用户设置ROI的索引号。ROI区域之间可以互相叠加,且当发生叠加时,ROI区域之间的优先级按照索引号0~15依次提高。
-
bEnable: 指定当前的ROI区域是否使能。
-
bAbsQp: 指定当前的ROI区域采用绝对QP方式或是相对QP。同一编码通道如果使用到多个ROI区域,多个ROI区域的bAbsQp必须保持一致,要么全部为绝对QP方式,要么全部为相对QP方式,不允许混用。
-
s32Qp: 当bAbsQp为true时,s32Qp表示ROI区域内部的所有宏块采用的QP值,当bAbsQp为false时,s32Qp表示ROI区域内部的所有宏块采用的相对QP值。
-
tRect: 指定当前的ROI区域的位置坐标和区域的大小。ROI区域的起始点坐标必须在图像范围内。
-
-
本接口属于高级接口,系统默认没有ROI区域使能,用户必须调用此接口启动ROI。
-
本接口可在编码通道创建之后,编码通道销毁之前设置。此接口在编码过程中被调用时,等到下一帧时生效。
-
建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
-
建议用户在调用此接口之前,先调用MI_VENC_GetRoiCfg接口,获取当前通道的指定索引号的ROI配置,然后再对该索引号的ROI参数进行设置。
-
-
举例
MI_S32 VencSetRoi() { MI_S32 s32Ret; MI_VENC_RoiCfg_t stRoiCfg; MI_S32 index=0; MI_VENC_DEV VeDev = MI_VENC_DEV_ID_H264_H265_0; MI_VENC_CHN VeChnId=0; //...omit other thing s32Ret = MI_VENC_GetRoiCfg(VeDev, VeChnId, index, &stRoiCfg); if (MI_SUCCESS != s32Ret) { printf("MI_VENC_GetRoiCfg err0x%x\n", s32Ret); return E_MI_ERR_FAILED; } stRoiCfg.bEnable = TRUE; stRoiCfg.bAbsQp = FALSE; stRoiCfg.s32Qp = 10; stRoiCfg.stRect.u32Left = 16; stRoiCfg.stRect.u32Top = 16; stRoiCfg.stRect.u32Width = 16; stRoiCfg.stRect.u32Height = 16; stRoiCfg.u32Index = 0; s32Ret = MI_VENC_SetRoiCfg(VeDev, VeChnId, &stRoiCfg); if (MI_SUCCESS != s32Ret) { printf("MI_VENC_SetRoiCfg err0x%x\n", s32Ret); return E_MI_ERR_FAILED; } return s32Ret; }
2.21. MI_VENC_GetRoiCfg¶
-
功能
获取H.264/H.265/AV1通道的ROI配置属性。
-
语法
MI_S32 MI_VENC_GetRoiCfg(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_U32 u32Index, MI_VENC_RoiCfg_t *pstVencRoiCfg);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM)。 输入 u32Index H.264/H.265/AV1协议编码通道ROI区域索引。 输入 pstVencRoiCfg 对应ROI区域的配置指针。 输出 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件:mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
-
本接口用于获取H.264/H.265/AV1协议编码通道的index索引号的ROI配置。
-
本接口可在编码通道创建之后,编码通道销毁之前调用。
-
建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
-
-
举例
请参见MI_VENC_SetRoiCfg 的举例。
2.22. MI_VENC_SetRoiBgFrameRate¶
-
功能
设置H.264/H.265/AV1通道的非ROI区域帧率属性。
-
语法
MI_S32 MI_VENC_SetRoiBgFrameRate(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_RoiBgFrameRate_t *pstRoiBgFrmRate);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM)。 输入 pstRoiBgFrmRate 非ROI区域帧率控制参数指针。 输入 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件:mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
-
本接口用于设置H.264/H.265/AV1协议编码通道非ROI区域帧率控制的参数。
-
本接口调用之前必须首先使能ROI区域。
-
本接口属于高级接口,系统默认没有使能非ROI区域帧率属性,用户必须调用此接口使能。
-
本接口可在编码通道创建之后,编码通道销毁之前设置。此接口在编码过程中被调用时,等到下一帧时生效。
-
设置通道帧率控制属性时,输入帧率SrcFrmRate大于输出帧率DstFrmRate且DstFrmRate大于等于0或同时等于-1。
-
建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
-
建议用户在调用此接口之前,先调用MI_VENC_GetRoiBgFrameRate接口,获取当前通道的非ROI区域帧率配置,然后再进行设置。
-
设置非ROI区域的帧率低于ROI区域时,不建议使用跳帧参考或者svc-t编码。跳帧参考或svc-t编码场景下,如果设置了非ROI区域的帧率低于ROI区域,则实际编码的非ROI区域目标帧率可能大于用户配置的目标帧率,因为base层的非ROI区域不能编码为pskip块。例如在调用了此接口设置了非ROI区域帧率比例为2:1之前,还调用了MI_VENC_SetRefParam设置长参考帧,会导致实际编码的非ROI区域帧率比例低于2:1。
-
Souffle平台不支持对非ROI区域帧率属性进行设置。
-
-
举例
MI_S32 VencSetRoiFrameRate() { MI_S32 s32Ret; MI_VENC_RoiBgFrameRate_t stRoiBgFrameRate; MI_S32 index = 0; MI_VENC_DEV VeDev = MI_VENC_DEV_ID_H264_H265_0; MI_VENC_CHN VeChnId=0; //...omit other thing s32Ret = MI_VENC_GetRoiBgFrameRate (VeDev, VeChnId, &stRoiBgFrameRate); if (MI_SUCCESS != s32Ret) { printf("MI_VENC_GetRoiBgFrameRate err0x%x\n", s32Ret); return E_MI_ERR_FAILED; } //...omit other thing stRoiBgFrameRate.s32SrcFrmRate=30; stRoiBgFrameRate.s32DstFrmRate=15; s32Ret = MI_VENC_SetRoiBgFrameRate(VeDev, VeChnId, &stRoiBgFrameRate); if (MI_SUCCESS != s32Ret) { printf("MI_VENC_SetRoiBgFrameRate err0x%x\n", s32Ret); return E_MI_ERR_FAILED; } return s32Ret; }
2.23. MI_VENC_GetRoiBgFrameRate¶
-
功能
获取H.264/H.265/AV1通道的非ROI区域帧率配置属性。
-
语法
MI_S32 MI_VENC_GetRoiBgFrameRate(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_RoiBgFrameRate_t *pstRoiBgFrmRate);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM)。 输入 pstRoiBgFrmRate 非ROI区域帧率的配置指针。 输出 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件:mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
-
本接口可在编码通道创建之后,编码通道销毁之前调用。
-
建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
-
Souffle平台不支持对非ROI区域帧率属性进行设置。
-
-
举例
请参见MI_VENC_SetRoiBgFrameRate的举例。
2.24. MI_VENC_SetH264SliceSplit¶
-
功能
设置H.264通道的slice分割属性。
-
语法
MI_S32 MI_VENC_SetH264SliceSplit(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_ParamH264SliceSplit_t *pstSliceSplit);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM)。 输入 pstSliceSplit H.264码流slice分割参数指针。 输入 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件:mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
-
本接口用于设置H.264协议编码通道码流的分割方式。
-
Slice 分割属性主要由两个参数决定:
-
bSplitEnable: 当前帧是否进行slice分割。
-
u32SliceRowCount: 每个slice占图像宏块行数。Slice按照宏块行进行分割,且当编码至图像的最后几行,不足u32SliceRowCount时,剩余的宏块行被划分为一个slice。
-
-
Souffle/Iford平台H264编码开启Slice分割时,u32SliceRowCount需要设置为偶数。
-
系统默认bSplitEnable为false,当设置bSplitEnable为true时,以u32SliceRowCount宏块行作为一个slice单独编码。如果通道配置为按包获取码流的方式(bByFrame=FALSE),每编码完成一个slice用户即可获取该slice的码流数据。建议u32SliceRowCount不要设置过小,u32SliceRowCount越小用户收到通知越频繁,系统开销越大。
-
建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。此接口在编码过程中被调用时,等到下一帧时生效。
-
建议用户在调用此接口之前,先调用MI_VENC_GetH264SliceSplit接口,获取当前通道的slicesplit配置,然后再进行设置。
-
H.264编码每帧最大支持切分为16个Slice。
-
-
举例
MI_S32 VencSetSliceSplit() { MI_S32 s32Ret; MI_VENC_ParamH264SliceSplit_t stSlice; MI_VENC_DEV VeDev = MI_VENC_DEV_ID_H264_H265_0; MI_VENC_CHN VeChnId = 0; //...omit other thing s32Ret = MI_VENC_GetH264SliceSplit(VeDev, VeChnId, &stSlice); if (MI_SUCCESS != s32Ret) { printf("MI_VENC_GetH264SliceSplit err0x%x\n", s32Ret); return E_MI_ERR_FAILED; } stSlice.bSplitEnable = TRUE; stSlice.u32SliceRowCount = 8; s32Ret = MI_VENC_SetH264SliceSplit(VeDev, VeChnId, &stSlice); if(MI_SUCCESS != s32Ret) { printf("MI_VENC_SetH264SliceSplit err0x%x\n", s32Ret); return E_MI_ERR_FAILED; } return s32Ret; }
2.25. MI_VENC_GetH264SliceSplit¶
-
功能
获取H.264通道的slice分割属性。
-
语法
MI_S32 MI_VENC_GetH264SliceSplit(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_ParamH264SliceSplit_t *pstSliceSplit);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM)。 输入 pstSliceSplit H.264码流slice分割参数指针。 输出 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件:mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
-
此接口用于获取H.264协议编码通道的slice分割属性。
-
本接口可在编码通道创建之后,编码通道销毁之前调用。
-
建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
-
-
举例
请参见MI_VENC_SetH264SliceSplit的举例。
2.26. MI_VENC_SetH264Trans¶
-
功能
设置H.264协议编码通道的变换、量化的属性。
-
语法
MI_S32 MI_VENC_SetH264Trans(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_ParamH264Trans_t *pstH264Trans);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM)。 输入 pstH264Trans H.264协议编码通道的变换、量化属性指针。 输入 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件:mi_venc.h, mi_venc_datatype.h
-
库文件: mi_venc.ko, libmi_venc.so
-
-
注意
-
本接口用于设置H.264协议编码通道的变换、量化的配置。
-
变换、量化属性主要由三个参数组成:
-
u32IntraTransMode: 帧内预测宏块的变换属性。u32IntraTransMode=0表示支持对帧内预测宏块支持4x4变换和8x8变换;u32IntraTransMode=1表示只支持对帧内预测宏块支持4x4变换;u32IntraTransMode=2表示只支持对帧内预测宏块支持8x8变换。只有在编码通道协议为highprofile时,才能选择8x8变换,即在baselineprofile和mainprofile下,系统只支持u32IntraTransMode=1的配置。
-
u32InterTransMode: 帧间预测宏块的变换属性。u32InterTransMode=0表示支持对帧间预测宏块支持4x4变换和8x8变换;u32InterTransMode=1表示只支持对帧间预测宏块支持4x4变换;u32InterTransMode=2表示只支持对帧间预测宏块支持8x8变换。只有在编码通道协议为highprofile时,才能选择8x8变换,即在baselineprofile和mainprofile下,系统只支持u32InterTransMode=1的配置。
-
s32ChromaQpIndexOffset: 具体含义请参见H.264协议关于chroma_qp_index_offset的解释。
-
-
此接口属于高级接口,用户可以选择性调用,不建议调用,系统会有默认值。本接口可在编码通道创建之后,编码通道销毁之前设置。本接口在编码过程中被调用时,等到下一个I帧时生效。
-
建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
-
建议用户在调用此接口之前,先调用MI_VENC_GetH264Trans接口,获取当前编码通道的trans配置,然后再进行设置。
-
-
举例
MI_S32 VencSetTrans() { MI_S32 s32Ret; MI_VENC_ParamH264Trans_t stTrans; MI_VENC_DEV VeDev = MI_VENC_DEV_ID_H264_H265_0; MI_VENC_CHN VeChnId = 0; //...omit other thing s32Ret = MI_VENC_GetH264Trans(VeDev, VeChnId, &stTrans); if (MI_SUCCESS != s32Ret) { printf("MI_VENC_GetH264Trans err0x%x\n", s32Ret); return E_MI_ERR_FAILED; } stTrans.u32IntraTransMode = 2; stTrans.u32InterTransMode = 2; stTrans.s32ChromaQpIndexOffset = 2; s32Ret = MI_VENC_SetH264Trans(VeDev, VeChnId, &stTrans); if (MI_SUCCESS != s32Ret) { printf("MI_VENC_SetH264Trans err0x%x\n", s32Ret); return E_MI_ERR_FAILED; } return s32Ret; }
2.27. MI_VENC_GetH264Trans¶
-
功能
获取H.264协议编码通道的变换、量化属性。
-
语法
MI_S32 MI_VENC_GetH264Trans(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_ParamH264Trans_t *pstH264Trans);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM)。 输入 pstH264Trans H.264协议编码通道的变换、量化参数指针。 输出 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件:mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
-
本接口用于获取H.264协议编码通道的变换、量化配置。
-
本接口可在编码通道创建之后,编码通道销毁之前调用。
-
建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
-
-
举例
请参见MI_VENC_SetH264Trans的举例。
2.28. MI_VENC_SetH264Entropy¶
-
功能
设置H.264协议编码通道的熵编码模式。
-
语法
MI_S32 MI_VENC_SetH264Entropy(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_ParamH264Entropy_t *pstH264EntropyEnc);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM)。 输入 pstH264EntropyEnc H.264协议编码通道的熵编码模式指针。 输入 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件:mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
-
本接口用于设置H.264协议编码通道的熵编码的配置。
-
熵编码属性主要由两个参数组成:
-
u32EntropyEncModeI: I帧的熵编码方式,u32EntropyEncModeI=0表示I帧使用cavlc编码,u32EntropyEncModeI=1表示I帧使用cabac编码方式。
-
u32EntropyEncModeP: P帧的熵编码方式,u32EntropyEncModeP=0表示P帧使用cavlc编码,u32EntropyEncModeP=1表示P帧使用cabac编码方式。
-
-
I帧的熵编码方式与P帧的熵编码方式可以分别设置。
-
Baselineprofile不支持cabac编码方式,仅支持cavlc编码方式,main profile和high profile支持cabac编码方式和cavlc编码方式。
-
Cabac编码方式相对于cavlc编码方式,需要更大的计算量,同时消耗更少的码率。
-
此接口属于高级接口,用户可以选择性调用,不建议调用,系统会有默认值。系统会根据不同的profile设置默认参数。不同profile下系统默认熵编码参数如下表:
Profile u32EntropyEncModeI u32EntropyEncModeP Baseline 0 0 Mainprofile/Highprofile 1 1 -
本接口可在编码通道创建之后,编码通道销毁之前设置。本接口在编码过程中被调用时,等到下一个I帧时生效。
-
建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
-
建议用户在调用此接口之前,先调用MI_VENC_GetH264Entropy接口,获取当前编码通道的Entropy配置,然后再进行设置。
-
Iford不支持此接口
-
-
举例
MI_S32 VencSetEntropy() { MI_S32 s32Ret; MI_VENC_ParamH264Entropy_t stEntropy; MI_VENC_DEV VeDev = MI_VENC_DEV_ID_H264_H265_0; MI_VENC_CHN VeChnId = 0; //...omit other thing s32Ret = MI_VENC_GetH264Entropy(VeDev, VeChnId, &stEntropy); if (MI_SUCCESS != s32Ret) { printf("MI_VENC_GetH264Entropy err0x%x\n", s32Ret); return E_MI_ERR_FAILED; } stEntropy.u32EntropyEncModeI = 0; stEntropy.u32EntropyEncModeP = 0; s32Ret = MI_VENC_SetH264Entropy(VeDev, VeChnId, &stEntropy); if (MI_SUCCESS != s32Ret) { printf("MI_VENC_SetH264Entropy err0x%x\n", s32Ret); return E_MI_ERR_FAILED; } return s32Ret; }
2.29. MI_VENC_GetH264Entropy¶
-
功能
获取H.264协议编码通道的熵编码属性。
-
语法
MI_S32 MI_VENC_GetH264Entropy(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_ParamH264Entropy_t *pstH264EntropyEnc);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM)。 输入 pstH264EntropyEnc H.264协议编码通道的熵编码属性指针。 输出 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件:mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
-
本接口用于获取H.264协议编码通道的熵编码配置。
-
本接口可在编码通道创建之后,编码通道销毁之前调用。
-
建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
-
Iford不支持此接口
-
-
举例
请参见MI_VENC_SetH264Entropy的举例。
2.30. MI_VENC_SetH265Trans¶
-
功能
设置H.265协议编码通道的变换、量化的属性。
-
语法
MI_S32 MI_VENC_SetH265Trans(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_ParamH265Trans_t *pstH265Trans);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM)。 输入 pstH265Trans H.265协议编码通道的变换、量化属性指针。 输入 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件:mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
-
本接口用于设置H.265协议编码通道的变换、量化的配置。
-
变换、量化属性主要由三个参数组成:
-
u32IntraTransMode: 帧内预测宏块的变换属性。u32IntraTransMode=0表示支持对帧内预测宏块支持4x4变换和8x8变换;u32IntraTransMode=1表示只支持对帧内预测宏块支持4x4变换;u32IntraTransMode=2表示只支持对帧内预测宏块支持8x8变换。只有在编码通道协议为highprofile时,才能选择8x8变换,即在baselineprofile和mainprofile下,系统只支持u32IntraTransMode=1的配置。
-
u32InterTransMode: 帧间预测宏块的变换属性。u32InterTransMode=0表示支持对帧间预测宏块支持4x4变换和8x8变换;u32InterTransMode=1表示只支持对帧间预测宏块支持4x4变换;u32InterTransMode=2表示只支持对帧间预测宏块支持8x8变换。只有在编码通道协议为highprofile时,才能选择8x8变换,即在baselineprofile和mainprofile下,系统只支持u32InterTransMode=1的配置。
-
s32ChromaQpIndexOffset: 具体含义请参见H.265协议关于slice_cb_qp_offset的解释。
-
-
此接口属于高级接口,用户可以选择性调用,不建议调用,系统会有默认值。本接口可在编码通道创建之后,编码通道销毁之前设置。本接口在编码过程中被调用时,等到下一个I帧时生效。
-
建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
-
建议用户在调用此接口之前,先调用MI_VENC_GetH265Trans接口,获取当前编码通道的trans配置,然后再进行设置。
-
-
举例
MI_S32 H265SetTrans() { MI_S32 s32Ret; MI_VENC_ParamH265Trans_t stTrans; MI_VENC_DEV VeDev = MI_VENC_DEV_ID_H264_H265_0; MI_VENC_CHN VeChnId = 0; //...omit other thing s32Ret = MI_VENC_GetH265Trans(VeDev, VeChnId, &stTrans); if (MI_SUCCESS != s32Ret) { printf("MI_VENC_GetH265Trans err0x%x\n", s32Ret); return E_MI_ERR_FAILED; } stTrans.u32IntraTransMode = 2; stTrans.u32InterTransMode = 2; stTrans.s32ChromaQpIndexOffset = 2; s32Ret = MI_VENC_SetH265Trans(VeDev, VeChnId, &stTrans); if (MI_SUCCESS != s32Ret) { printf("MI_VENC_SetH265Trans err0x%x\n", s32Ret); return E_MI_ERR_FAILED; } return s32Ret; }
2.31. MI_VENC_GetH265Trans¶
-
功能
获取H.265协议编码通道的变换、量化属性。
-
语法
MI_S32 MI_VENC_GetH265Trans(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_ParamH265Trans_t *pstH265Trans);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM)。 输入 pstH265Trans H.265协议编码通道的变换、量化参数指针。 输出 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件:mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
-
本接口用于获取H.265协议编码通道的变换、量化配置。
-
本接口可在编码通道创建之后,编码通道销毁之前调用。
-
建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
-
-
举例
请参见MI_VENC_SetH265Trans的举例。
2.32. MI_VENC_SetH264Dblk¶
-
功能
设置H.264协议编码通道的Deblocking类型。
-
语法
MI_S32 MI_VENC_SetH264Dblk(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_ParamH264Dblk_t *pstH264Dblk);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM)。 输入 pstH264Dblk H.264协议编码通道的Deblocking参数指针。 输入 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件:mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
-
本接口用于设置H.264协议编码通道的Deblocking的配置
-
Deblocking属性主要由三个参数组成:
-
disable_deblocking_filter_idc: 具体含义请参见H.264协议。
-
Slice_alpha_c0_offset_div2: 具体含义请参见H.264协议。
-
Slice_beta_offset_div2: 具体含义请参见H.264协议。
-
-
系统默认打开deblocking功能,默认disable_deblocking_filter_idc=0,slice_alpha_c0_offset_div2=0,slice_beta_offset_div2=0。
-
如果用户想关闭deblocking功能,可以将disable_deblocking_filter_idc置为1。
-
本接口可在编码通道创建之后,编码通道销毁之前设置。本接口在编码过程中被调用时,等到下一帧时生效。
-
建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
-
建议用户在调用此接口之前,先调用MI_VENC_GetH264Dblk接口,获取当前编码通道的Deblocking配置,然后再进行设置。
-
-
举例
MI_S32 VencSetDblk() { MI_S32 s32Ret; MI_VENC_ParamH264Dblk_t stDblk; MI_VENC_DEV VeDev = MI_VENC_DEV_ID_H264_H265_0; MI_VENC_CHN VeChnId = 0; //...omit other thing s32Ret = MI_VENC_GetH264Dblk(VeDev, VeChnId, &stDblk); if (MI_SUCCESS != s32Ret) { printf("MI_VENC_GetH264Dblk err0x%x\n", s32Ret); return E_MI_ERR_FAILED; } stDblk.disable_deblocking_filter_idc = 0; stDblk.slice_alpha_c0_offset_div2 = 6; stDblk.slice_beta_offset_div2 = 5; s32Ret = MI_VENC_SetH264Dblk(VeDev, VeChnId, &stDblk); if (MI_SUCCESS != s32Ret) { printf("MI_VENC_SetH264Dblk err0x%x\n", s32Ret); return E_MI_ERR_FAILED; } return s32Ret; }
2.33. MI_VENC_GetH264Dblk¶
-
功能
获取H.264协议编码通道的Deblocking类型。
-
语法
MI_S32 MI_VENC_GetH264Dblk(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_ParamH264Dblk_t *pstH264Dblk);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM)。 输入 pstH264Dblk H.264协议编码通道的Deblocking属性指针。 输出 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件:mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
-
本接口用于获取H.264协议编码通道的Deblocking配置。
-
本接口可在编码通道创建之后,编码通道销毁之前调用。
-
建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
-
-
举例
请参见MI_VENC_SetH264Dblk的举例。
2.34. MI_VENC_SetH265Dblk¶
-
功能
设置H.265协议编码通道的Deblocking类型。
-
语法
MI_S32 MI_VENC_SetH265Dblk(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_ParamH265Dblk_t *pstH265Dblk);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM)。 输入 pstH265Dblk H.265协议编码通道的Deblocking参数指针。 输入 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件: mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
-
本接口用于设置H.265协议编码通道的Deblocking的配置。
-
Deblocking属性主要由三个参数组成:
-
disable_deblocking_filter_idc: 具体含义请参见H.265协议关于slice_deblocking_filter_disabled_flag的解释。
-
slice_tc_offset_div2: 具体含义请参见H.265协议。
-
slice_beta_offset_div2: 具体含义请参见H.265协议。
-
-
系统默认打开deblocking功能,默认disable_deblocking_filter_idc=0, slice_tc_offset_div2=0,slice_beta_offset_div2=0。
-
如果用户想关闭deblocking功能,可以将disable_deblocking_filter_idc置为1。
-
本接口可在编码通道创建之后,编码通道销毁之前设置。本接口在编码过程中被调用时,等到下一帧时生效。
-
建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
-
建议用户在调用此接口之前,先调用MI_VENC_GetH265Dblk 接口,获取当前编码通道的Deblocking配置,然后再进行设置。
-
-
举例
请参见MI_VENC_SetH264Dblk的举例。
2.35. MI_VENC_GetH265Dblk¶
-
功能
获取H.265协议编码通道的Deblocking类型。
-
语法
MI_S32 MI_VENC_GetH265Dblk(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_ParamH265Dblk_t *pstH265Dblk);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM)。 输入 pstH265Dblk H.265协议编码通道的Deblocking属性指针。 输出 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件:mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
-
本接口用于获取H.265协议编码通道的Deblocking配置。
-
本接口可在编码通道创建之后,编码通道销毁之前调用。
-
建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
-
-
举例
请参见MI_VENC_SetH264Dblk的举例。
2.36. MI_VENC_SetH264Vui¶
-
功能
设置H.264协议编码通道的VUI参数。
-
语法
MI_S32 MI_VENC_SetH264Vui(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_ParamH264Vui_t *pstH264Vui);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM)。 输入 pstH264Vui H.264协议编码通道的VUI参数指针。 输入 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件:mi_venc.h, mi_venc_datatype.h
-
库文件: libmi.a
-
-
注意
-
本接口用于设置H.264协议编码通道的VUI的配置。
-
本接口可在编码通道创建之后,编码通道销毁之前设置。本接口在编码过程中被调用时,等到下一个I帧时生效。
-
建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
-
建议用户在调用此接口之前,先调用MI_VENC_GetH264Vui接口,获取当前编码通道的VUI配置,然后再进行设置。
-
-
举例
MI_S32 SetVui() { MI_S32 s32Ret; MI_VENC_ParamH264Vui_t stVui; MI_VENC_DEV VeDev = MI_VENC_DEV_ID_H264_H265_0; MI_VENC_CHN VeChnId = 0; //...omit other thing s32Ret = MI_VENC_GetH264Vui(VeDev, VeChnId, &stVui); if (MI_SUCCESS != s32Ret) { printf("MI_VENC_GetH264Vui err0x%x\n", s32Ret); return E_MI_ERR_FAILED; } stVui.stVuiTimeInfo.u8TimingInfoPresentFlag = 1; s32Ret = MI_VENC_SetH264Vui(VeDev, VeChnId,&stVui); if (MI_SUCCESS != s32Ret) { printf("MI_VENC_SetH264Vui err0x%x\n", s32Ret); return E_MI_ERR_FAILED; } return s32Ret;
2.37. MI_VENC_GetH264Vui¶
-
功能
获取H.264协议编码通道的VUI配置。
-
语法
MI_S32 MI_VENC_GetH264Vui(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_ParamH264Vui_t *pstH264Vui);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM)。 输入 pstH264Vui H.264协议编码通道的VUI属性指针。 输入 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件:mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
-
本接口用于获取H.264协议编码通道的VUI配置。
-
本接口可在编码通道创建之后,编码通道销毁之前调用。
-
建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
-
-
举例
请参见 MI_VENC_SetH264Vui的举例
2.38. MI_VENC_SetH265Vui¶
-
功能
设置H.265协议编码通道的VUI参数。
-
语法
MI_S32 MI_VENC_SetH265Vui(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_ParamH265Vui_t *pstH265Vui);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM)。 输入 pstH265Vui H.265协议编码通道的VUI参数指针。 输入 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件:mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
-
本接口用于设置H.265协议编码通道的VUI的配置。
-
本接口可在编码通道创建之后,编码通道销毁之前设置。本接口在编码过程中被调用时,等到下一个I帧时生效。
-
建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
-
建议用户在调用此接口之前,先调用MI_VENC_GetH265Vui接口,获取当前编码通道的VUI配置,然后再进行设置。
-
-
举例
请参见 MI_VENC_SetH264Vui的举例
2.39. MI_VENC_GetH265Vui¶
-
功能
获取H.265协议编码通道的VUI配置。
-
语法
MI_S32 MI_VENC_GetH265Vui(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_ParamH265Vui_t *pstH265Vui);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM)。 输入 pstH265Vui H.265协议编码通道的VUI属性指针。 输出 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件:mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
-
本接口用于获取H.265协议编码通道的VUI配置。
-
本接口可在编码通道创建之后,编码通道销毁之前调用。
-
建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
-
-
举例
请参见 MI_VENC_SetH264Vui的举例
2.40. MI_VENC_SetH265SliceSplit¶
-
功能
设置H.265通道的slice分割属性。
-
语法
MI_S32 MI_VENC_SetH265SliceSplit(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_ParamH265SliceSplit_t *pstSliceSplit);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM)。 输入 pstSliceSplit H.265码流slice分割参数指针。 输入 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件:mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
-
本接口用于设置H.265协议编码通道码流的分割方式。
-
Slice分割属性主要由两个参数决定:
-
bSplitEnable: 当前帧是否进行slice分割。
-
u32SliceRowCount: 每个slice占图像宏块行数。slice按照宏块行进行分割,且当编码至图像的最后几行,不足u32SliceRowCount时,剩余的宏块行被划分为一个slice。
-
-
H265编码开启Slice分割时,u32SliceRowCount需设置为偶数。
-
本接口属于高级接口,用户可以选择性调用,建议不调用,系统默认bSplitEnable为false。本接口可在编码通道创建之后,编码通道销毁之前设置。此接口在编码过程中被调用时,等到下一帧时生效。
-
建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
-
建议用户在调用此接口之前,先调用MI_VENC_GetH265SliceSplit接口,获取当前通道的slicesplit配置,然后再进行设置。
-
H.265编码每帧最大支持切分为16个Slice。
-
-
举例
请参见MI_VENC_SetH264SliceSplit的举例。
2.41. MI_VENC_GetH265SliceSplit¶
-
功能
获取H.265通道的slice分割属性。
-
语法
MI_S32 MI_VENC_GetH265SliceSplit(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_ParamH265SliceSplit_t *pstSliceSplit);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM)。 输入 pstSliceSplit H.265码流slice分割参数指针。 输出 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件:mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
-
本接口用于获取H.265协议编码通道的slice分割属性。
-
本接口可在编码通道创建之后,编码通道销毁之前调用。
-
建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
-
-
举例
请参见MI_VENC_SetH264SliceSplit的举例。
2.42. MI_VENC_SetJpegParam¶
-
功能
设置JPEG协议编码通道的高级参数。
-
语法
MI_S32 MI_VENC_SetJpegParam(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn,MI_VENC_ParamJpeg_t *pstJpegParam);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM)。 输入 pstJpegParam JPEG协议编码通道的高级参数指针。 输入 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件:mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
-
本接口用于设置JPEG协议编码通道的高级参数。
-
高级参数主要由4个参数组成:
-
u32Qfactor: 量化表因子范围为[1,90],u32Qfactor越大,量化表中的量化系数越小,得到的图像质量会更好,同时,编码压缩率更低。同理u32Qfactor越小,量化表中的量化系数越大,得到的图像质量会更差,同时,编码压缩率更高。具体的u32Qfactor与量化表的关系请见RFC2435标准。
-
au8YQt [64], au8CbCrQt [64]: 这两个参数对应两个量化表空间,用户可以通过这两个参数设置用户的量化表。
-
u32McuPerEcs: 每个Ecs中包含多少Mcu。系统模式u32MCUPerECS=0,表示当前帧的所有的MCU被编码为一个ECS。u32MCUPerECS的最小值为0,最大值不超过(picwidth+15)>>4x(picheight+15)>>4x2。此参数暂不支持。
-
-
如果用户想使用自己的量化表,需要使用FixQp模式,在设置量化表的同时,请将Qfactor设置为0。
-
本接口可在编码通道创建之后,编码通道销毁之前设置。本接口在编码过程中被调用时,等到下一个帧编码时生效。
-
建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
-
建议用户在调用此接口之前,先调用MI_VENC_GetJpegParam接口,获取当前编码通道的JpegParam配置,然后再进行设置。
-
-
举例
MI_S32 SetJpegParam() { MI_S32 s32Ret; MI_VENC_ParamJpeg_t stParamJpeg; MI_VENC_DEV VeDev = MI_VENC_DEV_ID_JPEG_0; MI_VENC_CHN VeChnId = 0; int i; //...omit other thing s32Ret = MI_VENC_GetJpegParam(VeDev, VeChnId, &stParamJpeg); if (MI_SUCCESS != s32Ret) { printf("MI_VENC_GetJpegParam err0x%x\n", s32Ret); return E_MI_ERR_FAILED; } stParamJpeg.u32Qfactor = 0; for (i = 0; i < 64; i++) { stParamJpeg.au8YQt[i] = 16; stParamJpeg.au8CbCrQt[i] = 17; } s32Ret=MI_VENC_SetJpegParam(VeDev, VeChnId, &stParamJpeg); if (MI_SUCCESS != s32Ret) { printf("MI_VENC_SetJpegParam err0x%x\n",s32Ret); return E_MI_ERR_FAILED; } return s32Ret; }
2.43. MI_VENC_GetJpegParam¶
-
功能
获取JPEG协议编码通道的高级参数配置。
-
语法
MI_S32 MI_VENC_GetJpegParam(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_ParamJpeg_t *pstJpegParam);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM)。 输入 pstJpegParam Jpeg协议编码通道的高级参数配置指针。 输入 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件:mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
-
本接口用于获取JPEG协议编码通道的高级参数配置。
-
本接口可在编码通道创建之后,编码通道销毁之前调用。
-
建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
-
-
举例
请参见MI_VENC_SetJpegParam的举例。
2.44. MI_VENC_SetRcParam¶
-
功能
设置编码通道码率控制器的高级参数。
-
语法
MI_S32 MI_VENC_SetRcParam(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_RcParam_t *pstRcParam);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM)。 输入 pstRcParam 编码通道码率控制器的高级参数指针。 输入 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件:mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
芯片差异
不同Chip和不同编码协议支持的码控算法是不一样的,如下表:
Chip H.264 H.265 JPEG AV1 Maruko FIXQP/CBR/VBR/AVBR FIXQP/CBR/VBR/AVBR FIXQP/CBR 不支持 Opera FIXQP/CBR/VBR/AVBR FIXQP/CBR/VBR/AVBR FIXQP/CBR/VBR 不支持 Souffle FIXQP/CBR/VBR/AVBR/CVBR FIXQP/CBR/VBR/AVBR/CVBR FIXQP/CBR/VBR FIXQP/CBR/VBR/AVBR/CVBR Iford FIXQP/CBR/VBR/AVBR/CVBR FIXQP/CBR/VBR/AVBR/CVBR FIXQP/CBR/VBR 不支持 -
注意
-
编码通道码率控制器的高级参数都有默认值,而不是必须调用这个接口才能启动编码通道。
-
建议用户先调用MI_VENC_GetRcParam接口,获取RC高级参数,然后修改相应参数,再调用本接口对高级参数进行设置。
-
RC高级参数现仅支持H.264/H.265/AV1/Mjpeg码率控制模式,参数stParamCbr/stParamVBR/stParamAvbr/stParamCvbr通用于H.264/H.265/AV1。
-
码率控制器的高级参数由以下参数组成:(注意:此参数暂不支持。)
u32ThrdI[RC_TEXTURE_THR_SIZE],u32ThrdP[RC_TEXTURE_THR_SIZE]:分别衡量I帧,P帧的宏块复杂度的一组阈值。这组阈值按照从小到大的顺序依次排列,每个阈值的取值范围为[0,255]。这组阈值用于在进行宏块级码率控制时,根据图像复杂度对每个宏块的Qp进行适当的调整。对于H.264,宏块级码率控制只有加方向(最大加12),即如果当前宏块的图像复杂度处于某两阈值之间时,当前宏块的Qp值就在宏块行起始Qp值的基础上加上x。x取值如下表(C表示图像复杂度):
C Range x C<=u32Thrd[0] 0 u32Thrd[0]<C<=u32Thrd[1] 1 u32Thrd[1]<C<=u32Thrd[2] 2 u32Thrd[2]<C<=u32Thrd[3] 3 u32Thrd[3]<C<=u32Thrd[4] 4 u32Thrd[4]<C<=u32Thrd[5] 5 u32Thrd[5]<C<=u32Thrd[6] 6 u32Thrd[6]<C<=u32Thrd[7] 7 u32Thrd[7]<C<=u32Thrd[8] 8 u32Thrd[8]<C<=u32Thrd[9] 9 u32Thrd[9]<C<=u32Thrd[10] 10 u32Thrd[10]<C<=u32Thrd[11] 11 u32Thrd[11]<C 12 对于H.265,宏块级码率控制既有加方向(最大加8),也有减方向(最大减4),即如果当前宏块的图像复杂度小于等于u32Thr[3]阈值时,当前宏块的Qp值就在宏块行起始Qp值的基础上减去x;如果当前宏块的图像复杂度大于u32Thr[3]阈值时,当前宏块的Qp值就在宏块行起始Qp值的基础上加上y,x,y的取值如下表(C表示图像复杂度):
C Range x or y C<u32Thrd[0] x=4 u32Thrd[0]<=C<u32Thrd[1] x=3 u32Thrd[1]<=C<u32Thrd[2] x=2 u32Thrd[2]<=C<u32Thrd[3] x=1 u32Thrd[3]<=C<=u32Thrd[4] x=y=0 u32Thrd[4]<C<=u32Thrd[5] y=1 u32Thrd[5]<C<=u32Thrd[6] y=2 u32Thrd[6]<C<=u32Thrd[7] y=3 u32Thrd[7]<C<=u32Thrd[8] y=4 u32Thrd[8]<C<=u32Thrd[9] y=5 u32Thrd[9]<C<=u32Thrd[10] y=6 u32Thrd[10]<C<=u32Thrd[11] y=7 u32Thrd[11]<C y=8 -
u32RowQpDelta: 在宏块级码率控制时,每一行宏块的起始QP相对于帧起始QP的波动幅度值。对于码率波动较严格的场景下,可以尝试将此参数调大,实现更加精确的码率控制,但可能会到导致某些帧图像内部的图像质量有差异。在高码率时,该值推荐为0;中码率时推荐该值为0或1;低码率时推荐该值为2 ~ 5。(注意:该参数暂不支持设置。)
-
CBR参数如下:
-
u32MaxIPProp:CBR高级参数,表示的是最大IP比例。IP比例表示I帧和P帧平均值的Bits数比例。主要用于静止复杂场景时限制I帧Size。当u32MaxIPProp被调整较小时,会导致I帧模糊,P帧清晰。在正常情况下不建议对IP大小比进行约束,避免带来呼吸效应和码率波动,默认u32MaxIPProp为0,表示不生效。在对I帧大小有约束的场景时,可以根据对I帧大小波动的依赖来设置u32MaxIPProp的值。
-
u32MaxQp&u32MinQp:CBR高级参数,表示的是P帧的最大QP和最小QP。这个钳位效果最强烈,所有其他对图像QP的调整,如宏块级码率控制,最终都会被约束到这个最大QP和最小QP。默认值u32MinQp为12,u32MaxQp为48。在对质量无特殊需求下,建议不更改此组参数。
-
u32MaxIQp&u32MinIQp:CBR高级参数,表示的I帧的最大QP和最小QP。这个钳位效果最强烈,所有其他对图像QP的调整,如宏块级码率控制,最终都会被约束到这个最大QP和最小QP。默认值u32MinQp为12,u32MaxQp为48。在对质量无特殊需求下,建议不更改此组参数。
-
s32IPQPDelta:CBR高级参数,表示的是平均QP值与当前I帧QP的差值,此参数可为正负值,用于调整I帧过大和呼吸效应。系统默认值为0,增大此值,I帧变清晰,减弱呼吸效应。
-
u32MaxISize&u32MaxPSize:CBR高级参数,表示的是SDK内部在编码当前帧前尝试限制的Size大小。系统默认值为0,表示不生效。
-
-
VBR 参数如下:
-
s32ChangePos: VBR高级参数,表示的是VBR开始调整QP时码率与最大码率的比值。系统默认为80,如果在内容变化剧烈且要求不超出最大码率的场景,建议减小此值,同时增大s32IPQPDelta,但码率控制稳定时码率偏小和质量偏差。
-
其它参数同CBR
-
-
AVBR 参数如下:
-
u32MinStillPercent: AVBR高级参数,表示的是AVBR静态场景时码率相对设定码率的百分比。系统默认为25,静态场景时如果画质较差建议增加此值,此时会占用更多的码率来编码。
-
u32MaxStillQp: AVBR高级参数,静态场景时的最大QP值,用于保证静态场景时的画质,此参数暂不支持设定。
-
u32MotionSensitivity: AVBR高级参数,表示的是运动敏感度,该值越大表示码率控制对画面运动程度的反应越快,但是同时对噪声也更敏感。
-
AVBR依赖动静态信息, 编码器内部集成了相关功能,不需要其它模块帮忙计算。
-
其它参数同CBR&VBR
-
-
CVBR 参数如下:
-
参数意义同CBR。
-
CVBR依赖动静态和复杂度信息, 编码器内部集成了相关功能,不需要其它模块帮忙计算。
-
-
pRcParam: 由用户制定的RC高级参数,保留,暂时没有使用。
-
建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
-
-
举例
MI_S32 VencSetRcParam() { MI_S32 s32Ret; MI_VENC_RcParam_t stVencRcPara; MI_VENC_DEV VeDev = MI_VENC_DEV_ID_H264_H265_0; MI_VENC_CHN VeChnId = 0; //...omit other thing s32Ret = MI_VENC_GetRcParam(VeDev,VeChnId, &stVencRcPara); if (MI_SUCCESS != s32Ret) { printf("MI_VENC_GetRcParam err0x%x\n", s32Ret); return E_MI_ERR_FAILED; } stVencRcPara.stParamCbr.s32IPQPDelta = 2; s32Ret = MI_VENC_SetRcParam(VeDev,VeChnId, &stVencRcPara); if (MI_SUCCESS != s32Ret) { printf("MI_VENC_SetRcParam err0x%x\n", s32Ret); return E_MI_ERR_FAILED; } //...omit other thing return s32Ret; }
2.45. MI_VENC_GetRcParam¶
-
功能
获取通道码率控制高级参数。
-
语法
MI_S32 MI_VENC_GetRcParam(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_RcParam_t *pstRcParam);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM)。 输入 pstRcParam 通道码率控制参数指针。 输出 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件:mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
-
本接口用于获取编码通道码率控制的高级参数。各参数的含义请具体请参见MI_VENC_RcParam_t,参数stParamCbr/stParamVBR/stParamAvbr/stParamCvbr通用于H.264/H.265/AV1。
-
如果pstRcParam为空,则返回失败。
-
2.46. MI_VENC_SetRefParam¶
-
功能
设置H.264/H.265/AV1编码通道高级跳帧参考参数。
-
语法
MI_S32 MI_VENC_SetRefParam(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_ParamRef_t *pstRefParam);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM)。 输入 pstRefParam H.264/H.265/AV1编码通道高级跳帧参考参数指针。 输入 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件:mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
-
如果pstRefParam为空,则返回失败。
-
创建H.264/H.265/AV1协议编码通道时,默认跳帧参考模式是1倍跳帧参考模式。如果用户需要修改编码通道的跳帧参考,建议在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
-
本接口在编码过程中被调用时,等到下一个I帧时生效。
-
如果用户设置1倍跳帧参考模式,对应的配置为:bEnablePred = TRUE,u32Enhance=0,u32Base=1;
如果设置2倍跳帧参考模式,对应的配置为:bEnablePred = TRUE,u32Enhance=1,u32Base=1;
如果设置4倍跳帧参考模式,对应的配置为:bEnablePred = TRUE,u32Enhance=3,u32Base=1。
非以上跳帧参考模式,u32Enhance取值可参考如下公式:u32Enhance = gop / (虚拟I帧个数+1)-1,u32Base可取任意值。
-
-
举例
MI_S32 VencSetRefParam() { MI_S32 s32Ret; MI_VENC_ParamRef_t stRefParam; MI_VENC_DEV VeDev = MI_VENC_DEV_ID_H264_H265_0; MI_VENC_CHN VeChnId = 0; //...omit other thing s32Ret = MI_VENC_GetRefParam(VeDev, VeChn, &stRefParam); if (MI_SUCCESS != s32Ret) { printf("MI_VENC_GetRefParam err0x%x\n", s32Ret); return E_MI_ERR_FAILED; } //...omit other thing stRefParam.u32Base = 1; stRefParam.u32Enhance = 3; stRefParam.bEnablePred = TRUE; s32Ret = MI_VENC_SetRefParam(VeDev, VeChn, &stRefParam); if (MI_SUCCESS != s32Ret) { printf("MI_VENC_SetRefParam err0x%x\n", s32Ret); return E_MI_ERR_FAILED; } return s32Ret; }
2.47. MI_VENC_GetRefParam¶
-
功能
获取H.264/H.265/AV1编码通道高级跳帧参考参数。
-
语法
MI_S32 MI_VENC_GetRefParam(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_ParamRef_t *pstRefParam);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM)。 输入 pstRefParam H.264/H.265/AV1编码通道高级跳帧参考参数指针。 输出 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件:mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
如果pstRefParam为空,则返回失败。
-
举例
请参见MI_VENC_SetRefParam的举例。
2.48. MI_VENC_SetCrop¶
-
功能
设置通道的裁剪属性。
-
语法
MI_S32 MI_VENC_SetCrop(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_CropCfg_t *pstCropCfg);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。取值范围:[0, VENC_MAX_CHN_NUM)。 输入 pstCropCfg 通道裁剪属性指针。 输入 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件:mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
芯片差异
不同Chip支持的crop对齐参数如下表所示。
Chip
Alignment of (stRect.u32Left, stRect.u32Top, stRect.u32Width, stRect.u32Height)
H.264 H.265 JPEG AV1 Maruko (16,16,8,2) (16,16,8,2) (16,2,8,2) None Opera (16,16,8,2) (16,16,8,2) (16,2,8,2) None Souffle (16,16,8,2) (16,16,8,2) (16,2,8,2) (16,16,8,2) Iford (16,16,8,2) (16,16,8,2) (16,2,8,2) None -
注意
-
本接口用于设置通道的裁剪属性。
-
本接口必须在通道创建之后,通道销毁前调用。
-
裁剪属性由两部分组成:
-
bEnable: 是否使能通道裁剪功能。
-
stRect: 裁剪区域属性,包括裁剪区域起始点坐标,以及裁剪区域的尺寸。
-
-
2.49. MI_VENC_GetCrop¶
-
功能
获取通道的裁剪属性。
-
语法
MI_S32 MI_VENC_GetCrop(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_CropCfg_t *pstCropCfg);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。取值范围:[0, VENC_MAX_CHN_NUM)。 输入 pstCropCfg 通道裁剪属性指针。 输出 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件:mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
-
本接口用于获取通道的裁剪属性。
-
本接口必须在通道创建之后,通道销毁之前调用。
-
2.50. MI_VENC_SetFrameLostStrategy¶
-
功能
设置编码通道瞬时码率超过阈值时丢帧策略。
-
语法
MI_S32 MI_VENC_SetFrameLostStrategy(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_ParamFrameLost_t *pstFrmLostParam);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM)。 输入 pstFrmLostParam 编码通道丢帧策略的参数指针。 输入 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件:mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
-
如果pstFrmLostParam为空,则返回失败。
-
pstFrmLostParam 主要由四个参数决定:
-
eFrmLostMode: 丢帧策略模式。
-
u32EncFrmGaps: 丢帧间隔。
-
bFrmLostOpen: 丢帧开关。
-
u32FrmLostBpsThr: 丢帧阈值。
-
-
本接口属于高级接口,用户可以选择性调用,系统有默认值,默认在瞬时码率超出阈值时为丢帧。
-
本接口提供瞬时码率超过阈值时两种处理方式:丢帧和编码pskip帧。u32EncFrmGaps控制是否均匀丢帧或均匀编码pskip帧。如下图所示:
-
本接口可在编码通道创建之后,编码通道销毁之前设置。此接口在编码过程中被调用时,等到下一帧时生效。
-
2.51. MI_VENC_GetFrameLostStrategy¶
-
功能
获取编码通道瞬时码率超过阈值时丢帧策略。
-
语法
MI_S32 MI_VENC_GetFrameLostStrategy(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_ParamFrameLost_t *pstFrmLostParam);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM)。 输入 pstFrmLostParam 编码通道丢帧策略的参数指针。 输出 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件:mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
如果pstFrmLostParam为空,则返回失败。
2.52. MI_VENC_SetSuperFrameCfg¶
-
功能
设置编码超大帧配置。
-
语法
MI_S32 MI_VENC_SetSuperFrameCfg(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_SuperFrameCfg_t *pstSuperFrmParam);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM)。 输入 pstSuperFrmParam 编码超大帧配置参数指针。 输入 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件:mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
芯片差异
不同chip是否支持重编码如下所示:
芯片 是否支持 Maruko Y Opera Y Souffle Y Iford Y -
注意
-
如果通道未创建,则返回失败。
-
本接口属于高级接口,用户可以选择性调用,系统默认为eSuperFrmMode=E_MI_VENC_SUPERFRM_NONE。
-
本接口可在编码通道创建之后,编码通道销毁之前设置。
-
超大帧模式选择E_MI_VENC_SUPERFRM_NONE时,MI不做任何处理。
-
超大帧模式选择E_MI_VENC_SUPERFRM_DISCARD时,MI会将超大帧丢弃,并继续编码下一帧;因为节省内存占用的关系,丢弃超大帧后会强制申请I帧。
-
超大帧模式选择E_MI_VENC_SUPERFRM_REENCODE时,MI会将这一帧QP提高4并重新编码,最多重复4次,之后无论帧大小是否超出阈值,都会传给用户。
-
超大帧处理主要是防止因为某一帧过大造成的画面卡顿。阈值单位是bit,建议根据实际场景设定。
-
如果VENC与前级的绑定关系设置为E_MI_SYS_BIND_TYPE_HW_RING,则不支持超大帧重编。
-
2.53. MI_VENC_GetSuperFrameCfg¶
-
功能
获取编码超大帧配置。
-
语法
MI_S32 MI_VENC_GetSuperFrameCfg(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_SuperFrameCfg_t *pstSuperFrmParam);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM)。 输入 pstSuperFrmParam 编码超大帧配置参数指针。 输出 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件:mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
如果pstSuperFrmParam为空,则返回失败。
2.54. MI_VENC_SetRcPriority¶
-
功能
设置码率控制的优先级类型。
-
语法
MI_S32 MI_VENC_SetRcPriority(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_RcPriority_e *peRcPriority);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。取值范围:[0, VENC_MAX_CHN_NUM)。 输入 peRcPriority 优先级类型指针。 输入 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件: mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
-
本接口用于设置码率控制是以目标码率还是以超大帧阈值为高优先级。
-
当码率控制以目标码率为高优先级时,在码率不足时可能编码出超大帧以补偿码率,这时超大帧不会重编。当码率控制以超大帧阈值为高优先级时,超大帧则会重编以降低比特数,结果可能导致码率不足。
-
本接口必须在编码通道创建之后,编码通道销毁之前调用。
-
本接口只支持H.264/H.265/AV1协议的码率控制模式。
-
2.55. MI_VENC_GetRcPriority¶
-
功能
获取码率控制的优先级类型。
-
语法
MI_S32 MI_VENC_GetRcPriority(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_RcPriority_e *peRcPriority);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。取值范围:[0, VENC_MAX_CHN_NUM)。 输入 peRcPriority 优先级类型指针。 输出 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件: mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
本接口必须在编码通道创建之后,编码通道销毁之前调用。
2.56. MI_VENC_AllocCustomMap¶
-
功能
分配智能编码所用的Custom Map的内存,Custom Map包含
QP Map
和Mode Map
。 -
语法
MI_S32 MI_VENC_ AllocCustomMap (MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_PHY *pstPhyAddr, void **ppCpuAddr);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM) 输入 pstPhyAddr 分配的物理地址的指针 输入/输出 ppCpuAddr 分配的CPU虚拟地址的指针 输入/输出 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件: mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
-
本接口用于分配Custom Map所需的内存,并返回分配好的内存的地址,包括物理地址和CPU地址。
-
如果地址分配失败,pstPhyAddr或ppCpuAddr为空,则返回失败。
-
本接口可在编码通道创建之后,编码通道销毁之前设置,分配的内存会在通道销毁时候同步释放。
-
Custom Map包含QP Map和Mode Map两种,可以同时使用两种Map,不同的Map使用不同的位来区分。
-
QPMap中QP的设置在Souffle平台H.264中以32*32块为单位,在其他平台H.264中以16*16块为单位,每一个块(32*32块/16*16块)的QP值,采用用户设定的相应块的QP值。所有这些块的QP值组成QP表,该表中QP值的组织方式如下图示。QP值依次填入为QPMap所分配的内存地址中。QP值根据设定(参考MI_VENC_SetAdvCustRcAttr)使用相对或绝对值填入,如果是绝对QP值,QP的取值范围为[12,48]。如果是相对QP值,QP的取值范围为[0,63](实际生效的相对QP值为配置值减32,即实际生效的相对范围为[-32,31],实际生效的绝对范围则为[12,48])。
-
Mode Map中Mode的设置在Souffle平台H.264中同样以32*32块为单位,在其他平台H.264中以16*16块为单位,每一个块(32*32块/16*16块)的Mode值,采用用户设定的相应块的Mode值。所有这些块的Mode值组成Mode表,该表中Mode值的组织方式和QP值的组织方式一样,Mode值依次填入为ModeMap所分配的内存地址中。
-
Souffle平台不支持设置Mode Map,即Souffle平台Mode Map的值仅支持设置为0,其他平台Mode值支持设置为(0:not use,1:skip mode,2:intra mode)。
-
H.264每个块(32*32/16*16)可以配置1 byte的Mode/QP值,Mode值占据所填写值的高2位,QP值占据低6位。配置填写示例如下:
struct { uint8 qp : 6; uint8 mode : 2; } H264CustomMapConf;
Souffle/Iford平台H.264如下:
其他平台H.264如下:
-
QPMap中QP的设置在H.265中以4个32*32块为单位,每一个32*32块的QP值,采用用户设定的相应块的QP值。所有这些块的QP值组成QP表,该表中QP值的组织方式如下图示, QP值按照上下各两个的次序依次填入为QPMap所分配的内存地址中。QP值同样根据设定使用相对或绝对值填入。
-
ModeMap中Mode的设置在H.265中同样以4个32*32块为单位,每4个32*32块的Mode值,采用用户设定的相应块的Mode值。所有这些块的Mode值组成Mode表,该表中Mode值的组织方式和QP值的组织方式一样,Mode值依次填入为ModeMap所分配的内存地址中。
-
以上4个32*32块中,可以配置4bytes的QP/Mode值。其中Mode值占2位,每个32*32的块对应的QP值占6位(共24位)。
配置填写示例如下:
struct { uint32 sub_ctu_qp_0 : 6; uint32 mode : 2; uint32 sub_ctu_qp_1 : 6; uint32 reserved_0 : 2; uint32 sub_ctu_qp_2 : 6; uint32 reserved_1 : 2; uint32 sub_ctu_qp_3 : 6; uint32 reserved_2 : 2; } H265CustomMapConf;
-
如果H.265编码有效宽度的最后一个块不足32pixel,或者有效高度的最后一个块不足32pixel,Souffle/Iford平台H.265的Map组织方式如下:
-
如果H.265编码有效宽度的最后一个块不足32pixel,或者有效高度的最后一个块不足32pixel,其他平台H.265的Map组织方式如下:
-
QPMap中QP的设置在AV1中以
64*64
块为单位,每一个64*64
块的QP值,采用用户设定的相应块的QP值。所有这些块的QP值组成QP表,该表中QP值的组织方式如下图示, QP值依次填入为QPMap所分配的内存地址中。QP值同样根据设定使用相对或绝对值填入。 -
ModeMap中Mode的设置在AV1中同样以
64*64
块为单位,每64*64
块的Mode值,采用用户设定的相应块的Mode值。所有这些块的Mode值组成Mode表,该表中Mode值的组织方式和QP值的组织方式一样,Mode值依次填入为ModeMap所分配的内存地址中。 -
AV1每个块(
64*64
)可以配置1 byte的Mode/QP值,Mode值占据所填写值的高2位,QP值占据低6位。配置填写示例如下:struct { uint8 qp : 6; uint8 mode : 2; } Av1CustomMapConf;
-
2.57. MI_VENC_ApplyCustomMap¶
-
功能
应用已经配置的Custom Map。
-
语法
MI_S32 MI_VENC_ApplyCustomMap (MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_PHY PhyAddr);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM) 输入 PhyAddr 分配的虚拟物理地址 输入 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件: mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
-
本接口用于在配置自定义的Custom Map到内存后,应用相关的配置。
-
本接口可在初始化或修改Custom Map后使用。
-
2.58. MI_VENC_GetLastHistoStaticInfo¶
-
功能
获取最新的图像帧编码后的相关输出信息。
-
语法
MI_S32 MI_VENC_GetLastHistoStaticInfo (MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_FrameHistoStaticInfo_t **ppFrmHistoStaticInfo);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM) 输入 ppFrmHistoStaticInfo 保存的最新已编码帧相关输出的地址的指针 输出 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件: mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
-
本接口用于获取保存的最近已经编码的图像帧输出相关信息的地址,其中输出信息包括编码后的帧类型,块的数量,帧大小等等。
-
如果获取相关输出内容失败,则返回失败。
-
本接口可在编码通道创建之后,编码通道销毁之前调用设置,获取的相关输出内容会在通道销毁时候或者调用下面的释放接口时候释放。
-
2.59. MI_VENC_ReleaseHistoStaticInfo¶
-
功能
释放保存的最新的图像帧编码后的相关输出信息占用的内存。
-
语法
MI_S32 MI_VENC_ReleaseHistoStaticInfo (MI_VENC_DEV VeDev, MI_VENC_CHN VeChn);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM) 输入 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件: mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
- 此接口暂不支持。
2.60. MI_VENC_SetAdvCustRcAttr¶
-
功能
设置自定义的高级码控相关属性配置。
-
语法
MI_S32 MI_VENC_SetAdvCustRcAttr (MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_AdvCustRcAttr_t *pstAdvCustRcAttr);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM)。 输入 pstAdvCustRcAttr 自定义的高级码控相关功能的开关参数配置指针。 输入 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件: mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
-
本接口用于设置自定义的高级码控相关属性配置。
-
本接口在编码通道创建之后,图像开始接收之前设置。
-
设置了自定义的高级码控功能的开关后,才能使用MI_VENC_AllocCustomMap和MI_VENC_GetLastHistoStaticInfo来启动相关功能。
-
2.61. MI_VENC_SetInputSourceConfig¶
-
功能
设置H.264/H.265/AV1的输入配置信息。
-
语法
MI_S32 MI_VENC_SetInputSourceConfig(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_InputSourceConfig_t *pstInputSourceConfig);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM)。 输入 pstInputSourceConfig 输入配置信息指针。 输入 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件:mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
芯片差异
不同Chip在使用Input ring mode时,需不需要调用此接口的限制是不一样的,如下表:
Chip 使用ring mode时需要调用此接口? Maruko Y Opera Y Souffle Y Iford Y -
注意
-
如果通道未创建,则返回失败。
-
本接口在编码通道创建之后,图像开始接收之前设置。
-
允许对最多一个通道设置成input ring mode,不支持设置为hw auto sync mode。
-
如果设置了E_MI_VENC_INPUT_MODE_RING_ONE_FRM/E_MI_VENC_INPUT_MODE_RING_HALF_FRM,那APP在调用MI_SYS_BindChnPort2需要设置E_MI_SYS_BIND_TYPE_HW_RING和相应ring buffer高度。比如分辨率为1920x1080,如果设置为E_MI_VENC_INPUT_MODE_RING_ONE_FRM,则ring buffer高度需设置1080;如果为E_MI_VENC_INPUT_MODE_RING_HALF_FRM,则ring buffer高度需设置540。
-
编码协议为H264,H265和AV1时,支持E_MI_VENC_INPUT_MODE_RING_UNIFIED_DMA模式,前级为SCL模块,由VENC主通道设置。APP在调用MI_SYS_BindChnPort2需设置E_MI_SYS_BIND_TYPE_HW_RING,u32BindParam配置为0即可。
-
编码协议为H264,H265和AV1时,支持VENC模块不同channel之间绑定,APP在调用MI_SYS_BindChnPort2 时需配置E_MI_SYS_BIND_TYPE_HW_RING模式。此种用法下不可以调用MI_VENC_SetInputSourceConfig来设置buf模式为E_MI_VENC_INPUT_MODE_RING_UNIFIED_DMA;正确做法为不调用该接口或者设置buf模式为E_MI_VENC_INPUT_MODE_NORMAL_FRMBASE。
-
2.62. MI_VENC_SetIntraRefresh¶
-
功能
设置H.264/H.265/AV1的P帧刷新Islice,开启IntraRefresh 模式后,只会在编码开始位置有一张IDR,后续只有P帧,开启IntraRefresh模式的好处是不改变IDR帧质量,把原本IDR编码的Intra LCU/宏块分散在若干个P帧中,使每帧的大小相对平均。
优点:
-
码率非常平稳,对网络冲击小,适合无线传输环境。
-
编码,解码及网络延迟非常小。
-
不会降低I帧质量,不会引起严重呼吸效应。
缺点:
-
只支持normalP的GOP结构,其他GOP结构不支持。
-
该技术主要针对码率平稳要求高的场景,并不能够降低太多码率,对低码率场景优化不大,仅支持宏块/LCU按行刷新。
-
-
语法
MI_S32 MI_VENC_SetIntraRefresh(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_IntraRefresh_t *pstIntraAttr)
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM)。 输入 pstIntraAttr 输入Intra配置信息指针。 输入 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件: mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
-
如果通道未创建,则返回失败。
-
本接口在编码通道创建之后,图像开始接收之前设置。
-
u32RefreshLineNum的取值范围:total_mb_count/gop < u32RefreshLineNum <= total_mb_count,例如:1080P, gop = 30, mb_height = 16, 那取值范围是:total_mb_count = 1088 / 16 = 68,total_mb_count/gop = 68/30 = 2.26,则2.26 < u32RefreshLineNum <=68。为了降低码率,u32RefreshLineNum取值建议不要太大,不然会导致整个gop的P frame都刷新到Islice。
-
-
举例
MI_S32 SetIntraRefresh() { MI_S32 s32Ret; MI_VENC_DEV VeDev = MI_VENC_DEV_ID_H264_H265_0; MI_VENC_CHN VeChn = 0; MI_VENC_IntraRefresh_t stIntraAttr; //...omit other thing s32Ret = MI_VENC_GetIntraRefresh(VeDev, VeChnId, &stIntraAttr); if (MI_SUCCESS != s32Ret) { printf("MI_VENC_GetIntraRefresh err0x%x\n", s32Ret); return E_MI_ERR_FAILED; } stIntraAttr.bEnable = TRUE; stIntraAttr.u32RefreshLineNum = 2; stIntraAttr.u32ReqIQp = FALSE; s32Ret = MI_VENC_SetIntraRefresh(VeDev, VeChn, &stIntraAttr); if (MI_SUCCESS != s32Ret) { printf("MI_VENC_SetIntraRefresh err 0x%x\n", s32Ret); return E_MI_ERR_FAILED; } return s32Ret; }
2.63. MI_VENC_GetIntraRefresh¶
-
功能
获取H.264/H.265/AV1的Intra Refresh参数
-
语法
MI_S32 MI_VENC_GetIntraRefresh(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_IntraRefresh_t *pstIntraAttr)
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM)。 输入 pstIntraAttr 输出Intra配置信息指针。 输出 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件: mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
-
如果通道未创建,则返回失败。
-
本接口在编码通道创建之后,图像开始接收之前设置。
-
-
举例
请参见MI_VENC_SetIntraRefresh的举例。
2.64. MI_VENC_DupChn¶
-
描述
同步VENC通道状态。
-
语法
MI_S32 MI_VENC_DupChn(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn)
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。取值范围:[0, VENC_MAX_CHN_NUM)。 输入 -
返回值
-
MI_SUCCESS成功。
-
非MI_SUCCESS失败,参照错误码。
-
-
依赖
-
头文件: mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
-
此接口仅适用于多进程环境,例如dual os。在RTK环境下已初始化VENC通道,切换到Linux环境时,用于同步VENC通道的状态。
-
Linux dup chn后 ,RTK端app不可以再操作该VENC通道。
-
2.65. MI_VENC_SetAv1TileSplit¶
-
功能
设置AV1通道的tile分割属性。
-
语法
MI_S32 MI_VENC_SetAv1TileSplit(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_ParamAv1TileSplit_t *pstTileSplit);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM)。 输入 pstTileSplit AV1码流tile分割参数指针。 输入 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件:mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
-
本接口用于设置AV1协议编码通道码流的分割方式。
-
Tile分割属性主要由两个参数决定:
-
bSplitEnable: 当前帧是否进行tile分割。
-
u32TileRowCount: tile按照宏块行进行分割。u32TileRowCount表示每个tile占图像宏块行数。且当编码至图像的最后几行,不足u32TileRowCount时,剩余的宏块行被划分为一个tile。
-
-
本接口属于高级接口,用户可以选择性调用,建议不调用,系统默认bSplitEnable为false。本接口可在编码通道创建之后,编码通道销毁之前设置。此接口在编码过程中被调用时,等到下一帧时生效。
-
建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
-
建议用户在调用此接口之前,先调用MI_VENC_GetAv1TileSplit接口,获取当前通道的pstTileSplit配置,然后再进行设置。
-
AV1编码每帧最大支持切分为16个tile。
-
-
举例
请参见MI_VENC_SetH264SliceSplit的举例。
2.66. MI_VENC_GetAv1TileSplit¶
-
功能
获取AV1通道的tile分割属性。
-
语法
MI_S32 MI_VENC_GetAv1TileSplit(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_ParamAv1TileSplit_t *pstTileSplit);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM)。 输入 pstTileSplit AV1码流tile分割参数指针。 输出 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件:mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
-
本接口用于获取AV1协议编码通道的tile分割属性。
-
本接口可在编码通道创建之后,编码通道销毁之前调用。
-
建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
-
-
举例
请参见MI_VENC_SetH264SliceSplit的举例。
2.67. MI_VENC_SetAv1Dblk¶
-
功能
设置AV1协议编码通道的Deblocking类型。
-
语法
MI_S32 MI_VENC_SetAv1Dblk(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_ParamAv1Dblk_t *pstAv1Dblk);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM)。 输入 pstAv1Dblk AV1协议编码通道的Deblocking参数指针。 输入 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件: mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
-
本接口用于设置AV1协议编码通道的Deblocking的配置。
-
Deblocking属性主要以下参数组成:
-
u32DblkMode: 设置为0时表示不使能;设置为1时表示使能,并且使用内部计算的Deblocking参数(用户设置的Deblocking参数无效);设置为2时表示使能,并且使用用户设置的Deblocking参数。
-
u32LumaHorzLevel: 具体含义请参见AV1协议loop_filter_level[0]的定义。
-
u32LumaVertLevel: 具体含义请参见AV1协议loop_filter_level[1]的定义。
-
u32ChromaLevel: 具体含义请参见AV1协议loop_filter_level[2]的定义。
-
u32Sharpness: 具体含义请参见AV1协议loop_filter_sharpness的定义。
-
-
系统默认打开deblocking功能,默认u32DblkMode=1。
-
如果用户想关闭deblocking功能,可以将u32DblkMode置为0。
-
本接口可在编码通道创建之后,编码通道销毁之前设置。本接口在编码过程中被调用时,等到下一帧时生效。
-
建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
-
建议用户在调用此接口之前,先调用MI_VENC_GetAv1Dblk 接口,获取当前编码通道的Deblocking配置,然后再进行设置。
-
-
举例
请参见MI_VENC_SetH264Dblk的举例。
2.68. MI_VENC_GetAv1Dblk¶
-
功能
获取AV1协议编码通道的Deblocking类型。
-
语法
MI_S32 MI_VENC_GetAv1Dblk(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_ParamAv1Dblk_t *pstAv1Dblk);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM)。 输入 pstAv1Dblk AV1协议编码通道的Deblocking属性指针。 输出 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件:mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
-
本接口用于获取AV1协议编码通道的Deblocking配置。
-
本接口可在编码通道创建之后,编码通道销毁之前调用。
-
建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
-
-
举例
请参见MI_VENC_SetH264Dblk的举例。
2.69. MI_VENC_SetAv1Vui¶
-
功能
设置AV1协议编码通道的VUI参数。
-
语法
MI_S32 MI_VENC_SetAv1Vui(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_ParamAv1Vui_t *pstAv1Vui);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM)。 输入 pstAv1Vui AV1协议编码通道的VUI参数指针。 输入 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件:mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
-
本接口用于设置AV1协议编码通道的VUI的配置。
-
本接口可在编码通道创建之后,编码通道销毁之前设置。本接口在编码过程中被调用时,等到下一个I帧时生效。
-
建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
-
建议用户在调用此接口之前,先调用MI_VENC_GetAv1Vui接口,获取当前编码通道的VUI配置,然后再进行设置。
-
-
举例
请参见 MI_VENC_SetH264Vui的举例
2.70. MI_VENC_GetAv1Vui¶
-
功能
获取AV1协议编码通道的VUI配置。
-
语法
MI_S32 MI_VENC_GetAv1Vui(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_ParamAv1Vui_t *pstAv1Vui);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM)。 输入 pstAv1Vui AV1协议编码通道的VUI属性指针。 输出 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件:mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
-
本接口用于获取AV1协议编码通道的VUI配置。
-
本接口可在编码通道创建之后,编码通道销毁之前调用。
-
建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
-
-
举例
请参见 MI_VENC_SetH264Vui的举例
2.71. OnVencUserRcInit¶
-
描述
初始化模块内相关UBR资源。
-
语法
MI_S32 (*OnVencUserRcInit)(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_UserRcChnAttr_t *pstAttr)
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。取值范围:[0, VENC_MAX_CHN_NUM)。 输入 pstAttr 输入VENC RC配置信息。 输入 -
返回值
-
MI_SUCCESS成功。
-
非MI_SUCCESS失败,返回值由用户定义。
-
-
依赖
-
头文件: mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
- app通过MI_VENC_CreateChn或者MI_VENC_SetChnAttr切到UBR Mode时,VENC都会调用一次该函数,同时传出对应的venc通道号和对应的属性。
-
相关参数
2.72. OnVencUserRcDeinit¶
-
描述
反初始化模块内相关UBR资源。
-
语法
MI_S32 (*OnVencUserRcDeinit)(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn)
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。取值范围:[0, VENC_MAX_CHN_NUM)。 输入 -
返回值
-
MI_SUCCESS成功。
-
非MI_SUCCESS失败,返回值由用户定义。
-
-
依赖
-
头文件: mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
- app每次切到其他RC Mode或者调用MI_VENC_DestroyChn时,VENC都会调用一次该函数,同时传出对应的venc通道号。
2.73. OnVencUserRcAttrChange¶
-
描述
UBR通道属性。
-
语法
MI_S32 (*OnVencUserRcAttrChange)(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_UserRcChnAttr_t *pstAttr)
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。取值范围:[0, VENC_MAX_CHN_NUM)。 输入 pstAttr 输入用户RC配置信息指针。 输入 -
返回值
-
MI_SUCCESS成功。
-
非MI_SUCCESS失败,返回值由用户定义。
-
-
依赖
-
头文件: mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
- 修改通道属性时(比如bitrate或者fps),VENC会调用这个函数,设置修改后的通道属性。
-
相关数据类型及接口
2.74. OnVencUserRcCalc¶
-
描述
根据前一帧的编码信息配置当前帧编码的属性。
-
语法
MI_S32(*OnVencUserRcCalc)(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, const MI_VENC_UserRcFrameAttr_t *pstFrameAttr, MI_VENC_UserRcEncParam_t *pstEncParam)
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。取值范围:[0, VENC_MAX_CHN_NUM)。 输入 pstFrameAttr 输入前一帧的编码信息。 输入 pstEncParam 输出用户设置的当前帧编码参数。 输出 -
返回值
-
MI_SUCCESS成功。
-
非MI_SUCCESS失败,返回值由用户定义。
-
-
依赖
-
头文件: mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
- VENC通过该函数传出前一帧的编码结果和信息,执行用户相关的码控计算算法,设置当前帧的编码参数。
-
相关数据类型及接口
2.75. MI_VENC_SetDeBreathCfg¶
-
描述
设置H264/H265编码去呼吸效应的参数配置。
-
语法
MI_S32 MI_VENC_SetDeBreathCfg(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_DeBreathCfg_t *pstDeBreathCfg)
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。取值范围:[0, VENC_MAX_CHN_NUM)。 输入 pstDeBreathCfg 去呼吸效应参数配置。 输入 -
返回值
-
MI_SUCCESS成功。
-
非MI_SUCCESS失败,返回值由用户定义。
-
-
依赖
-
头文件: mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
-
仅 H264/H265 支持去呼吸效应功能。
-
本接口可在编码通道创建之后,编码通道销毁之前设置,此接口在编码过程中被调用时,等到下一个帧时生效。
-
建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。去呼吸效应开关只支持启动编码之前设置,但强度同时支持运行中设置
-
当 GOP 等于 1 时,不支持使能去除呼吸效应功能。
-
只有NormalP参考关系时才支持去除呼吸效应功能
-
该功能主要由如下三个参数决定。
bEnable:去除呼吸效应使能控制。
u8Strength0: 为设置去除呼吸效应强度调节参数 0,默认值为 2。strength0 值越小,呼吸效应改善越明显。
u8Strength1: 为设置去除呼吸效应强度调节参数 1,默认值为 6。其值越大,I 帧会越大,如果 I 帧变大对客户应用有影响,客户可以尝试把 strength1 调小一点,会降低 I 帧的大小,但是可能会减弱呼吸效应的改善程度。
-
原则上,对不同的场景,呼吸效应的改善要做到最佳,需要调节不同的参数。但是考虑到多场景的适应性,建议客户使用默认值。
-
建议用户在调用此接口之前,先调用MI_VENC_GetDeBreathCfg接口,获取当前编码通道的去呼吸效应配置,然后再进行设置。
-
-
相关数据类型及接口
2.76. MI_VENC_GetDeBreathCfg¶
-
描述
获取H264/H265编码去呼吸效应的参数配置。
-
语法
MI_VENC_GetDeBreathCfg(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_DeBreathCfg_t *pstDeBreathCfg)
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。取值范围:[0, VENC_MAX_CHN_NUM)。 输入 pstDeBreathCfg 输出用户设置的去呼吸效应参数配置。 输出 -
返回值
-
MI_SUCCESS成功。
-
非MI_SUCCESS失败,返回值由用户定义。
-
-
依赖
-
头文件: mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
-
仅 H264/H265 支持去呼吸效应功能。
-
本接口可在编码通道创建之后,编码通道销毁之前设置。
-
建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
-
-
相关数据类型及接口
2.77. MI_VENC_SetOutputPortParam¶
-
功能
设置output 端口参数
-
语法
MI_S32 MI_VENC_SetOutputPortParam(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_U8 PortId, MI_VENC_OutPortParam_t *pstOutPortParam);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM)。 输入 PortId 输出端口号,目前仅支持yuv端口。 取值范围:0。 输入 pstOutPortParam 输出端口参数。 输入 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件:mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
- 如果通道未创建,则返回失败。
- 仅H.264和H.265编码通道支持,JPEG编码通道不支持。
- 仅支持设置yuv端口,es端口不支持。
- 输出yuv的格式为NV12。
- yuv端口不支持对输入yuv放大。
- 在输出端口已经启用的情况下,需要改变输出参数,需要先调用MI_VENC_DisableOutputPort禁用端口,再来设置参数,然后再启用输出端口。
-
举例
MI_S32 s32Ret; MI_VENC_OutPortParam_t stOutPortParam; MI_VENC_DEV VeDev = MI_VENC_DEV_ID_H264_H265_0; MI_VENC_CHN VeChn = 0; stOutPortParam.u32Width = 352; stOutPortParam.u32Height = 288; s32Ret = MI_VENC_SetOutputPortParam(VeDev, VeChn, 0, &stOutPortParam); if (MI_SUCCESS != s32Ret) { printf("MI_VENC_SetOutputPortParam err0x%x\n", s32Ret); return E_MI_ERR_FAILED; } s32Ret = MI_VENC_GetOutputPortParam(VeDev, VeChn, 0, &stOutPortParam); if (MI_SUCCESS != s32Ret) { printf("MI_VENC_GetOutputPortParam err0x%x\n", s32Ret); return E_MI_ERR_FAILED; } s32Ret = MI_VENC_EnableOutputPort(VeDev, VeChn, 0); if (MI_SUCCESS != s32Ret) { printf("MI_VENC_EnableOutputPort err0x%x\n", s32Ret); return E_MI_ERR_FAILED; } //use sys api set output port attribute. e.g frame rate, buffer depth //get and release yuv buffer by MI_SYS_ChnOutputPortGetBuf and MI_SYS_ChnOutputPortPutBuf s32Ret = MI_VENC_DisableOutputPort(VeDev, VeChn, 0); if (MI_SUCCESS != s32Ret) { printf("MI_VENC_DisableOutputPort err0x%x\n", s32Ret); return E_MI_ERR_FAILED; } return s32Ret;
2.78. MI_VENC_GetOutputPortParam¶
-
功能
获取output 端口参数
-
语法
MI_S32 MI_VENC_GetOutputPortParam(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_U8 PortId, MI_VENC_OutPortParam_t *pstOutPortParam);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM)。 输入 PortId 输出端口号,目前仅支持yuv端口。 取值范围:0。 输入 pstOutPortParam 输出端口参数。 输出 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件:mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
- 如果通道未创建,则返回失败。
- 仅H.264和H.265编码通道支持,JPEG编码通道不支持。
- 仅支持设置yuv端口,es端口不支持。
-
举例
请参见MI_VENC_SetOutputPortParam的举例。
2.79. MI_VENC_EnableOutputPort¶
-
功能
使能output 端口
-
语法
MI_S32 MI_VENC_EnableOutputPort(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_U8 PortId);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM)。 输入 PortId 输出端口号,目前仅支持yuv端口。 取值范围:0。 输入 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件:mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
- 如果通道未创建,则返回失败。
- 仅H.264和H.265编码通道支持,JPEG编码通道不支持。
- 仅支持设置yuv端口,es端口不支持。
-
举例
请参见MI_VENC_SetOutputPortParam的举例。
2.80. MI_VENC_DisableOutputPort¶
-
功能
禁用output 端口
-
语法
MI_S32 MI_VENC_DisableOutputPort(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_U8 PortId);
-
参数
参数名称 描述 输入/输出 VeDev 编码设备号。 输入 VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM)。 输入 PortId 输出端口号,目前仅支持yuv端口。 取值范围:0。 输入 -
返回值
-
MI_SUCCESS:成功
-
非MI_SUCCESS:失败,参照错误码
-
-
依赖
-
头文件:mi_venc.h, mi_venc_datatype.h
-
库文件: libmi_venc.a/libmi_venc.so
-
-
注意
- 如果通道未创建,则返回失败。
- 仅H.264和H.265编码通道支持,JPEG编码通道不支持。
- 仅支持设置yuv端口,es端口不支持。
-
举例
请参见MI_VENC_SetOutputPortParam的举例。
3. VENC 数据类型¶
相关数据类型、数据结构定义如下表。
数据结构 | 定义 |
---|---|
MI_VENC_DEV_ID_H264_H265_0 | 定义H264&H265编码设备0号 |
MI_VENC_DEV_ID_H264_H265_1 | 定义H264&H265编码设备1号 |
MI_VENC_DEV_ID_JPEG_0 | 定义JPEG编码设备0号 |
MI_VENC_DEV_ID_JPEG_1 | 定义JPEG编码设备1号 |
RC_TEXTURE_THR_SIZE | 定义纹理级码控的阈值个数 |
MI_VENC_H264eNaluType_e | 定义H.264码流NALU类型 |
MI_VENC_H264eRefSliceType_e | 定义获取的H.264码流属于何种跳帧参考模式下的参考帧 |
MI_VENC_H264eRefType_e | 定义H.264跳帧参考码流的帧类型以及参考属性 |
MI_VENC_JpegePackType_e | 定义JPEG码流的PACK类型 |
MI_VENC_H265eNaluType_e | 定义H.265码流NALU类型 |
MI_VENC_Rect_t | 定义编码描述的矩形框 |
MI_VENC_DataType_t | 定义码流结构联合体 |
MI_VENC_PackInfo_t | 定义当前码流包数据中包含的其他类型码流包数据的结构体 |
MI_VENC_Pack_t | 定义帧码流包结构体 |
MI_VENC_StreamInfoH264_t | 定义H.264协议码流特征信息 |
MI_VENC_StreamInfoJpeg_t | 定义JPEG协议码流特征信息 |
MI_VENC_StreamInfoH265_t | 定义H.265协议码流特征信息 |
MI_VENC_Stream_t | 定义帧码流类型结构体 |
MI_VENC_StreamBufInfo_t | 定义码流buffer信息的结构体 |
MI_VENC_AttrH264_t | 定义H.264编码器属性结构体 |
MI_VENC_AttrJpeg_t | 定义JPEG抓拍编码器属性结构体 |
MI_VENC_AttrH265_t | 定义H.265编码器属性结构体 |
MI_VENC_Attr_t | 定义编码器属性结构体 |
MI_VENC_ChnAttr_t | 定义编码通道属性结构体 |
MI_VENC_ChnStat_t | 定义编码通道的状态结构体 |
MI_VENC_ParamH264SliceSplit_t | 定义H.264编码通道slice分割属性 |
MI_VENC_ParamH265SliceSplit_t | 定义H.265协议编码通道SLICE分割结构体 |
MI_VENC_ParamH264Trans_t | 定义H.264编码通道变换、量化属性 |
MI_VENC_ParamH264Entropy_t | 定义H.264编码通道熵编码属性 |
MI_VENC_ParamH265Trans_t | 定义H.265编码通道变换、量化属性 |
MI_VENC_ParamH264Dblk_t | 定义H.264编码通道Deblocking属性 |
MI_VENC_ParamH265Dblk_t | 定义H.265协议编码通道Dblk结构体 |
MI_VENC_ParamH264Vui_t | 定义H.264编码通道VUI属性 |
MI_VENC_ParamH264VuiAspectRatio_t | 定义H.264协议编码通道Vui中AspectRatio信息的结构体 |
MI_VENC_ParamH264VuiTimeInfo_t | 定义H.264协议编码通道Vui中TIME_INFO信息的结构体 |
MI_VENC_ParamH264VuiVideoSignal_t | 定义H.264协议编码通道Vui中VIDEO_SIGNAL信息的结构体 |
MI_VENC_ParamH265Vui_t | 定义H.265协议编码通道Vui结构体 |
MI_VENC_ParamH265VuiAspectRatio_t | 定义H.265协议编码通道VUI中AspectRatio信息的结构体 |
MI_VENC_ParamH265VuiTimeInfo_t | 定义H.265协议编码通道VUI中TIME_INFO信息的结构体 |
MI_VENC_ParamH265VuiVideoSignal_t | 定义H.265协议编码通道VUI中VIDEO_SIGNAL信息的结构体 |
MI_VENC_ParamJpeg_t | 定义JPEG编码参数集合 |
MI_VENC_RoiCfg_t | 定义编码通道感兴趣区域编码属性 |
MI_VENC_RoiBgFrameRate_t | 定义非ROI区域的帧率属性 |
MI_VENC_ParamRef_t | 定义H.264/H.265/AV1编码的高级跳帧参考参数 |
MI_VENC_RcAttr_t | 定义编码通道码率控制器属性 |
MI_VENC_RcMode_e | 定义编码通道码率控制器模式 |
MI_VENC_AttrH264Cbr_t | 定义H.264编码通道CBR属性结构 |
MI_VENC_AttrH264Vbr_t | 定义H.264编码通道VBR属性结构 |
MI_VENC_AttrH264FixQp_t | 定义H.264编码通道Fixqp属性结构 |
MI_VENC_AttrH264Avbr_t | 定义H.264编码通道AVBR属性结构 |
MI_VENC_AttrMjpegCbr_t | 定义MJPEG编码通道CBR属性结构 |
MI_VENC_AttrMjpegFixQp_t | 定义MJPEG编码通道FixQp属性结构 |
MI_VENC_AttrH265Cbr_t | 定义H.265编码通道CBR属性结构 |
MI_VENC_AttrH265Vbr_t | 定义H.265编码通道VBR属性结构 |
MI_VENC_AttrH265FixQp_t | 定义H.265编码通道Fixqp属性结构 |
MI_VENC_AttrH265Avbr_t | 定义H.265编码通道AVBR属性结构 |
MI_VENC_SuperFrmMode_e | 定义码率控制中超大帧处理模式 |
MI_VENC_ParamH264Vbr_t | 定义H264协议编码通道VBR码率控制模式高级参数配置 |
MI_VENC_ParamH264Cbr_t | 定义H264协议编码通道CBR新版码率控制模式高级参数配置 |
MI_VENC_ParamH264Avbr_t | 定义H264协议编码通道AVBR码率控制模式高级参数配置 |
MI_VENC_ParamMjpegCbr_t | 定义MJPEG协议编码通道CBR码率控制模式高级参数配置 |
MI_VENC_ParamH265Vbr_t | 定义H265协议编码通道VBR码率控制模式高级参数配置 |
MI_VENC_ParamH265Cbr_t | 定义H265协议编码通道CBR新版码率控制模式高级参数配置 |
MI_VENC_ParamH265Avbr_t | 定义H265协议编码通道AVBR码率控制模式高级参数配置 |
MI_VENC_RcParam_t | 定义编码通道的码率控制高级参数 |
MI_VENC_CropCfg_t | 定义通道截取(Crop)参数 |
MI_VENC_RecvPicParam_t | 接收指定帧数图像编码 |
MI_VENC_FrameLostMode_e | 定义编码通道瞬时码率超过阈值时的丢帧模式 |
MI_VENC_ParamFrameLost_t | 定义编码通道瞬时码率超过阈值时的丢帧策略 |
MI_VENC_SuperFrameCfg_t | 超大帧处理策略参数 |
MI_VENC_RcPriority_e | 码率控制优先级枚举 |
MI_VENC_ModType_e | 定义模块参数类型 |
MI_VENC_AdvCustRcAttr_t | 自定义的高级码控相关功能的开关参数 |
MI_VENC_FrameHistoStaticInfo_t | 定义图像帧编码的相关配置属性信息 |
MI_VENC_InputSourceConfig_t | 定义H.264/H.265/AV1编码通道输入配置参数结构体 |
MI_VENC_InputSrcBufferMode_e | 定义H.264/H.265/AV1输入buffer模式 |
MI_VENC_IntraRefresh_t | 支持P帧刷Islice的控制参数 |
MI_VENC_InitParam_t | Venc 设备初始化参数 |
MI_VENC_H265eRefType_e | 定义H.265跳帧参考码流的帧类型以及参考属性 |
MI_VENC_AttrMjpegVbr_t | 定义MJPEG编码通道VBR属性结构 |
MI_VENC_ParamMjpegVbr_t | 定义MJPEG协议编码通道VBR码率控制模式高级参数配置 |
MI_VENC_Av1eRefType_e | 定义AV1跳帧参考码流的帧类型以及参考属性 |
MI_VENC_StreamInfoAv1_t | 定义AV1协议码流特征信息 |
MI_VENC_AttrAv1_t | 定义AV1编码属性结构体 |
MI_VENC_AttrCbr_t | 定义H.264/H.265/AV1编码通道CBR属性结构 |
MI_VENC_AttrVbr_t | 定义H.264/H.265/AV1编码通道VBR属性结构 |
MI_VENC_AttrFixQp_t | 定义H.264/H.265/AV1编码通道Fixqp属性结构 |
MI_VENC_AttrAvbr_t | 定义H.264/H.265/AV1编码通道AVBR属性结构 |
MI_VENC_AttrAv1Cbr_t | 定义AV1编码通道CBR属性结构 |
MI_VENC_AttrAv1Vbr_t | 定义AV1编码通道VBR属性结构 |
MI_VENC_AttrAv1FixQp_t | 定义AV1编码通道Fixqp属性结构 |
MI_VENC_AttrAv1Avbr_t | 定义AV1编码通道AVBR属性结构 |
MI_VENC_ParamVbr_t | 定义H.264/H.265/AV1协议编码通道VBR码率控制模式高级参数配置 |
MI_VENC_ParamCbr_t | 定义H.264/H.265/AV1协议编码通道CBR码率控制模式高级参数配置 |
MI_VENC_ParamAvbr_t | 定义H.264/H.265/AV1协议编码通道AVBR码率控制模式高级参数配置 |
MI_VENC_ParamAv1Vbr_t | 定义AV1协议编码通道VBR码率控制模式高级参数配置 |
MI_VENC_ParamAv1Cbr_t | 定义AV1协议编码通道CBR码率控制模式高级参数配置 |
MI_VENC_ParamAv1Avbr_t | 定义AV1协议编码通道AVBR码率控制模式高级参数配置 |
MI_VENC_ParamAv1TileSplit_t | 定义AV1协议编码通道Tile分割结构体 |
MI_VENC_ParamAv1Dblk_t | 定义AV1协议编码通道Dblk结构体 |
MI_VENC_Av1ColorPrimaries_e | 定义AV1协议Color primaries枚举类型 |
MI_VENC_Av1TransferCharacteristics_e | 定义AV1协议Transfer characteristics枚举类型 |
MI_VENC_Av1MatrixCoefficients_e | 定义AV1协议Matrix coeffcients枚举类型 |
MI_VENC_ParamAv1VuiColorConfig_t | 定义AV1协议编码通道Color config相关的结构体 |
MI_VENC_ParamAv1VuiTimingInfo_t | 定义AV1协议编码通道Timing info相关的结构体 |
MI_VENC_ParamAv1Vui_t | 定义AV1协议编码通道VUI参数结构体 |
MI_VENC_Av1ObuType_e | 定义AV1码流OBU类型 |
MI_VENC_AttrH264Ubr_t | 定义H264协议编码通道UBR属性结构 |
MI_VENC_AttrH265Ubr_t | 定义H265协议编码通道UBR属性结构 |
MI_VENC_AttrAv1Ubr_t | 定义AV1协议编码通道UBR属性结构 |
MI_VENC_UserRcChnAttr_t | 定义UBR码控算法编码通道属性结构体 |
MI_VENC_UserRcFrameAttr_t | 定义UBR码控中用户码控算法前的帧编码信息 |
MI_VENC_UserRcEncParam_t | 定义UBR码控中用户码控算法后的帧编码信息 |
MI_VENC_UbrMode_e | 定义UBR码控中使用的编码模式 |
MI_VENC_AttrCvbr_t | 定义H.264/H.265/AV1编码通道CVBR属性结构 |
MI_VENC_ParamCvbr_t | 定义H.264/H.265/AV1协议编码通道CVBR码率控制模式高级参数配置 |
MI_VENC_DeBreathCfg_t | 定义H.264/H.265协议编码通道去呼吸效应参数配置 |
MI_VENC_OutPortParam_t | 定义H.264/H.265/AV1的yuv输出端口参数。 |
3.1. MI_VENC_DEV_ID_H264_H265_0¶
-
说明
定义H264&H265编码设备0号。
-
定义
#define MI_VENC_DEV_ID_H264_H265_0 0
-
相关数据类型及接口
3.2. MI_VENC_DEV_ID_H264_H265_1¶
-
说明
定义H264&H265编码设备1号。
-
定义
#define MI_VENC_DEV_ID_H264_H265_1 (MI_VENC_DEV_ID_H264_H265_0 + 1)
-
相关数据类型及接口
3.3. MI_VENC_DEV_ID_JPEG_0¶
-
说明
定义JPEG编码设备0号。
-
定义
#define MI_VENC_DEV_ID_JPEG_0 (8)
-
相关数据类型及接口
3.4. MI_VENC_DEV_ID_JPEG_1¶
-
说明
定义JPEG编码设备1号。
-
定义
#define MI_VENC_DEV_ID_JPEG_1 (MI_VENC_DEV_ID_JPEG_0 + 1)
-
相关数据类型及接口
3.5. RC_TEXTURE_THR_SIZE¶
-
描述
定义RC宏块复杂度的阈值的个数。
-
定义
#define RC_TEXTURE_THR_SIZE 1
3.6. MI_VENC_H264eNaluType_e¶
-
描述
定义H.264码流NALU类型。
-
定义
typedef enum { E_MI_VENC_H264E_NALU_PSLICE = 1, E_MI_VENC_H264E_NALU_ISLICE = 5, E_MI_VENC_H264E_NALU_SEI = 6, E_MI_VENC_H264E_NALU_SPS = 7, E_MI_VENC_H264E_NALU_PPS = 8, E_MI_VENC_H264E_NALU_IPSLICE = 9, E_MI_VENC_H264E_NALU_PREFIX = 14, E_MI_VENC_H264E_NALU_MAX }MI_VENC_H264eNaluType_e;
-
成员
成员名称 描述 E_MI_VENC_H264E_NALU_PSLICE PSLICE类型 E_MI_VENC_H264E_NALU_ISLICE ISLICE类型 E_MI_VENC_H264E_NALU_SEI SEI类型 E_MI_VENC_H264E_NALU_SPS SPS类型 E_MI_VENC_H264E_NALU_PPS PPS类型 E_MI_VENC_H264E_NALU_PREFIX PREFIX类型 E_MI_VENC_H264E_NALU_IPSLICE P帧刷ISLICE类型(暂不支持)
3.7. MI_VENC_H264eRefSliceType_e¶
-
描述
定义获取的H.264码流属于何种跳帧参考模式下的参考帧。
-
定义
typedef enum { E_MI_VENC_H264E_REFSLICE_FOR_1X = 1, E_MI_VENC_H264E_REFSLICE_FOR_2X = 2, E_MI_VENC_H264E_REFSLICE_FOR_4X, E_MI_VENC_H264E_REFSLICE_FOR_MAX = 5 }MI_VENC_H264eRefSliceType_e;
-
成员
成员名称 描述 E_MI_VENC_H264E_REFSLICE_FOR_1X 1倍跳帧参考时的参考帧 E_MI_VENC_H264E_REFSLICE_FOR_2X 2倍跳帧参考时的参考帧或4倍跳帧参考时用于2倍跳帧参考的参考帧 E_MI_VENC_H264E_REFSLICE_FOR_4X 4倍跳帧参考时的参考帧 E_MI_VENC_H264E_REFSLICE_MAX 非参考帧
3.8. MI_VENC_H264eRefType_e¶
-
描述
定义H.264跳帧参考码流的帧类型以及参考属性。
-
定义
typedef enum { E_MI_VENC_BASE_IDR = 0, E_MI_VENC_BASE_P_REFTOIDR, E_MI_VENC_BASE_P_REFBYBASE, E_MI_VENC_BASE_P_REFBYENHANCE, E_MI_VENC_ENHANCE_P_REFBYENHANCE, E_MI_VENC_ENHANCE_P_NOTFORREF, E_MI_VENC_BASE_SWITCH_FRAME, E_MI_VENC_REF_TYPE_MAX }MI_VENC_H264eRefType_e;
-
成员
成员名称 描述 E_MI_VENC_BASE_IDR base层中的IDR帧 E_MI_VENC_BASE_P_REFTOIDR base层中的P帧,用于参考I帧 E_MI_VENC_BASE_P_REFBYBASE base层中的P帧,用于base层中其他帧的参考 E_MI_VENC_BASE_P_REFBYENHANCE base层中的P帧,用于enhance层中的帧的参考 E_MI_VENC_ENHANCE_P_REFBYENHANCE enhance层中的P帧,用于enhance层中其他帧的参考 E_MI_VENC_ENHANCE_P_NOTFORREF enhance层中的P帧,不用于参考 E_MI_VENC_BASE_SWITCH_FRAME base层中缩小分辨率的特殊P帧,缩小分辨率时无需I帧
3.9. MI_VENC_JpegePackType_e¶
-
描述
定义JPEG码流的PACK类型。
-
定义
typedef enum { E_MI_VENC_JPEGE_PACK_ECS = 5, E_MI_VENC_JPEGE_PACK_APP = 6, E_MI_VENC_JPEGE_PACK_VDO = 7, E_MI_VENC_JPEGE_PACK_PIC = 8, E_MI_VENC_JPEGE_PACK_MAX }MI_VENC_JpegePackType_e;
-
成员
成员名称 描述 E_MI_VENC_JPEGE_PACK_ECS ECS 类型 E_MI_VENC_JPEGE_PACK_APP APP 类型 E_MI_VENC_JPEGE_PACK_VDO VDO 类型 E_MI_VENC_JPEGE_PACK_PIC PIC 类型
3.10. MI_VENC_H265eNaluType_e¶
-
描述
定义H.265码流NALU类型。
-
定义
typedef enum { E_MI_VENC_H265E_NALU_PSLICE = 1, E_MI_VENC_H265E_NALU_ISLICE = 19, E_MI_VENC_H265E_NALU_VPS = 32, E_MI_VENC_H265E_NALU_SPS = 33, E_MI_VENC_H265E_NALU_PPS = 34, E_MI_VENC_H265E_NALU_SEI = 39, E_MI_VENC_H265E_NALU_MAX } MI_VENC_H265eNaluType_e;
-
成员
成员名称 描述 E_MI_VENC_H265E_NALU_PSLICE PSLICE 类型 E_MI_VENC_H265E_NALU_ISLICE ISLICE 类型 E_MI_VENC_H265E_NALU_VPS VPS 类型 E_MI_VENC_H265E_NALU_SPS SPS 类型 E_MI_VENC_H265E_NALU_PPS PPS 类型 E_MI_VENC_H265E_NALU_SEI SEI 类型
3.11. MI_VENC_Rect_t¶
-
描述
定义编码描述的矩形框。
-
定义
typedef struct MI_VENC_Rect_s { MI_U32 u32Left; MI_U32 u32Top; MI_U32 u32Width; MI_U32 u32Height; }MI_VENC_Rect_t;
-
成员
成员名称 描述 u32Left 矩形框左侧与实际画面左侧的距离,单位为pixel u32Top 矩形框上边缘与实际画面上边缘的距离,单位为pixel u32Width 矩形框的宽度,单位为pixel u32Height 矩形框的高度,单位为pixel -
注意
矩形框不能超出编码实际画面的范围。
-
相关数据类型及接口
3.12. MI_VENC_DataType_t¶
-
描述
定义码流结构类型。
-
定义
typedef union MI_VENC_DataType_s { MI_VENC_H264eNaluType_e eH264EType; MI_VENC_JpegePackType_e eJPEGEType; MI_VENC_H265eNaluType_e eH265EType; MI_VENC_Av1ObuType_e eAv1Type; }MI_VENC_DataType_t;
-
成员
成员名称 描述 eH264EType H.264码流包类型。 eJPEGEType JPEG码流包类型。 eH265EType H.265码流包类型。 eAv1Type AV1码流包类型。 -
相关数据类型及接口
3.13. MI_VENC_PackInfo_t¶
-
描述
定义当前码流包数据中包含的其他类型码流包数据的结构体。
-
定义
typedef struct MI_VENC_PackInfo_s { MI_VENC_DataType_t stPackType; MI_U32 u32PackOffset; MI_U32 u32PackLength; MI_U32 u32SliceId; }MI_VENC_PackInfo_t;
-
成员
成员名称 描述 u32PackType 当前码流包数据包含其他码流包的类型。 u32PackOffset 当前码流包数据包含其他码流包数据的偏移。 u32PackLength 当前码流包数据包含其他码流包数据的大小。 u32SliceId 当前码流包数据包含其他码流包的slice id。
3.14. MI_VENC_Pack_t¶
-
描述
定义帧码流包结构体。
-
定义
typedef struct MI_VENC_Pack_s { MI_PHY phyAddr; union { MI_U8 * pu8Addr; MI_PTR64 u64Reserved; }; MI_U32 u32Len; MI_U64 u64PTS; MI_BOOL bFrameEnd; MI_VENC_DataType_t stDataType; MI_U32 u32Offset; MI_U32 u32DataNum; MI_U8 u8FrameQP; MI_S32 s32PocNum; MI_U32 u32Gradient; MI_VENC_PackInfo_t asackInfo[8]; } MI_VENC_Pack_t;
-
成员
成员名称 描述 pu8Addr 码流包首地址 phyAddr 码流包物理地址 u64Reserved 预留,兼容32位和64位地址长度。(不可使用) u32Len 码流包长度 stDataType 码流类型,支持H.264/JPEG/H.265协议类型的数据包。 u64PTS 时间戳。单位:us bFrameEnd 帧结束标识
取值范围:
TRUE:该码流包是该帧的最后一个包。
FALSE:该码流包不是该帧的最后一个包。u32Offset 码流包中有效数据与码流包首地址pu8Addr的偏移。 u32DataNum 当前码流包(当前包的类型由DataType指定)数据中包含其他类型码流包的个数 u8FrameQP 当前码流包的frame qp。 s32PocNum 当前码流包的poc number。 u32Gradient 当前码流包的梯度信息(用于码率控制) asackInfo[8] 当前码流包数据中包含其他类型码流包数据信息 -
相关数据类型及接口
3.15. MI_VENC_StreamInfoH264_t¶
-
描述
定义H.264协议码流特征信息。
-
定义
typedef struct MI_VENC_StreamInfoH264_s { MI_U32 u32PicBytesNum; MI_U32 u32PSkipMbNum; MI_U32 u32IpcmMbNum; MI_U32 u32Inter16x8MbNum; MI_U32 u32Inter16x16MbNum; MI_U32 u32Inter8x16MbNum; MI_U32 u32Inter8x8MbNum; MI_U32 u32Intra16MbNum; MI_U32 u32Intra8MbNum; MI_U32 u32Intra4MbNum; MI_VENC_H264eRefSliceType_e eRefSliceType; MI_VENC_H264eRefType_e eRefType; MI_U32 u32UpdateAttrCnt; MI_U32 u32StartQp; }MI_VENC_StreamInfoH264_t;
-
成员
成员名称 描述 u32PicBytesNum 编码当前帧的字节(BYTE)数 u32PSkipMbNum 编码当前帧中采用跳跃(SKIP)编码模式的宏块数 u32IpcmMbNum 编码当前帧中采用IPCM编码模式的宏块数 u32Inter16x8MbNum 编码当前帧中采用Inter16x8预测模式的宏块数 u32Inter16x16MbNum 编码当前帧中采用Inter16x16预测模式的宏块数 u32Inter8x16MbNum 编码当前帧中采用Inter8x16预测模式的宏块数 u32Inter8x8MbNum 编码当前帧中采用Inter8x8预测模式的宏块数 u32Intra16MbNum 编码当前帧中采用Intra16预测模式的宏块数 u32Intra8MbNum 编码当前帧中采用Intra8预测模式的宏块数 u32Intra4MbNum 编码当前帧中采用Intra4预测模式的宏块数 enRefSliceType 编码当前帧属于何种跳帧参考模式下的参考帧 enRefType 高级跳帧参考下的编码帧类型 u32UpdateAttrCnt 通道属性或参数包含RC参数被设置的次数 u32StartQp 编码采用的起始Qp值 -
注意
-
保存H.264码流时,可只选择相应跳帧参考模式下的参考帧:
-
当跳帧参考模式是1倍跳帧参考模式时,可只保存enRefSliceType等于 E_MI_VENC_H264E_REFSLICE_FOR_1X的码流。
-
当跳帧参考模式是2倍跳帧参考模式时,可只保存enRefSliceType等于 E_MI_VENC_H264E_REFSLICE_FOR_2X的码流。
-
当跳帧参考模式是4倍跳帧参考模式时,可只保存enRefSliceType等于E_MI_VENC_H264E_REFSLICE_FOR_4X的码流
-
或同时保存enRefSliceType等于E_MI_VENC_H264E_REFSLICE_FOR_2X和E_MI_VENC_H264E_REFSLICE_FOR_4X的码流。
-
-
相关数据类型及接口
3.16. MI_VENC_StreamInfoJpeg_t¶
-
描述
定义JPEG协议码流特征信息。
-
定义
typedef struct MI_VENC_StreamInfoJpeg_s { MI_U32 u32PicBytesNum; MI_U32 u32UpdateAttrCnt; MI_U32 u32Qfactor; }MI_VENC_StreamInfoJpeg_t
-
成员
成员名称 描述 u32PicBytesNum 一帧jpeg码流大小,以字节(byte)为单位 u32UpdateAttrCnt 通道属性或参数包含RC参数被设置的次数 u32Qfactor 编码当前帧的Qfactor, 取值范围[1, 90] 默认值: 70 -
相关数据类型及接口
3.17. MI_VENC_StreamInfoH265_t¶
-
描述
定义H.265协议码流特征信息。
-
定义
typedef struct MI_VENC_StreamInfoH265_s { MI_U32 u32PicBytesNum; MI_U32 u32Inter64x64CuNum; MI_U32 u32Inter32x32CuNum; MI_U32 u32Inter16x16CuNum; MI_U32 u32Inter8x8CuNum; MI_U32 u32Intra32x32CuNum; MI_U32 u32Intra16x16CuNum; MI_U32 u32Intra8x8CuNum; MI_U32 u32Intra4x4CuNum; MI_VENC_H265eRefType_e eRefType; MI_U32 u32UpdateAttrCnt; MI_U32 u32StartQp; }MI_VENC_StreamInfoH265_t;
-
成员
成员名称 描述 u32PicBytesNum 编码当前帧的字节(BYTE)数 u32Inter64x64CuNum 编码当前帧中采用Inter64x64预测模式的CU块数 u32Inter32x32CuNum 编码当前帧中采用Inter32x32预测模式的CU块数 u32Inter16x16CuNum 编码当前帧中采用Inter16x16预测模式的CU块数 u32Inter8x8CuNum 编码当前帧中采用Inter8x8预测模式的CU块数 u32Intra32x32CuNum 编码当前帧中采用Intra32x32预测模式的CU块数 u32Intra16x16CuNum 编码当前帧中采用Intra16x16预测模式的CU块数 u32Intra8x8CuNum 编码当前帧中采用Intra8x8预测模式的CU块数 u32Intra4x4CuNum 编码当前帧中采用Intra4x4预测模式的CU块数 eRefType 高级跳帧参考下的编码帧类型 u32UpdateAttrCnt 通道属性或参数包含RC参数被设置的次数 u32StartQp 编码采用的起始Qp值 -
注意
eRefType请参见MI_VENC_StreamInfoH264_t中关于eRefType变量的说明。
-
相关数据类型及接口
3.18. MI_VENC_Stream_t¶
-
描述
定义帧码流类型结构体。
-
定义
typedef struct MI_VENC_Stream_s { union { MI_VENC_Pack_t *pstPack; MI_PTR64 u64Reserved; }; MI_U32 u32PackCount; MI_U32 u32Seq; MI_SYS_BUF_HANDLE hMiSys; union { MI_VENC_StreamInfoH264_t stH264Info; MI_VENC_StreamInfoJpeg_t stJpegInfo; MI_VENC_StreamInfoH265_t stH265Info; MI_VENC_StreamInfoAv1_t stAv1Info; }; } MI_VENC_Stream_t;
-
成员
成员名称 描述 pstPack 帧码流包结构 u64Reserved 预留,兼容32位和64位地址长度。(不可使用) u32PackCount 一帧码流的所有包的个数 u32Seq 码流序列号 hMiSys Buffer句柄 stH624Info/stJpegInfo/ /stH265Info 码流特征信息 -
相关数据类型及接口
3.19. MI_VENC_StreamBufInfo_t¶
-
描述
定义码流buffer信息的结构体。
-
定义
typedef struct MI_VENC_StreamBufInfo_s { MI_PHY phyAddr; union { MI_PTR pUserAddr; MI_PTR64 u64Reserved; }; MI_U32 u32BufSize; }MI_VENC_StreamBufInfo_t;
-
成员
成员名称 描述 u32PhyAddr 码流buffer的物理地址 pUserAddr 码流buffer的虚拟地址 u64Reserved 预留,兼容32位和64位地址长度。(不可使用) u32BufSize 码流buffer的大小
3.20. MI_VENC_AttrH264_t¶
-
描述
定义H.264编码属性结构体。
-
定义
typedef struct MI_VENC_AttrH264_s { MI_U32 u32MaxPicWidth; MI_U32 u32MaxPicHeight; MI_U32 u32BufSize; MI_U32 u32Profile; MI_BOOL bByFrame; MI_U32 u32PicWidth; MI_U32 u32PicHeight; MI_U32 u32BFrameNum; MI_U32 u32RefNum; }MI_VENC_AttrH264_t;
-
成员
成员名称 描述 u32MaxPicWidth 编码图像最大宽度。
取值范围:[MIN_WIDTH,MAX_WIDTH],以像素为单位。必须是MIN_ALIGN的整数倍。
静态属性。u32PicWidth 编码图像宽度
取值范围:[MIN_WIDTH,u32MaxPicWidth],以像素为单位。 必须是MIN_ALIGN的整数倍。
动态属性。u32MaxPicHeight 编码图像最大高度。取值范围:[MIN_HEIGHT,MAX_HEIGHT],以像素为单位。必须是MIN_ALIGN的整数倍
静态属性。u32PicHeight 编码图像高度
取值范围:[MIN_HEIGHT,u32MaxPicHeight],以像素为单位。 必须是MIN_ALIGN的整数倍
动态属性。u32BufSize 码流buffer大小。
取值范围:[Min,Max],以byte为单位。
推荐值:一幅最大编码图像大小。推荐值为u32MaxPicWidth x u32MaxPicHeight x 1.5byte。
Min:一幅最大编码图像大小的½。
Max:无限制,但是会消耗更多的内存。
静态属性。bByFrame 帧/包模式获取码流。取值范围:{TRUE,FALSE}。
TRUE:按帧获取。
FALSE:按包获取。
静态属性。u32Profile 编码的等级。取值范围:[0,2]。0:Baseline。1:MainProfile。2:HighProfile。
动态属性。u32BFrameNum 编码支持B帧的个数。
取值范围:[0,Max]。
Max:无限制。
静态属性,保留字段,暂不支持。u32RefNum 编码支持参考帧的个数。
取值范围:[1,2]。
静态属性,保留字段,暂不支持。
3.21. MI_VENC_AttrJpeg_t¶
-
描述
定义JPEG抓拍属性结构体。
-
定义
typedef struct MI_VENC_AttrJpeg_s { MI_U32 u32MaxPicWidth; MI_U32 u32MaxPicHeight; MI_U32 u32BufSize; MI_BOOL bByFrame; MI_U32 u32PicWidth; MI_U32 u32PicHeight; MI_BOOL bSupportDCF; MI_U32 u32RestartMakerPerRowCnt; }MI_VENC_AttrJpeg_t;
-
成员
成员名称 描述 u32MaxPicWidth 编码图像最大宽度
取值范围:[MIN_WIDTH,MAX_WIDTH],以像素为单位。 必须是MIN_ALIGN的整数倍。
静态属性。u32PicWidth 编码图像宽度。
取值范围:[MIN_WIDTH,u32MaxPicWidth],以像素为单位。 必须是MIN_ALIGN的整数倍。
动态属性。u32MaxPicHeight 编码图像最大高度。
取值范围:[MIN_HEIGHT,MAX_HEIGHT],以像素为单位。 必须是MIN_ALIGN的整数倍
静态属性。u32PicHeight 编码图像高度。
取值范围:[MIN_HEIGHT,u32MaxPicHeight],以像素为单位。 必须是MIN_ALIGN的整数倍
动态属性。u32BufSize 码流buffer大小。
取值范围:[Min,Max],以byte为单位。
推荐值:一幅最大编码图像大小。推荐值为u32MaxPicWidth x u32MaxPicHeight x 1.5byte。
Min:一幅最大编码图像大小的½。
Max:无限制,但是会消耗更多的内存。
静态属性。bByFrame 获取码流模式,帧或包。
取值范围:{TRUE,FALSE}。
TRUE:按帧获取。
FALSE:按包获取。
静态属性。bSupportDCF 是否支持Jpeg的缩略图。
静态属性。u32RestartMakerPerRowCnt 每隔一定行数就重新开始一个marker。
3.22. MI_VENC_AttrH265_t¶
-
描述
定义H.265编码属性结构体。
-
定义
typedef struct MI_VENC_AttrH265_s { MI_U32 u32MaxPicWidth; MI_U32 u32MaxPicHeight; MI_U32 u32BufSize; MI_U32 u32Profile; MI_BOOL bByFrame; MI_U32 u32PicWidth; MI_U32 u32PicHeight; MI_U32 u32BFrameNum; MI_U32 u32RefNum; }MI_VENC_AttrH265_t;
-
成员
成员名称 描述 u32MaxPicWidth 编码图像最大宽度。
取值范围:[MIN_WIDTH,MAX_WIDTH],以像素为单位。必须是MIN_ALIGN的整数倍。
静态属性。u32PicWidth 编码图像宽度。
取值范围:[MIN_WIDTH,u32MaxPicWidth],以像素为单位。 必须是MIN_ALIGN的整数倍。
动态属性。u32MaxPicHeight 编码图像最大高度。
取值范围:[MIN_HEIGHT,MAX_HEIGHT],以像素为单位。必须是MIN_ALIGN的整数倍
静态属性。u32PicHeight 编码图像高度。
取值范围:[MIN_HEIGHT,u32MaxPicHeight],以像素为单位。 必须是MIN_ALIGN的整数倍
动态属性。u32BufSize 码流buffer大小。
取值范围:[Min,Max],以byte为单位。
推荐值:一幅最大编码图像大小。推荐值为u32MaxPicWidth x u32MaxPicHeight x 1.5byte。
Min:一幅最大编码图像大小的½。
Max:无限制,但是会消耗更多的内存。
静态属性。bByFrame 帧/包模式获取码流。取值范围:{TRUE,FALSE}。
TRUE:按帧获取。
FALSE:按包获取。
静态属性。u32Profile 编码的等级。
取值范围:0。
0:MainProfile。
动态属性。u32BFrameNum 编码支持B帧的个数。取值范围:[0,Max]。Max:无限制。静态属性,保留字段,暂不支持。 u32RefNum 编码支持参考帧的个数。
取值范围:[1,2]。
静态属性,保留字段,暂不支持。
3.23. MI_VENC_Attr_t¶
-
描述
定义编码器属性结构体。
-
定义
typedef struct MI_VENC_Attr_s { MI_VENC_ModType_e eType; union { MI_VENC_AttrH264_t stAttrH264e; MI_VENC_AttrJpeg_t stAttrJpeg; MI_VENC_AttrH265_t stAttrH265e; MI_VENC_AttrAv1_t stAttrAv1; }; }MI_VENC_Attr_t;
-
成员
成员名称 描述 eType 编码协议类型 stAttrH264e/stAttrJpeg/stAttrH265e/stAttrAv1 某种协议的编码器属性 -
相关数据类型及接口
3.24. MI_VENC_ChnAttr_t¶
-
描述
定义编码通道属性结构体。
-
定义
typedef struct MI_VENC_ChnAttr_s { MI_VENC_Attr_t stVeAttr; MI_VENC_RcAttr_t stRcAttr; }MI_VENC_ChnAttr_t;
-
成员
成员名称 描述 stVeAttr 编码器属性 stRcAttr 码率控制器属性 -
相关数据类型及接口
3.25. MI_VENC_ChnStat_t¶
-
描述
定义编码通道的状态结构体。
-
定义
typedef struct MI_VENC_CHN Stat_s { MI_U32 u32LeftPics; MI_U32 u32LeftStreamBytes; MI_U32 u32LeftStreamFrames; MI_U32 u32LeftStreamMillisec; MI_U32 u32CurPacks; MI_U32 u32LeftRecvPics; MI_U32 u32LeftEncPics; MI_U32 u32FrmRateNum; MI_U32 u32FrmRateDen; MI_U32 u32Bitrate; }MI_VENC_ChnStat_t;
-
成员
成员名称 描述 u32LeftPics 待编码的图像数 u32LeftStreamBytes 表示码流buffer中所有未读取数据的byte数 u32LeftStreamFrames 表示码流buffer中还未读取的帧数 u32LeftStreamMillisec 表示码流buffer中还未读取的帧数总时长,单位为ms u32CurPacks 当前待取帧的码流包个数 u32LeftRecvPics 剩余待接收的帧数,在用户设置 MI_VENC_StartRecvPicEx后有效 u32LeftEncPics 剩余待编码的帧数,在用户设置 MI_VENC_StartRecvPicEx后有效 u32FrmRateNum 最近1s内统计的帧率分子,以整数为单位 u32FrmRateDen 最近1s内统计的帧率分母,以整数为单位 u32Bitrate 最近1s内统计的码率,单位为kbps -
相关数据类型及接口
3.26. MI_VENC_ParamH264SliceSplit_t¶
-
描述
定义H.264协议编码通道SLICE分割结构体。
-
定义
typedef struct MI_VENC_ParamH264SliceSplit_s { MI_BOOL bSplitEnable; MI_U32 u32SliceRowCount; }MI_VENC_ParamH264SliceSplit_t;
-
成员
成员名称 描述 bSplitEnable Slice分割是否使能 u32SliceRowCount 表示每个slice占的宏块行数。
最小值为:1,最大值为:(图像高+31)/32 -
相关数据类型及接口
3.27. MI_VENC_ParamH265SliceSplit_t¶
-
描述
定义H.265协议编码通道SLICE分割结构体。
-
定义
typedef struct MI_VENC_ParamH265SliceSplit_s { MI_BOOL bSplitEnable; MI_U32 u32SliceRowCount; }MI_VENC_ParamH265SliceSplit_t;
-
成员
成员名称 描述 bSplitEnable Slice分割是否使能 u32SliceRowCount 表示每个slice占的宏块行数
最小值为:1,最大值为:图像高\+15/16 -
相关数据类型及接口
3.28. MI_VENC_ParamH264Trans_t¶
-
描述
定义H.264协议编码通道变换、量化结构体。
-
定义
typedef struct MI_VENC_ParamH264Trans_s { MI_U32 u32IntraTransMode; MI_U32 u32InterTransMode; MI_S32 s32ChromaQpIndexOffset; }MI_VENC_ParamH264Trans_t;
-
成员
成员名称 描述 u32IntraTransMode 帧内预测的变换模式: 保留接口,目前暂未支持。 u32InterTransMode 帧间预测的变换模式: 保留接口,目前暂未支持。 s32ChromaQpIndexOffset 具体含义请参见H.264协议关于slice_qp_offset_index的解释。系统默认值为0。
取值范围:[-12,12]。 -
相关数据类型及接口
3.29. MI_VENC_ParamH264Entropy_t¶
-
描述
定义H.264协议编码通道熵编码结构体。
-
定义
typedef struct MI_VENC_ParamH264Entropy_s { MI_U32 u32EntropyEncModeI; MI_U32 u32EntropyEncModeP; }MI_VENC_ParamH264Entropy_t;
-
成员
成员名称 描述 u32EntropyEncModeI I帧熵编码模式
0:cavlc
1:cabac
>=2没有意义
Baseline不支持cabac。u32EntropyEncModeP P帧熵编码模式。
0:cavlc
1:cabac
>=2没有意义
Baseline不支持cabac。 -
相关数据类型及接口
3.30. MI_VENC_ParamH265Trans_t¶
-
描述
定义H.265协议编码通道变换、量化结构体。
-
定义
typedef struct MI_VENC_ParamH265Trans_s { MI_U32 u32IntraTransMode; MI_U32 u32InterTransMode; MI_S32 s32ChromaQpIndexOffset; }MI_VENC_ParamH265Trans_t;
-
成员
成员名称 描述 u32IntraTransMode 帧内预测的变换模式: 保留接口,目前暂未支持。 u32InterTransMode 帧间预测的变换模式: 保留接口,目前暂未支持。 s32ChromaQpIndexOffset 具体含义请参见H.265协议关于slice_cb_qp_offset和slice_cr_qp_offset的解释。系统默认值为0。
取值范围:[-12,12]。 -
相关数据类型及接口
3.31. MI_VENC_ParamH264Dblk_t¶
-
描述
定义H.264协议编码通道Dblk结构体。
-
定义
typedef struct MI_VENC_ParamH264Dblk_s { MI_U32 disable_deblocking_filter_idc; MI_S32 slice_alpha_c0_offset_div2; MI_S32 slice_beta_offset_div2; }MI_VENC_ParamH264Dblk_t;
-
成员
成员名称 描述 disable_deblocking_filter_idc 取值范围[0,2],默认值0,具体含义请参见H.264协议 slice_alpha_c0_offset_div2 取值范围[-6,6],默认值0,具体含义请参见H.264协议 slice_beta_offset_div2 取值范围[-6,6],默认值0,具体含义请参见H.264协议 -
相关数据类型及接口
3.32. MI_VENC_ParamH265Dblk_t¶
-
描述
定义H.265协议编码通道Dblk结构体。
-
定义
typedef struct MI_VENC_ParamH265Dblk_s { MI_U32 disable_deblocking_filter_idc; //special naming for CODEC ISO SPEC. MI_S32 slice_tc_offset_div2; //special naming for CODEC ISO SPEC. MI_S32 slice_beta_offset_div2; //special naming for CODEC ISO SPEC. } MI_VENC_ParamH265Dblk_t;
-
成员
成员名称 描述 disable_deblocking_filter_idc 取值范围[0,2],默认值0,具体含义请参见H.265协议关于slice_deblocking_filter_disabled_flag的解释 slice_tc_offset_div2 取值范围[-6,6],默认值0,具体含义请参见H.265协议 slice_beta_offset_div2 取值范围[-6,6],默认值0,具体含义请参见H.265协议 -
相关数据类型及接口
3.33. MI_VENC_ParamH264Vui_t¶
-
描述
定义H.264协议编码通道VUI结构体。
-
定义
typedef struct MI_VENC_ParamH264Vui_s { MI_VENC_ParamH264VuiAspectRatio_t stVuiAspectRatio; MI_VENC_ParamH264VuiTimeInfo_t stVuiTimeInfo; MI_VENC_ParamH264VuiVideoSignal_t stVuiVdeoSignal; }MI_VENC_ParamH264Vui_t;
-
成员
成员名称 描述 stVuiAspectRatio 具体含义请参见H.264协议中Annex E Video usablility information的介绍 stVuiTimeInfo 具体含义请参见H.264协议中Annex E Video usablility information的介绍 stVuiVideoSignal 具体含义请参见H.264协议中Annex E Video usablility information的介绍 -
相关数据类型及接口
3.34. MI_VENC_ParamH264VuiAspectRatio_t¶
-
描述
定义H.264协议编码通道VUI中AspectRatio信息的结构体。
-
定义
typedef struct MI_VENC_ParamH264VuiAspectRatio_s { MI_U8 u8AspectRatioInfoPresentFlag; MI_U8 u8AspectRatioIdc; MI_U8 u8OverscanInfoPresentFlag; MI_U8 u8OverscanAppropriateFlag; MI_U16 u16SarWidth; MI_U16 u16SarHeight; }MI_VENC_ParamH264VuiAspectRatio_t;
-
成员
成员名称 描述 u8AspectRatioInfoPresentFlag 具体含义请参见H.264协议中Annex E Video usablility information的介绍,系统默认为0。
取值范围:0或1u8AspectRatioIdc 具体含义请参见H.264协议中Annex E Video usablility information的介绍,系统默认为1。
取值范围:[0,255],17~254保留u8OverscanInfoPresentFlag 具体含义请参见H.264协议中Annex E Video usablility information的介绍,系统默认为0。
取值范围:0或1u8OverscanAppropriateFlag 具体含义请参见H.264协议中Annex E Video usablility information的介绍,系统默认为0。
取值范围:0或1u16SarWidth 具体含义请参见H.264协议中Annex E Video usablility information的介绍,系统默认为1。
取值范围:(0,65535],并且与u16SarHeight互质u16SarHeight 具体含义请参见H.264协议中Annex E Video usablility information的介绍,系统默认为1。
取值范围:(0,65535],并且与u16SarWidth互质 -
相关数据类型及接口
3.35. MI_VENC_ParamH264VuiTimeInfo_t¶
-
描述
定义H.264协议编码通道VUI中TIME_INFO信息的结构体。
-
定义
typedef struct MI_VENC_ParamH264VuiTimeInfo_s { MI_U8 u8TimingInfoPresentFlag; MI_U8 u8FixedFrameRateFlag; MI_U32 u32NumUnitsInTick; MI_U32 u32TimeScale; }MI_VENC_ParamH264VuiTimeInfo_t;
-
成员
成员名称 描述 u8TimingInfoPresentFlag 具体含义请参见H.264协议中Annex E Video usablility information的介绍,系统默认为0。
取值范围:0或1。u32NumUnitsInTick 具体含义请参见H.264协议中Annex E Video usablility information的介绍,系统默认为1。
取值范围:大于0。u32TimeScale 具体含义请参见H.264协议中Annex E Video usablility information的介绍,系统默认为60。
取值范围:大于0。u8FixedFrameRateFlag; 具体含义请参见H.264协议中Annex E Video usablility information的介绍,系统默认为1。
取值范围:0或1。 -
相关数据类型及接口
3.36. MI_VENC_ParamH264VuiVideoSignal_t¶
-
描述
定义H.264协议编码通道VUI中VIDEO_SIGNAL信息的结构体。
-
定义
typedef struct MI_VENC_ParamVuiVideoSignal_s { MI_U8 u8VideoSignalTypePresentFlag; MI_U8 u8VideoFormat; MI_U8 u8VideoFullRangeFlag; MI_U8 u8ColourDescriptionPresentFlag; MI_U8 u8ColourPrimaries; MI_U8 u8TransferCharacteristics; MI_U8 u8MatrixCoefficients; }MI_VENC_ParamH264VuiVideoSignal_t;
-
成员
成员名称 描述 u8VideoSignalTypePresentFlag 具体含义请参见H.264协议中Annex E Video usablility information的介绍,系统默认为1。取值范围:0或1。 u8VideoFormat 具体含义请参见H.264协议中Annex E Video usablility information的介绍,系统默认为5。取值范围:[0,7]。 u8VideoFullRangeFlag 具体含义请参见H.264协议中Annex E Video usablility information的介绍,系统默认为1。取值范围:0或1。 u8ColourDescriptionPresentFlag; 具体含义请参见H.264协议中Annex E Video usablility information的介绍,系统默认为1。取值范围:0或1。 u8ColourPrimaries 具体含义请参见H.264协议中Annex E Video usablility information的介绍,系统默认为1。取值范围:[0,255]。 u8TransferCharacteristics 具体含义请参见H.264协议中Annex E Video usablility information的介绍,系统默认为1。取值范围:[0,255]。 u8MatrixCoefficients 具体含义请参见H.264协议中Annex E Video usablility information的介绍,系统默认为1。取值范围:[0,255]。 -
相关数据类型及接口
3.37. MI_VENC_ParamH265Vui_t¶
-
描述
定义H.265协议编码通道VUI结构体。
-定义
typedef struct MI_VENC_ParamH265Vui_s { MI_VENC_ParamH265VuiAspectRatio_t stVuiAspectRatio; MI_VENC_ParamH265VuiTimeInfo_t stVuiTimeInfo; MI_VENC_ParamH265VuiVideoSignal_t stVuiVdeoSignal; }MI_VENC_ParamH265Vui_t;
-
成员
成员名称 描述 stVuiAspectRatio 具体含义请参见H.265协议中Annex E Video usablility information的介绍。 stVuiTimeInfo 具体含义请参见H.265协议中Annex E Video usablility information的介绍。 stVuiVideoSignal 具体含义请参见H.265协议中Annex E Video usablility information的介绍。 -
相关数据类型及接口
3.38. MI_VENC_ParamH265VuiAspectRatio_t¶
-
描述
定义H.265协议编码通道VUI中AspectRatio信息的结构体。
-
定义
typedef struct MI_VENC_ParamH265VuiAspectRatio_s { MI_U8 u8AspectRatioInfoPresentFlag; MI_U8 u8AspectRatioIdc; MI_U8 u8OverscanInfoPresentFlag; MI_U8 u8OverscanAppropriateFlag; MI_U16 u16SarWidth; MI_U16 u16SarHeight; }MI_VENC_ParamH265VuiAspectRatio_t;
-
成员
成员名称 描述 u8AspectRatioInfoPresentFlag 具体含义请参见H.265协议中Annex E Video usablility information的介绍,系统默认为0。取值范围:0或1。 u8AspectRatioIdc 具体含义请参见H.265协议中Annex E Video usablility information的介绍,系统默认为1。取值范围:[0,255],17~254保留。 u8OverscanInfoPresentFlag 具体含义请参见H.265协议中Annex E Video usablility information的介绍,系统默认为0。取值范围:0或1。 u8OverscanAppropriateFlag 具体含义请参见H.265协议中Annex E Video usablility information的介绍,系统默认为0。取值范围:0或1。 u16SarWidth 具体含义请参见H.265协议中Annex E Video usablility information的介绍,系统默认为1。取值范围:(0,65535],并且与u16SarHeight互质。 u16SarHeight 具体含义请参见H.265协议中Annex E Video usablility information的介绍,系统默认为1。取值范围:(0,65535],并且与u16SarWidth互质。 -
相关数据类型及接口
3.39. MI_VENC_ParamH265VuiTimeInfo_t¶
-
描述
定义H.265协议编码通道VUI中TIME_INFO信息的结构体。
-
定义
typedef struct MI_VENC_ParamH265VuiTimeInfo_s { MI_U8 u8TimingInfoPresentFlag; //MI_U8 u8FixedFrameRateFlag; MI_U32 u32NumUnitsInTick; MI_U32 u32TimeScale; }MI_VENC_ParamH265VuiTimeInfo_t;
-
成员
成员名称 描述 u8TimingInfoPresentFlag 具体含义请参见H.265协议中Annex E Video usablility information的介绍,系统默认为0。取值范围:0或1。 u32NumUnitsInTick 具体含义请参见H.265协议中Annex E Video usablility information的介绍,系统默认为1。取值范围:大于0。 u32TimeScale 具体含义请参见H.265协议中Annex E Video usablility information的介绍,系统默认为60。取值范围:大于0。 u8FixedFrameRateFlag; 具体含义请参见H.265协议中Annex E Video usablility information的介绍,系统默认为1。取值范围:0或1。 -
相关数据类型及接口
3.40. MI_VENC_ParamH265VuiVideoSignal_t¶
-
描述
定义H.265协议编码通道VUI中VIDEO_SIGNAL信息的结构体。
-
定义
typedef struct MI_VENC_ParamVuiVideoSignal_s { MI_U8 u8VideoSignalTypePresentFlag; MI_U8 u8VideoFormat; MI_U8 u8VideoFullRangeFlag; MI_U8 u8ColourDescriptionPresentFlag; MI_U8 u8ColourPrimaries; MI_U8 u8TransferCharacteristics; MI_U8 u8MatrixCoefficients; }MI_VENC_ParamH265VuiVideoSignal_t;
-
成员
成员名称 描述 u8VideoSignalTypePresentFlag 具体含义请参见H.265协议中Annex E Video usablility information的介绍,系统默认为1。取值范围:0或1。 u8VideoFormat 具体含义请参见H.265协议中Annex E Video usablility information的介绍,系统默认为5。取值范围:[0,7]。 u8VideoFullRangeFlag 具体含义请参见H.265协议中Annex E Video usablility information的介绍,系统默认为1。取值范围:0或1。 u8ColourDescriptionPresentFlag; 具体含义请参见H.265协议中Annex E Video usablility information的介绍,系统默认为1。取值范围:0或1。 u8ColourPrimaries 具体含义请参见H.265协议中Annex E Video usablility information的介绍,系统默认为1。取值范围:[0,255]。 u8TransferCharacteristics 具体含义请参见H.265协议中Annex E Video usablility information的介绍,系统默认为1。取值范围:[0,255]。 u8MatrixCoefficients 具体含义请参见H.265协议中Annex E Video usablility information的介绍,系统默认为1。取值范围:[0,255]。 -
相关数据类型及接口
3.41. MI_VENC_ParamJpeg_t¶
-
描述
定义JPEG协议编码通道高级参数结构体。
-
定义
typedef struct MI_VENC_ParamJpeg_s { MI_U32 u32Qfactor; MI_U8 au8YQt[64]; MI_U8 au8CbCrQt[64]; MI_U32 u32McuPerEcs; } MI_VENC_ParamJpeg_t;
-
成员
成员名称 描述 u32Qfactor 具体含义请参见RFC2435协议,系统默认为70。
取值范围:[1,90]au8YQt Y量化表。
取值范围:[1,255]au8CbCrQt CbCr量化表。
取值范围:[1,255]u32MCUPerEcs 每个ECS中包含多少个MCU,系统默认为0,表示不划分Ecs
u32MCUPerECS:[0,picwidth\+15>>4xpicheight\+15>>4x2],暂不支持。 -
相关数据类型及接口
3.42. MI_VENC_RoiCfg_t¶
-
描述
定义编码感兴趣区域信息。
-
定义
typedef struct MI_VENC_RoiCfg_s { MI_U32 u32Index; MI_BOOL bEnable; MI_BOOL bAbsQp; MI_S32 s32Qp; MI_VENC_Rect_t stRect; }MI_VENC_RoiCfg_t;
-
成员
成员名称 描述 u32Index ROI区域的索引,若平台最大支持8个ROI区域,则系统支持的索引范围为[0,7],若平台最大支持16个ROI区域,则系统支持的索引范围为[0,15],不支持超出这个范围的索引。 bEnable 是否使能这个ROI区域 bAbsQp ROI区域QP模式
FALSE:相对QP
TRUE:绝对QPs32Qp QP值,当QP模式为MI_FALSE时,s32Qp为宏块QP偏移,当QP模式为TRUE时,s32Qp为宏块QP值 stRect ROI区域 -
注意
- 从Pudding开始,ROI区域的QP模式仅支持相对QP(bAbsQp = MI_FALSE);同时,s32Qp值的可支持范围修改为[-32,31]。
- 从Souffle开始,ROI区域恢复支持绝对QP(bAbsQp = MI_TRUE),s32Qp值的可支持范围修改为[12,48];但是不支持同时生效相对QP与绝对QP。
-
相关数据类型及接口
3.43. MI_VENC_RoiBgFrameRate_t¶
-
描述
定义非编码感兴趣区域帧率。
-
定义
typedef struct MI_VENC_RoiBgFrameRate_s { MI_S32 s32SrcFrmRate; MI_S32 s32DstFrmRate; }MI_VENC_RoiBgFrameRate_t;
-
成员
成员名称 描述 s32SrcFrmRate 非ROI区域的源帧率 s32DstFrmRate 非ROI区域的目标帧率 -
相关数据类型及接口
3.44. MI_VENC_ParamRef_t¶
-
描述
定义H.264/H.265/AV1编码的高级跳帧参考参数。
-
定义
typedef struct MI_VENC_ParamRef_s { MI_U32 u32Base; MI_U32 u32Enhance; MI_BOOL bEnablePred; }MI_VENC_ParamRef_t;
-
成员
成员名称 描述 u32Base base层的周期。取值范围:(0,+∞) u32Enhance enhance层的周期。取值范围:[0,255] bEnablePred 代表base层的帧是否被base层其他帧用作参考。当为 MI_FALSE时,base层的所有帧都参考IDR帧。 -
相关数据类型及接口
3.45. MI_VENC_RcAttr_t¶
-
描述
定义编码通道码率控制器属性。
-
定义
typedef struct MI_VENC_RcAttr_s { MI_VENC_RcMode_e eRcMode; union { MI_VENC_AttrH264Cbr_t stAttrH264Cbr; MI_VENC_AttrH264Vbr_t stAttrH264Vbr; MI_VENC_AttrH264FixQp_t stAttrH264FixQp; MI_VENC_AttrH264Avbr_t stAttrH264Avbr; MI_VENC_AttrH264Ubr_t stAttrH264Ubr; MI_VENC_AttrH265Cbr_t stAttrH265Cbr; MI_VENC_AttrH265Vbr_t stAttrH265Vbr; MI_VENC_AttrH265FixQp_t stAttrH265FixQp; MI_VENC_AttrH265Avbr_t stAttrH265Avbr; MI_VENC_AttrH265Ubr_t stAttrH265Ubr; MI_VENC_AttrAv1Cbr_t stAttrAv1Cbr; MI_VENC_AttrAv1Vbr_t stAttrAv1Vbr; MI_VENC_AttrAv1FixQp_t stAttrAv1FixQp; MI_VENC_AttrAv1Avbr_t stAttrAv1Avbr; MI_VENC_AttrAv1Ubr_t stAttrAv1Ubr; MI_VENC_AttrMjpegCbr_t stAttrMjpegCbr; MI_VENC_AttrMjpegVbr_t stAttrMjpegVbr; MI_VENC_AttrMjpegFixQp_t stAttrMjpegFixQp; MI_VENC_AttrCbr_t stAttrCbr; MI_VENC_AttrVbr_t stAttrVbr; MI_VENC_AttrFixQp_t stAttrFixQp; MI_VENC_AttrAvbr_t stAttrAvbr; MI_VENC_AttrUbr_t stAttrUbr; MI_VENC_AttrCvbr_t stAttrCvbr; }; }MI_VENC_RcAttr_t;
-
成员
成员名称 描述 enRcMode RC模式 stAttrH264Cbr H.264协议编码通道Cbr模式属性 stAttrH264Vbr H.264协议编码通道Vbr模式属性 stAttrH264FixQp H.264协议编码通道Fixqp模式属性 stAttrH264Avbr H.264协议编码通道Avbr模式属性 stAttrH264Ubr H.264协议编码通道Ubr模式属性 stAttrH265Cbr H.265协议编码通道Cbr模式属性 stAttrH265Vbr H.265协议编码通道Vbr模式属性 stAttrH265FixQp H.265协议编码通道Fixqp模式属性 stAttrH265Avbr H.265协议编码通道Avbr模式属性 stAttrH265Ubr H.265协议编码通道Ubr模式属性 stAttrAv1Cbr AV1协议编码通道Cbr模式属性 stAttrAv1Vbr AV1协议编码通道Vbr模式属性 stAttrAv1FixQp AV1协议编码通道Fixqp模式属性 stAttrAv1Avbr AV1协议编码通道Avbr模式属性 stAttrAv1Ubr AV1协议编码通道Ubr模式属性 stAttrMjpegCbr JPEG协议编码通道Cbr模式属性。 stAttrMjpegVbr JPEG协议编码通道Vbr模式属性。 stAttrMjpegFixQp JPEG协议编码通道Fixqp模式属性。 stAttrCbr H.264/H.265/AV1协议编码通道Cbr模式属性 stAttrVbr H.264/H.265/AV1协议编码通道Vbr模式属性 stAttrFixQp H.264/H.265/AV1协议编码通道FixQp模式属性 stAttrAvbr H.264/H.265/AV1协议编码通道Avbr模式属性 stAttrUbr H.264/H.265/AV1协议编码通道Ubr模式属性 stAttrCvbr H.264/H.265/AV1协议编码通道Cvbr模式属性 -
注意
- 从节省代码量的角度,建议H.264/H.265/AV1格式优先使用stAttrCbr/stAttrVbr/stAttrFixQp/...等通用成员。
-
相关数据类型及接口
3.46. MI_VENC_RcMode_e¶
-
描述
定义编码通道码率控制器模式。
-
定义
typedef enum { E_MI_VENC_RC_MODE_H264CBR = 1, E_MI_VENC_RC_MODE_H264VBR, E_MI_VENC_RC_MODE_H264FIXQP, E_MI_VENC_RC_MODE_H264AVBR, E_MI_VENC_RC_MODE_H264UBR, E_MI_VENC_RC_MODE_MJPEGCBR, E_MI_VENC_RC_MODE_MJPEGVBR, E_MI_VENC_RC_MODE_MJPEGFIXQP, E_MI_VENC_RC_MODE_H265CBR, E_MI_VENC_RC_MODE_H265VBR, E_MI_VENC_RC_MODE_H265FIXQP, E_MI_VENC_RC_MODE_H265AVBR, E_MI_VENC_RC_MODE_H265UBR, E_MI_VENC_RC_MODE_AV1CBR, E_MI_VENC_RC_MODE_AV1VBR, E_MI_VENC_RC_MODE_AV1FIXQP, E_MI_VENC_RC_MODE_AV1AVBR, E_MI_VENC_RC_MODE_AV1UBR, E_MI_VENC_RC_MODE_CBR, E_MI_VENC_RC_MODE_VBR, E_MI_VENC_RC_MODE_AVBR, E_MI_VENC_RC_MODE_UBR, E_MI_VENC_RC_MODE_CVBR, E_MI_VENC_RC_MODE_FIXQP, E_MI_VENC_RC_MODE_MAX, }MI_VENC_RcMode_e;
-
成员
成员名称 描述 E_MI_VENC_RC_MODE_H264CBR H.264 CBR模式 E_MI_VENC_RC_MODE_H264VBR H.264 VBR模式 E_MI_VENC_RC_MODE_H264FIXQP H.264 FixQp模式 E_MI_VENC_RC_MODE_H264AVBR H.264 AVBR模式 E_MI_VENC_RC_MODE_H264UBR H.264 UBR模式 E_MI_VENC_RC_MODE_MJPEGCBR MJPEG CBR模式 E_MI_VENC_RC_MODE_MJPEGVBR MJPEG VBR模式 E_MI_VENC_RC_MODE_MJPEGFIXQP MJPEG FixQp模式 E_MI_VENC_RC_MODE_H265CBR H.265 CBR模式 E_MI_VENC_RC_MODE_H265VBR H.265 VBR模式 E_MI_VENC_RC_MODE_H265FIXQP H.265 FixQp模式 E_MI_VENC_RC_MODE_H265AVBR H.265 AVBR模式 E_MI_VENC_RC_MODE_H265UBR H.265 UBR模式 E_MI_VENC_RC_MODE_AV1CBR AV1 CBR模式 E_MI_VENC_RC_MODE_AV1VBR AV1 VBR模式 E_MI_VENC_RC_MODE_AV1FIXQP AV1 FixQp模式 E_MI_VENC_RC_MODE_AV1AVBR AV1 AVBR模式 E_MI_VENC_RC_MODE_AV1UBR AV1 UBR模式 E_MI_VENC_RC_MODE_CBR H.264/H.265/AV1 CBR模式 E_MI_VENC_RC_MODE_VBR H.264/H.265/AV1 VBR模式 E_MI_VENC_RC_MODE_AVBR H.264/H.265/AV1 AVBR模式 E_MI_VENC_RC_MODE_UBR H.264/H.265/AV1 UBR模式 E_MI_VENC_RC_MODE_FIXQP H.264/H.265/AV1 FIXQP模式 E_MI_VENC_RC_MODE_CVBR H.264/H.265/AV1 CVBR模式 -
注意
- 从节省代码量的角度,建议H.264/H.265/AV1格式优先使用E_MI_VENC_RC_MODE_CBR/E_MI_VENC_RC_MODE_VBR/E_MI_VENC_RC_MODE_AVBR/...等通用模式。
-
相关数据类型及接口
3.47. MI_VENC_AttrH264Cbr_t¶
-
描述
定义H.264编码通道CBR属性结构。
-
定义
typedef MI_VENC_AttrCbr_t MI_VENC_AttrH264Cbr_t;
-
成员
详情请参考MI_VENC_AttrCbr_t。
-
注意
详情请参考MI_VENC_AttrCbr_t。
-
相关数据类型及接口
3.48. MI_VENC_AttrH264Vbr_t¶
-
描述
定义H.264编码通道VBR属性结构。
-
定义
typedef MI_VENC_AttrVbr_t MI_VENC_AttrH264Vbr_t;
-
成员
详情请参考MI_VENC_AttrVbr_t。
-
注意
详情请参考MI_VENC_AttrVbr_t。
-
相关数据类型及接口
3.49. MI_VENC_AttrH264FixQp_t¶
-
描述
定义H.264编码通道Fixqp属性结构。
-
定义
typedef MI_VENC_AttrFixQp_t MI_VENC_AttrH264FixQp_t;
-
成员
详情请参考MI_VENC_AttrFixQp_t。
-
注意
详情请参考MI_VENC_AttrFixQp_t。
-
相关数据类型及接口
3.50. MI_VENC_AttrH264Avbr_t¶
-
描述
定义H.264编码通道AVBR属性结构。
-
定义
typedef MI_VENC_AttrAvbr_t MI_VENC_AttrH264Avbr_t;
-
成员
详情请参考MI_VENC_AttrAvbr_t。
-
注意
详情请参考MI_VENC_AttrAvbr_t。
-
相关数据类型及接口
3.51. MI_VENC_AttrMjpegCbr_t¶
-
描述
定义MJPEG编码通道CBR属性结构。
-
定义
typedef struct MI_VENC_AttrMjpegCbr_s { MI_U32 u32BitRate; MI_U32 u32SrcFrmRateNum; MI_U32 u32SrcFrmRateDen; } MI_VENC_AttrMjpegCbr_t;
-
成员
成员名称 描述 u32BitRate 码率,以bps为单位
取值范围[2000, 102400000]u32SrcFrmRateNum 编码器帧率分子,以整数为单位。 u32SrcFrmRateDen 编码器帧率分母,以整数为单位。 -
注意
请参见MI_VENC_AttrH264Cbr_t关于u32SrcFrmRateNum和u32SrcFrmRateDen的说明。
-
相关数据类型及接口
3.52. MI_VENC_AttrMjpegFixQp_t¶
-
描述
定义MJPEG编码通道FixQp属性结构。
-
定义
typedef struct MI_VENC_AttrMjpegFixQp_s { MI_U32 u32SrcFrmRateNum; MI_U32 u32SrcFrmRateDen; MI_U32 u32Qfactor; } MI_VENC_AttrMjpegFixQp_t;
-
成员
成员名称 描述 u32Qfactor Qfactor值,取值范围[1, 90] u32SrcFrmRateNum 编码器帧率分子,以整数为单位。 u32SrcFrmRateDen 编码器帧率分母,以整数为单位。 -
注意
请参见MI_VENC_AttrH264Cbr_t关于u32SrcFrmRateNum和u32SrcFrmRateDen的说明。
-
相关数据类型及接口
3.53. MI_VENC_AttrH265Cbr_t¶
-
描述
定义H.265编码通道CBR属性结构。
-
定义
typedef MI_VENC_AttrCbr_t MI_VENC_AttrH265Cbr_t;
-
成员
详情请参考MI_VENC_AttrCbr_t。
-
注意
详情请参考MI_VENC_AttrCbr_t。
-
相关数据类型及接口
3.54. MI_VENC_AttrH265Vbr_t¶
-
描述
定义H.265编码通道VBR属性结构。
-
定义
typedef MI_VENC_AttrVbr_t MI_VENC_AttrH265Vbr_t;
-
成员
详情请参考MI_VENC_AttrVbr_t。
-
注意
详情请参考MI_VENC_AttrVbr_t。
-
相关数据类型及接口
3.55. MI_VENC_AttrH265FixQp_t¶
-
描述
定义H.265编码通道Fixqp属性结构。
-
定义
typedef MI_VENC_AttrFixQp_t MI_VENC_AttrH265FixQp_t;
-
成员
详情请参考MI_VENC_AttrFixQp_t。
-
注意
详情请参考MI_VENC_AttrFixQp_t。
-
相关数据类型及接口
3.56. MI_VENC_AttrH265Avbr_t¶
-
描述
定义H.265编码通道AVBR属性结构。
-
定义
typedef MI_VENC_AttrAvbr_t MI_VENC_AttrH265Avbr_t;
-
成员
详情请参考MI_VENC_AttrAvbr_t。
-
注意
详情请参考MI_VENC_AttrAvbr_t。
-
相关数据类型及接口
3.57. MI_VENC_SuperFrmMode_e¶
-
描述
定义码率控制中超大帧处理模式。
-
定义
typedef enum { E_MI_VENC_SUPERFRM_NONE, E_MI_VENC_SUPERFRM_DISCARD, E_MI_VENC_SUPERFRM_REENCODE, E_MI_VENC_SUPERFRM_MAX }MI_VENC_SuperFrmMode_e;
-
成员
成员名称 描述 E_MI_VENC_SUPERFRM_NONE 无特殊策略 E_MI_VENC_SUPERFRM_DISCARD 丢弃超大帧 E_MI_VENC_SUPERFRM_REENCODE 重编超大帧 -
相关数据类型及接口
3.58. MI_VENC_ParamH264Vbr_t¶
-
描述
定义H264协议编码通道VBR码率控制模式高级参数配置。
-
定义
typedef MI_VENC_ParamVbr_t MI_VENC_ParamH264Vbr_t;
-
成员
详情请参考MI_VENC_ParamVbr_t。
-
相关数据类型及接口
3.59. MI_VENC_ParamH264Cbr_t¶
-
描述
定义H264协议编码通道CBR码率控制模式高级参数配置。
-
定义
typedef MI_VENC_ParamCbr_t MI_VENC_ParamH264Cbr_t;
-
成员
详情请参考MI_VENC_ParamCbr_t。
-
相关数据类型及接口
3.60. MI_VENC_ParamH264Avbr_t¶
-
说明
定义H264协议编码通道AVBR码率控制模式高级参数配置。
-
定义
typedef MI_VENC_ParamAvbr_t MI_VENC_ParamH264Avbr_t;
-
成员
详情请参考MI_VENC_ParamAvbr_t。
-
相关数据类型及接口
3.61. MI_VENC_ParamMjpegCbr_t¶
-
描述
定义MJPEG协议编码通道CBR码率控制模式高级参数配置。
-
定义
typedef struct MI_VENC_ParamMjpegCbr_s { MI_U32 u32MaxQfactor; MI_U32 u32MinQfactor; } MI_VENC_ParamMjpegCbr_t;
-
成员
成员名称 描述 u32MaxQfactor 帧最大Qfactor。用于控制图像质量
取值范围:(u32MinQfactor,90]。
默认值: 90u32MinQfactor 帧最小Qfactor。用于控制图像质量
取值范围:[1, u32MaxQfactor)。
默认值: 20 -
相关数据类型及接口
3.62. MI_VENC_ParamH265Vbr_t¶
-
描述
定义H265协议编码通道VBR码率控制模式高级参数配置。
-
定义
typedef MI_VENC_ParamVbr_t MI_VENC_ParamH265Vbr_t;
-
成员
详情请参考MI_VENC_ParamVbr_t。
-
相关数据类型及接口
3.63. MI_VENC_ParamH265Cbr_t¶
-
描述
定义H265协议编码通道CBR新版码率控制模式高级参数配置。
-
定义
typedef MI_VENC_ParamCbr_t MI_VENC_ParamH265Cbr_t;
-
成员
详情请参考MI_VENC_ParamCbr_t。
-
相关数据类型及接口
3.64. MI_VENC_ParamH265Avbr_t¶
-
描述
定义H265协议编码通道AVBR码率控制模式高级参数配置。
-
定义
typedef MI_VENC_ParamAvbr_t MI_VENC_ParamH265Avbr_t;
-
成员
详情请参考MI_VENC_ParamAvbr_t。
-
相关数据类型及接口
3.65. MI_VENC_RcParam_t¶
-
描述
定义编码通道的码率控制高级参数。
-
定义
typedef struct MI_VENC_RcParam_s { MI_U32 au32ThrdI[RC_TEXTURE_THR_SIZE]; MI_U32 au32ThrdP[RC_TEXTURE_THR_SIZE]; MI_U32 u32RowQpDelta; union { MI_VENC_ParamCbr_t stParamCbr; MI_VENC_ParamVbr_t stParamVBR; MI_VENC_ParamAvbr_t stParamAvbr; MI_VENC_ParamCvbr_t stParamCvbr; MI_VENC_ParamH264Cbr_t stParamH264Cbr; MI_VENC_ParamH264Vbr_t stParamH264VBR; MI_VENC_ParamH264Avbr_t stParamH264Avbr; MI_VENC_ParamMjpegCbr_t stParamMjpegCbr; MI_VENC_ParamMjpegVbr_t stParamMjpegVbr; MI_VENC_ParamH265Cbr_t stParamH265Cbr; MI_VENC_ParamH265Vbr_t stParamH265Vbr; MI_VENC_ParamH265Avbr_t stParamH265Avbr; MI_VENC_ParamAv1Cbr_t stParamAv1Cbr; MI_VENC_ParamAv1Vbr_t stParamAv1Vbr; MI_VENC_ParamAv1Avbr_t stParamAv1Avbr; }; }MI_VENC_RcParam_t;
-
成员
成员名称 描述 au32ThrdI I帧宏块级码率控制的mad门限。取值范围:[0,255]。暂不支持。 au32ThrdP P帧宏块级码率控制的mad门限。取值范围:[0,255]。暂不支持。 u32RowQpDelta 行级码率控制。取值范围:[0,10]。暂不支持。 stParamCbr H.264/H.265/AV1通道CBR(ConstantBitRate)码率控制模式高级参数。 stParamVBR H.264/H.265/AV1通道VBR(VariableBitRate)码率控制模式高级参数。 stParamAvbr H.264/H.265/AV1通道AVBR(AdaptiveVariableBitRate)码率控制模式高级参数。 stParamCvbr H.264/H.265/AV1通道CVBR(ConstrainedVariableBitRate)码率控制模式高级参数。 stParamH264Cbr H.264通道CBR(ConstantBitRate)码率控制模式高级参数。 stParamH264Vbr H.264通道VBR(VariableBitRate)码率控制模式高级参数。 stParamH264Avbr H.264通道AVBR(AdaptiveVariableBitRate)码率控制模式高级参数。 stParamMjpegCbr JPEG通道CBR(ConstantBitRate)码率控制模式高级参数。 stParamMjpegVbr JPEG通道VBR(VariableBitRate)码率控制模式高级参数。 stParamH265Cbr H.265通道CBR(ConstantBitRate)码率控制模式高级参数。 stParamH265Vbr H.265通道VBR(VariableBitRate)码率控制模式高级参数。 stParamH265Avbr H.265通道AVBR(AdaptiveVariableBitRate)码率控制模式高级参数。 -
注意
- 从节省代码量的角度,建议H.264/H.265/AV1格式优先使用stParamCbr/stParamVBR/stParamAvbr/...等通用参数。
-
相关数据类型及接口
3.66. MI_VENC_CropCfg_t¶
-
描述
定义通道截取(Crop)参数。
-
定义
typedef struct MI_VENC_CropCfg_s { MI_BOOL bEnable; /* Crop region enable */ MI_VENC_Rect_t stRect; /* Crop region, 注意: s32X must be multi of 16 */ } MI_VENC_CropCfg_t;
-
成员
成员名称 描述 bEnable 是否进行裁剪
TRUE:使能裁剪
FALSE:不使能裁剪stRect 裁剪的区域 -
相关数据类型及接口
3.67. MI_VENC_RecvPicParam_t¶
-
描述
接收指定帧数图像编码。
-
定义
typedef struct MI_VENC_RecvPicParam_s { MI_S32 s32RecvPicNum; }MI_VENC_RecvPicParam_t;
-
成员
成员名称 描述 s32RecvPicNum 编码通道连续接收并编码的帧数 -
相关数据类型及接口
3.68. MI_VENC_FrameLostMode_e¶
-
描述
瞬时码率超过阈值时的丢帧模式。
-
定义
typedef enum { E_MI_VENC_FRMLOST_NORMAL, E_MI_VENC_FRMLOST_PSKIP, E_MI_VENC_FRMLOST_MAX, }MI_VENC_FrameLostMode_e;
-
成员
成员名称 描述 E_MI_VENC_FRMLOST_NORMAL 瞬时码率超过阈值时正常丢帧 E_MI_VENC_FRMLOST_PSKIP 瞬时码率超过阈值时编码pskip帧 -
相关数据类型及接口
3.69. MI_VENC_ParamFrameLost_t¶
-
描述
瞬时码率超过阈值时的丢帧策略参数。
-
定义
typedef struct MI_VENC_ParamFrameLost_s { MI_BOOL bFrmLostOpen; MI_U32 u32FrmLostBpsThr; MI_VENC_FrameLostMode_e eFrmLostMode; MI_U32 u32EncFrmGaps; } MI_VENC_ParamFrameLost_t;
-
成员
成员名称 描述 bFrmLostOpen 瞬时码率超过阈值时丢帧开关 u32FrmLostBpsThr 丢帧阈值。(单位为bit/s) enFrmLostMode 瞬时码率超过阈值时丢帧模式 u32EncFrmGaps 丢帧间隔,默认为0。取值范围:[0,65535] -
相关数据类型及接口
3.70. MI_VENC_SuperFrameCfg_t¶
-
描述
超大帧处理策略参数。
-
定义
typedef struct MI_VENC_SuperFrameCfg_s { MI_VENC_SuperFrmMode_e eSuperFrmMode; MI_U32 u32SuperIFrmBitsThr; MI_U32 u32SuperPFrmBitsThr; MI_U32 u32SuperBFrmBitsThr; }MI_VENC_SuperFrameCfg_t;
-
成员
成员名称 描述 eSuperFrmMode 超大帧处理模式。 u32SuperIFrmBitsThr I帧超大阈值,默认为0。取值范围:大于等于0。(单位bits) u32SuperPFrmBitsThr P帧超大阈值,默认为0。取值范围:大于等于0。(单位bits) u32SuperBFrmBitsThr B帧超大阈值,默认为0。取值范围:大于等于0。(单位bits) -
注意事项
若阈值设置为0,则对应设置不生效。比如I帧阈值不为0,而P帧阈值为0,则超大帧设置只会对I帧生效。
-
相关数据类型及接口
3.71. MI_VENC_RcPriority_e¶
-
描述
码率控制优先级枚举。
-
定义
typedef enum { E_MI_VENC_RC_PRIORITY_BITRATE_FIRST=1, E_MI_VENC_RC_PRIORITY_FRAMEBITS_FIRST, E_MI_VENC_RC_PRIORITY_MAX, }MI_VENC_RcPriority_e;
-
成员
成员名称 描述 E_MI_VENC_RC_PRIORITY_BITRATE_FIRST 目标码率优先 E_MI_VENC_RC_PRIORITY_FRAMEBITS_FIRST 超大帧阈值优先
3.72. MI_VENC_ModType_e¶
-
描述
编码相关模块参数类型。
-
定义
typedef enum { E_MI_VENC_MODTYPE_VENC=1, E_MI_VENC_MODTYPE_H264E, E_MI_VENC_MODTYPE_H265E, E_MI_VENC_MODTYPE_JPEGE, E_MI_VENC_MODTYPE_AV1, E_MI_VENC_MODTYPE_MAX }MI_VENC_ModType_e;
-
成员
成员名称 描述 E_MI_VENC_MODTYPE_VENC venc模块参数类型,不支持 E_MI_VENC_MODTYPE_H264E h264模块参数类型 E_MI_VENC_MODTYPE_H265E h265模块参数类型 E_MI_VENC_MODTYPE_JPEGE jpeg模块参数类型 E_MI_VENC_MODTYPE_AV1 av1模块参数类型
3.73. MI_VENC_AdvCustRcAttr_t¶
-
描述
自定义的高级码控相关功能的开关参数。
-
定义
typedef struct MI_VENC_AdvCustRcAttr_s { MI_BOOL bEnableQPMap; MI_BOOL bAbsQP; MI_BOOL bEnableModeMap; MI_BOOL bEnabelHistoStaticInfo; }MI_VENC_AdvCustRcAttr_t;
-
成员
成员名称 描述 bEnableQPMap 使能QPMap功能的开关
TRUE:开
FALSE:关bAbsQP 配置QPMap是否使用绝对QP值
TRUE:是
FALSE:否,使用相对QP值bEnableModeMap 使能ModeMap功能的开关
TRUE:开
FALSE:关bEnabelHistoStaticInfo 使能获取帧编码后相关统计数据的开关
TRUE:开
FALSE:关 -
相关数据类型及接口
3.74. MI_VENC_FrameHistoStaticInfo_t¶
-
描述
图像帧编码的相关配置属性信息。
-
定义
typedef struct MI_VENC_FrameHistoStaticInfo_s { MI_U8 u8PicSkip; MI_U16 u16PicType; MI_U32 u32PicPoc; MI_U32 u32PicSliNum; MI_U32 u32PicNumIntra; MI_U32 u32PicNumMerge; MI_U32 u32PicNumSkip; MI_U32 u32PicAvgCtuQp; MI_U32 u32PicByte; MI_U32 u32GopPicIdx; MI_U32 u32PicNum; MI_U32 u32PicDistLow; MI_U32 u32PicDistHigh; } MI_VENC_FrameHistoStaticInfo_t;
-
成员
成员名称 描述 u8PicSkip 图像帧skip flag u16PicType 编码帧的类型:
0 : I
1 : P
2 : Bu32PicPoc 当前编码帧的图片顺序计数(POC) u32PicSliNum 片段(Slice Segment)总数 u32PicNumIntra 当前编码帧的Intra块的数量((8x8 unit) u32PicNumMerge 当前编码帧的Merge块的数量((8x8 unit) u32PicNumSkip 当前编码帧的Skip块的数量((8x8 unit) u32PicAvgCtuQp 当前编码帧所有CTU的平均QP值 u32PicByte 当前编码图像帧的大小(bytes) u32GopPicIdx GOP中该图像帧的index u32PicNum 当前已经编码的图片帧数 u32PicDistLow SSD的低32bit u32PicDistHigh SSD的高32bit -
相关数据类型及接口
MI_VENC_ GetLastHistoStaticInfo
3.75. MI_VENC_InputSourceConfig_t¶
-
描述
输入配置参数。
-
定义
typedef struct MI_VENC_InputSourceConfig_s { MI_VENC_InputSrcBufferMode_e eInputSrcBufferMode; } MI_VENC_InputSourceConfig_t;
-
成员
成员名称 描述 eInputSrcBufferMode 输入模式 -
相关数据类型及接口
--
3.76. MI_VENC_InputSrcBufferMode_e¶
-
描述
定义H.264和H.265输入buffer模式枚举。
-
定义
typedef enum { E_MI_VENC_INPUT_MODE_NORMAL_FRMBASE = 0, /*Handshake with input by about 3 buffers in frame mode*/ E_MI_VENC_INPUT_MODE_RING_ONE_FRM, /*Handshake with input by one buffer in ring mode*/ E_MI_VENC_INPUT_MODE_RING_HALF_FRM, /*Handshake with input by half buffer in ring mode*/ E_MI_VENC_INPUT_MODE_HW_AUTO_SYNC, /*Handshake with input by hw auto sync in ring mod*/ E_MI_VENC_INPUT_MODE_RING_UNIFIED_DMA, /*Multiple venc main channel handshake with input by one unified buffer in ring mode*/ E_MI_VENC_INPUT_MODE_MAX } MI_VENC_InputSrcBufferMode_e;
-
成员
成员名称 描述 E_MI_VENC_INPUT_MODE_NORMAL_FRMBASE 默认与前级通过三张左右frame交互 E_MI_VENC_INPUT_MODE_RING_ONE_FRM 与前级通过一张frame以ring的形式交互 (不再支持) E_MI_VENC_INPUT_MODE_RING_HALF_FRM 与前级通过半张frame以ring的形式交互 (不再支持) E_MI_VENC_INPUT_MODE_HW_AUTO_SYNC 使用此标志来区分是ring mode还是hw auto sync mode (不再支持) E_MI_VENC_INPUT_MODE_RING_UNIFIED_DMA 前级接scl时,venc多个主通道复用同一张ring buf。 -
相关数据类型及接口
3.77. MI_VENC_IntraRefresh_t¶
-
描述
支持P帧刷Islice的控制参数。
-
定义
typedef struct MI_VENC_IntraRefresh_s { MI_BOOL bEnable; MI_U32 u32RefreshLineNum; MI_U32 u32ReqIQp; }MI_VENC_IntraRefresh_t;
-
成员
成员名称 描述 bEnable Enable venc Intra Refresh模式 u32RefreshLineNum 每个gop序列里面需要刷新的Islice总数 u32ReqIQp 是不是要强制编码I帧 -
注意
只支持H265,H264。
-
相关数据类型及接口
3.78. MI_VENC_InitParam_t¶
-
说明
Venc设备初始化参数。
-
定义
typedef struct MI_VENC_InitParam_s { MI_U32 u32MaxWidth; MI_U32 u32MaxHeight; }MI_VENC_InitParam_t;
-
成员
成员名称 描述 u32MaxWidth 设备使用的最大分辨率的宽度 u32MaxHeight 设备使用的最大分辨率的高度 -
注意事项
Pudding 、Ispahan、Tiramisu、Ikayaki、Muffin、Mochi、Maruko和Opera系列需要根据实际设置最大宽高。
-
相关数据类型及接口
3.79. MI_VENC_H265eRefType_e¶
-
说明
定义H.265跳帧参考码流的帧类型以及参考属性。
-
定义
typedef MI_VENC_H264eRefType_e MI_VENC_H265eRefType_e;
-
注意事项
详情请参考MI_VENC_H264eRefType_e。
-
相关数据类型及接口
3.80. MI_VENC_AttrMjpegVbr_t¶
-
说明
定义MJPEG编码通道VBR属性结构。
-
定义
typedef struct MI_VENC_AttrMjpegVbr_s { MI_U32 u32MaxBitRate; MI_U32 u32SrcFrmRateNum; MI_U32 u32SrcFrmRateDen; } MI_VENC_AttrMjpegVbr_t;
-
成员
成员名称 描述 u32MaxBitRate 编码器输出最大码率,以bps为单位。 取值范围:[2000,102400000]。 u32SrcFrmRateNum 编码器帧率分子,以整数为单位。 u32SrcFrmRateDen 编码器帧率分母,以整数为单位。 -
注意事项
请参见MI_VENC_AttrH264Cbr_t关于u32SrcFrmRateNum和u32SrcFrmRateDen的说明。
-
相关数据类型及接口
3.81. MI_VENC_ParamMjpegVbr_t¶
-
说明
定义MJPEG协议编码通道VBR码率控制模式高级参数配置。
-
定义
typedef struct MI_VENC_ParamMjpegVbr_s { MI_U32 u32MaxQfactor; MI_U32 u32MinQfactor; MI_S32 s32ChangePos; } MI_VENC_ParamMjpegVbr_t;
-
成员
成员名称 描述 u32MaxQfactor 帧最大Qfactor。用于控制图像质量。 取值范围:(u32MinQfactor,90]。
默认值: 75u32MinQfactor 帧最小Qfactor。用于控制图像质量。 取值范围:[1, u32MaxQfactor)。
默认值: 20s32ChangePos VBR开始调整Qp时的码率相对于最大码率的比例。取值范围:[50,100]。
默认值: 80 -
相关数据类型及接口
3.82. MI_VENC_Av1eRefType_e¶
-
说明
定义AV1跳帧参考码流的帧类型以及参考属性。
-
定义
typedef MI_VENC_H264eRefType_e MI_VENC_Av1eRefType_e;
-
注意事项
详情请参考MI_VENC_H264eRefType_e。
-
相关数据类型及接口
3.83. MI_VENC_StreamInfoAv1_t¶
-
描述
定义AV1协议码流特征信息。
-
定义
typedef struct MI_VENC_StreamInfoAv1_s { MI_U32 u32PicBytesNum; MI_U32 u32Inter64x64CuNum; MI_U32 u32Inter32x32CuNum; MI_U32 u32Inter16x16CuNum; MI_U32 u32Inter8x8CuNum; MI_U32 u32Intra32x32CuNum; MI_U32 u32Intra16x16CuNum; MI_U32 u32Intra8x8CuNum; MI_U32 u32Intra4x4CuNum; MI_VENC_Av1eRefType_e eRefType; MI_U32 u32UpdateAttrCnt; MI_U32 u32StartQp; } MI_VENC_StreamInfoAv1_t;
-
成员
成员名称 描述 u32PicBytesNum 编码当前帧的字节(BYTE)数 u32Inter64x64CuNum 编码当前帧中采用Inter64x64预测模式的CU块数 u32Inter32x32CuNum 编码当前帧中采用Inter32x32预测模式的CU块数 u32Inter16x16CuNum 编码当前帧中采用Inter16x16预测模式的CU块数 u32Inter8x8CuNum 编码当前帧中采用Inter8x8预测模式的CU块数 u32Intra32x32CuNum 编码当前帧中采用Intra32x32预测模式的CU块数 u32Intra16x16CuNum 编码当前帧中采用Intra16x16预测模式的CU块数 u32Intra8x8CuNum 编码当前帧中采用Intra8x8预测模式的CU块数 u32Intra4x4CuNum 编码当前帧中采用Intra4x4预测模式的CU块数 eRefType 高级跳帧参考下的编码帧类型 u32UpdateAttrCnt 通道属性或参数包含RC参数被设置的次数 u32StartQp 编码采用的起始Qp值 -
注意
eRefType请参见MI_VENC_StreamInfoH264_t中关于eRefType变量的说明。
-
相关数据类型及接口
3.84. MI_VENC_AttrAv1_t¶
-
描述
定义AV1编码属性结构体。
-
定义
typedef struct MI_VENC_AttrAv1_s { MI_U32 u32MaxPicWidth; MI_U32 u32MaxPicHeight; MI_U32 u32BufSize; MI_U32 u32Profile; MI_BOOL bByFrame; MI_U32 u32PicWidth; MI_U32 u32PicHeight; MI_U32 u32RefNum; MI_BOOL bEnableSwitchFrame; }MI_VENC_AttrAv1_t;
-
成员
成员名称 描述 u32MaxPicWidth 编码图像最大宽度。
取值范围:[MIN_WIDTH,MAX_WIDTH],以像素为单位。必须是MIN_ALIGN的整数倍。
静态属性。u32PicWidth 编码图像宽度。
取值范围:[MIN_WIDTH,u32MaxPicWidth],以像素为单位。 必须是MIN_ALIGN的整数倍。
动态属性。u32MaxPicHeight 编码图像最大高度。
取值范围:[MIN_HEIGHT,MAX_HEIGHT],以像素为单位。必须是MIN_ALIGN的整数倍
静态属性。u32PicHeight 编码图像高度。
取值范围:[MIN_HEIGHT,u32MaxPicHeight],以像素为单位。 必须是MIN_ALIGN的整数倍
动态属性。u32BufSize 码流buffer大小。
取值范围:[Min,Max],以byte为单位。
推荐值:一幅最大编码图像大小。推荐值为u32MaxPicWidth x u32MaxPicHeight x 1.5byte。
Min:一幅最大编码图像大小的½。
Max:无限制,但是会消耗更多的内存。
静态属性。bByFrame 帧/包模式获取码流。取值范围:{TRUE,FALSE}。
TRUE:按帧获取。
FALSE:按包获取。
静态属性。
注意:Av1编码bByFrame只支持设置为TRUE,不支持设置为FALSE。u32Profile 编码的等级。
取值范围:0。
0:MainProfile。
动态属性。u32RefNum 编码支持参考帧的个数。
取值范围:[1,2]。
静态属性,保留字段,暂不支持。bEnableSwitchFrame 是否使能Av1 Switch Frame。
取值范围:{TRUE,FALSE}。
TRUE:打开Switch Frame功能。假设当前帧分辨率为1920x1080,下一时刻切换帧分辨率为960x540,如果打开了Switch Frame功能,可以不重新申请I帧,直接使用Switch Frame切换。如果没有打开Switch Frame功能切换分辨率则需要重新申请I帧。注意:该功能仅在切换后分辨率为切换前分辨率的[½*width,½*height]~(width,height)范围内才能使用Switch Frame切换,其他分辨率还是会重新申请I帧。
FALSE:关闭Switch Frame功能。
动态属性。
3.85. MI_VENC_AttrCbr_t¶
-
描述
定义H.264/H.265/AV1编码通道CBR属性结构。
-
定义
typedef struct MI_VENC_AttrCbr_s { MI_U32 u32Gop; MI_U32 u32StatTime; MI_U32 u32SrcFrmRateNum; MI_U32 u32SrcFrmRateDen; MI_U32 u32BitRate; MI_U32 u32FluctuateLevel; }MI_VENC_AttrCbr_t;
-
成员
成员名称 描述 u32Gop gop值。
取值范围:[1,65535]u32StatTime CBR码率统计时间,以秒为单位。
取值范围:[1,60]。暂不支持。u32SrcFrmRateNum 编码器帧率分子,以整数为单位 u32SrcFrmRateDen 编码器帧率分母,以整数为单位 u32BitRate 平均bitrate,以bps为单位。
取值范围:[2000,102400000]u32FluctuateLevel 最大码率相对平均码率的波动等级,暂不支持。 -
注意
SrcFrmRate应该设置为输入编码器的实际帧率,RC需要根据SrcFrmRate进行码率控制。 u32SrcFrmRateNum/u32SrcFrmRateDen范围在(0, 65535]之间。
-
相关数据类型及接口
3.86. MI_VENC_AttrVbr_t¶
-
描述
定义H.264/H.265/AV1编码通道VBR属性结构。
-
定义
typedef struct MI_VENC_AttrVbr_s { MI_U32 u32Gop; MI_U32 u32StatTime; MI_U32 u32SrcFrmRateNum; MI_U32 u32SrcFrmRateDen; MI_U32 u32MaxBitRate; MI_U32 u32MaxQp; MI_U32 u32MinQp; }MI_VENC_AttrVbr_t;
-
成员
成员名称 描述 u32Gop gop值。取值范围:[1,65535] u32StatTime VBR码率统计时间,以秒为单位。取值范围:[1,60]。暂不支持。 u32SrcFrmRateNum 编码器帧率分子,以整数为单位 u32SrcFrmRateDen 编码器帧率分母,以整数为单位 u32MaxBitRate 编码器输出最大码率,以bps为单位。取值范围:[2000,102400000]。 u32MaxQp 编码器支持图像最大QP。取值范围:(u32MinQp,48] u32MinQp 编码器支持图像最小QP。取值范围:[12,u32MaxQp) -
注意
请参见MI_VENC_AttrCbr_t关于u32SrcFrmRateNum和u32SrcFrmRateDen的说明。
-
相关数据类型及接口
3.87. MI_VENC_AttrFixQp_t¶
-
描述
定义H.264/H.265/AV1编码通道Fixqp属性结构。
-
定义
typedef struct MI_VENC_AttrFixQp_s { MI_U32 u32Gop; MI_U32 u32SrcFrmRateNum; MI_U32 u32SrcFrmRateDen; MI_U32 u32IQp; MI_U32 u32PQp; }MI_VENC_AttrFixQp_t;
-
成员
成员名称 描述 u32Gop gop值。取值范围:[1, 65535]。 u32SrcFrmRateNum 编码器帧率分子,以整数为单位。 u32SrcFrmRateDen 编码器帧率分母,以整数为单位。 u32IQp I帧所有宏块Qp值。取值范围:[12,48]。 u32PQp P帧所有宏块Qp值。取值范围:[12,48]。 -
注意
请参见MI_VENC_AttrCbr_t关于u32SrcFrmRateNum和u32SrcFrmRateDen的说明。
-
相关数据类型及接口
3.88. MI_VENC_AttrAvbr_t¶
-
描述
定义H.264/H.265/AV1编码通道AVBR属性结构。
-
定义
typedef struct MI_VENC_AttrAvbr_s { MI_U32 u32Gop; MI_U32 u32StatTime; MI_U32 u32SrcFrmRateNum; MI_U32 u32SrcFrmRateDen; MI_U32 u32MaxBitRate; MI_U32 u32MaxQp; MI_U32 u32MinQp; } MI_VENC_AttrAvbr_t;
-
成员
成员名称 描述 u32Gop gop值。取值范围:[1,65535]。 u32StatTime 码率统计时间,以秒为单位。取值范围:[1,60]。 u32SrcFrmRateNum 编码器帧率分子,以整数为单位。 u32SrcFrmRateDen 编码器帧率分母,以整数为单位。 u32MaxBitRate 编码器输出最大码率,以bps为单位。取值范围:[2000,102400000]。 u32MaxQp 编码器支持图像最大QP。取值范围:(u32MinQp,48]。 u32MinQp 编码器支持图像最小QP。取值范围:[12,u32MaxQp)。 -
注意
请参见MI_VENC_AttrCbr_t关于u32SrcFrmRateNum和u32SrcFrmRateDen的说明。
-
相关数据类型及接口
3.89. MI_VENC_AttrAv1Cbr_t¶
-
描述
定义AV1编码通道CBR属性结构。
-
定义
typedef MI_VENC_AttrCbr_t MI_VENC_AttrAv1Cbr_t;
-
成员
详情请参考MI_VENC_AttrCbr_t。
-
注意
详情请参考MI_VENC_AttrCbr_t。
-
相关数据类型及接口
3.90. MI_VENC_AttrAv1Vbr_t¶
-
描述
定义AV1编码通道VBR属性结构。
-
定义
typedef MI_VENC_AttrVbr_t MI_VENC_AttrAv1Vbr_t;
-
成员
详情请参考MI_VENC_AttrVbr_t。
-
注意
详情请参考MI_VENC_AttrVbr_t。
-
相关数据类型及接口
3.91. MI_VENC_AttrAv1FixQp_t¶
-
描述
定义AV1编码通道Fixqp属性结构。
-
定义
typedef MI_VENC_AttrFixQp_t MI_VENC_AttrAv1FixQp_t;
-
成员
详情请参考MI_VENC_AttrFixQp_t。
-
注意
详情请参考MI_VENC_AttrFixQp_t。
-
相关数据类型及接口
3.92. MI_VENC_AttrAv1Avbr_t¶
-
描述
定义AV1编码通道AVBR属性结构。
-
定义
typedef MI_VENC_AttrAvbr_t MI_VENC_AttrAv1Avbr_t;
-
成员
详情请参考MI_VENC_AttrAvbr_t。
-
注意
详情请参考MI_VENC_AttrAvbr_t。
-
相关数据类型及接口
3.93. MI_VENC_ParamVbr_t¶
-
描述
定义H.264/H.265/AV1协议编码通道VBR码率控制模式高级参数配置。
-
定义
typedef struct MI_VENC_ParamVbr_s { MI_U32 u32MaxQp; MI_U32 u32MinQp; MI_S32 s32IPQPDelta; MI_S32 s32ChangePos; MI_U32 u32MaxIQp; MI_U32 u32MinIQP; MI_U32 u32MaxIPProp; MI_U32 u32MaxISize; MI_U32 u32MaxPSize; }MI_VENC_ParamVbr_t;
-
成员
成员名称 描述 u32MaxQp P帧的最大QP。用于控制P帧的最小bits数。取值范围:(u32MinQp,48]。
默认值: 48u32MinQp P帧的最小QP。用于控制P帧的最大bits数。取值范围:[12,u32MaxQp)。
默认值: 12s32IPQPDelta IPQP变化值。取值范围:[-12,12]。
默认值: 0s32ChangePos VBR开始调整Qp时的码率相对于最大码率的比例。取值范围:[50,100]。
默认值: 80u32MaxIQp I帧的最大QP。用于控制I帧的最小bits数。取值范围:(u32MinIQp,48]。
默认值: 48u32MinIQp I帧的最小QP。用于控制I帧的最大bits数。取值范围:[12,u32MaxIQp)。
默认值: 12u32MaxIPProp 最大IP帧码率的比值,取值范围[5,100]。
默认值: 100u32MaxISize I帧的最大size。rate control会尽量让target size不超过max size。若为0,则代表未加限制。
取值范围:[0, 0xFFFFFFFF]
单位: byte
默认值:0u32MaxPSize P帧的最大size。rate control会尽量让target size不超过max size。若为0,则代表未加限制。
取值范围:[0, 0xFFFFFFFF] 单位: byte
默认值:0 -
相关数据类型及接口
3.94. MI_VENC_ParamCbr_t¶
-
描述
定义H.264/H.265/AV1协议编码通道CBR码率控制模式高级参数配置。
-
定义
typedef struct MI_VENC_ParamCbr_s { MI_U32 u32MaxQp; MI_U32 u32MinQp; MI_S32 s32IPQPDelta; MI_U32 u32MaxIQp; MI_U32 u32MinIQp; MI_U32 u32MaxIPProp; MI_U32 u32MaxISize; MI_U32 u32MaxPSize; }MI_VENC_ParamCbr_t;
-
成员
成员名称 描述 u32MaxQp P帧最大QP,用于控制P帧的最小bits数。取值范围:(u32MinQp,48]。
默认值: 48u32MinQp P帧最小QP,用于控制P帧的最大bits数。取值范围:[12,u32MaxQp)。
默认值: 12s32IPQPDelta IPQP变化值。取值范围:[-12,12]。
默认值: 0u32MaxIQp I帧的最大QP。用于控制I帧的最小bits数。取值范围:(u32MinIQp,48]。
默认值: 48u32MinIQp I帧的最小QP。用于控制I帧的最大bits数。取值范围:[12,u32MaxIQp)。
默认值: 12u32MaxIPProp 最大IP帧码率的比值,取值范围[5,100]。
默认值: 100u32MaxISize I帧的最大size。rate control会尽量让target size不超过max size。若为0,则代表未加限制。
取值范围:[0, 0xFFFFFFFF] 单位: byte
默认值:0u32MaxPSize P帧的最大size。rate control会尽量让target size不超过max size。若为0,则代表未加限制。
取值范围:[0, 0xFFFFFFFF] 单位: byte
默认值:0 -
相关数据类型及接口
3.95. MI_VENC_ParamAvbr_t¶
-
说明
定义H.264/H.265/AV1协议编码通道AVBR码率控制模式高级参数配置。
-
定义
typedef struct MI_VENC_ParamAvbr_s { MI_U32 u32MaxQp; MI_U32 u32MinQp; MI_S32 s32IPQPDelta; MI_S32 s32ChangePos; MI_U32 u32MaxIQp; MI_U32 u32MinIQp; MI_U32 u32MaxIPProp; MI_U32 u32MaxISize; MI_U32 u32MaxPSize; MI_U32 u32MinStillPercent; MI_U32 u32MaxStillQp; MI_U32 u32MotionSensitivity; } MI_VENC_ParamAvbr_t;
-
成员
成员名称 描述 u32MaxQp P帧的最大QP。用于控制P帧的最小bits数
取值范围:(u32MinQp,48]
默认值:48u32MinQp P帧的最小QP。用于控制P帧的最大bits数
取值范围:[12,u32MaxQp)
默认值:12s32IPQPDelta IPQP变化值
取值范围:[-12,12]
默认值:0s32ChangePos AVBR开始调整Qp时的码率相对于最大码率的比例
取值范围:[50,100]
默认值:80u32MaxIQp I帧的最大QP。用于控制I帧的最小bits数
取值范围:(u32MinIQp,48]
默认值:48u32MinIQp I帧的最小QP。用于控制I帧的最大bits数
取值范围:[12,u32MaxIQp)
默认值:12u32MaxIPProp 最大IP帧码率的比值
取值范围[5,100]
默认值:100u32MaxISize I帧的最大size。rate control会尽量让target size不超过max size。若为0,则代表未加限制。
取值范围:[0, 0xFFFFFFFF] 单位: byte
默认值:0u32MaxPSize P帧的最大size。rate control会尽量让target size不超过max size。若为0,则代表未加限制。
取值范围:[0, 0xFFFFFFFF] 单位: byte
默认值:0u32MinStillPercent 静止状态下目标码率的最小百分比。若此变量设置为100,AVBR将不会在判别为静止时主动调低目标码率,AVBR的表现将和VBR一致。
取值范围:[5,100]
默认值:35u32MaxStillQp 静止状态最大I帧QP
取值范围:[u32MinIQp,u32MaxIQp]
暂不支持u32MotionSensitivity 根据画面运动程度调整码率的灵敏度
取值范围:[20,100]
默认值:100 -
相关数据类型及接口
3.96. MI_VENC_ParamAv1Vbr_t¶
-
描述
定义AV1协议编码通道VBR码率控制模式高级参数配置。
-
定义
typedef MI_VENC_ParamVbr_t MI_VENC_ParamAv1Vbr_t;
-
成员
详情请参考MI_VENC_ParamVbr_t。
-
相关数据类型及接口
3.97. MI_VENC_ParamAv1Cbr_t¶
-
描述
定义AV1协议编码通道CBR码率控制模式高级参数配置。
-
定义
typedef MI_VENC_ParamCbr_t MI_VENC_ParamAv1Cbr_t;
-
成员
详情请参考MI_VENC_ParamCbr_t。
-
相关数据类型及接口
3.98. MI_VENC_ParamAv1Avbr_t¶
-
描述
定义AV1协议编码通道AVBR码率控制模式高级参数配置。
-
定义
typedef MI_VENC_ParamAvbr_t MI_VENC_ParamAv1Avbr_t;
-
成员
详情请参考MI_VENC_ParamAvbr_t。
-
相关数据类型及接口
3.99. MI_VENC_ParamAv1TileSplit_t¶
-
描述
定义AV1协议编码通道Tile分割结构体。
-
定义
typedef struct MI_VENC_ParamAv1TileSplit_s { MI_BOOL bSplitEnable; MI_U32 u32TileRowCount; } MI_VENC_ParamAv1TileSplit_t;
-
成员
成员名称 描述 bSplitEnable Tile分割是否使能 u32TileRowCount 表示每个tile占的宏块行数
最小值为:1,最大值为:(图像高+63)/64 -
相关数据类型及接口
3.100. MI_VENC_ParamAv1Dblk_t¶
-
描述
定义AV1协议编码通道Dblk结构体。
-
定义
typedef struct MI_VENC_ParamAv1Dblk_s { MI_U32 u32DblkMode; MI_U32 u32LumaHorzLevel; MI_U32 u32LumaVertLevel; MI_U32 u32ChromaLevel; MI_U32 u32Sharpness; } MI_VENC_ParamAv1Dblk_t;
-
成员
成员名称 描述 u32DblkMode 取值范围[0,2],默认值1;设置为0时表示不使能;设置为1时表示使能,并且使用内部计算的Deblocking参数(用户设置的Deblocking参数无效);设置为2时表示使能,并且使用用户设置的Deblocking参数。 u32LumaHorzLevel 具体含义请参见AV1协议loop_filter_level[0]的定义 u32LumaVertLevel 具体含义请参见AV1协议loop_filter_level[1]的定义 u32ChromaLevel 具体含义请参见AV1协议loop_filter_level[2]的定义 u32Sharpness 具体含义请参见AV1协议loop_filter_sharpness的定义 -
相关数据类型及接口
3.101. MI_VENC_Av1ColorPrimaries_e¶
-
描述
定义AV1协议Color primaries枚举类型。
-
定义
typedef enum { E_MI_VENC_AV1_CP_RESERVED_0 = 0, E_MI_VENC_AV1_CP_BT_709 = 1, E_MI_VENC_AV1_CP_UNSPECIFIED = 2, E_MI_VENC_AV1_CP_RESERVED_3 = 3, E_MI_VENC_AV1_CP_BT_470_M = 4, E_MI_VENC_AV1_CP_BT_470_B_G = 5, E_MI_VENC_AV1_CP_BT_601 = 6, E_MI_VENC_AV1_CP_SMPTE_240 = 7, E_MI_VENC_AV1_CP_GENERIC_FILM = 8, E_MI_VENC_AV1_CP_BT_2020 = 9, E_MI_VENC_AV1_CP_XYZ = 10, E_MI_VENC_AV1_CP_SMPTE_431 = 11, E_MI_VENC_AV1_CP_SMPTE_432 = 12, E_MI_VENC_AV1_CP_RESERVED_13 = 13, E_MI_VENC_AV1_CP_EBU_3213 = 22, E_MI_VENC_AV1_CP_RESERVED_23 = 23, E_MI_VENC_AV1_CP_MAX } MI_VENC_Av1ColorPrimaries_e;
-
成员
各成员描述详细见AV1协议color_primaries的定义。
3.102. MI_VENC_Av1TransferCharacteristics_e¶
-
描述
定义AV1协议Transfer characteristics枚举类型。
-
定义
typedef enum { E_MI_VENC_AV1_TC_RESERVED_0 = 0, E_MI_VENC_AV1_TC_BT_709 = 1, E_MI_VENC_AV1_TC_UNSPECIFIED = 2, E_MI_VENC_AV1_TC_RESERVED_3 = 3, E_MI_VENC_AV1_TC_BT_470_M = 4, E_MI_VENC_AV1_TC_BT_470_B_G = 5, E_MI_VENC_AV1_TC_BT_601 = 6, E_MI_VENC_AV1_TC_SMPTE_240 = 7, E_MI_VENC_AV1_TC_LINEAR = 8, E_MI_VENC_AV1_TC_LOG_100 = 9, E_MI_VENC_AV1_TC_LOG_100_SQRT10 = 10, E_MI_VENC_AV1_TC_IEC_61966 = 11, E_MI_VENC_AV1_TC_BT_1361 = 12, E_MI_VENC_AV1_TC_SRGB = 13, E_MI_VENC_AV1_TC_BT_2020_10_BIT = 14, E_MI_VENC_AV1_TC_BT_2020_12_BIT = 15, E_MI_VENC_AV1_TC_SMPTE_2084 = 16, E_MI_VENC_AV1_TC_SMPTE_428 = 17, E_MI_VENC_AV1_TC_HLG = 18, E_MI_VENC_AV1_TC_RESERVED_19 = 19, E_MI_VENC_AV1_TC_MAX } MI_VENC_Av1TransferCharacteristics_e;
-
成员
各成员描述详细见AV1协议transfer_characteristics的定义。
3.103. MI_VENC_Av1MatrixCoefficients_e¶
-
描述
定义AV1协议Matrix coeffcients枚举类型。
-
定义
typedef enum { E_MI_VENC_AV1_MC_IDENTITY = 0, E_MI_VENC_AV1_MC_BT_709 = 1, E_MI_VENC_AV1_MC_UNSPECIFIED = 2, E_MI_VENC_AV1_MC_RESERVED_3 = 3, E_MI_VENC_AV1_MC_FCC = 4, E_MI_VENC_AV1_MC_BT_470_B_G = 5, E_MI_VENC_AV1_MC_BT_601 = 6, E_MI_VENC_AV1_MC_SMPTE_240 = 7, E_MI_VENC_AV1_MC_SMPTE_YCGCO = 8, E_MI_VENC_AV1_MC_BT_2020_NCL = 9, E_MI_VENC_AV1_MC_BT_2020_CL = 10, E_MI_VENC_AV1_MC_SMPTE_2085 = 11, E_MI_VENC_AV1_MC_CHROMAT_NCL = 12, E_MI_VENC_AV1_MC_CHROMAT_CL = 13, E_MI_VENC_AV1_MC_ICTCP = 14, E_MI_VENC_AV1_MC_RESERVED_15 = 15, E_MI_VENC_AV1_MC_MAX } MI_VENC_Av1MatrixCoefficients_e;
-
成员
各成员描述详细见AV1协议matrix_coefficients的定义。
3.104. MI_VENC_ParamAv1VuiColorConfig_t¶
-
描述
定义AV1协议编码通道Color config相关的结构体。
-
定义
typedef struct MI_VENC_ParamAv1VuiColorConfig_s { MI_U32 u32ColorDescriptionPresentFlag; MI_VENC_Av1ColorPrimaries_e eColorPrimaries; MI_VENC_Av1TransferCharacteristics_e eTransferCharacteristics; MI_VENC_Av1MatrixCoefficients_e eMatrixCofficients; } MI_VENC_ParamAv1VuiColorConfig_t;
-
成员
成员名称 描述 u32ColorDescriptionPresentFlag 具体含义请参见AV1协议关于color_description_present_flag的定义 eColorPrimaries 具体含义请参见AV1协议关于color_primaries的定义 eTransferCharacteristics 具体含义请参见AV1协议关于transfer_characteristics的定义 eMatrixCofficients 具体含义请参见AV1协议关于matrix_coefficients的定义 -
相关数据类型及接口
3.105. MI_VENC_ParamAv1VuiTimingInfo_t¶
-
描述
定义AV1协议编码通道Timing info相关的结构体。
-
定义
typedef struct MI_VENC_ParamAv1VuiTimingInfo_s { MI_U32 u32TimingInfoPresentFlag; MI_U32 u32NumUnitsInDisplayTick; MI_U32 u32TimeScale; MI_U32 u32EqualPictureInterval; MI_U32 u32NumTicksPerPictureMinus1; } MI_VENC_ParamAv1VuiTimingInfo_t;
-
成员
成员名称 描述 u32TimingInfoPresentFlag 具体含义请参见AV1协议关于timing_info_present_flag的定义 u32NumUnitsInDisplayTick 具体含义请参见AV1协议关于num_units_in_display_tick的定义 u32TimeScale 具体含义请参见AV1协议关于time_scale的定义 u32EqualPictureInterval 具体含义请参见AV1协议关于equal_picture_interval的定义 u32NumTicksPerPictureMinus1 具体含义请参见AV1协议关于num_ticks_per_picture_minus_1的定义 -
相关数据类型及接口
3.106. MI_VENC_ParamAv1Vui_t¶
-
描述
定义AV1协议编码通道VUI参数结构体。
-
定义
typedef struct MI_VENC_ParamAv1Vui_s { MI_VENC_ParamAv1VuiColorConfig_t stVuiColorConfig; MI_VENC_ParamAv1VuiTimingInfo_t stTimingInfo; } MI_VENC_ParamAv1Vui_t;
-
成员
成员名称 描述 stVuiColorConfig 定义AV1协议编码通道Color config相关的结构体。 stTimingInfo 定义AV1协议编码通道Timing info相关的结构体。 -
相关数据类型及接口
3.107. MI_VENC_Av1ObuType_e¶
-
描述
定义AV1码流OBU类型。
-
定义
typedef enum { E_MI_VENC_AV1_OBU_SEQUENCE_HEADER = 1, E_MI_VENC_AV1_OBU_TEMPORAL_DELIMITER = 2, E_MI_VENC_AV1_OBU_METADATA = 5, E_MI_VENC_AV1_OBU_FRAME = 6, E_MI_VENC_AV1_OBU_MAX = 16 } MI_VENC_Av1ObuType_e;
-
成员
成员名称 描述 E_MI_VENC_AV1_OBU_SEQUENCE_HEADER OBU_SEQUENCE_HEADER 类型 E_MI_VENC_AV1_OBU_TEMPORAL_DELIMITER OBU_TEMPORAL_DELIMITER 类型 E_MI_VENC_AV1_OBU_METADATA OBU_METADATA 类型 E_MI_VENC_AV1_OBU_FRAME OBU_FRAME 类型
3.108. MI_VENC_AttrH264Ubr_t¶
-
描述
定义H264协议编码通道UBR属性结构。
-
定义
typedef struct MI_VENC_AttrH264Ubr_s { MI_U32 u32Gop; MI_U32 u32SrcFrmRateNum; MI_U32 u32SrcFrmRateDen; MI_U32 u32MaxBitRate; MI_U32 u32MaxQp; MI_U32 u32MinQp; } MI_VENC_AttrH264Ubr_t;
-
成员
成员名称 描述 u32Gop gop值。取值范围:[1,65535]。 u32SrcFrmRateNum 编码器帧率分子,以整数为单位。 u32SrcFrmRateDen 编码器帧率分母,以整数为单位。 u32MaxBitRate 编码器输出最大码率,以bps为单位。取值范围:[2000,102400000]。 u32MaxQp 编码器支持图像最大QP。取值范围:(u32MinQp,48]。 u32MinQp 编码器支持图像最小QP。取值范围:[12,u32MaxQp)。 -
注意
请参见MI_VENC_AttrH264Cbr_t关于u32SrcFrmRateNum和u32SrcFrmRateDen的说明。
-
相关数据类型及接口
3.109. MI_VENC_AttrH265Ubr_t¶
-
描述
定义H265协议编码通道UBR属性结构。
-
定义
typedef struct MI_VENC_AttrH265Ubr_s { MI_U32 u32Gop; MI_U32 u32SrcFrmRateNum; MI_U32 u32SrcFrmRateDen; MI_U32 u32MaxBitRate; MI_U32 u32MaxQp; MI_U32 u32MinQp; } MI_VENC_AttrH265Ubr_t;
-
成员
成员名称 描述 u32Gop gop值。取值范围:[1,65535]。 u32SrcFrmRateNum 编码器帧率分子,以整数为单位。 u32SrcFrmRateDen 编码器帧率分母,以整数为单位。 u32MaxBitRate 编码器输出最大码率,以bps为单位。取值范围:[2000,102400000]。 u32MaxQp 编码器支持图像最大QP。取值范围:(u32MinQp,48]。 u32MinQp 编码器支持图像最小QP。取值范围:[12,u32MaxQp)。 -
注意
请参见MI_VENC_AttrH264Cbr_t关于u32SrcFrmRateNum和u32SrcFrmRateDen的说明。
-
相关数据类型及接口
3.110. MI_VENC_AttrAv1Ubr_t¶
-
描述
定义H265协议编码通道UBR属性结构。
-
定义
typedef struct MI_VENC_AttrAv1Ubr_s { MI_U32 u32Gop; MI_U32 u32SrcFrmRateNum; MI_U32 u32SrcFrmRateDen; MI_U32 u32MaxBitRate; MI_U32 u32MaxQp; MI_U32 u32MinQp; } MI_VENC_AttrAv1Ubr_t;
-
成员
成员名称 描述 u32Gop gop值。取值范围:[1,65535]。 u32SrcFrmRateNum 编码器帧率分子,以整数为单位。 u32SrcFrmRateDen 编码器帧率分母,以整数为单位。 u32MaxBitRate 编码器输出最大码率,以bps为单位。取值范围:[2000,102400000]。 u32MaxQp 编码器支持图像最大QP。取值范围:(u32MinQp,48]。 u32MinQp 编码器支持图像最小QP。取值范围:[12,u32MaxQp)。 -
注意
请参见MI_VENC_AttrH264Cbr_t关于u32SrcFrmRateNum和u32SrcFrmRateDen的说明。
-
相关数据类型及接口
3.111. MI_VENC_UserRcChnAttr_t¶
-
描述
定义UBR码控算法编码通道属性结构体。
-
定义
typedef struct MI_VENC_UserRcChnAttr_s { MI_U32 u32Gop; MI_U32 u32PicWidth; MI_U32 u32PicHeight; MI_U32 u32SrcFrmRateNum; MI_U32 u32SrcFrmRateDen; MI_U32 u32Bitrate; MI_U32 u32MaxQp; MI_U32 u32MinQp; MI_VENC_UbrMode_e eUbrMode; } MI_VENC_UserRcChnAttr_t;
-
成员
成员名称 描述 u32Gop gop值。取值范围:[1,65535]。 u32PicWidth 编码图像宽度
取值范围:[MIN_WIDTH,u32MaxPicWidth],以像素为单位。 必须是MIN_ALIGN的整数倍。
动态属性。u32PicHeight 编码图像高度。
取值范围:[MIN_HEIGHT,u32MaxPicHeight],以像素为单位。 必须是MIN_ALIGN的整数倍
动态属性。u32SrcFrmRateNum 编码器帧率分子,以整数为单位。 u32SrcFrmRateDen 编码器帧率分母,以整数为单位。 u32Bitrate 最近1s内统计的码率,单位为kbps u32MaxQp 编码器支持图像最大QP。取值范围:(u32MinQp,48]。 u32MinQp 编码器支持图像最小QP。取值范围:[12,u32MaxQp)。 eUbrMode 定义UBR码控中使用的编码模式 -
相关数据类型及接口
3.112. MI_VENC_UserRcFrameAttr_t¶
-
描述
定义UBR码控中用户码控算法前的帧编码信息。
-
定义
typedef struct MI_VENC_UserRcFrameAttr_s { MI_VENC_UserRcRefType_e eRefType; MI_U32 u32FrameIdx; MI_BOOL bLtrFrame; MI_U32 u32PreFrameBits; } MI_VENC_UserRcFrameAttr_t;
-
成员
成员名称 描述 eRefType 当前帧的参考关系。 u32FrameIdx 当前帧在一个Gop内的序号。 bLtrFrame 当前帧是否虚拟I帧。 u32PreFrameBits 前一帧的实际消耗bits。 -
相关数据类型及接口
3.113. MI_VENC_UserRcEncParam_t¶
-
描述
定义UBR码控中用户码控算法后的帧编码信息。
-
定义
typedef struct MI_VENC_UserRcEncParam_s { MI_U8 u8FrameQp; MI_U32 u32PicTargetBits; MI_BOOL bDropCurrentFrame; MI_BOOL bForceSkip; } MI_VENC_UserRcEncParam_t;
-
成员
成员名称 描述 u8FrameQp 当前帧的frame level QP。 u32PicTargetBits 当前帧期望的bit size。 bDropCurrentFrame 是否drop掉当前帧。 bForceSkip 当前帧是否编码skip帧。 -
相关数据类型及接口
3.114. MI_VENC_UbrMode_e¶
-
描述
定义UBR码控中使用的编码模式。
-
定义
typedef enum { E_MI_VENC_UBR_MODE_DEFAULT, E_MI_VENC_UBR_MODE_PIC_BIT_DISABLE, E_MI_VENC_UBR_MODE_FIXED_BLOCK_QP, E_MI_VENC_UBR_MODE_MAX } MI_VENC_UbrMode_e;
-
成员
成员名称 描述 E_MI_VENC_UBR_MODE_DEFAULT 默认UBR编码模式, 使用Qp值与bitrate进行调整。 E_MI_VENC_UBR_MODE_PIC_BIT_DISABLE bitrate设置不生效,编码器会根据复杂度调整宏块Qp。 E_MI_VENC_UBR_MODE_FIXED_BLOCK_QP 固定宏块Qp值编码, bitrate设置不生效。 -
相关数据类型及接口
3.115. MI_VENC_AttrCvbr_t¶
-
描述
定义H.264/H.265/AV1编码通道CVBR属性结构。
-
定义
typedef struct MI_VENC_AttrCvbr_s { MI_U32 u32Gop; MI_U32 u32StatTime; MI_U32 u32SrcFrmRateNum; MI_U32 u32SrcFrmRateDen; MI_U32 u32MaxBitRate; MI_U32 u32ShortTermStatsTime; MI_U32 u32LongTermStatsTime; MI_U32 u32LongTermMaxBitRate; MI_U32 u32LongTermMinBitRate; } MI_VENC_AttrCvbr_t;
-
成员
成员名称 描述 u32Gop H.264/H.265/AV1 gop值。取值范围:[1,65535]。 u32StatTime CVBR码率统计时间,以秒为单位。取值范围:[1,60]。暂不支持。 u32SrcFrmRateNum 编码器帧率分子,以整数为单位。 u32SrcFrmRateDen 编码器帧率分母,以整数为单位。 u32MaxBitRate 编码器短期输出最大码率,以bps为单位。取值范围:[2000,102400000]。 u32ShortTermStatsTime 短期码率统计时间,以秒为单位。取值范围:[1,120]。 u32LongTermStatsTime 长期码率统计时间,以分钟为单位。取值范围:[1,1440]。 u32LongTermMaxBitRate 长期统计输出最大码率,以bps为单位。取值范围:[2000,u32MaxBitRate]。 u32LongTermMinBitRate 长期统计输出最小码率,以bps为单位。取值范围:[2000,u32LongTermMaxBitRate]。 -
注意
请参见MI_VENC_AttrH264Cbr_t关于u32SrcFrmRate和fr32DstFrmRate的说明。
-
相关数据类型及接口
3.116. MI_VENC_ParamCvbr_t¶
-
描述
定义H264/H265/AV1协议编码通道CVBR码率控制模式高级参数配置。
-
定义
typedef struct MI_VENC_ParamCvbr_s { MI_S32 s32IPQPDelta; MI_U32 u32MinIQp; MI_U32 u32MaxIPProp; MI_U32 u32MaxIQp; MI_U32 u32MaxISize; MI_U32 u32MaxPSize; MI_U32 u32MaxQp; MI_U32 u32MinQp; } MI_VENC_ParamCvbr_t;
-
成员
成员名称 描述 s32IPQPDelta IPQP变化值。取值范围:[-12,12]。
默认值: 0u32MinIQp I帧的最小QP。用于控制I帧的最大bits数。取值范围:[12,u32MaxIQp)。
默认值: 12u32MaxIPProp 最大IP帧码率的比值,取值范围[5,100]。
默认值: 100u32MaxIQp I帧的最大QP。用于控制I帧的最小bits数。取值范围:(u32MinIQp,48]。
默认值: 48u32MaxISize I帧的最大size。rate control会尽量让target size不超过max size。若为0,则代表未加限制。
取值范围:[0, 0xFFFFFFFF]
单位:byte
默认值:0u32MaxPSize P帧的最大size。rate control会尽量让target size不超过max size。若为0,则代表未加限制。
取值范围:[0, 0xFFFFFFFF]
单位:byte
默认值:0u32MaxQp 帧最大QP,用于钳位质量。取值范围:(u32MinQp,48]。
默认值: 48u32MinQp 帧最小QP,用于钳位码率波动。取值范围:[12,u32MaxQp)。
默认值: 12 -
相关数据类型及接口
3.117. MI_VENC_DeBreathCfg_t¶
-
描述
定义H264/H265协议编码通道去呼吸效应参数配置。
-
定义
typedef struct MI_VENC_DeBreathCfg_s { MI_BOOL bEnable; MI_U8 u8Strength0; MI_U8 u8Strength1; } MI_VENC_DeBreathCfg_t;
-
成员
成员名称 描述 bEnable 是否开启去呼吸效应功能。取值范围:[\0,1]。
默认值: 1u8Strength0 去除呼吸效应强度调节参数 0。值越大,呼吸效应改善会越弱,值越小,呼吸效应改善越明显。取值范围:[0,7]。
默认值: 2u8Strength1 去除呼吸效应强度调节参数 1。其值越大,I 帧会越大,其值越小,I 帧会越小。取值范围[0,15]。
默认值: 6 -
相关数据类型及接口
3.118. MI_VENC_OutPortParam_t¶
-
说明
定义H.264/H.265/AV1的yuv输出端口参数。
-
定义
typedef struct MI_VENC_OutPortParam_s { MI_U32 u32Width; MI_U32 u32Height; } MI_VENC_OutPortParam_t;
-
成员
成员名称 描述 u32Width 输出yuv的宽。取值范围:[64, u32PicWidth],以像素为单位。必须是MIN_ALIGN的整数倍。 u32Height 输出yuv的高。取值范围:[64, u32PicHeight],以像素为单位。必须是MIN_ALIGN的整数倍。 -
相关数据类型及接口
4. 错误码¶
视频编码API错误码如表所示。
返回值 | 宏定义 | 描述 |
---|---|---|
0 | MI_SUCCESS | success |
0xa0022001 | MI_ERR_VENC_INVALID_DEVID | invalid device ID |
0xa0022002 | MI_ERR_VENC_INVALID_CHNID | invalid channel ID |
0xa0022003 | MI_ERR_VENC_ILLEGAL_PARAM | at lease one 参数 is illegal |
0xa0022004 | MI_ERR_VENC_EXIST | channel exists |
0xa0022005 | MI_ERR_VENC_UNEXIST | channel unexist |
0xa0022006 | MI_ERR_VENC_NULL_PTR | using a NULL point |
0xa0022007 | MI_ERR_VENC_NOT_CONFIG | try to enable or initialize device or channel, before configuring attribute |
0xa0022008 | MI_ERR_VENC_NOT_SUPPORT | operation is not supported by NOW |
0xa0022009 | MI_ERR_VENC_NOT_PERM | operation is not permitted |
0xa002200C | MI_ERR_VENC_NOMEM | failure caused by malloc memory |
0xa002200D | MI_ERR_VENC_NOBUF | failure caused by malloc buffer |
0xa002200E | MI_ERR_VENC_BUF_EMPTY | no data in buffer |
0xa002200F | MI_ERR_VENC_BUF_FULL | no buffer for new data |
0xa0022010 | MI_ERR_VENC_NOTREADY | System is not ready |
0xa0022011 | MI_ERR_VENC_BADADDR | bad address |
0xa0022012 | MI_ERR_VENC_BUSY | resource is busy |
0xa0022013 | MI_ERR_VENC_CHN_NOT_STARTED | channel not started |
0xa0022014 | MI_ERR_VENC_CHN_NOT_STOPPED | channel not stopped |
0xa002201F | MI_ERR_VENC_UNDEFINED | unexpected error |
5. PROCFS介绍¶
5.1. cat¶
-
调试信息
#cat /proc/mi_modules/mi_venc/mi_vencN
N表示不同的device,不同chip的N取值如下:
表5-1 不同chip的N取值
Chip
N取值
H.264/H.265/AV1 JPEG Maruko 0 8 Opera 0 8 Souffle 0 8 Iford 0 8 -
调试信息分析
记录当前某VENC device的使用状况,以及device属性、layer属性、inputport属性,可以动态地获取到这些信息,方便调试和测试。
-
参数说明
参数 描述 Dev info DevId 设备号,参考表5-1 IrqNum 中断号 IsrTotalCnt 各种类型的irq总数 IsrFrmDoneCnt frame done类型的irq总数 IsrBufFullCnt buffer full类型的irq总数 IsrSliceDoneCnt slice done的isr 总数 IsrRingFullCnt ring buffer full类型的irq总数 IsrReEncCnt 重编码类型的irq总数 IsrTimeoutCnt 超时的isr总数 IsrDuringJpeResetCnt JPEG reset期间isr总数 IsrOtherCnt other类型的irq总数 MaxTaskCnt 支持同时处理的最多task个数 WorkingTaskCnt 正在处理的task个数 FPS 统计该device的输出帧率 MaxChnNum 最大通道数量 SupportRing 是否支持HW RING SupportImi 是否支持HW REALTIME NeedPadding 是否需要MI SYS clear padding CmdqHandle cmdq handle value CmdqBufSize cmdq buffer size CmdqResetCnt cmdq reset次数 ResetTime 设备上一次"大Reset"重启花费的时间 ResetCnt 设备Big Reset次数 MaxW 设备使用最大分辨率的宽度 MaxH 设备使用最大分辨率的高度 CHN info ChnId Channel ID 通道号 bStart 是否已开始启动通道编码 bStartReceive 是否已开始接收图像数据 ReceiveFrameCnt 最近一次调用start接口(MI_VENC_StartRecvPic or MI_VENC_StartRecvPicEx)接收图像数据的帧数,为0表示一直接收图像编码,直到用户停止接收图像编码。 RefMemPA 底层driver要求的硬件物理位址 RefMemSize 底层driver要求的硬件内存大小 AlMemPA 底层driver要求的CPU物理位址 AlMemVA 底层driver要求的CPU虚拟位址 AlMemSize 底层driver要求的CPU内存大小 State 底层处理状态:
typedef enum
{
E_MI_VENC_BUFSTATE_IDLE = 0,
E_MI_VENC_BUFSTATE_ENCODE,
E_MI_VENC_BUFSTATE_DONEWAIT_CMDQ,
E_MI_VENC_BUFSTATE_CHECK,
E_MI_VENC_BUFSTATE_DROP,
E_MI_VENC_BUFSTATE_DROP_FORCEBUF_OVERRIDE,
E_MI_VENC_BUFSTATE_RECOVER,
E_MI_VENC_BUFSTATE_BUF_FULL,
E_MI_VENC_BUFSTATE_MAX
} MI_VENC_BufferState_e;EnPred 代表base层的帧是否被base层其它帧用作参考 base base层的周期,取值范围:(0, +∞) enhance enhance层的周期,取值范围:[0, 255] MaxStreamCnt 最大输出缓存张数 Fps_1s 统计1s内的输出帧率 kbps1s 统计1s内的输出码率 Fps10s 统计10s内的输出帧率 kbps10s 统计10s内的输出码率 QueryCnt APP调用MI_VENC_Query的次数 GetStreamCnt APP调用MI_VENC_GetStream的次数 RlsStreamCnt APP调用MI_VENC_ReleaseStream的次数 PollReadyCnt APP调用select/poll成功的次数 PollFailCnt APP调用select/poll失败的次数 FrmIdx 当前frame的序号:
Pudding之前,取值为:1,2,3,4
Pudding及之后,取值为:1,2,4BufW input yuv buffer的宽 BufH input yuv buffer的高 Stride input yuv buffer的stride ContentW input yuv buffer的有效宽 ContentH input yuv buffer的有效高 RingStartLine ring start line in ring mode RingRealTotalHeight ring real total height in ring mode YBufSize Y buffer size BufSize YUV total buffer size Gradient 前端isp传递过来的梯度值 HskMode handshark状态
1: 回档打开
0: 回档关闭EarlyTerminate Early Terminate状态
1: Early Terminate是使能的。
0: Early Terminate是关闭的。bEnableSwitchFrame bEnableSwitchFrame状态
1: 使能AV1 s-frame编码。
0: 关闭 AV1 s-frame编码。chn pipeline delay in us Flow 流程点
GetStream:app取流Min Buffer产生到该chn对应Flow所经过的最小延时 Max Buffer产生到该chn对应Flow所经过的最大延时 Avg Buffer产生到该chn对应Flow所经过的平均延时 Diff Buffer产生到该chn对应Flow所经过的当前延时 Inputport info ChnId Channel ID 通道号 Width 画面宽度 (pixels) Height 画面高度 (pixels) SrcFrmRate 来源每秒帧数,通常以此作为rate control的参数 MaxW 最大画面宽度 (pixels) MaxH 最大画面高度 (pixels) FrameCnt 已处理的帧数 DropCnt 已丢弃的帧数 BlockCnt 已接收到的,但由于当前还在处理上一张input picture从而rewind的input picture总数。假设最大同时能处理两个input picture,若这两个input picture还没编码执行完,就来了第三帧,那么第三帧会被rewind,BlockCnt++。 Outputport info ChnId Channel ID 通道号 CODEC 使用何种CODEC: H264,H265,JPEG,AV1 Profile Profile值 BufSize 由user设定的 output pool total size (bytes) MinAllocSize 允许分配的最小 output buffer size RefNum 最大参考帧数 bByFrame 后级是否一次取走一帧?
0:否,通常代表按slice取数据 1:是FrameCnt 已编码并release的帧数 DropCnt 已编码但丢掉的帧数 ReEncCnt 重编码的帧数 RingUnreadCnt output pool里还未被取走的帧数 RingTotalCnt output pool里的帧数 UsrLockedCnt user正拿住的帧数 RateCtl Rate Control的算法:CBR/VBR/AVBR/FixQP等 GOP Group of Picture,I帧间隔 QP.I QP of I-Frame,H264/H265/AV1 FixQP下I帧所有宏块Qp值 QP.P QP of P-Frame,H264/H265/AV1 FixQP下P帧所有宏块Qp值 MaxBitrate CBR/VBR/AVBR时,最大的目标码率(bits per second) IPQPDelta 平均QP值与当前I帧QP的差值 MaxQp CBR/VBR/AVBR时,允许的最大QP MinQp CBR/VBR/AVBR时,允许的最小QP MaxIQP CBR/VBR/AVBR时,允许的最大的I帧QP MinIQP CBR/VBR/AVBR时,允许的最小的I帧QP u32MaxIPProp CBR/VBR/AVBR时,最大I/P帧码率的比值 MaxISize I帧的最大size MaxPSize P帧的最大size ChangePos VBR/AVBR开始调整Qp时的码率相对于最大码率的比例 MinStPct AVBR时,静止状态下目标码率的最小百分比 MaxStillQp AVBR时,静止状态最大I帧QP MotionSens AVBR时,根据画面运动程度调整码率的灵敏度 QpMap QPMAP模式下允许用户自由决定码率控制的策略 AbsQp 使用绝对Qp的值 ModeMap 0 decided byhw;1 force skip;2 force intra Qfactor JPEG FixQP下,量化系数 MaxQfactor JPEG CBR下,最大量化系数 MinQfactor JPEG CBR下,最小量化系数 UbrMode H26x UBR下,编码模式:
0: default mode
1: FrameQp, disable bitrate
2: fixed block QpFrameQp H26x UBR下,设置当前帧编码的Qp值 TargetBits H26x UBR下,设置当前帧编码的target bit值 bDropCurrentFrame H26x UBR下,是否drop当前帧 bForceSkip H26x UBR下,当前帧是否编码skip帧
5.2. echo¶
功能 | Dump input buffer |
---|---|
命令 | echo dump_in [ChnId] [num] [dump_path] > /proc/mi_modules/mi_venc/mi_venc[DevID] |
参数说明 | [ChnId]:通道号 [num]:需要dump_in的总张数 [dump_path]:保存文件的路径 [DevID]:设备号,参考表5-1 |
举例 | echo dump_in 0 10 /mnt > /proc/mi_modules/mi_venc/mi_venc0 |
功能 | Dump output stream |
---|---|
命令 | echo dump_out [ChnId] [num] [dump_path] > /proc/mi_modules/mi_venc/mi_venc[DevID] |
参数说明 | [ChnId]:通道号 [num]:需要dump_out的总张数 [dump_path]:保存文件的路径 [DevID]:设备号,参考表5-1 |
举例 | echo dump_out 0 100 /mnt > /proc/mi_modules/mi_venc/mi_venc0 |
功能 | Drop/Release the corresponding channel output task |
---|---|
命令 | echo drop_out [ChnId] [Status] > /proc/mi_modules/mi_venc/mi_venc[DevID] |
参数说明 | [ChnId]:通道号,为a时代表所有通道 [Status]: r : release the corresponding channel output task d : drop the corresponding channel output task [DevID]:设备号,参考表5-1 |
举例 | echo drop_out 0 d > /proc/mi_modules/mi_venc/mi_venc0 说明:drop channel 0 output task echo drop_out 0 r > /proc/mi_modules/mi_venc/mi_venc0 说明:release channel 0 output task echo drop_out a d > /proc/mi_modules/mi_venc/mi_venc0 说明:drop the whole channel output task echo drop_out a r > /proc/mi_modules/mi_venc/mi_venc0 说明: release the whole channel output task |
功能 | Drop/Release the corresponding channel input task |
---|---|
命令 | echo drop_in [ChnId] [Status] > /proc/mi_modules/mi_venc/mi_venc[DevID] |
参数说明 | [ChnId]:通道号,为a时代表所有通道 [Status]: r : release the corresponding channel input task d : drop the corresponding channel input task [DevID]:设备号,参考表5-1 |
举例 | echo drop_in 0 d > /proc/mi_modules/mi_venc/mi_venc0 说明:drop channel 0 input task echo drop_in 0 r > /proc/mi_modules/mi_venc/mi_venc0 说明:release channel 0 input task echo drop_in a d > /proc/mi_modules/mi_venc/mi_venc0 说明:drop the whole channel input task echo drop_in a r > /proc/mi_modules/mi_venc/mi_venc0 说明: release the whole channel input task |
功能 | Dump dump customer qp map |
---|---|
命令 | echo dump_map [ChnId] [dump_times] [dump_path] > /proc/mi_modules/mi_venc/mi_venc0 |
参数说明 | [ChnId]:通道号 [dump_times]:dump 的次数 [dump_path]:保存文件的路径 [DevID]:设备号,参考表5-1 |
举例 | echo dump_map 0 1 /mnt > /proc/mi_modules/mi_venc/mi_venc0 |
功能 | 重新加载modparam参数 |
---|---|
命令 | echo load_modparam > /proc/mi_modules/mi_venc/mi_venc[DevID] |
参数说明 | [DevID]:设备号,参考表5-1 |
举例 | echo load_modparam > /proc/mi_modules/mi_venc/mi_venc0 |