跳到主要内容

VideoDecodeConfig

头文件列表说明

表1 头文件列表

头文件名称所在目录用途
AscendStream.hMxBase/Asynchron定义AscendStream类,用于异步流程控制。
Constants.hMxBase/Common声明常量EPSILON,EPSILON_DBL。
HiddenAttr.hMxBase/Common声明__attribute__相关的宏,用于标记接口属性,当前主要用于标记废弃接口、使得在编译阶段出现接口已废弃的告警提示。
Version.hMxBase/Common声明返回mxVision版本信息的接口,mxVision版本信息主要包括当前mxVision版本号、主版本号、从版本号、小版本号。
ConfigUtil.hMxBase/ConfigUtil定义ConfigData类和ConfigUtil类用于后处理模块和日志模块。具体来说,ConfigUtil类用于将配置文件读取到ConfigData对象当中,ConfigData对象定义了如添加JSON文件键值对、加载Label文件到std::vector对象、根据索引返回标签名等接口,供后处理模块和日志模块调用。
DataType.hMxBase/CV/Core定义目标检测相关数据结构,具体包含:DetectBox结构体、RoiBox结构体、IOUMethod枚举类、TrackFlag枚举类。
Huangarian.hMxBase/CV/Core/MultipleObjectTracking定义匈牙利算法相关数据结构和接口,用于二分图匹配。
KalmanTracker.hMxBase/CV/Core/MultipleObjectTracking定义卡尔曼滤波相关数据结构和接口,用于跟踪检测目标。
Nms.hMxBase/CV/ObjectDetection/Nms定义非极大值抑制算法相关接口,用于去除冗余目标框。
SimilarityTransform.hMxBase/CV/WarpAffine定义SimilarityTransform类,用于计算相似变换。
WrapAffine.hMxBase/CV/WarpAffine定义WarpAffine类,用于计算仿射变换。
DeviceManager.hMxBase/DeviceManager定义DeviceManager类,其中包括设备初始化、返回设备数量、返回当前设备、设置运行设备等相关接口。
DvppWrapper.hMxBase/DvppWrapper定义了DvppWrapper类,该类会根据芯片的不同调用不同的接口进行实例化,DvppWrapper类封装了图像变换相关的操作。
DvppWrapperDataType.hMxBase/DvppWrapper主要定义了图像处理相关的数据结构以及用于图片参数校验的常量。
DvppWrapperBase.hMxBase/DvppWrapper主要定义了DvppWrapperBase类,该类作为中间层,被其他类继承,同时作为DvppWrapper类的私有成员被使用。
Color.hMxBase/E2eInfer/Color定义了Color结构体。
Dim.hMxBase/E2eInfer/Dim定义了Dim结构体。
GlobalInit.hMxBase/E2eInfer/GlobalInit声明了初始化与去初始化接口。
Image.hMxBase/E2eInfer/Image定义了Image类,该类作为图片的数据结构,包含获取图片属性、将图片转为Tensor对象等接口。
ImageProcessor.hMxBase/E2eInfer/ImageProcessor定义了ImageProcessor类,提供编码、解码、切片、缩放、抠图、贴图等常用接口,ImageProcessor类底层调用了DvppWrapper类中的接口。
Model.hMxBase/E2eInfer/Model定义了Model类,提供高性能推理,返回输入输出Tensor格式等接口。
Point.hMxBase/E2eInfer/Point定义了Point结构体用于表示点。
Rect.hMxBase/E2eInfer/Rect定义了Rect结构体用于表示矩形。
Size.hMxBase/E2eInfer/Size定义了Size结构体用于表示尺寸。
CallBack.hMxBase/E2eInfer/Tensor定义了Tensor类操作回调所需的结构体以及相关接口。
Tensor.hMxBase/E2eInfer/Tensor定义了Tensor类,提供返回Tensor数据类型、返回字节大小、返回Tensor当前设备Id等接口。
TensorDvpp.hMxBase/E2eInfer/Tensor定义了Tensor图像处理方法,提供抠图、缩放、色域转换等图像处理功能。
TensorOperations.hMxBase/E2eInfer/Tensor定义了Tensor运算方法。
TensorFeatures.hMxBase/E2eInfer/Tensor定义了Tensor特征提取类算法。
TensorFusion.hMxBase/E2eInfer/TensorOperation定义了Tensor融合方法,提供背景替换、动效透明度贴图和字幕透明度贴图等功能。
TensorWarping.hMxBase/E2eInfer/TensorOperation定义了Tensor图像变形处理方法,提供旋转、仿射变换等功能。
PerElementOperations.hMxBase/E2eInfer/TensorOperation/MatricesOperation定义了Tensor按元素处理方法,提供计算Tensor加、减、乘、除等功能。
MatrixReductions.hMxBase/E2eInfer/TensorOperation/MatricesOperation定义了Tensor归约方法,提供Tensor归约、求和等功能。
CoreOperationsOnTensors.hMxBase/E2eInfer/TensorOperation/MatricesOperation定义了Tensor核心处理方法,提供Tensor裁剪、扩展、水平堆叠和垂直堆叠等功能。
VideoDecoder.hMxBase/E2eInfer/VideoDecoder定义了VideoDecoder类,提供回调式、非阻塞视频解码接口,VideoDecoder类底层调用了DvppWrapper类中的接口。
VideoEncoder.hMxBase/E2eInfer/VideoEncoder定义了VideoEncoder类,提供回调式、非阻塞视频编码接口,VideoEncoder类底层调用了DvppWrapper类中的接口。
DataType.hMxBase/E2eInfer定义图像处理相关枚举类。
ErrorCode.hMxBase/ErrorCode定义错误码相关的字符串数组。
ErrorCodes.hMxBase/ErrorCode定义错误码相关的枚举类。
ErrorCodeThirdParty.hMxBase/ErrorCode定义第三方错误码相关的枚举类。
Log.hMxBase/Log定义Log类,主要提供了Debug、Info、Warn、Error等接口用于记录不同级别的日志信息。
FastMath.hMxBase/Maths定义了FastMath类,主要提供了Sigmoid、Softmax函数计算的接口。
MathFunction.hMxBase/Maths定义了LineRegressionFit类,主要提供了线性回归函数计算的接口。
NpySort.hMxBase/Maths定义了NpySort,主要提供快排算法接口。
MemoryHelper.hMxBase/MemoryHelper定义了MemoryData类和MemoryHelper类,主要提供内存申请、释放、拷贝等接口。
ModelDataType.hMxBase/ModelInfer定义了模型相关的数据结构。
ModelInferenceProcessor.hMxBase/ModelInfer定义了ModelInferenceProcessor类,主要提供模型推理相关接口,其功能与MxBase/E2eInfer/Model/Model.h相似。
CrnnPostProcessor.hMxBase/ModelPostProcessors/AttributePostProcessor定义了CrnnPostProcessor类,该类继承ModelPostProcessorBase类,该类已标识为弃用。
Resnet50PostProcessor.hMxBase/ModelPostProcessors/ClassPostProcessor定义了Resnet50PostProcessor类,该类继承ModelPostProcessorBase类,该类已标识为弃用。
ModelPostProcessorBase.hMxBase/ModelPostProcessors/ModelPostProcessorBase定义了ModelPostProcessorBase类,该类为MxBase/ModelPostProcessors目录下的基类。
ObjectPostDataType.hMxBase/ModelPostProcessors/ModelPostProcessorBase/定义了目标后处理相关的数据结构。
ObjectPostProcessorBase.hMxBase/ModelPostProcessors/ModelPostProcessorBase定义了ObjectPostProcessorBase类,该类继承ModelPostProcessorBase类,该类已标识为弃用。
FasterRcnnPostProcessor.hMxBase/ModelPostProcessors/ObjectPostProcessors定义了FasterRcnnPostProcessor类,该类继承ModelPostProcessorBase类,该类已标识为弃用。
SsdmobilenetfpnPostProcessor.hMxBase/ModelPostProcessors/ObjectPostProcessors定义了SsdmobilenetfpnPostProcessor类,该类继承ModelPostProcessorBase类,该类已标识为弃用。
SsdvggPostProcessor.hMxBase/ModelPostProcessors/ObjectPostProcessors定义了SsdvggPostProcessor类,该类继承ModelPostProcessorBase类,该类已标识为弃用。
Yolov3PostProcessor.hMxBase/ModelPostProcessors/ObjectPostProcessors定义了Yolov3PostProcessor类,该类继承ModelPostProcessorBase类,该类已标识为弃用。
CtpnPostProcessor.hMxBase/ModelPostProcessors/OcrPostProcessors定义了CtpnPostProcessor类,该类ModelPostProcessorBase类,该类已标识为弃用。
ClassPostProcessBase.hMxBase/PostProcessBases定义了ClassPostProcessBase类,该类继承PostProcessBase类,主要提供Process接口。
ImagePostProcessBase.hMxBase/PostProcessBases定义了ImagePostProcessBase类,该类继承PostProcessBase类,主要提供设置裁剪感兴趣区域的接口。
KeypointPostProcessBase.hMxBase/PostProcessBases定义了KeypointPostProcessBase类,该类继承PostProcessBase类,主要提供关键点检测任务相关的后处理接口。
ObjectPostProcessBase.hMxBase/PostProcessBases定义了ObjectPostProcessBase类,该类继承PostProcessBase类,主要提供目标检测任务相关的后处理接口。
PostProcessBase.hMxBase/PostProcessBases定义PostProcessBase类,该类为其余后处理类的基类。
PostProcessDataType.hMxBase/PostProcessBases定义了目标检测、图片缩放、图片裁剪等任务相关的数据结构。
SemanticSegPostProcessBase.hMxBase/PostProcessBases定义了SemanticSegPostProcessBase类,该类继承PostProcessBase类,主要提供语义分割任务相关的后处理接口。
TextGenerationPostProcessBase.hMxBase/PostProcessBases定义了TextGenerationPostProcessBase类,该类继承PostProcessBase类,主要提供文本生成任务相关的后处理接口。
TextObjectPostProcessBase.hMxBase/PostProcessBases定义了TextObjectPostProcessBase类,该类继承PostProcessBase类,主要提供文本对象任务相关的后处理接口。
OperatorDesc.hMxBase/SingleOp定义了OperatorDesc类,主要用于加载单算子的描述。
OpRunner.hMxBase/SingleOp定义了OpRunner类,主要用于执行单算子。
TensorBase.hMxBase/Tensor/TensorBase定义TensorBase类。
TensorDataType.hMxBase/Tensor/TensorBase定义TensorDataType枚举类,该类对象为TensorBase类的成员变量。
TensorBuffer.hMxBase/Tensor/TensorBuffer定义TensorBuffer类。
TensorContext.hMxBase/Tensor/TensorContext定义TensorContext类。
TensorShape.hMxBase/Tensor/TensorShape定义TensorShape类。

父主题: API参考(C++)

ModelLoadOptV2

功能

支持多种推理模型输入方式,用户可通过该数据结构,选择其中一种方式输入推理模型。

备注

须知

请根据实际情况选择对应配置,如配置与实际输入存在差异,会在Model处抛出异常,如未对该异常进行catch操作,则程序会发生core dumped

结构定义

struct ModelLoadOptV2 {
enum ModelLoadType {
LOAD_MODEL_FROM_FILE = 1,
LOAD_MODEL_FROM_FILE_WITH_MEM,
LOAD_MODEL_FROM_MEM,
LOAD_MODEL_FROM_MEM_WITH_MEM
};
enum ModelType {
MODEL_TYPE_OM = 0,
MODEL_TYPE_MINDIR
};
ModelType modelType = MODEL_TYPE_OM;
ModelLoadType loadType = LOAD_MODEL_FROM_FILE;
std::string modelPath = "";
void* modelPtr = nullptr;
void* modelWorkPtr = nullptr;
void* modelWeightPtr = nullptr;
size_t modelSize = 0;
size_t workSize = 0;
size_t weightSize = 0;
};

参数说明

参数名输入/输出说明
modelType输入推理模型类型,支持情况参见如下。(默认为“MODEL_TYPE_OM”。)
- MODEL_TYPE_OM
- MODEL_TYPE_MINDIR(对于MindIR模型,仅支持静态Shape和动态Batch。)
loadType输入推理模型输入类型,可通过以下参数选定输入方式。(默认为“LOAD_MODEL_FROM_FILE”。)
- LOAD_MODEL_FROM_FILE:从文件加载离线模型数据,由系统内部管理内存。
- LOAD_MODEL_FROM_FILE_WITH_MEM:从文件加载离线模型数据,由用户自行管理模型运行的内存(包括工作内存和权值内存,工作内存用于模型执行过程中的临时数据,权值内存用于存放权值数据)。
- LOAD_MODEL_FROM_MEM:从内存加载离线模型数据,由系统内部管理内存。
- LOAD_MODEL_FROM_MEM_WITH_MEM:从内存加载离线模型数据,由用户自行管理模型运行的内存(包括工作内存和权值内存)。
- 当“modelType”为“MODEL_TYPE_MINDIR”时,仅支持“LOAD_MODEL_FROM_FILE”和“LOAD_MODEL_FROM_MEM”两种输入类型。
modelPath输入推理模型文件路径,仅在以下模式生效。(默认为"",最大只支持至4GB大小的模型且建议模型属主为当前用户,模型文件的权限小于或等于“640”。)
- LOAD_MODEL_FROM_FILE
- LOAD_MODEL_FROM_FILE_WITH_MEM
modelPtr输入推理模型所在内存地址指针,仅在以下模式生效。(默认为nullptr,用户需根据实际情况输入内存地址。)
- LOAD_MODEL_FROM_MEM
- LOAD_MODEL_FROM_MEM_WITH_MEM
modelWorkPtr输入推理模型所在工作内存地址指针,仅在以下模式生效。(默认为nullptr,表示由系统管理内存。)
- LOAD_MODEL_FROM_FILE_WITH_MEM
- LOAD_MODEL_FROM_MEM_WITH_MEM
modelWeightPtr输入推理模型权值内存地址指针,仅在以下模式生效。(默认为nullptr,表示由系统管理内存。)
- LOAD_MODEL_FROM_FILE_WITH_MEM
- LOAD_MODEL_FROM_MEM_WITH_MEM
modelSize输入推理模型数据长度,单位Byte,仅在以下模式生效。(默认为0,最大只支持至4GB大小的模型)
- LOAD_MODEL_FROM_MEM
- LOAD_MODEL_FROM_MEM_WITH_MEM
workSize输入推理模型所在工作内存大小,单位Byte。(默认为0,当“modelWorkPtr”为nullptr时无效。)
weightSize输入推理模型权值内存大小,单位Byte。(默认为0,当“modelWeightPtr”为nullptr时无效。)

父主题: 通用数据结构

VideoDecodeConfig

功能

用于保存视频解码的参数。

结构定义

struct VideoDecodeConfig {
uint32_t width = 1920;
uint32_t height = 1080;
StreamFormat inputVideoFormat = StreamFormat::H264_MAIN_LEVEL;
ImageFormat outputImageFormat = ImageFormat::YUV_SP_420;
VideoDecodeCallBack callbackFunc = nullptr;
uint32_t skipInterval = 0;
uint32_t cscMatrix = 0;
};

参数说明

参数名说明
width视频解码缓冲区的宽,取值范围:[128, 4096],默认值:1920,必须为偶数并自动对齐到16的倍数。 请用户根据实际的视频帧数据进行适当设置,需大于或等于实际的视频帧数据宽,否则会无解码输出,设置过大将会产生多余的内存资源开销。
height视频解码缓冲区的高,取值范围:[128, 4096],默认值:1080,必须为偶数。 请用户根据实际的视频帧数据进行设置,需大于或等于实际的视频帧数据高,否则会无解码输出,设置过大将会产生多余的内存资源开销。
inputVideoFormat输入的视频格式。
- H.264格式视频支持h264_baseline_level、h264_main_level、h264_high_level三种格式。
- H.265格式视频只支持h265_main_level格式,默认值:StreamFormat::H264_MAIN_LEVEL。
outputImageFormat解码后输出的图像格式,默认值:ImageFormat::YUV_SP_420。
- Atlas 200I/500 A2 推理产品支持 YUV_SP_420、YVU_SP_420 格式。
callbackFunc解码完成后的回调函数,不能为空指针。
skipInterval视频解码的跳帧参数,取值范围:[0, 250],默认值:0。
cscMatrix色域转换选项,默认值为“0”,(即HI_CSC_MATRIX_BT601_WIDE)。
- HI_CSC_MATRIX_BT601_WIDE = 0,基于BT601 wide标准的色域转换矩阵,各参数值参考如下。
text<br> # YUV转RGB:<br> # | R | | 1.000 0.000 1.402 | | Y - 0 |<br> # | G | = | 1.000 -0.344 -0.714 | * | U - 128 | <br> # | B | | 1.000 1.772 0.000 | | V - 128 |<br> # RGB转YUV:<br> # | Y | |-0.5 | | 0.299 0.587 0.114 | | R | <br> # | U | = |127.5 | + | -0.168 -0.331 0.500 | * | G | <br> # | V | |127.5 | | 0.500 -0.419 -0.081 | | B | <br>
- HI_CSC_MATRIX_BT601_NARROW =1,基于BT601 narrow标准的色域转换矩阵,各参数值参考如下。
text<br> # YUV转RGB:<br> # | R | | 1.16438 0.00000 1.59602 | | Y - 16 |<br> # | G | = | 1.16438 -0.39176 -0.81297 | * | U - 128 | <br> # | B | | 1.16438 2.01723 0.00000 | | V - 128 |<br> # RGB转YUV:<br> # | Y | |16 | | 0.25679 0.51564 0.10014 | | R | <br> # | U | = |128| + | -0.14491 -0.29099 0.43922 | * | G | <br> # | V | |128| | 0.42941 -0.36779 -0.07143 | | B | <br>
- HI_CSC_MATRIX_BT709_WIDE =2,基于BT709 wide标准的色域转换矩阵,各参数值参考如下。
text<br> # YUV转RGB:<br> # | R | | 1.00000 0.00000 1.57480 | | Y - 0 |<br> # | G | = | 1.00000 -0.18732 -0.46812 | * | U - 128 | <br> # | B | | 1.00000 1.85560 0.00000 | | V - 128 |<br> # RGB转YUV:<br> # | Y | |0 | | 0.21260 0.71520 0.07220 | | R | <br> # | U | = |128| + | -0.11457 -0.38543 0.50000 | * | G | <br> # | V | |128| | 0.50000 -0.45415 -0.04585 | | B | <br>
- HI_CSC_MATRIX_BT709_NARROW =3,基于BT709 narrow标准的色域转换矩阵,各参数值参考如下。
text<br> # YUV转RGB:<br> # | R | | 1.16438 0.00000 1.79274 | | Y - 16 |<br> # | G | = | 1.16438 -0.21325 -0.53291 | * | U - 128 | <br> # | B | | 1.16438 2.11240 0.00000 | | V - 128 |<br> # RGB转YUV:<br> # | Y | |16 | | 0.18259 0.62825 0.06342 | | R | <br> # | U | = |128| + | -0.09840 -0.33857 0.43922 | * | G | <br> # | V | |128| | 0.42941 -0.39894 -0.04027 | | B | <br>
- HI_CSC_MATRIX_BT2020_WIDE =4,基于BT2020 wide标准的色域转换矩阵,各参数值参考如下。
text<br> # YUV转RGB:<br> # | R | | 1.00000 0.00000 1.47460 | | Y - 0 |<br> # | G | = | 1.00000 -0.16455 -0.57135 | * | U - 128 | <br> # | B | | 1.00000 1.88140 0.00000 | | V - 128 |<br> # RGB转YUV:<br> # | Y | |0 | | 0.26270 0.67800 0.05930 | | R | <br> # | U | = |128| + | -0.13963 -0.36037 0.50000 | * | G | <br> # | V | |128| | 0.50000 -0.45979 -0.04021 | | B | <br>
- HI_CSC_MATRIX_BT2020_NARROW =5,基于BT2020 narrow标准的色域转换矩阵,各参数值参考如下。
text<br> # YUV转RGB:<br> # | R | | 1.16438 0.00000 1.67868 | | Y - 16 |<br> # | G | = | 1.16438 -0.18733 -0.65042 | * | U - 128 | <br> # | B | | 1.16438 2.14177 0.00000 | | V - 128 |<br> # RGB转YUV:<br> # | Y | |16 | | 0.22564 0.59558 0.05209 | | R | <br> # | U | = |128| + | -0.11992 -0.31656 0.43922 | * | G | <br> # | V | |128| | 0.42941 -0.40389 -0.03533 | | B | <br>

父主题: 通用数据结构

VideoDecodeCallBack

功能

用于定义视频解码输入的回调函数,请勿在回调函数内实现过于复杂的操作,而是单纯用用户自定义“userData”来接收视频解码回调结果,否则回调线程会发生卡住的现象,导致视频解码速度变慢。

结构定义

typedef APP_ERROR (*VideoDecodeCallBack)(Image& decodedImage, uint32_t channelId,
uint32_t frameId, void* userData);

参数说明

参数名说明
decodedImage解码后输出的图像类。
channelId视频流索引,由VideoDecoder类的构造函数来设置。
frameId视频帧索引,由VideoDecoder类的Decode函数来设置。
userData用户自定义回调输入的数据类型(主要用来获取解码数据)。

父主题: 通用数据结构

VideoEncodeConfig

功能

用于保存视频编码的相关参数。

结构定义

struct VideoEncodeConfig &#123;
uint32_t maxPicWidth = 4096;
uint32_t maxPicHeight = 4096;
uint32_t width = 1920;
uint32_t height = 1080;
// stream format renference acldvppStreamFormat
StreamFormat outputVideoFormat = StreamFormat::H264_MAIN_LEVEL;
// output format renference acldvppPixelFormat
ImageFormat inputImageFormat = ImageFormat::YUV_SP_420;
VideoEncodeCallBack callbackFunc = nullptr;
uint32_t keyFrameInterval = 30;
uint32_t srcRate = 30;
uint32_t rcMode = 0;
uint32_t maxBitRate = 300;
uint32_t ipProp = 70;
&#125;;

参数说明

参数名说明
width编码后视频帧数据的宽,默认值:1920,必须与待编码图片的宽(originalSize)一致。
- Atlas 200I/500 A2 推理产品,取值范围:[128, 1920],输入的视频宽需要对齐16。
height编码后视频帧数据的高,默认值:1080,必须与待编码图片的高(originalSize)一致。
- Atlas 200I/500 A2 推理产品,取值范围:[128, 1920],输入的视频高需要对齐2。
outputVideoFormat编码后输出的视频格式, 默认值:StreamFormat::H264_MAIN_LEVEL。
inputImageFormat输入的图像格式,默认值:ImageFormat::YUV_SP_420。
- Atlas 200I/500 A2 推理产品支持 YUV_SP_420、YVU_SP_420 格式。
callbackFunc编码完成后的回调函数,不能为空指针。
keyFrameInterval视频I帧间隔大小,默认为30,取值范围[1, 2000]。
srcRate输入码流帧率,单位fps,默认为30。
- Atlas 200I/500 A2 推理产品,取值范围:[1, 120]。
rcMode指定码率控制模式,默认值为 0,取值如下:
- 0:默认模式。Atlas 200I/500 A2 推理产品默认为CBR模式。。
- 1:变码率VBR模式。
- 2:定码率CBR模式。
maxBitRate输出码率,单位kbps,默认值为300。
- Atlas 200I/500 A2 推理产品,取值范围:[10, 30000]。
ipProp一个GOP内单个I帧bit数和单个P帧bit数的比例,默认值为70,取值范围[1, 100]。

推荐配置

以下为视频采集场景下推荐的参数配置,可以保证较好的视频编码质量,其他场景下请根据实际应用对应调整。

画质/分辨率srcRatekeyFrameIntervalmaxBitRate
4K 3840 * 2160/4096 * 216025或3050或60- H.264: 8000 ~ 12000
- H.265: 8000 ~ 12000
2K 2560 * 144025或3050或60- H.264: 6000 ~ 10000
- H.265: 6000 ~ 10000
1080P(蓝光) 1920 * 108025或3050或60- H.264: 20006000
- H.265: 1000
4000
720P(高清) 1280 * 72025或3050或60- H.264: 10003000
- H.265: 800
2000
480P/D1_N(标清) 854 * 480/720 * 48025或3050或60- H.264: 6001400
- H.265: 300
700
576P/D1 (标清) 720 * 57625或3050或60- H.264: 6001400
- H.265: 300
700
270P(流畅) 480 * 27025或3050或60-
CIF P/N 352 * 288/320 * 24025或3050或60- H.264: 250
- H.265: 250

父主题: 通用数据结构

在线提单