[PATCH RFC 0/7] media: qcom: iris: add support for decoding 10bit formats

From: Neil Armstrong

Date: Wed Apr 08 2026 - 12:44:13 EST


This adds the plumbing to support decoding HEVC and AV1
streams into 10bit pixel formats, linear and compressed.

This has only been tested on SM8650 with HEVC, and was inspired by
Venus and the downstream vidc driver for the buffer
calculations and HFI messages.

I was unable to get 10bit decoding working with Gstreamer
and ffmpeg, but v4l2-ctl works with:
v4l2-ctl --verbose --set-fmt-video-out=pixelformat=HEVC --set-fmt-video=pixelformat=P010 --stream-mmap --stream-out-mmap --stream-from-hdr Big_Buck_Bunny_1080_10s_30MB_main10.h265.hdr --stream-to out.P010
v4l2-ctl --verbose --set-fmt-video-out=pixelformat=HEVC --set-fmt-video=pixelformat=Q10C --stream-mmap --stream-out-mmap --stream-from-hdr Big_Buck_Bunny_1080_10s_30MB_main10.h265.hdr --stream-to out.QC10

The non-10bit decoding still works as before.

With Big_Buck_Bunny_1080_10s_30MB reencoded in 10-bit profile
and tranformed in v4l2 header format with [1]:
ffmpeg -i Big_Buck_Bunny_1080_10s_30MB.h264 -pix_fmt yuv420p10le -c:v libx265 -crf 28 -x265-params profile=main10 Big_Buck_Bunny_1080_10s_30MB_main10.h265
/path/to/mkhdr.sh Big_Buck_Bunny_1080_10s_30MB_main10.h265 raw Big_Buck_Bunny_1080_10s_30MB_main10.h265.hdr

The frames correctness has been verified buy displaying them
via Vulkan DMA_BUF import, including QC10C and QC08C.

The support is probably incomplete for other platforms and
I'm unsure what's required to conform to the V4L2 M2M stateless
spec, especially since AFAIK the decoder doesn't support
decoding 10bit streams in 8bit pixel format, thus the RFC state.
Review is welcome !

[1] https://github.com/superna9999/pyv4l2compliance

Signed-off-by: Neil Armstrong <neil.armstrong@xxxxxxxxxx>
---
Neil Armstrong (7):
media: qcom: iris: add QC10C & P010 buffer size calculations
media: qcom: iris: gen2: add support for 10bit decoding
media: qcom: iris: add helpers for 8bit and 10bit formats
media: qcom: iris: vdec: update size and stride calculations for 10bit formats
media: qcom: iris: vdec: forbid g_fmt while waiting for first source change
media: qcom: iris: vdec: update find_format to handle 8bit and 10bit formats
media: qcom: iris: vdec: allow decoding into 10bit format

drivers/media/platform/qcom/iris/iris_buffer.c | 81 +++++++++++++++++++++-
.../platform/qcom/iris/iris_hfi_gen2_command.c | 71 ++++++++++++++++++-
.../platform/qcom/iris/iris_hfi_gen2_defines.h | 1 +
.../platform/qcom/iris/iris_hfi_gen2_response.c | 35 ++++++++--
drivers/media/platform/qcom/iris/iris_instance.h | 2 +
.../platform/qcom/iris/iris_platform_common.h | 1 +
.../media/platform/qcom/iris/iris_platform_gen2.c | 3 +-
drivers/media/platform/qcom/iris/iris_state.c | 6 ++
drivers/media/platform/qcom/iris/iris_state.h | 1 +
drivers/media/platform/qcom/iris/iris_utils.c | 16 ++++-
drivers/media/platform/qcom/iris/iris_utils.h | 2 +
drivers/media/platform/qcom/iris/iris_vdec.c | 70 +++++++++++++++++--
drivers/media/platform/qcom/iris/iris_vidc.c | 14 +++-
13 files changed, 285 insertions(+), 18 deletions(-)
---
base-commit: f3e6330d7fe42b204af05a2dbc68b379e0ad179e
change-id: 20260408-topic-sm8x50-iris-10bit-decoding-074c3ac7975c

Best regards,
--
Neil Armstrong <neil.armstrong@xxxxxxxxxx>