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。