×

签到

分享到微信

打开微信,使用扫一扫进入页面后,点击右上角菜单,

点击“发送给朋友”或“分享到朋友圈”完成分享

【CN-SDK02】寒武纪 CNCodec-V3 使用介绍 小飞人2023-07-24 16:12:36 回复 查看 社区交流 干货资源
【CN-SDK02】寒武纪 CNCodec-V3 使用介绍
分享到:

知乎链接:https://zhuanlan.zhihu.com/p/613776688


若是初学者,建议先初级课程。本门学习主要内容预览:


术语解释:

本文简称标准名词解释
CNCodecCambricon Codec Library寒武纪编解码库
CNDECCambricon Decoder Engine寒武纪视频解码器
CNENCCambricon Encoder Engine寒武纪视频编码器
CNJPGCambricon JPEG Engine寒武纪图片编解码器

1、CNCodec-V3 概述

1 CNCodec-V3简介

CNCodec-V3(Cambricon Codec Library,寒武纪编解码库):基于第三代寒武纪硬件视频编解码加速单元,并针对 MLU 加速卡特点进行优化的硬件编解码加速库。在继承第二代CNcodec设计基础上,CNCodec-V3 针对新的硬件特性,将视频编解码与图像编解码接口融合,为用户提供简洁、高效、通用、灵活并且可扩展的接口。

CNCodec-V3在寒武纪软件栈中的位置如图所示。是CNToolkit中专门用于视频编解码的工具包,不向前兼容MLU1XX系列和MLU2XX系列板卡的使用。



2 CNCodec-V3应用场景

CNCodec 的使用场景如图所示,带有 CNCodec 板卡的主机接收 IP Camera,也就是网络相机传输过来的码流数据,CNCodec 接收到码流数据后,将数据输入给 CNDEC 或 CNJPG 进行硬件解码,解码得到的图片数据经过数据预处理后送给 MLU 进行推理,推理完成后返回推理结果至主机。



2、编解码格式

1 编解码理论概述

1)首先要回答的问题是,什么是视频编解码?

视频编解码技术是指对视频进行压缩、解压缩的技术。

视频编码就是按照一定的规则将视频信息转化为编码信息,进行传输和存储的过程,而视频解码则是将编码后的信息按照对应规则还原为视频信息的过程。

2)为什么视频要编解码

  • 未经压缩的数字视频的数据量巨大

  • 存储困难

  • 追求的画质越来越好

  • 追求的实时性越来越高

3)可行性分析--视频压缩的理论依据

视频压缩在理论上是可行的,因为视频中包含了很多的冗余信息。

  • 时间冗余:视频是由一帧帧图像组成的,而由于视频信息的连续性,相邻两帧图像之间有很强的相似性,也就是说,在时间上是冗余的;

  • 空间冗余:在空间维度,图形相邻像素之间也有较强的相关性。此外,图像中还存在大量的细节信息,这些细节对于理解图像可能并非必要。

  • 视觉冗余:由于人的视觉系统对亮度变化是敏感的,而对色度和饱和度的变化则没那么敏感,这就造成了视觉冗余。

  • 编码冗余:图像中的不同像素值出现的频率不同,基于此统计信息对像素值编码能有效降低数据量。

我们可以采取一定的技术手段来去除这些冗余信息。比如,可以采用离散余弦变换等方法进行帧内压缩,减少一些不必要的细节;采用关键帧和预测编码的帧间压缩方法,减少存储的图像帧数。

因此视频信息格式可分为编码前解码后的非压缩格式,如RGB和YUV等,以及编码后的压缩格式,如H.264和H.265.

为了让不同应用之间能够兼容,MPEG-2按不同的压缩比分成五个档次profile,按视频清晰度分为四个级别level,H.264标准沿用了这一概念。

其中profile规定了码流中使用了哪些编码工具和算法,level规定了解码器的处理负担和存储容量参数,主要包括采样率、分辨率、码率的最大值等。

H.265标准在此基础上引入了层tier的概念。tier规定了每个level的码率的高低。

如图是H265第一版三个主profile的基本特征。



4)码率控制

控制参数解释
QPQuantizer Parameter,量化参数,反映了空间细节压缩情况。
CBRConstant BitRate,固定比特率
VBRVariable BitRate,可变比特率
CVBRConstrained Variable BitRate,是 VBR 的一种改进,兼顾 CBR和 VBR的优点
CRFConstant RateFactor,允许在码率统计时间内编码码率波动,保证编码图像质量平稳

5)帧间压缩

视频压缩中,每帧代表一幅静止的图像。而在实际传输视频流中,我们会想尽办法通过各种算法来减少数据的容量,最为常见的为IPB参考结构



  • I 帧:Introcoded s,关键帧,一帧画面的完整保留

  • P 帧:Predicted pictures,预测帧,记录本帧跟之前一个关键帧(或 P 帧)的差别

  • B 帧:Bi-directional predictive pictures,双向预测帧,记录本帧与前后帧的差别

我们把相邻两个I帧之间的部分叫做GoP,表示一组连续的画面。

2 非压缩格式

RGB、BGR、YUV 都是非压缩数据,在 CNCodec中作为解码的输出数据或编码的输入数据。



1)RGB、BGR

RGB 和 BGR 的每个像素分别用红(R)、绿(G)、蓝(B)三基色分量的多少来表示。 RGB和BGR的区别是三个颜色通道排列的顺序不同。RGB格式包括:RGB555、RGB565、RGB888、RGB32等,其中比较常用的是RGB888和BGR888,每个像素占24个bit,红绿蓝各8bit。

2)YUV 的存储格式 – planar, packed

YUV 将图像数据分为 3 个分量,Y 表示亮度 ( Luma ),U 和 V 表示色彩和饱和度 ( Chroma ),用于描述颜色。

那么YUV图像在内存中是如何存储的呢?



根据YUV三个分量的聚集方式分为planar和packed两类

  • planar:以YUV420为例,连续存储某分量的存储方式就是planar,如左图所示的I420,按照YUV的顺序连续存储单一分量。 Stride是行跨度。硬件在读取内存中的数据时,通常是一次性读取固定长度的数据。为快速访问图像内存,需要对图像的每行数据的首地址做对齐处理。

  • packed:表示YUV打包存储的结构形式

  • semi-planar:一种应用广泛的存储方式,这种方式有两个平面,一个Y平面,和一个UV平面。如右图所示是NV12的内存排布,按照VU的顺序排布的是NV12。

3 编解码规格

1) CNENC 编码特性

FeatureDe ion
支持格式H.264 / H.265
Profile / LevelH.265 Main Profile, up to level 5.2
H.264 line, Main and High profile, up to level 5.2

支持特性H.264H.265I / P / B slice encoding
ROI encoding

2-pass encoding

Deblocking / SAO

CABAC / CAVLC

Writeable SEI

码控RC levelPicture level
CTU level (H.265) / MB level (H.264)

RC modeCBR
VBR / CVBR

FixedQP

CRF

分辨率Up to 8192 x8192 (H.265 最小136 x 136 / H.264 最小144 x 144)

如表所示是 CNENC 的编码特性。

  • CNENC支持H.264和H.265,其中H.265编码支持Main Profile,并且最高支持level 5.2. H.264编码支持 line,Main profile 以及High profile,同样最高支持level 5.2。

  • CNENC支持IPB编码,ROI编码和2-pass编码,支持去区块效应和样例自适应补偿。支持基于上下文自适应的算术熵编码(CABAC)和可变长编码(CAVLC),可以自定义SEI(附加增强信息)。支持图像级别和块级别的码率控制和CBR、VBR、CVBR、FixedQP、CRF等控制模式。支持的最大分辨率为8192x8192,最小分辨率144x144. 编码性能可达到24路 1080P@30fps

2) CNDEC 解码特性

FeatureDe ion
支持格式H.264 / H.265 (VP9 / VP8 / AVS2 / AVS+ 可支持)
Profile / LevelH.265Main 10 and Main Profiles, up to level 5.2
Main Still Profile

H.264Up to constraint High 10 Profile, level 5.2
line without FMO / ASO support

后处理Crop / Resize (不支持原图与处理后的图同时输出)
分辨率144 x 144 ~ 8192 x4320

如表是CNDEC的解码特性,解码除了支持H.264和H.265,还可支持VP9/VP8/AVS2等其他多种格式。

  • 解码H.265支持Main Still Profile,Main Profile和Main 10 Profile,最高支持level 5.2.

  • 解码H.264支持 line profile(FMO灵活宏块重排/ASO任意条带顺序除外),Main Profile,High Profile, High10 Profile,最高支持level 5.2.

  • 支持的后处理包括crop和resize。

  • 支持的分辨率最低144x144,最高8192x4320.

  • 解码H.264的性能可达到128路 1080P@30fps,H.265 132路 1080P@30fps。

3)CNJPG 编解码特性

FeatureDecoder JPEGEncoder JPEG
Profile line line
分辨率16 x 1616 x 16
16384 x 1638416384 x 16384
ROIYN
后处理Down-samplerN / A

CNCodec除了可以对视频编解码,还可以对图片编解码。图片编解码器CNJPG(JPU)支持 line的profile,分辨率最小16x16,最大16384x16384。解码支持ROI,和降采样后处理。

解码性能可达到1080P@4000fps,编码性能则可达到 1080P@3000fps。

3、CNCodec-V3 编程指南

1 CNCodec-V3编程模型

1)编解码步骤

一个支持 CNCodec 的板卡支持创建多个编解码实例(实际上下文会消耗内存资源,受限于板卡内存与主机配置,具体支持路数要以实测为准)。
基本步骤如下:

  1. 应用程序使用CNCodec的编解码功能时需要先创建编解码器实例。一个实例对应一个编解码通道,每个通道可以对1路视频或图片编码或解码;

  2. 通过创建的实例发送数据给编解码器。编解码器开始工作

  3. 输出编码或解码后的数据。异步模式数据通过回调函数向应用程序输出,同步模式数据通过同步编解码接口输出

  4. 编解码结束后销毁所创建的实例

2)解码流程



解码的流程如图所示。应用程序压缩数据通过cncodecDecSendStream或cncodecDecJpegSyncDecode接口输入,Codec SDK内部会将码流数据通过CNRT接口cnrtMemcpy拷入设备的输入缓存,并控制CNDEC或CNJPG读取输入缓存数据进行解码。CNDEC或CNJPG完成当前数据的解码后将输出数据写入输出缓存,应用通过回调函数或同步接口获取解码后的数据。

编解码过程中,根据数据的发送和编解码是否相互独立可以分为同步编解码和异步编解码。所谓同步编解码是指,数据发送和编解码相互依赖,共用一个线程,一帧数据发送完成后才能开始编解码,本帧数据编解码完成后才能开始下一帧数据的发送。而异步编解码中,数据发送和编解码相互独立。

① 解码接口调用流程 | 视频异步解码

SyntaxHighlighter.all();

版权所有 © 2024 寒武纪 Cambricon.com 备案/许可证号:京ICP备17003415号-1