ROCm 媒体库(Media Libraries)实战指南:基于 rocDecode 与 rocJPEG 的 GPU 视频解码与图像处理
【免费下载链接】legacy-rocm-buildAMD ROCm™ Software - GitHub Home项目地址: https://gitcode.com/GitHub_Trending/ro/legacy-rocm-build
ROCm media libraries 为 AMD GPU 提供硬件加速的视频解码与图像处理能力,是整个 ROCm 软件栈中负责多媒体负载的核心组件。本文以docs/components/media-libs.rst为主线,深入讲解 rocDecode(AMD GPU 视频解码 SDK)与 rocJPEG(JPG 图像解码库)的功能定位、支持范围、编译打包流程与安装方式,并结合本仓库的构建脚本与组件清单给出可验证的源码级依据,帮助读者在 ROCm 环境中落地视频/图像 GPU 加速方案。
ROCm 媒体库在软件栈中的定位
ROCm(Radeon Open Compute)软件栈以 GPU 计算为中心,通常被划分为运行时、编译器、数学库、通信库等多个组件群组。媒体库(Media libraries)是其中独立的一类,专注于多媒体数据的 GPU 加速处理。在本仓库的组件分类配置 docs/data/components-default.yaml 中,媒体库被显式声明为media_libs分组(&media_libs Media libraries),归属于该分组的组件共有两个:
| 组件 | 分组 | 定位 |
|---|---|---|
| rocDecode | media_libs | 面向 AMD GPU 视频解码特性的高性能 SDK |
| rocJPEG | media_libs | 在 AMD GPU 上解码 JPG 图像的库 |
两个组件的元数据(group: *media_libs)分别出现在 components-default.yaml 的rocDecode条目(rtd_project: rocDecode、github_repo: rocm-systems/projects/rocdecode)与 components-default.yaml 的rocJPEG条目(rtd_project: rocJPEG、github_repo: rocm-systems/projects/rocjpeg)中,从仓库配置层面印证了二者同属媒体库分组的归类关系。
同时,在组件的清单(manifest)与构建清单(repo manifest)中,rocDecode 与 rocJPEG 也被一并登记。例如 default.xml 中写有<project groups="mathlibs" name="rocDecode" />与<project groups="mathlibs" name="rocJPEG" />,说明二者通过统一的 manifest 机制纳入 ROCm 组件仓库管理。
支持的硬件与平台
从当前仓库的组件版本清单 docs/data/components.yaml 可以看到媒体库的版本与支持范围:
rocDecode: { version: 1.8.0, support: "Linux · Instinct/Radeon · Ryzen (gfx1150/gfx1151/gfx1152)" } rocJPEG: { version: 1.6.0, support: "Linux · Instinct/Radeon · Ryzen (gfx1150/gfx1151/gfx1152)" }- 平台:两个库均为Linux平台组件(不支持 Windows);
- GPU 范围:支持 AMDInstinct数据中心加速卡与Radeon消费级显卡;
- Ryzen 处理器:额外支持 Ryzen 平台,且明确到架构代号
gfx1150/gfx1151/gfx1152(即基于 RDNA 架构的 Ryzen 集成 GPU)。
在 docs/data/components-previous.yaml 中记录的上一版本(rocDecode: 1.8.0、rocJPEG: 1.5.0)与当前版本(rocJPEG 1.6.0)对比可知,媒体库会随 ROCm 发行版演进持续更新。若读者需要按历史发行版核对版本,可以参考 compatibility-matrix-historical-6.0.csv 与 core-sdk-components-linux.rst 中的 Linux 组件清单。
rocDecode:AMD GPU 视频解码 SDK
功能与价值
rocDecode 是官方定位为“High-performance SDK for access to video decoding features on AMD GPUs”的高性能视频解码 SDK(见 media-libs.rst 及 components-default.yaml 中的组件描述)。其核心价值在于:
- 将视频解码负载卸载到 AMD GPU,利用 GPU 硬件编解码引擎(如 VCN)替代 CPU 软解,显著提升吞吐、降低 CPU 占用;
- 提供统一的解码接口抽象,供 FFmpeg、GStreamer 等多媒体框架及自研应用集成;
- 面向 Instinct(数据中心推理/转码)与 Radeon/Ryzen(桌面与嵌入式场景)两类硬件形态。
从构建脚本看编译与打包流程
本仓库的 tools/rocm-build/build_rocdecode.sh 提供了 rocDecode 在 ROCm 构建体系中的完整编译、打包逻辑,是理解其工程形态的第一手源码证据:
# 跳过不支持的分发版(老版本 CentOS/Debian 及 Azure Linux 等) if [ "$DISTRO_ID" = "centos-7" ] || \ [ "$DISTRO_ID" = "mariner-2.0" ] || \ [ "$DISTRO_ID" = "azurelinux-3.0" ] || \ [ "$DISTRO_ID" = "debian-10" ]; then echo "Not building rocDecode for ${DISTRO_ID}. Exiting..." return 0 fi init_rocm_common_cmake_params cmake \ "${rocm_math_common_cmake_params[@]}" \ -DROCM_DEP_ROCMCORE=ON \ -DROCDECODE_ENABLE_ROCPROFILER_REGISTER=ON \ "${COMPONENT_SRC}" cmake --build "$BUILD_DIR" -- -j${PROC} cmake --build "$BUILD_DIR" -- install cmake --build "$BUILD_DIR" -- package几个值得注意的工程细节:
- CMake 构建体系:rocDecode 采用标准 CMake 流程(configure → build → install → package),构建目录、安装目录与打包目录由统一的
compute_utils.sh工具函数管理; - 依赖开关
-DROCM_DEP_ROCMCORE=ON:显式声明对 ROCm Core(ROCm 核心运行时/公共基础设施)的依赖,保证解码库与 ROCm 运行时版本匹配; - 性能分析注册
-DROCDECODE_ENABLE_ROCPROFILER_REGISTER=ON:启用 ROCProfiler 注册,使解码内核可被 ROCm 性能分析工具(如 rocprof / ROCm Compute Profiler)采集,便于对解码负载做性能剖析; - 分发版裁剪:
centos-7、mariner-2.0、azurelinux-3.0、debian-10等发行版被显式跳过,这与上面“仅支持现代 Linux 分发版”的事实相互印证; - 多目标封装:脚本末尾的
case $TARGET in build|outdir|clean)暴露了统一 CLI(build构建、outdir输出目录、clean清理),可被上层构建系统按目标调用。
安装方式
安装 rocDecode 的最直接方式是从 ROCm 软件仓库安装预编译二进制包:
# Debian/Ubuntu 系(安装前需配置 ROCm apt 源) sudo apt update sudo apt install rocdecode # RHEL/Rocky 系(安装前需配置 ROCm yum 源) sudo dnf install rocdecode # openSUSE/SLES 系(安装前需配置 ROCm zypper 源) sudo zypper install rocdecode提示:包管理器命令因发行版而异,且依赖已正确配置的 ROCm 软件源;安装完成后可通过
rocminfo确认 GPU 可见、并用dpkg -L rocdecode(或rpm -ql rocdecode)查看库文件与头文件的安装位置。
rocJPEG:AMD GPU 上的 JPG 图像解码库
功能与价值
rocJPEG 的官方定位是“Library for decoding JPG images on AMD GPUs”(见 media-libs.rst 与 components-default.yaml)。它解决的问题是:
- 图像解码(尤其是 JPEG 解码)是图像预处理管线中高频且计算密集的环节;
- 将 JPG 解码卸载到 GPU,可并行处理大批量图像,配合后续 GPU 上的缩放、颜色空间转换、归一化与推理,消除 CPU↔GPU 数据回传瓶颈,适合深度学习数据管线与图像批处理服务。
从构建脚本看编译与打包流程
对应构建脚本 tools/rocm-build/build_rocjpeg.sh 展示了 rocJPEG 的构建路径:
if [ "$DISTRO_ID" = "centos-7" ] || [ "$DISTRO_ID" = "sles-15.4" ] || \ [ "$DISTRO_ID" = "azurelinux-3.0" ] || [ "$DISTRO_ID" = "debian-10" ]; then echo "Not building rocJPEG for ${DISTRO_ID}. Exiting..." return 0 fi cmake -DROCM_DEP_ROCMCORE=ON -DROCJPEG_ENABLE_ROCPROFILER_REGISTER=ON "$COMPONENT_SRC" make -j8 make install make package cmake --build "$BUILD_DIR" -- -j${PROC} cpack -G ${PKGTYPE^^}与 rocDecode 高度一致的设计模式:
- 同样通过
-DROCM_DEP_ROCMCORE=ON声明对 ROCm Core 的依赖; - 同样通过
-DROCJPEG_ENABLE_ROCPROFILER_REGISTER=ON启用 ROCProfiler 注册以支持性能分析; - 跳过
centos-7、sles-15.4、azurelinux-3.0、debian-10等旧发行版; - 使用
make流程并调用cpack -G ${PKGTYPE^^}生成 DEB/RPM 软件包,最终产物由copy_if统一收集到包目录。
两者的构建脚本并排阅读,可以清晰看到 ROCm 组件工程的统一规范:compute_utils.sh提供公共环境、set_component_src定位源码目录、stage2_command_args解析统一 CLI 参数、build_wheel/clean/outdir等目标提供生命周期管理。
安装方式
# Debian/Ubuntu 系 sudo apt update sudo apt install rocjpeg # RHEL/Rocky 系 sudo dnf install rocjpeg # openSUSE/SLES 系 sudo zypper install rocjpeg媒体库组件的仓库内证据汇总
为便于读者在本仓库内继续追踪,下表汇总了与媒体库直接相关的证据文件:
| 关注点 | 仓库路径 | 说明 |
|---|---|---|
| 组件文档 | docs/components/media-libs.rst | 媒体库唯一官方入口文档 |
| 组件分组 | docs/data/components-default.yaml | media_libs分组及两个组件的元数据 |
| 版本与支持范围 | docs/data/components.yaml | rocDecode 1.8.0 / rocJPEG 1.6.0 及 GPU 范围 |
| 历史版本 | docs/data/components-previous.yaml | 上一版本记录(rocJPEG 1.5.0) |
| rocDecode 构建脚本 | tools/rocm-build/build_rocdecode.sh | 编译、安装、打包、清理全流程 |
| rocJPEG 构建脚本 | tools/rocm-build/build_rocjpeg.sh | 编译、安装、打包、清理全流程 |
| manifest 登记 | default.xml | 组件纳入统一清单管理 |
| Linux 组件清单 | docs/compatibility/include/core-sdk-components-linux.rst | 发行版兼容性核对 |
总结
ROCm 媒体库(media libraries)由rocDecode(GPU 视频解码 SDK)与rocJPEG(GPU JPG 图像解码库)两个组件构成,为 AMD Instinct / Radeon / Ryzen(gfx1150/1151/1152)GPU 提供 Linux 平台上的硬件加速视频与图像解码能力。二者在组件配置中以media_libs分组登记,在当前仓库中分别对应 1.8.0 与 1.6.0 版本;从 build_rocdecode.sh 与 build_rocjpeg.sh 的构建脚本可以确认,它们都采用 CMake/make 标准流程、依赖 ROCm Core(ROCM_DEP_ROCMCORE=ON)、支持 ROCProfiler 性能分析注册,并被打包为 DEB/RPM 发行。用户既可以通过发行版包管理器直接安装预编译二进制,也可以利用构建脚本在支持的发行版上自行编译打包,从而在数据中心的视频转码/推理流水线或高性能图像预处理场景中落地 GPU 加速。
【免费下载链接】legacy-rocm-buildAMD ROCm™ Software - GitHub Home项目地址: https://gitcode.com/GitHub_Trending/ro/legacy-rocm-build
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考