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
94 lines
4.4 KiB
Markdown
94 lines
4.4 KiB
Markdown
# CLAUDE.md
|
|
|
|
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
|
|
## Project Overview
|
|
|
|
rocDecode is AMD's high-performance video decode SDK. It provides a C/C++ API to access hardware-accelerated video decoding (VCN engines) on AMD GPUs via VA-API, with HIP for GPU interoperability. Supported codecs: H.265/HEVC (8/10 bit), H.264/AVC (8 bit), AV1 (8/10/12 bit), VP9 (8-bit and 10-bit). Requires AMD GPU gfx908+.
|
|
|
|
- rocDecode is located at projects/rocdecode
|
|
- rocDecode CI is located at .github/workflows/media-libs-ci.yml
|
|
- rocDecode python test scripts are in projects/rocdecode/test and samples are located in projects/rocdecode/samples
|
|
|
|
## Build Commands
|
|
|
|
```bash
|
|
# Standard build (uses amdclang++ from ROCM_PATH, defaults to /opt/rocm)
|
|
mkdir build && cd build
|
|
cmake ..
|
|
make -j$(nproc)
|
|
|
|
# Release build
|
|
cmake .. -DCMAKE_BUILD_TYPE=Release
|
|
|
|
# Install (required before running tests)
|
|
sudo make install
|
|
|
|
# Run all tests (requires install first)
|
|
make test ARGS="-VV"
|
|
# or: ctest --extra-verbose --output-on-failure
|
|
|
|
# Run a single test by name
|
|
ctest -R video_decodeRaw-HEVC -VV
|
|
|
|
# Run extended tests (requires FFmpeg)
|
|
cmake .. -DENABLE_EXTENDED_TESTS=ON
|
|
make test ARGS="-VV"
|
|
```
|
|
|
|
Tests use a build-and-test pattern: CTest builds each sample in a temp directory and runs it against installed test data at `${ROCM_PATH}/share/rocdecode/video/`. The library must be installed before tests will work.
|
|
|
|
## Key CMake Options
|
|
|
|
- `ROCM_PATH` - ROCm installation path (default: `/opt/rocm` or
|
|
- `ROCDECODE_ENABLE_ROCPROFILER_REGISTER` - Enable profiling support (default: ON)
|
|
- `ROCDECODE_ENABLE_HOST_DECODER` - Build FFmpeg-based software decoder `librocdecode-host.so` (default: ON; only built when FFmpeg is found)
|
|
- `ENABLE_EXTENDED_TESTS` - Enable FFmpeg-dependent tests (default: OFF)
|
|
|
|
## Required Dependencies
|
|
|
|
HIP, libva (>= 1.22), libdrm_amdgpu, pthreads. Optional: FFmpeg (>= 4.0.4) for samples, extended tests, and rocdecode-host. Custom Find modules are in `cmake/`.
|
|
|
|
## Architecture
|
|
|
|
### Decoding Pipeline
|
|
|
|
Input (video file) -> Demuxing (FFmpeg or bitstream reader) -> Parsing (codec-specific) -> Decoding (VA-API GPU or FFmpeg host) -> Output (YUV in HIP device/host memory) -> Optional post-processing (HIP color conversion/resize kernels)
|
|
|
|
### Two Shared Libraries
|
|
|
|
1. **`librocdecode.so`** - Core GPU-accelerated decoder using VA-API
|
|
2. **`librocdecode-host.so`** - Optional FFmpeg-based software decoder (built from `src/rocdecode-host/`)
|
|
|
|
### Source Layout
|
|
|
|
- **`api/`** - Public C API headers (`rocdecode.h`, `rocparser.h`, `roc_bitstream_reader.h`, `rocdecode_host.h`)
|
|
- **`src/rocdecode/`** - Core decoder: `rocdecode_api.cpp` (C entry points) -> `RocDecoder` -> `VaapiVideoDecoder` (VA-API backend in `vaapi/`)
|
|
- **`src/parser/`** - Codec parsers: `rocparser_api.cpp` (C entry points) -> `RocVideoParser` base -> `AvcVideoParser`, `HevcVideoParser`, `Av1VideoParser`, `Vp9VideoParser`
|
|
- **`src/bit_stream_reader/`** - Elementary stream file reader (no FFmpeg dependency)
|
|
- **`src/rocdecode-host/`** - Host decoder: separate CMake target, wraps FFmpeg avcodec
|
|
- **`src/amd_detail/`** - rocprofiler API tracing/dispatch
|
|
- **`utils/`** - High-level utility classes shared by samples: `RocVideoDecoder` (ties parser+decoder together), `VideoDemuxer` (FFmpeg wrapper), HIP kernels for color conversion and resize
|
|
- **`samples/`** - 10 sample applications demonstrating different decode scenarios
|
|
- **`test/`** - CTest definitions; `rocDecodeNegativeApiTests/` for negative API tests; `testScripts/` for Python-based conformance and sample test runners
|
|
|
|
### API Conventions
|
|
|
|
- C API with `extern "C"` linkage; functions prefixed `rocDec` (e.g., `rocDecCreateDecoder`)
|
|
- Opaque handles (`typedef void *rocDecDecoderHandle`)
|
|
- Error codes via `rocDecStatus` enum
|
|
- Internal C++ uses PascalCase classes, trailing underscore for members (`va_display_`), snake_case locals
|
|
- Callback-driven parser: register `pfn_sequence_callback`, `pfn_decode_picture`, `pfn_display_picture` handlers
|
|
|
|
### Logging
|
|
|
|
5-level logging controlled by `ROCDEC_LOG_LEVEL` env var (0=Critical, 1=Error, 2=Warning, 3=Info, 4=Debug). Singleton logger in `src/commons.h`.
|
|
|
|
## Coding Style
|
|
|
|
- C++17, compiled with `-Wall`
|
|
- `#pragma once` for header guards
|
|
- MIT license header block required on all C/C++ and CMake files
|
|
- Compiler: `amdclang++` from ROCm toolchain
|
|
- Release: `-O3 -DNDEBUG -fPIC`; Debug: `-O0 -gdwarf-4` (Valgrind compatible)
|