8.4. 数据类型

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

8.4.1. VDEC_CHN_ATTR_S

【说明】

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

【定义】

typedef struct _VDEC_CHN_ATTR_S {
  PAYLOAD_TYPE_E enType;
  VIDEO_MODE_E enMode;
  CVI_U32 u32PicWidth;
  CVI_U32 u32PicHeight;
  CVI_U32 u32StreamBufSize;
  CVI_U32 u32FrameBufSize;
  CVI_U32 u32FrameBufCnt;
  union {
    VDEC_ATTR_VIDEO_S
    stVdecVideoAttr;
  };
} VDEC_CHN_ATTR_S;

【成员】

成员名称

描述

enType

解码协议类型枚举值。Video Codec 常使用枚举:PT_JPEG/ PT_H264/PT_MJPEG

enMode

码流发送方式。目前仅支持VIDEO_MODE_FRAME

u32PicWidth

通道支持的解码图像最大宽(以像素为单位)

u32PicHeight

通道支持的解码图像最大高(以像素为单位)

u32StreamBufSize

码流缓存的大小。

(u32StreamBufSize = u32Width * u32Height)

u32FrameBufSize

解码图像帧存 buffer 大小。(随enType而异)

u32FrameBufCnt

解码图像帧存个数。

stVdecVideoAttr

视频(H.264)解码通道属性。

【注意事项】

CV181x VDEC模块支持PT_JPEG/PT_MJPEG/PT_H264,CV180X支持PT_JPEG/PT_MJPEG。

【相关数据类型及接口】

无。

8.4.2. VDEC_ATTR_VIDEO_S

【说明】

定义视频解码视频通道属性。

【定义】

typedef struct _VDEC_ATTR_VIDEO_S {
  CVI_U32 u32RefFrameNum;
  CVI_BOOL bTemporalMvpEnable;
  CVI_U32 u32TmvBufSize;
} VDEC_ATTR_VIDEO_S;

【成员】

成员名称 描述

描述

u32RefFrameNum

参考帧的数目。 (目前不支持)

bTemporalMvpEnable

是否支持时域运动矢量预测。(目前不支持)

u32TmvBufSize

视频解码图像 Tmv Buffer 大小。(目前不支持)

【注意事项】

无。

【相关数据类型及接口】

无。

8.4.3. VIDEO_MODE_E

【说明】

定义码流发送方式。

【定义】

typedef enum _VIDEO_MODE_E {
  VIDEO_MODE_STREAM = 0,
  VIDEO_MODE_FRAME,
  VIDEO_MODE_COMPAT,
  VIDEO_MODE_BUTT
} VIDEO_MODE_E;

【成员】

成员名称描述

描述

VIDEO_MODE_STREAM

按流方式发送码流。JPEG/MJPEG 解码不支持此模式。(目前不支持)

VIDEO_MODE_FRAME

按帧方式发送码流。

VIDEO_MODE_COMPAT

兼容模式发送码流。(目前不支持)

【注意事项】

无。

【相关数据类型及接口】

无。

8.4.4. VDEC_CHN_STATUS_S

【说明】

定义通道状态结构体。

【定义】

typedef struct _VDEC_CHN_STATUS_S {
  PAYLOAD_TYPE_E enType;
  CVI_S32 u32LeftStreamBytes;
  CVI_S32 u32LeftStreamFrames;
  CVI_S32 u32LeftPics;
  CVI_BOOL bStartRecvStream;
  CVI_U32 u32RecvStreamFrames;
  CVI_U32 u32DecodeStreamFrames;
  VDEC_DECODE_ERROR_S stVdecDecErr;
  CVI_U32 u32Width;
  CVI_U32 u32Height;
} VDEC_CHN_STATUS_S;

【成员】

成员名称描述

描述

enType

解码协议。常使用枚举:PT_JPEG/ PT_H264/ PT_MJPEG

u32LeftStreamBytes

码流 buffer 中待解码的 byte 数,包括正在解码的当前帧中 未解码的 byte数。

u32LeftStreamFrames

码流 buffer 中待解码的帧数,不包括正在解码的当前帧。 -1 表示无效。

u32LeftPics

图像 buffer 中剩余的 pic 数目。

bStartRecvStream

解码器是否已经启动接收码流。

u32RecvStreamFrames

码流 buffer 中已接收码流帧数。 -1表示无效。

u32DecodeStreamFrames

码流 buffer 中已解码帧数。

stVdecDecErr

解码错误信息。

u32Width

图像宽度

u32Height

图像高度

【注意事项】

CV181x VDEC模块支持PT_JPEG/PT_MJPEG/PT_H264,CV180X支持PT_JPEG/PT_MJPEG。

【相关数据类型及接口】

无。

8.4.5. VDEC_DECODE_ERROR_S

【说明】

定义解码错误信息结构体。

【定义】

typedef struct _VDEC_DECODE_ERROR_S {
  CVI_S32 s32FormatErr;
  CVI_S32 s32PicSizeErrSet;
  CVI_S32 s32StreamUnsprt;
  CVI_S32 s32PackErr;
  CVI_S32 s32PrtclNumErrSet;
  CVI_S32 s32RefErrSet;
  CVI_S32 s32PicBufSizeErrSet;
  CVI_S32 s32StreamSizeOver;
  CVI_S32 s32VdecStreamNotRelease;
} VDEC_DECODE_ERROR_S;

【成员】

成员名称

描述

s32FormatErr

不支持的格式。

s32PicSizeErrSet

图像的宽(或高)比通道的宽(或高)大。

s32StreamUnsprt

不支持的规格(码流规格与处理器宣称支持的规格不一致)。

s32PackErr

码流有错。

s32PrtclNumErrSet

设置的协议参数个数不够。比如:Slice、Pps、Sps个 数。

s32RefErrSet

设置的参考帧个数不够。

s32PicBufSizeErrSet

图像 buffer 内存大小不够。

s32StreamSizeOver

一帧码流太大了,当整个 SCDbuffer都装不下一帧码流 时,强制清空SCDbuffer。

s32VdecStreamNotRelease

VFMW 内部管理码流错误,出现长时间不释放码流的情况。

【注意事项】

无。

【相关数据类型及接口】

无。

8.4.6. VDEC_CHN_PARAM_S

【说明】

定义解码通道高级参数。

【定义】

typedef struct _VDEC_CHN_PARAM_S {
  PAYLOAD_TYPE_E enType;
  CVI_U32 u32DisplayFrameNum;
  union {
    VDEC_PARAM_VIDEO_S
    stVdecVideoParam;
    VDEC_PARAM_PICTURE_S
    stVdecPictureParam;
  };
} VDEC_CHN_PARAM_S;

【成员】

成员名称

描述

enType

常使用枚举:PT_JPEG/ PT_H264/PT_MJPEG

u32DisplayFrameNum

解码缓存图像的最小帧数。

stVdecVideoParam

视频(H.264/H.265)解码高级参数。

stVdecPictureParam

图片(JPEG/MJPEG)解码高级参数

【注意事项】

CV181x VDEC模块支持PT_JPEG/PT_MJPEG/PT_H264,CV180X支持PT_JPEG/PT_MJPEG。

【相关数据类型及接口】

8.4.7. VDEC_PARAM_VIDEO_S

【说明】

定义视频解码高级参数。

【定义】

typedef struct _VDEC_PARAM_VIDEO_S {
  CVI_S32 s32ErrThreshold;
  VIDEO_DEC_MODE_E enDecMode;
  VIDEO_OUTPUT_ORDER_E enOutputOrder;
  COMPRESS_MODE_E enCompressMode;
  VIDEO_FORMAT_E enVideoFormat;
} VDEC_PARAM_VIDEO_S;

【成员】

成员名称

描述

s32ErrThreshold

错误阈值。 取值范围:[0, 100]。
0代表有错即丢
100 代表无。

enDecMode

解码模式

enOutputOrder

解码图像输出顺序。

enCompressMode

解码图像压缩模式。
COMPRESS_MODE_NONE = 0,
COMPRESS_MODE_TILE,
COMPRESS_MODE_LINE,
COMPRESS_MODE_FRAME,

enVideoFormat

解码图像数据格式。

【注意事项】

无。

【相关数据类型及接口】

此参数设定与VI 模块相关。

8.4.8. VDEC_PARAM_PICTURE_S

【说明】

定义图形解码高级参数。

【定义】

typedef struct _VDEC_PARAM_PICTURE_S {
  PIXEL_FORMAT_E enPixelFormat;
  CVI_U32 u32Alpha;
} VDEC_PARAM_PICTURE_S;

【成员】

成员名称

描述

enPixelFormat

JPEG(MJPEG)解码输出格式。请参阅: cvi_comm_video.h 内typedef enum _PIXEL_FORMAT_E

u32Alpha

ARGB 格式输出时的全局 alpha,仅 ARGB 输出时有效。(目前不支持)

【注意事项】

无。

【相关数据类型及接口】

无。

8.4.9. VIDEO_DEC_MODE_E

【说明】

定义视频解码模式枚举。

【定义】

typedef enum _VIDEO_DEC_MODE_E {
  VIDEO_DEC_MODE_IPB = 0,
  VIDEO_DEC_MODE_IP,
  VIDEO_DEC_MODE_I,
  VIDEO_DEC_MODE_BUTT
} VIDEO_DEC_MODE_E;

【成员】

成员名称

描述

VIDEO_DEC_MODE_IPB

IPB 模式,即 I、P、B 帧都解码。

VIDEO_DEC_MODE_IP

IP 模式,即只解码 I 帧和 P 帧。

VIDEO_DEC_MODE_I

I 模式,即只解码 I 帧。

【注意事项】

无。

【相关数据类型及接口】

无。

8.4.10. VIDEO_OUTPUT_ORDER_E

【说明】

定义视频解码输出顺序枚举。

【定义】

typedef enum _VIDEO_OUTPUT_ORDER_E {
  VIDEO_OUTPUT_ORDER_DISP = 0,
  VIDEO_OUTPUT_ORDER_DEC,
  VIDEO_OUTPUT_ORDER_BUTT
} VIDEO_OUTPUT_ORDER_E;

【成员】

成员名称

描述

VIDEO_OUTPUT_ORDER_DISP

显示序输出。

VIDEO_OUTPUT_ORDER_DEC

解码序输出。

【注意事项】

解码有 B 帧的码流应设置为显示序输出。

【相关数据类型及接口】

无。

8.4.11. COMPRESS_MODE_E

【说明】

定义解码图像压缩模式枚举。

【定义】

typedef enum _COMPRESS_MODE_E {
  COMPRESS_MODE_NONE = 0,
  COMPRESS_MODE_TILE,
  COMPRESS_MODE_LINE,
  COMPRESS_MODE_FRAME,
  COMPRESS_MODE_BUTT
} COMPRESS_MODE_E;

【成员】

成员名称

描述

COMPRESS_MODE_NONE

不压缩。

COMPRESS_MODE_TILE

预留

COMPRESS_MODE_LINE

预留

COMPRESS_MODE_FRAME

预留

【注意事项】

无。

【相关数据类型及接口】

无。

8.4.12. H264_PRTCL_PARAM_S

【说明】

与 H.264 协议相关的内存分配参数。

【定义】

typedef struct _H264_PRTCL_PARAM_S {
  CVI_S32 s32MaxSliceNum;
  CVI_S32 s32MaxSpsNum;
  CVI_S32 s32MaxPpsNum;
} H264_PRTCL_PARAM_S;

【成员】

成员名称

描述

s32MaxSliceNum

该通道解码支持的最大 Slice 个数。

s32MaxSpsNum

该通道解码支持的最大 SPS 个数。

s32MaxSpsNum

该通道解码支持的最大 PPS 个数。

【注意事项】

无。

【相关数据类型及接口】

VDEC_PRTCL_PARAM_S

8.4.13. H265_PRTCL_PARAM_S

【说明】

定义与 H.265 协议相关的内存分配参数。

【定义】

typedef struct _H265_PRTCL_PARAM_S {
  CVI_S32 s32MaxSliceSegmentNum;
  CVI_S32 s32MaxVpsNum;
  CVI_S32 s32MaxSpsNum;
  CVI_S32 s32MaxPpsNum;
} H265_PRTCL_PARAM_S;

【成员】

成员名称

描述

s32MaxSliceSegmentNum

该通道解码支持的最大 SliceSegment 个数。

s32MaxVpsNum

该通道解码支持的最大 VPS 个数。

s32MaxSpsNum

该通道解码支持的最大 SPS 个数。

s32MaxPpsNum

该通道解码支持的最大 PPS 个数。

【注意事项】

CV181x VDEC模块支持PT_JPEG/PT_MJPEG/PT_H264,CV180X支持PT_JPEG/PT_MJPEG。

【相关数据类型及接口】

VDEC_PRTCL_PARAM_S

8.4.14. VDEC_PRTCL_PARAM_S

【说明】

定义与协议相关的内存分配参数。

【定义】

typedef struct _VDEC_PRTCL_PARAM_S {
  PAYLOAD_TYPE_E
  enType;
  union {
    H264_PRTCL_PARAM_S
    stH264PrtclParam;
    H265_PRTCL_PARAM_S
    stH265PrtclParam;
  };
} VDEC_PRTCL_PARAM_S;

【成员】

成员名称

描述

enType

解码通道支持的协议。

stH264PrtclParam

H.264 协议参数。

stH265PrtclParam

H.265 协议参数。

【注意事项】

CV181x VDEC模块支持PT_JPEG/PT_MJPEG/PT_H264,CV180X支持PT_JPEG/PT_MJPEG。

【相关数据类型及接口】

无。

8.4.15. VDEC_STREAM_S

【说明】

定义视频解码的码流结构体。

【定义】

typedef struct _VDEC_STREAM_S {
  CVI_U32 u32Len;
  CVI_U64 u64PTS;
  CVI_BOOL bEndOfFrame;
  CVI_BOOL bEndOfStream;
  CVI_BOOL bDisplay;
  CVI_U8 *pu8Addr;
} VDEC_STREAM_S;

【成员】

成员名称

描述

u32Len

码流包的长度。

u64PTS

码流包的时间戳。

bEndOfFrame

当前帧是否结束。

bEndOfStream

是否发完所有码流。

pu8Addr

码流包的地址。

bDisplay

当前帧是否输出显示。

【注意事项】

无。

【相关数据类型及接口】

无。

8.4.16. VDEC_USERDATA_S

【说明】

定义用户数据结构体。

【定义】

typedef struct _VDEC_USERDATA_S {
  CVI_U64 u64PhyAddr;
  CVI_U32 u32Len;
  CVI_BOOL bValid;
  CVI_U8 *pu8Addr;
} VDEC_USERDATA_S;

【成员】

成员名称

描述

u32PhyAddr

用户数据的物理地址

u32Len

用户数据的长度。

bValid

当前数据的有效标识。

pu8Addr

用户数据的虚拟地址。

【注意事项】

无。

【相关数据类型及接口】

无。

8.4.17. VIDEO_DISPLAY_MODE_E

【说明】

定义显示模式枚举。

【定义】

typedef enum _VIDEO_DISPLAY_MODE_E {
  VIDEO_DISPLAY_MODE_PREVIEW = 0x0,
  VIDEO_DISPLAY_MODE_PLAYBACK = 0x1,
  VIDEO_DISPLAY_MODE_MAX
} VIDEO_DISPLAY_MODE_E;

【成员】

成员名称

描述

VIDEO_DISPLAY_MODE_PREVIEW

预览模式。

VIDEO_DISPLAY_MODE_PLAYBACK

回放模式。

【注意事项】

无。

【相关数据类型及接口】

无。

8.4.18. VDEC_PARAM_MOD_S

【说明】

解码相关模块参数。

【定义】

typedef struct _VDEC_MOD_PARAM_S {
  VB_SOURCE_E enVdecVBSource;
  CVI_U32 u32MiniBufMode;
  CVI_U32 u32ParallelMode;
  VDEC_VIDEO_MOD_PARAM_S stVideoModParam;
  VDEC_PICTURE_MOD_PARAM_S stPictureModParam;
} VDEC_MOD_PARAM_S;

【成员】

成员名称

描述

enVdecVBSource

解码帧存 VB 来源。
取值范围:仅支持
VB_SOURCE_COMMON,
VB_SOURCE_USER

u32MiniBufMode

码流 buffer 配置模式

u32ParallelMode

VDH 解码模式

stVideoModParam

视频解码模块参数。对JPEG/MJPEG 无效。

stPictureModParam

图片解码模块参数。对H264/H265 无效。

【注意事项】

无。

【相关数据类型及接口】

8.4.19. VDEC_VIDEO_MOD_PARAM_S

【说明】

定义视频解码模块参数结构体

【定义】

typedef struct _VDEC_VIDEO_MOD_PARAM_S {
  CVI_U32 u32MaxPicWidth;
  CVI_U32 u32MaxPicHeight;
  CVI_U32 u32MaxSliceNum;
  CVI_U32 u32VdhMsgNum;
  CVI_U32 u32VdhBinSize;
  CVI_U32 u32VdhExtMemLevel;
} VDEC_VIDEO_MOD_PARAM_S;

【成员】

成员名称

描述

u32MaxPicWidth

视频解码支持的最大宽度。
取值范围:参见表7-1,最小值为H.264/H.265解码支持分辨率的最小宽度。
最大值为 H.264/H.265解码支持分辨率的最大宽度。默认为最大值。

u32MaxPicHeight

视频解码支持的最大高度。
取值范围:参见表7-1,最小值为H.264/H.265解码支持分辨率的最小宽度。
最大值为H.264/H.265解码支持分辨率的最大宽度。默认为最大值。

u32MaxSliceNum

H.264/H.265 解码支持的最大 slice 个数。
取值范围:最小值为 1,
最大值为H264/H265解码支持 slice的最大个数。
默认为最大值。

u32VdhMsgNum

VDH 解码消息池个数。

u32VdhBinSize

VDH 解码用来缓存 bin 数据 buffer的大小。

u32VdhExtMemLevel

VDH 解码片外内存分配级别。

【注意事项】

CV181x VDEC模块支持PT_JPEG/PT_MJPEG/PT_H264,CV180X支持PT_JPEG/PT_MJPEG。

【相关数据类型及接口】

8.4.20. VDEC_PICTURE_MOD_PARAM_S

【说明】

定义图片解码模块参数结构体。

【定义】

typedef struct _VDEC_PICTURE_MOD_PARAM_S {
  CVI_U32 u32MaxPicWidth;
  CVI_U32 u32MaxPicHeight;
  CVI_BOOL bSupportProgressive;
  CVI_BOOL bDynamicAllocate;
  VDEC_CAPACITY_STRATEGY_E enCapStrategy;
} VDEC_PICTURE_MOD_PARAM_S;

【成员】

成员名称

描述

u32MaxPicWidth

图片解码支持的
最大宽度,默认值为当前处理器支持最大宽度。
取值范围:最小值为 JPEG/MJPEG 解码支持分辨率的最小宽度。
最大值为JPEG/MJPEG 解码支持分辨率的最大宽度。默认为最大值。

u32MaxPicHeight

图片解码支持的最大高度,默认值为当前处理器支持最大高度。
取值范围:最小值为 JPEG/MJPEG 解码支持分辨率的最小宽度。
最大值为JPEG/MJPEG 解码支持分辨率的最大宽度。默认为最大值。

bSupportProgressive

JPEG/MJPEG 解码是否支持 progressive 格式。

bDynamicAllocate

JPEG/MJPEG 解码支持 progressive 格式时,所需 buf 分配方式,默认值为 0。

enCapStrategy

解码图像的最大宽高能力集策略。

【注意事项】

无。

【相关数据类型及接口】

8.4.21. VDEC_CHN_POOL_S

【说明】

定义解码通道绑定的 VB 池结构体。

【定义】

typedef struct _VDEC_CHN_POOL_S {
  VB_POOL hPicVbPool;
  VB_POOL hTmvVbPool;
} VDEC_CHN_POOL_S;

【成员】

成员名称

描述

hPicVbPool

用于存储 Picture 的 VB 池 Poold

hTmvVbPool

用于存储 Tmv 的 VB 池PoolId。

【注意事项】

无。

【相关数据类型及接口】