Overview
v4l2h265dec is a hardware-accelerated video decoder that uses the Video4Linux2 (V4L2) stateful decoder API to offload H.265 (HEVC) video decoding to the Qualcomm Video Processing Unit (VPU).
This plugin is provided and maintained by the GStreamer community. This document focuses on its usage in conjunction with Qualcomm-specific QIM SDK GStreamer plugins, along with relevant use cases and internal architectural considerations.
v4l2h265dec is typically used to decode H.265 streams provided by:
- File sources
- RTSP sources
- HLS/HTTP streaming sources
qtdemux and h265parse).
Example Pipeline

1
Download Required Files
h265_1080p.mp4 file is used here as an example.
2
Copy files to device
3
Connect to device
4
Set environment variables
Run below command on your device
5
Run the pipeline
Key Responsibilities
v4l2h265dec is responsible for:
- Hardware acceleration — offloads H.265/HEVC decoding to the dedicated VPU
- V4L2 state management — manages the V4L2 stateful decoder state machine (device open, buffer allocation, stream on/off)
- Buffer I/O management — handles buffer exchange between GStreamer and the V4L2 driver using DMABuf, MMAP, or UserPtr modes
- Format negotiation — negotiates raw output formats supported by the hardware, including UBWC-compressed formats (
NV12_Q08C,NV12_Q10LE32C) for reduced memory bandwidth - Multi-stream support — supports multiple concurrent decoder instances (subject to hardware resource limits)
- Error handling — supports decoder error controls such as
max-errorsand corrupted-frame discard behavior
Hierarchy
GObjectGstObject
GstElement
GstVideoDecoder
GstV4l2VideoDec
v4l2h265dec
Pad Templates
sink
src
The exact set of profiles and levels reported depends on what the underlying V4L2 driver enumerates via
V4L2_CID_MPEG_VIDEO_HEVC_PROFILE and V4L2_CID_MPEG_VIDEO_HEVC_LEVEL.Element Properties
I/O Mode Values
Bothcapture-io-mode and output-io-mode accept the same GstV4l2IOMode enumeration:
Internal Architecture
v4l2h265dec operates using two V4L2 queue objects internally:
- Output queue (
V4L2_BUF_TYPE_VIDEO_OUTPUT) — receives compressed bitstream buffers from upstream - Capture queue (
V4L2_BUF_TYPE_VIDEO_CAPTURE) — produces decoded raw video frames for downstream

State Transitions
Dynamic Resolution Change
v4l2h265dec supports mid-stream dynamic resolution changes without requiring a pipeline restart, handled through the V4L2 source change event mechanism:
- At initialization, the decoder subscribes to
V4L2_EVENT_SOURCE_CHANGEevents on the capture queue. - When the driver detects a resolution change in the bitstream, it signals the event.
- The decoder stops the capture queue, discards the existing buffer pool, re-negotiates format via
VIDIOC_G_FMT, sets a new output state with updated dimensions, and reallocates the capture buffer pool.
Memory and Buffer Management
DMABuf Usage
Settingcapture-io-mode=4 exports decoded frame buffers as DMABuf file descriptors. These can be imported directly by waylandsink or qtivcomposer without CPU memory copies, enabling zero-copy pipelines.
Alignment Requirements
Decoded buffers follow Qualcomm hardware alignment requirements (e.g., 128-byte stride alignment).Format Support
Standard NV12 is common. UBWC (Universal Bandwidth Compression) is supported through formats likeNV12_Q08C to reduce memory bandwidth.
Codec Header Initialization
Before the first frame is decoded, the decoder sends the codec-specific header data (VPS/SPS/PPS) to the output queue. If the input caps containcodec_data (e.g., from an hvcC box in MP4), that data is sent first. Otherwise, the first input buffer itself is used as the initialization data.
Latency
The decoder computes and reports pipeline latency based on the minimum number of capture buffers required by the driver and the frame duration:Drain and Flush
- Drain — sends
V4L2_DEC_CMD_STOPto signal end-of-stream; waits for all remaining frames to be produced - Flush — stops both queues, resets buffer pools, and restarts streaming; used during seek operations
Usage
Ensure you have followed the prerequisites before continuing
Single RTSP Stream — Decode and Display
Demonstrates real-time RTSP stream reception, H.265 network depayloading, and hardware-accelerated decoding with DMABuf zero-copy for Wayland preview.
Four-Stream Side-by-Side Composition
Demonstrates decoding four input streams using four hardware decoder instances, arranging them in a 2×2 grid usingqtivcomposer, and displaying the composed frame.


