8.2. 设计概述

8.2.1. 码流发送方式

VDEC 提供的码流发送方式:

  • 按帧发送(VIDEO_MODE_FRAME):每次发送完整一帧码流到解码器,每调用一次发送接口,解码器就认为该帧码流已经结束,开始解码图像, 需保证每次调用发送接口发送的码流必须为一帧。

8.2.2. 图像输出方式

按照H.264视讯标准,输入的Stream经译码之前,输出的影像顺序未必等于输入的顺序,因此会有在播放时会分为Decoding order和Display order两种。

  • Decoding Order:输出影像的顺序等于输入Stream的顺序

    • 可以快速地取得译码后的Frame,但使用者需要自行保证播放顺序,例如:一般Stream中如果有B frame, 会需要做display order的转换, 使用者需要作相关的处理。

  • Display Order:输出影像的顺序等于最后播放的顺序

    • 使用者取得的Frame已经是Display order, 可以直接照该顺序播放。

目前的Output Order为Display Order。

8.2.3. 时间戳(PTS)处理

PTS指的是当前Frame在播放时的时间点,当前Frame的PTS可以由 CVI_VENC_GetFrame 中获得,而该Frame的PTS会等于 CVI_VENC_SendStream 时,所附加的PTS。

8.2.4. 解码帧存分配方式

  • Common Mode:自動建立ION内存進行幀存,ION大小根據解碼后Width和Height自動分配,不需要使用者管理

  • User Mode:使用者需要使用CVI_VB_CreatePool, 建立VB Pool, 在创建通道后, 透过 CVI_VDEC_AttachVbPool 绑定该VB Pool至通道

  • Private Mode:在创建通道时, 会自动建立Private VB Pool, 使用者不需自行建立VB Pool, 可以透过CVI_VDEC_CreateChn, 设定Private VB Pool的u32FrameBufSize和u32FrameBufCnt

可使用 CVI_VDEC_SetModParam 设定 enVdecVBSource 来选择解码帧存分配方式, 目前只支持COMMON 和 USER Mode。

使用User Mode时,在通道还没有detach VB Pool前, 不能直接destroy VB Pool,需要确定Decoder正确结束才可以destroy。