VideoEncodeConfig
ModelLoadOptV2
功能
支持多种推理模型输入方式,用户可通过该数据结构,选择其中一种方式输入推理模型。
note
须知
请根据实际情况选择对应配置,如配置与实际输入存在差异,会在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 {
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;
};
参数说明
| 参数名 | 说明 |
|---|---|
| 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]。 |
推荐配置
以下为视频采集场景下推荐的参数配置,可以保证较好的视频编码质量,其他场景下请根据实际应用对应调整。
| 画质/分辨率 | srcRate | keyFrameInterval | maxBitRate |
|---|---|---|---|
| 4K 3840 * 2160/4096 * 2160 | 25或30 | 50或60 | - H.264: 8000 ~ 12000 - H.265: 8000 ~ 12000 |
| 2K 2560 * 1440 | 25或30 | 50或60 | - H.264: 6000 ~ 10000 - H.265: 6000 ~ 10000 |
| 1080P(蓝光) 1920 * 1080 | 25或30 | 50或60 | - H.264: 2000 - H.265: 1000 |
| 720P(高清) 1280 * 720 | 25或30 | 50或60 | - H.264: 1000 - H.265: 800 |
| 480P/D1_N(标清) 854 * 480/720 * 480 | 25或30 | 50或60 | - H.264: 600 - H.265: 300 |
| 576P/D1 (标清) 720 * 576 | 25或30 | 50或60 | - H.264: 600 - H.265: 300 |
| 270P(流畅) 480 * 270 | 25或30 | 50或60 | - |
| CIF P/N 352 * 288/320 * 240 | 25或30 | 50或60 | - H.264: 250 - H.265: 250 |
父主题: 通用数据结构
VideoEncodeCallBack
功能
用于定义视频编码输入的回调函数。
请勿在回调函数内实现过于复杂的操作,而是单纯用用户自定义“userData”来接收视频编码回调结果,否则回调线程会发生卡住的现象,导致视频编码速度变慢。
结构定义
typedef APP_ERROR (*VideoEncodeCallBack)(std::shared_ptr<uint8_t>& outDataPtr, uint32_t& outDataSize,
uint32_t& channelId, uint32_t& frameId, void* userData);
参数说明
| 参数名 | 说明 |
|---|---|
| outDataPtr | 编码后输出视频帧数据的内存地址。 |
| outDataSize | 编码后输出视频帧数据的内存大小。 |
| channelId | 视频流索引,由VideoEncoder类的构造函数来设置。 |
| frameId | 视频帧索引,由VideoEncoder类的Encode函数来设置。 |
| userData | 用户自定义回调输入的数据类型(主要用来获取编码数据)。 |
父主题: 通用数据结构
Rect
功能
矩形框结构体(抠图贴图),用来保存一个矩形框的左上角坐标和右下角坐标(图像的左上角坐标和右下角坐标)。
结构定义
struct Rect {
Rect()
: x0(0), y0(0), x1(0), y1(0) {};
Rect(const uint32_t leftTopX, const uint32_t leftTopY,
const uint32_t rightBottomX, const uint32_t rightBottomY)
: x0(leftTopX), y0(leftTopY), x1(rightBottomX), y1(rightBottomY) {};
Rect(const Point leftTop, const Point rightBottom)
: x0(leftTop.x), y0(leftTop.y), x1(rightBottom.x), y1(rightBottom.y) {};
uint32_t x0 = 0;
uint32_t y0 = 0;
uint32_t x1 = 0;
uint32_t y1 = 0;
};
参数说明
| 参数名 | 说明 |
|---|---|
| x0,leftTopX | 矩形框左上角坐标的横坐标(以图像左上角为原点)。 |
| y0,leftTopY | 矩形框左上角坐标的纵坐标(以图像左上角为原点)。 |
| x1,rightBottomX | 矩形框右下角坐标的横坐标(以图像左上角为原点)。 |
| y1,rightBottomY | 矩形框右下角坐标的纵坐标(以图像左上角为原点)。 |
| leftTop | 矩形框左上角坐标点(Point 结构体)。 |
| rightBottom | 矩形框右下角坐标点(Point 结构体)。 |
父主题: 通用数据结构
Size
功能
图像大小结构体(缩放),用来保存一个图像的高和宽。
结构定义
struct Size {
Size()
: width(0), height(0) {};
Size(const uint32_t inputWidth, const uint32_t inputHeight)
: width(inputWidth), height(inputHeight) {};
uint32_t width = 0;
uint32_t height = 0;
};
参数说明
| 参数名 | 说明 |
|---|---|
| width,inputWidth | 图像宽。 |
| height,inputHeight | 图像高。 |
父主题: 通用数据结构
在线提单