CANN/docs VDEC视频解码
VDEC视频解码【免费下载链接】docs该仓库用于维护cann公共文档项目地址: https://gitcode.com/cann/docs本节介绍VDEC视频解码的接口调用流程同时配合示例代码辅助理解该接口调用流程。VDECVideo Decoder负责将H264/H265格式的视频码流解码为YUV/RGB格式的图片。关于VDEC功能的详细介绍及使用约束请参见《DVPP媒体加速库》。接口调用流程开发应用时如果涉及视频解码则应用程序中必须包含解码的代码逻辑。图 1VDEC视频解码功能调用的流程![](https://raw.gitcode.com/cann/docs/raw/a173bdbfa81bbfd36d1c4da672d78301fb678d36/docs/app-dev/zh/figures/VDEC视频解码功能调用的流程.png VDEC视频解码功能调用的流程?utm_sourcegitcode_repo_files)当前系统支持解码H264/H265的视频码流关键接口的说明如下调用aclInit接口初始化系统。调用aclrtSetDevice接口指定计算设备。调用hi_mpi_sys_init接口进行媒体数据处理系统初始化。调用hi_vdec_get_pic_buf_size接口获取解码所需的帧存大小、调用hi_vdec_get_tmv_buf_size接口获取矢量预测缓冲区的大小在创建通道时需要使用这些数据。调用hi_mpi_vdec_create_chn接口创建通道。调用hi_mpi_dvpp_malloc接口申请Device上的内存存放输入或输出数据。解码前需调用hi_mpi_vdec_start_recv_stream接口通知解码器启动接收码流再调用hi_mpi_vdec_send_stream接口发送解码码流hi_mpi_vdec_send_stream接口是异步接口调用该接口仅表示任务下发成功还需要调用hi_mpi_vdec_get_frame接口获取解码结果数据成功获取解码数据后可以调用hi_mpi_vdec_release_frame接口释放帧相关的资源。解码结束后需调用hi_mpi_vdec_stop_recv_stream接口通知解码器停止接收码流。调用hi_mpi_dvpp_free接口释放输入、输出内存。调用hi_mpi_vdec_destroy_chn接口销毁通道。调用hi_mpi_sys_exit接口进行媒体数据处理系统去初始化。调用aclrtResetDevice接口复位设备释放Device上的资源。调用aclFinalize接口实现系统去初始化用于释放进程内acl接口使用的相关资源。示例代码以下是VDEC视频解码功能关键步骤的代码示例不能直接拷贝编译运行仅供参考。调用接口后需增加异常处理的分支并记录报错日志、提示日志此处不一一列举。您可以单击vdec_sample获取样例。// .... // 1.初始化媒体数据处理系统 int32_t ret hi_mpi_sys_init(); // 2.创建通道 hi_vdec_chn chnId; hi_vdec_chn_attr chnAttr; hi_pic_buf_attr buf_attr{1920, 1080, 0, 8, HI_PIXEL_FORMAT_YUV_SEMIPLANAR_420, HI_COMPRESS_MODE_NONE}; chnAttr.type HI_PT_H264; chnAttr.mode HI_VDEC_SEND_MODE_FRAME; chnAttr.pic_width 1920; chnAttr.pic_height 1080; chnAttr.stream_buf_size 1920 * 1080 * 3 / 2; chnAttr.frame_buf_cnt 16; chnAttr.frame_buf_size hi_vdec_get_pic_buf_size(HI_PT_H264, buf_attr); chnAttr.video_attr.ref_frame_num 12; chnAttr.video_attr.temporal_mvp_en HI_TRUE; chnAttr.video_attr.tmv_buf_size hi_vdec_get_tmv_buf_size(HI_PT_H264, 1920, 1080); ret hi_mpi_vdec_create_chn(chnId, chnAttr); // 3.设置通道属性 hi_vdec_chn_param chnParam; ret hi_mpi_vdec_get_chn_param(chnId, chnParam); chnParam.video_param.dec_mode HI_VIDEO_DEC_MODE_IPB; chnParam.video_param.compress_mode HI_COMPRESS_MODE_HFBC; chnParam.video_param.video_format HI_VIDEO_FORMAT_TILE_64x16; chnParam.display_frame_num 3; chnParam.video_param.out_order HI_VIDEO_OUT_ORDER_DISPLAY; ret hi_mpi_vdec_set_chn_param(chnId, chnParam); // 4.解码器启动接收码流 ret hi_mpi_vdec_start_recv_stream(chnId); // 5.发送码流 // 5.1 申请输入内存 uint8_t* inputAddr nullptr; // inputsize表示每一帧码流占用的内存大小此处以1024 Byte为例用户需根据实际情况计算内存大小 int32_t inputSize 1024; ret hi_mpi_dvpp_malloc(0, inputAddr, inputSize); // 直接将输入码流数据读入Device内存 // 将输入码流读入Device内存中该自定义函数ReadStreamFile由用户实现 ReadStreamFile(streamName, inputAddr, inputSize); // 5.2 申请输出内存 uint8_t* outputAddr nullptr; // 输出图片数据占用的内存大小与输出图片格式有关 int32_t outputSize 1920 * 1080 * 3 / 2; ret hi_mpi_dvpp_malloc(0, outputAddr, outputSize); // 5.3 构造存放一帧输入码流信息的结构体 hi_vdec_stream stream; stream.addr inputAddr; stream.len inputSize; stream.end_of_frame HI_TRUE; stream.end_of_stream HI_FALSE; stream.need_display HI_TRUE; // 5.4 构造存放一帧输出结果信息的结构体 hi_vdec_pic_info outPicInfo; outPicInfo.width 1920; outPicInfo.height 1080; outPicInfo.width_stride 1920; outPicInfo.height_stride 1080; outPicInfo.pixel_format HI_PIXEL_FORMAT_YUV_SEMIPLANAR_420; outPicInfo.vir_addr outputAddr; outPicInfo.buffer_size outputSize; // 5.5 发送一帧码流 ret hi_mpi_vdec_send_stream(chnId, stream, outPicInfo, 0); // 6.接收解码结果 // 6.1 获取解码结果 hi_video_frame_info frame; hi_vdec_stream stream; hi_vdec_supplement_info stSupplement; ret hi_mpi_vdec_get_frame(chnId, frame, stSupplement, stream, 0); if (ret HI_SUCCESS) { decResult frame.v_frame.frame_flag; if (decResult 0) { // 0: Decode success printf([%s][%d] Chn %u GetFrame Success, Decode Success \n,__FUNCTION__, __LINE__, chnId); } else if (decResult 1) { // 1: Decode fail printf([%s][%d] Chn %u GetFrame Success, Decode Fail \n,__FUNCTION__, __LINE__, chnId); } else if (decResult 2) { // 2:This result is returned for the second field of printf([%s][%d] Chn %u GetFrame Success, No Picture \n, __FUNCTION__, __LINE__, chnId); } else if (decResult 3) { // 3: Reference frame number set error printf([%s][%d] Chn %u GetFrame Success, RefFrame Num Error \n,__FUNCTION__, __LINE__, chnId); } else if (decResult 4) { // 4: Reference frame size set error printf([%s][%d] Chn %u GetFrame Success, RefFrame Size Error \n,__FUNCTION__, __LINE__, chnId); } } // 6.2 获取解码结果数据 // 可以直接使用VDEC的输出图片数据在frame.v_frame.virt_addr[0]指向的内存中 // TODO: 推理相关的代码逻辑 // 6.3 释放输入、输出内存 ret hi_mpi_dvpp_free(frame.v_frame.virt_addr[0]); ret hi_mpi_dvpp_free(stream.addr); // 6.4 释放资源 ret hi_mpi_vdec_release_frame(chnId, frame); // 7.解码器停止接收码流 ret hi_mpi_vdec_stop_recv_stream(chnId); // 8.销毁通道 ret hi_mpi_vdec_destroy_chn(chnId); // 9. 媒体数据处理系统去初始化 ret hi_mpi_sys_exit(); // ....【免费下载链接】docs该仓库用于维护cann公共文档项目地址: https://gitcode.com/cann/docs创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

静态网站评论系统定制:Instatic样式与功能扩展

静态网站评论系统定制:Instatic样式与功能扩展

静态网站评论系统定制:Instatic样式与功能扩展 【免费下载链接】Instatic Instatic is a modern self-hosted visual CMS - get it running in 1 minute 项目地址: https://gitcode.com/GitHub_Trending/in/Instatic Instatic作为一款现代化自托管视觉CMS&am…

2026/7/5 18:17:56阅读更多 →
CANNbot-Insight对话洞察开发计划

CANNbot-Insight对话洞察开发计划

Session 对话级洞察 — Phase3 开发计划(TDD 方式) 【免费下载链接】cannbot-skills CANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体,本仓库为其提供可复用的 Skills 模块。 项目地址: https://gitcode.com/cann/cannbot-skills …

2026/7/5 18:12:56阅读更多 →
基于A89307与STM32F429ZI的高性能FOC方案设计与实现

基于A89307与STM32F429ZI的高性能FOC方案设计与实现

1. 项目概述:基于A89307与STM32F429ZI的高性能FOC方案在工业自动化与精密控制领域,无刷直流电机(BLDC)因其高效率、长寿命和低维护成本等优势,正逐步取代传统有刷电机。而磁场定向控制(FOC)作为…

2026/7/5 18:12:56阅读更多 →
CANN动态AIPP单个输入

CANN动态AIPP单个输入

动态AIPP(单个动态AIPP输入) 【免费下载链接】docs 该仓库用于维护cann公共文档 项目地址: https://gitcode.com/cann/docs 本节介绍在执行模型推理时,单个动态AIPP输入的模型所涉及的关键接口、示例代码。 接口调用流程 动态AIPP场…

2026/7/5 19:18:05阅读更多 →
CANN/asc-devkit SetFixSplit矩阵分块设置

CANN/asc-devkit SetFixSplit矩阵分块设置

SetFixSplit 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。 项目地址: https://gitcode.co…

2026/7/5 19:18:05阅读更多 →
终极地图标记聚类解决方案:Google Maps iOS Utils集群管理深度解析

终极地图标记聚类解决方案:Google Maps iOS Utils集群管理深度解析

终极地图标记聚类解决方案:Google Maps iOS Utils集群管理深度解析 【免费下载链接】google-maps-ios-utils Google Maps SDK for iOS Utility Library 项目地址: https://gitcode.com/gh_mirrors/go/google-maps-ios-utils Google Maps iOS Utils是一套强大…

2026/7/5 19:18:05阅读更多 →
Perlite目录导航:移动端优化的TOC系统让文档浏览更高效

Perlite目录导航:移动端优化的TOC系统让文档浏览更高效

Perlite目录导航:移动端优化的TOC系统让文档浏览更高效 【免费下载链接】Perlite A web-based markdown viewer optimized for Obsidian 项目地址: https://gitcode.com/GitHub_Trending/pe/Perlite Perlite作为一款为Obsidian优化的网页版Markdown查看器&am…

2026/7/5 19:18:05阅读更多 →
Jax3d深度学习框架入门:如何用Neural Rendering构建逼真3D场景

Jax3d深度学习框架入门:如何用Neural Rendering构建逼真3D场景

Jax3d深度学习框架入门:如何用Neural Rendering构建逼真3D场景 【免费下载链接】jax3d 项目地址: https://gitcode.com/gh_mirrors/ja/jax3d Jax3d是一个基于JAX构建的深度学习框架,专为Neural Rendering任务设计,能够帮助开发者快速…

2026/7/5 19:18:05阅读更多 →
3步打造你的私人影院:免费开源跨平台视频播放器ZyPlayer全解析

3步打造你的私人影院:免费开源跨平台视频播放器ZyPlayer全解析

3步打造你的私人影院:免费开源跨平台视频播放器ZyPlayer全解析 【免费下载链接】zyfun 跨平台桌面端视频资源播放器,免费高颜值. 项目地址: https://gitcode.com/gh_mirrors/zy/zyfun 你是否曾为寻找想看的影视内容而在多个网站间反复切换?是否厌…

2026/7/5 19:13:05阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述:从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目,叫 skills4/skills ,它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景:一个旨在展示或教授某种技能的仓库,本身却成了安…

2026/7/5 0:01:08阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示:因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战:从“黑箱预测”到“可信推理”2026年6月,第7届机器学习与趋势国际会议(MLT 2026)将在悉尼召开。会议议程中,“因果与可解释机器学习…

2026/7/5 0:01:08阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/5 0:01:08阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述:从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目,叫 skills4/skills ,它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景:一个旨在展示或教授某种技能的仓库,本身却成了安…

2026/7/5 0:01:08阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示:因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战:从“黑箱预测”到“可信推理”2026年6月,第7届机器学习与趋势国际会议(MLT 2026)将在悉尼召开。会议议程中,“因果与可解释机器学习…

2026/7/5 0:01:08阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/5 0:01:08阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/5 1:30:27阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/5 3:48:10阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/5 3:48:09阅读更多 →