MI VENC API


REVISION HISTORY

Revision No.
Description
Date
3.0
  • Initial release
  • 12/04/2020
    3.1
  • 修改MI_VENC_PackInfo_t增加每张frame的u8FrameQP和 s32PocNum成员变量和u32Gradient成员变量
  • 01/19/2021
    3.2
  • H26x VENC_ParamH26XVbr_t & MI_VENC_ParamH26XCbr_t需要增 加u32MaxISize和u32MaxPSize
  • 01/26/2021
  • Added procfs introduction
  • 08/25/2021
    3.3
  • MI_VENC_H265eNaulType_e类型更改为 MI_VENC_H265eNaluType_e
  • 11/17/2021
    3.4
  • 修改MI_VENC_InputSrcBufferMode_e数据类型增加E_MI_VENC_INPUT_MODE_RING_UNIFIED_DMA成员变量说明
  • 02/18/2022
  • 增加VENC后级接子流时MI_VENC_SetInputSourceConfig使用说明
  • 03/04/2022
    3.5
  • 增加Maruko平台相关介绍
  • 03/24/2022
  • 补充说明VENC级联缩小功能
  • 03/25/2022
  • 补充说明input buffer需要的对齐参数
  • 04/22/2022
    3.6
  • 添加JPEG编码VBR功能
  • 05/31/2022
  • 更改压缩方式的名称
  • 06/27/2022
  • 更新部分平台最大支持的ROI区域个数为16个
  • 07/21/2022
  • 同步Maruko平台中VENC_MAX_CHN_NUM值
  • 09/30/2022
  • Opera平台中MI_VENC_CreateDev接口添加参数及接口调用顺序注意事项
  • 10/14/2022
    3.7
  • 增加Opera平台介绍及修改结构体参数
  • 10/27/2022
  • 更新procfs调试信息
  • 12/01/2022
  • 增加MI_PTR64 u64Reserved变量描述
  • 01/10/2023
    3.8
  • 增加Souffle平台相关介绍
  • 03/13/2023
  • 更新procfs调试信息和优化结构体参数
  • 04/06/2023
  • 新增模块参数说明; 增加load_modparam procfs命令使用说明
  • 04/12/2023
  • 补充E_MI_SYS_BIND_TYPE_REALTIME绑定时相关限制说明
  • 05/05/2023
  • 增加帧率控制使用说明
  • 05/06/2023
  • procfs以及接口介绍中补充AV1编码使用
  • 06/05/2023
  • 补充SAD功能集成到VENC AVBR模式说明
  • 06/12/2023
  • 更新部分参数取值范围以及默认值
  • 06/13/2023
    3.9
  • 添加AV1编码OBU类型和Early Terminate功能说明
  • 06/21/2023
    3.10
  • 添加AV1编码s-frame帧类型说明
  • 添加MI_VENC_StopRecvPic接口调用说明
  • procfs中添加bEnableSwitchFrame字段说明
  • 07/03/2023
  • 添加Souffle在E_MI_VENC_INPUT_MODE_RING_UNIFIED_DMA模式下只支持一张ring buffer描述
  • 修改相对/绝对roi相关描述
  • 07/25/2023
    3.11
  • 添加H264/H265编码UBR功能
  • 08/07/2023
  • MI_VENC_ParamVbr_t和MI_VENC_ParamAvbr_t新增u32MaxQp和u32MinQp
  • 11/17/2023
    3.12
  • 增加Iford平台相关介绍
  • 删除旧平台相关说明
  • 增加编码CVBR功能说明
  • 增加去呼吸效应功能说明
  • 增加支持输出YUV功能说明
  • 12/08/2023
    3.13
  • 增加Ifado平台相关介绍
  • 03/12/2024
    3.14
  • 修改Ifado最大支持通道数
  • 修改MI_VENC_RcAttr_t,MI_VENC_RcMode_e,MI_VENC_RcParam_t相关说明
  • 06/24/2024
    3.15
  • 修改modparam说明
  • 08/05/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
    Ifado Y Y Y N

    1.2. 编码流程

    编码流程包含了输入图像的接收,对输入图像的编码,和编码后码流的输出等过程。

    H.264/H.265/AV1的输入图像YUV格式只支持NV12,JPEG的输入图像YUV格式支持NV12或YUYV422。本模块的输入源包括以下两类:

    1. APP直接注入图像数据到编码模块。

    2. 绑定的前级模块发送图像数据到编码模块。

    如下图所示:

    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.2.5. Ifado编码缩略图

    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
    Ifado 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之间会实现比特的累积与补偿。

      主要步骤如下:

      1. 将用户设定的Fps/Gop/Bitrate转换成每个Gop的Bits;

      2. I/P区分处理,按照Gop Bits以及分辨率计算Bpp(BitPerPixel);

      3. 通过码率控制模型,将Bpp映像到Frame Qp;

      4. HW在Frame Qp基础上通过画面纹理复杂度等信息进一步调整MB/CU Qp;

      5. 编码结束后更新码率控制模型,以达到整个序列的不断稳定,同时累积Bit误差, 用于后续帧Bit分配的微调;

      6. 整个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,编码码率已达到最大值,图像质量最好。

      具体流程如下:

      1. 将用户设定的Fps/Gop/MaxBitrate/ChangePos以及Resolution转换成序列的初始质量基准设定序列起始Qp。

      2. HW在Frame Qp基础上通过画面纹理复杂度等信息进一步调整MB/CU Qp。

      3. 编码完后更新码率控制模型。

      4. 更新整体序列的质量。

      5. 根据当前期望的Bit与实际编码的Bit差计算偏差系数Deviation以及决定是否可以提高或者降低质量。

      6. 通过偏差系数以及两个质量系数计算当前帧的目标质量。

      7. 将目标质量映射为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(), 详情见以下接口:

        OnVencUserRcInit

        OnVencUserRcDeinit

        OnVencUserRcAttrChange

        OnVencUserRcCalc

    • CVBR

      CVBR(Constrained Variable Bit Rate)约束可变比特率,简单场景会在保证画质的同时节省码率,复杂运动场景时,利用简单场景节省的码率尽可能地提高图像质量,达到同时兼顾码率和图像质量的目的。以H.264为例,用户可设置码率参数MaxBitRate、LongTermMaxBitRate、LongTermMinBitRate和周期参数ShortTermStatsTime、LongTermStatsTime,具体可参考MI_VENC_AttrCvbr_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/Ifado平台上由于不支持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
    Ifado 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 不支持 不支持
    Ifado 不支持 不支持

    E_MI_SYS_BIND_TYPE_REALTIME绑定并且为EMI mode时,不同Chip和输入图像YUV格式支持的最大宽度如下:

    Chip

    Input Yuv Format

    NV12 YUYV422
    Souffle 8192 8192
    Iford 3840 3840
    Ifado 2560 2560

    配置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 不支持设定,默认一张
    Ifado H.264/H.265 1/4张Buffer N
    JPEG N 不支持设定,默认一张

    注意事项:

    1. 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保持一致。

    2. VENC最后一级输出YUV支持用户Get/Put,此时用户需要配置独立的YUV输出Buffer

    3. 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
    Ifado 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. 多进程支持的场景说明

    支援的场景:

    1. 支援相同device,不同channel的多进程编码。

      例如:

      process1创建了device0,channel0编码。process2创建了device0,channel1编码。process3创建了device0,channel2编码。

    2. 支援不同device的多进程编码。

      例如:

      process1创建了device0,channel0编码。process2创建了device8,channel0编码。process3创建了device9,channel0编码。

    3. 支援在编码进程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中进行销毁。

    不支援的场景:

    1. 不支援在进程2中对进程1创建的编码通道进行送流和取流。

      例如:

      process1创建了device0,channel0,但是不做送流取流。process2对device0,channel0进行送流和取流操作。

    2. 进程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 Ifado
      use_ring_ref 是否开启帧节省模式, 开启后不支持超大帧重编 1 1 1 1 1
      max_chn_num 同一设备可创建的最大通道数 64 64 64 64 8
      s32PreloadChnFlag DualOs下H264/5开启码流预先缓存的开关,每个编码通道号对应Bit置1为开启 0 0 0 0 0
      u32Chn0PreloadBufSize DualOs下H264/5开启码流预先缓存后编码通道号0对应的输出缓存大小,不设置或设置为0时内部会根据码率参数和预先缓存帧数动态计算 0 0 0 0 0
      u32Chn1PreloadBufSize DualOs下H264/5开启码流预先缓存后编码通道号1对应的输出缓存大小,不设置或设置为0时内部会根据码率参数和预先缓存帧数动态计算 0 0 0 0 0
      u32Chn2PreloadBufSize DualOs下H264/5开启码流预先缓存后编码通道号2对应的输出缓存大小,不设置或设置为0时内部会根据码率参数和预先缓存帧数动态计算 0 0 0 0 0
      s32JpePreloadChnFlag DualOs下JPEG开启码流预先缓存的开关,每个编码通道号对应Bit置1为开启 0 0 0 0 0
      u32JpeChn0PreloadBufSize DualOs下JPEG开启码流预先缓存后编码通道号0对应的输出缓存大小,不设置或设置为0时内部会根据码率参数和预先缓存帧数动态计算 0 0 0 0 0
      u32JpeChn1PreloadBufSize DualOs下JPEG开启码流预先缓存后编码通道号1对应的输出缓存大小,不设置或设置为0时内部会根据码率参数和预先缓存帧数动态计算 0 0 0 0 0
      u32JpeChn2PreloadBufSize DualOs下JPEG开启码流预先缓存后编码通道号2对应的输出缓存大小,不设置或设置为0时内部会根据码率参数和预先缓存帧数动态计算 0 0 0 0 0
      ven_clock H264/5硬件时钟,不设置或设置为0时内部会使用默认值 0 0 0 0 0
      jpe_clock JPEG编码硬件时钟,不设置或设置为0时内部会使用默认值 0 0 0 0 0
      VenMiuPChn H264/5编码通道数据保护的总通道数,根据实际需要编码的最大通道数设置,不设置或设置为0时内部会使用默认值 0 0 0 0 0

    • 模块参数可通过文件modparam.json进行配置和修改,该文件一般放在板端/config目录下。参数配置可参照如下方式:

      "E_MI_MODULE_ID_VENC" :
      {
          "use_ring_ref" : 0,
          "max_chn_num" : 4,
      }
      
    • 模块参数也可通过echo命令导入修改后的配置, 流程如下:

      • 用户需在调用VENC相关api之前进行设置;

      • 新建json文件, 举例需要修改use_ring_ref为0, 新建文件命名为use_ring_ref.json, 内容如下:

        "E_MI_MODULE_ID_VENC" :
        {
            "use_ring_ref": 0,
        }
        
      • 使用echo命令导入json配置,参见procfs load_modparam命令使用说明。

        echo use_ring_ref.json > /proc/mi_modules/mi_common/modparam
        
        echo load_modparam > /proc/mi_modules/mi_venc/mi_venc0
        
    • 注意

      • insmod ko时参数初始化完成。

      • 发送load_param命令时重新初始化模块参数。


    2. API参考


    API 名 功能
    MI_VENC_CreateDev 创建venc设备
    MI_VENC_DestroyDev 销毁venc设备
    MI_VENC_CreateChn 创建编码通道
    MI_VENC_DestroyChn 销毁编码通道
    MI_VENC_ResetChn 复位编码通道
    MI_VENC_StartRecvPic 开启编码通道接收输入图像
    MI_VENC_StartRecvPicEx 开启编码通道接收输入图像,超出指定的帧数后自动停止接收图像
    MI_VENC_StopRecvPic 停止编码通道接收输入图像
    MI_VENC_Query 查询编码通道状态
    MI_VENC_SetChnAttr 设置编码通道的编码属性
    MI_VENC_GetChnAttr 获取编码通道的编码属性
    MI_VENC_GetStream 获取编码码流
    MI_VENC_ReleaseStream 释放码流缓存
    MI_VENC_InsertUserData 插入用户数据
    MI_VENC_SetMaxStreamCnt 设置最大码流缓存帧数
    MI_VENC_GetMaxStreamCnt 获取最大码流缓存帧数
    MI_VENC_RequestIdr 请求IDR帧
    MI_VENC_EnableIdr 使能IDR帧
    MI_VENC_SetH264IdrPicId 设置IDR帧的idr_pic_id
    MI_VENC_GetH264IdrPicId 获取IDR帧的idr_pic_id
    MI_VENC_GetFd 获取编码通道对应的设备文件句柄
    MI_VENC_CloseFd 关闭编码通道对应的设备文件句柄
    MI_VENC_SetRoiCfg 设置编码通道的感兴趣区域编码配置
    MI_VENC_GetRoiCfg 获取编码通道的感兴趣区域编码配置
    MI_VENC_SetRoiBgFrameRate 设置编码通道非感兴趣区域的帧率配置
    MI_VENC_GetRoiBgFrameRate 获取编码通道非感兴趣区域的帧率配置
    MI_VENC_SetH264SliceSplit 设置H.264编码的slice分割配置
    MI_VENC_GetH264SliceSplit 获取H.264编码的slice分割配置
    MI_VENC_SetH264InterPred 设置H.264编码的帧间预测配置
    MI_VENC_GetH264InterPred 获取H.264编码的帧间预测配置
    MI_VENC_SetH264IntraPred 设置H.264编码的帧内预测配置
    MI_VENC_GetH264IntraPred 获取H.264编码的帧内预测配置
    MI_VENC_SetH264Trans 设置H.264编码的变换、量化配置
    MI_VENC_GetH264Trans 获取H.264编码的变换、量化配置
    MI_VENC_SetH264Entropy 设置H.264编码的熵编码配置
    MI_VENC_GetH264Entropy 获取H.264编码的熵编码配置
    MI_VENC_SetH265InterPred 设置H.265编码的帧间预测配置
    MI_VENC_GetH265InterPred 获取H.265编码的帧间预测配置
    MI_VENC_SetH265IntraPred 设置H.265编码的帧内预测配置
    MI_VENC_GetH265IntraPred 获取H.265编码的帧内预测配置
    MI_VENC_SetH265Trans 设置H.265编码的变换、量化配置
    MI_VENC_GetH265Trans 获取H.265编码的变换、量化配置
    MI_VENC_SetH264Dblk 设置H.264编码的deblocking配置
    MI_VENC_GetH264Dblk 获取H.264编码的deblocking配置
    MI_VENC_SetH265Dblk 设置H.265编码的deblocking配置
    MI_VENC_GetH265Dblk 获取H.265编码的deblocking配
    MI_VENC_SetH264Vui 设置H.264编码的VUI配置
    MI_VENC_GetH264Vui 获取H.264编码的VUI配置
    MI_VENC_SetH265Vui 设置H.265编码的VUI配置
    MI_VENC_GetH265Vui 获取H.265编码的VUI配置
    MI_VENC_SetH265SliceSplit 设置H.265编码的slice分割配置
    MI_VENC_GetH265SliceSplit 获取H.265编码的slice分割配置
    MI_VENC_SetJpegParam 设置JPEG编码的参数集合
    MI_VENC_GetJpegParam 获取JPEG编码的参数集合
    MI_VENC_SetRcParam 设置通道码率控制高级参数
    MI_VENC_GetRcParam 获取通道码率控制高级参数
    MI_VENC_SetRefParam 设置H.264/H.265/AV1编码通道高级跳帧参考参数
    MI_VENC_GetRefParam 获取H.264/H.265/AV1编码通道高级跳帧参考参数
    MI_VENC_SetCrop 设置VENC的裁剪属性
    MI_VENC_GetCrop 获取VENC的裁剪属性
    MI_VENC_SetFrameLostStrategy 设置瞬时码率超出阈值时丢帧策略的配置
    MI_VENC_GetFrameLostStrategy 获取瞬时码率超出阈值时丢帧策略的配置
    MI_VENC_SetSuperFrameCfg 设置超大帧处理配置
    MI_VENC_GetSuperFrameCfg 获取超大帧处理配置
    MI_VENC_SetRcPriority 设置码率控制的优先级类型
    MI_VENC_GetRcPriority 获取码率控制的优先级类型
    MI_VENC_AllocCustomMap 分配智能编码所用的Custom Map的内存
    MI_VENC_ApplyCustomMap 应用已经配置的Custom Map
    MI_VENC_GetLastHistoStaticInfo 获取最新的图像帧编码后的相关输出信
    MI_VENC_ReleaseHistoStaticInfo 释放保存的最新的图像帧编码后的相关输出信息占用的内存
    MI_VENC_SetAdvCustRcAttr 设置自定义的高级码控相关属性配置
    MI_VENC_SetInputSourceConfig 设置H.264/H.265/AV1的输入源配置信息
    MI_VENC_SetSmartDetInfo 设置智能侦测算法相关的统计信息
    MI_VENC_SetIntraRefresh 设置H.264/H.265/AV1的P帧刷新Islice
    MI_VENC_GetIntraRefresh 获取H.264/H.265/AV1的Intra Refresh参数
    MI_VENC_DupChn 同步VENC通道状态
    MI_VENC_SetAv1TileSplit 设置AV1编码的Tile分割配置
    MI_VENC_GetAv1TileSplit 获取AV1编码的Tile分割配置
    MI_VENC_SetAv1Dblk 设置AV1编码的deblocking配置
    MI_VENC_GetAv1Dblk 获取AV1编码的deblocking配置
    MI_VENC_SetAv1Vui 设置AV1编码的VUI配置
    MI_VENC_GetAv1Vui 获取AV1编码的VUI配置
    OnVencUserRcInit H264/H265/AV1编码UBR码控初始化
    OnVencUserRcDeinit H264/H265/AV1编码UBR码控反初始化
    OnVencUserRcAttrChange 设置H264/H265/AV1编码UBR码控通道属性
    OnVencUserRcCalc H264/H265/AV1编码UBR码控计算后参数设置
    MI_VENC_SetDeBreathCfg 设置H264/H265编码去呼吸效应参数配置
    MI_VENC_GetDeBreathCfg 获取H264/H265编码去呼吸效应参数配置
    MI_VENC_SetOutputPortParam 设置输出Port YUV的参数配置
    MI_VENC_GetOutputPortParam 获取输出Port YUV的参数配置
    MI_VENC_EnableOutputPort 使能输出Port
    MI_VENC_DisableOutputPort 关闭输出Port

    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

      Base Profile Main Profile High Profile Main Profile Base 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
      Ifado 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
      Ifado MIN_WIDTHxMIN_HEIGHT 114x114 114x114 16x16 None
      MAX_WIDTHxMAX_HEIGHT 2560x2560 2560x2560 2560x2560 None
      MIN_ALIGN 8x2 8x2 8x2 None

      不同Chip支持的最大VENC_MAX_CHN_NUM 规格如下表所示:

      芯片 最大值
      Maruko 64
      Opera 32
      Souffle 64
      Iford 64
      Ifado 8
    • 注意

      • 调用该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_StartRecvPicMI_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包含四个主要的信息:

        1. u32LeftPics 表示待编码的帧个数。在复位通道前,可以通过查询是否还有图像待编码来决定复位时机,防止复位时将可能需要编码的帧清理出去。

        2. u32LeftStreamBytes 表示码流buffer中所有未读取数据的byte数。在复位通道前,可以通过查询是否还有码流没有被读取来决定复位时机,防止复位时将可能需要的码流清理出去。

        3. u32LeftStreamFrames 表示码流buffer中还未读取的帧数。在复位通道前,可以通过查询是否还有图像的码流没有被取走来决定复位时机,防止复位时将可能需要的码流清理出去。

        4. 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个部分:

        1. 码流包个数u32PackCount指定pstPack中MI_VENC_Pack_t的个数。一张完整的帧是由u32PackCount个码流包构成,需要通过调用MI_VENC_Query中的u32CurPacks获得。

        2. 码流包信息指针pstPack指向一组MI_VENC_Pack_t的内存空间,该空间由调用者分配。大小为u32PackCount x sizeof(MI_VENC_Pack_t)。

        3. 序列号u32Seq表示帧序列号。

        4. 码流特征信息stH264Info/stJpegInfo/stH265Info/stAv1Info,数据类型为联合体,包含了不同编码协议对应的码流特征信息,码流特征信息的输出用于支持用户的上层应用。

      • 此接口应当和MI_VENC ReleaseStream 配对起来使用,用户获取码流后系统不会主动释放码流缓存,需要用户及时释放已经获取的码流缓存,否则可能会导致码流buffer满,影响编码器编码,并且用户必须按先获取先释放的顺序释放已经获取的码流缓存。

      • 建议用户使用select方式获取码流,流程如下:

        1. 调用MI_VENC_Query函数查询编码通道状态;

        2. 确保u32CurPacks和u32LeftStreamFrames同时大于0;

        3. 调用malloc分配u32CurPacks个包信息结构体;

        4. 调用MI_VENC_GetStream获取编码码流;

        5. 调用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 是否删除SDK内已编码好但未被用户取走的帧:
      0: 不删除;
      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,频繁调用会影响码流帧率和码率的稳定,使用时需注意。

      • bInstant为1时因为会删除SDK内已编码好但未被用户取走的帧,用户会看到瞬间丢帧现象。

    • 举例

      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_EnableIdr

    • 功能

      是否使能IDR帧。

    • 语法

      MI_S32 MI_VENC_EnableIdr(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_BOOL bEnableIdr);
      
    • 参数

      参数名称 描述 输入/输出
      VeDev 编码设备号。 输入
      VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM) 输入
      bEnableIDR 是否使能的标志 输入
    • 返回值

      • MI_SUCCESS:成功

      • 非MI_SUCCESS:失败,参照错误码

    • 依赖

      • 头文件:mi_venc.h, mi_venc_datatype.h

      • 库文件: libmi_venc.a/libmi_venc.so

    • 注意

      • 此接口暂不支持。

    2.19. MI_VENC_SetH264IdrPicId

    • 功能

      设置IDR帧的idr_pic_id属性。

    • 语法

      MI_S32 MI_VENC_SetH264IdrPicId(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_H264IdrPicIdCfg_t *pstH264eIdrPicIdCfg);
      
    • 参数

      参数名称 描述 输入/输出
      VeDev 编码设备号。 输入
      VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM) 输入
      pstH264IdrPicIdCfg idr_pic_id的参数指针 输入
    • 返回值

      • MI_SUCCESS:成功

      • 非MI_SUCCESS:失败,参照错误码

    • 依赖

      • 头文件:mi_venc.h, mi_venc_datatype.h

      • 库文件: libmi_venc.a/libmi_venc.so

    • 注意

      • 此接口暂不支持。

    2.20. MI_VENC_GetH264IdrPicId

    • 功能

      获取IDR帧的idr_pic_id的配置属性。

    • 语法

      MI_S32 MI_VENC_GetH264IdrPicId(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_H264IdrPicIdCfg_t *pstH264eIdrPicIdCfg);
      
    • 参数

      参数名称 描述 输入/输出
      VeDev 编码设备号。 输入
      VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM) 输入
      pstH264eIdrPicIdCfg idr_pic_id的参数指针 输出
    • 返回值

      • MI_SUCCESS:成功

      • 非MI_SUCCESS:失败,参照错误码

    • 依赖

      • 头文件:mi_venc.h, mi_venc_datatype.h

      • 库文件: libmi_venc.a/libmi_venc.so

    • 注意

      • 此接口暂不支持。

    2.21. 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.22. 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.23. 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]
      Ifado 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个参数决定:

        1. u32Index:假设系统最大支持每个通道可设置16个ROI区域,系统内部将按照0~15的索引号对ROI区域进行管理,u32Index表示的用户设置ROI的索引号。ROI区域之间可以互相叠加,且当发生叠加时,ROI区域之间的优先级按照索引号0~15依次提高。

        2. bEnable: 指定当前的ROI区域是否使能。

        3. bAbsQp: 指定当前的ROI区域采用绝对QP方式或是相对QP。同一编码通道如果使用到多个ROI区域,多个ROI区域的bAbsQp必须保持一致,要么全部为绝对QP方式,要么全部为相对QP方式,不允许混用。

        4. s32Qp: 当bAbsQp为true时,s32Qp表示ROI区域内部的所有宏块采用的QP值,当bAbsQp为false时,s32Qp表示ROI区域内部的所有宏块采用的相对QP值。

        5. 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.24. 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.25. 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.26. 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.27. 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 分割属性主要由两个参数决定:

        1. bSplitEnable: 当前帧是否进行slice分割。

        2. u32SliceRowCount: 每个slice占图像宏块行数。Slice按照宏块行进行分割,且当编码至图像的最后几行,不足u32SliceRowCount时,剩余的宏块行被划分为一个slice。

      • Souffle/Iford/Ifado平台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.28. 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.29. MI_VENC_SetH264InterPred

    • 功能

      设置H.264协议编码通道的帧间预测属性。

    • 语法

      MI_S32 MI_VENC_SetH264InterPred(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_ParamH264InterPred_t *pstH264InterPred);
      
    • 参数

      参数名称 描述 输入/输出
      VeDev 编码设备号。 输入
      VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM)。 输入
      pstH264InterPred H.264协议编码通道的帧间预测配置指针。 输入
    • 返回值

      • MI_SUCCESS:成功

      • 非MI_SUCCESS:失败,参照错误码

    • 依赖

      • 头文件:mi_venc.h, mi_venc_datatype.h

      • 库文件: libmi_venc.a/libmi_venc.so

    • 注意

      • 此接口暂不支持。

    2.30. MI_VENC_GetH264InterPred

    • 功能

      获取H.264协议编码通道的帧间预测属性。

    • 语法

      MI_S32 MI_VENC_GetH264InterPred(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_ParamH264InterPred_t *pstH264InterPred);
      
    • 参数

      参数名称 描述 输入/输出
      VeDev 编码设备号。 输入
      VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM)。 输入
      pstH264InterPred H.264协议编码通道的帧间预测参数指针。 输出
    • 返回值

      • MI_SUCCESS:成功

      • 非MI_SUCCESS:失败,参照错误码

    • 依赖

      • 头文件:mi_venc.h, mi_venc_datatype.h

      • 库文件: libmi_venc.a/libmi_venc.so

    • 注意

      • 此接口暂不支持。

    2.31. MI_VENC_SetH264IntraPred

    • 功能

      设置H.264协议编码通道的帧内预测属性。

    • 语法

      MI_S32 MI_VENC_SetH264IntraPred(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_ParamH264IntraPred_t *pstH264IntraPred);
      
    • 参数

      参数名称 描述 输入/输出
      VeDev 编码设备号。 输入
      VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM)。 输入
      pstH264IntraPred H.264协议编码通道的帧内预测配置指针。 输入
    • 返回值

      • MI_SUCCESS:成功

      • 非MI_SUCCESS:失败,参照错误码

    • 依赖

      • 头文件:mi_venc.h, mi_venc_datatype.h

      • 库文件: libmi_venc.a/libmi_venc.so

    • 注意

      • 此接口暂不支持。

    2.32. MI_VENC_GetH264IntraPred

    • 功能

      获取H.264协议编码通道的帧内预测属性。

    • 语法

      MI_S32 MI_VENC_GetH264IntraPred(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_ParamH264IntraPred_t *pstH264IntraPred);
      
    • 参数

      参数名称 描述 输入/输出
      VeDev 编码设备号。 输入
      VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM)。 输入
      pstH264IntraPred H.264协议编码通道的帧内预测参数指针。 输出
    • 返回值

      • MI_SUCCESS:成功

      • 非MI_SUCCESS:失败,参照错误码

    • 依赖

      • 头文件:mi_venc.h, mi_venc_datatype.h

      • 库文件: libmi_venc.a/libmi_venc.so

    • 注意

      • 此接口暂不支持。

    2.33. 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协议编码通道的变换、量化的配置。

      • 变换、量化属性主要由三个参数组成:

        1. u32IntraTransMode: 帧内预测宏块的变换属性。u32IntraTransMode=0表示支持对帧内预测宏块支持4x4变换和8x8变换;u32IntraTransMode=1表示只支持对帧内预测宏块支持4x4变换;u32IntraTransMode=2表示只支持对帧内预测宏块支持8x8变换。只有在编码通道协议为high profile时,才能选择8x8变换,即在base和main profile下,系统只支持u32IntraTransMode=1的配置。

        2. u32InterTransMode: 帧间预测宏块的变换属性。u32InterTransMode=0表示支持对帧间预测宏块支持4x4变换和8x8变换;u32InterTransMode=1表示只支持对帧间预测宏块支持4x4变换;u32InterTransMode=2表示只支持对帧间预测宏块支持8x8变换。只有在编码通道协议为high profile时,才能选择8x8变换,即在base和main profile下,系统只支持u32InterTransMode=1的配置。

        3. 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.34. 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.35. 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协议编码通道的熵编码的配置。

      • 熵编码属性主要由两个参数组成:

        1. u32EntropyEncModeI: I帧的熵编码方式,u32EntropyEncModeI=0表示I帧使用cavlc编码,u32EntropyEncModeI=1表示I帧使用cabac编码方式。

        2. u32EntropyEncModeP: P帧的熵编码方式,u32EntropyEncModeP=0表示P帧使用cavlc编码,u32EntropyEncModeP=1表示P帧使用cabac编码方式。

      • I帧的熵编码方式与P帧的熵编码方式可以分别设置。

      • Base profile不支持cabac编码方式,仅支持cavlc编码方式,main profile和high profile支持cabac编码方式和cavlc编码方式。

      • Cabac编码方式相对于cavlc编码方式,需要更大的计算量,同时消耗更少的码率,压缩效率更好。

      • 此接口属于高级接口,用户可以选择性调用,不建议调用,系统会有默认值。系统会根据不同的profile设置默认参数。不同profile下系统默认熵编码参数如下表:

        Profile u32EntropyEncModeI u32EntropyEncModeP
        Base 0 0
        Main/High 1 1
      • 本接口可在编码通道创建之后,编码通道销毁之前设置。本接口在编码过程中被调用时,等到下一个I帧时生效。

      • 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。

      • 建议用户在调用此接口之前,先调用MI_VENC_GetH264Entropy接口,获取当前编码通道的Entropy配置,然后再进行设置。

      • Iford/Ifado不支持此接口

    • 举例

      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.36. 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/Ifado不支持此接口

    • 举例

      请参见MI_VENC_SetH264Entropy的举例。


    2.37. MI_VENC_SetH265InterPred

    • 功能

      设置H.265协议编码通道的帧间预测属性。

    • 语法

      MI_S32 MI_VENC_SetH265InterPred(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_ParamH265InterPred_t *pstH265InterPred);
      
    • 参数

      参数名称 描述 输入/输出
      VeDev 编码设备号。 输入
      VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM)。 输入
      pstH265InterPred H.265协议编码通道的帧间预测配置指针。 输入
    • 返回值

      • MI_SUCCESS:成功

      • 非MI_SUCCESS:失败,参照错误码

    • 依赖

      • 头文件:mi_venc.h, mi_venc_datatype.h

      • 库文件: libmi_venc.a/libmi_venc.so

    • 注意

      • 此接口暂不支持。

    2.38. MI_VENC_GetH265InterPred

    • 功能

      获取H.265协议编码通道的帧间预测属性。

    • 语法

      MI_S32 MI_VENC_GetH265InterPred(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_ParamH265InterPred_t *pstH265InterPred);
      
    • 参数

      参数名称 描述 输入/输出
      VeDev 编码设备号。 输入
      VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM)。 输入
      pstH265InterPred H.265协议编码通道的帧间预测参数指针。 输出
    • 返回值

      • MI_SUCCESS:成功

      • 非MI_SUCCESS:失败,参照错误码

    • 依赖

      • 头文件:mi_venc.h, mi_venc_datatype.h

      • 库文件: libmi_venc.a/libmi_venc.so

    • 注意

      • 此接口暂不支持。

    2.39. MI_VENC_SetH265IntraPred

    • 功能

      设置H.265协议编码通道的帧内预测属性。

    • 语法

      MI_S32 MI_VENC_SetH265IntraPred(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_ParamH265IntraPred_t *pstH265IntraPred);
      
    • 参数

      参数名称 描述 输入/输出
      VeDev 编码设备号。 输入
      VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM)。 输入
      pstH265IntraPred H.265协议编码通道的帧内预测配置指针。 输入
    • 返回值

      • MI_SUCCESS:成功

      • 非MI_SUCCESS:失败,参照错误码

    • 依赖

      • 头文件:mi_venc.h, mi_venc_datatype.h

      • 库文件: libmi_venc.a/libmi_venc.so

    • 注意

      • 此接口暂不支持。

    2.40. MI_VENC_GetH265IntraPred

    • 功能

      获取H.265协议编码通道的帧内预测属性。

    • 语法

      MI_S32 MI_VENC_GetH265IntraPred(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_ParamH265IntraPred_t *pstH265IntraPred);
      
    • 参数

      参数名称 描述 输入/输出
      VeDev 编码设备号。 输入
      VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM)。 输入
      pstH265IntraPred H.265协议编码通道的帧内预测参数指针。 输出
    • 返回值

      • MI_SUCCESS:成功

      • 非MI_SUCCESS:失败,参照错误码

    • 依赖

      • 头文件:mi_venc.h, mi_venc_datatype.h

      • 库文件: libmi_venc.a/libmi_venc.so

    • 注意

      • 此接口暂不支持。

    2.41. 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协议编码通道的变换、量化的配置。

      • 变换、量化属性主要由三个参数组成:

        1. u32IntraTransMode: 帧内预测宏块的变换属性。u32IntraTransMode=0表示支持对帧内预测宏块支持4x4变换和8x8变换;u32IntraTransMode=1表示只支持对帧内预测宏块支持4x4变换;u32IntraTransMode=2表示只支持对帧内预测宏块支持8x8变换。只有在编码通道协议为high profile时,才能选择8x8变换,即在base和main profile下,系统只支持u32IntraTransMode=1的配置。

        2. u32InterTransMode: 帧间预测宏块的变换属性。u32InterTransMode=0表示支持对帧间预测宏块支持4x4变换和8x8变换;u32InterTransMode=1表示只支持对帧间预测宏块支持4x4变换;u32InterTransMode=2表示只支持对帧间预测宏块支持8x8变换。只有在编码通道协议为high profile时,才能选择8x8变换,即在base和main profile下,系统只支持u32InterTransMode=1的配置。

        3. 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.42. 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.43. 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属性主要由三个参数组成:

        1. disable_deblocking_filter_idc: 具体含义请参见H.264协议。

        2. Slice_alpha_c0_offset_div2: 具体含义请参见H.264协议。

        3. 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.44. 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.45. 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属性主要由三个参数组成:

        1. disable_deblocking_filter_idc: 具体含义请参见H.265协议关于slice_deblocking_filter_disabled_flag的解释。

        2. slice_tc_offset_div2: 具体含义请参见H.265协议。

        3. 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.46. 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.47. 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.48. 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.49. 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.50. 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.51. 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分割属性主要由两个参数决定:

        1. bSplitEnable: 当前帧是否进行slice分割。

        2. u32SliceRowCount: 每个slice占图像宏块行数。slice按照CTU行进行分割,且当编码至图像的最后几行,不足u32SliceRowCount时,剩余的宏块行被划分为一个slice。

      • H265编码开启Slice分割时,u32SliceRowCount需设置为偶数。

      • 本接口属于高级接口,用户可以选择性调用,建议不调用,系统默认bSplitEnable为false。本接口可在编码通道创建之后,编码通道销毁之前设置。此接口在编码过程中被调用时,等到下一帧时生效。

      • 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。

      • 建议用户在调用此接口之前,先调用MI_VENC_GetH265SliceSplit接口,获取当前通道的slicesplit配置,然后再进行设置。

      • H.265编码每帧最大支持切分为16个Slice。

    • 举例

      请参见MI_VENC_SetH264SliceSplit的举例。


    2.52. 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.53. 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个参数组成:

        1. u32Qfactor: 量化表因子范围为[1,99],u32Qfactor越大,量化表中的量化系数越小,得到的图像质量会更好,同时,编码压缩率更低。同理u32Qfactor越小,量化表中的量化系数越大,得到的图像质量会更差,同时,编码压缩率更高。具体的u32Qfactor与量化表的关系请见RFC2435标准。

        2. au8YQt [64], au8CbCrQt [64]: 这两个参数对应两个量化表空间,用户可以通过这两个参数设置用户的量化表。

        3. u32McuPerEcs: 每个Ecs中包含多少Mcu。系统模式u32MCUPerECS=0,表示当前帧的所有的MCU被编码为一个ECS。u32MCUPerECS的最小值为0,最大值不超过(picwidth+15)>>4x(picheight+15)>>4x2。此参数暂不支持。

      • 本接口可在编码通道创建之后,编码通道销毁之前设置。本接口在编码过程中被调用时,等到下一个帧编码时生效。

      • 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。

      • 建议用户在调用此接口之前,先调用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;
          }
          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.54. 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.55. 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 不支持
      Ifado 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],u32RowQpDelta暂不支持

      • CBR参数如下:

        1. u32MaxIPProp:CBR高级参数,表示的是最大IP比例。IP比例表示I帧和P帧平均值的Bits数比例。主要用于静止复杂场景时限制I帧Size。当u32MaxIPProp被调整较小时,会导致I帧模糊,P帧清晰。在正常情况下不建议对IP大小比进行约束,避免带来呼吸效应和码率波动,默认u32MaxIPProp为0,表示不生效。在对I帧大小有约束的场景时,可以根据对I帧大小波动的依赖来设置u32MaxIPProp的值。

        2. u32MaxQp&u32MinQp:CBR高级参数,表示的是P帧的最大QP和最小QP。这个钳位效果最强烈,所有其他对图像QP的调整,如宏块级码率控制,最终都会被约束到这个最大QP和最小QP。默认值u32MinQp为12,u32MaxQp为48。在对质量无特殊需求下,建议不更改此组参数。

        3. u32MaxIQp&u32MinIQp:CBR高级参数,表示的I帧的最大QP和最小QP。这个钳位效果最强烈,所有其他对图像QP的调整,如宏块级码率控制,最终都会被约束到这个最大QP和最小QP。默认值u32MinQp为12,u32MaxQp为48。在对质量无特殊需求下,建议不更改此组参数。

        4. s32IPQPDelta:CBR高级参数,表示的是平均QP值与当前I帧QP的差值,此参数可为正负值,用于调整I帧过大和呼吸效应。系统默认值为0,增大此值,I帧变清晰,减弱呼吸效应。

        5. u32MaxISize&u32MaxPSize:CBR高级参数,表示的是SDK内部在编码当前帧前尝试限制的Size大小。系统默认值为0,表示不生效。

      • VBR 参数如下:

        1. s32ChangePos: VBR高级参数,表示的是VBR开始调整QP时码率与最大码率的比值。系统默认为80,如果在内容变化剧烈且要求不超出最大码率的场景,建议减小此值,同时增大s32IPQPDelta,但码率控制稳定时码率偏小和质量偏差。

        2. 其它参数同CBR

      • AVBR 参数如下:

        1. u32MinStillPercent: AVBR高级参数,表示的是AVBR静态场景时码率相对设定码率的百分比。系统默认为35,静态场景时如果画质较差建议增加此值,此时会占用更多的码率来编码。

        2. u32MaxStillQp: AVBR高级参数,静态场景时的最大QP值,用于保证静态场景时的画质,此参数暂不支持设定。

        3. u32MotionSensitivity: AVBR高级参数,表示的是运动敏感度,该值越大表示码率控制对画面运动程度的反应越快,但是同时对噪声也更敏感。

        4. AVBR依赖动静态信息, 编码器内部集成了相关功能,不需要其它模块帮忙计算。

        5. 其它参数同CBR&VBR

      • CVBR 参数如下:

        1. 参数意义同CBR。

        2. 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.stParamH264Cbr.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.56. 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.57. 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.58. 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.59. 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
      Ifado (16,16,8,2) (16,16,8,2) (16,2,8,2) None

    • 注意

      • 本接口用于设置通道的裁剪属性。

      • 本接口必须在通道创建之后,通道销毁前调用。

      • 裁剪属性由两部分组成:

        1. bEnable: 是否使能通道裁剪功能。

        2. stRect: 裁剪区域属性,包括裁剪区域起始点坐标,以及裁剪区域的尺寸。


    2.60. 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.61. 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 主要由四个参数决定:

        1. eFrmLostMode: 丢帧策略模式。

        2. u32EncFrmGaps: 丢帧间隔。

        3. bFrmLostOpen: 丢帧开关。

        4. u32FrmLostBpsThr: 丢帧阈值。

      • 本接口属于高级接口,用户可以选择性调用,系统有默认值,默认在瞬时码率超出阈值时为丢帧。

      • 本接口提供瞬时码率超过阈值时两种处理方式:丢帧和编码pskip帧。u32EncFrmGaps控制是否均匀丢帧或均匀编码pskip帧。如下图所示:

      • 本接口可在编码通道创建之后,编码通道销毁之前设置。此接口在编码过程中被调用时,等到下一帧时生效。


    2.62. 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.63. 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
      Ifado 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.64. 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.65. 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.66. 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.67. MI_VENC_AllocCustomMap

    • 功能

      分配智能编码所用的Custom Map的内存,Custom Map包含QP MapMode 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/Ifado平台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/Ifado平台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.68. 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.69. 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.70. 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.71. 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来启动相关功能。


    2.72. 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
      Ifado 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.73. MI_VENC_SetSmartDetInfo

    • 功能

      用于第三方智能侦测算法向VENC提供智能编码所需的统计信息。

    • 语法

      MI_S32 MI_VENC_ SetSmartDetInfo(MI_VENC_DEV VeDev, MI_VENC_CHN VeChn, MI_VENC_SmartDetInfo_t *pstSmartDetInfo);
      
    • 参数

      参数名称 描述 输入/输出
      VeDev 编码设备号。 输入
      VeChn 编码通道号。 取值范围:[0, VENC_MAX_CHN_NUM)。 输入
      pstSmartDetInfo 智能侦测算法相关的统计信息指针。 输入
    • 返回值

      • MI_SUCCESS:成功

      • 非MI_SUCCESS:失败,参照错误码

    • 依赖

      • 头文件: mi_venc.h, mi_venc_datatype.h

      • 库文件: libmi_venc.a/libmi_venc.so

    • 注意

      • 因VENC编码内部支持了智能编码所需的统计信息,此接口不再支持

    2.74. 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。

      • 本接口设置后编码的码流只有第一帧是IDR帧,会影响播放器的随机解码,用户可以调用MI_VENC_RequestIdr强制生成IDR帧。

    • 举例

      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.75. 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.76. 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通道的状态。

    2.77. 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分割属性主要由两个参数决定:

        1. bSplitEnable: 当前帧是否进行tile分割。

        2. u32TileRowCount: tile按照宏块行进行分割。u32TileRowCount表示每个tile占图像宏块行数。且当编码至图像的最后几行,不足u32TileRowCount时,剩余的宏块行被划分为一个tile。

      • 本接口属于高级接口,用户可以选择性调用,建议不调用,系统默认bSplitEnable为false。本接口可在编码通道创建之后,编码通道销毁之前设置。此接口在编码过程中被调用时,等到下一帧时生效。

      • 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。

      • 建议用户在调用此接口之前,先调用MI_VENC_GetAv1TileSplit接口,获取当前通道的pstTileSplit配置,然后再进行设置。

      • AV1编码每帧最大支持切分为16个tile。

    • 举例

      请参见MI_VENC_SetH264SliceSplit的举例。


    2.78. 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.79. 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属性主要以下参数组成:

        1. u32DblkMode: 设置为0时表示不使能;设置为1时表示使能,并且使用内部计算的Deblocking参数(用户设置的Deblocking参数无效);设置为2时表示使能,并且使用用户设置的Deblocking参数。

        2. u32LumaHorzLevel: 具体含义请参见AV1协议loop_filter_level[0]的定义。

        3. u32LumaVertLevel: 具体含义请参见AV1协议loop_filter_level[1]的定义。

        4. u32ChromaLevel: 具体含义请参见AV1协议loop_filter_level[2]的定义。

        5. u32Sharpness: 具体含义请参见AV1协议loop_filter_sharpness的定义。

      • 系统默认打开deblocking功能,默认u32DblkMode=1。

      • 如果用户想关闭deblocking功能,可以将u32DblkMode置为0。

      • 本接口可在编码通道创建之后,编码通道销毁之前设置。本接口在编码过程中被调用时,等到下一帧时生效。

      • 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。

      • 建议用户在调用此接口之前,先调用MI_VENC_GetAv1Dblk 接口,获取当前编码通道的Deblocking配置,然后再进行设置。

    • 举例

      请参见MI_VENC_SetH264Dblk的举例。


    2.80. 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.81. 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.82. 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.83. 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

    • 注意

    • 相关参数

      MI_VENC_UserRcChnAttr_t


    2.84. 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.85. 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会调用这个函数,设置修改后的通道属性。
    • 相关数据类型及接口

      MI_VENC_UserRcChnAttr_t


    2.86. 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通过该函数传出前一帧的编码结果和信息,执行用户相关的码控计算算法,设置当前帧的编码参数。
    • 相关数据类型及接口

      MI_VENC_UserRcFrameAttr_t MI_VENC_UserRcEncParam_t


    2.87. 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接口,获取当前编码通道的去呼吸效应配置,然后再进行设置。

    • 相关数据类型及接口

      MI_VENC_DeBreathCfg_t


    2.88. 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 支持去呼吸效应功能。

      • 本接口可在编码通道创建之后,编码通道销毁之前设置。

      • 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。

    • 相关数据类型及接口

      MI_VENC_DeBreathCfg_t


    2.89. 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.90. 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.91. 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.92. 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_ParamH264InterPred_t 定义H.264编码通道帧间预测属性
    MI_VENC_ParamH264IntraPred_t 定义H.264协议编码通道帧内预测结构体
    MI_VENC_ParamH264Trans_t 定义H.264编码通道变换、量化属性
    MI_VENC_ParamH264Entropy_t 定义H.264编码通道熵编码属性
    MI_VENC_ParamH265InterPred_t 定义H.265编码通道帧间预测属性
    MI_VENC_ParamH265IntraPred_t 定义H.265编码通道帧内预测属性
    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_AttrH264Abr_t 定义H.264编码通道ABR属性结构
    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_H264eIdrPicIdMode_e 设置IDR帧或I帧的idr_pic_id的模式
    MI_VENC_H264IdrPicIdCfg_t IDR帧或I帧的idr_pic_id参数
    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
      
    • 相关数据类型及接口

      MI_VENC_CreateDev


    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)
      
    • 相关数据类型及接口

      MI_VENC_CreateDev


    3.3. MI_VENC_DEV_ID_JPEG_0

    • 说明

      定义JPEG编码设备0号。

    • 定义

      #define MI_VENC_DEV_ID_JPEG_0        (8)
      
    • 相关数据类型及接口

      MI_VENC_CreateDev


    3.4. MI_VENC_DEV_ID_JPEG_1

    • 说明

      定义JPEG编码设备1号。

    • 定义

      #define MI_VENC_DEV_ID_JPEG_1        (MI_VENC_DEV_ID_JPEG_0 + 1)
      
    • 相关数据类型及接口

      MI_VENC_CreateDev


    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
    • 注意

      矩形框不能超出编码实际画面的范围。

    • 相关数据类型及接口

      MI_VENC_SetRoiCfg

      MI_VENC_SetCrop

      MI_VENC_SetRoiBgFrameRate


    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码流包类型。
    • 相关数据类型及接口

      MI_VENC_H264eNaluType_e

      MI_VENC_JpegePackType_e

      MI_VENC_Av1ObuType_e


    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] 当前码流包数据中包含其他类型码流包数据信息
    • 相关数据类型及接口

      MI_VENC_DataType_t


    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的码流。

    • 相关数据类型及接口

      MI_VENC_DataType_t

      MI_VENC_H264eNaluType_e


    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, 99] 默认值: 70
    • 相关数据类型及接口

      MI_VENC_DataType_t


    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变量的说明。

    • 相关数据类型及接口

      MI_VENC_DataType_t

      MI_VENC_H264eNaluType_e

      MI_VENC_H264eRefType_e


    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 码流特征信息
    • 相关数据类型及接口

      MI_VENC_Pack_t

      MI_VENC_GetStream


    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:Base Profile。1:Main Profile。2:High Profile。
      动态属性。
      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:Main Profile。
      动态属性。
      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 某种协议的编码器属性
    • 相关数据类型及接口

      MI_VENC_CreateChn


    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 码率控制器属性
    • 相关数据类型及接口

      MI_VENC_CreateChn


    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
    • 相关数据类型及接口

      MI_VENC_Query


    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
    • 相关数据类型及接口

      MI_VENC_SetH264SliceSplit

      MI_VENC_GetH264SliceSplit


    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
    • 相关数据类型及接口

      MI_VENC_SetH265SliceSplit

      MI_VENC_GetH265SliceSplit


    3.28. MI_VENC_ParamH264InterPred_t

    • 描述

      定义H.264协议编码通道帧间预测结构体。

    • 定义

      typedef struct MI_VENC_ParamH264InterPred_s
      
      {
      
          /* search window */
      
          MI_U32 u32HWSize;
      
          MI_U32 u32VWSize;
      
          MI_BOOL bInter16x16PredEn;
      
          MI_BOOL bInter16x8PredEn;
      
          MI_BOOL bInter8x16PredEn;
      
          MI_BOOL bInter8x8PredEn;
      
          MI_BOOL bInter8x4PredEn;
      
          MI_BOOL bInter4x8PredEn;
      
          MI_BOOL bInter4x4PredEn;
      
          MI_BOOL bExtedgeEn;
      
      } MI_VENC_ParamH264InterPred_t;
      
    • 成员

      成员名称 描述
      u32HWSize 水平搜索窗大小
      u32VWSize 垂直搜索窗大小
      bInter16x16PredEn 16x16帧间预测使能开关,默认使能
      bInter16x8PredEn 16x8帧间预测使能开关,默认使能
      bInter8x16PredEn 8x16帧间预测使能开关,默认使能
      bInter8x8PredEn 8x8帧间预测使能开关,默认使能
      bInter8x4PredEn 8x4帧间预测使能开关,默认使能
      bInter4x8PredEn 4x8帧间预测使能开关,默认使能
      bInter4x4PredEn 4x4帧间预测使能开关,默认使能
      bExtedgeEn 当搜索遇见图像边界时,超出了图像范围,是否进行补搜的使能开关,默认使能
    • 相关数据类型及接口

      MI_VENC_SetH264InterPred

      MI_VENC_GetH264InterPred


    3.29. MI_VENC_ParamH264IntraPred_t

    • 描述

      定义H.264协议编码通道帧内预测结构体。

    • 定义

      typedef struct MI_VENC_ParamH264IntraPred_s
      
      {
      
          MI_BOOL bIntra16x16PredEn;
      
          MI_BOOL bIntraNxNPredEn;
      
          MI_BOOL bConstrainedIntraPredFlag;
      
          MI_BOOL bIpcmEn;
      
          MI_U32 u32Intra16x16Penalty;
      
          MI_U32 u32Intra4x4Penalty;
      
          MI_BOOL bIntraPlanarPenalty;
      
      }MI_VENC_ParamH264IntraPred_t;
      
    • 成员

      成员名称 描述
      bIntra16x16PredEn 16x16帧内预测使能,默认使能
      取值范围:0或1
      0:不使能;
      1:使能
      bIntraNxNPredEn NxN帧内预测使能,默认使能
      取值范围:0或1
      0:不使能;1:使能
      bConstrainedIntraPredFlag 默认为0。
      取值范围:0或1。
      请参见H.264协议关于constrained_intra_pred_flag的解释。
      bIpcmEn IPCM预测使能,默认值根据不同的芯片有差异
      取值范围:0或1
      u32Intra16x16Penalty 默认为0
      u32Intra4x4Penalty 默认为0
      bIntraPlanarPenalty 默认为0
    • 相关数据类型及接口

      MI_VENC_SetH264IntraPred

      MI_VENC_GetH264IntraPred


    3.30. 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]。
    • 相关数据类型及接口

      MI_VENC_SetH264Trans

      MI_VENC_GetH264Trans


    3.31. 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没有意义
      Base Profile不支持cabac。
      u32EntropyEncModeP P帧熵编码模式。
      0:cavlc
      1:cabac
      >=2没有意义
      Base Profile不支持cabac。
    • 相关数据类型及接口

      MI_VENC_SetH264Entropy

      MI_VENC_GetH264Entropy


    3.32. MI_VENC_ParamH265InterPred_t

    • 描述

      定义H.265协议编码通道帧间预测结构体。

    • 定义

      typedef struct MI_VENC_ParamH265InterPred_s
      
      {
      
          /*search window*/
      
          MI_U32 u32HWSize;
      
          MI_U32 u32VWSize;
      
          MI_BOOL bInter16x16PredEn;
      
          MI_BOOL bInter16x8PredEn;
      
          MI_BOOL bInter8x16PredEn;
      
          MI_BOOL bInter8x8PredEn;
      
          MI_BOOL bInter8x4PredEn;
      
          MI_BOOL bInter4x8PredEn;
      
          MI_BOOL bInter4x4PredEn;
      
          MI_U32 u32Inter32x32Penalty;
      
          MI_U32 u32Inter16x16Penalty;
      
          MI_U32 u32Inter8x8Penalty;
      
          MI_BOOL bExtedgeEn;
      
      }MI_VENC_ParamH265InterPred_t;
      
    • 成员

      成员名称 描述
      u32HWSize 水平搜索窗大小
      u32VWSize 垂直搜索窗大小
      bInter16x16PredEn 16x16帧间预测使能开关,默认使能
      bInter16x8PredEn 16x8帧间预测使能开关,默认使能
      bInter8x16PredEn 8x16帧间预测使能开关,默认使能
      bInter8x8PredEn 8x8帧间预测使能开关,默认使能
      bInter8x4PredEn 8x4帧间预测使能开关,默认使能
      bInter4x8PredEn 4x8帧间预测使能开关,默认使能
      bInter4x4PredEn 4x4帧间预测使能开关,默认使能
      u32Inter32x32Penalty 32x32帧间预测选中的概率,值越大选中的概率越低
      默认为0。取值范围[0,65535]
      u32Inter16x16Penalty 16x16帧间预测选中的概率,值越大选中的概率越低
      默认为0。取值范围[0,65535]
      u32Inter8x8Penalty 8x8帧间预测选中的概率,值越大选中的概率越低
      默认为0。取值范围[0,65535]
      bExtedgeEn 当搜索遇见图像边界时,超出了图像范围,是否进行补搜的使能开关,默认使能
    • 相关数据类型及接口

      MI_VENC_SetH265InterPred

      MI_VENC_GetH265InterPred


    3.33. MI_VENC_ParamH265IntraPred_t

    • 描述

      定义H.265协议编码通道帧内预测结构体。

    • 定义

      typedef struct MI_VENC_ParamH265IntraPred_s
      
      {
      
          MI_BOOL bIntra32x32PredEn;
      
          MI_BOOL bIntra16x16PredEn;
      
          MI_BOOL bIntra8x8PredEn;
      
          MI_BOOL bConstrainedIntraPredFlag;
      
          MI_U32 u32Intra32x32Penalty;
      
          MI_U32 u32Intra16x16Penalty;
      
          MI_U32 u32Intra8x8Penalty;
      
      }MI_VENC_ParamH265IntraPred_t;
      
    • 成员

      成员名称 描述
      bIntra32x32PredEn 32x32帧内预测使能开关,默认使能
      bIntra16x16PredEn 16x16帧内预测使能开关,默认使能
      bIntra8x8PredEn 8x8帧内预测使能开关,默认使能
      bConstrainedIntraPredFlag 默认为0
      取值范围:0或1
      请参见H.265协议关于constrained_intra_pred_flag的解释
      u32Intra32x32Penalty 32x32块帧内预测被选中概率,值越大概率越低
      默认为0
      u32Intra16x16Penalty 16x16块帧内预测被选中概率,值越大概率越低
      默认为0
      u32Intra8x8Penalty 8x8块帧内预测被选中概率,值越大概率越低
      默认为0
    • 相关数据类型及接口

      MI_VENC_SetH265IntraPred

      MI_VENC_GetH265IntraPred


    3.34. 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]。
    • 相关数据类型及接口

      MI_VENC_SetH265Trans

      MI_VENC_GetH265Trans


    3.35. 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协议
    • 相关数据类型及接口

      MI_VENC_SetH264Dblk

      MI_VENC_GetH264Dblk


    3.36. 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协议
    • 相关数据类型及接口

      MI_VENC_SetH265Dblk

      MI_VENC_GetH265Dblk


    3.37. 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的介绍
    • 相关数据类型及接口

      MI_VENC_SetH264Vui

      MI_VENC_GetH264Vui


    3.38. 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或1
      u8AspectRatioIdc 具体含义请参见H.264协议中Annex E Video usablility information的介绍,系统默认为1。
      取值范围:[0,255],17~254保留
      u8OverscanInfoPresentFlag 具体含义请参见H.264协议中Annex E Video usablility information的介绍,系统默认为0。
      取值范围:0或1
      u8OverscanAppropriateFlag 具体含义请参见H.264协议中Annex E Video usablility information的介绍,系统默认为0。
      取值范围:0或1
      u16SarWidth 具体含义请参见H.264协议中Annex E Video usablility information的介绍,系统默认为1。
      取值范围:(0,65535],并且与u16SarHeight互质
      u16SarHeight 具体含义请参见H.264协议中Annex E Video usablility information的介绍,系统默认为1。
      取值范围:(0,65535],并且与u16SarWidth互质
    • 相关数据类型及接口

      MI_VENC_SetH264Vui


    3.39. 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。
    • 相关数据类型及接口

      MI_VENC_SetH264Vui

      MI_VENC_GetH264Vui


    3.40. 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]。
    • 相关数据类型及接口

      MI_VENC_SetH264Vui


    3.41. 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的介绍。
    • 相关数据类型及接口

      MI_VENC_SetH265Vui

      MI_VENC_GetH265Vui


    3.42. 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互质。
    • 相关数据类型及接口

      MI_VENC_SetH265Vui


    3.43. 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。
    • 相关数据类型及接口

      MI_VENC_SetH265Vui

      MI_VENC_GetH265Vui


    3.44. 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]。
    • 相关数据类型及接口

      MI_VENC_SetH265Vui


    3.45. 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,99]
      au8YQt Y量化表。
      取值范围:[1,255]
      au8CbCrQt CbCr量化表。
      取值范围:[1,255]
      u32MCUPerEcs 每个ECS中包含多少个MCU,系统默认为0,表示不划分Ecs
      u32MCUPerECS:[0,picwidth\+15>>4xpicheight\+15>>4x2],(暂不支持)。
    • 相关数据类型及接口

      MI_VENC_SetJpegParam

      MI_VENC_GetJpegParam


    3.46. 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:绝对QP
      s32Qp 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。
    • 相关数据类型及接口

      MI_VENC_SetRoiCfg

      MI_VENC_GetRoiCfg


    3.47. MI_VENC_RoiBgFrameRate_t

    • 描述

      定义非编码感兴趣区域帧率。

    • 定义

      typedef struct MI_VENC_RoiBgFrameRate_s
      
      {
      
          MI_S32 s32SrcFrmRate;
      
          MI_S32 s32DstFrmRate;
      
      }MI_VENC_RoiBgFrameRate_t;
      
    • 成员

      成员名称 描述
      s32SrcFrmRate 非ROI区域的源帧率
      s32DstFrmRate 非ROI区域的目标帧率
    • 相关数据类型及接口

      MI_VENC_SetRoiBgFrameRate

      MI_VENC_GetRoiBgFrameRate


    3.48. 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帧。
    • 相关数据类型及接口

      MI_VENC_GetRefParam

      MI_VENC_SetRefParam


    3.49. 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/...等通用成员。
    • 相关数据类型及接口

      MI_VENC_CreateChn


    3.50. 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/...等通用模式。
    • 相关数据类型及接口

      MI_VENC_CreateChn


    3.51. MI_VENC_AttrH264Cbr_t


    3.52. MI_VENC_AttrH264Vbr_t


    3.53. MI_VENC_AttrH264FixQp_t


    3.54. MI_VENC_AttrH264Abr_t

    • 描述

      定义H.264编码通道ABR属性结构。

    • 定义

      typedef struct MI_VENC_AttrH264Abr_s
      
      {
      
          MI_U32 u32Gop;
      
          MI_U32 u32StatTime;
      
          MI_U32 u32SrcFrmRateNum;
      
          MI_U32 u32SrcFrmRateDen;
      
          MI_U32 u32AvgBitRate;
      
          MI_U32 u32MaxBitRate;
      
      }MI_VENC_AttrH264Abr_t;
      
    • 成员

      成员名称 描述
      u32Gop H.264 gop值。取值范围:[1,65535]。
      u32StatTime ABR码率统计时间,以秒为单位。取值范围:[1,60]。
      u32SrcFrmRateNum 编码器帧率分子,以整数为单位。
      u32SrcFrmRateDen 编码器帧率分母,以整数为单位。
      u32AvgBitRate 平均码率,单位为bps
      取值范围[2000,u32MaxBitRate)
      u32MaxBitRate 最大码率。取值范围[2000,102400000]
    • 注意

      请参见MI_VENC_AttrH264Cbr_t关于u32SrcFrmRateNum和u32SrcFrmRateDen的说明。

    • 相关数据类型及接口

      MI_VENC_CreateChn


    3.55. MI_VENC_AttrH264Avbr_t


    3.56. 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的说明。

    • 相关数据类型及接口

      MI_VENC_CreateChn


    3.57. 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, 99]
      u32SrcFrmRateNum 编码器帧率分子,以整数为单位。
      u32SrcFrmRateDen 编码器帧率分母,以整数为单位。
    • 注意

      请参见MI_VENC_AttrH264Cbr_t关于u32SrcFrmRateNum和u32SrcFrmRateDen的说明。

    • 相关数据类型及接口

      MI_VENC_CreateChn


    3.58. MI_VENC_AttrH265Cbr_t


    3.59. MI_VENC_AttrH265Vbr_t


    3.60. MI_VENC_AttrH265FixQp_t


    3.61. MI_VENC_AttrH265Avbr_t


    3.62. 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 重编超大帧
    • 相关数据类型及接口

      MI_VENC_GetSuperFrameCfg

      MI_VENC_SetSuperFrameCfg


    3.63. MI_VENC_ParamH264Vbr_t


    3.64. MI_VENC_ParamH264Cbr_t


    3.65. MI_VENC_ParamH264Avbr_t


    3.66. 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]。
      默认值: 90
      u32MinQfactor 帧最小Qfactor。用于控制图像质量
      取值范围:[1, u32MaxQfactor)。
      默认值: 20
    • 相关数据类型及接口

      MI_VENC_GetRcParam

      MI_VENC_SetRcParam


    3.67. MI_VENC_ParamH265Vbr_t


    3.68. MI_VENC_ParamH265Cbr_t


    3.69. MI_VENC_ParamH265Avbr_t


    3.70. 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/...等通用参数。
    • 相关数据类型及接口

      MI_VENC_SetRcParam

      MI_VENC_GetRcParam


    3.71. 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 裁剪的区域
    • 相关数据类型及接口

      MI_VENC_SetCrop

      MI_VENC_GetCrop


    3.72. MI_VENC_RecvPicParam_t

    • 描述

      接收指定帧数图像编码。

    • 定义

      typedef struct MI_VENC_RecvPicParam_s
      
      {
      
          MI_S32 s32RecvPicNum;
      
      }MI_VENC_RecvPicParam_t;
      
    • 成员

      成员名称 描述
      s32RecvPicNum 编码通道连续接收并编码的帧数
    • 相关数据类型及接口

      MI_VENC_StartRecvPicEx


    3.73. MI_VENC_H264eIdrPicIdMode_e

    • 描述

      设置IDR帧或I帧的idr_pic_id的模式。

    • 定义

      typedef enum
      
      {
      
          E_MI_VENC_H264E_IDR_PIC_ID_MODE_USR,
      
      }MI_VENC_H264eIdrPicIdMode_e;
      
    • 成员

      成员名称 描述
      E_MI_VENC_H264E_IDR_PIC_ID_MODE_USR 用户模式;即idr_pic_id由用户来设置。
    • 相关数据类型及接口

      MI_VENC_SetH264IdrPicId


    3.74. MI_VENC_H264IdrPicIdCfg_t

    • 描述

      IDR帧或I帧的idr_pic_id参数。

    • 定义

      typedef struct MI_VENC_H264IdrPicIdCfg_s
      
      {
      
          MI_VENC_H264eIdrPicIdMode_e eH264eIdrPicIdMode;
      
          MI_U32 u32H264eIdrPicId;
      
      }MI_VENC_H264IdrPicIdCfg_t;
      
    • 成员

      成员名称 描述
      eH264eIdrPicIdMode 设置idr_pic_id的模式
      u32H264eIdrPicId idr_pic_id的值。取值范围为:[0,65535]
    • 相关数据类型及接口

      MI_VENC_SetH264IdrPicId


    3.75. 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帧
    • 相关数据类型及接口

      MI_VENC_SetFrameLostStrategy

      MI_VENC_GetFrameLostStrategy


    3.76. 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]
    • 相关数据类型及接口

      MI_VENC_SetFrameLostStrategy


    3.77. 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帧生效。

    • 相关数据类型及接口

      MI_VENC_SetSuperFrameCfg


    3.78. 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.79. 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.80. 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:关,(暂不支持)
    • 相关数据类型及接口

      MI_VENC_SetAdvCustRcAttr


    3.81. 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 : B
      u32PicPoc 当前编码帧的图片顺序计数(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.82. MI_VENC_InputSourceConfig_t

    • 描述

      输入配置参数。

    • 定义

      typedef struct MI_VENC_InputSourceConfig_s
      
      {
      
          MI_VENC_InputSrcBufferMode_e eInputSrcBufferMode;
      
      } MI_VENC_InputSourceConfig_t;
      
    • 成员

      成员名称 描述
      eInputSrcBufferMode 输入模式
    • 相关数据类型及接口

      MI_VENC_InputSrcBufferMode_e

      MI_VENC_SetInputSourceConfig

    --

    3.83. 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。
    • 相关数据类型及接口

      MI_VENC_InputSourceConfig_t

      MI_VENC_SetInputSourceConfig


    3.84. 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 用户调用MI_VENC_RequestIdr时,强制指定IDR帧的QP,不使用动态计算结果,(暂不支持)
    • 注意

      只支持H265,H264。

    • 相关数据类型及接口

      MI_VENC_SetIntraRefresh


    3.85. 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系列需要根据实际设置最大宽高。

    • 相关数据类型及接口

      MI_VENC_CreateDev


    3.86. MI_VENC_H265eRefType_e

    • 说明

      定义H.265跳帧参考码流的帧类型以及参考属性。

    • 定义

      typedef MI_VENC_H264eRefType_e MI_VENC_H265eRefType_e;
      
    • 注意事项

      详情请参考MI_VENC_H264eRefType_e

    • 相关数据类型及接口

      MI_VENC_H264eRefType_e


    3.87. 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的说明。

    • 相关数据类型及接口

      MI_VENC_CreateChn


    3.88. 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]。
      默认值: 75
      u32MinQfactor 帧最小Qfactor。用于控制图像质量。 取值范围:[1, u32MaxQfactor)。
      默认值: 20
      s32ChangePos VBR开始调整Qp时的码率相对于最大码率的比例。取值范围:[50,100]。
      默认值: 80
    • 相关数据类型及接口

      MI_VENC_GetRcParam

      MI_VENC_SetRcParam


    3.89. MI_VENC_Av1eRefType_e

    • 说明

      定义AV1跳帧参考码流的帧类型以及参考属性。

    • 定义

      typedef MI_VENC_H264eRefType_e MI_VENC_Av1eRefType_e;
      
    • 注意事项

      详情请参考MI_VENC_H264eRefType_e

    • 相关数据类型及接口

      MI_VENC_StreamInfoAv1_t


    3.90. 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变量的说明。

    • 相关数据类型及接口

      MI_VENC_Stream_t


    3.91. 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:Main Profile。
      动态属性。
      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.92. 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]之间。

    • 相关数据类型及接口

      MI_VENC_AttrH264Cbr_t

      MI_VENC_AttrH265Cbr_t

      MI_VENC_AttrAv1Cbr_t


    3.93. 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的说明。

    • 相关数据类型及接口

      MI_VENC_AttrH264Vbr_t

      MI_VENC_AttrH265Vbr_t

      MI_VENC_AttrAv1Vbr_t


    3.94. 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的说明。

    • 相关数据类型及接口

      MI_VENC_AttrH264FixQp_t

      MI_VENC_AttrH265FixQp_t

      MI_VENC_AttrAv1FixQp_t


    3.95. 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的说明。

    • 相关数据类型及接口

      MI_VENC_AttrH264Avbr_t

      MI_VENC_AttrH265Avbr_t

      MI_VENC_AttrAv1Avbr_t


    3.96. MI_VENC_AttrAv1Cbr_t


    3.97. MI_VENC_AttrAv1Vbr_t


    3.98. MI_VENC_AttrAv1FixQp_t


    3.99. MI_VENC_AttrAv1Avbr_t


    3.100. 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]。
      默认值: 48
      u32MinQp P帧的最小QP。用于控制P帧的最大bits数。取值范围:[12,u32MaxQp)。
      默认值: 12
      s32IPQPDelta IPQP变化值。取值范围:[-12,12]。
      默认值: 0
      s32ChangePos VBR开始调整Qp时的码率相对于最大码率的比例。取值范围:[50,100]。
      默认值: 80
      u32MaxIQp I帧的最大QP。用于控制I帧的最小bits数。取值范围:(u32MinIQp,48]。
      默认值: 48
      u32MinIQp I帧的最小QP。用于控制I帧的最大bits数。取值范围:[12,u32MaxIQp)。
      默认值: 12
      u32MaxIPProp 最大IP帧码率的比值,取值范围[5,100]。
      默认值: 100
      u32MaxISize I帧的最大size。rate control会尽量让target size不超过max size。若为0,则代表未加限制。
      取值范围:[0, 0xFFFFFFFF]
      单位: byte
      默认值:0
      u32MaxPSize P帧的最大size。rate control会尽量让target size不超过max size。若为0,则代表未加限制。
      取值范围:[0, 0xFFFFFFFF] 单位: byte
      默认值:0
    • 相关数据类型及接口

      MI_VENC_ParamH264Vbr_t

      MI_VENC_ParamH265Vbr_t

      MI_VENC_ParamAv1Vbr_t


    3.101. 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]。
      默认值: 48
      u32MinQp P帧最小QP,用于控制P帧的最大bits数。取值范围:[12,u32MaxQp)。
      默认值: 12
      s32IPQPDelta IPQP变化值。取值范围:[-12,12]。
      默认值: 0
      u32MaxIQp I帧的最大QP。用于控制I帧的最小bits数。取值范围:(u32MinIQp,48]。
      默认值: 48
      u32MinIQp I帧的最小QP。用于控制I帧的最大bits数。取值范围:[12,u32MaxIQp)。
      默认值: 12
      u32MaxIPProp 最大IP帧码率的比值,取值范围[5,100]。
      默认值: 100
      u32MaxISize I帧的最大size。rate control会尽量让target size不超过max size。若为0,则代表未加限制。
      取值范围:[0, 0xFFFFFFFF] 单位: byte
      默认值:0
      u32MaxPSize P帧的最大size。rate control会尽量让target size不超过max size。若为0,则代表未加限制。
      取值范围:[0, 0xFFFFFFFF] 单位: byte
      默认值:0
    • 相关数据类型及接口

      MI_VENC_ParamH264Cbr_t

      MI_VENC_ParamH265Cbr_t

      MI_VENC_ParamAv1Cbr_t


    3.102. 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]
      默认值:48
      u32MinQp P帧的最小QP。用于控制P帧的最大bits数
      取值范围:[12,u32MaxQp)
      默认值:12
      s32IPQPDelta IPQP变化值
      取值范围:[-12,12]
      默认值:0
      s32ChangePos AVBR开始调整Qp时的码率相对于最大码率的比例
      取值范围:[50,100]
      默认值:80
      u32MaxIQp I帧的最大QP。用于控制I帧的最小bits数
      取值范围:(u32MinIQp,48]
      默认值:48
      u32MinIQp I帧的最小QP。用于控制I帧的最大bits数
      取值范围:[12,u32MaxIQp)
      默认值:12
      u32MaxIPProp 最大IP帧码率的比值
      取值范围[5,100]
      默认值:100
      u32MaxISize I帧的最大size。rate control会尽量让target size不超过max size。若为0,则代表未加限制。
      取值范围:[0, 0xFFFFFFFF] 单位: byte
      默认值:0
      u32MaxPSize P帧的最大size。rate control会尽量让target size不超过max size。若为0,则代表未加限制。
      取值范围:[0, 0xFFFFFFFF] 单位: byte
      默认值:0
      u32MinStillPercent 静止状态下目标码率的最小百分比。若此变量设置为100,AVBR将不会在判别为静止时主动调低目标码率,AVBR的表现将和VBR一致。
      取值范围:[5,100]
      默认值:35
      u32MaxStillQp 静止状态最大I帧QP
      取值范围:[u32MinIQp,u32MaxIQp]
      (暂不支持)
      u32MotionSensitivity 根据画面运动程度调整码率的灵敏度
      取值范围:[20,100]
      默认值:100
    • 相关数据类型及接口

      MI_VENC_ParamH264Avbr_t

      MI_VENC_ParamH265Avbr_t

      MI_VENC_ParamAv1Avbr_t


    3.103. MI_VENC_ParamAv1Vbr_t


    3.104. MI_VENC_ParamAv1Cbr_t


    3.105. MI_VENC_ParamAv1Avbr_t


    3.106. 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
    • 相关数据类型及接口

      MI_VENC_SetAv1TileSplit

      MI_VENC_GetAv1TileSplit


    3.107. 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的定义
    • 相关数据类型及接口

      MI_VENC_SetAv1Dblk

      MI_VENC_GetAv1Dblk


    3.108. 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.109. 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.110. 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.111. 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的定义
    • 相关数据类型及接口

      MI_VENC_ParamAv1Vui_t


    3.112. 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的定义
    • 相关数据类型及接口

      MI_VENC_ParamAv1Vui_t


    3.113. 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相关的结构体。
    • 相关数据类型及接口

      MI_VENC_SetAv1Vui

      MI_VENC_GetAv1Vui


    3.114. 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.115. 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的说明。

    • 相关数据类型及接口

      MI_VENC_CreateChn


    3.116. 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的说明。

    • 相关数据类型及接口

      MI_VENC_CreateChn


    3.117. 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的说明。

    • 相关数据类型及接口

      MI_VENC_CreateChn


    3.118. 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码控中使用的编码模式
    • 相关数据类型及接口

      OnVencUserRcInit

      OnVencUserRcAttrChange

      MI_VENC_UbrMode_e


    3.119. 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。
    • 相关数据类型及接口

      MI_VENC_H264eRefType_e

      OnVencUserRcCalc


    3.120. 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帧。
    • 相关数据类型及接口

      OnVencUserRcCalc


    3.121. 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设置不生效。
    • 相关数据类型及接口

      MI_VENC_UserRcChnAttr_t


    3.122. 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的说明。

    • 相关数据类型及接口

      MI_VENC_CreateChn


    3.123 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]。
      默认值: 0
      u32MinIQp I帧的最小QP。用于控制I帧的最大bits数。取值范围:[12,u32MaxIQp)。
      默认值: 12
      u32MaxIPProp 最大IP帧码率的比值,取值范围[5,100]。
      默认值: 100
      u32MaxIQp I帧的最大QP。用于控制I帧的最小bits数。取值范围:(u32MinIQp,48]。
      默认值: 48
      u32MaxISize I帧的最大size。rate control会尽量让target size不超过max size。若为0,则代表未加限制。
      取值范围:[0, 0xFFFFFFFF]
      单位:byte
      默认值:0
      u32MaxPSize P帧的最大size。rate control会尽量让target size不超过max size。若为0,则代表未加限制。
      取值范围:[0, 0xFFFFFFFF]
      单位:byte
      默认值:0
      u32MaxQp 帧最大QP,用于钳位质量。取值范围:(u32MinQp,48]。
      默认值: 48
      u32MinQp 帧最小QP,用于钳位码率波动。取值范围:[12,u32MaxQp)。
      默认值: 12
    • 相关数据类型及接口

      MI_VENC_GetRcParam

      MI_VENC_SetRcParam


    3.124. 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]。
      默认值: 1
      u8Strength0 去除呼吸效应强度调节参数 0。值越大,呼吸效应改善会越弱,值越小,呼吸效应改善越明显。取值范围:[0,7]。
      默认值: 2
      u8Strength1 去除呼吸效应强度调节参数 1。其值越大,I 帧会越大,其值越小,I 帧会越小。取值范围[0,15]。
      默认值: 6
    • 相关数据类型及接口

      MI_VENC_SetDeBreathCfg

      MI_VENC_GetDeBreathCfg

    3.125. 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的整数倍。
    • 相关数据类型及接口

      MI_VENC_SetOutputPortParam

      MI_VENC_GetOutputPortParam

      MI_VENC_EnableOutputPort

      MI_VENC_DisableOutputPort


    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
      Ifado 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,4
      BufW 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 Qp
      FrameQp 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