From: Sachin Kumar Garg <sachin.garg@oss.qualcomm.com>
To: Vikash Garodia <vikash.garodia@oss.qualcomm.com>,
Dikshita Agarwal <dikshita.agarwal@oss.qualcomm.com>,
Abhinav Kumar <abhinav.kumar@linux.dev>,
Bryan O'Donoghue <bod@kernel.org>,
Mauro Carvalho Chehab <mchehab@kernel.org>,
Vedang Nagar <quic_vnagar@quicinc.com>,
Stefan Schmidt <stefan.schmidt@linaro.org>,
Hans Verkuil <hverkuil@kernel.org>
Cc: linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org,
linux-kernel@vger.kernel.org,
Sachin Kumar Garg <sachin.garg@oss.qualcomm.com>,
Vishnu Reddy <busanna.reddy@oss.qualcomm.com>
Subject: [PATCH v4 0/3] media: qcom: iris: add multi slice support
Date: Thu, 23 Jul 2026 15:51:12 +0530 [thread overview]
Message-ID: <20260723-iris_multi_slice-v4-0-45f0a3fe7fce@oss.qualcomm.com> (raw)
This series adds support for multi-slice encoding in the Qualcomm Iris
driver.
Multi-slice mode allows encoding a single frame into multiple slices,
which can improve error resilience and enable parallel processing.
The feature supports two slice modes:
- MAX_MB mode: slices are created based on macroblock count, controlled
via V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_MB
- MAX_BYTES mode: slices are created based on byte size, controlled via
V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_BYTES
Clients can enable slice mode using the V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE
control.
Patch 1 is a prerequisite fix: iris_set_stage() computes a work_mode
but never caches it back into inst->fw_caps[STAGE].value, leaving
buffer-size and clock-frequency calculations based on a stale value.
Patch 2 is another prerequisite fix: iris_set_stage() currently always
selects STAGE_2 work mode for encoder sessions, but CBR rate control
requires STAGE_1. This is fixed by forcing STAGE_1 when BITRATE_MODE is
set to CBR.
Patch 3 adds the multi-slice support itself for Iris HFI Gen2 based
targets (qcs8300, sm8550 and other SM8550-derived targets).
Support for HFI Gen1 targets will be added in a follow-up series.
This series has been verified with GST level testing.
Command used:
gst-launch-1.0 -v videotestsrc ! video/x-raw,format=NV12, \
width=1280,height=720,framerate=30/1 ! v4l2h264enc output-io-mode=4 |
capture-io-mode=4 extra-controls="controls,video_bitrate_mode=1, \
slice_partitioning_method=1,number_of_mbs_in_a_slice=460;" \
! filesink location=/opt/test_enc.h264
Changes in v4:
- Split out a new prerequisite patch (patch 1) to cache the computed
work_mode into inst->fw_caps[STAGE].value in iris_set_stage(), since
this fixes a pre-existing bug independent of the CBR change and
needed its own Fixes tag.
- Deduplicated the per-target slice capability limits that were
previously repeated identically across platform_inst_cap_qcs8300 and
platform_inst_cap_sm8550. Introduced struct platform_inst_slice_caps
and moved it to iris_platform_data (one level up from
platform_inst_caps), since all Iris HFI Gen2 targets share the same
encoder capability table and hence the same slice limits; a single
default_slice_caps_vpu3x instance is now referenced by all Gen2
platforms.
- Link to v3: https://lore.kernel.org/r/20260721-iris_multi_slice-v3-0-adc61a687e7e@oss.qualcomm.com
Changes in v3:
- Patch 1 (force stage 1 work mode for CBR RC): cache the computed
work_mode into inst->fw_caps[STAGE].value so buffer-size and
clock-frequency calculations stay consistent with what is actually
configured on firmware.
- Patch 2 (multi-slice support):
- Use inst->hfi_rc_type instead of the raw V4L2 BITRATE_MODE value
when validating/deriving slice parameters, avoiding a mismatch
between V4L2 and firmware rate-control enums.
- Round up (instead of truncate) when computing the minimum
MAX_MB and MAX_BYTES slice size floors, so the hardware's
max-slices-per-frame limit is never exceeded.
Changes in v2:
- Added a prerequisite patch to force STAGE_1 work mode for CBR rate
control on the encoder, required for multi-slice encoding to work
correctly.
- Addressed review comments on the multi-slice patch (updated commit
subject and description).
Signed-off-by: Sachin Kumar Garg <sachin.garg@oss.qualcomm.com>
---
Sachin Kumar Garg (3):
media: iris: cache work mode after computing it in iris_set_stage
media: iris: force stage 1 work mode for CBR RC on encoder
media: iris: add support for multi_slice in iris encoder
drivers/media/platform/qcom/iris/iris_ctrls.c | 84 ++++++++++++++++++++++
drivers/media/platform/qcom/iris/iris_ctrls.h | 1 +
drivers/media/platform/qcom/iris/iris_hfi_gen2.c | 33 ++++++++-
.../platform/qcom/iris/iris_hfi_gen2_defines.h | 2 +
.../platform/qcom/iris/iris_platform_common.h | 16 +++++
.../media/platform/qcom/iris/iris_platform_vpu3x.c | 17 +++++
6 files changed, 152 insertions(+), 1 deletion(-)
---
base-commit: 42f83a32259a82c4481d3cccf560c3bfeb32c892
change-id: 20260716-iris_multi_slice-5647287a9563
Best regards,
--
Sachin Kumar Garg <sachin.garg@oss.qualcomm.com>
next reply other threads:[~2026-07-23 10:21 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-23 10:21 Sachin Kumar Garg [this message]
2026-07-23 10:21 ` [PATCH v4 1/3] media: iris: cache work mode after computing it in iris_set_stage Sachin Kumar Garg
2026-07-23 16:07 ` Vikash Garodia
2026-07-23 10:21 ` [PATCH v4 2/3] media: iris: force stage 1 work mode for CBR RC on encoder Sachin Kumar Garg
2026-07-23 16:07 ` Vikash Garodia
2026-07-23 10:21 ` [PATCH v4 3/3] media: iris: add support for multi_slice in iris encoder Sachin Kumar Garg
2026-07-23 17:17 ` Vikash Garodia
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260723-iris_multi_slice-v4-0-45f0a3fe7fce@oss.qualcomm.com \
--to=sachin.garg@oss.qualcomm.com \
--cc=abhinav.kumar@linux.dev \
--cc=bod@kernel.org \
--cc=busanna.reddy@oss.qualcomm.com \
--cc=dikshita.agarwal@oss.qualcomm.com \
--cc=hverkuil@kernel.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=mchehab@kernel.org \
--cc=quic_vnagar@quicinc.com \
--cc=stefan.schmidt@linaro.org \
--cc=vikash.garodia@oss.qualcomm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.