3. 编码器输入讯息

3.1. ROI接口定义

ROI(Region Of Interest)编码:感兴趣区域编码。
用户可以通过配置ROI区域,调适该区域的图像Qp,实现图像中局部区域画质的差异化。
H.264和H.265均支持8个ROI设置,重复区域按照0~7的ROI索引号依次提高优先级
ROI区域可配置绝对Qp和相对Qp两种模式。
绝对Qp模式:ROI区域的Qp为用户设定的Qp值。
相对Qp模式:ROI区域的Qp为码率控制之Qp加上用户设定的Qp偏移值。
注意事项
当码率控制模式不为FixedQP模式时,ROI区域可配置。
H.264当ROI使能时,宏块级码率控制失效。
绝对QP模式因为码率控制调适宏块QP,实际编码QP与设置之QP可能会有差异。

3.1.1. CVI_VENC_SetRoiAttr

【描述】

设置H.264/H.265通道的ROI属性。

【语法】

CVI_S32 CVI_VENC_SetRoiAttr(VENC_CHN VeChn, const VENC_ROI_ATTR_S *pstRoiAttr)

【参数】

参数名称

描述

输入/输出

VeChn

VENC Channel号

输入

pstRoiAttr

ROI区域参数

输入

【返回值】

返回值

描述

CVI_SUCCESS

成功

非0

失败,其值为错误码

【需求】

  • 头文件:cvi_comm_venc.h、cvi_venc.h

  • 库文件:libvenc.a

【注意】

  • u32Index:支持每个通道可设置8个ROI区域,按照0~7索引号对ROI区域进行管理,u32Index表示用户设置的ROI的索引号。重复区域按照0~7的ROI索引号依次提高优先级。

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

  • bAbsQp:指定当前的ROI区域使用绝对QP或是相对QP模式。

  • s32Qp:当bAbsQp为CVI_TRUE时,s32Qp为对ROI区域设定的Qp值,当bAbsQp为CVI_FALSE时,s32Qp表示对ROI区域内部码率控制之Qp加上设定的Qp偏移值。

  • stRect:指定当前的ROI区域的位置坐标和区域的大小。ROI区域必须在图像范围内。

  • 系统默认没有ROI区域使能,用户必须在编码通道创建之后,编码通道销毁之前设置调用此接口启动ROI。此接口在编码过程中被调用时,等到下一个帧时生效。

  • 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。建议用户在调用此接口之前,先调用CVI_VENC_GetRoiAttr接口,获取当前信道的ROI配置后再进行设置。

  • 设置该接口后,如果当前帧判断编码为pskip帧,以pskip帧效果优先。

  • 当码率控制模式不为FixedQP模式时,ROI区域可配置。

  • H.264当ROI始能时,宏块级码率控制失效。

  • 绝对Qp模式因为码率控制调适宏块QP,实际编码QP与设置之QP可能会有些差异。

【举例】

3.1.2. CVI_VENC_GetRoiAttr

【描述】

获取H.264/H.265通道的ROI属性。

【语法】

CVI_S32 CVI_VENC_GetRoiAttr(VENC_CHN VeChn, CVI_U32 u32Index, VENC_ROI_ATTR_S *pstRoiAttr);

【参数】

参数名称

描述

输入/输出

VeChn

VENC Channel号

输入

u32Index

道ROI区域索引

输入

pstRoiAttr

ROI区域参数

输入

【返回值】

返回值

描述

CVI_SUCCESS

成功

非0

失败,其值为错误码

【需求】

  • 头文件:cvi_comm_venc.h、cvi_venc.h

  • 库文件:libvenc.a

【注意】

  • 依照u32Index索引获取该ROI区域配置

  • 用户必须在编码通道创建之后,编码通道销毁之前设置调用此接口

  • 建议用户在调用CVI_VENC_SetRoiAttr接口之前,先调用此接口,获取当前信道的ROI配置后再进行设置

【举例】

3.2. 码率控制接口

typedef enum _VENC_RC_MODE_E {
    VENC_RC_MODE_H264CBR = 1,
    VENC_RC_MODE_H264VBR,
    VENC_RC_MODE_H264AVBR,
    VENC_RC_MODE_H264QVBR,
    VENC_RC_MODE_H264FIXQP,
    VENC_RC_MODE_H264QPMAP,

    VENC_RC_MODE_MJPEGCBR,
    VENC_RC_MODE_MJPEGVBR,
    VENC_RC_MODE_MJPEGFIXQP,

    VENC_RC_MODE_H265CBR,
    VENC_RC_MODE_H265VBR,
    VENC_RC_MODE_H265AVBR,
    VENC_RC_MODE_H265QVBR,
    VENC_RC_MODE_H265FIXQP,
    VENC_RC_MODE_H265QPMAP,

    VENC_RC_MODE_BUTT,

} VENC_RC_MODE_E;

typedef struct _VENC_RC_ATTR_S {
    VENC_RC_MODE_E enRcMode; /* RW; the type of rc*/
    union {
        VENC_H264_CBR_S stH264Cbr;
        VENC_H264_VBR_S stH264Vbr;
        VENC_H264_AVBR_S stH264AVbr;
        VENC_H264_QVBR_S stH264QVbr;
        VENC_H264_FIXQP_S stH264FixQp;
        VENC_H264_QPMAP_S stH264QpMap;

        VENC_MJPEG_CBR_S stMjpegCbr;
        VENC_MJPEG_VBR_S stMjpegVbr;
        VENC_MJPEG_FIXQP_S stMjpegFixQp;

        VENC_H265_CBR_S stH265Cbr;
        VENC_H265_VBR_S stH265Vbr;
        VENC_H265_AVBR_S stH265AVbr;
        VENC_H265_QVBR_S stH265QVbr;
        VENC_H265_FIXQP_S stH265FixQp;  ///< The Attribute of FixedQp Mode
        VENC_H265_QPMAP_S stH265QpMap;
    };
} VENC_RC_ATTR_S;