跳到主要内容
版本:2.9.0

视频解码 (VDEC)

概述

VDEC 模块,为提供视频硬件解码的接⼝。

使用流程

对一段视频流执行解码生成 yuv 数据的操作流程如下。

  1. VDEC 设备初始化, 调用 ZH_MPI_VDEC_CreateChn 创建一路解码通道。
  2. 调用 ZH_MPI_VDEC_StartRecvStream,表示解码通道可以接受码流输入。
  3. 调用 ZH_MPI_VDEC_SendStream 将数据流发送给解码通道进行解码。
  4. 通过 ZH_MPI_VDEC_GetFd 获取到解码通道 fd,使用 poll 的方式等待有输出的解码帧可读。
  5. 使用 ZH_MPI_VDEC_GetFrame 获取到解码帧。
  6. 使用完整后,调用 ZH_MPI_VDEC_ReleaseFrame 释放掉解码帧。

重要概念

  • 码流发送模式

    解码器码流发送模式包括以下两种。

    • 流式发送(VIDEO_MODE_STREAM)

      ⽤⼾每次可发送任意⻓度码流到解码器,由解码器内部完成码流分帧,解码器需要在收到下⼀帧码流才能识别当前帧码流的结束,因此在该发送模式下,⽆法⽴即输出当前帧解码图像。

    • 按帧发送(VIDEO_MODE_FRAME)

      ⽤⼾每次发送完整⼀帧码流到解码器,解码器认为该帧码流包含⼀帧完整的图像码流,内部不再做分帧,开始解码图像,因此需保证每次调⽤发送接⼝发送的码流必须为⼀帧,否则会出现解码错误。通过该发送⽅式可以达到快速解码的⽬的。

      说明:

      码流发送模式配置⽅法: 码流发送模式可通过接⼝ ZH_MPI_VDEC_CreateChn 配置通道属性 VDEC_CHN_ATTR_S enMode 来配置。


  • 码流包创建⽅式

    通过码流发送接⼝发送码流时,承载码流数据的数据类型统⼀为 MB_BLK 类型的内存块,该内存块的创建⽅式包括:

    • 基于⽤⼾已有的虚拟内存构建

      通过接⼝ ZH_MPI_SYS_CreateMB 创建内存块,需配置 MB_EXT_CONFIG_S 参数。若外部码流在读取或解析后,已经存放于⼀块虚拟内存,可直接基于该虚拟内存地址构建⼀块 MB 内存块,内部仅做数据结构类型封装,不做拷⻉。

      • 若该虚拟内存在外部需要循环使⽤时,则不需要配置释放回调⽅法 pFreeCB,并在发送码流时以通过拷⻉模式发送。
      • 若该虚拟内存是动态分配的,可通过配置释放回调⽅法,交由解码器管理,并在使⽤完成后调⽤回调释放该虚拟内存。
    • 基于⽤⼾已有的 DMA-BUF 构建

      若⽤于已通过其他⽅式创建了 DMA Buffer,并将码流存放在该 Buffer 内,可通过基于虚拟内存相同的构建⽅法,创建 MB 内存块。每个 DMA Buffer 均有对应的访问句柄 FD,在配置 MB_EXT_CONFIG_S 参数时需填写对应的句柄 FD。

    • 从内存池申请

      通过接⼝ ZH_MPI_MB_CreatePool 先创建内存池,然后通过 ZH_MPI_MB_GetMB 获取⼀个内存块,在使⽤完成后调⽤ ZH_MPI_MB_ReleaseMB 释放回内存池。

    • 直接申请

      直接调⽤ SYS 模块提供的接⼝申请 MB 内存块,然后将码流数据拷⻉到申请的内存块。通过接⼝ ZH_MPI_SYS_Malloc 申请虚拟内存,通过接⼝ ZH_MPI_SYS_MmzAlloc 申请物理内存。


  • 解码器码流接收模式

    ⽤⼾通过码流发送接⼝发送码流给解码器时,解码器以直通模式接收码流。通过码流发送接⼝送⼊的码流数据会在解码器内部不做拷⻉,只是对 VDEC_STREAM_S->pMbBlk 增加⼀次引⽤,在处理完成后释放该引⽤。

    • 若该 pMbBlk 是通过 ZH_MPI_SYS_CreateMB 构建的外部内存块,在释放 pMbBlk 时,会同时调⽤⽤⼾构建 pMbBlk 时设置的释放回调 pFreeCB 释放相关内存。
    • 若该 pMbBlk 是通过 ZH_MPI_MB_GetMB 构建的内存块,则会释放回 MB 内存池,循环使⽤。

  • 帧存分配⽅式

    解码帧存是存放解码后的图像数据内存,VDEC 模块⽀持私有池(MB_SOURCE_PRIVATE)解码内存池分配。

    私有池是指由 VDEC 模块内部按通道创建并被该通道独占的 MB 内存池,可从该内存池申请 MB 作为该通道的图像 Buffer。⽤⼾可以在创建通道接⼝ ZH_MPI_VDEC_CreateChn 中设置私有 MB 内存池的个数 u32FrameBufCnt, 不支持 u32FrameBufSize 配置,由内部根据配置的宽⾼计算所需的图像 Buffer ⼤⼩。


  • 显示时间戳处理

    • 按帧模式(VIDEO_MODE_FRAME)发送码流时,解码输出的图像显示时间戳 PTS 为发送码流接口(ZH_MPI_VDEC_SendStream)中用户送入的 PTS,解码器不会更改此值,但可能会更改输出顺序。比如码流存在 B 帧时,输出图像 PTS 与输入的码流 PTS 不一致。如果用户送入的 PTS 值为 -1,则表示此图像不会被视频输出模块(VO)显示。若用户配置的 PTS 值为 0,则表示用户不进行帧率控制,而是由视频输出模块 VO 进行帧率控制;
    • 按流式模式(VIDEO_MODE_STREAM)发送码流时,解码输出图像的 PTS 应统一设为 0,用户不进行帧率控制,而是由视频输出模块 VO 进行帧率控制。
  • 用户图片插入支持

    用户可直接向 VDEC 模块插入图片数据,VDEC 模块不对该图片做任何处理,在绑定模式下,直接送往下一级。在码流源端出现某种异常时,用户可通过该方法插入图片提示。比如当网络异常断开,前端没有再继续送码流,用户可通过设置插入图片,并输出显示到 VO 模块,以提示当前网络异常或没有码流可解码。

    VDEC 模块插入用户图片方式为立即插入图片。即 VDEC 模块会先清空解码器内部的码流和图像,然后插入用户图片。

说明:

用户图片插入方法如下。

  1. 通过接口 ZH_MPI_VDEC_SetUserPic 设置需要插入的用户图片。
  2. 通过接口 ZH_MPI_VDEC_EnableUserPic 使能插入的用户图片。

API 参考

该功能模块为用户提供以下 API:


ZH_MPI_VDEC_CreateChn

描述

创建视频解码通道。

语法

ZH_S32 ZH_MPI_VDEC_CreateChn(VDEC_CHN VdChn, const VDEC_CHN_ATTR_S *pstAttr)

参数

参数名数据类型描述输入/输出
VdChnVDEC_CHN视频解码通道号。 取值范围:[0, VDEC_MAX_CHN_NUM)。输入
pstAttrconst VDEC_CHN_ATTR_S*解码通道属性指针。输⼊

返回值

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

需求

头文件:zh_mpi_vdec.hzh_comm_vdec.h

注意事项

  • 通道号必须合法,不能超出最⼤通道号 VDEC_MAX_CHN_NUM
  • 参数 pstAttr 不能为空,否则将返回空指针错误 ZH_ERR_VDEC_NULL_PTR
  • 在创建视频解码通道之前必须保证通道未创建(或者已经销毁),否则将返回通道已存在错误 ZH_ERR_VDEC_EXIST
  • 通道属性 pstAttr 中的宽⾼必须⼤于 0,否则将返回⾮法参数错误 ZH_ERR_VDEC_ILLEGAL_PARAM
  • 通道属性 pstAttr 中的宽⾼不能超硬件解码能⼒限制,否则解码通道会初始化失败。
  • 解码帧存分配⽅式只支持私有池⽅式,则⽤⼾需要根据解码码流配置解码所需的内存块个数 u32FrameBufCnt, 建议 u32FrameBufCnt 根据码流情况以及系统内存情况配置,根据个数创建相应的 MB 私有池。

相关主题

ZH_MPI_VDEC_DestroyChn


ZH_MPI_VDEC_DestroyChn

描述

销毁视频解码通道。

语法

ZH_S32 ZH_MPI_VDEC_DestroyChn(VDEC_CHN VdChn)

参数

参数名数据类型描述输入/输出
VdChnVDEC_CHN视频解码通道号。 取值范围:[0, VDEC_MAX_CHN_NUM)。输入

返回值

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

需求

头文件: zh_mpi_vdec.hzh_comm_vdec.h

注意事项

通道必须已创建,否则会返回通道不存在的错误 ZH_ERR_VDEC_UNEXIST

相关主题

ZH_MPI_VDEC_CreateChn


ZH_MPI_VDEC_ResetChn

描述

复位视频解码通道,将清除解码通道缓存数据。

语法

ZH_S32 ZH_MPI_VDEC_ResetChn(VDEC_CHN VdChn)

参数

参数名数据类型描述输入/输出
VdChnVDEC_CHN视频解码通道号。 取值范围:[0, VDEC_MAX_CHN_NUM)。输入

返回值

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

需求

头文件:zh_mpi_vdec.hzh_comm_vdec.h

注意事项

通道必须已创建,否则会返回通道不存在的错误 ZH_ERR_VDEC_UNEXIST


ZH_MPI_VDEC_GetChnAttr

描述

获取视频解码通道属性。

语法

ZH_S32 ZH_MPI_VDEC_GetChnAttr(VDEC_CHN VdChn, VDEC_CHN_ATTR_S *pstAttr)

参数

参数名数据类型描述输入/输出
VdChnVDEC_CHN视频解码通道号。 取值范围:[0, VDEC_MAX_CHN_NUM)。输入
pstAttrVDEC_CHN_ATTR_S*解码通道属性指针。输出

返回值

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

需求

头文件:zh_mpi_vdec.hzh_comm_vdec.h

注意事项

  • 通道必须已创建,否则会返回通道不存在的错误 ZH_ERR_VDEC_UNEXIST
  • 传⼊的 pstAttr 不能为空,否则会返回空指针错误 ZH_ERR_VDEC_NULL_PTR

ZH_MPI_VDEC_SetChnAttr

描述

设置视频解码通道属性。

语法

ZH_S32 ZH_MPI_VDEC_SetChnAttr(VDEC_CHN VdChn, const VDEC_CHN_ATTR_S *pstAttr)

参数

参数名数据类型描述输入/输出
VdChnVDEC_CHN视频解码通道号。 取值范围:[0, VDEC_MAX_CHN_NUM)。输入
pstAttrconst VDEC_CHN_ATTR_S*解码通道属性指针。输入

返回值

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

需求

头文件:zh_mpi_vdec.hzh_comm_vdec.h

注意事项

  • 通道必须已创建,否则会返回通道不存在的错误 ZH_ERR_VDEC_UNEXIST
  • 必须在调⽤ ZH_MPI_VDEC_StartRecvStream 之前设置,不⽀持动态切换属性。
  • 切换通道属性之前必须先停⽌接收码流,再次启动接收码流⽅可⽣效。
  • 解码器改变属性之后,再次启动接收码流会⾃动复位解码通道。

相关主题

ZH_MPI_VDEC_StopRecvStream


ZH_MPI_VDEC_StartRecvStream

描述

解码器开始接收⽤⼾发送的码流。

语法

ZH_S32 ZH_MPI_VDEC_StartRecvStream(VDEC_CHN VdChn)

参数

参数名数据类型描述输入/输出
VdChnVDEC_CHN视频解码通道号。 取值范围:[0, VDEC_MAX_CHN_NUM)。输入

返回值

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

需求

头文件:zh_mpi_vdec.hzh_comm_vdec.h

注意事项

  • 通道必须已创建,否则会返回通道不存在的错误 ZH_ERR_VDEC_UNEXIST
  • 启动接收码流之后,才能调⽤ ZH_MPI_VDEC_SendStream 发送码流成功。
  • 重复调⽤启动接收码流接⼝时,返回成功。

相关主题

ZH_MPI_VDEC_StopRecvStream


ZH_MPI_VDEC_StopRecvStream

描述

解码器停⽌接收⽤⼾发送的码流。

语法

ZH_S32 ZH_MPI_VDEC_StopRecvStream(VDEC_CHN VdChn)

参数

参数名数据类型描述输入/输出
VdChnVDEC_CHN视频解码通道号。 取值范围:[0, VDEC_MAX_CHN_NUM)。输入

返回值

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

需求

头文件:zh_mpi_vdec.hzh_comm_vdec.h

注意事项

  • 通道必须已创建,否则会返回通道不存在的错误 ZH_ERR_VDEC_UNEXIST
  • 启动接收码流之后,才能调⽤ ZH_MPI_VDEC_SendStream 发送码流成功。
  • 重复调⽤启动接收码流接⼝时,返回成功。

相关主题

ZH_MPI_VDEC_StopRecvStream


ZH_MPI_VDEC_QueryStatus

描述

查询解码通道状态。

语法

ZH_S32 ZH_MPI_VDEC_QueryStatus(VDEC_CHN VdChn, VDEC_CHN_STATUS_S *pstStatus)

参数

参数名数据类型描述输入/输出
VdChnVDEC_CHN视频解码通道号。 取值范围:[0, VDEC_MAX_CHN_NUM)。输入
pstStatusVDEC_CHN_STATUS_S*视频解码通道状态结构体指针。输出

返回值

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

需求

头文件:zh_mpi_vdec.hzh_comm_vdec.h

注意事项

  • 通道必须已创建,否则会返回通道不存在的错误 ZH_ERR_VDEC_UNEXIST
  • 传⼊的 pstStatus 不能为空,否则返回空指针错误 ZH_ERR_VDEC_NULL_PTR

ZH_MPI_VDEC_SendStream

描述

解码器停⽌接收⽤⼾发送的码流。

语法

ZH_S32 ZH_MPI_VDEC_SendStream(VDEC_CHN VdChn, const VDEC_STREAM_S *pstStream, ZH_S32 s32MilliSec)

参数

参数名数据类型描述输入/输出
VdChnVDEC_CHN视频解码通道号。 取值范围:[0, VDEC_MAX_CHN_NUM)。输入
pstStreamconst VDEC_STREAM_S*解码码流数据指针。输入
s32MilliSecZH_S32送码流⽅式标志。
取值范围:
  • -1:阻塞。
  • 0:⾮阻塞。
  • 正值:超时时间,以 ms 为单位,没有上限值,可动态设置。
输入

返回值

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

需求

头文件:zh_mpi_vdec.hzh_comm_vdec.h

注意事项

  • 通道必须已创建,否则会返回通道不存在的错误 ZH_ERR_VDEC_UNEXIST
  • 发送码流前必须保证已调⽤ ZH_MPI_VDEC_StartRecvStream 接⼝启动接收码流,否则返回该操作不允许错误 ZH_ERR_VDEC_NOT_PERM
  • 发送码流时要按照创建解码通道时设置的发送⽅式进⾏发送。按帧发送时,必须⼀次性发送完整的⼀帧码流,否则解码会出现错误。按流式发送则⽆此限制。
  • 当码流发送结束后,可随最后⼀个码流包带上 bEndOfStream 为 1,或者发送 bEndOfStream 为 1 的空码流包(pMbBlk 置为 MB_INVALID_HANDLE 或 u32Len 置为 0),解码器会把所有码流全部解完并输出全部图像。其它情况 应把 bEndOfStream 置为 0。
  • 不允许发送 bEndOfStream 为 0 的空码流包,否则返回操作不允许错误 ZH_ERR_VDEC_NOT_PERM
  • 发送码流时间戳。
    • 按帧模式发送码流时,解码图像的时间戳 PTS 等于传⼊参数 pstStream 结构体中的时间戳 PTS。
    • 按流发送时,解码图像的时间戳等于 0。
  • 通过设置 s32MilliSec 值可⽀持阻塞⽅式、⾮阻塞⽅式、超时⽅式发送码流。
    • 以阻塞⽅式发送码流,则会永久阻塞直⾄码流发送成功。
    • 以⾮阻塞⽅式发送码流,如果码流缓冲区已满,则返回错误 ZH_ERR_VDEC_BUF_FULL。可通过调整通道属性参数 u32StreamBufCnt 来改变缓冲区存储的码流包个数。
    • 以超时⽅式发送码流,到达设定的超时时间还不能成功发送码流,则返回错误 ZH_ERR_VDEC_BUF_FULL。⽤⼾在收到错误 ZH_ERR_VDEC_BUF_FULL 时,应重送该码流包,否则将出现解码错误。 为避免出现 ZH_ERR_VDEC_BUF_FULL 错误,建议将超时时间设置为通道帧间隔的 4 倍,如通道输出帧率为 25fps,应设置超时时间为 160ms 以上。

相关主题

ZH_MPI_VDEC_StartRecvStream


ZH_MPI_VDEC_GetFrame

描述

获取视频解码通道的解码图像。

语法

ZH_S32 ZH_MPI_VDEC_GetFrame(VDEC_CHN VdChn, VIDEO_FRAME_INFO_S *pstFrameInfo, ZH_S32 s32MilliSec)

参数

参数名数据类型描述输入/输出
VdChnVDEC_CHN视频解码通道号。 取值范围:[0, VDEC_MAX_CHN_NUM)。输入
pstFrameInfoVIDEO_FRAME_INFO_S*获取的解码图像信息。输出
s32MilliSecZH_S32送码流⽅式标志。
取值范围:
  • -1:阻塞。
  • 0:⾮阻塞。
  • 正值:超时时间,以 ms 为单位,没有上限值,可动态设置。
输入

返回值

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

需求

头文件:zh_mpi_vdec.hzh_comm_vdec.h

注意事项

  • 通道必须已创建,否则会返回通道不存在的错误 ZH_ERR_VDEC_UNEXIST
  • 传⼊的pstFrameInfo不能为空,否则会返回空指针错误 ZH_ERR_VDEC_NULL_PTR
  • 通过 ZH_MPI_VDEC_GetFrame 获取解码图像数据后,需通过 ZH_MPI_VDEC_ReleaseFrame 来释放,否则会导致解码过程阻塞等待资源。
  • 通过设置 s32MilliSec 值⽀持阻塞⽅式、⾮阻塞⽅式、超时⽅式获取解码图像。
    • 以阻塞⽅式发送码流,则会永久阻塞直⾄成功获取到解码图像。
    • 以⾮阻塞⽅式获取解码图像,如果缓冲区内⽆图像,则返回错误 ZH_ERR_VDEC_BUF_EMPTY
    • 以超时⽅式获取解码图像,到达设定的超时时间还不能获取到图像则会返回错误 ZH_ERR_VDEC_BUF_EMPTY。超时时间建议设置为10ms的倍数,并⼤于解码输出帧率间隔,如通道输出帧率为 25fps,则超时时间应设置为 50ms。
  • 通过 ZH_MPI_VDEC_GetFd 获取通道句柄 fd,通过 select ⽅式查询缓冲区是否有图像,然后再调⽤此接⼝获取解码图像。

相关主题


ZH_MPI_VDEC_ReleaseFrame

描述

释放视频解码通道的图像。

语法

ZH_S32 ZH_MPI_VDEC_ReleaseFrame(VDEC_CHN VdChn, const VIDEO_FRAME_INFO_S *pstFrameInfo)

参数

参数名数据类型描述输入/输出
VdChnVDEC_CHN视频解码通道号。 取值范围:[0, VDEC_MAX_CHN_NUM)。输入
pstFrameInfoconst VIDEO_FRAME_INFO_S*解码后的图像信息指针,由 ZH_MPI_VDEC_GetFrame 接⼝获取。输出

返回值

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

需求

头文件:zh_mpi_vdec.hzh_comm_vdec.h

注意事项

  • 通道必须已创建,否则会返回通道不存在的错误 ZH_ERR_VDEC_UNEXIST
  • 必须与 ZH_MPI_VDEC_GetFrame 配对使⽤,获取的数据应当在使⽤完之后⽴即释放,否则会导致解码过程阻塞等待资源。
  • 允许通道销毁后,再释放获取的通道图像。
  • 允许⽤⼾⾮顺序释放,即不按照获取图像的顺序释放图像。
  • 释放的数据必须是通过接⼝ ZH_MPI_VDEC_GetFrame 从该通道获取的数据,不得对数据信息结构体做任何修改。

相关主题

ZH_MPI_VDEC_GetFrame


ZH_MPI_VDEC_GetFd

描述

获取视频解码通道的设备⽂件句柄,⽤于查询解码通道数据有产⽣解码图像。

语法

ZH_S32 ZH_MPI_VDEC_GetFd(VDEC_CHN VdChn)

参数

参数名数据类型描述输入/输出
VdChnVDEC_CHN视频解码通道号。 取值范围:[0, VDEC_MAX_CHN_NUM)。输入

返回值

返回值描述
正数值有效返回值。
非正数值无效返回值。

需求

头文件:zh_mpi_vdec.hzh_comm_vdec.h

注意事项

  • 通道必须已创建,否则会返回通道不存在的错误 ZH_ERR_VDEC_UNEXIST
  • 获取到通道 fd 后,可通过 select 接⼝查询是否新的解码图像输出,然后再调⽤ ZH_MPI_VDEC_GetFrame 获取解码图像,避免盲查询获取图像。

相关主题

ZH_MPI_VDEC_GetFrame


ZH_MPI_VDEC_CloseFd

描述

关闭视频解码的设备⽂件句柄。

语法

ZH_S32 ZH_MPI_VDEC_CloseFd(VDEC_CHN VdChn)

参数

参数名数据类型描述输入/输出
VdChnVDEC_CHN视频解码通道号。 取值范围:[0, VDEC_MAX_CHN_NUM)。输入

返回值

返回值描述
0关闭成功。
-1关闭失败。

需求

头文件:zh_mpi_vdec.hzh_comm_vdec.h

注意事项

通道必须已创建,否则会返回通道不存在的错误 ZH_ERR_VDEC_UNEXIST

相关主题

ZH_MPI_VDEC_GetFd


ZH_MPI_VDEC_SetChnParam

描述

设置解码通道参数。

语法

ZH_S32 ZH_MPI_VDEC_SetChnParam(VDEC_CHN VdChn, const VDEC_CHN_PARAM_S *pstParam)

参数

参数名数据类型描述输入/输出
VdChnVDEC_CHN视频解码通道号。 取值范围:[0, VDEC_MAX_CHN_NUM)。输入
pstParamconst VDEC_CHN_PARAM_S*通道参数。输入

返回值

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

注意事项

  • 通道必须已创建,否则会返回通道不存在的错误 ZH_ERR_VDEC_UNEXIST
  • 传⼊的 pstParam 不能为空,否则会返回空指针错误 ZH_ERR_VDEC_NULL_PTR
  • 通道参数设置不⽀持动态⽴即⽣效,必须先停⽌接⼝码流,然后再重新启动接收码流才可⽣效,此过程解码通道会被复位。

相关主题

ZH_MPI_VDEC_GetChnParam


ZH_MPI_VDEC_GetChnParam

描述

获取解码通道参数。

语法

ZH_S32 ZH_MPI_VDEC_GetChnParam(VDEC_CHN VdChn, VDEC_CHN_PARAM_S *pstParam)

参数

参数名数据类型描述输入/输出
VdChnVDEC_CHN视频解码通道号。 取值范围:[0, VDEC_MAX_CHN_NUM)。输入
pstParamVDEC_CHN_PARAM_S*通道参数。输出

返回值

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

注意事项

  • 通道必须已创建,否则会返回通道不存在的错误 ZH_ERR_VDEC_UNEXIST
  • 传⼊的 pstParam 不能为空,否则会返回空指针错误 ZH_ERR_VDEC_NULL_PTR

相关主题

ZH_MPI_VDEC_SetChnParam


ZH_MPI_VDEC_SetUserPic

描述

设置用户图片属性。

语法

ZH_S32 ZH_MPI_VDEC_SetUserPic(VDEC_CHN VdChn, const VIDEO_FRAME_INFO_S *pstUsrPic)

参数

参数名数据类型描述输入/输出
VdChnVDEC_CHN视频解码通道号。 取值范围:[0, VDEC_MAX_CHN_NUM)。输入
pstUsrPicconst VIDEO_FRAME_INFO_S*用户图片属性结构指针。输入

返回值

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

注意事项

  • 通道必须已创建,否则会返回通道不存在的错误 ZH_ERR_VDEC_UNEXIST
  • 传入的 pstUsrPic 不能为空,否则会返回空指针错误 ZH_ERR_VDEC_NULL_PTR
  • 用户可直接通过 SYS 接口 ZH_MPI_SYS_MmzAlloc 申请一块 MMZ 内存,也可以通过 ZH_MPI_MB_CreatePool 接口创建一个私有 MB 池,从这个私有 MB 池里获取一块 MB 内存块来存放用户图片。
  • 用户图片像素格式 enPixelFormat 应为后级模块能支持的格式,如 NV12,用户图片的 PTS 设置为 0。
  • 在用户图片已使能的情况下,不能再设置用户图片,必须先调用接口 ZH_MPI_VDEC_DisableUserPic 禁止使能用户图片,否则会返回操作不允许错误 ZH_ERR_VDEC_NOT_PERM
  • 用户图片属性设置成功之后不会生效,需要调用 ZH_MPI_VDEC_EnableUserPic 生效。
  • 解码通道不会对用户图片做任何处理,因此用户图片的宽高不受解码通道宽高的限制,但受后级模块的限制。
  • 用户图片属性设置成功之后 VDEC 将一直占着这块用户图片 MB,直到销毁解码通道时才释放。
  • 用户图片属性支持重复设置,重复设置时,VDEC 会先释放之前的用户图片 MB 块,然后占住当前的用户图片 MB 块。
  • 同一个用户图片的属性可用于不同的通道,如在网络异常情况下提示异常,只要一个用户图片属性,对所有通道设置。

相关主题


ZH_MPI_VDEC_EnableUserPic

描述

使能插入用户图片。

语法

ZH_S32 ZH_MPI_VDEC_EnableUserPic(VDEC_CHN VdChn, ZH_BOOL bInstant)

参数

参数名数据类型描述输入/输出
VdChnVDEC_CHN视频解码通道号。 取值范围:[0, VDEC_MAX_CHN_NUM)。输入
bInstantZH_BOOL不支持。输入

返回值

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

注意事项

  • 通道必须已创建,否则会返回通道不存在的错误 ZH_ERR_VDEC_UNEXIST
  • 使能插入用户图片前必须先设置用户图片属性,否则返回操作不允许错误 ZH_ERR_VDEC_NOT_PERM
  • 使能插入用户图片前必须先停止接收码流,否则返回操作不允许错误 ZH_ERR_VDEC_NOT_PERM
  • 不支持 bInstant 参数配置, 只支持立刻插入用户图片,此时 VDEC 会先复位解码通道,清除通道缓存数据,然后插入用户图片。因此当禁止使能用户图片后送入新码流时,可能无法立即开始正确解码,必须等到下一个 I 帧到来才能开始正确解码。
  • 使能插入用户图片之后,必须调用接口 ZH_MPI_VDEC_DisableUserPic 禁止使能插入用户图片,才能重新设置新的用户图片属性。
  • 重复使能插入用户图片将返回成功,但不会重复插入用户图片。

相关主题


ZH_MPI_VDEC_DisableUserPic

描述

禁止使能插入用户图片。

语法

ZH_S32 ZH_MPI_VDEC_DisableUserPic(VDEC_CHN VdChn)

参数

参数名数据类型描述输入/输出
VdChnVDEC_CHN视频解码通道号。 取值范围:[0, VDEC_MAX_CHN_NUM)。输入

返回值

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

注意事项

通道必须已创建,否则会返回通道不存在的错误 ZH_ERR_VDEC_UNEXIST

相关主题

ZH_MPI_VDEC_EnableUserPic


ZH_MPI_VDEC_SetRotation

描述

设置解码图像旋转角度。

语法

ZH_S32 ZH_MPI_VDEC_SetRotation(VDEC_CHN VdChn, ROTATION_E enRotation);

参数

参数名数据类型描述输入/输出
VdChnVDEC_CHN视频解码通道号。 取值范围:[0, VDEC_MAX_CHN_NUM)。输入
enRotationROTATION_E旋转角度枚举。输入

返回值

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

注意事项

  • 通道必须已创建,否则会返回通道不存在的错误 ZH_ERR_VDEC_UNEXIST
  • 旋转前的图像必须是非压缩模式,旋转后的图像为非压缩格式 VIDEO_FORMAT_LINEAR 。
  • 旋转解码图像需要占用 VB 块,这些 VB 块是从公共 VB 池里获取的,每个通道能获取的用于旋转输出 buffer 的最大 VB 个数为 DisplayFrameNum+1。
  • 旋转后的 frame u32VirWidth 至少 64 对齐。需要根据相应的 stride 读取图像数据。

ZH_MPI_VDEC_GetRotation

描述

获取解码图像的旋转角度。

语法

ZH_S32 ZH_MPI_VDEC_GetRotation(VDEC_CHN VdChn, ROTATION_E *penRotation);

参数

参数名数据类型描述输入/输出
VdChnVDEC_CHN视频解码通道号。 取值范围:[0, VDEC_MAX_CHN_NUM)。输入
penRotationROTATION_E*旋转角度枚举指针。输出

返回值

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

注意事项

  • 通道必须已创建,否则会返回通道不存在的错误 ZH_ERR_VDEC_UNEXIST
  • 旋转前的图像必须是非压缩模式,旋转后的图像为非压缩格式 VIDEO_FORMAT_LINEAR 。
  • 旋转解码图像需要占用 VB 块,这些 VB 块是从公共 VB 池里获取的,每个通道能获取的用于旋转输出 buffer 的最大 VB 个数为 DisplayFrameNum+1。
  • 旋转后的 frame u32VirWidth 至少 64 对齐。需要根据相应的 stride 读取图像数据。

ZH_MPI_VDEC_SetDisplayMode

描述

设置显示模式

语法

ZH_S32 ZH_MPI_VDEC_SetDisplayMode(VDEC_CHN VdChn, VIDEO_DISPLAY_MODE_E enDisplayMode);

参数

参数名数据类型描述输入/输出
VdChnVDEC_CHN视频解码通道号。 取值范围:[0, VDEC_MAX_CHN_NUM)。输入
enDisplayModeVIDEO_DISPLAY_MODE_E显示模式枚举。输入

返回值

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

注意事项

  • 通道必须已创建,否则会返回通道不存在的错误 ZH_ERR_VDEC_UNEXIST
  • 显示模式。 详情请见 VIDEO_DISPLAY_MODE_E

ZH_MPI_VDEC_GetDisplayMode

描述

获取显示模式

语法

ZH_S32 ZH_MPI_VDEC_GetDisplayMode(VDEC_CHN VdChn, VIDEO_DISPLAY_MODE_E *penDisplayMode);

参数

参数名数据类型描述输入/输出
VdChnVDEC_CHN视频解码通道号。 取值范围:[0, VDEC_MAX_CHN_NUM)。输入
penDisplayModeVIDEO_DISPLAY_MODE_E*显示模式枚举指针。输出

返回值

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

注意事项

  • 通道必须已创建,否则会返回通道不存在的错误 ZH_ERR_VDEC_UNEXIST
  • 传入的 penDisplayMode 不能为空,否则会返回空指针错误 ZH_ERR_VDEC_NULL_PTR。

数据类型

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


VDEC_MAX_CHN_NUM

说明

定义解码通道最⼤个数。

定义

#define VDEC_MAX_CHN_NUM 64

VDEC_CHN_ATTR_S

说明

定义解码通道属性。

定义

typedef struct zhVDEC_CHN_ATTR_S {
PAYLOAD_TYPE_E enType;
VIDEO_MODE_E enMode;
ZH_U32 u32PicWidth;
ZH_U32 u32PicHeight;
ZH_U32 u32PicVirWidth;
ZH_U32 u32PicVirHeight;
ZH_U32 u32StreamBufSize;
ZH_U32 u32FrameBufSize;
ZH_U32 u32FrameBufCnt;
ZH_U32 u32StreamBufCnt;
union {
VDEC_ATTR_VIDEO_S stVdecVideoAttr;
};
} VDEC_CHN_ATTR_S

成员

成员名称数据类型描述属性
enTypePAYLOAD_TYPE_E解码协议类型枚举值。静态属性
enModeVIDEO_MODE_E码流发送方式。静态属性
u32PicWidthZH_U32视频的宽度(以像素为单位)。静态属性
u32PicHeightZH_U32视频的高度(以像素为单位)。静态属性
u32PicVirWidthZH_U32不支持。静态属性
u32PicVirHeightZH_U32不支持。静态属性
u32StreamBufSizeZH_U32不支持。静态属性
u32FrameBufSizeZH_U32只支持0 (由解码器内部计算)。静态属性
u32FrameBufCntZH_U32解码图像帧存个数。
取值范围:大于 0,默认值为 6,但是用户必须保证所配置的帧存个数满足解码码流帧存个数要求,否则无法正常解码。
  • H.264/H.265 解码所需帧存个数为参考帧 +2。
  • JPEG/MJPEG解码所需帧存个数为显示帧 +1。
静态属性
u32StreamBufCntZH_U32码流包存储个数。
取值范围:大于等于 1,默认值为 4。
静态属性

注意事项

  • 帧存个数分配⽅法:
    • 如果 u32FrameBufCnt > 0,帧存个数按照 u32FrameBufCnt 来分配。
    • 如果 u32FrameBufCnt == 0 && u32RefFrameNum > 0,帧存个数按照 u32RefFrameNum+2 来分配。
    • 如果 u32FrameBufCnt == 0 && u32RefFrameNum == 0,帧存个数按默认值分配。
  • 帧存 buffer ⼤⼩,按照宽度和⾼度⾃动计算分配,⽤⼾必须保证配置的正确的宽⾼。
  • 如果 u32StreamBufCnt == 0,缓冲码流个数按默认值分配。
  • 建议 u32StreamBufCnt 配置最少为1。

VIDEO_MODE_E

说明

定义码流发送⽅式。

定义

typedef enum zhVIDEO_MODE_E {
VIDEO_MODE_STREAM = 0, /send by stream/
VIDEO_MODE_FRAME, /send by frame/
VIDEO_MODE_COMPAT,
VIDEO_MODE_BUTT
} VIDEO_MODE_E;

成员

成员名称描述属性
VIDEO_MODE_STREAM按流⽅式发送码流。JPEG/MJPEG 解码不⽀持此模式。静态属性
VIDEO_MODE_FRAME按帧⽅式发送码流。以帧为单位。静态属性
VIDEO_MODE_COMPAT不⽀持。静态属性

注意事项

当⼀帧码流的最后⼀包没有把 bEndOfFrame 为 ZH_TRUE 时,还可以再发送⼀个 bEndOfFrame 为 ZH_TRUE 的空包给解码器内部标识当前帧码流已发送完毕。


VDEC_CHN_STATUS_S

说明

定义通道状态。

定义

typedef struct zhVDEC_CHN_STATUS_S {
ZH_CODEC_ID_E enType; /R; video type to be decoded/
ZH_U32 u32LeftStreamBytes; /R; left stream bytes waiting for decode/
ZH_U32 u32LeftStreamFrames; /R; left frames waiting for decode,only valid for VIDEO_MODE_FRAME/
ZH_U32 u32LeftPics; /R; pics waiting for output/
ZH_BOOL bStartRecvStream; /R; had started recv stream?/
ZH_U32 u32RecvStreamFrames; /R; how many frames of stream has been received. valid when send by frame./
ZH_U32 u32DecodeStreamFrames; /R; how many frames of stream has been decoded. valid when send by frame./
stVdecDecErr; /R; information about decode error/
ZH_U32 u32Width;
ZH_U32 u32Height;
} VDEC_CHN_STATUS_S;

成员

成员名称数据类型描述
enTypeZH_CODEC_ID_E解码协议类型枚举值。
u32LeftStreamBytesZH_U32码流 buffer 中待解码的 byte 数,包括正在解码的当前帧中未解码的 byte数。
u32LeftStreamFramesZH_U32码流 buffer 中待解码的帧数,不包括正在解码的当前帧。
-1 表⽰⽆效。
流模式发送时⽆效。码流有错丢帧时可能计数不准。
u32LeftPicsZH_U32图像 buffer 中剩余的 pic 数⽬。
bStartRecvStreamZH_BOOL解码器是否已经启动接收码流。
u32RecvStreamFramesZH_U32码流 buffer 中已接收码流帧数。
-1 表⽰⽆效。
流模式发送时⽆效。
u32DecodeStreamFramesZH_U32码流 buffer 中已解码帧数。
stVdecDecErrVDEC_DECODE_ERROR_S解码错误信息。
u32WidthZH_U32图像宽度。
u32HeightZH_U32图像⾼度。

VDEC_STREAM_S

说明

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

定义

typedef struct zhVDEC_STREAM_S {
MB_BLK pMbBlk;
ZH_U32 u32Len;
ZH_U64 u64PTS;
ZH_BOOL bEndOfStream;
ZH_BOOL bEndOfFrame;
ZH_BOOL bBypassMbBlk;
} VDEC_STREAM_S;

成员

成员名称数据类型描述
pMbBlkMB_BLK码流包的地址。
u32LenZH_U32码流包的⻓度。以 byte 为单位。
u64PTSZH_U64码流包的时间戳。以 μs 为单位。
bEndOfStreamZH_BOOL是否发完所有码流。
bEndOfFrameZH_BOOL不⽀持。
bBypassMbBlkZH_BOOL不支持。

注意事项

  • 按帧模式发送时,解码图像的时间戳等于码流包中的时间戳。
  • 按流发送时,解码图像的时间戳等于 0。
  • 当发完所有码流后,把 bEndOfStream 置为 1,表⽰码流⽂件结束,这时解码器会解完发送下来的所有码流并输出所有图像。 如果发完所有码流后把 bEndOfStream置为 0,解码器内部可能残余⼤于等于⼀帧的图像未解码输出,因为解码器必须等到下⼀帧码流到来才能知道当前帧已经结束,送⼊解码。
  • ⽤⼾分配的 buffer 需要统⼀封装成 MB_BLK 类型,可通过 ZH_MPI_SYS_CreateMB 来封装。
  • 只支持直通模式, 即 bBypassMbBlk = ZH_TRUE。

示例代码

直通模式

static ZH_S32 user_data_callback(void *opaque) {
if (ZH_NULL != opaque) {
free(opaque);
}
opaque = ZH_NULL;
return 0;
}

int main(int argc, const char **argv) {
VDEC_STREAM_S stStream;
MB_EXT_CONFIG_S pstMbExtConfig;
MB_BLK buffer = ZH_NULL;
ZH_S32 usersize = 1024;
memset(&stMbExtConfig, 0, sizeof(MB_EXT_CONFIG_S));
memset(&stStream, 0, sizeof(VDEC_STREAM_S));
ZH_S8 *userdata = (ZH_S8 *)malloc(usersize);
pstMbExtConfig.pFreeCB = user_data_callback;
pstMbExtConfig.pOpaque = userdata;
pstMbExtConfig.pu8VirAddr = userdata;
pstMbExtConfig.u64Size = usersize;
ZH_MPI_SYS_CreateMB(&buffer, &pstMbExtConfig)
pstStream.u64PTS = userpts;
pstStream.pMbBlk = buffer;
pstStream.u32Len = usersize;
pstStream.bEndOfStream = ZH_FALSE;
pstStream.bBypassMbBlk = ZH_TRUE;
__RETRY:
s32Ret = ZH_MPI_VDEC_SendStream(chn, &stStream, MAX_TIME_OUT_MS);
if (s32Ret < 0) {
usleep(1000llu);
goto __RETRY;
} else {
ZH_MPI_MB_ReleaseMB(stStream.pMbBlk);
}
......
}

FRAME_FLAG_E

说明

定义帧的类型。

定义

typedef enum zhFRAME_FLAG_E {
FRAME_FLAG_SNAP_FLASH = 0x1 << 0,
FRAME_FLAG_SNAP_CUR = 0x1 << 1,
FRAME_FLAG_SNAP_REF = 0x1 << 2,
FRAME_FLAG_SNAP_END = 0x1 << 31,
FRAME_FLAG_BUTT
} FRAME_FLAG_E;

成员

成员名称描述
FRAME_FLAG_SNAP_FLASH不⽀持。
FRAME_FLAG_SNAP_CUR不⽀持。
FRAME_FLAG_SNAP_REF不⽀持。
FRAME_FLAG_SNAP_END解码最后⼀帧数据。

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; /* FRAME_FLAG_E, can be OR operation. */
} 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图像虚宽。
u32VirHeightZH_U32图像虚高。
enFieldVIDEO_FIELD_E帧场模式。
enVideoFormatPIXEL_FORMAT_E不支持。
enPixelFormatVIDEO_FORMAT_E目标图像像素格式。
enCompressModeCOMPRESS_MODE_E目标图像压缩模式。
enDynamicRangeDYNAMIC_RANGE_E不支持。
enColorGamutCOLOR_GAMUT_E不支持。
pVirAddrZH_VOID*图像Y和UV的地址。
取值范围:
  • Y地址:pVirAddr ZH_COLOR_YUV_Y_PLANE。
  • uv地址:pVirAddr ZH_COLOR_YUV_UV_PLANE。
u32TimeRefZH_U32不支持。
u64PTSZH_U64图像时间戳。
u64PrivateDataZH_U64不支持。
u32FrameFlagZH_U32当前帧的标记,使用 FRAME_FLAG_E 里面的值标记,可以按位或操作。

示例代码

⽤⼾获取 YUV 图像数据,可以通过 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);

VDEC_CHN_PARAM_S

说明

定义解码通道⾼级参数。

定义

typedef struct zhVDEC_CHN_PARAM_S {
PAYLOAD_TYPE_E enType;
ZH_U32 u32DisplayFrameNum;
union {
VDEC_PARAM_VIDEO_S stVdecVideoParam;
VDEC_PARAM_PICTURE_S stVdecPictureParam;
};
} VDEC_CHN_PARAM_S;

成员

成员名称数据类型描述属性
enTypePAYLOAD_TYPE_E解码协议。静态属性
u32DisplayFrameNumZH_U32不支持。静态属性
stVdecVideoParamVDEC_PARAM_VIDEO_S视频 (H.264/H.265) 解码高级参数。静态属性
stVdecPictureParamVDEC_PARAM_PICTURE_S图片 (JPEG/MJPEG) 解码高级参数。静态属性

VDEC_PARAM_VIDEO_S

说明

定义视频解码⾼级参数。

定义

typedef struct zhVDEC_PARAM_VIDEO_S {
ZH_S32 s32ErrThreshold;
VIDEO_DEC_MODE_E enDecMode;
VIDEO_OUTPUT_ORDER_E enOutputOrder;
COMPRESS_MODE_E enCompressMode;
VIDEO_FORMAT_E enVideoFormat;
} VDEC_PARAM_VIDEO_S

成员

成员名称数据类型描述属性
s32ErrThresholdZH_S32不支持。静态属性
enDecModeVIDEO_DEC_MODE_E不支持。静态属性
enOutputOrderVIDEO_OUTPUT_ORDER_E解码图像输出顺序。 Default: VIDEO_OUTPUT_ORDER_DISP静态属性
enCompressModeCOMPRESS_MODE_E解码图像压缩模式。仅支持 COMPRESS_MODE_NONE静态属性
enVideoFormatVIDEO_FORMAT_E不支持。静态属性

注意事项

如果需要获取可以正常显⽰的解码数据,需要设置图像输出为⾮压缩:COMPRESS_MODE_NONE


VDEC_PARAM_PICTURE_S

说明

定义图形解码高级参数。

定义

typedef struct zhVDEC_PARAM_PICTURE_S {
PIXEL_FORMAT_E enPixelFormat;
ZH_U32 u32Alpha;
} VDEC_PARAM_PICTURE_S;

成员

成员名称数据类型描述属性
enPixelFormatPIXEL_FORMAT_EJPEG(MJPEG)解码输出格式。
取值范围:仅支持以下几种输出格式
ZH_FMT_RGB888、
ZH_FMT_YUV420SP
ZH_FMT_YUV420SP_VU、
ZH_FMT_YUV422_YUYV、
ZH_FMT_YUV422_UYVY、
Default:ZH_FMT_YUV420SP
静态属性
u32AlphaZH_U32不支持。静态属性

VIDEO_DEC_MODE_E

说明

定义视频解码模式枚举。

定义

typedef enum zhVIDEO_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_IPBIPB 模式,即 I、P、B 帧都解码。静态属性
VIDEO_DEC_MODE_IP不支持。静态属性
VIDEO_DEC_MODE_I不支持。静态属性

VIDEO_OUTPUT_ORDER_E

说明

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

定义

typedef enum zhVIDEO_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不支持。静态属性

COMPRESS_MODE_E

说明

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

定义

typedef enum zhCOMPRESS_MODE_E {
COMPRESS_MODE_NONE = 0, /no compress/
COMPRESS_AFBC_16x16,
COMPRESS_MODE_BUTT
} COMPRESS_MODE_E;

成员

成员名称描述属性
COMPRESS_MODE_NONE不压缩。(解码⽀持不压缩)。静态属性
COMPRESS_AFBC_16x16不支持。静态属性
COMPRESS_MODE_BUTT不支持。静态属性

VIDEO_DISPLAY_MODE_E

说明

定义显示模式枚举。

定义

typedef enum zhVIDEO_DISPLAY_MODE_E {
VIDEO_DISPLAY_MODE_PREVIEW = 0x0,
VIDEO_DISPLAY_MODE_PLAYBACK = 0x1,
VIDEO_DISPLAY_MODE_BUTT
} VIDEO_DISPLAY_MODE_E;

成员

成员名称描述属性
VIDEO_DISPLAY_MODE_PREVIEW预览模式。实时性强,数据流转可能出现丢帧,可实现实时预览。
VDEC 绑定的直接后级模块以非阻塞方式接收解码图像。比如直接后级为 VPSS,当解码帧存个数多于 VPSS 缓存队列个数(VPSS Buffer 队列满)时,VPSS 将丢弃 VDEC 发送过来的图像,以达到不反压 VDEC 解码,实现实时预览。
静态属性
VIDEO_DISPLAY_MODE_PLAYBACK回放模式。实时性弱,数据流转不会丢帧,延迟长短与数据通路各模块缓存队列相关。
VDEC 绑定的直接后级模块以阻塞方式接收解码图像,VDEC 绑定的直接后级模块能够反压 VDEC 解码。比如直接后级为 VPSS,当 VPSS 的图像缓存队列满时,不接收 VDEC 发送过来的图像,VDEC 发送图像失败后,启动重新发送机制,直到图像发送成功为止。
静态属性

VDEC错误码

视频解码 API VDEC 错误码如下所⽰:

错误代码宏定义描述
0xA0058002ZH_ERR_VDEC_INVALID_CHNIDVDEC 通道号无效。
0xA0058003ZH_ERR_VDEC_ILLEGAL_PARAMVDEC 参数设置无效。
0xA0058004ZH_ERR_VDEC_EXISTVDEC 通道已创建。
0xA0058005ZH_ERR_VDEC_UNEXISTVDEC 通道未创建。
0xA0058006ZH_ERR_VDEC_NULL_PTR输入参数空指针错误。
0xA0058008ZH_ERR_VDEC_NOT_SUPPORT操作不支持。
0xA0058009ZH_ERR_VDEC_NOT_PERM操作不允许。
0xA005800CZH_ERR_VDEC_NOMEM分配内存失败。
0xA005800DZH_ERR_VDEC_NOBUF分配 BUF 池失败。
0xA005800EZH_ERR_VDEC_BUF_EMPTY图像队列为空。
0xA005800FZH_ERR_VDEC_BUF_FULL图像队列满状态。
0xA0058010ZH_ERR_VDEC_NOTREADYVDEC 系统未初始化。
0xA0058012ZH_ERR_VDEC_BUSYVDEC 系统忙。
0xA0058013ZH_ERR_VDEC_BADADDR错误的地址。