通过构造VideoDecoder类实例可实现视频解码功能,解码功能配置项及各项约束与支持情况请参考“VideoDecodeConfig”章节。
视频解码支持自定义输出数据格式,通过自定义回调函数传入解码功能配置项,方便用户解码后的数据,详情可参考“VideoDecodeCallBack”章节。
视频解码的接口说明请参考VideoDecoder。
首先根据需求定义需要的输出数据组合方式,根据组合方式参考VideoDecodeCallBack定义回调函数传入解码功能配置项,然后实例化VideoDecoder类,最后调用Decode成员函数完成解码,获取数据。
视频解码接口调用流程参考如下:
Vision SDK提供VideoDecoder类进行视频解码,关键步骤说明如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | // 初始化 MxBase::MxInit(); { // 定义要接收的解码数据 struct FrameImage { Image image; // 视频帧类对象 uint32_t frameId = 0; // 视频帧索引 uint32_t channelId = 0; // 视频处理通道资源索引 }; //定义获取解码数据到自定义结构的回调函数 APP_ERROR CallBackVdec(Image& decodedImage, uint32_t channelId, uint32_t frameId, void* userData) { FrameImage* decodedVec = static_cast<FrameImage*>(userData); decodedVec->image = decodedImage; decodedVec->channelId = channelId; decodedVec->frameId = frameId; } // 构造解码配置项 MxBase::VideoDecodeConfig config; VideoDecodeCallBack cPtr = CallBackVdec; config.width = 1920; config.height = 1080; config.callbackFunc = cPtr; config.skipInterval = 0; config.inputVideoFormat = StreamFormat::H264_MAIN_LEVEL; config.outputImageFormat = ImageFormat::YUV_SP_420; // 实例化解码类 MxBase::VideoDecoder videoDecoder(config, deviceId, channelId); // 执行解码操作 ret = videoDecoder.Decode(dataPtr, dataSize, frameId, &decodedFrame); } // 去初始化 MxBase::MxDeInit(); |