跳到主要内容
版本:2.8.1

视频编码 (VENC)

概述

VENC 模块,即视频编码模块,支持 H264、H265、JPEG、MJPEG 格式。本模块支持多路实时编码,每路编码相互独立,编码协议和编码 profile 可不同。本模块在支持视频编码的同时,可调用 Region 模块对编码图像内容进行叠加和遮挡。

输入源

VENC 模块的输入源包括以下几种:

  • 用户态读取图像文件向编码模块发送数据。
  • 视频输入(VI)模块采集的图像经视频处理子系统(VPSS)发送到编码模块。
  • 视频输入(VI)模块采集的图像直接发送到编码模块。
  • 视频解码(VDEC)模块解码图像经视频处理子系统(VPSS)发送到编码模块。
  • 视频解码 (VDEC) 模块解码图像直接发送到编码模块。

编码规格

不同型号的芯片支持不同的编码规格,芯片支持的编码规格如下表所示。

芯片编码类型支持的编码格式支持的编码规格
A200JPEG、MJPEG

YCbCr格式:

  • YCbCr 4:2:0 planar
  • YCbCr 4:2:0 semi-planar

    分辨率:96×96 to 16384x16384 (64 million pixels)

    步长:4 pixels

    性能:3840x2160@60fps

A200H.264
  • YUV420P
  • YUV420SP

    High Profile, level 6.0

    分辨率:144×128 -- 3840×2160

    性能:3840×2160@60fps

A200H.265
  • YUV420P
  • YUV420SP

    Main Profile, Level 6.0 High Tier

    分辨率:136×128 -- 3840×2160

    性能:3840×2160@60fps

A210JPEG、MJPEG

YCbCr格式:

  • YCbCr 4:2:0 planar
  • YCbCr 4:2:0 semi-planar

RGB格式:

  • RGB888

    分辨率:96×96 to 16384x16384 (64 million pixels)

    步长:4 pixels

    性能:3840x2160@60fps

A210H.264
  • RGB888
  • YUV420P
  • YUV420SP

    High Profile, level 6.0

    分辨率:144×128 -- 3840×2160

    性能:3840×2160@60fps

A210H.265
  • RGB888
  • YUV420P
  • YUV420SP

    Main Profile, Level 6.0 High Tier

    分辨率:136×128 -- 3840×2160

    性能:3840×2160@60fps


功能描述

编码数据流程图

典型的编码流程包括输入图像的接收、图像的选择、镜像、裁剪缩放、图像内容的遮挡和覆盖、图像的编码以及码流的输出等过程。内部数据流程处理如下图。

venc_encoding_data_flow


编码通道

编码通道作为基本容器,保存编码通道的多种用户设置和管理编码通道的多种内部资源。编码通道完成图像转化为码流的功能,具体由码率控制器和编码器协同完成。

说明:

  • 这里的编码器指的是狭义上的编码器,只完成编码功能。
  • 码率控制器提供了对编码参数的控制和调整,从而对输出码率进行控制。

特性

编码通道是 VENC 模块的核心组件,每个编码通道都是独立的编码实体,具有以下特性。

  • 编码通道的主要功能

    • 配置管理:存储编码协议类型、分辨率、帧率、码率等编码参数。
    • 资源管理:管理编码过程中需要的内存缓冲区、参考帧等内部资源。
    • 数据流处理:接收输入图像数据,完成编码处理,输出码流数据。
    • 状态监控:提供编码状态查询、码流统计等功能。
  • 编码器组件

    • 狭义编码器:负责核心的图像编码算法,将YUV图像数据转换为符合 H.264/H.265/JPEG/MJPEG 标准的压缩码流。
    • 码率控制器:根据设置的码率模式(CBR、VBR、AVBR、FIXQP)动态调整编码参数,确保输出码率符合要求。
    • 参数管理器:处理 GOP 结构、QP 控制、ROI 编码等高级编码参数。
  • 编码通道的工作流程

    1. 初始化阶段:创建编码通道,配置编码参数和资源分配。
    2. 编码阶段:接收输入图像,进行预处理、编码、码率控制。
    3. 输出阶段:生成符合标准的码流数据并输出。
    4. 释放阶段:销毁编码通道,释放所占用的系统资源。

架构

编码通道支持多路并发编码,每路编码通道可以独立配置不同的编码协议、分辨率和码率参数,满足不同应用场景的需求。

编码通道架构图


码率控制

码率控制器实现对编码码率进行控制。从信息学角度分析:图像压缩比越低,压缩图像的质量越高;图像压缩比例越高,压缩图像的质量越低。

对于场景变化的真实场景,图像质量稳定时,编码码率会波动;编码码率稳定时,图像质量会波动。

以 H.264 编码为例:

  • 图像 QP 越低,图像质量越好,码率越高。
  • 图像 QP 越高,图像质量越差,码率越低。

说明:

码率控制是针对连续的编码码流而言,所以, JPEG 协议编码通道不包括码率控制功能。


支持的 RC 模式

H.264/H.265 编码格式支持的 RC 模式

  • CBR:恒定码率模式,在码率统计时间内保证编码码率平稳。
  • VBR:可变码率模式,允许码率波动以保证编码图像质量平稳。
  • AVBR:自适应可变码率模式,根据场景运动状态动态调整码率。
  • CVBR:受约束可变码率模式,在VBR基础上增加码率限制。
  • FIXQP:固定 QP 模式,使用固定量化参数编码。
  • QPMAP:QP 映射模式,用户自定义每个编码块的 QP 值和 skip 倾向性。

MJPEG 编码格式支持的 RC 模式

  • MJPEGCBR:恒定码率模式。
  • MJPEGVBR:可变码率模式。
  • MJPEGFIXQP:固定 QFactor 模式(JPEG 目前仅支持固定 QFactor)。

QPMAP 模式详细说明

QPMAP 模式特点

QPMAP 模式下允许用户自主决定码控策略。用户需申请内存,内存映射到编码图像上,通过内存赋值完成编码图像每一块的 QP 配置和 skip 块倾向性选择。

基本参数

  • QP控制单位

    • H.264 和 H.265 均为 8×8 像素块,每块对应 1 字节 QP 控制信息。
    • QP 控制信息 (8 bits):
      • 位7:skip_flag(0=不跳过,1=跳过)。
      • 位6:deltaQp_flag(0=绝对 QP,1=相对 QP)。
      • 位5-0:qp_value(绝对 QP 范围 [0,51],相对 QP 范围[-32,31])。 QPMap 位字段(Format 2)
  • CTU/MB大小

    • H.265 为 64×64 像素 CTU。qpmap block 是 32x32, 这个 32x32 的区域内的 8x8 的 qppixel 的 qp 必须一样。
    • H.264 为 16×16 像素 MB。qpmap block 是 16x16, 这个 16x16 的区域内的 8x8 的 pixel的 qp 必须一样。

内存布局

CTB 结构化扫描。


内存对齐计算

  • H.265:aligned_width = (width + 63) & (~63),aligned_height = (height + 63) & (~63)
  • H.264:aligned_width = (width + 15) & (~15),aligned_height = (height + 15) & (~15)
  • QP Map 尺寸:(aligned_width/8) × (aligned_height/8) 字节

H.265 QPMap 内存布局1(CTU 64×64,32×32 一致性域)

H.265 QPMap 内存布局2(CTU 64×64,32×32 一致性域)

H.264 QPMap 内存布局1(MB 16×16,16×16 一致性域)

H.264 QPMap 内存布局2(MB 16×16,16×16 一致性域)

使用限制:

  • GOP 模式为 ADVSMARTP 时不支持 QPMAP 模式。
  • 需要调用 ZH_MPI_VENC_SendFrameEx 接口发送图像和 QP Map 表。
  • 使用 Skip Weight 时,建议关闭帧级 Skip 模式控制,避免冲突。
  • H.265 使用 QP Map 实现 ROI 功能时,需要关闭 SAO 功能。
  • 非 normalp 模式下,QP 表 8×8 块 skip 使能标志需配置为 1。

芯片支持情况

芯片型号CBRVBRAVBRCVBRFIXQP
A200
A210

注意:

部分参数如 MinBitRate 在当前实现中并不支持生效。详细配置请参考 VENC_RC_ATTR_S


GOP 结构

venc_gop_structure

说明:

t0-t5 对应 H264E_REF_TYPE_E 中 BASE_IDRSLICE 到 ENHANCE_PSLICE_NOTFORREF 的定义。


彩转灰

VENC 支持把彩色图像转换成灰度图像进行编码。

相关API:

注意:

当前版本该功能暂未启用,bColor2Grey 参数可不设置。


裁剪编码

VENC 从图像中裁剪出一部分进行编码,用户可设置裁剪的起始点 X、Y 以及裁剪宽度 width 和高度 height。

功能说明:

  • 支持从输入图像中选择特定区域进行编码。
  • 可以减少编码数据量,提高编码效率。
  • 适用于只关注图像特定区域的应用场景。

配置参数:

裁剪编码功能通过 VENC_CHN_PARAM_S 结构体中的 stCropCfg 参数控制。

typedef struct zhVENC_CROP_INFO_S {
ZH_BOOL bEnable; // 是否启用裁剪功能
RECT_S stRect; // 裁剪区域:起始点(x,y)和尺寸(width,height)
} VENC_CROP_INFO_S;

相关API:


ROI

ROI(Region Of Interest)编码,即感兴趣区域编码。

功能说明:

用户可以通过配置 ROI 区域,对该区域的图像 QP 进行限制,从而实现图像中该区域的 QP 与其他图像区域的差异化。系统现仅支持对 H.264/H.265 通道进行 ROI 设置。

关键特性:

  • 支持区域数量:系统提供 8 个感兴趣区域,可供用户同时使用。
  • 区域叠加:8 个区域可以互相叠加,叠加时的优先级按照 0~7 的索引号依次提高。
  • 优先级处理:叠加优先级是指发生叠加时,图像区域的最终 QP 值的判定,最终的区域 QP 值按照优先级最高的区域设定。

QP 模式: ROI 区域可配置绝对 QP 和相对 QP 两种模式。

  • 绝对 QP:ROI 区域的 QP 为用户设定的 QP 值。
  • 相对 QP:ROI 区域的 QP 为码率控制产生的 QP 与用户设定的 QP 偏移值的和。

配置示例: 以下示例编码图像采用 FixQP 模式,设置图像 QP 为 25,即图像中所有宏块 QP 值为 25。

  • ROI 区域 0:设置为绝对 QP 模式,QP值为 10,索引为 0。
  • ROI 区域 1:设置为相对 QP 模式,QP为 -10,索引为 1。

ROI区域叠加示例

区域 0 的 index 小于区域 1 的 index,所以在发生互相重叠的图像区域按高优先级的区域(区域1)QP 设置。

  • 区域 0 除了发生重叠的部分的 QP 值等于 10。
  • 区域 1 的 QP 值为 25+(-10)=15。
  • 重叠区域的 QP 值为 15(按区域 1 设置)。

注意:

  • intrarefresh 开启后 index 0 无法使用。
  • 仅支持 H.264/H.265 编码格式。

P 帧帧内刷新

P 帧刷新 ISlice,可以为客户提供码率非常平滑的编码方式,每个 I 帧和 P 帧的大小可以非常接近。在网络带宽有限(如无线网络)的情况下,降低 I 帧过大带来的网络冲击,降低网传延时,降低网络传输出错的概率。


原理

  • 将传统的完整 I 帧分散到多个 P 帧中进行逐步刷新。
  • 每个 GOP 周期内按行或按列完成所有宏块的帧内刷新。
  • 平滑化码率,避免 I 帧瞬时码率峰值。

使用方式

  1. 通过接口 ZH_MPI_VENC_SetIntraRefresh 设置刷新使能 bRefreshEnable
  2. 设置刷新使能后 SDK 会自动根据设置的刷新行数或列数 u32RefreshNum 从每个 GOP 的第一帧开始按行(从上至下)完成 Intra 宏块刷新。刷新间隔为 GOP。
  3. SDK 会自动把每次按行刷新第一帧的帧内预测宏块转换为一个 ISlice。
  4. 设置 ZH_MPI_VENC_SetIntraRefresh 接口后,码率控制依然生效,可以调整 VENC_GOP_ATTR_S:stGopAttr.stNormalP.s32IPQpDelta 来控制 Intra 宏块刷新起始帧的大小,推荐值为 -1。

相关API


注意事项

  • ZH_MPI_VENC_SetIntraRefresh 设置的刷新行数或列数 u32RefreshNum 需要保证在一个 GOP 周期内,图像内所有的宏块行或列都完成一次刷新。
  • 由于刷新行数或列数 u32RefreshNum 与编码参数 GOP 及跳帧参考参数相关,所以设置编码属性及跳帧参考高级接口后,ZH_MPI_VENC_SetIntraRefresh 接口需要重新设置。
  • ZH_MPI_VENC_SetIntraRefresh 只对 H.264/H.265 协议有效。
  • ZH_MPI_VENC_SetIntraRefresh 设置使能 bRefreshEnable,按行刷新 Islice 的帧会自动按照刷新 Islice 的大小做 slice 划分,用户设置的 slice 划分接口将无效,其它帧按用户的设置进行 slice 划分。
  • 调用 ZH_MPI_VENC_ResetChn 接口复位通道后,此前设置的 IntraRefresh 相关配置失效。
  • Intrarefresh 开启后 ROI 的 index 0 无法使用。

编码码流帧配置模式

编码码流帧配置模式控制编码器输出码流的组织方式,支持单包模式和多包模式两种配置。该模式可以通过模块参数静态配置,也可以在调用 ZH_MPI_VENC_GetStream 时动态指定。


功能说明

  • 单包模式:每次获取的为单个 VENC_PACK_S 信息,整帧数据作为一个包输出。
  • 多包模式:每次获取的为多个 VENC_PACK_ S,每个包含单个 NAL 包或 SLICE 包。

静态配置方式

通过各编码格式的模块参数结构体中的u32OneStreamBuffer参数配置。


相关API


配置

  • H.264 编码配置

    VENC_MOD_H264E_S stModH264;
    stModH264.u32OneStreamBuffer = 1; // 0:多包模式, 1:单包模式(默认)
    ZH_MPI_VENC_SetModParam(ZH_VIDEO_ID_AVC, &stModH264);
  • H.265 编码配置

    VENC_MOD_H265E_S stModH265;
    stModH265.u32OneStreamBuffer = 1; // 0:多包模式, 1:单包模式(默认)
    ZH_MPI_VENC_SetModParam(ZH_VIDEO_ID_HEVC, &stModH265);
  • JPEG/MJPEG 编码配置

    VENC_MOD_JPEGE_S stModJpeg;
    stModJpeg.u32OneStreamBuffer = 1; // JPEG 仅支持单包模式
    ZH_MPI_VENC_SetModParam(ZH_VIDEO_ID_JPEG, &stModJpeg);

动态配置方式

通过 ZH_MPI_VENC_GetStream 调用时的 VENC_STREAM_S 结构体的 u32PackCount 参数动态指定。

  • 单包模式获取

    VENC_STREAM_S stStream;
    stStream.u32PackCount = 1; // 设置为 1 表示单包模式
    ZH_MPI_VENC_GetStream(VeChn, &stStream, s32MilliSec);
    // 获取成功后,实际填充 pack 的包个数为 1(默认)
  • 多包模式获取

    VENC_STREAM_S stStream;
    stStream.u32PackCount = 16; // 设置为 16 表示多包模式
    ZH_MPI_VENC_GetStream(VeChn, &stStream, s32MilliSec);
    // 获取成功后,u32PackCount 为实际填充 pack 的包个数

u32PackCount参数说明

根据 VENC_STREAM_S 结构体的 u32PackCount 成员描述。

单包输出

  • 作为输入参数时设置为 1。
  • 函数调用成功后,此值为实际填充 pack 的包个数,默认为 1。
  • H264/H265 的 I 帧可能包含多个 NALU 包,但仍作为单包输出。

多包输出

  • 作为输入参数时,此值为 pstPack 包的个数,必须不小于当前帧的包个数。
  • 目前需要按照 16 设置,如果此数值太小,可能会导致编码码流包获取失败导致丢帧。
  • 数值太小会返回错误码 ZH_ERR_VENC_ILLEGAL_PARAM
  • 函数调用成功后,此值为实际填充 pack 的包个数。

模式对比

特性单包模式多包模式
支持协议H.264/H.265/JPEG/MJPEGH.264/H.265
包数量1 个包最多 16 个包
数据获取pMbBlk + u32LenpMbBlk + u32Len + u32Offset
包内容完整帧数据单个 NAL/SLICE 包
默认模式
配置复杂度简单复杂

注意事项

  • JPEG/MJPEG:目前仅支持单包模式。
  • 动态切换:可以在每次调用 ZH_MPI_VENC_GetStream 时通过 u32PackCount 动态指定模式。
  • 多包模式限制:仅 H.264/H.265 支持,且 u32PackCount建议设置为 16。
  • 错误处理:多包模式下 u32PackCount 设置过小会返回参数错误。

编码流程代码示例

以下是一个简单的 H.264 编码流程示例。

#include "zh_mpi_venc.h"
#include "zh_mpi_sys.h"
#include "zh_mpi_mb.h"

int main()
{
// 1. 系统初始化
ZH_MPI_SYS_Init();

// 2. 创建内存池
MB_POOL_CONFIG_S stMbPoolCfg;
memset(&stMbPoolCfg, 0, sizeof(MB_POOL_CONFIG_S));
stMbPoolCfg.u64MBSize = 720 * 576 * 3 / 2;
stMbPoolCfg.u32MBCnt = 6;
stMbPoolCfg.enAllocType = MB_ALLOC_TYPE_DMA;
MB_POOL vencPool = ZH_MPI_MB_CreatePool(&stMbPoolCfg);

// 3. 配置编码通道属性
VENC_CHN_ATTR_S stAttr;
memset(&stAttr, 0, sizeof(VENC_CHN_ATTR_S));
stAttr.stVencAttr.enType = ZH_VIDEO_ID_AVC;
stAttr.stVencAttr.u32PicWidth = 720;
stAttr.stVencAttr.u32PicHeight = 576;
stAttr.stVencAttr.u32MaxPicWidth = 720;
stAttr.stVencAttr.u32MaxPicHeight = 576;
stAttr.stVencAttr.enPixelFormat = ZH_FMT_YUV420SP;
stAttr.stVencAttr.u32StreamBufCnt = 4;
stAttr.stVencAttr.u32BufSize = 720 * 576 * 3 / 2;

// 码率控制配置
stAttr.stRcAttr.enRcMode = VENC_RC_MODE_H264CBR;
stAttr.stRcAttr.stH264Cbr.u32Gop = 30;
stAttr.stRcAttr.stH264Cbr.u32BitRate = 1000;
stAttr.stRcAttr.stH264Cbr.u32SrcFrameRateNum = 30;
stAttr.stRcAttr.stH264Cbr.u32SrcFrameRateDen = 1;
stAttr.stRcAttr.stH264Cbr.fr32DstFrameRateNum = 30;
stAttr.stRcAttr.stH264Cbr.fr32DstFrameRateDen = 1;

// 4. 创建编码通道
VENC_CHN VeChn = 0;
ZH_MPI_VENC_CreateChn(VeChn, &stAttr);

// 5. 开始接收图像
VENC_RECV_PIC_PARAM_S stRecvParam;
memset(&stRecvParam, 0, sizeof(VENC_RECV_PIC_PARAM_S));
stRecvParam.s32RecvPicNum = -1;
ZH_MPI_VENC_StartRecvFrame(VeChn, &stRecvParam);

// 6. 发送图像进行编码
MB_BLK frameBlk = ZH_MPI_MB_GetMB(vencPool, 720 * 576 * 3 / 2, ZH_TRUE);
ZH_U8 *pVirAddr = (ZH_U8 *)ZH_MPI_MB_Handle2VirAddr(frameBlk);

// 简单填充YUV数据
memset(pVirAddr, 128, 720 * 576); // Y分量
memset(pVirAddr + 720 * 576, 128, 720 * 576 / 2); // UV分量

VIDEO_FRAME_INFO_S stFrameInfo;
memset(&stFrameInfo, 0, sizeof(VIDEO_FRAME_INFO_S));
stFrameInfo.stVFrame.pMbBlk = frameBlk;
stFrameInfo.stVFrame.u32Width = 720;
stFrameInfo.stVFrame.u32Height = 576;
stFrameInfo.stVFrame.enPixelFormat = ZH_FMT_YUV420SP;

ZH_MPI_VENC_SendFrame(VeChn, &stFrameInfo, -1);

// 7. 获取编码码流
VENC_STREAM_S stStream;
VENC_PACK_S stPack;
memset(&stStream, 0, sizeof(VENC_STREAM_S));
memset(&stPack, 0, sizeof(VENC_PACK_S));
stStream.pstPack = &stPack;
stStream.u32PackCount = 1;

ZH_MPI_VENC_GetStream(VeChn, &stStream, -1);

// 8. 处理码流数据(此处可保存到文件或网络传输)
// ...

// 9. 释放码流
ZH_MPI_VENC_ReleaseStream(VeChn, &stStream);
ZH_MPI_MB_ReleaseMB(frameBlk);

// 10. 清理资源
ZH_MPI_VENC_StopRecvFrame(VeChn);
ZH_MPI_VENC_DestroyChn(VeChn);
ZH_MPI_MB_DestroyPool(vencPool);
ZH_MPI_SYS_Exit();

return 0;
}

API 参考

视频编码模块主要提供视频编码通道的创建和销毁、视频编码通道的复位、开启和停止接收图像、设置和获取编码通道属性、获取和释放码流等功能。 该功能模块为用户提供以下 API。


ZH_MPI_VENC_SetModParam

描述

设置编码相关的模块参数。

语法

ZH_S32 ZH_MPI_VENC_SetModParam(const VENC_PARAM_MOD_S *pstModParam);

参数

参数名数据类型描述输入/输出
pstModParamconst VENC_PARAM_MOD_S*编码模块参数指针。输入

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

注意事项

  • 此接口必须在所有编码通道创建前调用。
  • 如果 pstModParam 为空,则返回失败。
  • 如果没有调用此接口,对应参数默认值查看 VENC_PARAM_MOD_S 结构体说明。

ZH_MPI_VENC_GetModParam

描述

获取编码相关的模块参数。

语法

ZH_S32 ZH_MPI_VENC_GetModParam(VENC_PARAM_MOD_S *pstModParam);

参数

参数名数据类型描述输入/输出
pstModParamVENC_PARAM_MOD_S*编码模块参数指针。输出

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

注意事项

如果 pstModParam 为空,则返回失败。


ZH_MPI_VENC_CreateChn

描述

创建编码通道。

语法

ZH_S32 ZH_MPI_VENC_CreateChn(VENC_CHN VeChn, const VENC_CHN_ATTR_S *pstAttr);

参数

参数名数据类型描述输入/输出
VeChnVENC_CHN编码通道号。取值范围:[0,VENC_MAX_CHN_NUM)。输入
pstAttrconst VENC_CHN_ATTR_S*编码通道属性指针。输入

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

注意事项

编码通道属性由三部分组成:编码器属性、码率控制器属性和帧结构类型属性(GOP 类型属性)。

编码器属性

编码器属性配置需要先选择编码协议,然后对各协议对应的属性进行设置。

参数说明
MIN_WIDTH编码通道支持的最小宽度。
MAX_WIDTH编码通道支持的最大宽度。
MIN_HEIGHT编码通道支持的最小高度。
MAX_HEIGHT编码通道支持的最大高度。
MIN_ALIGN最小对齐单元(像素)。
  • 编码器最大宽高配置要求

    编码器属性的最大宽高配置要求,通道宽高必须满足如下约束:

    • MaxPicWidth ∈ [MIN_WIDTH, MAX_WIDTH]
    • MaxPicHeight ∈ [MIN_HEIGHT, MAX_HEIGHT]
    • PicWidth ∈ [MIN_WIDTH, MAX_WIDTH]
    • PicHeight ∈ [MIN_HEIGHT, MAX_HEIGHT]

    最大宽高,通道宽高必须是 MIN_ALIGN 的整数倍。

  • 编码器支持的分辨率规格:

    芯片W/H (pixel)H.264H.265JPEGMJPEG
    A200MIN_WIDTH1441363264
    A200MAX_WIDTH40964096327684096
    A200MIN_HEIGHT1281283264
    A200MAX_HEIGHT40964096327684096
    A210MIN_WIDTH1441363264
    A210MAX_WIDTH40964096327684096
    A210MIN_HEIGHT1281283264
    A210MAX_HEIGHT40964096327684096
  • 编码器属性约束:

    编码器属性必须设置编码码流 buffer 深度、获取码流方式、编码 profile 等。下表详细描述了各种协议的各项属性的特性。

    编码协议编码方式码流 buffer 深度获取码流模式编码 profile
    H.264FrameBuffer≥MaxPicWidth×MaxPicHeight×3/4Frame/SliceBaseline
    Main profile
    High profile
    H.265FrameBuffer≥MaxPicWidth×MaxPicHeight×3/4Frame/SliceMain profile
    Main 10 profile
    JPEGFrameBuffer≥MaxPicWidth×MaxPicHeightFrame/EcsBaseline
    MJPEGFrameBuffer≥MaxPicWidth×MaxPicHeightFrame/EcsBaseline
    • 编码器属性都是静态属性,一旦创建编码通道成功,静态属性不支持被修改,除非该通道被销毁,重新创建。
    • JPEG/MJPEG 通道宽高的设置要满足:u32PicWidth × u32PicHeight ≤ MaxPicWidth × MaxPicHeight。
    • 码率控制器属性首先需要配置 RC 模式。码率控制器属性 RC 模式必须与编码器属性协议类型匹配。
    • H.264/H.265 码率控制支持六种模式:CBR、VBR、AVBR、CVBR 和 FIXQP。MJPEG 的码率控制支持三种模式:CBR、VBR 和 FIXQP。

码率控制器属性

RC 模式GOPStatTime(s)FrmRate(SrcFrmRate/DstFrmRate)
CBR≥1≥1SrcFrmRate ≥ DstFrmRate
VBR≥1≥1SrcFrmRate ≥ DstFrmRate
AVBR≥1≥1SrcFrmRate ≥ DstFrmRate
QVBR≥1≥1SrcFrmRate ≥ DstFrmRate
CVBR≥1≥1SrcFrmRate ≥ DstFrmRate
FIXQP≥1≥1SrcFrmRate ≥ DstFrmRate
  • SrcFrmRate 应该设置为产生 TimeRef 的实际帧率,RC 需要根据 SrcFrmRate 统计实际的帧率以及进行码率控制。

  • CBR 除了上述的属性之外,还需要设置平均比特率。平均比特率的单位是 kbps。 平均比特率的设置与编码通道宽高以及图像帧率都有关系。典型的平均比特率的(30fps)时的设置。当用户设置编码输出帧率不为满帧率时,可以对下表中的码率按用户设置帧率与满帧率(30fps)的比例进行换算。

  • 典型平均比特率配置(30fps):

    图像宽高/码率等级1080P(1920×1080)4K(3840×2160)
    低码率<2Mbps<8Mbps
    中码率2Mbps~8Mbps8Mbps~30Mbps
    高码率>8Mbps>30Mbps

    VBR/AVBR/CVBR 除了上述属性之外,还需要设置 MaxBitRate,表示编码通道在码率统计时间内允许的最大码率。

  • FIXQP模式配置:

    除了上述属性之外,还需要设置以下 QP 参数:

    • IQp:I 帧时,图像固定使用的 QP 值。

    • PQp:P 帧时,图像固定使用的 QP 值。

    • BQp:B 帧时,图像固定使用的 QP 值。

    • QP调整建议:

      • 可以根据当前的带宽限制对 I 帧 QP 和 P 帧 QP 同时进行向上或向下调整。
      • 为了减少呼吸效应,推荐 I 帧 QP 始终比 P 帧的 QP 小2~3。
      • H.264/H.265 GOP 结构属性首先需要配置 GOP Mode 模式(JPEG/MJPEG 通道不需要配置 GOP 结构属性)。

示例代码

ZH_S32 StartVenc(ZH_VOID)
{
ZH_S32 s32Ret;
VI_CHN ViChn = 0;
VENC_CHN VeChn = 0;
VENC_CHN_ATTR_S stAttr;
VENC_RECV_PIC_PARAM_S stRecvParam;
MPP_CHN_S stSrcChn, stDestChn;

/* set h264 channel video encode attribute */
stAttr.stVencAttr.enType = PT_H264;
stAttr.stVencAttr.u32PicWidth = u32PicWidth;
stAttr.stVencAttr.u32PicHeight = u32PicHeight;
stAttr.stVencAttr.u32MaxPicWidth = u32MaxPicWidth;
stAttr.stVencAttr.u32MaxPicHeight = u32MaxPicHeight;
stAttr.stVencAttr.u32Profile = 2;
...... // omit other video encode assignments here.

/* set h264 channel rate control attribute */
stAttr.stRcAttr.enRcMode = VENC_RC_MODE_H264CBR;
stAttr.stRcAttr.stH264Cbr.u32BitRate = 10*1024;
stAttr.stRcAttr.stH264Cbr.fr32DstFrmRate = 30;
stAttr.stRcAttr.stH264Cbr.u32SrcFrmRate = 30;
stAttr.stRcAttr.stH264Cbr.u32Gop = 30;
stAttr.stRcAttr.stH264Cbr.u32StatTime = 1;
stAttr.stGopAttr.enGopMode = VENC_GOPMODE_NORMALP;
stAttr.stGopAttr.stNormalP.s32IPQpDelta = 1;
...... // omit other rate control assignments here.

s32Ret = ZH_MPI_VENC_CreateChn(VeChn, &stAttr);
if (ZH_SUCCESS != s32Ret)
{
printf("ZH_MPI_VENC_CreateChn err 0x%x\n", s32Ret);
return ZH_FAILURE;
}

stRecvParam.s32RecvPicNum = -1;
s32Ret = ZH_MPI_VENC_StartRecvFrame(VeChn, &stRecvParam);
if (s32Ret != ZH_SUCCESS)
{
printf("ZH_MPI_VENC_StartRecvFrame err 0x%x\n", s32Ret);
return ZH_FAILURE;
}
...... // omit other code here.

return ZH_SUCCESS;
}

ZH_MPI_VENC_DestroyChn

描述

销毁编码通道。

语法

ZH_S32 ZH_MPI_VENC_DestroyChn(VENC_CHN VeChn);

参数

参数名数据类型描述输入/输出
VeChnVENC_CHN编码通道号。取值范围:[0,VENC_MAX_CHN_NUM)。输入

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

ZH_MPI_VENC_ResetChn

描述

复位通道。

语法

ZH_S32 ZH_MPI_VENC_ResetChn(VENC_CHN VeChn);

参数

参数名数据类型描述输入/输出
VeChnVENC_CHN编码通道号。取值范围:[0,VENC_MAX_CHN_NUM)。输入

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

ZH_MPI_VENC_StartRecvFrame

描述

编码通道开始接收输入图像。

语法

ZH_S32 ZH_MPI_VENC_StartRecvFrame(VENC_CHN VeChn, const VENC_RECV_PIC_PARAM_S *pstRecvParam);

参数

参数名数据类型描述输入/输出
VeChnVENC_CHN编码通道号。取值范围:[0,VENC_MAX_CHN_NUM)。输入
pstRecvParamconst VENC_RECV_PIC_PARAM_S*接收图像参数结构体指针。输入

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

ZH_MPI_VENC_StopRecvFrame

描述

编码通道停止接收输入图像。

语法

ZH_S32 ZH_MPI_VENC_StopRecvFrame(VENC_CHN VeChn);

参数

参数名数据类型描述输入/输出
VeChnVENC_CHN编码通道号。取值范围:[O,VENC_MAX_CHN_NUM)。输入

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

ZH_MPI_VENC_QueryStatus

描述

查询编码通道状态。

语法

ZH_S32 ZH_MPI_VENC_QueryStatus(VENC_CHN VeChn, VENC_CHN_STATUS_S *pstStatus);

参数

参数名数据类型描述输入/输出
VeChnVENC_CHN编码通道号。取值范围:[0,VENC_MAX_CHN_NUM)。输入
pstStatusVENC_CHN_STATUS_S*编码通道的状态指针。输出

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

ZH_MPI_VENC_SetChnAttr

描述

设置编码通道属性。

语法

ZH_S32 ZH_MPI_VENC_SetChnAttr(VENC_CHN VeChn, const VENC_CHN_ATTR_S *pstChnAttr);

参数

参数名数据类型描述输入/输出
VeChnVENC_CHN编码通道号。取值范围:[0,VENC_MAX_CHN_NUM)。输入
pstChnAttrconst VENC_CHN_ATTR_S*编码通道属性指针。输入

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

ZH_MPI_VENC_GetChnAttr

描述

获取编码通道属性。

语法

ZH_S32 ZH_MPI_VENC_GetChnAttr(VENC_CHN VeChn, VENC_CHN_ATTR_S *pstChnAttr);

参数

参数名数据类型描述输入/输出
VeChnVENC_CHN编码通道号。取值范围:[0,VENC_MAX_CHN_NUM)。输入
pstChnAttrVENC_CHN_ATTR_S*编码通道属性指针。输出

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

ZH_MPI_VENC_SendFrame

描述

用户发送原始图像进行编码。

语法

ZH_S32 ZH_MPI_VENC_SendFrame(VENC_CHN VeChn, const VIDEO_FRAME_INFO_S *pstFrame, ZH_S32 s32MilliSec);

参数

参数名数据类型描述输入/ 输出
VeChnVENC_CHN编码通道号。取值范围:[0,VENC_MAX_CHN_NUM)。输入
pstFrameconst VIDEO_FRAME_INFO_S*原始图像信息结构指针。输入
s32MilliSecZH_S32超时参数。
  • 等于 -1 时,为阻塞接口。
  • 等于 0 时为非阻塞接口。
  • 大于 0 时为超时等待时间,超时时间的单位为毫秒(ms)。
输入

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

注意事项

输入数据宽高对齐有特别要求,具体说明详见 VIDEO_FRAME_INFO_S


ZH_MPI_VENC_SendFrameEx

描述

支持用户发送原始图像及该图的 QpMap 表信息进行编码。

语法

ZH_S32 ZH_MPI_VENC_SendFrameEx(VENC_CHN VeChn, const USER_FRAME_INFO_S *pstFrame, ZH_S32 s32MilliSec);

参数

参数名数据类型描述输入/ 输出
VeChnVENC_CHN编码通道号。取值范围:[0,VENC_MAXCHN_NUM)。输入
pstFrameconst USER_FRAME_INFO_S*原始图像信息结构指针。输入
s32MilliSecZH_S32超时参数。
  • 等于 -1 时为阻塞接口。
  • 等于 0 时为非阻塞接口。
  • 大于 0 时为超时等待时间,超时时间的单位为毫秒(ms)。
输入

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

注意事项

  • QpMap 定义参考 ZH_MPI_VENC_SetQpmap
  • 仅编码通道协议为 H.264 或者 H.265 支持此接口。
  • Rc 为 fixqp 模式下不支持该接口。

ZH_MPI_VENC_GetStream

描述

获取编码的码流。

语法

ZH_S32 ZH_MPI_VENC_GetStream(VENC_CHN VeChn, VENC_STREAM_S *pstStream, ZH_S32 s32MilliSec);

参数

参数名数据类型描述输入/ 输出
VeChnVENC_CHN编码通道号。取值范围:[0,VENC_MAX_CHN_NUM)。输入
pstStreamVENC_STREAM_S*码流结构体指针。输出
s32MilliSecZH_S32超时参数。
  • 等于 -1 时为阻塞接口。
  • 等于 0 时为非阻塞接口。
  • 大于 0 时为超时等待时间,超时时间的单位为毫秒(ms)。
输入

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

注意事项

  • 获取码流方式:支持单包、多包模式。

    • 单包模式(默认模式)每次获取的为单个 VENC_PACK_S 信息,通过 pMbBlk 及 u32Len 获取数据(代码见举例的单包模式)。VENC_PACK_INFO_S 为当前帧的 NAL 信息包(H264 包含 SPS/PPS/SEI 包类型信息,H265 包含 VPS/SPS/PPS/SEI 包类型信息)。
    • 多包模式(目前仅 H264/H265 支持此模式)每次获取的为多个 VENC_PACK_S (目前最大设置支持 16 个),每个 VENC_PACK_S 包含单个 NAL 包或 SLICE 包(split slice 模式开启时),通过 pMbBlk、u32Len 及 u32Offset 获取单个 NAL/SLICE 包数据(代码见举例中的多包模式)。
  • 码流结构体VENC_STREAM_S:

    • 码流包信息指针 pstPack指向一组 VENC_PACK_S 的内存空间,该空间由调用者分配。
      • 如果是单包模式获取,则此空间不小于 sizeof(VENC_PACK_S)的大小。
      • 如果是多包模式获取,则此空间不小于 N × sizeof(VENC_PACK_S)的大小,其中 N 代表当前帧中的包个数(目前需要设置为最大值 16 )。
    • 码流包个数 u32PackCount 在输入时,此值指定 pstPack 中 VENC_PACK_S的个数。在函数调用成功后,u32PackCount 返回实际填充 pstPack 的包的个数。
      • 在单包模式获取时,u32PackCount 必须不小于 1。
      • 在多包模式获取时,u32PackCount 必须不小于当前帧的包个数(目前需要设置为最大值 16 ,配置过小可能会存在丢数据包问题)。

示例代码

  • 单包模式(对应模块参数的 u32OneStreamBuffer 为 1 ,默认模式)

    stFrame.pstPack = reinterpret_cast<VENC_PACK_S *>(malloc(sizeof(VENC_PACK_S)));
    while (!pstCtx->threadExit) {
    stFrame.u32PackCount = 1;
    s32Ret = ZH_MPI_VENC_GetStream(u32Ch, &stFrame, -1);
    if (s32Ret >= 0) {
    s32StreamCnt++;
    for (ZH_U32 i = 0; i < stFrame.pstPack->u32DataNum; i++) {
    ZH_LOGD("get chn %d stream %d index %d type %d offset %d lenth %d", u32Ch, s32StreamCnt, i, stFrame.pstPack->stPackInfo[i].u32PackType, stFrame.pstPack->stPackInfo[i].u32PackOffset, stFrame.pstPack->stPackInfo[i].u32PackLength);
    }
    if (pstCtx->dstFilePath != ZH_NULL) {
    pData = (char *)ZH_MPI_MB_Handle2VirAddr(stFrame.pstPack->pMbBlk);
    fwrite(pData, 1, stFrame.pstPack->u32Len, fp);
    fflush(fp);
    }
    ZH_MPI_VENC_ReleaseStream(u32Ch, &stFrame);
    if (stFrame.pstPack->bStreamEnd == ZH_TRUE) {
    ZH_LOGI("chn %d reach EOS stream", u32Ch);
    break;
    }
    } else {
    if (pstCtx->threadExit) {
    break;
    }
    usleep(1000llu);
    }
    }
  • 多包模式(对应模块参数的 u32OneStreamBuffer 为 0,目前仅 H264/H265 支持此模式)

    #define MAX_PACKET_NUM 16

    stFrame.pstPack = reinterpret_cast<VENC_PACK_S *>(malloc(MAX_PACKET_NUM * sizeof(VENC_PACK_S)));
    while (!pstCtx->threadExit) {
    stFrame.u32PackCount = MAX_PACKET_NUM; // 输入参数需要设置为16
    s32Ret = ZH_MPI_VENC_GetStream(u32Ch, &stFrame, -1);
    if (s32Ret >= 0) {
    s32StreamCnt++;
    for (ZH_U32 i = 0; i < stFrame.u32PackCount; i++) {
    ZH_LOGD("get chn(%d) stream(%d) packet(%d) eoi(%d) type(%d) offset(%d) lenth(%d)", u32Ch, s32StreamCnt, i, stFrame.pstPack[i].bFrameEnd, stFrame.pstPack[i].DataType, stFrame.pstPack[i].u32Offset, stFrame.pstPack[i].u32Len);
    if (pstCtx->dstFilePath != ZH_NULL) {
    pData = (char *)ZH_MPI_MB_Handle2VirAddr(stFrame.pstPack[i].pMbBlk);
    fwrite(pData + stFrame.pstPack[i].u32Offset, 1, stFrame.pstPack[i].u32Len, fp);
    fflush(fp);
    }
    }
    ZH_MPI_VENC_ReleaseStream(u32Ch, &stFrame);
    if (stFrame.pstPack->bStreamEnd == ZH_TRUE) {
    ZH_LOGI("chn %d reach EOS stream", u32Ch);
    break;
    }
    } else {
    if (pstCtx->threadExit) {
    break;
    }
    usleep(1000llu);
    }
    }

ZH_MPI_VENC_ReleaseStream

描述

释放码流缓存。

语法

ZH_S32 ZH_MPI_VENC_ReleaseStream(VENC_CHN VeChn, VENC_STREAM_S *pstStream);

参数

参数名数据类型描述输入/输出
VeChnVENC_CHN编码通道号。取值范围:[0,VENC_MAX_CHN_NUM)。输入
pstStreamVENC_STREAM_S*码流结构体指针。输入

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

ZH_MPI_VENC_GetJpegParam

描述

获取 JPEG 协议编码通道的高级参数。

语法

ZH_S32 ZH_MPI_VENC_GetJpegParam(VENC_CHN VeChn, VENC_JPEG_PARAM_S *pstJpegParam);

参数

参数名数据类型描述输入/输出
VeChnVENC_CHN编码通道号。取值范围:[0,VENC MAX CHN_NUM)。输入
pstJpegParamVENC_JPEG_PARAM_S*JPEG 协议编码通道的高级参数集合。输入

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

ZH_MPI_VENC_SetJpegParam

描述

设置 JPEG 协议编码通道的高级参数。

语法

ZH_S32 ZH_MPI_VENC_SetJpegParam(VENC_CHN VeChn, const VENC_JPEG_PARAM_S *pstJpegParam);

参数

参数名数据类型描述输入/输出
VeChnVENC_CHN编码通道号。取值范围:[0,VENC_MAX_CHN_NUM)。输入
pstJpegParamconst VENC_JPEG_PARAM_S*JPEG 协议编码通道的高级参数集合。输入

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

ZH_MPI_VENC_GetRcParam

描述

获取通道码率控制高级参数。

语法

ZH_S32 ZH_MPI_VENC_GetRcParam(VENC_CHN VeChn, VENC_RC_PARAM_S *pstRcParam);

参数

参数名数据类型描述输入/输出
VeChnVENC_CHN编码通道号。取值范围:[0,VENC_MAX_CHN_NUM)。输入
pstRcParamVENC_RC_PARAM_S*通道码率控制参数指针。输出

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

ZH_MPI_VENC_SetRcParam

描述

设置编码通道码率控制器的高级参数。

语法

ZH_S32 ZH_MPI_VENC_SetRcParam(VENC_CHN VeChn, const VENC_RC_PARAM_S *pstRcParam);

参数

参数名数据类型描述输入/输出
VeChnVENC_CHN编码通道号。取值范围:[0,VENC_MAX_CHN_NUM)。输入
pstRcParamconst VENC_RC_PARAM_S*编码通道码率控制器的高级参数。输入

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

ZH_MPI_VENC_RequestIDR

描述

请求 IDR 帧。

语法

ZH_S32 ZH_MPI_VENC_RequestIDR(VENC_CHN VeChn, ZH_BOOL bInstant);

参数

参数名数据类型描述输入/输出
VeChnVENC_CHN编码通道号。取值范围:[0,VENC_MAX_CHN_NUM)。输入
blnstantZH_BOOL是否使能立即编码 IDR 帧。输入

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

注意事项

bInstant 暂时只支持 ZH_FLASE,设置 ZH_TRUE 会返回不支持。详见 VENC 错误码ZH_ERR_VENC_NOT_SUPPORT


ZH_MPI_VENC_GetRoiAttr

描述

获取 H.264/H.265 通道的 ROI 配置高级属性。

语法

ZH_S32 ZH_MPI_VENC_GetRoiAttr(VENC_CHN VeChn, ZH_U32 u32Index, VENC_ROI_ATTR_S *pstRoiAttr);

参数

参数名数据类型描述输入/输出
VeChnVENC_CHN编码通道号。取值范围:[0,VENC_MAX_CHN_NUM)。输入
u32IndexZH_U32H.264/H.265 协议编码通道 ROI 区域索引。输入
pstRoiAttrVENC_ROI_ATTR_S*对应 ROI 区域的配置。输出

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

ZH_MPI_VENC_SetRoiAttr

描述

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

语法

ZH_S32 ZH_MPI_VENC_SetRoiAttr(VENC_CHN VeChn, const VENC_ROI_ATTR_S *pstRoiAttr, ZH_S32 roi_index);

参数

参数名数据类型描述输入/输出
VeChnVENC_CHN编码通道号。取值范围:[O,VENC_MAX_CHN_NUM)。输入
pstRoiAttrconst VENC_ROI_ATTR_S*ROI 区域参数。输入
u32lndexZH_S32H.264/H.265 协议编码通道 ROI 区域索引。输入

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

ZH_MPI_VENC_GetFd

描述

获取编码通道对应的设备文件句柄 。通过此接口返回值可以使用 select/poll 查询对应通道的数据状态。

语法

ZH_S32 ZH_MPI_VENC_GetFd(VENC_CHN VeChn);

参数

参数名数据类型描述输入/输出
VeChnVENC_CHN编码通道号。取值范围:[0,VENC_MAX_CHN_NUM)。输入

返回值

返回值描述
0成功,编码通道的设备文件句柄。
非 0失败,请参见 VENC 错误码

注意事项


ZH_MPI_VENC_CloseFd

描述

关闭编码通道对应的设备文件句柄。

语法

ZH_S32 ZH_MPI_VENC_CloseFd(VENC_CHN VeChn);

参数

参数名数据类型描述输入/输出
VeChnVENC_CHN编码通道号。取值范围:[O,VENC_MAX_CHN_NUM)。输入

返回值

返回值描述
0成功
负数失败,请参见 VENC 错误码

ZH_MPI_VENC_GetChnParam

描述

获取通道参数。

语法

ZH_S32 ZH_MPI_VENC_GetChnParam(VENC_CHN VeChn, VENC_CHN_PARAM_S *pstChnParam);

参数

参数名数据类型描述输入/输出
VeChnVENC_CHN编码通道号。取值范围:[0,VENC_MAX_CHN_NUM)。输入
pstChnParamVENC_CHN_PARAM_S*Venc 的通道参数。输出

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

注意事项

如果通道未创建,则返回失败。


ZH_MPI_VENC_SetChnParam

描述

设置通道参数。

语法

ZH_S32 ZH_MPI_VENC_SetChnParam(VENC_CHN VeChn, const VENC_CHN_PARAM_S *pstChnParam);

参数

参数名数据类型描述输入/输出
VeChnVENC_CHN编码通道号。取值范围:[0,VENC_MAX_CHN_NUM)。输入
pstChnParamconst VENC_CHN_PARAM_S*Venc 的通道参数。输入

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

注意事项

  • 如果通道未创建,则返回失败。
  • 接口需要在 ZH_MPI_VENC_StartRecvFrame 函数前调用,编码过程中不支持动态调用。

ZH_MPI_VENC_InsertUserData

描述

插入用户数据。

语法

ZH_S32 ZH_S32 ZH_MPI_VENC_InsertUserData(VENC_CHN VeChn, ZH_U8 *pu8Data, ZH_U32 u32Len);

参数

参数名数据类型描述输入/输出
VeChnVENC_CHN编码通道号。取值范围:[0,VENC_MAX_CHN_NUM)。输入
pu8DataZH_U8*用户数据指针。输入
u32LenZH_U32用户数据长度。 取值范围:(0,1024],以 byte 为单位。输入

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

注意事项

  • 如果通道未创建,则返回失败。
  • 如果 pu8Data 为空,则返回失败。
  • 插入用户数据,只支持 H.264/H.265 和 MJPEG/JPEG 编码协议。
  • H.264/H.265 协议通道最多同时分配 4 块内存空间用于缓存用户数据,且每段用户数据大小不超过 1k byte。如果用户插入的数据多于 4 块,或插入的一段用户数据大于 1k byte 时,此接口会返回错误。每段用户数据以 SEI 包的形式被插入到最新的图像码流包之前。在某段用户数据包被编码发送之后,H.264/H265 通道内缓存这段用户数据的内存空间被清零,用于存放新的用户数据。
  • JPEG/MJPEG 协议通道最多同时分配 4 块内存空间用于缓存用户数据,且每段用户数据大小不超过 1k byte。如果用户插入的数据多于 4 块,或插入的一段用户数据大于 1k byte 时,此接口会返回错误。用户数据以 APPsegment(0xFFE7)形式添加到图像码流中。在用户数据被编码发送之后,JPEG/MJPEG 通道内缓存这段用户数据的内存空间被清零,用于存放新的用户数据。

ZH_MPI_VENC_GetRcAdvParam

描述

获取 RC 模块的高级参数。

语法

ZH_S32 ZH_MPI_VENC_GetRcAdvParam(VENC_CHN VeChn, VENC_RC_ADVPARAM_S *pstRcAdvParam);

参数

参数名数据类型描述输入/输出
VeChnVENC_CHN编码通道号。取值范围:[0,VENC_MAX_CHN_NUM)。输入
pstRcAdvParamVENC_RC_ADVPARAM_S*RC 模块的高级参数。输出

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

注意事项

如果通道未创建,则返回失败。


ZH_MPI_VENC_SetRcAdvParam

描述

设置 RC 模块的高级参数。

语法

ZH_S32 ZH_MPI_VENC_SetRcAdvParam(VENC_CHN VeChn, const VENC_RC_ADVPARAM_S *pstRcAdvParam);

参数

参数名数据类型描述输入/输出
VeChnVENC_CHN编码通道号。取值范围:[O,VENC_MAX_CHN_NUM)。输入
pstRcAdvParamconst VENC_RC_ADVPARAM_S*RC 高级参数,此接口会包含一些与码率控制算法相关性较小的高级参数,并且未来可能会扩展。输入

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

注意事项

  • 如果通道未创建,则返回失败。

  • 本接口用于设置 RC 模块的高级参数。

    u32ClearStatAfterSetAttr:设置新的通道码率后,是否清除码率控制的统计信息,默认为 1°。目前只支持清除码率控制统计信息。


ZH_MPI_VENC_GetSuperFrameStrategy

描述

获取通道参数。

语法

ZH_S32 ZH_MPI_VENC_GetSuperFrameStrategy(VENC_CHN VeChn, VENC_SUPERFRAME_CFG_S *pstSuperFrmParam);

参数

参数名数据类型描述输入/输出
VeChnVENC_CHN编码通道号。取值范围:[O,VENC_MAX_CHN_NUM)。输入
pstSuperFrmParamVENC_SUPERFRAME_CFG_S*编码超大帧配置参数。输出

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

注意事项

如果通道未创建或者 pstSuperFrmParam 为空,则返回失败。


ZH_MPI_VENC_SetSuperFrameStrategy

描述

设置编码超大帧配置。

语法

ZH_S32 ZH_MPI_VENC_SetSuperFrameStrategy(VENC_CHN VeChn, const VENC_SUPERFRAME_CFG_S *pstSuperFrmParam);

参数

参数名数据类型描述输入/输出
VeChnVENC_CHN编码通道号。取值范围:[0,VENC_MAX_CHN_NUM)。输入
pstSuperFrmParamconst VENC_SUPERFRAME_CFG_S*编码超大帧配置参数。输入

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

注意事项

  • 如果通道未创建,则返回失败。
  • 本接口属于高级接口,用户可以选择性调用,系统默认关闭此功能。

ZH_MPI_VENC_GetFrameLostStrategy

描述

获取编码通道瞬时码率超过阈值时丢帧策略。

语法

ZH_S32 ZH_MPI_VENC_GetFrameLostStrategy(VENC_CHN VeChn, VENC_FRAMELOST_S *pstFrmLostParam);

参数

参数名数据类型描述输入/输出
VeChnVENC_CHN编码通道号。取值范围:[0,VENC_MAX_CHN_NUM)。输入
pstFrmLostParamVENC_FRAMELOST_S*编码通道丢帧策略的参数。输出

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

注意事项

如果通道未创建或者 pstFrmLostParam 为空,则返回失败。


ZH_MPI_VENC_SetFrameLostStrategy

描述

设置编码通道瞬时码率超过阈值时丢帧策略。

语法

ZH_S32 ZH_MPI_VENC_SetFrameLostStrategy(VENC_CHN VeChn, const VENC_FRAMELOST_S *pstFrmLostParam);

参数

参数名数据类型描述输入/输出
VeChnVENC_CHN编码通道号。取值范围:[0,VENC_MAX_CHN_NUM)。输入
pstFrmLostParamconst VENC_FRAMELOST_S*编码通道丢帧策略的参数。输入

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

注意事项

  • 如果通道未创建,则返回失败。
  • pstFrmLostParam 主要由四个参数决定。
    • bFrmLostOpen:丢帧开关。
    • u32FrmLostBpsThr:丢帧阈值百分比。
    • enFrmLostMode:丢帧策略模式。
    • u32EncFrmGaps:最大允许连续丢帧帧数。
  • 本接口属于高级接口,用户可以选择性调用,系统有默认值,默认在瞬时码率超出阈值时为丢帧。
  • 本接口提供瞬时码率超过阈值时两种处理方式:丢帧和编码 pskip 帧,Mjpeg 只支持丢帧处理方式。

ZH_MPI_VENC_GetIntraRefresh

描述

获取 P 帧刷 Islice 的设置参数。

语法

ZH_S32 ZH_MPI_VENC_GetIntraRefresh(VENC_CHN VeChn, VENC_INTRA_REFRESH_S *pstIntraRefresh);

参数

参数名数据类型描述输入/输出
VeChnVENC_CHN编码通道号。取值范围:[O,VENC_MAX_CHN_NUM)。输入
pstlntraRefreshVENC_INTRA_REFRESH_S*刷 lslice 的参数。输出

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

注意事项

如果通道未创建或者 pstIntraRefresh 为空,则返回失败。


ZH_MPI_VENC_SetIntraRefresh

描述

设置 P 帧刷 Islice 的参数。

语法

ZH_S32 ZH_MPI_VENC_SetIntraRefresh(VENC_CHN VeChn, const VENC_INTRA_REFRESH_S *pstIntraRefresh);

参数

参数名数据类型描述输入/输出
VeChnVENC_CHN编码通道号。取值范围:[0,VENC_MAX_CHN_NUM)。输入
pstIntraRefreshconst VENC_INTRA_REFRESH_S*设置 P 帧刷 Islice 的参数。输入

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

注意事项

  • 如果通道未创建,则返回失败。
  • 本接口属于高级接口,用户可以选择性调用,系统默认关闭此功能。
  • 接口需要在 ZH_MPI_VENC_StartRecvFrame 函数前调用,编码过程中不支持动态调用。

ZH_MPI_VENC_GetChnRotation

描述

获取通道旋转角度。

语法

ZH_S32 ZH_MPI_VENC_GetChnRotation(VENC_CHN VeChn, ROTATION_E *enRotation);

参数

参数名数据类型描述输入/输出
VeChnVENC_CHN编码通道号。取值范围:[0,VENC_MAX_CHN_NUM)。输入
enRotationROTATION_E*编码旋转角度。输出

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

注意事项

如果通道未创建或者 enRotation 为空,则返回失败。


ZH_MPI_VENC_SetChnRotation

描述

设置通道旋转角度。

语法

ZH_S32 ZH_MPI_VENC_SetChnRotation(VENC_CHN VeChn, ROTATION_E enRotation);

参数

参数名数据类型描述输入/输出
VeChnVENC_CHN编码通道号。取值范围:[0,VENC_MAX_CHN_NUM)。输入
enRotationROTATION_E编码旋转角度。输入

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

注意事项

  • 如果通道未创建,则返回失败。
  • 编码为 jpeg/mjpeg 并且旋转为 90/270 的时候输入图像的宽高需要 16 对齐。

ZH_MPI_VENC_AttachMbPool

描述

将编码通道绑定到某个视频缓存 MB 池中。

语法

ZH_S32 ZH_MPI_VENC_AttachMbPool(VENC_CHN VeChn, MB_POOL hMbPool)

参数

参数名数据类型描述输入/输出
VeChnVENC_CHN编码通道号。取值范围:[0,VENC_MAX_CHN_NUM)。输入
hMbPoolMB_POOL视频缓存 MB 池信息。输入

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

注意事项

  • 通道必须已创建,否则会返回通道不存在的错误 ZH_ERR_VENC_UNEXIST(参见 VENC 错误码)。
  • 参数 hMbPool 必须是已创建且有效的 MB 内存池,否则返回错误 ZH_ERR_VENC_ILLEGAL_PARAM (参见 VENC 错误码)。
  • 用户通过调用接口 ZH_MPI_MB_CreatePool 创建一个视频缓存MB池,再通过调用接口 ZH_MPI_VENC_AttachMbPool 将创建 MB 内存池绑定到该编码通道中。
  • 不允许把同一个编码通道绑定到多个 MB 池中。
  • 不允许多个编码通路绑定到同一个 MB 池中。
  • 使用此接口可以优化启动编码通道的耗时。
  • 接口需要在 ZH_MPI_VENC_StartRecvFrame 函数前调用,编码过程中不支持动态调用。

ZH_MPI_VENC_DetachMbPool

描述

将编码通道从某个视频缓存 MB 池中解绑定。

语法

ZH_S32 ZH_MPI_VENC_DetachMbPool(VENC_CHN VeChn)

参数

参数名数据类型描述输入/输出
VeChnVENC_CHN编码通道号。取值范围:[0,VENC_MAX_CHN_NUM)。输入

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

注意事项

  • 通道必须已创建,否则会返回通道不存在的错误 ZH_ERR_VENC_UNEXIST(参见 VENC 错误码)。
  • 需要在 ZH_MPI_VENC_StopRecvFrame 函数后使用,编码过程中不支持动态调用。

ZH_MPI_VENC_GetH264IntraPred

描述

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

语法

ZH_S32 ZH_MPI_VENC_GetH264IntraPred(VENC_CHN VeChn, VENC_H264_INTRA_PRED_S *pstH264IntraPred);

参数

参数名数据类型描述输入/输出
VeChnVENC_CHN编码通道号。取值范围:[0,VENC_MAX_CHN_NUM)。输入
pstH264lntraPredVENC_H264_INTRA_PRED_S*H.264 协议编码通道的帧内预测配置。输出

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

注意事项

  • 如果通道未创建或者 pstH264IntraPred 为空,则返回失败。
  • 本接口在编码通道创建之后,编码通道销毁之前调用。
  • 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。

ZH_MPI_VENC_SetH264IntraPred

描述

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

语法

ZH_S32 ZH_MPI_VENC_SetH264IntraPred(VENC_CHN VeChn, const VENC_H264_INTRA_PRED_S *pstH264IntraPred);

参数

参数名数据类型描述输入/输出
VeChnVENC_CHN编码通道号。取值范围:[O,VENC_MAX_CHN_NUM)。输入
pstH264IntraPredconst VENC_H264_INTRA_PRED_S*H.264 协议编码通道的帧内预测配置。输入

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

注意事项

  • 如果通道未创建或者 pstH264IntraPred 为空,则返回失败。
  • 帧间预测的属性仅支持 constrained_intra_pred_flag,具体的含义,请参见 H.264 协议。
  • 此接口属于高级接口,用户可以选择性调用,不建议调用,系统会有默认值。系统默认 constrained_intra_pred_flag 为 0°。
  • 本接口在编码通道创建之后,编码通道销毁之前设置。本接口在编码过程中被调用时,会插入一帧 I 帧并生效。
  • 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
  • 建议用户在调用此接口之前,先调用 ZH_MPI_VENC_GetH264IntraPred 接口,获取当前编码通道的 IntraPred 配置,然后再进行设置。

ZH_MPI_VENC_GetH264Trans

描述

获取 H.264 协议编码通道的变换、量化属性。

语法

ZH_S32 ZH_MPI_VENC_GetH264Trans(VENC_CHN VeChn, VENC_H264_TRANS_S *pstH264Trans);

参数

参数名数据类型描述输入/输出
VeChnVENC_CHN编码通道号。取值范围:[0,VENC_MAX_CHN_NUM)。输入
pstH264TransVENC_H264_TRANS_S*H.264 协议编码通道的变换、量化属性。输出

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

注意事项

  • 如果通道未创建或者 pstH264Trans 为空,则返回失败。
  • 本接口在编码通道创建之后,编码通道销毁之前调用。
  • 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。

ZH_MPI_VENC_SetH264Trans

描述

设置 H.264 协议编码通道的变换、量化属性。

语法

ZH_S32 ZH_MPI_VENC_SetH264Trans(VENC_CHN VeChn, const VENC_H264_TRANS_S *pstH264Trans);

参数

参数名数据类型描述输入/输出
VeChnVENC_CHN编码通道号。取值范围:[0,VENC_MAX_CHN_NUM)。输入
pstH264Transconst VENC_H264_TRANS_S*H.264 协议编码通道的变换、量化属性。输入

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

注意事项

  • 如果通道未创建或者 pstH264Trans 为空,则返回失败。
  • 变换、量化属性主要由五个参数组成:
    • u32TransMode:帧内/帧间预测宏块的变换属性。
      • u32TransMode = 0 表示支持对帧内/帧间预测宏块支持 4×4 变换和 8x8 变换。
      • u32TransMode = 1 表示只支持对帧内/帧间预测宏块支持 4x4 变换。
    • bScalingListValid:表示 InterScalingList8x8、IntraScalingList8x8 量化表是否有效。不支持设置bScalingListValid 为 true。保留,暂时没有使用。
    • InterScalingList8x8:对帧间预测宏块进行 8x8 变换时,可由用户通过此数组提供量化表,保留,暂时没有使用。
    • IntraScalingList8x8:对帧内预测宏块进行 8x8 变换时,可由用户通过此数组提供量化表,保留,暂时没有使用。
    • chroma_qp_index_offset:默认值 -6,具体含义请参见 H.264 协议。
  • 本接口在编码通道创建之后,编码通道销毁之前设置。本接口在编码过程中被调用时,会插入一帧 I 帧并生效。
  • 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
  • 建议用户在调用此接口之前,先调用 ZH_MPI_VENC_GetH264Trans 接口,获取当前编码通道的 trans 配置,然后再进行设置。

ZH_MPI_VENC_GetH264Entropy

描述

获取 H.264 协议编码通道的熵编码模式。

语法

ZH_S32 ZH_MPI_VENC_GetH264Entropy(VENC_CHN VeChn, VENC_H264_ENTROPY_S *pstH264EntropyEnc);

参数

参数名数据类型描述输入/输出
VeChnVENC_CHN编码通道号。取值范围:[0,VENC_MAX_CHN_NUM)。输入
pstH264EntropyEncVENC_H264_ENTROPY_S*H.264协议编码通道的熵编码模式。输出

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

注意事项

  • 如果通道未创建或者 pstH264EntropyEnc 为空,则返回失败。
  • 本接口在编码通道创建之后,编码通道销毁之前调用。
  • 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。

ZH_MPI_VENC_SetH264Entropy

描述

设置 H.264 协议编码通道的熵编码模式。

语法

ZH_S32 ZH_MPI_VENC_SetH264Entropy(VENC_CHN VeChn, const VENC_H264_ENTROPY_S *pstH264EntropyEnc);

参数

参数名数据类型描述输入/输出
VeChnVENC_CHN编码通道号。取值范围:[O,VENC_MAX_CHN_NUM)。输入
pstH264EntropyEncconst VENC_H264_ENTROPY_S*H.264 协议编码通道的熵编码模式。输入

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

注意事项

  • 如果通道未创建 pstH264EntropyEnc 为空,则返回失败。
  • 变换、量化属性主要由两个参数组成:
    • u32EntropyEncMode:熵编码方式。
      • u32EntropyEncMode = 0 表示用 cavlc 编码。
      • u32EntropyEncMode=1表示使用 cabac 编码方式。默认为 1,即 cabac 编码方式。
    • Cabac_init_idc:cabac 初始化索引,系统默认为 0。具体含义请参见 H.264 协议。
  • 本接口在编码通道创建之后,编码通道销毁之前设置。本接口在编码过程中被调用时,会插入一帧 I 帧并生效。
  • 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
  • 建议用户在调用此接口之前,先调用 ZH_MPI_VENC_GetH264Entropy 接口,获取当前编码通道的 entropy 配置,然后再进行设-置。

ZH_MPI_VENC_GetH264Dblk

描述

获取 H.264 协议编码通道的 Deblocking 类型。

语法

ZH_S32 ZH_MPI_VENC_GetH264Dblk(VENC_CHN VeChn, VENC_H264_DBLK_S *pstH264Dblk);

参数

参数名数据类型描述输入/输出
VeChnVENC_CHN编码通道号。取值范围:[0,VENC_MAX_CHN_NUM)。输入
pstH264DblkVENC_H264_DBLK_S*H.264 协议编码通道的 Deblocking 类型。输出

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

注意事项

  • 如果通道未创建或者 pstH264Dblk 为空,则返回失败。
  • 本接口在编码通道创建之后,编码通道销毁之前调用。
  • 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。

ZH_MPI_VENC_SetH264Dblk

描述

设置 H.264 协议编码通道的 Deblocking 类型。

语法

ZH_S32 ZH_MPI_VENC_SetH264Dblk(VENC_CHN VeChn, const VENC_H264_DBLK_S *pstH264Dblk);

参数

参数名数据类型描述输入/输出
VeChnVENC_CHN编码通道号。取值范围:[0,VENC_MAX_CHN_NUM)。输入
pstH264Dblkconst VENC_H264_DBLK_S*H.264协议编码通道的 Deblocking 类型。输入

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

注意事项

  • 如果通道未创建 pstH264Dblk 为空,则返回失败。

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

    • disable_deblocking_filter_idc:具体含义请参见 H.264 协议。
    • slice_alpha_c0_offset_div2:具体含义请参见 H.264 协议。
    • slice_beta_offset_div2:具体含义请参见 H.264 协议。
  • 系统默认打开 Deblocking 功能,默认 disable_deblocking_filter_idc = 0 ,slice_alpha_c0_offset_div2 = 0 , slice_beta_offset_div2 = 0°

    如果用户想关闭 Deblocking 功能,可以将 disable_deblocking_filter_idc 置为 1°

  • 本接口在编码通道创建之后,编码通道销毁之前设置。本接口在编码过程中被调用时,会插入一帧 I 帧并生效。

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

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


ZH_MPI_VENC_GetH264Vui

描述

获取 H.264 协议编码通道的 Vui 参数。

语法

ZH_S32 ZH_MPI_VENC_GetH264Vui(VENC_CHN VeChn, VENC_H264_VUI_S *pstH264Vui);

参数

参数名数据类型描述输入/输出
VeChnVENC_CHN编码通道号。取值范围:[0,VENC_MAX_CHN_NUM)。输入
pstH264VuiVENC_H264_VUI_S*H.264 协议编码通道的 Vui 参数。输出

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

注意事项

  • 如果通道未创建或者 pstH264Vui 为空,则返回失败。
  • 本接口在编码通道创建之后,编码通道销毁之前调用。
  • 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。

ZH_MPI_VENC_SetH264Vui

描述

设置 H.264 协议编码通道的 Vui 参数。

语法

ZH_S32 ZH_MPI_VENC_SetH264Vui(VENC_CHN VeChn, const VENC_H264_VUI_S *pstH264Vui);

参数

参数名数据类型描述输入/输出
VeChnVENC_CHN编码通道号。取值范围:[0,VENC_MAX_CHN_NUM)。输入
pstH264Vuiconst VENC_H264_VUI_S*H.264 协议编码通道的 Vui 参数。输入

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

注意事项

  • 如果通道未创建或者 pstH264Vui 为空,则返回失败。
  • 本接口在编码通道创建之后,编码通道销毁之前设置。本接口在编码过程中被调用时,会插入一帧 I 帧并生效。
  • 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。

ZH_MPI_VENC_GetH265Trans

描述

获取 H.265 通道的变换量化属性。

语法

ZH_S32 ZH_MPI_VENC_GetH265Trans(VENC_CHN VeChn, VENC_H265_TRANS_S *pstH265Trans);

参数

参数名数据类型描述输入/输出
VeChnVENC_CHN编码通道号。取值范围:[0,VENC_MAX_CHN_NUM)。输入
pstH265TransVENC_H265_TRANS_S*H.265 通道的变换量化属性。输出

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

注意事项

  • 如果通道未创建或者 pstH265Trans 为空,则返回失败。
  • 本接口在编码通道创建之后,编码通道销毁之前调用。
  • 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。

ZH_MPI_VENC_SetH265Trans

描述

设置 H.265 通道的变换量化属性。

语法

ZH_S32 ZH_MPI_VENC_SetH265Trans(VENC_CHN VeChn, const VENC_H265_TRANS_S *pstH265Trans);

参数

参数名数据类型描述输入/输出
VeChnVENC_CHN编码通道号。取值范围:[0,VENC_MAX_CHN_NUM)。输入
pstH265Transconst VENC_H265_TRANS_S*H.265 通道的变换量化属性。输入

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

注意事项

  • 如果通道未创建或者pstH265Trans为空,则返回失败。

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

    • cb_qp_offset:默认值 -6,具体的含义,请参见 H.265 协议关于 pps_cb_qp_offset 的解释。
    • cr_qp_offset:默认值 -6,具体的含义,请参见 H.265 协议关于 pps_cr_qp_offset 的解释。
    • bScalingListEnabled:表示量化表是否有效,无量化表时置为 0。保留,暂时没有使用。
    • bScalingListTu4Valid:表示 InterScalingList4X4、IntraScalingList4X4 量化表是否有效,使用协议默认量化表时置为 0。保留,暂时没有使用。
    • InterScalingList4X4[2][16]: InterScalingList4X4[0][16] 表示帧间亮度量化表。 InterScalingList4X4[1][16] 表示帧间色度量化表,可由用户通过此数组提供量化表。保留,暂时没有使用。
    • IntraScalingList4X4[2][16]: IntraScalingList4X4[0][16] 表示帧内亮度量化表。
      • IntraScalingList4X4[1][16] 表示帧内色度量化表,可由用户通过此数组提供量化表。
    • IbScalingListTu8Valid:表示 InterScalingList8X8、IntraScalingList8X8 量化表是否有效,使用协议默认量化表时置为 0。保留,暂时没有使用。
    • InterScalingList8X8[2][64]: InterScalingList8X8[0][64] 表示帧间亮度量化表。 InterScalingList8X8[1][64] 表示帧间色度量化表,可由用户通过此数组提供量化表。保留,暂时没有使用。
    • IntraScalingList8X8[2][64]: IntraScalingList8X8[0][64] 表示帧内亮度量化表。IntraScalingList8X8[1][64] 表示帧内色度量化表,可由用户通过此数组提供量化表。保留,暂时没有使用。
    • bScalingListTu16Valid:表示 InterScalingList16X16、IntraScalingList16X16 量化表是否有效,使用协议默认量化表时置为 0° 保留,暂时没有使用。保留,暂时没有使用。
    • InterScalingList16X16[2][64]: InterScalingList16X16[0][64] 表示帧间亮度量化表InterScalingList16X16[1][64] 表示帧间色度量化表,可由用户通过此数组提供量化表。保留,暂时没有使用。
    • IntraScalingList16X16[2][64]: IntraScalingList16X16[0][64] 表示帧内亮度量化表。 IntraScalingList16X16[1][64] 表示帧内色度量化表,可由用户通过此数组提供量化表。保留,暂时没有使用。
    • bScalingListTu32Valid:表示 InterScalingList32X32、IntraScalingList32X32 量化表是否有效,使用协议默认量化表时置为 0° 保留,暂时没有使用。
    • InterScalingList32X32[64]InterScalingList32X32[64] 表示帧间亮度量化表,可由用户通过此数组提供量化表。保留,暂时没有使用。
    • IntraScalingList32X32[64]IntraScalingList32X32[64] 表示帧内亮度量化表,可由用户通过此数组提供量化表。保留,暂时没有使用。
  • 本接口在编码通道创建之后,编码通道销毁之前设置。本接口在编码过程中被调用时,会插入一帧 I 帧并生效。

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

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


ZH_MPI_VENC_GetH265Entropy

描述

获取 H.265 通道的熵编码属性。

语法

ZH_S32 ZH_MPI_VENC_GetH265Entropy(VENC_CHN VeChn, VENC_H265_ENTROPY_S *pstH265Entropy);

参数

参数名数据类型描述输入/输出
VeChnVENC_CHN编码通道号。取值范围:[0,VENC_MAX_CHN_NUM)。输入
pstH265EntropyVENC_H265_ENTROPY_S*H.265 通道的熵编码属性。输出

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

注意事项

  • 如果通道未创建或者 pstH265Entropy 为空,则返回失败。
  • 本接口在编码通道创建之后,编码通道销毁之前调用。
  • 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。

ZH_MPI_VENC_SetH265Entropy

描述

设置 H.265 通道的熵编码属性。

语法

ZH_S32 ZH_MPI_VENC_SetH265Entropy(VENC_CHN VeChn, const VENC_H265_ENTROPY_S *pstH265Entropy);

参数

参数名数据类型描述输入/输出
VeChnVENC_CHN编码通道号。取值范围:[0,VENC_MAX_CHN_NUM)。输入
pstH265Entropyconst VENC_H265_ENTROPY_S*H.265 通道的熵编码属性。输入

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

注意事项

  • 如果通道未创建或者 pstH265Entropy 为空,则返回失败。
  • 熵编码属性主要由一个参数决定 cabac_init_flag:具体的含义,请参见 H.265 协议。保留,暂时没有使用。
  • 本接口在编码通道创建之后,编码通道销毁之前设置。本接口在编码过程中被调用时,会插入一帧I帧并生效。
  • 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
  • 建议用户在调用此接口之前,先调用 ZH_MPI_VENC_GetH265Entropy 接口,获取当前编码通道的 entropy 配置,然后再进行设置。

ZH_MPI_VENC_GetH265Dblk

描述

获取 H.265 通道的 Deblocking 属性。

语法

ZH_S32 ZH_MPI_VENC_GetH265Dblk(VENC_CHN VeChn, VENC_H265_DBLK_S *pstH265Dblk);

参数

参数名数据类型描述输入/输出
VeChnVENC_CHN编码通道号。取值范围:[O,VENC_MAX_CHN_NUM)。输入
pstH265DblkVENC_H265_DBLK_S*H.265 通道的 Deblocking 属性。输出

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

注意事项

  • 如果通道未创建或者 pstH265Dblk 为空,则返回失败。
  • 本接口在编码通道创建之后,编码通道销毁之前调用。
  • 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。

ZH_MPI_VENC_SetH265Dblk

描述

设置 H.265 通道的 Deblocking 属性。

语法

ZH_S32 ZH_MPI_VENC_SetH265Dblk(VENC_CHN VeChn, const VENC_H265_DBLK_S *pstH265Dblk);

参数

参数名数据类型描述输入/输出
VeChnVENC_CHN编码通道号。取值范围:[0,VENC_MAX_CHN_NUM)。输入
pstH265Dblkconst VENC_H265_DBLK_S*H.265 通道的 Deblocking 属性。输入

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

注意事项

  • 如果通道未创建或者 pstH265Dblk 为空,则返回失败。

  • Deblocking 属性主要由三个参数决定

    • slice_deblocking_filter_disabled_flag:具体含义,请参见 H.265 协议。
    • slice_beta_offset_div2:具体含义,请参见 H.265 协议。
    • slice_tc_offset_div2:具体含义,请参见 H.265 协议。
  • 本接口属于高级接口,用户可以选择性调用,建议不调用,系统默认打开 Deblocking 功能,默认slice_deblocking_filter_disabled_flag=0,slice_tc_offset_div2 = 0 ,slice_beta_offset_div2=0。

    如果用户想关闭 Deblocking 功能,可以将 slice_deblocking_filter_disabled_flag 置为 1。

  • 本接口在编码通道创建之后,编码通道销毁之前设置。本接口在编码过程中被调用时,会插入一帧 I 帧并生效。

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

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


ZH_MPI_VENC_GetH265Sao

描述

获取 H.265 通道的 SAO 属性。

语法

ZH_S32 ZH_MPI_VENC_GetH265Sao(VENC_CHN VeChn, VENC_H265_SAO_S *pstH265Sao);

参数

参数名数据类型描述输入/输出
VeChnVENC_CHN编码通道号。取值范围:[0,VENC_MAX_CHN_NUM)。输入
pstH265Sa0VENC_H265_SAO_S*H.265 协议编码通道的 SAO 配置。输出

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

注意事项

  • 如果通道未创建或者 pstH265Sao 为空,则返回失败。
  • 本接口在编码通道创建之后,编码通道销毁之前调用。
  • 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。

ZH_MPI_VENC_SetH265Sao

描述

设置 H.265 通道的 SAO 属性。

语法

ZH_S32 ZH_MPI_VENC_SetH265Sao(VENC_CHN VeChn, const VENC_H265_SAO_S *pstH265Sao);

参数

参数名数据类型描述输入/输出
VeChnVENC_CHN编码通道号。取值范围:[0,VENC_MAX_CHN_NUM)。输入
pstH265Sa0const VENC_H265_SAO_S*H.265 协议编码通道的 SAO 配置。输入

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

注意事项

  • 如果通道未创建或者 pstH265Sao 为空,则返回失败。
  • SAO 属性主要由两个参数决定。
    • slice_sao_luma_flag:当前 slice 亮度分量是否作 SAO 滤波。
    • slice_sao_chroma_flag:当前 slice 色度分量是否作 SAO 滤波。
  • 本接口属于高级接口,用户可以选择性调用,建议不调用,系统默认打开 sao 功能,默认 slice_sao_luma_flag = 1 ,slice_sao_chroma_flag = 1°
  • 本接口在编码通道创建之后,编码通道销毁之前设置。本接口在编码过程中被调用时,会插入一帧 I 帧并生效。
  • 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
  • 建议用户在调用此接口之前,先调用 ZH_MPI_VENC_GetH265Sao 接口,获取当前编码通道的 SAO 配置,然后再进行设置。

ZH_MPI_VENC_GetH265PredUnit

描述

获取 H.265 通道的 pu 属性。

语法

ZH_S32 ZH_MPI_VENC_GetH265PredUnit(VENC_CHN VeChn, VENC_H265_PU_S *pstPredUnit);

参数

参数名数据类型描述输入/输出
VeChnVENC_CHN编码通道号。取值范围:[0,VENC_MAX_CHN_NUM)。输入
pstPredUnitVENC_H265_PU_S*H.265 通道的 pu 配置。输出

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

注意事项

  • 如果通道未创建或者 pstPredUnit 为空,则返回失败。
  • 本接口在编码通道创建之后,编码通道销毁之前调用。
  • 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。

ZH_MPI_VENC_SetH265PredUnit

描述

设置 H.265 通道的 pu 属性。

语法

ZH_S32 ZH_MPI_VENC_SetH265PredUnit(VENC_CHN VeChn, const VENC_H265_PU_S *pstPredUnit);

参数

参数名数据类型描述输入/输出
VeChnVENC_CHN编码通道号。取值范围:[O,VENC_MAX_CHN_NUM)。输入
pstPredUnitconst VENC_H265_PU_S*H.265 通道的 pu 配置。输入

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

注意事项

  • 如果通道未创建或者 pstPredUnit 为空,则返回失败。
  • pu属性主要由两个参数决定。
    • constrained_intra_pred_flag:具体的含义,请参见 H.265 协议。保留,暂时没有使用。
    • strong_intra_smoothing_enabled_flag:具体的含义,请参见 H.265 协议。
  • 本接口属于高级接口,用户可以选择性调用,建议不调用,默认 constrained_intra_pred_flag=0,strong_intra_smoothing_enabled_flag=1。
  • 本接口在编码通道创建之后,编码通道销毁之前设置。本接口在编码过程中被调用时,会插入一帧I帧并生效。
  • 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
  • 建议用户在调用此接口之前,先调用 ZH_MPI_VENC_GetH265PredUnit 接口,获取当前编码通道的 pu 配置,然后再进行设置。

ZH_MPI_VENC_GetH265Vui

描述

获取 H.265 协议编码通道的 Vui 参数。

语法

ZH_S32 ZH_MPI_VENC_GetH265Vui(VENC_CHN VeChn, VENC_H265_VUI_S *pstH265Vui);

参数

参数名数据类型描述输入/输出
VeChnVENC_CHN编码通道号。取值范围:[0,VENC_MAX_CHN_NUM)。输入
pstH265VuiVENC_H265_VUI_S*H.265 协议编码通道的 Vui 参数。输出

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

注意事项

  • 如果通道未创建或者 pstH265Vui 为空,则返回失败。
  • 本接口在编码通道创建之后,编码通道销毁之前调用。
  • 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。

ZH_MPI_VENC_SetH265Vui

描述

设置 H.265 协议编码通道的 Vui 参数。

语法

ZH_S32 ZH_MPI_VENC_SetH265Vui(VENC_CHN VeChn, const VENC_H265_VUI_S *pstH265Vui);

参数

参数名数据类型描述输入/输出
VeChnVENC_CHN编码通道号。取值范围:[0,VENC_MAX_CHN_NUM)。输入
pstH265Vuiconst VENC_H265_VUI_S*H.265协议编码通道的 Vui 参数。输入

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

注意事项

  • 如果通道未创建或者 pstH265Vui 为空,则返回失败。
  • 本接口在编码通道创建之后,编码通道销毁之前设置。本接口在编码过程中被调用时,会插入一帧 I 帧并生效。
  • 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。

ZH_MPI_VENC_GetRefParam

描述

获取 H.264/H.265 编码通道高级跳帧参考参数。

语法

ZH_S32 ZH_MPI_VENC_GetRefParam(VENC_CHN VeChn, VENC_REF_PARAM_S *pstRefParam);

参数

参数名数据类型描述输入/输出
VeChnVENC_CHN编码通道号。取值范围:[0,VENC_MAX_CHN_NUM)。输入
pstRefParamVENC_REF_PARAM_S*H.264/H.265 编码通道高级跳帧参考参数。输出

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

注意事项

  • 如果通道未创建或者 pstRefParam 为空,则返回失败。
  • 本接口在编码通道创建之后,编码通道销毁之前调用。
  • 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。

ZH_MPI_VENC_SetRefParam

描述

设置 H.264/H.265 编码通道高级跳帧参考参数。

语法

ZH_S32 ZH_MPI_VENC_SetRefParam(VENC_CHN VeChn, const VENC_REF_PARAM_S *pstRefParam);

参数

参数名数据类型描述输入/输出
VeChnVENC_CHN编码通道号。取值范围:[0,VENC_MAX CHN_NUM)。输入
pstRefParamconst VENC_REF_PARAM_S*H.264/H.265 编码通道高级跳帧参考参数。输入

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

注意事项

  • 如果通道未创建或者 pstRefParam 为空,则返回失败。
  • 本接口在编码通道创建之后,编码通道销毁之前设置。本接口在编码过程中被调用时,会插入一帧 I 帧并生效。
  • 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。

ZH_MPI_VENC_GetMjpegParam

描述

获取 MJPEG 协议编码通道的高级参数配置。

语法

ZH_S32 ZH_MPI_VENC_GetMjpegParam(VENC_CHN VeChn, VENC_MJPEG_PARAM_S *pstMjpegParam);

参数

参数名数据类型描述输入/输出
VeChnVENC_CHN编码通道号。取值范围:[0,VENC_MAX_CHN_NUM)。输入
pstMjpegParamVENC_MJPEG_PARAM_S*MJPEG协议编码通道的高级参数配置。输出

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

注意事项

  • 如果通道未创建或者 pstMjpegParam 为空,则返回失败。
  • 本接口在编码通道创建之后,编码通道销毁之前调用。
  • 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。

ZH_MPI_VENC_SetMjpegParam

描述

设置 MJPEG 协议编码通道的高级参数。

语法

ZH_S32 ZH_MPI_VENC_SetMjpegParam(VENC_CHN VeChn, VENC_MJPEG_PARAM_S *pstMjpegParam);

参数

参数名数据类型描述输入/输出
VeChnVENC_CHN编码通道号。取值范围:[0,VENC_MAX_CHN_NUM)。输入
pstMjpegParamVENC_MJPEG_PARAM_S*MJPEG 协议编码通道的高级参数集合。输出

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

注意事项

  • 如果通道未创建或者 pstMjpegParam 为空,则返回失败。
  • 本接口在编码通道创建之后,编码通道销毁之前调用。
  • 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。
  • 此参数优先于 q_factor设置,设置此接口后q_factor参数会失效。
  • 高级参数主要由四个参数组成。
    • U8YQt[64],u8CbQt[64],u8CrQt[64]:对应三个量化表空间,用户可以通过这三个参数设置用户的量化表。
    • u32MCUPerECS:每个 Ecs 中包含多少 MCU。系统模式 u32MCUPerECS = 0,表示当前帧的所有的 MCU 被编码为一个 ECS。u32MCUPerECS 的最小值为 0,最大值不超过(picwidth + 15) >> 4 (picheigh + 15) >> 4 (yuv420sp)、(picwidth+15) >> 4 (picheight+15) >> 4 2(yuv42 sp)、(picwidth + 15) >> 4 (picheigh + 15) >> 4 4 (yuv444sp)。

ZH_MPI_VENC_GetQpmap

描述

获取 Qpmap MB_BLK。

语法

ZH_S32 ZH_MPI_VENC_GetQpmap(VENC_CHN VeChn, MB_BLK *pBlk);

参数

参数名数据类型描述输入/输出
VeChnVENC_CHN编码通道号。取值范围:[0,VENC_MAX_CHN_NUM)。输入
pBlkMB_BLK*Qpmap 的 MB_BLK。输出

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

ZH_MPI_VENC_SetQpmap

描述

设置 Qpmap MB_BLK。

语法

ZH_S32 ZH_MPI_VENC_SetQpmap(VENC_CHN VeChn, const MB_BLK blk);

参数

参数名数据类型描述输入/输出
VeChnVENC_CHN编码通道号。取值范围:[0,VENC_MAX_CHN_NUM)。输入
blkconst MB_BLKQpmap的MB_BLK。输入

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

注意事项

参考 QPMAP 模式详细说明。


ZH_MPI_VENC_GetSliceSplit

描述

获取编码通道 slice 分割属性。

语法

ZH_S32 ZH_MPI_VENC_GetSliceSplit(VENC_CHN VeChn, VENC_SLICE_SPLIT_S *pstRefParam);

参数

参数名数据类型描述输入/输出
VeChnVENC_CHN编码通道号。取值范围:[0,VENC_MAX_CHN_NUM)。输入
pstSliceSplitVENC_SLICE_SPLIT_S*编码通道 slice 分割属性参数。输出

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

注意事项

  • 如果通道未创建或者 pstSliceSplit 为空,则返回失败。
  • 本接口在编码通道创建之后,编码通道销毁之前调用。

ZH_MPI_VENC_SetSliceSplit

描述

设置编码通道 slice 分割属性。

语法

ZH_S32 ZH_MPI_VENC_SetSliceSplit(VENC_CHN VeChn, const VENC_SLICE_SPLIT_S *pstSliceSplit);

参数

参数名数据类型描述输入/输出
VeChnVENC_CHN编码通道号。取值范围:[0,VENC_MAX_CHN_NUM)。输入
pstSliceSplitconst VENC_SLICE_SPLIT_S*编码通道 slice 分割属性参数。输入

返回值

返回值描述
0成功。
非 0失败,请参见 VENC 错误码

注意事项

  • 如果通道未创建或者 pstSliceSplit 为空,则返回失败。
  • 本接口在编码通道创建之后,编码通道销毁之前设置。
  • 建议用户在创建通道之后,启动编码之前调用此接口,减少在编码过程中调用的次数。

数据类型

视频编码相关数据类型、数据结构定义如下:


VENC_MAX_CHN_NUM

说明

定义编码通道最大个数。

定义

#define VENC_MAX_CHN_NUM 16

VENC_CHN_ATTR_S

说明

定义编码通道属性结构体。

定义

typedef struct zhVENC_CHN_ATTR_S {
VENC_ATTR_S stVencAttr;
VENC_RC_ATTR_S stRcAttr;
VENC_GOP_ATTR_S stGopAttr;
} VENC_CHN_ATTR_S;

成员

成员名称数据类型描述
stVencAttrVENC_ATTR_S编码器属性。
stRcAttrVENC_RC_ATTR_S码率控制器属性。
stGopAttrVENC_GOP_ATTR_SGop Mode 类型的结构体。

相关主题


VENC_ATTR_S

说明

定义编码器属性结构体。

定义

    typedef struct zhVENC_ATTR_S {
ZH_CODEC_ID_E enType;
ZH_U32 u32MaxPicWidth;
ZH_U32 u32MaxPicHeight;
PIXEL_FORMAT_E enPixelFormat;
MIRROR_E enMirror;
ZH_U32 u32BufSize;
ZH_U32 u32Profile;
ZH_BOOL bByFrame;
ZH_U32 u32PicWidth;
ZH_U32 u32PicHeight;
ZH_U32 u32VirWidth;
ZH_U32 u32VirHeight;
ZH_U32 u32StreamBufCnt;
union {
VENC_ATTR_H264_S stAttrH264e;
VENC_ATTR_H265_S stAttrH265e;
VENC_ATTR_MJPEG_S stAttrMjpege;
VENC_ATTR_JPEG_S stAttrJpege;
};
} VENC_ATTR_S;

成员

成员名称数据类型描述
enTypeZH_CODEC_ID_E编码协议类型。H264、H265等。
u32MaxPicWidthZH_U32编码支持的最大图像宽度,以像素为单位。
u32MaxPicHeightZH_U32编码支持的最大图像高度,以像素为单位。
enPixelFormatPIXEL_FORMAT_E编码输入图像像素格式。
enMirrorMIRROR_E编码输出图像镜像。详情参看 zh_comm_video.hPIXEL_FORMAT_E定义。
u32BufSizeZH_U32码流 buffer 大小。 推荐值如下。
  • 对于 H264/H265:一幅图像大小的 1/2。
  • 对于 Jpeg/Mjpeg:一幅图像宽高的乘积。
u32ProfileZH_U32编码的等级。
  • H.264 取值。 66:Baseline。 77:Main Profile。 100:High Profile。
  • H.265 取值。 0:Main Profile。 1:Main 10 Profile。
  • Jpeg/Mjpeg取值。 0:Baseline
bByFrameZH_BOOL帧/包模式获取码流。取值范围:{ZH_TRUE,ZH_FALSE}。
  • ZH_TRUE:按帧获取。
  • ZH_FALSE:按包获取。目前默认输出按帧获取。
  • 264 I 帧包含 sps/pps/idr 3 个 NALU 包信息。
  • 265 I 帧包含 vps/sps/pps/idr 4 个 NALU 包信息。
u32PicWidthZH_U32编码图像宽度,以像素为单位。
u32PicHeightZH_U32编码图像高度,以像素为单位。
u32VirWidthZH_U32硬件编码缓存宽度。以像素单位。
u32VirHeightZH_U32硬件编码缓存高度,以像素单位。
u32StreamBufCntZH_U32编码输出的最大缓存个数。
stAttrH264e
stAttrMjpege
stAttrJpege
stAttrH265e
VENC_ATTR_H264_S
VENC_ATTR_H265_S
VENC_ATTR_MJPEG_S
VENC_ATTR_JPEG_S
编码器属性。

注意事项

所有成员在 ZH_MPI_VENC_CreateChn 之后均不可修改。

相关主题


VENC_RC_ATTR_S

说明

定义编码通道码率控制器属性。

定义


typedef struct zhVENC_RC_ATTR_S {
VENC_RC_MODE_E enRcMode;
union {
VENC_H264_CBR_S stH264Cbr;
VENC_H264_VBR_S stH264Vbr;
VENC_H264_AVBR_S stH264Avbr;
VENC_H264_FIXQP_S stH264FixQp;
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_FIXQP_S stH265FixQp;
};
} VENC_RC_ATTR_S;

成员

成员名称数据类型描述
enRcModeVENC_RC_MODE_ERC 模式。
stH264CbrVENC_H264_CBR_SH.264 协议编码通道 Cbr 模式属性。
stH264VbrVENC_H264_VBR_SH.264 协议编码通道 Vbr 模式属性。
stH264AvbrVENC_H264_AVBR_SH.264 协议编码通道 AVbr 模式属性。
stH264FixQpVENC_H264_FIXQP_SH.264 协议编码通道 FixQp 模式属性。
stMjpegCbrVENC_MJPEG_CBR_SMjpeg 协议编码通道 Cbr 模式属性。
stMjpegVbrVENC_MJPEG_VBR_SMjpeg 协议编码通道 Vbr 模式属性。
stMjpegFixQpVENC_MJPEG_FIXQP_SMjpeg 协议编码通道 FixQp 模式属性。
stH265CbrVENC_H265_CBR_SH.265 协议编码通道 Cbr 模式属性。
stH265VbrVENC_H265_VBR_SH.265 协议编码通道 Vbr 模式属性。
stH265AvbrVENC_H265_AVBR_SH.265 协议编码通道 AVbr 模式属性。
stH265FixQpVENC_H265_FIXQP_SH.265 协议编码通道 FixQp 模式属性。

注意事项

所有成员均为动态属性。

相关主题


VENC_RC_PARAM_S

说明

定义编码通道的码率控制高级参数。

定义


typedef struct zhVENC_RC_PARAM_S {
ZH_U32 s32FirstFrameStartQp;
union {
VENC_PARAM_H264_S stParamH264;
VENC_PARAM_H265_S stParamH265;
VENC_PARAM_MJPEG_S stParamMjpeg;
};
} VENC_RC_PARAM_S;

成员

成员名称数据类型描述
s32FirstFrameStartQpZH_U32第一帧的 qp 值,目前仅针对 H264/H265 编码有效,其他编码可不设置。
取值范围:[u32MinlQp,u32MaxlQp]。默认 26。
stParamH264VENC_PARAM_H264_Sh264 通道 qp 参数控制。
stParamH265VENC_PARAM_H265_Sh265 通道 qp 参数控制。
stParamMjpegVENC_PARAM_MJPEG_Smjpeg 通道 qp 参数控制。

注意事项

  • H264/H265 编码时,s32FirstFrameStartQp 的取值受对应 I 帧 qp 参数的限制,取值范围应在 [u32MinIQp,u32MaxIQp],否则会导致所有码率控制高级参数设置失败。
  • 所有成员均为动态属性。

相关主题


VENC_PARAM_H264_S

说明

定义 H264 协议编码通道 qp 参数配置。

定义

typedef struct zhVENC_PARAM_H264_S {
ZH_U32 u32StepQp;
ZH_U32 u32MaxQp;
ZH_U32 u32MinQp;
ZH_U32 u32MaxlQp;
ZH_U32 u32MinIQp;
ZH_S32 s32DeltlpQp;
ZH_S32 s32MaxReEncodeTimes;
} VENC_PARAM_H264_S;

成员

成员名称数据类型描述
u32StepQpZH_U32qp 最大步进参数设置。
u32MaxQpZH_U32P 帧最大 qp 设置。 取值范围:[1,51]。默认 51。
u32MinQpZH_U32P 帧最小 qp 设置。 取值范围:[1,u32MaxQp]。默认 10。
u32MaxIQpZH_U32I 帧最大 qp 设置。 取值范围:[1,51]。默认 46。
u32MinIQpZH_U32I 帧最小 qp 设置。 取值范围:[1,u32MaxlQp]。默认 24。
s32DeltIpQpZH_S32I 帧前几帧 P 帧平均 QP 与 I 帧的差值,即 s32DeltIpQp=average(PPPP)-I。
  • 该值越大,I 帧质量相对越好,呼吸效应越明显。
  • 该值越小,I 帧质量相对越差,呼吸效应相对较弱,但是也会影响后续的 P 帧质量。
取值范围:[-7,7]。默认 2。
s32MaxReEncodeTimesZH_S32最大重编次数:[0,3]。默认 1。

注意事项

  • 相关参数需要设置在范围内,并且最小 qp 不能超过最大 qp,否则会导致所有 qp 参数设置失败。
  • 所有成员均为动态属性。

相关主题


VENC_PARAM_H265_S

说明

定义 H265 协议编码通道 qp 参数配置。

定义

typedef struct zhVENC_PARAM_H265_S {
ZH_U32 u32StepQp;
ZH_U32 u32MaxQp;
ZH_U32 u32MinQp;
ZH_U32 u32MaxlQp;
ZH_U32 u32MinIQp;
ZH_S32 s32DeltIpQp;
ZH_S32 s32MaxReEncodeTimes;
} VENC_PARAM_H265_S;

成员

成员名称数据类型描述
u32StepQpZH_U32qp 最大步进参数设置。
u32MaxQpZH_U32P 帧最大 qp 设置。 取值范围:[1,51]。默认 51。
u32MinQpZH_U32P 帧最小 qp 设置。 取值范围:[1,u32MaxQp]。默认 10。
u32MaxIQpZH_U32I 帧最大 qp 设置。 取值范围:[1,51]。默认 46。
u32MinIQpZH_U32I 帧最小 qp 设置。 取值范围:[1,u32MaxlQp]。默认 24。
s32DeltIpQpZH_S32I 帧前几帧 P 帧平均 QP 与 I 帧的差值,即 s32DeltlpQp=average(PPPP)-I。该值越小,帧质量相对越差,呼吸效应相对弱,但是也会影响后续的P帧质量。 取值范围:[-7,7]。默认2。 暂未使用
s32MaxReEncodeTimesZH_S32最大重编次数:[0,3]。默认 1。暂未使用。

注意事项

  • 相关参数需要设置在范围内,并且最小 qp 不能超过最大 qp,否则会导致所有 qp 参数设置失败。
  • 所有成员均为动态属性。

相关主题


VENC_PARAM_MJPEG_S

说明

定义 MJPEG 协议编码通道 qp 参数配置。

定义

typedef struct zhVENC_PARAM_MJPEG_S {
ZH_U32 u32Qfactor;
ZH_U32 u32MaxQfactor;
ZH_U32 u32MinQfactor;
} VENC_PARAM_MJPEG_S;

成员

成员名称数据类型描述
u32QfactorZH_U32MJPEG 编码的 Qfactor。 取值范围:[1,99]。默认值:70。
u32MaxQfactorZH_U32MJPEG编码的最大Qfactor。 取值范围:[u32Qfactor,99]。默认值:99。
u32MinQfactorZH_U32MJPEG编码的最小Qfactor。 取值范围:[1,u32Qfactor]。默认值:30。

注意事项

  • u32Qfactor 同 VENC_MJPEG_FIXQP_S 中的 u32Qfactor 一致,都可控制 MJPEG 的 Qfactor。 MJPEG fixqp 时建议通过 VENC_MJPEG_FIXQP_S 一起设置即可。
  • MJPEG 设置为 CBR 或 VBR 模式时可通过设置 qfactor 范围进行 qp 参数配置。
  • 所有成员均为动态属性。

相关主题


VIDEO_FRAME_INFO_S

说明

定义视频图像帧信息结构体。

定义

typedef struct zhVIDEO_FRAME_S {
MB_BLK pMbBlk;
ZH_U32 u32Width;
ZH_U32 u32Height;
ZH_U32 u32VirWidth;
ZH_U32 u32VirHeight;
VIDEO_FIELD_E enField;
PIXEL_FORMAT_E enPixelFormat;
VIDEO_FORMAT_E enVideoFormat;
COMPRESS_MODE_E enCompressMode;
DYNAMIC_RANGE_E enDynamicRange;
COLOR_GAMUT_E enColorGamut;
ZH_VOID *pVirAddr[ZH_MAX_COLOR_COMPONENT];
ZH_U32 u32TimeRef;
ZH_U64 u64PTS;
ZH_U64 u64PrivateData;
ZH_U32 u32FrameFlag;
} VIDEO_FRAME_S;
typedef struct zhVIDEO_FRAME_INFO_S {
VIDEO_FRAME_S stVFrame;
} VIDEO_FRAME_INFO_S;

成员

成员名称数据类型描述
pMbBlkMB_BLK用户数据。
u32WidthZH_U32图像宽度。
u32HeightZH_U32图像高度。
u32VirWidthZH_U32图像内存宽度。
  • 非压缩数据:JPEG/MJPEG 需要 16 对齐,H264 需要 16 对齐,H265 需要 64 对齐。
  • 压缩数据:H264/H265(目前仅 H264/H265 支持压缩数据)需要 16 对齐。
u32VirHeightZH_U32图像内存高度。
  • 非压缩数据:JPEG/MJPEG 需要 16 对齐,H264/H265 需要 2 对齐。
  • 压缩数据:H264/H265(目前仅 H264/H265 支持压缩数据)需要 4 对齐。
enFieldVIDEO_FIELD_E图像帧场模式。 暂未使用,可不设置。
enVideoFormatVIDEO_FORMAT_E图像视频格式。
enPixelFormatPIXEL_FORMAT_E暂未使用,可不设置。 图像像素格式。详情参见 zh_comm_video.hPIXEL_FORMAT_E 定义。
enCompressModeCOMPRESS_MODE_E图像压缩模式。
  • COMPRESS_MODE_NONE:无压缩。
  • COMPRESS_AFBC_16x16:AFBC 压缩。
enDynamicRangeDYNAMIC_RANGE_E图像动态范围。 暂未使用,可不设置。
enColorGamutCOLOR_GAMUT_E图像色域范围。 暂未使用,可不设置。
pVirAddrZH_VOID*图像数据虚拟地址。 暂未使用,可不设置。
u32TimeRefZH_U32图像帧序列号。 暂未使用,可不设置。
u64PTSZH_U64图像时间戳,单位 us。建议通过 clock_gettime(CLOCK_MONOTONIC,&time) 设置时间戳。
u64PrivateDataZH_U64私有数据。 暂未使用,可不设置。
u32FrameFlagZH_U32当前帧的标记,使用 RTMBFlags 里面的值标记,可以按位或操作。无特殊操作,建议设置为 0 即可。

注意事项

用户获取图像数据,可以通过 ZH_MPI_MB_Handle2VirAddr 转换 pMbBlk 成虚拟地址来使用。

data = ZH_MPI_MB_Handle2VirAddr(sFrame.stVFrame.pMbBlk);
fwrite(data, 1, sFrame.stVFrame.u32Width * sFrame.stVFrame.u32Height * 3 /2, fp);
fflush(fp);

相关主题

ZH_MPI_VENC_SendFrame:发送原始图像给编码通道。


VENC_H264_CBR_S

说明

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

定义

typedef struct zhVENC_H264_CBR_S {
ZH_U32 u32Gop;
ZH_U32 u32SrcFrameRateNum;
ZH_U32 u32SrcFrameRateDen;
ZH_U32 fr32DstFrameRateNum;
ZH_U32 fr32DstFrameRateDen;
ZH_U32 u32BitRate;
ZH_U32 u32StatTime;
} VENC_H264_CBR_S;

成员

成员名称数据类型描述
u32GopZH_U32H.264 GOP 值。 取值范围:[1,65536]。
u32SrcFrameRateNumZH_U32输入帧率分子。
u32SrcFrameRateDenZH_U32输出帧率分母。
fr32DstFrameRateNumZH_U32输出帧率分子。
fr32DstFrameRateDenZH_U32输出帧率分母。
u32BitRateZH_U32平均 bitrate,以 kbps 为单位。取值范围:[3,200000],默认值:u32VirWidth*u32VirHeight/830。
u32StatTimeZH_U32码率统计时间,以秒为单位。 取值范围:[1,60],默认值 3。 暂未使用

注意事项

  • 假设输入帧率为 30, u32SrcFrameRateNum 应设置为 30,u32SrcFrameRateDen 设置为 1。
  • 假设输出帧率为 30, fr32DstFrameRateNum 应设置为 30,fr32DstFrameRateDen 设置为 1。
  • 假设输入帧率 25,输出帧率 12,则表示将从 25 帧输入图像中取 12 帧进行编码,其余 13 帧将丢掉。
  • 所有成员均为动态属性。

相关主题


VENC_H264_VBR_S

说明

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

定义

typedef struct zhVENC_H264_VBR_S {
ZH_U32 u32Gop;
ZH_U32 u32SrcFrameRateNum;
ZH_U32 u32SrcFrameRateDen;
ZH_U32 fr32DstFrameRateNum;
ZH_U32 fr32DstFrameRateDen;
ZH_U32 u32BitRate;
ZH_U32 u32MaxBitRate;
ZH_U32 u32MinBitRate;
ZH_U32 u32StatTime;
} VENC_H264_VBR_S;

成员

成员名称数据类型描述
u32GopZH_U32H.264 GOP 值。 取值范围:[1,65536]。
u32SrcFrameRateNumZH_U32输入帧率分子。
u32SrcFrameRateDenZH_U32输出帧率分母。
fr32DstFrameRateNumZH_U32输出帧率分子。
fr32DstFrameRateDenZH_U32输出帧率分母。
u32BitRateZH_U32平均 bitrate,以 kbps 为单位。 取值范围:[3,200000],默认值:u32VirWidth×u32VirHeight/830。
u32MaxBitRateZH_U32最高 bitrate,以 kbps 为单位。 取值范围:[u32BitRate,200000],默认值:u32VirWidth ×u32VirHeight/830×3/2。
u32MinBitRateZH_U32最低 bitrate,以 kbps 为单位。 取值范围:[3,u32BitRate],默认值:u32VirWidthu×32VirHeight/830×1/2。
u32StatTimeZH_U32码率统计时间,以秒为单位。 取值范围:[1,60]。默认值 3。 暂未使用。

注意事项

  • 请参见 VENC_H264_CBR_S 注意事项。
  • 所有成员均为动态属性。

相关主题


VENC_H264_AVBR_S

说明

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

定义

typedef struct zhVENC_H264_AVBR_S {
ZH_U32 u32Gop;
ZH_U32 u32SrcFrameRateNum;
ZH_U32 u32SrcFrameRateDen;
ZH_U32 fr32DstFrameRateNum;
ZH_U32 fr32DstFrameRateDen;
ZH_U32 u32BitRate;
ZH_U32 u32MaxBitRate;
ZH_U32 u32MinBitRate;
ZH_U32 u32StatTime;
} VENC_H264_AVBR_S;

成员

成员名称数据类型描述
u32GopZH_U32H.264 GOP 值。 取值范围:[1,65536]。
u32SrcFrameRateNumZH_U32输入帧率分子。
u32SrcFrameRateDenZH_U32输出帧率分母。
fr32DstFrameRateNumZH_U32输出帧率分子。
fr32DstFrameRateDenZH_U32输出帧率分母。
u32BitRateZH_U32平均 bitrate,以 kbps 为单位。 取值范围:[3,200000],默认值:u32VirWidth×u32VirHeight/830。
u32MaxBitRateZH_U32最高 bitrate,以 kbps 为单位。 取值范围:[u32BitRate,200000],默认值:u32VirWidth ×u32VirHeight/830×3/2。
u32MinBitRateZH_U32最低 bitrate,以 kbps 为单位。 取值范围:[3,u32BitRate],默认值:u32VirWidthu×32VirHeight/830×1/2。
u32StatTimeZH_U32码率统计时间,以秒为单位。 取值范围:[1,60],默认值 3。 暂未使用

注意事项

  • 请参见 VENC_H264_CBR_S 注意事项。
  • 所有成员均为动态属性。

相关主题


VENC_H264_FIXQP_S

说明

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

定义

typedef struct zhVENC_H264_FIXQP_S {
ZH_U32 u32Gop;
ZH_U32 u32SrcFrameRateNum;
ZH_U32 u32SrcFrameRateDen;
ZH_U32 fr32DstFrameRateNum;
ZH_U32 fr32DstFrameRateDen;
ZH_U32 u32IQp;
ZH_U32 u32PQp;
ZH_U32 u32BQp;
} VENC_H264_FIXQP_S;

成员

成员名称数据类型描述
u32GopZH_U32H.264 GOP 值。 取值范围:[1,65536]。
u32SrcFrameRateNumZH_U32输入帧率分子。
u32SrcFrameRateDenZH_U32输出帧率分母。
fr32DstFrameRateNumZH_U32输出帧率分子。
fr32DstFrameRateDenZH_U32输出帧率分母。
u32IQpZH_U32I 帧所有宏块 Qp 值。 取值范围:[1,51]。
u32PQpZH_U32P 帧所有宏块 Qp 值。 取值范围:[1,51]。
u32BQpZH_U32B 帧所有宏块 Qp 值。 取值范围:[1,51]。 暂未使用。

注意事项

  • 请参见 VENC_H264_CBR_S 注意事项。
  • 所有成员均为动态属性。

相关主题


VENC_H265_CBR_S

说明

定义 H.265 编码通道 CBR 属性结构。

定义

typedef struct zhVENC_H265_CBR_S {
ZH_U32 u32Gop;
ZH_U32 u32SrcFrameRateNum;
ZH_U32 u32SrcFrameRateDen;
ZH_U32 fr32DstFrameRateNum;
ZH_U32 fr32DstFrameRateDen;
ZH_U32 u32BitRate;
ZH_U32 u32StatTime;
} VENC_H265_CBR_S;

成员

成员名称数据类型描述
u32GopZH_U32H.265 GOP 值。 取值范围:[1,65536]。
u32SrcFrameRateNumZH_U32输入帧率分子。
u32SrcFrameRateDenZH_U32输出帧率分母。
fr32DstFrameRateNumZH_U32输出帧率分子。
fr32DstFrameRateDenZH_U32输出帧率分母。
u32BitRateZH_U32平均 bitrate,以 kbps 为单位。 取值范围:[3,200000],默认值:u32VirWidthu×32VirHeight/830。
u32StatTimeZH_U32码率统计时间,以秒为单位。 取值范围:[1,60],默认值 3。暂未使用

注意事项

  • 请参见 VENC_H264_CBR_S 注意事项。
  • 所有成员均为动态属性。

相关主题


VENC_H265_VBR_S

说明

定义 H.265 编码通道 VBR 属性结构。

定义

typedef struct zhVENC_H265_VBR_S {
ZH_U32 u32Gop;
ZH_U32 u32SrcFrameRateNum;
ZH_U32 u32SrcFrameRateDen;
ZH_U32 fr32DstFrameRateNum;
ZH_U32 fr32DstFrameRateDen;
ZH_U32 u32BitRate;
ZH_U32 u32MaxBitRate;
ZH_U32 u32MinBitRate;
ZH_U32 u32StatTime;
} VENC_H265_VBR_S;

成员

成员名称数据类型描述
u32GopZH_U32H.265 GOP 值。 取值范围:[1,65536]。
u32SrcFrameRateNumZH_U32输入帧率分子。
u32SrcFrameRateDenZH_U32输出帧率分母。
fr32DstFrameRateNumZH_U32输出帧率分子。
fr32DstFrameRateDenZH_U32输出帧率分母。
u32BitRateZH_U32平均 bitrate,以 kbps 为单位。 取值范围:[3,200000],默认值:u32VirWidth×u32VirHeight/830。
u32MaxBitRateZH_U32最高 bitrate,以 kbps 为单位。 取值范围:[u32BitRate,200000],默认值:u32VirWidth×u32VirHeight/830×3/2。
u32MinBitRateZH_U32最低 bitrate,以 kbps 为单位。 取值范围:[3,u32BitRate],默认值:u32VirWidth×u32VirHeight/830×1/2。
u32StatTimeZH_U32码率统计时间,以秒为单位。 取值范围:[1,60],默认值 3。 暂未使用

注意事项

  • 请参见 VENC_H264_CBR_S注意事项。
  • 所有成员均为动态属性。

相关主题


VENC_H265_AVBR_S

说明

定义 H.265 编码通道 AVBR 属性结构。

定义

typedef struct zhVENC_H265_AVBR_S {
ZH_U32 u32Gop;
ZH_U32 u32SrcFrameRateNum;
ZH_U32 u32SrcFrameRateDen;
ZH_U32 fr32DstFrameRateNum;
ZH_U32 fr32DstFrameRateDen;
ZH_U32 u32BitRate;
ZH_U32 u32MaxBitRate;
ZH_U32 u32MinBitRate;
ZH_U32 u32StatTime;
} VENC_H265_AVBR_S;

成员

成员名称数据类型描述
u32GopZH_U32H.265 GOP 值。 取值范围:[1,65536]。
u32SrcFrameRateNumZH_U32输入帧率分子。
u32SrcFrameRateDenZH_U32输出帧率分母。
fr32DstFrameRateNumZH_U32输出帧率分子。
fr32DstFrameRateDenZH_U32输出帧率分母。
u32BitRateZH_U32平均 bitrate,以 kbps 为单位。 取值范围:[3,200000],默认值:u32VirWidthu×32VirHeight/830。
u32MaxBitRateZH_U32最高 bitrate,以 kbps 为单位。 取值范围:[u32BitRate,200000],默认值:u32VirWidth×u32VirHeight/830×3/2。
u32MinBitRateZH_U32最低 bitrate,以 kbps 为单位。 取值范围:[3,u32BitRate],默认值:u32VirWidth×u32VirHeight/830×1/2。
u32StatTimeZH_U32码率统计时间,以秒为单位。 取值范围:[1,60],默认值 3。 暂未使用。

注意事项

  • 请参见 VENC_H264_CBR_S 注意事项。
  • 所有成员均为动态属性。

相关主题


VENC_H265_FIXQP_S

说明

定义 H.265 编码通道 FIXQP 属性结构。

定义

typedef struct zhVENC_H265_FIXQP_S {
ZH_U32 u32Gop;
ZH_U32 u32SrcFrameRateNum;
ZH_U32 u32SrcFrameRateDen;
ZH_U32 fr32DstFrameRateNum;
ZH_U32 fr32DstFrameRateDen;
ZH_U32 u32IQp;
ZH_U32 u32PQp;
ZH_U32 u32BQp;
} VENC_H265_FIXQP_S;

成员

成员名称数据类型描述
u32GopZH_U32H.265 GOP 值。 取值范围:[1,65536]。
u32SrcFrameRateNumZH_U32输入帧率分子。
u32SrcFrameRateDenZH_U32输出帧率分母。
fr32DstFrameRateNumZH_U32输出帧率分子。
fr32DstFrameRateDenZH_U32输出帧率分母。
u32IQpZH_U32I 帧所有宏块 Qp 值。 取值范围:[1,51]。
u32PQpZH_U32P 帧所有宏块 Qp 值。 取值范围:[1,51]。
u32BQpZH_U32B 帧所有宏块 Qp 值。 取值范围:[1,51]。 暂未使用。

注意事项

  • 请参见 VENC_H264_CBR_S 注意事项。
  • 所有成员均为动态属性。

相关主题


VENC_MJPEG_CBR_S

说明

定义 mjpeg 编码通道 CBR 属性结构。

定义

typedef struct zhVENC_MJPEG_CBR_S {
ZH_U32 u32SrcFrameRateNum;
ZH_U32 u32SrcFrameRateDen;
ZH_U32 fr32DstFrameRateNum;
ZH_U32 fr32DstFrameRateDen;
ZH_U32 u32BitRate;
ZH_U32 u32StatTime;
} VENC_MJPEG_CBR_S;

成员

成员名称数据类型描述
u32SrcFrameRateNumZH_U32输入帧率分子。
u32SrcFrameRateDenZH_U32输出帧率分母。
fr32DstFrameRateNumZH_U32输出帧率分子。
fr32DstFrameRateDenZH_U32输出帧率分母。
u32BitRateZH_U32平均 bitrate,以 kbps 为单位。 取值范围:[5,800000],默认值:u32VirWidthu×32VirHeight/830。
u32StatTimeZH_U32码率统计时间,以秒为单位。 取值范围:[1,60],默认值 3。 暂未使用

注意事项

  • 请参见 VENC_H264_CBR_S 注意事项。

  • 所有成员均为动态属性。

相关主题


VENC_MJPEG_VBR_S

说明

定义 mjpeg 编码通道 VBR 属性结构。

定义

typedef struct zhVENC_MJPEG_VBR_S {
ZH_U32 u32SrcFrameRateNum;
ZH_U32 u32SrcFrameRateDen;
ZH_U32 fr32DstFrameRateNum;
ZH_U32 fr32DstFrameRateDen;
ZH_U32 u32BitRate;
ZH_U32 u32MaxBitRate;
ZH_U32 u32MinBitRate;
ZH_U32 u32StatTime;
} VENC_MJPEG_VBR_S;

成员

成员名称数据类型描述
u32SrcFrameRateNumZH_U32输入帧率分子。
u32SrcFrameRateDenZH_U32输出帧率分母。
fr32DstFrameRateNumZH_U32输出帧率分子。
fr32DstFrameRateDenZH_U32输出帧率分母。
u32BitRateZH_U32平均 bitrate,以 kbps 为单位。 取值范围:[5,800000],默认值:u32VirWidthu×32VirHeight/830。
u32MaxBitRateZH_U32最高 bitrate,以 kbps 为单位。 取值范围:[u32BitRate,800000],默认值:u32VirWidth×u32VirHeight/830×3/2。
u32MinBitRateZH_U32最低 bitrate,以 kbps 为单位。 取值范围:[5,u32BitRate],默认值:u32VirWidthu×32VirHeight/830×1/2。
u32StatTimeZH_U32码率统计时间,以秒为单位。 取值范围:[1,60],默认值 3。 暂未使用

注意事项

  • 请参见 VENC_H264_CBR_S 注意事项。
  • 所有成员均为动态属性。

相关主题


VENC_MJPEG_FIXQP_S

说明

定义 mjpeg 编码通道 FIXQP 属性结构。

定义

typedef struct zhVENC_MJPEG_FIXQP_S {
ZH_U32 u32SrcFrameRateNum;
ZH_U32 u32SrcFrameRateDen;
ZH_U32 fr32DstFrameRateNum;
ZH_U32 fr32DstFrameRateDen;
ZH_U32 u32Qfactor;
} VENC_MJPEG_FIXQP_S;

成员

成员名称数据类型描述
u32SrcFrameRateNumZH_U32输入帧率分子。
u32SrcFrameRateDenZH_U32输出帧率分母。
fr32DstFrameRateNumZH_U32输出帧率分子。
fr32DstFrameRateDenZH_U32输出帧率分母。
u32QfactorZH_U32MJPEG 编码的 Qfactor。 取值范围:[1,99]。默认值:70。

注意事项

  • 请参见 VENC_H264_CBR_S 注意事项。
  • 所有成员均为动态属性。

相关主题


VENC_GOP_ATTR_S

说明

定义编码器 GOP 属性结构体。

定义

typedef struct zhVENC_GOP_ATTR_S {
VENC_GOP_MODE_E enGopMode;
ZH_S32 s32VirIdrLen;
ZH_U32 u32MaxLtrCount;
ZH_U32 u32TsvcPreload;
} VENC_GOP_ATTR_S;

成员

成员名称数据类型描述
enGopModeVENC_GOP_MODE_E编码 GOP 类型。
s32VirIdrLenZH_S32虚拟 I 帧长度。默认为 0,即不生效。
u32MaxLtrCountZH_S32长期参考帧最大数量。
  • normalp 和其他模式动态切换请设置为 1。
  • 仅需 normalp 时设置为 0 以节省缓存。
u32TsvcPreloadZH_S32TSVC 预加载参数。
  • smartp 和 tsvc 模式动态切换请设置为 1。
  • 仅需 smartp 时设置为 0 以节省缓存。

注意事项

  • s32VirIdrLen 仅针对 enGopMode 为 VENC_GOPMODE_SMARTP 时生效。建议设置为 GOP 长度的一半或者能被其整数倍整除。
  • 所有成员均为静态属性,创建之后无法改变。

相关主题


VENC_RECV_PIC_PARAM_S

说明

定义编码通道连续接收并编码的帧数结构体。

定义

typedef struct zhVENC_RECV_PIC_PARAM_S {
ZH_S32 s32RecvPicNum;
} VENC_RECV_PIC_PARAM_S;

成员

成员名称数据类型描述
s32RecvPicNumZH_S32编码通道连续接收并编码的帧数。范围:[-1,0)U(0,]。默认 -1,即连续编码不自动停止。

注意事项

  • 如 s32RecvPicNum 设置为正数时,为抓图模式,编码到对应帧数后不再输出编码数据。
  • ZH_MPI_VENC_StopRecvFrame 之后,成员才可以重新配置。

相关主题

ZH_MPI_VENC_StartRecvFrame:开始接收编码图像。


VENC_CHN_STATUS_S

说明

定义编码通道的状态结构体。

定义

typedef struct zhVENC_CHN_STATUS_S {
ZH_U32 u32LeftPics;
ZH_U32 u32LeftStreamBytes;
ZH_U32 u32LeftStreamFrames;
ZH_U32 u32CurPacks;
ZH_U32 u32LeftRecvPics;
ZH_U32 u32LeftEncPics;
ZH_BOOL bJpegSnapEnd;
VENC_STREAM_INFO_S stVencStrmInfo;
} VENC_CHN_STATUS_S;

成员

成员名称数据类型描述
u32LeftPicsZH_U32待编码的图像数。
u32LeftStreamBytesZH_U32码流 buffer 剩余的 byte 数。
u32LeftStreamFramesZH_U32码流 buffer 剩余的帧数。
u32CurPacksZH_U32当前帧的码流包个数。
u32LeftRecvPicsZH_U32剩余待接收的帧数,在用户调用接口 ZH_MPI_VENC_StartRecvFrame 设置接收帧数后有效。
u32LeftEncPicsZH_U32剩余待编码的帧数,在用户调用接口 ZH_MPI_VENC_StartRecvFrame 设置接收帧数后有效。
bJpegSnapEndZH_BOOLJpeg 抓拍模式下指示抓拍过程是否结束。 暂未使用。
stVencStrmInfoVENC_STREAM_INFO_S编码器码流特征信息。

相关主题

ZH_MPI_VENC_QueryStatus:查询编码通道状态。


VENC_STREAM_S

说明

定义帧码流类型结构体。

定义

    typedef struct zhVENC_STREAM_S {
VENC_PACK_S *pstPack;
ZH_U32 u32PackCount;
ZH_U32 u32Seq;
union {
VENC_STREAM_INFO_H264_S stH264Info;
VENC_STREAM_INFO_JPEG_S stJpegInfo;
VENC_STREAM_INFO_H265_S stH265Info;
VENC_STREAM_INFO_PRORES_S stProresInfo;
};
union {
VENC_STREAM_ADVANCE_INFO_H264_S stAdvanceH264Info;
VENC_STREAM_ADVANCE_INFO_JPEG_S stAdvanceJpegInfo;
VENC_STREAM_ADVANCE_INFO_H265_S stAdvanceH265Info;
VENC_STREAM_ADVANCE_INFO_PRORES_S stAdvanceProresInfo;
};
} VENC_STREAM_S;

成员

成员名称数据类型描述
pstPackVENC_PACK_S帧码流包结构。
u32PackCountZH_U32一帧码流的所有包的个数。

单包输出:

  • 作为输入参数时设置为 1。
  • 在函数调用成功后,此值为实际填充 pack 的包个数,默认为 1 (H264/H265 I 帧包含多个 NALU 包),默认此模式。

多包输出:

  • 作为输入参数时,此值为 pstPack 包的个数,必须不小于当前帧的包个数,目前需要按照16设置,如果此数值太小,可能会导致编码码流包获取失败导致丢帧,并且返回 VENC 错误码ZH_ERR_VENC_ILLEGAL_PARAM。
  • 在函数调用成功后,此值为实际填充 pack 的包个数。

u32SeqZH_U32码流序列号。按帧获取帧序号,按包获取包序号。
stH624Info
stJpeglnfo
stH265InfostProreslnfo
VENC_STREAM_INFO_H264_S
VENC_STREAM_INFO_JPEG_S
VENC_STREAM_INFO_H265_S
VENC_STREAM_INFO_PRORES_S
码流特征信息。
stAdvanceH264lnfo
stAdvanceJpeglnfo
stAdvanceH265Info
stAdvanceProreslnfo
VENC_STREAM_ADVANCE_INFO_H264_S
VENC_STREAM_ADVANCE_INFO_JPEG_S
VENC_STREAM_ADVANCE_INFO_H265_S
VENC_STREAM_ADVANCE_INFO_PRORES_S
码流高级特征信息。

相关主题


VENC_PACK_S

说明

定义帧码流包结构体。

定义

typedef struct zhVENC_PACK_S {
MB_BLK pMbBlk;
ZH_U32 u32Len;
ZH_U64 u64PTS;
ZH_BOOL bFrameEnd;
ZH_BOOL bStreamEnd;
VENC_DATA_TYPE_U DataType;
ZH_U32 u32Offset;
ZH_U32 u32DataNum;
VENC_PACK_INFO_S stPackInfo[8];
} VENC_PACK_S;

成员

成员名称数据类型描述
pMbBlkMB_BLK码流包缓存块句柄。
u32LenZH_U32码流包长度。(H264/H265 I 帧包含多个 NALU 包总长度)。
u64PTSZH_U64时间戳。单位:us。
bFrameEndZH_BOOL帧结束标识。默认为 ZH_TRUE。 取值范围:
  • ZH_TRUE:该码流包是该帧的最后一个包。
  • ZH_FALSE:该码流包不是该帧的最后一个包。
bStreamEndZH_BOOL流结束标识。 取值范围:
  • ZH_TRUE:该码流包是数据流的最后一个包,编码器将输出编码图像最后一帧码流。
  • ZH_FALSE:该码流包不是数据流的最后一个包。
DataTypeVENC_DATA_TYPE_U码流类型,支持 H.264/JPEG/H.265 协议类型的数据包。
u32OffsetZH_U32码流包中有效数据与码流包缓存块的偏移。当前一个 packet 只有一帧数据,默认为 0。
u32DataNumZH_U32当前码流包(当前包的类型由 DataType 指定)数据中包含其他类型码流包的个数(即除 Islice/Pslice 外的 NALU 包个数)。目前仅 H264/H265 有效。JPEG/MJPEG 时默认为 1。
stPacklnfoVENC_PACK_INFO_S当前码流包数据中包含其他类型码流包数据信息。目前仅 H264/H265 有效。

相关主题


VENC_DATA_TYPE_U

说明

定义码流结果类型。

定义

typedef union zhVENC_DATA_TYPE_U {
H264E_NALU_TYPE_E enH264EType;
JPEGE_PACK_TYPE_E enJPEGEType;
H265E_NALU_TYPE_E enH265EType;
PRORES_PACK_TYPE_E enPRORESType;
} VENC_DATA_TYPE_U;

成员

成员名称数据类型描述
enH264ETypeH264E_NALU_TYPE_EH.264 码流包类型。
enJPEGETypeJPEGE_PACK_TYPE_EJPEG 码流包类型。
enH265ETypeH265E_NALU_TYPE_EH.265 码流包类型。
enPRORESTypePRORES_PACK_TYPE_EPRORES 码流包类型。

相关主题


VENC_PACK_INFO_S

说明

定义当前码流包数据中包含的其他类型码流包数据的结构体。

定义

typedef struct zhVENC_PACK_INFO_S {
VENC_DATA_TYPE_U u32PackType;
ZH_U32 u32PackOffset;
ZH_U32 u32PackLength;
} VENC_PACK_INFO_S;

成员

成员名称数据类型描述
u32PackTypeVENC_DATA_TYPE_U当前码流包数据包含其他码流包的类型。
u32PackOffsetZH_U32当前码流包数据包含其他码流包数据的偏移。
u32PackLengthZH_U32当前码流包数据包含其他码流包数据的大小。

相关主题


H264E_NALU_TYPE_E

说明

定义 H.264 码流 NALU 类型。

定义

typedef enum zhH264E_NALU_TYPE_E {
H264E_NALU_BSLICE = 0,
H264E_NALU_PSLICE = 1,
H264E_NALU_ISLICE = 2,
H264E_NALU_IDRSLICE = 5,
H264E_NALU_SEI = 6,
H264E_NALU_SPS = 7,
H264E_NALU_PPS = 8,
H264E_NALU_BUTT
} H264E_NALU_TYPE_E;

成员

成员名称描述
H264E_NALU_BSLICEBSLICE 类型。
H264E_NALU_PSLICEPSLICE 类型。
H264E_NALU_ISLICEISLICE 类型,帧类型为 P 帧。
H264E_NALU_IDRSLICEISLICE 类型,帧类型为 IDR 帧。
H264E_NALU_SEISEI 类型。
H264E_NALU_SPSSPS 类型。
H264E_NALU_PPSPPS 类型。
H264E_NALU_BUTT最大值。

相关主题


H265E_NALU_TYPE_E

说明

H.265 码流 NALU 类型。

定义

typedef enum zhH265E_NALU_TYPE_E {
H265E_NALU_BSLICE = 0,
H265E_NALU_PSLICE = 1,
H265E_NALU_ISLICE = 2,
H265E_NALU_IDRSLICE = 19,
H265E_NALU_VPS = 32,
H265E_NALU_SPS = 33,
H265E_NALU_PPS = 34,
H265E_NALU_SEI = 39,
H265E_NALU_BUTT
} H265E_NALU_TYPE_E;

成员

成员名称描述
H265E_NALU_BSLICEBSLICE 类型。
H265E_NALU_PSLICEPSLICE 类型。
H265E_NALU_ISLICEISLICE 类型,帧类型为 P 帧。
H265E_NALU_IDRSLICEISLICE 类型,帧类型为 IDR 帧。
H265E_NALU_VPSVPS 类型。
H265E_NALU_SPSSPS 类型。
H265E_NALU_PPSPPS 类型。
H265E_NALU_SEISEI 类型。
H265E_NALU_BUTT最大值。

相关主题


H264E_REF_TYPE_E

说明

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

定义

typedef enum zhH264E_REF_TYPE_E {
BASE_IDRSLICE = 0,
BASE_PSLICE_REFTOIDR,
BASE_PSLICE_REFBYBASE,
BASE_PSLICE_REFBYENHANCE,
ENHANCE_PSLICE_REFBYENHANCE,
ENHANCE_PSLICE_NOTFORREF,
ENHANCE_PSLICE_BUTT
} H264E_REF_TYPE_E;

成员

成员名称描述
BASE_IDRSLICEbase 层中的 IDR 帧。
BASE_PSLICE_REFTOIDRbase 层中的 P 帧,用于 base 层中其他帧的参考且只参考 IDR 帧。
BASE_PSLICE_REFBYBASEbase 层中的 P 帧,用于 base 层中其他帧的参考。
BASE_PSLICE_REFBYENHANCEbase 层中的 P 帧,用于 enhance 层中的帧的参考。
ENHANCE_PSLICE_REFBYENHANCEenhance 层中的 P 帧,用于 enhance 层中其他帧的参考。
ENHANCE_PSLICE_NOTFORREFenhance 层中的 P 帧,不用于参考。
ENHANCE_PSLICE_BUTT最大值。

相关主题


H265E_REF_TYPE_E

说明

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

定义

typedef enum zhH264E_REF_TYPE_E H265E_REF_TYPE_E;

成员

请参考 H264E_REF_TYPE_E

相关主题


JPEGE_PACK_TYPE_E

说明

定义 JPEG 码流的 PACK 类型。

定义

typedef enum zhJPEGE_PACK_TYPE_E {
JPEGE_PACK_ECS = 5,
JPEGE_PACK_APP = 6,
JPEGE_PACK_VDO = 7,
JPEGE_PACK_PIC = 8,
JPEGE_PACK_DCF = 9,
JPEGE_PACK_DCF_PIC = 10,
JPEGE_PACK_BUTT
} JPEGE_PACK_TYPE_E;

成员

成员名称描述
JPEGE_PACK_ECSECS 类型。
JPEGE_PACK_APPAPP 类型。
JPEGE_PACK_VDOVDO 类型。
JPEGE_PACK_PICPIC 类型。
JPEGE_PACK_DCFDCF ECS 类型。
JPEGE_PACK_DCF_PICECS 类型。
JPEGE_PACK_BUTT最大值。

注意事项

以上参数均暂未使用。


PRORES_PACK_TYPE_E

说明

定义 PRORES 码流的 PACK 类型。

定义

typedef enum zhPRORES_PACK_TYPE_E {
PRORES_PACK_PIC = 1,
PRORES_PACK_BUTT
} PRORES_PACK_TYPE_E;

成员

成员名称描述
PRORES_PACK_PICPRORES 数据包。
PRORES_PACK_BUTT最大值。

注意事项

以上参数均暂未使用。

相关主题


VENC_STREAM_INFO_H264_S

说明

定义 H.264 协议码流特征信息。

定义

typedef struct zhVENC_STREAM_INFO_H264_S {
ZH_U32 u32PicBytesNum;
ZH_U32 u32Inter16x16MbNum;
ZH_U32 u32Inter8x8MbNum;
ZH_U32 u32Intra16MbNum;
ZH_U32 u32Intra8MbNum;
ZH_U32 u32Intra4MbNum;
H264E_REF_TYPE_E enRefType;
ZH_U32 u32UpdateAttrCnt;
ZH_U32 u32StartQp;
ZH_U32 u32MeanQp;
ZH_BOOL bPSkip;
} VENC_STREAM_INFO_H264_S;

成员

成员名称数据类型描述
u32PicBytesNumZH_U32编码当前帧的字节 (BYTE)数。 暂未使用。
u32lnter16x16MbNumZH_U32编码当前帧中采用 Inter16x16 预测模式的宏块数。 暂未使用。
u32lnter8x8MbNumZH_U32编码当前帧中采用 Inter8x8 预测模式的宏块数。 暂未使用。
u32Intra16MbNumZH_U32编码当前帧中采用 Intra16 预测模式的宏块数。 暂未使用。
u32Intra8MbNumZH_U32编码当前帧中采用 Intra8 预测模式的宏块数。 暂未使用。
u32Intra4MbNumZH_U32编码当前帧中采用 Intra4 预测模式的宏块数。 暂未使用。
enRefTypeH264E_REF_TYPE_E高级跳帧参考下的编码帧类型。
u32UpdateAttrCntZH_U32通道属性或参数(包含 RC 参数)被设置的次数。 暂未使用。
u32StartQpZH_U32编码当前帧的 startqp 值。 暂未使用。
u32MeanQpZH_U32编码当前帧的平均 QP 值。 暂未使用。
bPSkipZH_BOOL标识当前帧是否为 pskip 帧。 暂未使用。

相关主题


VENC_STREAM_INFO_H265_S

说明

定义 H.265 协议码流特征信息。

定义

typedef struct zhVENC_STREAM_INFO_H265_S {
ZH_U32 u32PicBytesNum;
ZH_U32 u32Inter64x64CuNum;
ZH_U32 u32Inter32x32CuNum;
ZH_U32 u32Inter16x16CuNum;
ZH_U32 u32Inter8x8CuNum;
ZH_U32 u32Intra32x32CuNum;
ZH_U32 u32Intra16x16CuNum;
ZH_U32 u32Intra8x8CuNum;
ZH_U32 u32Intra4x4CuNum;
H265E_REF_TYPE_E enRefType;
ZH_U32 u32UpdateAttrCnt;
ZH_U32 u32StartQp;
ZH_U32 u32MeanQp;
ZH_BOOL bPSkip;
} VENC_STREAM_INFO_H265_S;

成员

成员名称数据类型描述
u32PicBytesNumZH_U32编码当前帧的字节(BYTE)数。 暂未使用。
u32lnter64x64CuNumZH_U32编码当前帧中采用 Inter64x64 预测模式的 CU 块数。 暂未使用。
u32lnter32x32CuNumZH_U32编码当前帧中采用 Inter32x32 预测模式的 CU 块数 暂未使用。
u32lnter16x16CuNumZH_U32编码当前帧中采用 Inter16x16 预测模式的 CU 块数 暂未使用。
u32lnter8x8CuNumZH_U32编码当前帧中采用 Inter8x8 预测模式的 CU 块数 暂未使用。
u32Intra32x32CuNumZH_U32编码当前帧中采用 Intra32x32 预测模式的 CU 块数 暂未使用。
u32lntra16x16CuNumZH_U32编码当前帧中采用 Intra16x16 预测模式的 CU 块数 暂未使用。
u32Intra8x8CuNumZH_U32编码当前帧中采用 Intra8x8 预测模式的 CU 块数 暂未使用。
u32Intra4x4CuNumZH_U32编码当前帧中采用 Intra4x4 预测模式的 CU 块数 暂未使用。
enRefTypeH265E_REF_TYPE_E高级跳帧参考下的编码帧类型。
u32UpdateAttrCntZH_U32通道属性或参数(包含 RC 参数)被设置的次数。 暂未使用。
u32StartQpZH_U32编码当前帧的 startqp 值。 暂未使用。
u32MeanQpZH_U32编码当前帧的平均 QP 值。 暂未使用。
bPSkipZH_BOOL标识当前帧是否为 pskip 帧。 暂未使用。

相关主题


VENC_STREAM_INFO_JPEG_S

说明

定义 JPEG/MJPEG 协议码流特征信息 。

定义

typedef struct zhVENC_STREAM_INFO_JPEG_S {
ZH_U32 u32PicBytesNum;
ZH_U32 u32UpdateAttrCnt;
ZH_U32 u32Qfactor;
} VENC_STREAM_INFO_JPEG_S;

成员

成员名称数据类型描述
u32PicBytesNumZH_U32一帧 JPEG 码流大小,以字节(byte)为单位。 暂未使用。
u32UpdateAttrCntZH_U32通道属性或参数(包含 RC 参数)被设置的次数。 暂未使用。
u32QfactorZH_U32编码当前帧的 Qfactor。 暂未使用。

相关主题


VENC_STREAM_INFO_PRORES_S

说明

定义 PRORES 协议码流特征信息 。

定义

typedef struct zhVENC_STREAM_INFO_PRORES_S {
ZH_U32 u32PicBytesNum;
ZH_U32 u32UpdateAttrCnt;// ZH_U32 u32Reserved;
} VENC_STREAM_INFO_PRORES_S;

成员

成员名称数据类型描述
u32PicBytesNumZH_U32编码当前帧的字节(Byte)数。
u32UpdateAttrCntZH_U32通道属性或参数被设置的次数。

相关主题


VENC_STREAM_ADVANCE_INFO_H264_S

说明

定义 H.264 协议码流高级特征信息。

定义

typedef struct zhVENC_STREAM_ADVANCE_INFO_H264_S {
ZH_U32 u32ResidualBitNum;
ZH_U32 u32HeadBitNum;
ZH_U32 u32MadiVal;
ZH_U32 u32MadpVal;
ZH_DOUBLE dPSNRVal;
ZH_U32 u32MseLcuCnt;
ZH_U32 u32MseSum;
VENC_SSE_INFO_S stSSEInfo[8];
ZH_U32 u32QpHstgrm[VENC_QP_SGRM_NUM];
ZH_U32 u32MoveScene16x16Num;
ZH_U32 u32MoveSceneBits;
} VENC_STREAM_ADVANCE_INFO_H264_S;

成员

成员名称数据类型描述
u32ResidualBitNumZH_U32编码当前帧残差(bit)数。 暂未使用。
u32HeadBitNumZH_U32编码当前帧头信息的(bit)数。 暂未使用。
u32MadiValZH_U32编码当前帧空域纹理复杂度 Madi 值。 暂未使用。
u32MadpValZH_U32编码当前帧时域运动复杂度 Madp 值。 暂未使用。
dPSNRValZH_DOUBLE编码当前帧的 PSNR(峰值信噪比)值。 暂未使用。
u32MseLcuCntZH_U32编码当前帧中 LCU个数。 暂未使用。
u32MseSumZH_U32编码当前帧中 MSE(均方差)值。 暂未使用。
stSSEInfo[8]VENC_SSE_INFO_S编码当前帧中 8 个区域的 SSE(和方差)值。 暂未使用。
u32QpHstgrmZH_U32编码当前帧 Qp 直方图。 暂未使用。
u32MoveScenel6x16NumZH_U32判断为图像前景的 16x16 块的数目,需要开启前景宏块级码控制。 暂未使用。
u32MoveSceneBitsZH_U32判断为图像前景区域编码 bit 数,需要开启前景宏块级码控制。 暂未使用。

相关主题


VENC_STREAM_ADVANCE_INFO_H265_S

说明

定义 H.265 协议码流高级特征信息 。

定义

typedef struct zhVENC_STREAM_ADVANCE_INFO_H265_S {
ZH_U32 u32ResidualBitNum;
ZH_U32 u32HeadBitNum;
ZH_U32 u32MadiVal;
ZH_U32 u32MadpVal;
ZH_DOUBLE dPSNRVal;
ZH_U32 u32MseLcuCnt;
ZH_U32 u32MseSum;
VENC_SSE_INFO_S stSSEInfo[8];
ZH_U32 u32QpHstgrm[VENC_QP_SGRM_NUM];
ZH_U32 u32MoveScene32x32Num;
ZH_U32 u32MoveSceneBits;
} VENC_STREAM_ADVANCE_INFO_H265_S;

成员

成员名称数据类型描述
u32ResidualBitNumZH_U32编码当前帧残差(bit)数。 暂未使用。
u32HeadBitNumZH_U32编码当前帧头信息的(bit)数。 暂未使用。
u32MadiValZH_U32编码当前帧空域纹理复杂度 Madi 值。 暂未使用。
u32MadpValZH_U32编码当前帧时域运动复杂度 Madp 值。 暂未使用。
dPSNRValZH_DOUBLE编码当前帧的 PSNR(峰值信噪比)值。 暂未使用。
u32MseLcuCntZH_U32编码当前帧中 LCU 个数。 暂未使用。
u32MseSumZH_U32编码当前帧中 MSE(均方差)值。 暂未使用。
stSSEInfo[8]VENC_SSE_INFO_S编码当前帧中 8 个区域的 SSE(和方差)值。 暂未使用。
u32QpHstgrmZH_U32编码当前帧 Qp 直方图。 暂未使用。
u32MoveScene32x32NumZH_U32判断为图像前景的 32x32 块的数目,需要开启前景宏块级码控制。 暂未使用。
u32MoveSceneBitsZH_U32判断为图像前景区域编码 bit 数,需要开启前景宏块级码控制。 暂未使用。

相关主题


VENC_STREAM_ADVANCE_INFO_JPEG_S

说明

定义 JPEG/MJPEG 协议码流高级特征信息 。

定义

typedef struct zhVENC_STREAM_ADVANCE_INFO_JPEG_S {
// ZH_U32 u32Reserved;
} VENC_STREAM_ADVANCE_INFO_JPEG_S;

成员

无。

相关主题


VENC_STREAM_ADVANCE_INFO_PRORES_S

说明

定义 PRORES 协议码流高级特征信息。

定义

typedef struct zhVENC_STREAM_ADVANCE_INFO_PRORES_S {
// ZH_U32 u32Reserved;
} VENC_STREAM_ADVANCE_INFO_PRORES_S;

成员

无。


VENC_SSE_INFO_S

说明

定义 H264/H265 协议 SSE 信息 。

定义

typedef struct zhVENC_SSE_INFO_S {
ZH_BOOL bSSEEn;
ZH_U32 u32SSEVal;
} VENC_SSE_INFO_S;

成员

成员名称数据类型描述
bSSEEnZH_BOOL区域 SSE 使能。 暂未使用。
u32SSEValZH_U32区域 SSE 值。 暂未使用。

注意事项

所有成员均为动态属性。

相关主题


VENC_JPEG_PARAM_S

说明

定义 JPEG 协议编码通道高级参数结构体。

定义

typedef struct zhVENC_JPEG_PARAM_S {
ZH_U32 u32Qfactor;
ZH_U8 u8YQt[64];
ZH_U8 u8CbQt[64];
ZH_U8 u8CrQt[64];
ZH_U32 u32MCUPerECS;
} VENC_JPEG_PARAM_S;

成员

成员名称数据类型描述
u32QfactorZH_U32量化表因子,具体含义请参见 RFC2435 协议,系统默认为 70。取值范围:[0,99]。
u8YQtZH_U8Y 量化表。取值范围:[1,255],系统默认为 128。
u8CbQtZH_U8Cb 量化表。取值范围:[1,255],系统默认为 128。
u8CrQtZH_U8Cr量化表。取值范围:[1,255],系统默认为 128。
u32MCUPerECSZH_U32每个 ECS 中包含多少个 MCU,系统默认为 0,表示不划分 EcS。

注意事项

  • 所有成员均为动态属性。
  • u32Qfactor 为 0 时 Y/Cb/Cr 分量使用自定义量化表 u8YQt/u8CbQt/u8CrQt。
  • u32Qfactor 为正数时量化参数只参考 u32Qfactor,此时 u8YQt/u8CbQt/u8CrQt 自定义量化表无效。

VENC_ROI_ATTR_S

说明

定义编码感兴趣区域信息。

定义

typedef struct zhVENC_ROI_ATTR_S {
ZH_U32 u32Index;
ZH_BOOL bEnable;
ZH_BOOL bAbsQp;
ZH_S32 s32Qp;
ZH_BOOL bIntra;
RECT_S stRect;
} VENC_ROI_ATTR_S;

成员

成员名称数据类型描述
u32IndexZH_U32ROI 区域的索引,系统支持的索引范围为[0,7],不支持超出这个范围的索引。
bEnableZH_BOOL是否使能这个 ROI 区域。
bAbsQpZH_BOOLROI 区域 QP 模式。
  • ZH_FALSE:相对 QP。
  • ZH_TURE:绝对 QP。
s32QpZH_S32QP值。
  • 当 bAbsQp 模式为相对 QP,s32Qp 为 QP 相对于该帧 qp 值的偏移,s32Qp 范围[-51,51]。
  • 当 bAbsQp 模式为绝对 QP,s32Qp 为宏块 QP 值,s32Qp 范围[1,51]。
bIntraZH_BOOLROI 区域是否强制编码为 I 块。
  • ZH_FALSE:不开启。
  • ZH_TURE:强制编码为 I 块。
RECT_SRECT_SROI 区域。 s32X、s32Y、u32Width、u32Height 必须是 16 对齐。

注意事项

  • 仅针对 H264/H265 有效。
  • s32Qp 最终设置的值需要遵循 VENC_RC_PARAM_S 中 qp 的设置范围。
    • 即如果是 I 帧,此区域最终的 qp 值会被限制在[u32MinIQp,u32MaxIQp]。
    • 如果是 P 帧,此区域最终的 qp 值会被限制在[u32MinQp,u32MaxQp]。
  • intrarefresh 开启后 index 0 无法使用。
  • 所有成员均为动态属性。

相关主题


VENC_CHN_PARAM_S

说明

定义 Venc 通道参数结构体。

定义

typedef struct zhVENC_CHN_PARAM_S {
ZH_BOOL bColor2Grey;
ZH_U32 u32Priority;
ZH_U32 u32MaxStrmCnt;
ZH_U32 u32PollWakeUpFrmCnt;
VENC_CROP_INFO_S stCropCfg;
VENC_FRAME_RATE_S stFrameRate;
} VENC_CHN_PARAM_S;

成员

成员名称数据类型描述
bColor2GreyZH_BOOL开启或关闭一个通道的彩转灰功能。 (暂未使用,可不设置)
u32PriorityZH_U32编码通道优先级参数。 (暂未使用,可不设置)
u32MaxStrmCntZH_U32最大码流缓存帧数。 (暂未使用,可不设置)
u32PollWakeUpFrmCntZH_U32当通道使用超时或阻塞获取码流,编码指定的帧 u32PollWakeUpFrmCnt 之后唤醒阻塞接口。 (暂未使用,可不设置)
stCropCfgVENC_CROP_INFO_S通道截取(Crop)参数,包含缩放功能。使用说明详见:VENC CROP_INFO_S 结构体定义。
stFrameRateVENC_FRAME_RATE_S通道帧率控制参数。

相关主题


VENC_FRAME_RATE_S

说明

定义通道帧率控制参数。

定义

typedef struct zhVENC_FRAME_RATE_S {
ZH_BOOL bEnable;
ZH_S32 s32SrcFrmRateNum;
ZH_S32 s32SrcFrmRateDen;
ZH_S32 s32DstFrmRateNum;
ZH_S32 s32DstFrmRateDen;
} VENC_FRAME_RATE_S;

成员

成员名称数据类型描述
bEnableZH_BOOL是否使能帧率设置。
  • ZH_TRUE:使能帧率设置。
  • ZH_FALSE:关闭帧率设置。
s32SrcFrmRateNumZH_S32输入帧率分子。
s32SrcFrmRateDenZH_S32输入帧率分母。
s32DstFrmRateNumZH_S32输出帧率分子。
s32DstFrmRateDenZH_S32输出帧率分母。

注意事项

所有成员均为动态属性。

相关主题


VENC_CROP_INFO_S

说明

定义通道截取(Crop)参数。

定义

typedef struct zhVENC_CROP_INFO_S {
VENC_CROP_TYPE_E enCropType;
RECT_S stCropRect;
VENC_SCALE_RECT_S stScaleRect;
} VENC_CROP_INFO_S;

成员

成员名称数据类型描述
enCropTypeVENC_CROP_TYPE_E
  • VENC_CROP_NONE:不开启。
  • VENC_CROP_ONLY:开启裁剪功能,由 stCropRect 参数控制。
  • VENC_CROP_SCALE:开启裁剪缩放功能,由 stScaleRect 参数控制。
  • VENC_CROP_BUTT
stCropRectRECT_S裁剪的区域。
  • stCropRect.s32X:裁剪起点 X,必须 2 像素对齐。
  • stCropRect.s32Y:裁剪起点 Y。
  • stCropRect.u32Width:裁剪图像宽,必须 2 像素对齐。
  • stCropRect.u32Height:裁剪图像高,必须 2 像素对齐。
stScaleRectVENC_SCALE_RECT_S裁剪缩放控制。
  • RECT_SstSrc:裁剪缩放源区域。
  • stSrc.s32X:裁剪缩放源起点 X,必须 2 像素对齐。
  • stSrc.s32Y:裁剪缩放源起点 Y,必须 2 像素对齐。
  • stSrc.u32Width:裁剪缩放源图像宽,必须 2 像素对齐。可以设置为 0,具体描述见注意事项。
  • stSrc.u32Height:裁剪缩放源图像高,必须 2 像素对齐。可以设置为 0,具体说明见注意事项。
  • RECT_SstDst:裁剪缩放目标区域。
  • stDst.s32X:裁剪缩放目标起点 X,必须 2 像素对齐。
  • stDst.s32Y:裁剪缩放目标起点 Y,必须 2 像素对齐。
  • stDst.u32Width:裁剪缩放目标图像宽,必须 2 像素对齐。
  • stDst.u32Height:裁剪缩放目标图像高,必须 2 像素对齐。(暂未使用)

注意事项

  • 源图像大小由送入编码通道的视频帧决定。
  • 裁剪功能与裁剪缩放功能分别由参数 stCropRect、stScaleRect 决定。
  • 缩放功能暂不支持。

相关主题

示例代码

  • 裁剪功能:将送入编码通道的图像从坐标为 x = 10, Y = 20 的像素点位置裁剪出 100 × 200 的图像输出。

    VENC_CHN_PARAM_S stParam;
    ZH_MPI_VENC_GetChnParam(u32Ch, &stParam);
    stParam.stCropCfg.enCropType = VENC_CROP_ONLY;
    stParam.stCropCfg.stCropRect.s32X = 10;
    stParam.stCropCfg.stCropRect.s32Y = 20;
    stParam.stCropCfg.stCropRect.u32Height = 100;
    stParam.stCropCfg.stCropRect.u32Width = 200;
    ZH_MPI_VENC_SetChnParam(u32Ch, &stParam);
  • 缩放功能:将送入编码通道的图像缩放为 640 × 360 的图像输出,将源区域信息设置为 0。

    VENC_CHN_PARAM_S stParam;
    ZH_MPI_VENC_GetChnParam(u32Ch, &stParam);
    stParam.stCropCfg.enCropType = VENC_CROP_SCALE;
    stParam.stCropCfg.stScaleRect.stSrc.s32X = 0;
    stParam.stCropCfg.stScaleRect.stSrc.s32Y = 0;
    stParam.stCropCfg.stScaleRect.stSrc.u32Width = 0;
    stParam.stCropCfg.stScaleRect.stSrc.u32Height = 0;
    stParam.stCropCfg.stScaleRect.stDst.s32X = 0;
    stParam.stCropCfg.stScaleRect.stDst.s32Y = 0;
    stParam.stCropCfg.stScaleRect.stDst.u32Width = 640;
    stParam.stCropCfg.stScaleRect.stDst.u32Height = 360;
  • 裁剪缩放功能:将送入编码通道的图像从坐标为 x = 10, Y = 20 的像素点位置裁剪出1280x720的图像,然后缩放为640x360的图像输出。

    VENC_CHN_PARAM_S stParam;
    ZH_MPI_VENC_GetChnParam(u32Ch, &stParam);
    stParam.stCropCfg.enCropType = VENC_CROP_SCALE;
    stParam.stCropCfg.stScaleRect.stSrc.s32X = 10;
    stParam.stCropCfg.stScaleRect.stSrc.s32Y = 20;
    stParam.stCropCfg.stScaleRect.stSrc.u32Width = 1280;
    stParam.stCropCfg.stScaleRect.stSrc.u32Height = 720;
    stParam.stCropCfg.stScaleRect.stDst.s32X = 0;
    stParam.stCropCfg.stScaleRect.stDst.s32Y = 0;
    stParam.stCropCfg.stScaleRect.stDst.u32Width = 640;
    stParam.stCropCfg.stScaleRect.stDst.u32Height = 360;

VENC_GOP_MODE_E

说明

定义 H.264/H.265 GOP 类型。

定义

typedef enum zhVENC_GOP_MODE_E {
VENC_GOPMODE_INIT = 0,
VENC_GOPMODE_NORMALP,
VENC_GOPMODE_TSVC2,
VENC_GOPMODE_TSVC3,
VENC_GOPMODE_TSVC4,
VENC_GOPMODE_SMARTP,
VENC_GOPMODE_BUTT
} VENC_GOP_MODE_E;

成员

成员名称描述
VENC_GOPMODE_INIT无设置。系统默认 NORMALP。
VENC_GOPMODE_NORMALP编码单参考帧 P 帧。
VENC_GOPMODE_TSVC2TSVC2。 TSVC-2 提供两层编码,帧率可以在 1/2 和全帧率之间变化。
VENC_GOPMODE_TSVC3TSVC3。 TSVC-3 提供三层编码,帧率可以在 1/4,1/2,3/4 和全帧率之间变化。
VENC_GOPMODE_TSVC4TSVC4。 TSVC-4 提供四层编码,帧率可以在 1/8,1/4,3/8,1/2,5/8,3/4,7/8 和全帧率之间变化。
VENC_GOPMODE_SMARTP编码智能 P 帧。 (暂未使用)
VENC_GOPMODE_BUTT最大值。

相关主题


VENC_RC_ADVPARAM_S

说明

定义 RC 模块的高级参数,此接口会包含与码流控制算法无关的功能,并且未来版本还有可能扩展。

定义

typedef struct zhVENC_RC_ADVPARAM_S {
ZH_U32 u32ClearStatAfterSetAttr;
} VENC_RC_ADVPARAM_S;

成员

成员名称数据类型描述
u32ClearStatAfterSetAttrZH_U32设置新的通道码率后,是否清除码率控制的统计信息。
  • 0:关闭码流 Buffer Cache。
  • 1:打开码流 Buffer Cache。
默认值:0。 (暂未使用)

注意事项

所有成员均为动态属性。

相关主题


VENC_SUPERFRAME_CFG_S

说明

超大帧处理策略参数。

定义

typedef struct zhVENC_SUPERFRAME_CFG_S {
VENC_SUPERFRM_MODE_E enSuperFrmMode;
ZH_U32 u32SuperIFrmBitsThr;
ZH_U32 u32SuperPFrmBitsThr;
ZH_U32 u32SuperBFrmBitsThr;
VENC_RC_PRIORITY_E enRcPriority;
} VENC_SUPERFRAME_CFG_S;

成员

成员名称数据类型描述
enSuperFrmModeVENC_SUPERFRM_MODE_E超大帧处理模式,默认为 SUPERFRM_NONE。(暂未使用)
u32SuperlFrmBitsThrZH_U32I 帧超大阈值,单位 bit。取值范围:大于等于 0。(暂未使用)
u32SuperPFrmBitsThrZH_U32P 帧超大阈值,单位 bit。取值范围:大于等于 0。(暂未使用)
u32SuperBFrmBitsThrZH_U32B 帧超大阈值,单位 bit。取值范围:大于等于 0。(暂未使用)
enRcPriorityVENC_RC_PRIORITY_E码率控制优先级,默认为 VENC_RC_PRIORITY_BITRATE_FIRST。(暂未使用)

注意事项

  • 暂未使用。
  • 所有成员均为动态属性。

相关主题


VENC_SUPERFRM_MODE_E

说明

定义码率控制中超大帧处理模式。

定义

typedef enum zhRC_SUPERFRM_MODE_E {
SUPERFRM_NONE = 0,
SUPERFRM_DISCARD,
SUPERFRM_REENCODE,
SUPERFRM_BUTT
} VENC_SUPERFRM_MODE_E;

成员

成员名称描述
SUPERFRM_NONE无特殊策略。 (暂未使用)
SUPERFRM_DISCARD丢弃超大帧。 (暂未使用)
SUPERFRM_REENCODE重编超大帧。 (暂未使用)
SUPERFRM_BUTT最大值。

注意事项

暂未使用。

相关主题


VENC_RC_PRIORITY_E

说明

定义超大帧重编优先级枚举。

定义

typedef enum zhVENC_RC_PRIORITY_E {
VENC_RC_PRIORITY_BITRATE_FIRST = 1,
VENC_RC_PRIORITY_FRAMEBITS_FIRST,
VENC_RC_PRIORITY_BUTT,
} VENC_RC_PRIORITY_E;

成员

成员名称描述
VENC_RC_PRIORITY_BITRATE_FIRST目标码率优先。 (暂未使用)
VENC_RC_PRIORITY_FRAMEBITS_FIRST超大帧阈值优先。 (暂未使用)
VENC_RC_PRIORITY_BUTT最大值。 (暂未使用)

注意事项

  • 暂未使用。
  • 此优先级只在超大帧重编时有效。

相关主题


VENC_FRAMELOST_S

说明

瞬时码率超过阈值时的丢帧策略参数。

定义

typedef struct zhVENC_FRAMELOST_S {
ZH_BOOL bFrmLostOpen;
ZH_U32 u32FrmLostBpsThr;
VENC_FRAMELOST_MODE_E enFrmLostMode;
ZH_U32 u32EncFrmGaps;
} VENC_FRAMELOST_S;

成员

成员名称数据类型描述
bFrmLostOpenZH_BOOL丢帧开关。
  • ZH_TRUE:开。
  • ZH_FALSE:关。
(暂未使用)
u32FrmLostBpsThrZH_U32默认关闭。 丢帧阈值百分比。
丢帧码率值=(bps_max*(100 +u32FrmLostBpsThr)/(float)100)。 取值范围:>=0。(暂未使用)
enFrmLostModeVENC_FRAMELOST_MODE_E丢帧策略模式。
FRMLOST_NORMAL:瞬时码率超过阀值时正常丢帧。(暂未使用)
u32EncFrmGapsZH_U32FRMLOST_PSKIP:瞬时码率超过阈值时编码 pskip 帧。 最大允许连续丢帧帧数。0 表示全丢。建议设置为 1 或 2。(暂未使用)

注意事项

  • 暂未使用。
  • 所有成员均为动态属性。

相关主题


VENC_INTRA_REFRESH_S

说明

P 帧刷 Islice 控制参数。

定义

typedef struct zhVENC_INTRA_REFRESH_S {
ZH_BOOL bRefreshEnable;
VENC_INTRA_REFRESH_MODE_E enIntraRefreshMode;
ZH_U32 u32RefreshNum;
ZH_U32 u32ReqIQp;
} VENC_INTRA_REFRESH_S;

成员

成员名称数据类型描述
bRefreshEnableZH_BOOL是否使能刷 Islice 功能。
  • ZH_TRUE:使能。
  • ZH_FALSE:不使能。
默认为不使能。
enlntraRefreshModeVENC_INTRA_REFRESH_MODE_EI 宏块刷新模式,分为按行刷新和按列刷新。
  • INTRA_REFRESH_ROW:按行刷新。
  • INTRA_REFRESH_COLUMN:按列刷新。
u32RefreshNumZH_U32每次 I 宏块刷新行数或者列数,可以通过这个变量控制刷新的速度及码流的平稳程度。
  • 刷新行数或者列数越多,刷新的速度越快,但是码流平稳度越差。
  • 刷新的行数或者列数越少,刷新的速度越慢,但是码流平稳度越好。
u32ReqIQpZH_U32I 帧 QP 值,在帧内刷新模式,可能方案还需要插入 IDR 帧,设置 I 帧 QP 用于控制插入的IDR帧的质量。质量越好 IDR 帧大小越大;质量越差 IDR 帧大小越小。 取值范围:[1,51]。 暂不支持该参数设置。(暂未使用)

注意事项

INTRA_REFRESH_COLUMN 暂不支持。

相关主题


VENC_H264_INTRA_PRED_S

说明

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

定义

typedef struct zhVENC_H264_INTRA_PRED_S {
ZH_U32 constrained_intra_pred_flag;
} VENC_H264_INTRA_PRED_S;

成员

成员名称数据类型描述
constrained_intra_pred_flagZH_U32默认为 0。取值范围:0 或 1。

注意事项

  • 以上参数具体含义请参见 H.264 协议。
  • 所有成员均为动态属性。

相关主题


VENC_H264_TRANS_S

说明

H.264 协议编码通道变换、量化结构体。

定义

typedef struct zhVENC_H264_TRANS_S {
ZH_U32 u32TransMode;
ZH_BOOL bScalingListValid;
ZH_U8 InterScalingList8X8[64];
ZH_U8 IntraScalingList8X8[64];
ZH_S32 chroma_qp_index_offset;
} VENC_H264_TRANS_S;

成员

成员名称数据类型描述
u32TransModeZH_U32帧内、帧间预测的变换模式。 系统默认值为 0。动态属性。
  • 0:支持 4x4,8x8 变换,high profile,svc-t支持。
  • 1:4x4 变换。
bScalingListValidZH_BOOLInterScalingList8x8、IntraScalingList8x8 是否有效标识,只在 high profile,svc-t下才有意义。

取值范围:0 或 1。0:无效;1:有效。只支持配置0。

InterScalingList8X8[64]ZH_U8帧间预测 8x8 的量化表,在 highprofile,svc-t下,用户可以使用自己的量化表,保留,暂不使用。 取值范围:[1,255]。
IntraScalingList8X8[64]ZH_U8帧内预测 8x8 的量化表,在high profile,svc-t下,用户可以使用自己的量化表,保留,暂不使用。 取值范围:[1,255]。
chroma_qp_index_offsetZH_S32具体含义请参见 H.264 协议。系统默认值为 -6。取值范围:[-12,12]。 动态属性。

注意事项

  • 以上参数具体含义请参见 H.264 协议。
  • 不支持量化表,因此不支持设置 bScalingListValid、InterScalingList8X8[64]、IntraScalingList8X8[64]。

相关主题


VENC_H264_ENTROPY_S

说明

H.264 协议编码通道熵编码结构体。

定义

typedef struct zhVENC_H264_ENTROPY_S {
ZH_U32 u32EntropyEncMode;
ZH_U32 cabac_init_idc;
} VENC_H264_ENTROPY_S;

成员

成员名称数据类型描述
u32EntropyEncModeZH_U32熵编码模式。0:cavlc,1:cabac。系统默认值为 1。
cabac_init_idcZH_U32取值范围:[0,2],默认值 0,具体含义请参见 H.264 协议。

注意事项

所有成员均为动态属性。

相关主题


VENC_H264_DBLK_S

说明

H.264 协议编码通道 Dblk 结构体。

定义

typedef struct zhVENC_H264_DBLK_S {
ZH_U32 disable_deblocking_filter_idc;
ZH_S32 slice_alpha_c0_offset_div2;
ZH_S32 slice_beta_offset_div2;
} VENC_H264_DBLK_S;

成员

成员名称数据类型描述
disable_deblocking_filter_idcZH_U32取值范围:[0,2],默认值 0,具体含义请参见 H.264 协议。
slice_alpha_c0_offset_div2ZH_U32取值范围:[-6,6],默认值 0,具体含义请参见 H.264 协议。
slice_beta_offset_div2ZH_U32取值范围:[-6,6],默认值 0,具体含义请参见 H.264 协议。

注意事项

所有成员均为动态属性。

相关主题


VENC_H264_VUI_S

说明

H.264 协议编码通道 Vui 结构体。

定义

typedef struct zhVENC_H264_VUI_S {
VENC_VUI_ASPECT_RATIO_S stVuiAspectRatio;
VENC_VUI_H264_TIME_INFO_S stVuiTimeInfo;
VENC_VUI_VIDEO_SIGNAL_S stVuiVideoSignal;
VENC_VUI_BITSTREAM_RESTRIC_S stVuiBitstreamRestric;
} VENC_H264_VUI_S;

成员

成员名称数据类型描述
stVuiAspectRatioVENC_VUI_ASPECT_RATIO_S具体含义请参见 H.264 协议。暂不支持该参数设置。
stVuiTimeInfoVENC_VUI_H264_TIME_INFO_S具体含义请参见 H.264 协议。暂不支持该参数设置。
stVuiVideoSignalVENC_VUI_VIDEO_SIGNAL_S具体含义请参见 H.264 协议。部分参数支持。
stVuiBitstreamRestricVENC_VUI_BITSTREAM_RESTRIC_S具体含义请参见 H.264 协议。暂不支持该参数设置。

注意事项

所有成员均为动态属性。

相关主题


VENC_VUI_ASPECT_RATIO_S

说明

定义 H.264/H.265 协议编码通道 Vui 中 AspectRatio 信息的结构体。

定义

typedef struct zhVENC_VUI_ASPECT_RATIO_S {
ZH_U8 aspect_ratio_info_present_flag;
ZH_U8 aspect_ratio_idc;
ZH_U8 overscan_info_present_flag;
ZH_U8 overscan_appropriate_flag;
ZH_U16 sar_width;
ZH_U16 sar_height;
} VENC_VUI_ASPECT_RATIO_S;

成员

成员名称数据类型描述
aspect_ratio_info_present_flagZH_U8具体含义请参见 H.264/H.265 协议,系统默认为 0。取值范围:0 或 1。 暂不支持该参数设置。
aspect_ratio_idcZH_U8具体含义请参见 H.264/H.265 协议,系统默认为 0。取值范围:[0,255],17~254 保留。 暂不支持该参数设置。
overscan_info_present_flagZH_U8具体含义请参见 H.264/H.265 协议,系统默认为 0。取值范围:0 或 1。 暂不支持该参数设置。
overscan_appropriate_flagZH_U8具体含义请参见 H.264/H.265 协议,系统默认为 0。取值范围:0 或 1。 暂不支持该参数设置。
sar_widthZH_U16具体含义请参见 H.264/H.265 协议,系统默认为 0。取值范围:(0,65535],并且与 sar_height 互质。 暂不支持该参数设置。
sar_heightZH_U16具体含义请参见 H.264/H.265 协议,系统默认为 0。取值范围:(0,65535],并且与 sar_width 互质。 暂不支持该参数设置。

注意事项

所有成员均为动态属性。

相关主题


VENC_VUI_H264_TIME_INFO_S

说明

定义 H.264 协议编码通道 Vui 中 Time_Info 信息的结构体。

定义

typedef struct zhVENC_H264_VUI_TIME_INFO_S {
ZH_U8 timing_info_present_flag;
ZH_U8 fixed_frame_rate_flag;
ZH_U32 num_units_in_tick;
ZH_U32 time_scale;
} VENC_VUI_H264_TIME_INFO_S;

成员

成员名称数据类型描述
timing_info_present_flagZH_U8具体含义请参见 H.264 协议,系统默认为 1。取值范围:0 或 1。 暂不支持该参数设置。
fixed_frame_rate_flagZH_U8具体含义请参见 H.264 协议,系统默认为 1。取值范围:0 或 1。 暂不支持该参数设置。
num_units_in_tickZH_U32具体含义请参见 H.264 协议,系统默认为 1。取值范围:大于 0。 暂不支持该参数设置。
time_scaleZH_U32具体含义请参见 H.264 协议,系统默认为 60。取值范围:大于 0。 暂不支持该参数设置。

注意事项

所有成员均为动态属性。

相关主题


VENC_VUI_VIDEO_SIGNAL_S

说明

定义 H.264/H.265 协议编码通道 Vui 中信息的 Video_Signal 结构体。

定义

typedef struct zhVENC_VUI_VIDEO_SIGNAL_S {
ZH_U8 video_signal_type_present_flag;
ZH_U8 video_format;
ZH_U8 video_full_range_flag;
ZH_U8 colour_description_present_flag;
ZH_U8 colour_primaries;
ZH_U8 transfer_characteristics;
ZH_U8 matrix_coefficients;
} VENC_VUI_VIDEO_SIGNAL_S;

成员

成员名称数据类型描述
video_signal_type_present_flagZH_U8具体含义请参见 H.264/H.265 协议,系统默认为 1。取值范围:0 或 1。 暂不支持该参数设置。
video_formatZH_U8具体含义请参见 H.264/H.265 协议,系统默认为 5。取值范围:H.264:[0,7], H.265: [0,5]。 暂不支持该参数设置。
video_full_range_flagZH_U8
  • 0: limit color range。
  • 1: full color range。
系统默认为 1。取值范围:0 或 1。
colour_description_present_flagZH_U8具体含义请参见 H.264/H.265 协议,系统默认为 0。该值为只读信息。取值范围:0 或 1。 暂不支持该参数设置。
colour_primariesZH_U8具体含义请参见 H.264/H.265 协议,系统默认为 0。该值为只读信息,内部根据 当前图像实际信息填写。取值范围:[0,255]。 暂不支持该参数设置。
transfer_characteristicsZH_U8具体含义请参见 H.264/H.265 协议,系统默认为 0。该值为只读信息,内部根据 当前图像实际信息填写。取值范围:[0,255]。 暂不支持该参数设置。
matrix_coefficientsZH_U8具体含义请参见 H.264/H.265 协议,系统默认为 0。该值为只读信息,内部根据 当前图像实际信息填写。取值范围:[0,255]。 暂不支持该参数设置。

注意事项

所有成员均为动态属性。

相关主题


VENC_VUI_BITSTREAM_RESTRIC_S

说明

定义 H.264/H.265 协议编码通道 Vui 中信息的 Bitstream_Restriction 结构体。

定义

typedef struct zhVENC_VUI_BITSTREAM_RESTRIC_S {
ZH_U8 bitstream_restriction_flag;
} VENC_VUI_BITSTREAM_RESTRIC_S;

成员

成员名称数据类型描述
bitstream_restriction_flagZH_U8具体含义请参见 H.264/H.265 协议,系统默认为 1。取值范围:0 或 1。 暂不支持该参数设置。

注意事项

所有成员均为动态属性。

相关主题


VENC_H265_TRANS_S

说明

H.265 协议编码通道变换量化的结构体。

定义

typedef struct zhVENC_H265_TRANS_S {
ZH_S32 cb_qp_offset;
ZH_S32 cr_qp_offset;
ZH_BOOL bScalingListEnabled;
ZH_BOOL bScalingListTu4Valid;
ZH_U8 InterScalingList4X4[2][16];
ZH_U8 IntraScalingList4X4[2][16];
ZH_BOOL bScalingListTu8Valid;
ZH_U8 InterScalingList8X8[2][64];
ZH_U8 IntraScalingList8X8[2][64];
ZH_BOOL bScalingListTu16Valid;
ZH_U8 InterScalingList16X16[2][64];
ZH_U8 IntraScalingList16X16[2][64];
ZH_BOOL bScalingListTu32Valid;
ZH_U8 InterScalingList32X32[64];
ZH_U8 IntraScalingList32X32[64];
} VENC_H265_TRANS_S;

成员

成员名称数据类型描述
cb_qp_offsetZH_S32默认为 -6,取值范围:[-12,12]。
cr_qp_offsetZH_S32默认为 -6,取值范围:[-12,12]。
bScalingListEnabledZH_BOOL默认为 0。保留,暂不使用。
bScalingListTu4ValidZH_BOOL默认为 0。保留,暂不使用。
InterScalingList4X4[2][16]ZH_U8默认为 0。保留,暂不使用。
IntraScalingList4X4[2][16]ZH_U8默认为 0。保留,暂不使用。
bScalingListTu8ValidZH_BOOL默认为 0。保留,暂不使用。
InterScalingList8X8[2][64]ZH_U8默认为 0。保留,暂不使用。
IntraScalingList8X8[2][64]ZH_U8默认为 0。保留,暂不使用。
bScalingListTu16ValidZH_BOOL默认为 0。保留,暂不使用。
InterScalingList16X16[2][64]ZH_U8默认为 0。保留,暂不使用。
IntraScalingList16X16[2][64]ZH_U8默认为 0。保留,暂不使用。
bScalingListTu32ValidZH_BOOL默认为 0。保留,暂不使用。
InterScalingList32X32[64]ZH_U8默认为 0。保留,暂不使用。
IntraScalingList32X32[64]ZH_U8默认为 0。保留,暂不使用。

注意事项

  • 以上参数具体含义请参见 H.265 协议。
  • 所有成员均为动态属性。

相关主题


VENC_H265_ENTROPY_S

说明

H.265 协议编码通道熵编码的结构体。

定义

typedef struct zhVENC_H265_ENTROPY_S {
ZH_U32 cabac_init_flag;
} VENC_H265_ENTROPY_S;

成员

成员名称数据类型描述
cabac_init_flagZH_U32默认为 0,取值范围:0 或 1。保留,暂不使用。

注意事项

所有成员均为动态属性。

相关主题


VENC_H265_DBLK_S

说明

H.265 协议编码通道 Deblocking 的结构体。

定义

typedef struct zhVENC_H265_DBLK_S {
ZH_U32 slice_deblocking_filter_disabled_flag;
ZH_S32 slice_beta_offset_div2;
ZH_S32 slice_tc_offset_div2;
} VENC_H265_DBLK_S;

成员

成员名称数据类型描述
slice_deblocking_filter_disabled_flagZH_U32默认为 0。取值范围:0 或 1。
slice_beta_offset_div2ZH_S32默认为 0。取值范围:[-6,6]。
slice_tc_offset_div2ZH_S32默认为 0。取值范围:[-6,6]。

注意事项

  • 以上参数具体含义请参见 H.265 协议。
  • 所有成员均为动态属性。

相关主题


VENC_H265_SAO_S

说明

H.265 协议编码通道 SAO 的结构体。

定义

typedef struct zhVENC_H265_SAO_S {
ZH_U32 slice_sao_luma_flag;
ZH_U32 slice_sao_chroma_flag;
} VENC_H265_SAO_S;

成员

成员名称数据类型描述
slice_sao_luma_flagZH_U32默认为 1。取值范围:0 或 1。
slice_sao_chroma_flagZH_U32默认为 1。 取值范围:0 或 1。

注意事项

  • 以上参数具体含义请参见 H.265 协议。
  • 所有成员均为动态属性。

相关主题


VENC_H265_PU_S

说明

H.265 协议编码通道 pu 的结构体。

定义

typedef struct zhVENC_H265_PU_S {
ZH_U32 constrained_intra_pred_flag;
ZH_U32 strong_intra_smoothing_enabled_flag;
} VENC_H265_PU_S;

成员

成员名称数据类型描述
constrained_intra_pred_flagZH_U32默认为 0。取值范围:0 或 1。保留,暂不使用。
strong_intra_smoothing_enabled_flagZH_U32默认为 1。取值范围:0 或 1。

注意事项

  • 以上参数具体含义请参见 H.265 协议。
  • 所有成员均为动态属性。

相关主题


VENC_H265_VUI_S

说明

H.265 协议编码通道 Vui 结构体。

定义

typedef struct zhVENC_H265_VUI_S {
VENC_VUI_ASPECT_RATIO_S stVuiAspectRatio;
VENC_VUI_H265_TIME_INFO_S stVuiTimelnfo;
VENC_VUI_VIDEO_SIGNAL_S stVuiVideoSignal;
VENC_VUI_BITSTREAM_RESTRIC_S stVuiBitstreamRestric;
} VENC_H265_VUI_S;

成员

成员名称数据类型描述
stVuiAspectRatioVENC_VUI_ASPECT_RATIO_S具体含义请参见 H.265 协议。暂不支持该参数设置。
stVuiTimelnfoVENC_VUI_H265_TIME_INFO_S具体含义请参见 H.265 协议。暂不支持该参数设置。
stVuiVideoSignalVENC_VUI_VIDEO_SIGNAL_S具体含义请参见 H.265 协议。部分参数支持。
stVuiBitstreamRestricVENC_VUI_BITSTREAM_RESTRIC_S具体含义请参见 H.265 协议。暂不支持该参数设置。

注意事项

所有成员均为动态属性。

相关主题


VENC_VUI_H265_TIME_INFO_S

说明

定义 H.265 协议编码通道 Vui 中 Time_Info 信息的结构体。

定义

typedef struct zhVENC_VUI_H265_TIME_INFO_S {
ZH_U32 timing_info_present_flag;
ZH_U32 num_units_in_tick;
ZH_U32 time_scale;
ZH_U32 num_ticks_poc_diff_one_minus1;
} VENC_VUI_H265_TIME_INFO_S;

成员

成员名称数据类型描述
timing_info_present_flagZH_U32具体含义请参见 H.265 协议,系统默认为 1。取值范围:0 或 1。 暂不支持该参数设置。
fixed_frame_rate_flagZH_U32具体含义请参见 H.265 协议,系统默认为 1。取值范围:0 或 1。 暂不支持该参数设置。
num_units_in_tickZH_U32具体含义请参见 H.265 协议,系统默认为 1。取值范围:大于 0。 暂不支持该参数设置。
time_scaleZH_U32具体含义请参见 H.265 协议,系统默认为 60。取值范围:大于 0。 暂不支持该参数设置。

注意事项

所有成员均为动态属性。

相关主题


VENC_MJPEG_PARAM_S

说明

定义 MJPEG 协议编码通道高级参数结构体。

定义

typedef struct zhVENC_MJPEG_PARAM_S {
ZH_U8 u8YQt[64];
ZH_U8 u8CbQt[64];
ZH_U8 u8CrQt[64];
ZH_U32 u32MCUPerECS;
} VENC_MJPEG_PARAM_S;

成员

成员名称数据类型描述
u8YQtZH_U8Y 量化表。 取值范围:[1,255],系统默认为 128。
u8CbQtZH_U8Cb 量化表。 取值范围:[1,255],系统默认为 128。
u8CrQtZH_U8Cr 量化表。 取值范围:[1,255],系统默认为 128。
u32MCUPerECSZH_U32每个 ECS 中包含 MCU 的个数,系统默认为 0,表示不划分 Ecs。
最小值为 0,最大值与输入格式相关,具体如下:
  • 输入为yuv420sp: (picwidth+15)>>4 (picheight+15)>>4
  • 输入为yuv422sp: (picwidth+15)>>4(picheight+15)>>4×2
  • 输入为yuv444sp:(picwidth+15)>>4(picheight+15)>>4×4

注意事项

所有成员均为动态属性。

相关主题


VENC_REF_PARAM_S

说明

H.264/H.265 编码的高级跳帧参考参数。

定义

typedef struct zhVENC_REF_PARAM_S {
ZH_U32 u32Base;
ZH_U32 u32Enhance;
ZH_BOOL bEnablePred;
} VENC_REF_PARAM_S;

成员

成员名称数据类型描述
u32BaseZH_U32base 层的周期。取值范围:(0,+∞)。
u32EnhanceZH_U32enhance 层的周期。取值范围:[0,255]。
bEnablePredZH_BOOL代表 base 层的帧是否被 base 层其他帧用作参考。
当 bEnablePred 设置为 ZH_FALSE 时,等同于 u32Base 设置为无限大,base 层的所有帧都参考 IDR 帧。

注意事项

所有成员均为动态属性。

相关主题


ROTATION_E

说明

定义旋转角度枚举。

定义

typedef enum zhROTATION_E {
ROTATION_0 = 0,
ROTATION_90 = 1,
ROTATION_180 = 2,
ROTATION_270 = 3,
ROTATION_BUTT
} ROTATION_E;

成员

成员名称描述
ROTATION_0不旋转。
ROTATION_90旋转 90 度。
ROTATION_180旋转 180 度。
ROTATION_270旋转 270 度。
ROTATION_BUTT最大值。

注意事项

旋转与镜像同时存在时,先做旋转处理。

相关主题


MIRROR_E

说明

定义镜像枚举。

定义

typedef enum zhROTATION_E {
MIRROR_NONE,
MIRROR_HORIZONTAL,
MIRROR_VERTICAL,
MIRROR_BOTH,
MIRROR_BUTT
} ROTATION_E;

成员

成员名称描述
MIRROR_NONE不镜像。
MIRROR_HORIZONTAL水平镜像。
MIRROR_VERTICAL垂直镜像。
MIRROR_BOTH水平+垂直镜像(等同旋转180)。
MIRROR_BUTT最大值。

注意事项

旋转与镜像同时存在时,先做旋转处理。

相关主题


USER_FRAME_INFO_S

说明

用户发送图像信息结构体。

定义

typedef struct zhUSER_FRAME_INFO_S {
VIDEO_FRAME_INFO_S stUserFrame;
USER_RC_INFO_S stUserRcInfo;
} USER_FRAME_INFO_S;

成员

成员名称数据类型描述
stUserFrameVIDEO_FRAME_INFO_S用户发送图像帧信息结构体。
stUserRcInfoUSER_RC_INFO_S用户码控信息结构体。

相关主题

ZH_MPI_VENC_SendFrameEx:支持用户发送原始图像及该图的 QpMap 表信息进行编码。


USER_RC_INFO_S

说明

用户码控信息结构体。

定义

typedef struct zhUSER_RC_INFO_S {
ZH_BOOL bQpMapValid;
ZH_BOOL bSkipWeightValid;
ZH_U32 u32BlkStartQp;
MB_BLK pMbBlkQpMap;
MB_BLK pMbBlkSkipWeight;
VENC_FRAME_TYPE_E enFrameType;
} USER_RC_INFO_S;

成员

成员名称数据类型描述
bQpMapValidZH_BOOLQPMAP 模式中,Qp 表是否生效。
bSkipWeightValidZH_BOOLQPMAP 模式中,SkipWeight 表是否生效。 (暂未使用)
u32BlkStartQpZH_U32QPMAP 模式中,第一个 16*16 块的 Qp 值。 (暂未使用) 取值范围:[0,51]。
pMbBlkQpMapMB_BLKQPMAP 模式中,Qp 表的 MB_BLK。
pMbBlkSkipWeightMB_BLKQPMAP 模式中,SkipWeight 表的 MB_BLK。 (暂未使用)
enFrameTypeVENC_FRAME_TYPE_E指定当前帧编码帧类型。 (暂未使用)

相关主题

ZH_MPI_VENC_SendFrameEx:支持用户发送原始图像及该图的 QpMap 表信息进行编码。


VENC_SLICE_SPLIT_S

说明

编码通道 SLICE 分割结构体。

定义

typedef struct zhVENC_SLICE_SPLIT_S {
ZH_BOOL bSplitEnable;
ZH_U32 u32SplitMode;
ZH_U32 u32SplitSize;
} VENC_SLICE_SPLIT_S;

成员

成员名称数据类型描述
bSplitEnableZH_BOOLslice 分割是否使能。
  • ZH_TRUE:使能。
  • ZH_FALSE:不使能。
默认不使能。
u32SplitModeZH_U32slice 分割模式。
  • 0:按 byte 数分割,最大支持 501 个 slice 包分割,所有 slice 输出到一帧,仅支持单包模式获取(无 slice 单包信息), 暂未使用。
  • 1:按 MB 或者LCU分割,最大支持 501 个 slice 包分割,所有 slice 输出到一帧,仅支持单包模式获取 (无 slice单包信息)。
  • 2:按 MB 或者 LCU 分割,最大支持 8 个 slice 包分割,所有 slice 输出到一帧,支持单包模式及多包模式获取,多包模式下支持每个 slice 包信息的获取。
  • 3:按 MB 或者 LCU 分割,最大支持 8 个 slice 包分割,每次获取帧数据时,获取到一个 slice 包,仅支持单包模式获取。(此模式为低延时拓展预留,暂未使用)。
u32SplitSizeZH_U32slice 分割大小。
  • split_mode=0,表示每个 slice 的 byte 数。
  • split_mode=1/2/3,表示每个 slice 的 MB 或 LCU 数。

注意事项

  • slice 分割模式为 0 或者 1 时,H264 最大支持 slice 分割个数为 500,H265 最大支持 slice 分割个数为 500 个(单 tile)。超过最大个数后的剩余区域会编码成一个 slice, 暂未使用。
  • slice 分割模式为 2 或者 3 时,H264/H265 最大支持 slice 分割个数为 8 个。
  • JPEG/MJPEG 只支持按照宏块分割。宏块大小跟yuv格式相关:420:16x16,422:16x8,444:8x8。
  • H264 编码 MB 大小为 16x16 大小。
  • H265 编码 LCU 大小均为 64x64。
  • 如果要获取每个 slice 包信息(数据长度及偏移),需要设置 slice 分割模式为 2,并且对应模块的 u32OneStreamBuffer 设置为 0(多包模式)。

相关主题


VENC_PARAM_MOD_S

说明

编码相关模块参数结构体。

定义

typedef struct zhVENC_MODPARAM_S {
VENC_MODTYPE_E enVencModType;
VENC_MOD_VENC_S stVencModParam;
VENC_MOD_H264E_S stH264eModParam;
VENC_MOD_H265E_S stH265eModParam;
VENC_MOD_JPEGE_S stJpegeModParam;
VENC_MOD_RC_S stRcModParam;
} VENC_PARAM_MOD_S;

成员

成员名称数据类型描述
enVencModTypeVENC_MODTYPE_E设置或者获取模块参数的类型。
stVencModParamVENC_MOD_VENC_S编码各个模块参数结构。
stH264eModParamVENC_MOD_H264E_S编码各个模块参数结构。
stH265eModParamVENC_MOD_H265E_S编码各个模块参数结构。
stJpegeModParamVENC_MOD_JPEGE_S编码各个模块参数结构。
stRcModParamVENC_MOD_RC_S编码各个模块参数结构。

相关主题


VENC_MODTYPE_E

说明

编码相关模块参数类型。

定义

typedef enum zhVENC_MODTYPE_E {
MODTYPE_VENC = 1,
MODTYPE_H264E,
MODTYPE_H265E,
MODTYPE_JPEGE,
MODTYPE_RC,
MODTYPE_BUTT
} VENC_MODTYPE_E;

成员

成员名称描述
MODTYPE_VENCVENC 模块参数类型。
MODTYPE_H264EH264 模块参数类型。
MODTYPE_H265EH265 模块参数类型。
MODTYPE_JPEGEJPEG/MJPEG 模块参数类型。
MODTYPE_RCRC 模块参数类型。
MODTYPE_BUTT最大值。

相关主题


VENC_MOD_VENC_S

说明

VENC 模块参数结构体。

定义

typedef struct zhVENC_MOD_VENC_S {
ZH_U32 u32VencBufferCache;
ZH_U32 u32FrameBufRecycle;
} VENC_MOD_VENC_S;

成员

成员名称数据类型描述
u32VencBufferCacheZH_U32码流获取是否支持 cache 方式。
  • 0:关闭码流 Buffer Cache。
  • 1:打开码流 Buffer Cache。
默认值:0。(暂未使用)
u32FrameBufRecycleZH_U32帧存是否回收。
  • 0:关闭编码帧存回收。
  • 1:打开编码帧存回收。
默认值:0。 (暂未使用)

相关主题


VENC_MOD_H264E_S

说明

H264模块参数结构体。

定义

typedef struct zhVENC_MOD_H264E_S {
ZH_U32 u32OneStreamBuffer;
ZH_U32 u32H264eMiniBufMode;
ZH_U32 u32H264ePowerSaveEn;
MB_SOURCE_E enH264eMBSource;
ZH_BOOL bQpHstgrmEn;
} VENC_MOD_H264E_S;

成员

成员名称数据类型描述
u32OneStreamBufferZH_U32编码码流帧配置模式。
  • 0:多包模式。
  • 1:单包模式。
默认值:1。
u32H264eMiniBufModeZH_U32编码码流 buffer 配置模式。
  • 0:码流 buffer 根据分辨率分配。
  • 1:码流 buffer 下限为 32k,用户保证合理。
默认值:0。 (暂未使用)
u32H264ePowerSaveEnZH_U32低功耗模式。
  • 0:关闭低功耗模式。
  • 1:使能低功耗模式。
  • 2:使能极低功耗模式。
默认值:0。 (暂未使用)
enH264eMBSourceMB_SOURCE_E参考帧和重构帧的帧存分配方式。 默认值:0。 (暂未使用)
bQpHstgrmEnZH_BOOLQp 直方图输出控制模式。 默认值:0。 (暂未使用)

相关主题


VENC_MOD_H265E_S

说明

H265 模块参数结构体。

定义

typedef struct zhVENC_MOD_H265E_S {
ZH_U32 u32OneStreamBuffer;
ZH_U32 u32H265eMiniBufMode;
ZH_U32 u32H265ePowerSaveEn;
MB_SOURCE_E enH265eMBSource;
ZH_BOOL bQpHstgrmEn;
} VENC_MOD_H265E_S;

成员

成员名称数据类型描述
u32OneStreamBufferZH_U32编码码流帧配置模式。
  • 0:多包模式。
  • 1:单包模式。
默认值:1。
u32H265eMiniBufModeZH_U32编码码流 buffer 配置模式。
  • 0:码流 buffer 根据分辨率分配。
  • 1:码流 buffer 下限为 32k,用户保证合理。
默认值:0。 (暂未使用)
u32H265ePowerSaveEnZH_U32低功耗模式。
  • 0:关闭低功耗模式。
  • 1:使能低功耗模式。
  • 2:使能极低功耗模式。
默认值:0。 (暂未使用)
enH265eMBSourceMB_SOURCE_E参考帧和重构帧的帧存分配方式。 默认值:0。 (暂未使用)
bQpHstgrmEnZH_BOOLQp 直方图输出控制模式。 默认值:0。 (暂未使用)

相关主题


VENC_MOD_JPEGE_S

说明

JPEG/MJPEG 模块参数结构体。

定义

typedef struct zhVENC_MOD_JPEGE_S {
ZH_U32 u32OneStreamBuffer;
ZH_U32 u32JpegeMiniBufMode;
ZH_U32 u32JpegClearStreamBuf;
} VENC_MOD_JPEGE_S;

成员

成员名称数据类型描述
u32OneStreamBufferZH_U32编码码流帧配置模式。
  • 0:多包模式。
  • 1:单包模式。
u32JpegeMiniBufModeZH_U32默认值:1。JPEG/MJPEG 目前仅支持单包模式。 编码码流 buffer 配置模式。
  • 0:码流 buffer 根据分辨率分配。
  • 1:码流 buffer 下限为 32k,用户保证合理。
默认值:0。 (暂未使用)
u32JpegClearStreamBufZH_U32JPEG 编码通道设置属性时是否清空码流 buffer。 默认值:0。 (暂未使用)

相关主题


VENC_MOD_RC_S

说明

RC 模块参数结构体。

定义

typedef struct zhVENC_MOD_RC_S {
ZH_U32 u32ClrStatAfterSetBr;
} VENC_MOD_RC_S;

成员

成员名称数据类型描述
u32ClrStatAfterSetBrZH_U32设置通道码率时是否清除 RC 相关统计。

相关主题


VENC错误码

视频编码 API VENC 错误码如下所示:

错误代码宏定义描述
0xA0048002ZH_ERR_VENC_INVALID_CHNID通道 ID 超出合法范围。
0xA0048003ZH_ERR_VENC_ILLEGAL_PARAM参数超出合法范围。
0xA0048004ZH_ERR_VENC_EXIST试图申请或者创建已经存在的设备、通道或者资源。
0xA0048005ZH_ERR_VENC_UNEXIST试图使用或者销毁不存在的设备、通道或者资源。
0xA0048006ZH_ERR_VENC_NULL_PTR函数参数中有空指针。
0xA0048007ZH_ERR_VENC_NOT_CONFIG使用前未配置。
0xA0048008ZH_ERR_VENC_NOT_SUPPORT不支持的参数或者功能。
0xA0048009ZH_ERR_VENC_NOT_PERM该操作不允许,如试图修改静态配置参数。
0xA004800CZH_ERR_VENC_NOMEM分配内存失败,如系统内存不足。
0xA004800DZH_ERR_VENC_NOBUF分配缓存失败,如申请的数据缓冲区太大。
OxA004800EZH_ERR_VENC_BUF_EMPTY缓冲区中无数据。
0xA004800FZH_ERR_VENC_BUF_FULL缓冲区中数据满。
0xA0048010ZH_ERR_VENC_SYS_NOTREADY系统没有初始化或没有加载相应模块。
0xA0048012ZH_ERR_VENC_BUSYVENC 系统忙。