CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
78 lines
2.6 KiB
Markdown
78 lines
2.6 KiB
Markdown
# Video Decode
|
||
|
||
## Overview
|
||
|
||
This example benchmarks video decoding performance using the AMD rocDecode library with VCN (Video Core Next) hardware acceleration. It uses a thread pool to decode video files in parallel batches, leveraging FFmpeg for demuxing and the rocDecode API for GPU-accelerated frame decoding. The benchmark measures decoding throughput and is useful for profiling hardware video decoder utilization, GPU memory management during media workloads, and multi-threaded decode pipeline performance.
|
||
|
||
## Source Files
|
||
|
||
- `videodecodebatch.cpp` - Thread pool implementation with job queue for parallel video decoding, worker thread management, and performance measurement.
|
||
- `roc_video_dec.cpp` / `roc_video_dec.h` - rocDecode video decoder wrapper with GPU memory management.
|
||
- `video_demuxer.h` - FFmpeg-based video demuxing utilities.
|
||
- `common.h` - Shared definitions and helpers.
|
||
|
||
## Prerequisites
|
||
|
||
- CMake 3.25+
|
||
- HIP runtime
|
||
- rocDecode library
|
||
- FFmpeg libraries (libavcodec, libavformat, libavutil)
|
||
- Sample video files (copied from ROCm installation at build time)
|
||
|
||
## Building
|
||
|
||
**Standalone build:**
|
||
|
||
```bash
|
||
cmake -B <build_dir> -S <project_root>/examples/videodecode -DCMAKE_PREFIX_PATH=/opt/rocm
|
||
cmake --build <build_dir>
|
||
```
|
||
|
||
**As part of the examples suite:**
|
||
|
||
```bash
|
||
cmake -B <build_dir> -S <project_root>/examples/ -DCMAKE_PREFIX_PATH=/opt/rocm
|
||
cmake --build <build_dir> --target videodecode
|
||
```
|
||
|
||
## Running
|
||
|
||
```bash
|
||
# Decode a video file
|
||
./videodecode -i /path/to/video.mp4
|
||
|
||
# Specify GPU and thread count
|
||
./videodecode -i /path/to/video.mp4 -d 0
|
||
```
|
||
|
||
### VA drivers (`LIBVA_DRIVERS_PATH`) — only if decode fails
|
||
|
||
rocDecode uses the VA stack for hardware decode. On a typical desktop, **libva** finds a driver under the distro’s default paths, so you often need **no** extra variables.
|
||
|
||
Set **`LIBVA_DRIVERS_PATH`** when decode fails or no VA driver is found. For example, when building with TheRock, point libva at the vendored sysdeps directory:
|
||
|
||
```bash
|
||
export LIBVA_DRIVERS_PATH="${ROCM_PATH}/lib/rocm_sysdeps/lib"
|
||
```
|
||
|
||
## Profiling with rocprofiler-systems
|
||
|
||
```bash
|
||
rocprof-sys-run -- ./videodecode -i /path/to/video.mp4
|
||
```
|
||
|
||
### Recommended Configuration
|
||
|
||
| Variable | Value | Purpose |
|
||
| ---------- | ------- | --------- |
|
||
| `ROCPROFSYS_ROCM_DOMAINS` | `hip_runtime_api,kernel_dispatch,memory_copy` | Trace HIP API and GPU operations |
|
||
| `ROCPROFSYS_TRACE` | `true` | Generate Perfetto trace for timeline analysis |
|
||
| `ROCPROFSYS_PROFILE` | `true` | Generate call-stack profile |
|
||
|
||
```bash
|
||
rocprof-sys-run \
|
||
-e ROCPROFSYS_ROCM_DOMAINS=hip_runtime_api,kernel_dispatch,memory_copy \
|
||
-e ROCPROFSYS_TRACE=true \
|
||
-- ./videodecode -i /path/to/video.mp4
|
||
```
|