* [PATCH v5 1/6] media: qcom: iris: Improve format alignment for encoder
2025-11-10 10:23 ` [PATCH v5 0/6] media: qcom: iris: encoder feature enhancements Wangao Wang
@ 2025-11-10 10:23 ` Wangao Wang
2025-11-10 13:52 ` Dikshita Agarwal
2025-11-13 9:35 ` Bryan O'Donoghue
2025-11-10 10:23 ` [PATCH v5 2/6] media: qcom: iris: Improve crop_offset handling " Wangao Wang
` (5 subsequent siblings)
6 siblings, 2 replies; 14+ messages in thread
From: Wangao Wang @ 2025-11-10 10:23 UTC (permalink / raw)
To: Vikash Garodia, Dikshita Agarwal, Abhinav Kumar,
Bryan O'Donoghue, Mauro Carvalho Chehab
Cc: linux-media, linux-arm-msm, linux-kernel, Wangao Wang,
Neil Armstrong, quic_qiweil, quic_renjiang
Add members enc_raw_width, enc_raw_height to the struct iris_inst to
support codec alignment requirements.
HFI_PROP_RAW_RESOLUTION needs to be set to the actual YUV resolution.
Tested-by: Neil Armstrong <neil.armstrong@linaro.org> # on SM8650-HDK
Signed-off-by: Wangao Wang <wangao.wang@oss.qualcomm.com>
---
drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c | 3 +--
drivers/media/platform/qcom/iris/iris_instance.h | 4 ++++
drivers/media/platform/qcom/iris/iris_venc.c | 6 ++++++
3 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c b/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c
index 4ce71a14250832440099e4cf3835b4aedfb749e8..48962d2e4962935bbc24244edfbbdcd42dab151f 100644
--- a/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c
+++ b/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c
@@ -168,8 +168,7 @@ static int iris_hfi_gen2_session_set_property(struct iris_inst *inst, u32 packet
static int iris_hfi_gen2_set_raw_resolution(struct iris_inst *inst, u32 plane)
{
- u32 resolution = inst->fmt_src->fmt.pix_mp.width << 16 |
- inst->fmt_src->fmt.pix_mp.height;
+ u32 resolution = inst->enc_raw_width << 16 | inst->enc_raw_height;
u32 port = iris_hfi_gen2_get_port(inst, plane);
return iris_hfi_gen2_session_set_property(inst,
diff --git a/drivers/media/platform/qcom/iris/iris_instance.h b/drivers/media/platform/qcom/iris/iris_instance.h
index 5982d7adefeab80905478b32cddba7bd4651a691..a9892988c10bc28e9b2d8c3b5482e99b5b9af623 100644
--- a/drivers/media/platform/qcom/iris/iris_instance.h
+++ b/drivers/media/platform/qcom/iris/iris_instance.h
@@ -64,6 +64,8 @@ struct iris_fmt {
* @frame_rate: frame rate of current instance
* @operating_rate: operating rate of current instance
* @hfi_rc_type: rate control type
+ * @enc_raw_width: source image width for encoder instance
+ * @enc_raw_height: source image height for encoder instance
*/
struct iris_inst {
@@ -102,6 +104,8 @@ struct iris_inst {
u32 frame_rate;
u32 operating_rate;
u32 hfi_rc_type;
+ u32 enc_raw_width;
+ u32 enc_raw_height;
};
#endif
diff --git a/drivers/media/platform/qcom/iris/iris_venc.c b/drivers/media/platform/qcom/iris/iris_venc.c
index 099bd5ed4ae0294725860305254c4cad1ec88d7e..50a3eb975a2523abf1c2df128a66a762a1ed35c6 100644
--- a/drivers/media/platform/qcom/iris/iris_venc.c
+++ b/drivers/media/platform/qcom/iris/iris_venc.c
@@ -68,6 +68,9 @@ int iris_venc_inst_init(struct iris_inst *inst)
inst->operating_rate = DEFAULT_FPS;
inst->frame_rate = DEFAULT_FPS;
+ inst->enc_raw_width = DEFAULT_WIDTH;
+ inst->enc_raw_height = DEFAULT_HEIGHT;
+
memcpy(&inst->fw_caps[0], &core->inst_fw_caps_enc[0],
INST_FW_CAP_MAX * sizeof(struct platform_inst_fw_cap));
@@ -249,6 +252,9 @@ static int iris_venc_s_fmt_input(struct iris_inst *inst, struct v4l2_format *f)
inst->buffers[BUF_INPUT].min_count = iris_vpu_buf_count(inst, BUF_INPUT);
inst->buffers[BUF_INPUT].size = fmt->fmt.pix_mp.plane_fmt[0].sizeimage;
+ inst->enc_raw_width = f->fmt.pix_mp.width;
+ inst->enc_raw_height = f->fmt.pix_mp.height;
+
if (f->fmt.pix_mp.width != inst->crop.width ||
f->fmt.pix_mp.height != inst->crop.height) {
inst->crop.top = 0;
--
2.43.0
^ permalink raw reply related [flat|nested] 14+ messages in thread* Re: [PATCH v5 1/6] media: qcom: iris: Improve format alignment for encoder
2025-11-10 10:23 ` [PATCH v5 1/6] media: qcom: iris: Improve format alignment for encoder Wangao Wang
@ 2025-11-10 13:52 ` Dikshita Agarwal
2025-11-13 9:35 ` Bryan O'Donoghue
1 sibling, 0 replies; 14+ messages in thread
From: Dikshita Agarwal @ 2025-11-10 13:52 UTC (permalink / raw)
To: Wangao Wang, Vikash Garodia, Abhinav Kumar, Bryan O'Donoghue,
Mauro Carvalho Chehab
Cc: linux-media, linux-arm-msm, linux-kernel, Neil Armstrong,
quic_qiweil, quic_renjiang
On 11/10/2025 3:53 PM, Wangao Wang wrote:
> Add members enc_raw_width, enc_raw_height to the struct iris_inst to
> support codec alignment requirements.
>
> HFI_PROP_RAW_RESOLUTION needs to be set to the actual YUV resolution.
>
> Tested-by: Neil Armstrong <neil.armstrong@linaro.org> # on SM8650-HDK
> Signed-off-by: Wangao Wang <wangao.wang@oss.qualcomm.com>
> ---
> drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c | 3 +--
> drivers/media/platform/qcom/iris/iris_instance.h | 4 ++++
> drivers/media/platform/qcom/iris/iris_venc.c | 6 ++++++
> 3 files changed, 11 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c b/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c
> index 4ce71a14250832440099e4cf3835b4aedfb749e8..48962d2e4962935bbc24244edfbbdcd42dab151f 100644
> --- a/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c
> +++ b/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c
> @@ -168,8 +168,7 @@ static int iris_hfi_gen2_session_set_property(struct iris_inst *inst, u32 packet
>
> static int iris_hfi_gen2_set_raw_resolution(struct iris_inst *inst, u32 plane)
> {
> - u32 resolution = inst->fmt_src->fmt.pix_mp.width << 16 |
> - inst->fmt_src->fmt.pix_mp.height;
> + u32 resolution = inst->enc_raw_width << 16 | inst->enc_raw_height;
> u32 port = iris_hfi_gen2_get_port(inst, plane);
>
> return iris_hfi_gen2_session_set_property(inst,
> diff --git a/drivers/media/platform/qcom/iris/iris_instance.h b/drivers/media/platform/qcom/iris/iris_instance.h
> index 5982d7adefeab80905478b32cddba7bd4651a691..a9892988c10bc28e9b2d8c3b5482e99b5b9af623 100644
> --- a/drivers/media/platform/qcom/iris/iris_instance.h
> +++ b/drivers/media/platform/qcom/iris/iris_instance.h
> @@ -64,6 +64,8 @@ struct iris_fmt {
> * @frame_rate: frame rate of current instance
> * @operating_rate: operating rate of current instance
> * @hfi_rc_type: rate control type
> + * @enc_raw_width: source image width for encoder instance
> + * @enc_raw_height: source image height for encoder instance
> */
>
> struct iris_inst {
> @@ -102,6 +104,8 @@ struct iris_inst {
> u32 frame_rate;
> u32 operating_rate;
> u32 hfi_rc_type;
> + u32 enc_raw_width;
> + u32 enc_raw_height;
> };
>
> #endif
> diff --git a/drivers/media/platform/qcom/iris/iris_venc.c b/drivers/media/platform/qcom/iris/iris_venc.c
> index 099bd5ed4ae0294725860305254c4cad1ec88d7e..50a3eb975a2523abf1c2df128a66a762a1ed35c6 100644
> --- a/drivers/media/platform/qcom/iris/iris_venc.c
> +++ b/drivers/media/platform/qcom/iris/iris_venc.c
> @@ -68,6 +68,9 @@ int iris_venc_inst_init(struct iris_inst *inst)
> inst->operating_rate = DEFAULT_FPS;
> inst->frame_rate = DEFAULT_FPS;
>
> + inst->enc_raw_width = DEFAULT_WIDTH;
> + inst->enc_raw_height = DEFAULT_HEIGHT;
> +
> memcpy(&inst->fw_caps[0], &core->inst_fw_caps_enc[0],
> INST_FW_CAP_MAX * sizeof(struct platform_inst_fw_cap));
>
> @@ -249,6 +252,9 @@ static int iris_venc_s_fmt_input(struct iris_inst *inst, struct v4l2_format *f)
> inst->buffers[BUF_INPUT].min_count = iris_vpu_buf_count(inst, BUF_INPUT);
> inst->buffers[BUF_INPUT].size = fmt->fmt.pix_mp.plane_fmt[0].sizeimage;
>
> + inst->enc_raw_width = f->fmt.pix_mp.width;
> + inst->enc_raw_height = f->fmt.pix_mp.height;
> +
> if (f->fmt.pix_mp.width != inst->crop.width ||
> f->fmt.pix_mp.height != inst->crop.height) {
> inst->crop.top = 0;
>
Reviewed-by: Dikshita Agarwal <dikshita.agarwal@oss.qualcomm.com>
Thanks,
Dikshita
^ permalink raw reply [flat|nested] 14+ messages in thread* Re: [PATCH v5 1/6] media: qcom: iris: Improve format alignment for encoder
2025-11-10 10:23 ` [PATCH v5 1/6] media: qcom: iris: Improve format alignment for encoder Wangao Wang
2025-11-10 13:52 ` Dikshita Agarwal
@ 2025-11-13 9:35 ` Bryan O'Donoghue
1 sibling, 0 replies; 14+ messages in thread
From: Bryan O'Donoghue @ 2025-11-13 9:35 UTC (permalink / raw)
To: Wangao Wang, Vikash Garodia, Dikshita Agarwal, Abhinav Kumar,
Mauro Carvalho Chehab
Cc: linux-media, linux-arm-msm, linux-kernel, Neil Armstrong,
quic_qiweil, quic_renjiang
On 10/11/2025 10:23, Wangao Wang wrote:
> Add members enc_raw_width, enc_raw_height to the struct iris_inst to
> support codec alignment requirements.
>
> HFI_PROP_RAW_RESOLUTION needs to be set to the actual YUV resolution.
>
> Tested-by: Neil Armstrong <neil.armstrong@linaro.org> # on SM8650-HDK
> Signed-off-by: Wangao Wang <wangao.wang@oss.qualcomm.com>
> ---
> drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c | 3 +--
> drivers/media/platform/qcom/iris/iris_instance.h | 4 ++++
> drivers/media/platform/qcom/iris/iris_venc.c | 6 ++++++
> 3 files changed, 11 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c b/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c
> index 4ce71a14250832440099e4cf3835b4aedfb749e8..48962d2e4962935bbc24244edfbbdcd42dab151f 100644
> --- a/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c
> +++ b/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c
> @@ -168,8 +168,7 @@ static int iris_hfi_gen2_session_set_property(struct iris_inst *inst, u32 packet
>
> static int iris_hfi_gen2_set_raw_resolution(struct iris_inst *inst, u32 plane)
> {
> - u32 resolution = inst->fmt_src->fmt.pix_mp.width << 16 |
> - inst->fmt_src->fmt.pix_mp.height;
> + u32 resolution = inst->enc_raw_width << 16 | inst->enc_raw_height;
> u32 port = iris_hfi_gen2_get_port(inst, plane);
>
> return iris_hfi_gen2_session_set_property(inst,
> diff --git a/drivers/media/platform/qcom/iris/iris_instance.h b/drivers/media/platform/qcom/iris/iris_instance.h
> index 5982d7adefeab80905478b32cddba7bd4651a691..a9892988c10bc28e9b2d8c3b5482e99b5b9af623 100644
> --- a/drivers/media/platform/qcom/iris/iris_instance.h
> +++ b/drivers/media/platform/qcom/iris/iris_instance.h
> @@ -64,6 +64,8 @@ struct iris_fmt {
> * @frame_rate: frame rate of current instance
> * @operating_rate: operating rate of current instance
> * @hfi_rc_type: rate control type
> + * @enc_raw_width: source image width for encoder instance
> + * @enc_raw_height: source image height for encoder instance
> */
>
> struct iris_inst {
> @@ -102,6 +104,8 @@ struct iris_inst {
> u32 frame_rate;
> u32 operating_rate;
> u32 hfi_rc_type;
> + u32 enc_raw_width;
> + u32 enc_raw_height;
> };
>
> #endif
> diff --git a/drivers/media/platform/qcom/iris/iris_venc.c b/drivers/media/platform/qcom/iris/iris_venc.c
> index 099bd5ed4ae0294725860305254c4cad1ec88d7e..50a3eb975a2523abf1c2df128a66a762a1ed35c6 100644
> --- a/drivers/media/platform/qcom/iris/iris_venc.c
> +++ b/drivers/media/platform/qcom/iris/iris_venc.c
> @@ -68,6 +68,9 @@ int iris_venc_inst_init(struct iris_inst *inst)
> inst->operating_rate = DEFAULT_FPS;
> inst->frame_rate = DEFAULT_FPS;
>
> + inst->enc_raw_width = DEFAULT_WIDTH;
> + inst->enc_raw_height = DEFAULT_HEIGHT;
> +
> memcpy(&inst->fw_caps[0], &core->inst_fw_caps_enc[0],
> INST_FW_CAP_MAX * sizeof(struct platform_inst_fw_cap));
>
> @@ -249,6 +252,9 @@ static int iris_venc_s_fmt_input(struct iris_inst *inst, struct v4l2_format *f)
> inst->buffers[BUF_INPUT].min_count = iris_vpu_buf_count(inst, BUF_INPUT);
> inst->buffers[BUF_INPUT].size = fmt->fmt.pix_mp.plane_fmt[0].sizeimage;
>
> + inst->enc_raw_width = f->fmt.pix_mp.width;
> + inst->enc_raw_height = f->fmt.pix_mp.height;
> +
> if (f->fmt.pix_mp.width != inst->crop.width ||
> f->fmt.pix_mp.height != inst->crop.height) {
> inst->crop.top = 0;
>
> --
> 2.43.0
>
Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH v5 2/6] media: qcom: iris: Improve crop_offset handling for encoder
2025-11-10 10:23 ` [PATCH v5 0/6] media: qcom: iris: encoder feature enhancements Wangao Wang
2025-11-10 10:23 ` [PATCH v5 1/6] media: qcom: iris: Improve format alignment for encoder Wangao Wang
@ 2025-11-10 10:23 ` Wangao Wang
2025-11-13 5:42 ` Dikshita Agarwal
2025-11-13 9:37 ` Bryan O'Donoghue
2025-11-10 10:23 ` [PATCH v5 3/6] media: qcom: iris: Add scale support " Wangao Wang
` (4 subsequent siblings)
6 siblings, 2 replies; 14+ messages in thread
From: Wangao Wang @ 2025-11-10 10:23 UTC (permalink / raw)
To: Vikash Garodia, Dikshita Agarwal, Abhinav Kumar,
Bryan O'Donoghue, Mauro Carvalho Chehab
Cc: linux-media, linux-arm-msm, linux-kernel, Wangao Wang,
Neil Armstrong, quic_qiweil, quic_renjiang
The setting of HFI_PROP_CROP_OFFSETS for the OUTPUT port is correct,
but on the CAPTURE port it is used to inform the firmware about the
ROI, so crop_offset needs to be handled accordingly.
Signed-off-by: Wangao Wang <wangao.wang@oss.qualcomm.com>
---
.../media/platform/qcom/iris/iris_hfi_gen2_command.c | 20 +++++++++++++++-----
drivers/media/platform/qcom/iris/iris_venc.c | 4 ++--
2 files changed, 17 insertions(+), 7 deletions(-)
diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c b/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c
index 48962d2e4962935bbc24244edfbbdcd42dab151f..30c0cbe22d1d34b5bbbc6bdbd3881dd43a6ff647 100644
--- a/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c
+++ b/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c
@@ -215,7 +215,7 @@ static int iris_hfi_gen2_set_crop_offsets(struct iris_inst *inst, u32 plane)
u32 port = iris_hfi_gen2_get_port(inst, plane);
u32 bottom_offset, right_offset;
u32 left_offset, top_offset;
- u32 payload[2];
+ u32 payload[2], codec_align;
if (inst->domain == DECODER) {
if (V4L2_TYPE_IS_OUTPUT(plane)) {
@@ -230,10 +230,20 @@ static int iris_hfi_gen2_set_crop_offsets(struct iris_inst *inst, u32 plane)
top_offset = inst->compose.top;
}
} else {
- bottom_offset = (inst->fmt_src->fmt.pix_mp.height - inst->crop.height);
- right_offset = (inst->fmt_src->fmt.pix_mp.width - inst->crop.width);
- left_offset = inst->crop.left;
- top_offset = inst->crop.top;
+ codec_align = inst->codec == V4L2_PIX_FMT_HEVC ? 32 : 16;
+ if (V4L2_TYPE_IS_OUTPUT(plane)) {
+ bottom_offset = (inst->enc_raw_height - inst->crop.height);
+ right_offset = (inst->enc_raw_width - inst->crop.width);
+ left_offset = inst->crop.left;
+ top_offset = inst->crop.top;
+ } else {
+ bottom_offset = (ALIGN(inst->fmt_dst->fmt.pix_mp.height, codec_align) -
+ inst->fmt_dst->fmt.pix_mp.height);
+ right_offset = (ALIGN(inst->fmt_dst->fmt.pix_mp.width, codec_align) -
+ inst->fmt_dst->fmt.pix_mp.width);
+ left_offset = 0;
+ top_offset = 0;
+ }
}
payload[0] = FIELD_PREP(GENMASK(31, 16), left_offset) | top_offset;
diff --git a/drivers/media/platform/qcom/iris/iris_venc.c b/drivers/media/platform/qcom/iris/iris_venc.c
index 50a3eb975a2523abf1c2df128a66a762a1ed35c6..7ad747d2272f029e69a56572a188a032f898a3fb 100644
--- a/drivers/media/platform/qcom/iris/iris_venc.c
+++ b/drivers/media/platform/qcom/iris/iris_venc.c
@@ -62,8 +62,8 @@ int iris_venc_inst_init(struct iris_inst *inst)
inst->crop.left = 0;
inst->crop.top = 0;
- inst->crop.width = f->fmt.pix_mp.width;
- inst->crop.height = f->fmt.pix_mp.height;
+ inst->crop.width = DEFAULT_WIDTH;
+ inst->crop.height = DEFAULT_HEIGHT;
inst->operating_rate = DEFAULT_FPS;
inst->frame_rate = DEFAULT_FPS;
--
2.43.0
^ permalink raw reply related [flat|nested] 14+ messages in thread* Re: [PATCH v5 2/6] media: qcom: iris: Improve crop_offset handling for encoder
2025-11-10 10:23 ` [PATCH v5 2/6] media: qcom: iris: Improve crop_offset handling " Wangao Wang
@ 2025-11-13 5:42 ` Dikshita Agarwal
2025-11-13 9:37 ` Bryan O'Donoghue
1 sibling, 0 replies; 14+ messages in thread
From: Dikshita Agarwal @ 2025-11-13 5:42 UTC (permalink / raw)
To: Wangao Wang, Vikash Garodia, Abhinav Kumar, Bryan O'Donoghue,
Mauro Carvalho Chehab
Cc: linux-media, linux-arm-msm, linux-kernel, Neil Armstrong,
quic_qiweil, quic_renjiang
On 11/10/2025 3:53 PM, Wangao Wang wrote:
> The setting of HFI_PROP_CROP_OFFSETS for the OUTPUT port is correct,
> but on the CAPTURE port it is used to inform the firmware about the
> ROI, so crop_offset needs to be handled accordingly.
>
> Signed-off-by: Wangao Wang <wangao.wang@oss.qualcomm.com>
> ---
> .../media/platform/qcom/iris/iris_hfi_gen2_command.c | 20 +++++++++++++++-----
> drivers/media/platform/qcom/iris/iris_venc.c | 4 ++--
> 2 files changed, 17 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c b/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c
> index 48962d2e4962935bbc24244edfbbdcd42dab151f..30c0cbe22d1d34b5bbbc6bdbd3881dd43a6ff647 100644
> --- a/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c
> +++ b/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c
> @@ -215,7 +215,7 @@ static int iris_hfi_gen2_set_crop_offsets(struct iris_inst *inst, u32 plane)
> u32 port = iris_hfi_gen2_get_port(inst, plane);
> u32 bottom_offset, right_offset;
> u32 left_offset, top_offset;
> - u32 payload[2];
> + u32 payload[2], codec_align;
>
> if (inst->domain == DECODER) {
> if (V4L2_TYPE_IS_OUTPUT(plane)) {
> @@ -230,10 +230,20 @@ static int iris_hfi_gen2_set_crop_offsets(struct iris_inst *inst, u32 plane)
> top_offset = inst->compose.top;
> }
> } else {
> - bottom_offset = (inst->fmt_src->fmt.pix_mp.height - inst->crop.height);
> - right_offset = (inst->fmt_src->fmt.pix_mp.width - inst->crop.width);
> - left_offset = inst->crop.left;
> - top_offset = inst->crop.top;
> + codec_align = inst->codec == V4L2_PIX_FMT_HEVC ? 32 : 16;
> + if (V4L2_TYPE_IS_OUTPUT(plane)) {
> + bottom_offset = (inst->enc_raw_height - inst->crop.height);
> + right_offset = (inst->enc_raw_width - inst->crop.width);
> + left_offset = inst->crop.left;
> + top_offset = inst->crop.top;
> + } else {
> + bottom_offset = (ALIGN(inst->fmt_dst->fmt.pix_mp.height, codec_align) -
> + inst->fmt_dst->fmt.pix_mp.height);
> + right_offset = (ALIGN(inst->fmt_dst->fmt.pix_mp.width, codec_align) -
> + inst->fmt_dst->fmt.pix_mp.width);
> + left_offset = 0;
> + top_offset = 0;
> + }
> }
>
> payload[0] = FIELD_PREP(GENMASK(31, 16), left_offset) | top_offset;
> diff --git a/drivers/media/platform/qcom/iris/iris_venc.c b/drivers/media/platform/qcom/iris/iris_venc.c
> index 50a3eb975a2523abf1c2df128a66a762a1ed35c6..7ad747d2272f029e69a56572a188a032f898a3fb 100644
> --- a/drivers/media/platform/qcom/iris/iris_venc.c
> +++ b/drivers/media/platform/qcom/iris/iris_venc.c
> @@ -62,8 +62,8 @@ int iris_venc_inst_init(struct iris_inst *inst)
>
> inst->crop.left = 0;
> inst->crop.top = 0;
> - inst->crop.width = f->fmt.pix_mp.width;
> - inst->crop.height = f->fmt.pix_mp.height;
> + inst->crop.width = DEFAULT_WIDTH;
> + inst->crop.height = DEFAULT_HEIGHT;
>
> inst->operating_rate = DEFAULT_FPS;
> inst->frame_rate = DEFAULT_FPS;
>
Reviewed-by: Dikshita Agarwal <dikshita.agarwal@oss.qualcomm.com>
Thanks,
Dikshita
^ permalink raw reply [flat|nested] 14+ messages in thread* Re: [PATCH v5 2/6] media: qcom: iris: Improve crop_offset handling for encoder
2025-11-10 10:23 ` [PATCH v5 2/6] media: qcom: iris: Improve crop_offset handling " Wangao Wang
2025-11-13 5:42 ` Dikshita Agarwal
@ 2025-11-13 9:37 ` Bryan O'Donoghue
1 sibling, 0 replies; 14+ messages in thread
From: Bryan O'Donoghue @ 2025-11-13 9:37 UTC (permalink / raw)
To: Wangao Wang, Vikash Garodia, Dikshita Agarwal, Abhinav Kumar,
Mauro Carvalho Chehab
Cc: linux-media, linux-arm-msm, linux-kernel, Neil Armstrong,
quic_qiweil, quic_renjiang
On 10/11/2025 10:23, Wangao Wang wrote:
> The setting of HFI_PROP_CROP_OFFSETS for the OUTPUT port is correct,
> but on the CAPTURE port it is used to inform the firmware about the
> ROI, so crop_offset needs to be handled accordingly.
What is ROI ?
Please define this term in your commit log.
---
bod
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH v5 3/6] media: qcom: iris: Add scale support for encoder
2025-11-10 10:23 ` [PATCH v5 0/6] media: qcom: iris: encoder feature enhancements Wangao Wang
2025-11-10 10:23 ` [PATCH v5 1/6] media: qcom: iris: Improve format alignment for encoder Wangao Wang
2025-11-10 10:23 ` [PATCH v5 2/6] media: qcom: iris: Improve crop_offset handling " Wangao Wang
@ 2025-11-10 10:23 ` Wangao Wang
2025-11-10 13:54 ` Dikshita Agarwal
2025-11-13 9:50 ` Bryan O'Donoghue
2025-11-10 10:23 ` [PATCH v5 4/6] media: qcom: iris: Add rotation " Wangao Wang
` (3 subsequent siblings)
6 siblings, 2 replies; 14+ messages in thread
From: Wangao Wang @ 2025-11-10 10:23 UTC (permalink / raw)
To: Vikash Garodia, Dikshita Agarwal, Abhinav Kumar,
Bryan O'Donoghue, Mauro Carvalho Chehab
Cc: linux-media, linux-arm-msm, linux-kernel, Wangao Wang,
Neil Armstrong, quic_qiweil, quic_renjiang
Add members enc_scale_width, enc_scale_height to the struct iris_inst to
support scale requirements.
Add output width and height settings in iris_venc_s_fmt_output to
enable scaling functionality.
Add VPSS buffer to platform data, which the scale function requires.
Tested-by: Neil Armstrong <neil.armstrong@linaro.org> # on SM8650-HDK
Signed-off-by: Wangao Wang <wangao.wang@oss.qualcomm.com>
---
.../platform/qcom/iris/iris_hfi_gen2_command.c | 12 +++++------
.../platform/qcom/iris/iris_hfi_gen2_response.c | 2 ++
drivers/media/platform/qcom/iris/iris_instance.h | 4 ++++
.../media/platform/qcom/iris/iris_platform_gen2.c | 12 +++++++++++
drivers/media/platform/qcom/iris/iris_venc.c | 23 +++++++++++++++++++++-
drivers/media/platform/qcom/iris/iris_vpu_buffer.c | 9 +++++----
6 files changed, 51 insertions(+), 11 deletions(-)
diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c b/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c
index 30c0cbe22d1d34b5bbbc6bdbd3881dd43a6ff647..8945e94ec9e87750fc87bebf63f4fbb634d8571a 100644
--- a/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c
+++ b/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c
@@ -194,8 +194,8 @@ static int iris_hfi_gen2_set_bitstream_resolution(struct iris_inst *inst, u32 pl
payload_type = HFI_PAYLOAD_U32;
} else {
codec_align = inst->codec == V4L2_PIX_FMT_HEVC ? 32 : 16;
- resolution = ALIGN(inst->fmt_dst->fmt.pix_mp.width, codec_align) << 16 |
- ALIGN(inst->fmt_dst->fmt.pix_mp.height, codec_align);
+ resolution = ALIGN(inst->enc_scale_width, codec_align) << 16 |
+ ALIGN(inst->enc_scale_height, codec_align);
inst_hfi_gen2->dst_subcr_params.bitstream_resolution = resolution;
payload_type = HFI_PAYLOAD_32_PACKED;
}
@@ -237,10 +237,10 @@ static int iris_hfi_gen2_set_crop_offsets(struct iris_inst *inst, u32 plane)
left_offset = inst->crop.left;
top_offset = inst->crop.top;
} else {
- bottom_offset = (ALIGN(inst->fmt_dst->fmt.pix_mp.height, codec_align) -
- inst->fmt_dst->fmt.pix_mp.height);
- right_offset = (ALIGN(inst->fmt_dst->fmt.pix_mp.width, codec_align) -
- inst->fmt_dst->fmt.pix_mp.width);
+ bottom_offset = (ALIGN(inst->enc_scale_height, codec_align) -
+ inst->enc_scale_height);
+ right_offset = (ALIGN(inst->enc_scale_width, codec_align) -
+ inst->enc_scale_width);
left_offset = 0;
top_offset = 0;
}
diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen2_response.c b/drivers/media/platform/qcom/iris/iris_hfi_gen2_response.c
index 2f1f118eae4f6462ab1aa1d16844b34e6e699f1e..dc3e606b6ab429a1d15536fa8316afb1e384d674 100644
--- a/drivers/media/platform/qcom/iris/iris_hfi_gen2_response.c
+++ b/drivers/media/platform/qcom/iris/iris_hfi_gen2_response.c
@@ -54,6 +54,8 @@ static u32 iris_hfi_gen2_buf_type_to_driver(struct iris_inst *inst,
return BUF_SCRATCH_2;
case HFI_BUFFER_PERSIST:
return BUF_PERSIST;
+ case HFI_BUFFER_VPSS:
+ return BUF_VPSS;
default:
return 0;
}
diff --git a/drivers/media/platform/qcom/iris/iris_instance.h b/drivers/media/platform/qcom/iris/iris_instance.h
index a9892988c10bc28e9b2d8c3b5482e99b5b9af623..0b36092fe4e7296da2f66aecf9083f7f1edc5459 100644
--- a/drivers/media/platform/qcom/iris/iris_instance.h
+++ b/drivers/media/platform/qcom/iris/iris_instance.h
@@ -66,6 +66,8 @@ struct iris_fmt {
* @hfi_rc_type: rate control type
* @enc_raw_width: source image width for encoder instance
* @enc_raw_height: source image height for encoder instance
+ * @enc_scale_width: scale width for encoder instance
+ * @enc_scale_height: scale height for encoder instance
*/
struct iris_inst {
@@ -106,6 +108,8 @@ struct iris_inst {
u32 hfi_rc_type;
u32 enc_raw_width;
u32 enc_raw_height;
+ u32 enc_scale_width;
+ u32 enc_scale_height;
};
#endif
diff --git a/drivers/media/platform/qcom/iris/iris_platform_gen2.c b/drivers/media/platform/qcom/iris/iris_platform_gen2.c
index 36d69cc73986b74534a2912524c8553970fd862e..d3306189d902a1f42666010468c9e4e4316a66e1 100644
--- a/drivers/media/platform/qcom/iris/iris_platform_gen2.c
+++ b/drivers/media/platform/qcom/iris/iris_platform_gen2.c
@@ -729,6 +729,10 @@ static const u32 sm8550_dec_op_int_buf_tbl[] = {
BUF_DPB,
};
+static const u32 sm8550_enc_ip_int_buf_tbl[] = {
+ BUF_VPSS,
+};
+
static const u32 sm8550_enc_op_int_buf_tbl[] = {
BUF_BIN,
BUF_COMV,
@@ -816,6 +820,8 @@ struct iris_platform_data sm8550_data = {
.dec_op_int_buf_tbl = sm8550_dec_op_int_buf_tbl,
.dec_op_int_buf_tbl_size = ARRAY_SIZE(sm8550_dec_op_int_buf_tbl),
+ .enc_ip_int_buf_tbl = sm8550_enc_ip_int_buf_tbl,
+ .enc_ip_int_buf_tbl_size = ARRAY_SIZE(sm8550_enc_ip_int_buf_tbl),
.enc_op_int_buf_tbl = sm8550_enc_op_int_buf_tbl,
.enc_op_int_buf_tbl_size = ARRAY_SIZE(sm8550_enc_op_int_buf_tbl),
};
@@ -908,6 +914,8 @@ struct iris_platform_data sm8650_data = {
.dec_op_int_buf_tbl = sm8550_dec_op_int_buf_tbl,
.dec_op_int_buf_tbl_size = ARRAY_SIZE(sm8550_dec_op_int_buf_tbl),
+ .enc_ip_int_buf_tbl = sm8550_enc_ip_int_buf_tbl,
+ .enc_ip_int_buf_tbl_size = ARRAY_SIZE(sm8550_enc_ip_int_buf_tbl),
.enc_op_int_buf_tbl = sm8550_enc_op_int_buf_tbl,
.enc_op_int_buf_tbl_size = ARRAY_SIZE(sm8550_enc_op_int_buf_tbl),
};
@@ -989,6 +997,8 @@ struct iris_platform_data sm8750_data = {
.dec_op_int_buf_tbl = sm8550_dec_op_int_buf_tbl,
.dec_op_int_buf_tbl_size = ARRAY_SIZE(sm8550_dec_op_int_buf_tbl),
+ .enc_ip_int_buf_tbl = sm8550_enc_ip_int_buf_tbl,
+ .enc_ip_int_buf_tbl_size = ARRAY_SIZE(sm8550_enc_ip_int_buf_tbl),
.enc_op_int_buf_tbl = sm8550_enc_op_int_buf_tbl,
.enc_op_int_buf_tbl_size = ARRAY_SIZE(sm8550_enc_op_int_buf_tbl),
};
@@ -1077,6 +1087,8 @@ struct iris_platform_data qcs8300_data = {
.dec_op_int_buf_tbl = sm8550_dec_op_int_buf_tbl,
.dec_op_int_buf_tbl_size = ARRAY_SIZE(sm8550_dec_op_int_buf_tbl),
+ .enc_ip_int_buf_tbl = sm8550_enc_ip_int_buf_tbl,
+ .enc_ip_int_buf_tbl_size = ARRAY_SIZE(sm8550_enc_ip_int_buf_tbl),
.enc_op_int_buf_tbl = sm8550_enc_op_int_buf_tbl,
.enc_op_int_buf_tbl_size = ARRAY_SIZE(sm8550_enc_op_int_buf_tbl),
};
diff --git a/drivers/media/platform/qcom/iris/iris_venc.c b/drivers/media/platform/qcom/iris/iris_venc.c
index 7ad747d2272f029e69a56572a188a032f898a3fb..f573408a3fc66e1bbc7814a8fc7953158e043fce 100644
--- a/drivers/media/platform/qcom/iris/iris_venc.c
+++ b/drivers/media/platform/qcom/iris/iris_venc.c
@@ -70,6 +70,8 @@ int iris_venc_inst_init(struct iris_inst *inst)
inst->enc_raw_width = DEFAULT_WIDTH;
inst->enc_raw_height = DEFAULT_HEIGHT;
+ inst->enc_scale_width = DEFAULT_WIDTH;
+ inst->enc_scale_height = DEFAULT_HEIGHT;
memcpy(&inst->fw_caps[0], &core->inst_fw_caps_enc[0],
INST_FW_CAP_MAX * sizeof(struct platform_inst_fw_cap));
@@ -188,15 +190,32 @@ int iris_venc_try_fmt(struct iris_inst *inst, struct v4l2_format *f)
static int iris_venc_s_fmt_output(struct iris_inst *inst, struct v4l2_format *f)
{
+ const struct iris_fmt *venc_fmt;
struct v4l2_format *fmt;
+ u32 codec_align;
iris_venc_try_fmt(inst, f);
- if (!(find_format(inst, f->fmt.pix_mp.pixelformat, f->type)))
+ venc_fmt = find_format(inst, f->fmt.pix_mp.pixelformat, f->type);
+ if (!venc_fmt)
return -EINVAL;
+ codec_align = venc_fmt->pixfmt == V4L2_PIX_FMT_HEVC ? 32 : 16;
+
fmt = inst->fmt_dst;
fmt->type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
+ /*
+ * If output format size != input format size,
+ * it is considered a scaling case,
+ * and the scaled size needs to be saved.
+ */
+ if (f->fmt.pix_mp.width != inst->fmt_src->fmt.pix_mp.width ||
+ f->fmt.pix_mp.height != inst->fmt_src->fmt.pix_mp.height) {
+ inst->enc_scale_width = f->fmt.pix_mp.width;
+ inst->enc_scale_height = f->fmt.pix_mp.height;
+ fmt->fmt.pix_mp.width = ALIGN(f->fmt.pix_mp.width, codec_align);
+ fmt->fmt.pix_mp.height = ALIGN(f->fmt.pix_mp.height, codec_align);
+ }
fmt->fmt.pix_mp.num_planes = 1;
fmt->fmt.pix_mp.plane_fmt[0].bytesperline = 0;
fmt->fmt.pix_mp.plane_fmt[0].sizeimage = iris_get_buffer_size(inst, BUF_OUTPUT);
@@ -254,6 +273,8 @@ static int iris_venc_s_fmt_input(struct iris_inst *inst, struct v4l2_format *f)
inst->enc_raw_width = f->fmt.pix_mp.width;
inst->enc_raw_height = f->fmt.pix_mp.height;
+ inst->enc_scale_width = f->fmt.pix_mp.width;
+ inst->enc_scale_height = f->fmt.pix_mp.height;
if (f->fmt.pix_mp.width != inst->crop.width ||
f->fmt.pix_mp.height != inst->crop.height) {
diff --git a/drivers/media/platform/qcom/iris/iris_vpu_buffer.c b/drivers/media/platform/qcom/iris/iris_vpu_buffer.c
index 4463be05ce165adef6b152eb0c155d2e6a7b3c36..db5adadd1b39c06bc41ae6f1b3d2f924b3ebf150 100644
--- a/drivers/media/platform/qcom/iris/iris_vpu_buffer.c
+++ b/drivers/media/platform/qcom/iris/iris_vpu_buffer.c
@@ -1131,10 +1131,11 @@ static u32 iris_vpu_enc_arp_size(struct iris_inst *inst)
inline bool is_scaling_enabled(struct iris_inst *inst)
{
- return inst->crop.left != inst->compose.left ||
- inst->crop.top != inst->compose.top ||
- inst->crop.width != inst->compose.width ||
- inst->crop.height != inst->compose.height;
+ struct v4l2_pix_format_mplane *dst_fmt = &inst->fmt_dst->fmt.pix_mp;
+ struct v4l2_pix_format_mplane *src_fmt = &inst->fmt_src->fmt.pix_mp;
+
+ return dst_fmt->width != src_fmt->width ||
+ dst_fmt->height != src_fmt->height;
}
static inline
--
2.43.0
^ permalink raw reply related [flat|nested] 14+ messages in thread* Re: [PATCH v5 3/6] media: qcom: iris: Add scale support for encoder
2025-11-10 10:23 ` [PATCH v5 3/6] media: qcom: iris: Add scale support " Wangao Wang
@ 2025-11-10 13:54 ` Dikshita Agarwal
2025-11-13 9:50 ` Bryan O'Donoghue
1 sibling, 0 replies; 14+ messages in thread
From: Dikshita Agarwal @ 2025-11-10 13:54 UTC (permalink / raw)
To: Wangao Wang, Vikash Garodia, Abhinav Kumar, Bryan O'Donoghue,
Mauro Carvalho Chehab
Cc: linux-media, linux-arm-msm, linux-kernel, Neil Armstrong,
quic_qiweil, quic_renjiang
On 11/10/2025 3:53 PM, Wangao Wang wrote:
> Add members enc_scale_width, enc_scale_height to the struct iris_inst to
> support scale requirements.
>
> Add output width and height settings in iris_venc_s_fmt_output to
> enable scaling functionality.
>
> Add VPSS buffer to platform data, which the scale function requires.
>
> Tested-by: Neil Armstrong <neil.armstrong@linaro.org> # on SM8650-HDK
> Signed-off-by: Wangao Wang <wangao.wang@oss.qualcomm.com>
> ---
> .../platform/qcom/iris/iris_hfi_gen2_command.c | 12 +++++------
> .../platform/qcom/iris/iris_hfi_gen2_response.c | 2 ++
> drivers/media/platform/qcom/iris/iris_instance.h | 4 ++++
> .../media/platform/qcom/iris/iris_platform_gen2.c | 12 +++++++++++
> drivers/media/platform/qcom/iris/iris_venc.c | 23 +++++++++++++++++++++-
> drivers/media/platform/qcom/iris/iris_vpu_buffer.c | 9 +++++----
> 6 files changed, 51 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c b/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c
> index 30c0cbe22d1d34b5bbbc6bdbd3881dd43a6ff647..8945e94ec9e87750fc87bebf63f4fbb634d8571a 100644
> --- a/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c
> +++ b/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c
> @@ -194,8 +194,8 @@ static int iris_hfi_gen2_set_bitstream_resolution(struct iris_inst *inst, u32 pl
> payload_type = HFI_PAYLOAD_U32;
> } else {
> codec_align = inst->codec == V4L2_PIX_FMT_HEVC ? 32 : 16;
> - resolution = ALIGN(inst->fmt_dst->fmt.pix_mp.width, codec_align) << 16 |
> - ALIGN(inst->fmt_dst->fmt.pix_mp.height, codec_align);
> + resolution = ALIGN(inst->enc_scale_width, codec_align) << 16 |
> + ALIGN(inst->enc_scale_height, codec_align);
> inst_hfi_gen2->dst_subcr_params.bitstream_resolution = resolution;
> payload_type = HFI_PAYLOAD_32_PACKED;
> }
> @@ -237,10 +237,10 @@ static int iris_hfi_gen2_set_crop_offsets(struct iris_inst *inst, u32 plane)
> left_offset = inst->crop.left;
> top_offset = inst->crop.top;
> } else {
> - bottom_offset = (ALIGN(inst->fmt_dst->fmt.pix_mp.height, codec_align) -
> - inst->fmt_dst->fmt.pix_mp.height);
> - right_offset = (ALIGN(inst->fmt_dst->fmt.pix_mp.width, codec_align) -
> - inst->fmt_dst->fmt.pix_mp.width);
> + bottom_offset = (ALIGN(inst->enc_scale_height, codec_align) -
> + inst->enc_scale_height);
> + right_offset = (ALIGN(inst->enc_scale_width, codec_align) -
> + inst->enc_scale_width);
> left_offset = 0;
> top_offset = 0;
> }
> diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen2_response.c b/drivers/media/platform/qcom/iris/iris_hfi_gen2_response.c
> index 2f1f118eae4f6462ab1aa1d16844b34e6e699f1e..dc3e606b6ab429a1d15536fa8316afb1e384d674 100644
> --- a/drivers/media/platform/qcom/iris/iris_hfi_gen2_response.c
> +++ b/drivers/media/platform/qcom/iris/iris_hfi_gen2_response.c
> @@ -54,6 +54,8 @@ static u32 iris_hfi_gen2_buf_type_to_driver(struct iris_inst *inst,
> return BUF_SCRATCH_2;
> case HFI_BUFFER_PERSIST:
> return BUF_PERSIST;
> + case HFI_BUFFER_VPSS:
> + return BUF_VPSS;
> default:
> return 0;
> }
> diff --git a/drivers/media/platform/qcom/iris/iris_instance.h b/drivers/media/platform/qcom/iris/iris_instance.h
> index a9892988c10bc28e9b2d8c3b5482e99b5b9af623..0b36092fe4e7296da2f66aecf9083f7f1edc5459 100644
> --- a/drivers/media/platform/qcom/iris/iris_instance.h
> +++ b/drivers/media/platform/qcom/iris/iris_instance.h
> @@ -66,6 +66,8 @@ struct iris_fmt {
> * @hfi_rc_type: rate control type
> * @enc_raw_width: source image width for encoder instance
> * @enc_raw_height: source image height for encoder instance
> + * @enc_scale_width: scale width for encoder instance
> + * @enc_scale_height: scale height for encoder instance
> */
>
> struct iris_inst {
> @@ -106,6 +108,8 @@ struct iris_inst {
> u32 hfi_rc_type;
> u32 enc_raw_width;
> u32 enc_raw_height;
> + u32 enc_scale_width;
> + u32 enc_scale_height;
> };
>
> #endif
> diff --git a/drivers/media/platform/qcom/iris/iris_platform_gen2.c b/drivers/media/platform/qcom/iris/iris_platform_gen2.c
> index 36d69cc73986b74534a2912524c8553970fd862e..d3306189d902a1f42666010468c9e4e4316a66e1 100644
> --- a/drivers/media/platform/qcom/iris/iris_platform_gen2.c
> +++ b/drivers/media/platform/qcom/iris/iris_platform_gen2.c
> @@ -729,6 +729,10 @@ static const u32 sm8550_dec_op_int_buf_tbl[] = {
> BUF_DPB,
> };
>
> +static const u32 sm8550_enc_ip_int_buf_tbl[] = {
> + BUF_VPSS,
> +};
> +
> static const u32 sm8550_enc_op_int_buf_tbl[] = {
> BUF_BIN,
> BUF_COMV,
> @@ -816,6 +820,8 @@ struct iris_platform_data sm8550_data = {
> .dec_op_int_buf_tbl = sm8550_dec_op_int_buf_tbl,
> .dec_op_int_buf_tbl_size = ARRAY_SIZE(sm8550_dec_op_int_buf_tbl),
>
> + .enc_ip_int_buf_tbl = sm8550_enc_ip_int_buf_tbl,
> + .enc_ip_int_buf_tbl_size = ARRAY_SIZE(sm8550_enc_ip_int_buf_tbl),
> .enc_op_int_buf_tbl = sm8550_enc_op_int_buf_tbl,
> .enc_op_int_buf_tbl_size = ARRAY_SIZE(sm8550_enc_op_int_buf_tbl),
> };
> @@ -908,6 +914,8 @@ struct iris_platform_data sm8650_data = {
> .dec_op_int_buf_tbl = sm8550_dec_op_int_buf_tbl,
> .dec_op_int_buf_tbl_size = ARRAY_SIZE(sm8550_dec_op_int_buf_tbl),
>
> + .enc_ip_int_buf_tbl = sm8550_enc_ip_int_buf_tbl,
> + .enc_ip_int_buf_tbl_size = ARRAY_SIZE(sm8550_enc_ip_int_buf_tbl),
> .enc_op_int_buf_tbl = sm8550_enc_op_int_buf_tbl,
> .enc_op_int_buf_tbl_size = ARRAY_SIZE(sm8550_enc_op_int_buf_tbl),
> };
> @@ -989,6 +997,8 @@ struct iris_platform_data sm8750_data = {
> .dec_op_int_buf_tbl = sm8550_dec_op_int_buf_tbl,
> .dec_op_int_buf_tbl_size = ARRAY_SIZE(sm8550_dec_op_int_buf_tbl),
>
> + .enc_ip_int_buf_tbl = sm8550_enc_ip_int_buf_tbl,
> + .enc_ip_int_buf_tbl_size = ARRAY_SIZE(sm8550_enc_ip_int_buf_tbl),
> .enc_op_int_buf_tbl = sm8550_enc_op_int_buf_tbl,
> .enc_op_int_buf_tbl_size = ARRAY_SIZE(sm8550_enc_op_int_buf_tbl),
> };
> @@ -1077,6 +1087,8 @@ struct iris_platform_data qcs8300_data = {
> .dec_op_int_buf_tbl = sm8550_dec_op_int_buf_tbl,
> .dec_op_int_buf_tbl_size = ARRAY_SIZE(sm8550_dec_op_int_buf_tbl),
>
> + .enc_ip_int_buf_tbl = sm8550_enc_ip_int_buf_tbl,
> + .enc_ip_int_buf_tbl_size = ARRAY_SIZE(sm8550_enc_ip_int_buf_tbl),
> .enc_op_int_buf_tbl = sm8550_enc_op_int_buf_tbl,
> .enc_op_int_buf_tbl_size = ARRAY_SIZE(sm8550_enc_op_int_buf_tbl),
> };
> diff --git a/drivers/media/platform/qcom/iris/iris_venc.c b/drivers/media/platform/qcom/iris/iris_venc.c
> index 7ad747d2272f029e69a56572a188a032f898a3fb..f573408a3fc66e1bbc7814a8fc7953158e043fce 100644
> --- a/drivers/media/platform/qcom/iris/iris_venc.c
> +++ b/drivers/media/platform/qcom/iris/iris_venc.c
> @@ -70,6 +70,8 @@ int iris_venc_inst_init(struct iris_inst *inst)
>
> inst->enc_raw_width = DEFAULT_WIDTH;
> inst->enc_raw_height = DEFAULT_HEIGHT;
> + inst->enc_scale_width = DEFAULT_WIDTH;
> + inst->enc_scale_height = DEFAULT_HEIGHT;
>
> memcpy(&inst->fw_caps[0], &core->inst_fw_caps_enc[0],
> INST_FW_CAP_MAX * sizeof(struct platform_inst_fw_cap));
> @@ -188,15 +190,32 @@ int iris_venc_try_fmt(struct iris_inst *inst, struct v4l2_format *f)
>
> static int iris_venc_s_fmt_output(struct iris_inst *inst, struct v4l2_format *f)
> {
> + const struct iris_fmt *venc_fmt;
> struct v4l2_format *fmt;
> + u32 codec_align;
>
> iris_venc_try_fmt(inst, f);
>
> - if (!(find_format(inst, f->fmt.pix_mp.pixelformat, f->type)))
> + venc_fmt = find_format(inst, f->fmt.pix_mp.pixelformat, f->type);
> + if (!venc_fmt)
> return -EINVAL;
>
> + codec_align = venc_fmt->pixfmt == V4L2_PIX_FMT_HEVC ? 32 : 16;
> +
> fmt = inst->fmt_dst;
> fmt->type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
> + /*
> + * If output format size != input format size,
> + * it is considered a scaling case,
> + * and the scaled size needs to be saved.
> + */
> + if (f->fmt.pix_mp.width != inst->fmt_src->fmt.pix_mp.width ||
> + f->fmt.pix_mp.height != inst->fmt_src->fmt.pix_mp.height) {
> + inst->enc_scale_width = f->fmt.pix_mp.width;
> + inst->enc_scale_height = f->fmt.pix_mp.height;
> + fmt->fmt.pix_mp.width = ALIGN(f->fmt.pix_mp.width, codec_align);
> + fmt->fmt.pix_mp.height = ALIGN(f->fmt.pix_mp.height, codec_align);
> + }
> fmt->fmt.pix_mp.num_planes = 1;
> fmt->fmt.pix_mp.plane_fmt[0].bytesperline = 0;
> fmt->fmt.pix_mp.plane_fmt[0].sizeimage = iris_get_buffer_size(inst, BUF_OUTPUT);
> @@ -254,6 +273,8 @@ static int iris_venc_s_fmt_input(struct iris_inst *inst, struct v4l2_format *f)
>
> inst->enc_raw_width = f->fmt.pix_mp.width;
> inst->enc_raw_height = f->fmt.pix_mp.height;
> + inst->enc_scale_width = f->fmt.pix_mp.width;
> + inst->enc_scale_height = f->fmt.pix_mp.height;
>
> if (f->fmt.pix_mp.width != inst->crop.width ||
> f->fmt.pix_mp.height != inst->crop.height) {
> diff --git a/drivers/media/platform/qcom/iris/iris_vpu_buffer.c b/drivers/media/platform/qcom/iris/iris_vpu_buffer.c
> index 4463be05ce165adef6b152eb0c155d2e6a7b3c36..db5adadd1b39c06bc41ae6f1b3d2f924b3ebf150 100644
> --- a/drivers/media/platform/qcom/iris/iris_vpu_buffer.c
> +++ b/drivers/media/platform/qcom/iris/iris_vpu_buffer.c
> @@ -1131,10 +1131,11 @@ static u32 iris_vpu_enc_arp_size(struct iris_inst *inst)
>
> inline bool is_scaling_enabled(struct iris_inst *inst)
> {
> - return inst->crop.left != inst->compose.left ||
> - inst->crop.top != inst->compose.top ||
> - inst->crop.width != inst->compose.width ||
> - inst->crop.height != inst->compose.height;
> + struct v4l2_pix_format_mplane *dst_fmt = &inst->fmt_dst->fmt.pix_mp;
> + struct v4l2_pix_format_mplane *src_fmt = &inst->fmt_src->fmt.pix_mp;
> +
> + return dst_fmt->width != src_fmt->width ||
> + dst_fmt->height != src_fmt->height;
> }
>
> static inline
>
Reviewed-by: Dikshita Agarwal <dikshita.agarwal@oss.qualcomm.com>
Thanks,
Dikshita
^ permalink raw reply [flat|nested] 14+ messages in thread* Re: [PATCH v5 3/6] media: qcom: iris: Add scale support for encoder
2025-11-10 10:23 ` [PATCH v5 3/6] media: qcom: iris: Add scale support " Wangao Wang
2025-11-10 13:54 ` Dikshita Agarwal
@ 2025-11-13 9:50 ` Bryan O'Donoghue
1 sibling, 0 replies; 14+ messages in thread
From: Bryan O'Donoghue @ 2025-11-13 9:50 UTC (permalink / raw)
To: Wangao Wang, Vikash Garodia, Dikshita Agarwal, Abhinav Kumar,
Mauro Carvalho Chehab
Cc: linux-media, linux-arm-msm, linux-kernel, Neil Armstrong,
quic_qiweil, quic_renjiang
On 10/11/2025 10:23, Wangao Wang wrote:
> Add members enc_scale_width, enc_scale_height to the struct iris_inst to
> support scale requirements.
>
> Add output width and height settings in iris_venc_s_fmt_output to
> enable scaling functionality.
>
> Add VPSS buffer to platform data, which the scale function requires.
>
> Tested-by: Neil Armstrong <neil.armstrong@linaro.org> # on SM8650-HDK
> Signed-off-by: Wangao Wang <wangao.wang@oss.qualcomm.com>
> ---
> .../platform/qcom/iris/iris_hfi_gen2_command.c | 12 +++++------
> .../platform/qcom/iris/iris_hfi_gen2_response.c | 2 ++
> drivers/media/platform/qcom/iris/iris_instance.h | 4 ++++
> .../media/platform/qcom/iris/iris_platform_gen2.c | 12 +++++++++++
> drivers/media/platform/qcom/iris/iris_venc.c | 23 +++++++++++++++++++++-
> drivers/media/platform/qcom/iris/iris_vpu_buffer.c | 9 +++++----
> 6 files changed, 51 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c b/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c
> index 30c0cbe22d1d34b5bbbc6bdbd3881dd43a6ff647..8945e94ec9e87750fc87bebf63f4fbb634d8571a 100644
> --- a/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c
> +++ b/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c
> @@ -194,8 +194,8 @@ static int iris_hfi_gen2_set_bitstream_resolution(struct iris_inst *inst, u32 pl
> payload_type = HFI_PAYLOAD_U32;
> } else {
> codec_align = inst->codec == V4L2_PIX_FMT_HEVC ? 32 : 16;
> - resolution = ALIGN(inst->fmt_dst->fmt.pix_mp.width, codec_align) << 16 |
> - ALIGN(inst->fmt_dst->fmt.pix_mp.height, codec_align);
> + resolution = ALIGN(inst->enc_scale_width, codec_align) << 16 |
> + ALIGN(inst->enc_scale_height, codec_align);
> inst_hfi_gen2->dst_subcr_params.bitstream_resolution = resolution;
> payload_type = HFI_PAYLOAD_32_PACKED;
> }
> @@ -237,10 +237,10 @@ static int iris_hfi_gen2_set_crop_offsets(struct iris_inst *inst, u32 plane)
> left_offset = inst->crop.left;
> top_offset = inst->crop.top;
> } else {
> - bottom_offset = (ALIGN(inst->fmt_dst->fmt.pix_mp.height, codec_align) -
> - inst->fmt_dst->fmt.pix_mp.height);
> - right_offset = (ALIGN(inst->fmt_dst->fmt.pix_mp.width, codec_align) -
> - inst->fmt_dst->fmt.pix_mp.width);
> + bottom_offset = (ALIGN(inst->enc_scale_height, codec_align) -
> + inst->enc_scale_height);
> + right_offset = (ALIGN(inst->enc_scale_width, codec_align) -
> + inst->enc_scale_width);
> left_offset = 0;
> top_offset = 0;
> }
> diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen2_response.c b/drivers/media/platform/qcom/iris/iris_hfi_gen2_response.c
> index 2f1f118eae4f6462ab1aa1d16844b34e6e699f1e..dc3e606b6ab429a1d15536fa8316afb1e384d674 100644
> --- a/drivers/media/platform/qcom/iris/iris_hfi_gen2_response.c
> +++ b/drivers/media/platform/qcom/iris/iris_hfi_gen2_response.c
> @@ -54,6 +54,8 @@ static u32 iris_hfi_gen2_buf_type_to_driver(struct iris_inst *inst,
> return BUF_SCRATCH_2;
> case HFI_BUFFER_PERSIST:
> return BUF_PERSIST;
> + case HFI_BUFFER_VPSS:
> + return BUF_VPSS;
> default:
> return 0;
> }
> diff --git a/drivers/media/platform/qcom/iris/iris_instance.h b/drivers/media/platform/qcom/iris/iris_instance.h
> index a9892988c10bc28e9b2d8c3b5482e99b5b9af623..0b36092fe4e7296da2f66aecf9083f7f1edc5459 100644
> --- a/drivers/media/platform/qcom/iris/iris_instance.h
> +++ b/drivers/media/platform/qcom/iris/iris_instance.h
> @@ -66,6 +66,8 @@ struct iris_fmt {
> * @hfi_rc_type: rate control type
> * @enc_raw_width: source image width for encoder instance
> * @enc_raw_height: source image height for encoder instance
> + * @enc_scale_width: scale width for encoder instance
> + * @enc_scale_height: scale height for encoder instance
> */
>
> struct iris_inst {
> @@ -106,6 +108,8 @@ struct iris_inst {
> u32 hfi_rc_type;
> u32 enc_raw_width;
> u32 enc_raw_height;
> + u32 enc_scale_width;
> + u32 enc_scale_height;
> };
>
> #endif
> diff --git a/drivers/media/platform/qcom/iris/iris_platform_gen2.c b/drivers/media/platform/qcom/iris/iris_platform_gen2.c
> index 36d69cc73986b74534a2912524c8553970fd862e..d3306189d902a1f42666010468c9e4e4316a66e1 100644
> --- a/drivers/media/platform/qcom/iris/iris_platform_gen2.c
> +++ b/drivers/media/platform/qcom/iris/iris_platform_gen2.c
> @@ -729,6 +729,10 @@ static const u32 sm8550_dec_op_int_buf_tbl[] = {
> BUF_DPB,
> };
>
> +static const u32 sm8550_enc_ip_int_buf_tbl[] = {
> + BUF_VPSS,
> +};
> +
> static const u32 sm8550_enc_op_int_buf_tbl[] = {
> BUF_BIN,
> BUF_COMV,
> @@ -816,6 +820,8 @@ struct iris_platform_data sm8550_data = {
> .dec_op_int_buf_tbl = sm8550_dec_op_int_buf_tbl,
> .dec_op_int_buf_tbl_size = ARRAY_SIZE(sm8550_dec_op_int_buf_tbl),
>
> + .enc_ip_int_buf_tbl = sm8550_enc_ip_int_buf_tbl,
> + .enc_ip_int_buf_tbl_size = ARRAY_SIZE(sm8550_enc_ip_int_buf_tbl),
> .enc_op_int_buf_tbl = sm8550_enc_op_int_buf_tbl,
> .enc_op_int_buf_tbl_size = ARRAY_SIZE(sm8550_enc_op_int_buf_tbl),
> };
> @@ -908,6 +914,8 @@ struct iris_platform_data sm8650_data = {
> .dec_op_int_buf_tbl = sm8550_dec_op_int_buf_tbl,
> .dec_op_int_buf_tbl_size = ARRAY_SIZE(sm8550_dec_op_int_buf_tbl),
>
> + .enc_ip_int_buf_tbl = sm8550_enc_ip_int_buf_tbl,
> + .enc_ip_int_buf_tbl_size = ARRAY_SIZE(sm8550_enc_ip_int_buf_tbl),
> .enc_op_int_buf_tbl = sm8550_enc_op_int_buf_tbl,
> .enc_op_int_buf_tbl_size = ARRAY_SIZE(sm8550_enc_op_int_buf_tbl),
> };
> @@ -989,6 +997,8 @@ struct iris_platform_data sm8750_data = {
> .dec_op_int_buf_tbl = sm8550_dec_op_int_buf_tbl,
> .dec_op_int_buf_tbl_size = ARRAY_SIZE(sm8550_dec_op_int_buf_tbl),
>
> + .enc_ip_int_buf_tbl = sm8550_enc_ip_int_buf_tbl,
> + .enc_ip_int_buf_tbl_size = ARRAY_SIZE(sm8550_enc_ip_int_buf_tbl),
> .enc_op_int_buf_tbl = sm8550_enc_op_int_buf_tbl,
> .enc_op_int_buf_tbl_size = ARRAY_SIZE(sm8550_enc_op_int_buf_tbl),
> };
> @@ -1077,6 +1087,8 @@ struct iris_platform_data qcs8300_data = {
> .dec_op_int_buf_tbl = sm8550_dec_op_int_buf_tbl,
> .dec_op_int_buf_tbl_size = ARRAY_SIZE(sm8550_dec_op_int_buf_tbl),
>
> + .enc_ip_int_buf_tbl = sm8550_enc_ip_int_buf_tbl,
> + .enc_ip_int_buf_tbl_size = ARRAY_SIZE(sm8550_enc_ip_int_buf_tbl),
> .enc_op_int_buf_tbl = sm8550_enc_op_int_buf_tbl,
> .enc_op_int_buf_tbl_size = ARRAY_SIZE(sm8550_enc_op_int_buf_tbl),
> };
> diff --git a/drivers/media/platform/qcom/iris/iris_venc.c b/drivers/media/platform/qcom/iris/iris_venc.c
> index 7ad747d2272f029e69a56572a188a032f898a3fb..f573408a3fc66e1bbc7814a8fc7953158e043fce 100644
> --- a/drivers/media/platform/qcom/iris/iris_venc.c
> +++ b/drivers/media/platform/qcom/iris/iris_venc.c
> @@ -70,6 +70,8 @@ int iris_venc_inst_init(struct iris_inst *inst)
>
> inst->enc_raw_width = DEFAULT_WIDTH;
> inst->enc_raw_height = DEFAULT_HEIGHT;
> + inst->enc_scale_width = DEFAULT_WIDTH;
> + inst->enc_scale_height = DEFAULT_HEIGHT;
>
> memcpy(&inst->fw_caps[0], &core->inst_fw_caps_enc[0],
> INST_FW_CAP_MAX * sizeof(struct platform_inst_fw_cap));
> @@ -188,15 +190,32 @@ int iris_venc_try_fmt(struct iris_inst *inst, struct v4l2_format *f)
>
> static int iris_venc_s_fmt_output(struct iris_inst *inst, struct v4l2_format *f)
> {
> + const struct iris_fmt *venc_fmt;
> struct v4l2_format *fmt;
> + u32 codec_align;
>
> iris_venc_try_fmt(inst, f);
>
> - if (!(find_format(inst, f->fmt.pix_mp.pixelformat, f->type)))
> + venc_fmt = find_format(inst, f->fmt.pix_mp.pixelformat, f->type);
> + if (!venc_fmt)
> return -EINVAL;
>
> + codec_align = venc_fmt->pixfmt == V4L2_PIX_FMT_HEVC ? 32 : 16;
> +
> fmt = inst->fmt_dst;
> fmt->type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
> + /*
> + * If output format size != input format size,
> + * it is considered a scaling case,
> + * and the scaled size needs to be saved.
> + */
> + if (f->fmt.pix_mp.width != inst->fmt_src->fmt.pix_mp.width ||
> + f->fmt.pix_mp.height != inst->fmt_src->fmt.pix_mp.height) {
> + inst->enc_scale_width = f->fmt.pix_mp.width;
> + inst->enc_scale_height = f->fmt.pix_mp.height;
> + fmt->fmt.pix_mp.width = ALIGN(f->fmt.pix_mp.width, codec_align);
> + fmt->fmt.pix_mp.height = ALIGN(f->fmt.pix_mp.height, codec_align);
> + }
> fmt->fmt.pix_mp.num_planes = 1;
> fmt->fmt.pix_mp.plane_fmt[0].bytesperline = 0;
> fmt->fmt.pix_mp.plane_fmt[0].sizeimage = iris_get_buffer_size(inst, BUF_OUTPUT);
> @@ -254,6 +273,8 @@ static int iris_venc_s_fmt_input(struct iris_inst *inst, struct v4l2_format *f)
>
> inst->enc_raw_width = f->fmt.pix_mp.width;
> inst->enc_raw_height = f->fmt.pix_mp.height;
> + inst->enc_scale_width = f->fmt.pix_mp.width;
> + inst->enc_scale_height = f->fmt.pix_mp.height;
>
> if (f->fmt.pix_mp.width != inst->crop.width ||
> f->fmt.pix_mp.height != inst->crop.height) {
> diff --git a/drivers/media/platform/qcom/iris/iris_vpu_buffer.c b/drivers/media/platform/qcom/iris/iris_vpu_buffer.c
> index 4463be05ce165adef6b152eb0c155d2e6a7b3c36..db5adadd1b39c06bc41ae6f1b3d2f924b3ebf150 100644
> --- a/drivers/media/platform/qcom/iris/iris_vpu_buffer.c
> +++ b/drivers/media/platform/qcom/iris/iris_vpu_buffer.c
> @@ -1131,10 +1131,11 @@ static u32 iris_vpu_enc_arp_size(struct iris_inst *inst)
>
> inline bool is_scaling_enabled(struct iris_inst *inst)
> {
> - return inst->crop.left != inst->compose.left ||
> - inst->crop.top != inst->compose.top ||
> - inst->crop.width != inst->compose.width ||
> - inst->crop.height != inst->compose.height;
> + struct v4l2_pix_format_mplane *dst_fmt = &inst->fmt_dst->fmt.pix_mp;
> + struct v4l2_pix_format_mplane *src_fmt = &inst->fmt_src->fmt.pix_mp;
> +
> + return dst_fmt->width != src_fmt->width ||
> + dst_fmt->height != src_fmt->height;
> }
>
> static inline
>
> --
> 2.43.0
>
Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH v5 4/6] media: qcom: iris: Add rotation support for encoder
2025-11-10 10:23 ` [PATCH v5 0/6] media: qcom: iris: encoder feature enhancements Wangao Wang
` (2 preceding siblings ...)
2025-11-10 10:23 ` [PATCH v5 3/6] media: qcom: iris: Add scale support " Wangao Wang
@ 2025-11-10 10:23 ` Wangao Wang
2025-11-10 10:23 ` [PATCH v5 5/6] media: qcom: iris: Add flip " Wangao Wang
` (2 subsequent siblings)
6 siblings, 0 replies; 14+ messages in thread
From: Wangao Wang @ 2025-11-10 10:23 UTC (permalink / raw)
To: Vikash Garodia, Dikshita Agarwal, Abhinav Kumar,
Bryan O'Donoghue, Mauro Carvalho Chehab
Cc: linux-media, linux-arm-msm, linux-kernel, Wangao Wang,
Neil Armstrong, quic_qiweil, quic_renjiang
Add rotation control for encoder, enabling V4L2_CID_ROTATE and handling
90/180/270 degree rotation.
Reviewed-by: Dikshita Agarwal <dikshita.agarwal@oss.qualcomm.com>
Co-developed-by: Neil Armstrong <neil.armstrong@linaro.org>
Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
Tested-by: Neil Armstrong <neil.armstrong@linaro.org> # on SM8650-HDK
Signed-off-by: Wangao Wang <wangao.wang@oss.qualcomm.com>
---
drivers/media/platform/qcom/iris/iris_ctrls.c | 34 +++++++++++++++
drivers/media/platform/qcom/iris/iris_ctrls.h | 1 +
.../platform/qcom/iris/iris_hfi_gen2_command.c | 41 ++++++++++++-----
.../platform/qcom/iris/iris_hfi_gen2_defines.h | 9 ++++
.../platform/qcom/iris/iris_platform_common.h | 1 +
.../media/platform/qcom/iris/iris_platform_gen2.c | 10 +++++
drivers/media/platform/qcom/iris/iris_utils.c | 6 +++
drivers/media/platform/qcom/iris/iris_utils.h | 1 +
drivers/media/platform/qcom/iris/iris_vpu_buffer.c | 51 +++++++++++++---------
9 files changed, 123 insertions(+), 31 deletions(-)
diff --git a/drivers/media/platform/qcom/iris/iris_ctrls.c b/drivers/media/platform/qcom/iris/iris_ctrls.c
index 754a5ad718bc37630bb861012301df7a2e7342a1..00949c207ddb0203e51df359214bf23c3d8265d0 100644
--- a/drivers/media/platform/qcom/iris/iris_ctrls.c
+++ b/drivers/media/platform/qcom/iris/iris_ctrls.c
@@ -98,6 +98,8 @@ static enum platform_inst_fw_cap_type iris_get_cap_id(u32 id)
return B_FRAME_QP_H264;
case V4L2_CID_MPEG_VIDEO_HEVC_B_FRAME_QP:
return B_FRAME_QP_HEVC;
+ case V4L2_CID_ROTATE:
+ return ROTATION;
default:
return INST_FW_CAP_MAX;
}
@@ -185,6 +187,8 @@ static u32 iris_get_v4l2_id(enum platform_inst_fw_cap_type cap_id)
return V4L2_CID_MPEG_VIDEO_H264_B_FRAME_QP;
case B_FRAME_QP_HEVC:
return V4L2_CID_MPEG_VIDEO_HEVC_B_FRAME_QP;
+ case ROTATION:
+ return V4L2_CID_ROTATE;
default:
return 0;
}
@@ -883,6 +887,36 @@ int iris_set_qp_range(struct iris_inst *inst, enum platform_inst_fw_cap_type cap
&range, sizeof(range));
}
+int iris_set_rotation(struct iris_inst *inst, enum platform_inst_fw_cap_type cap_id)
+{
+ const struct iris_hfi_command_ops *hfi_ops = inst->core->hfi_ops;
+ u32 hfi_id = inst->fw_caps[cap_id].hfi_id;
+ u32 hfi_val;
+
+ switch (inst->fw_caps[cap_id].value) {
+ case 0:
+ hfi_val = HFI_ROTATION_NONE;
+ return 0;
+ case 90:
+ hfi_val = HFI_ROTATION_90;
+ break;
+ case 180:
+ hfi_val = HFI_ROTATION_180;
+ break;
+ case 270:
+ hfi_val = HFI_ROTATION_270;
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ return hfi_ops->session_set_property(inst, hfi_id,
+ HFI_HOST_FLAGS_NONE,
+ iris_get_port_info(inst, cap_id),
+ HFI_PAYLOAD_U32,
+ &hfi_val, sizeof(u32));
+}
+
int iris_set_properties(struct iris_inst *inst, u32 plane)
{
const struct iris_hfi_command_ops *hfi_ops = inst->core->hfi_ops;
diff --git a/drivers/media/platform/qcom/iris/iris_ctrls.h b/drivers/media/platform/qcom/iris/iris_ctrls.h
index 30af333cc4941e737eb1ae83a6944b4192896e23..3ea0a00c7587a516f19bb7307a0eb9a60c856ab0 100644
--- a/drivers/media/platform/qcom/iris/iris_ctrls.h
+++ b/drivers/media/platform/qcom/iris/iris_ctrls.h
@@ -32,6 +32,7 @@ int iris_set_min_qp(struct iris_inst *inst, enum platform_inst_fw_cap_type cap_i
int iris_set_max_qp(struct iris_inst *inst, enum platform_inst_fw_cap_type cap_id);
int iris_set_frame_qp(struct iris_inst *inst, enum platform_inst_fw_cap_type cap_id);
int iris_set_qp_range(struct iris_inst *inst, enum platform_inst_fw_cap_type cap_id);
+int iris_set_rotation(struct iris_inst *inst, enum platform_inst_fw_cap_type cap_id);
int iris_set_properties(struct iris_inst *inst, u32 plane);
#endif
diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c b/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c
index 8945e94ec9e87750fc87bebf63f4fbb634d8571a..140f56c988f452227197b2b6a2070a2e07cc6e0e 100644
--- a/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c
+++ b/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c
@@ -180,22 +180,36 @@ static int iris_hfi_gen2_set_raw_resolution(struct iris_inst *inst, u32 plane)
sizeof(u32));
}
+static inline u32 iris_hfi_get_aligned_resolution(struct iris_inst *inst, u32 width, u32 height)
+{
+ u32 codec_align = inst->codec == V4L2_PIX_FMT_HEVC ? 32 : 16;
+
+ return (ALIGN(width, codec_align) << 16 | ALIGN(height, codec_align));
+}
+
static int iris_hfi_gen2_set_bitstream_resolution(struct iris_inst *inst, u32 plane)
{
struct iris_inst_hfi_gen2 *inst_hfi_gen2 = to_iris_inst_hfi_gen2(inst);
u32 port = iris_hfi_gen2_get_port(inst, plane);
enum hfi_packet_payload_info payload_type;
- u32 resolution, codec_align;
+ u32 width, height;
+ u32 resolution;
if (inst->domain == DECODER) {
- resolution = inst->fmt_src->fmt.pix_mp.width << 16 |
- inst->fmt_src->fmt.pix_mp.height;
+ width = inst->fmt_src->fmt.pix_mp.width;
+ height = inst->fmt_src->fmt.pix_mp.height;
+ resolution = iris_hfi_get_aligned_resolution(inst, width, height);
inst_hfi_gen2->src_subcr_params.bitstream_resolution = resolution;
payload_type = HFI_PAYLOAD_U32;
} else {
- codec_align = inst->codec == V4L2_PIX_FMT_HEVC ? 32 : 16;
- resolution = ALIGN(inst->enc_scale_width, codec_align) << 16 |
- ALIGN(inst->enc_scale_height, codec_align);
+ if (is_rotation_90_or_270(inst)) {
+ width = inst->enc_scale_height;
+ height = inst->enc_scale_width;
+ } else {
+ width = inst->enc_scale_width;
+ height = inst->enc_scale_height;
+ }
+ resolution = iris_hfi_get_aligned_resolution(inst, width, height);
inst_hfi_gen2->dst_subcr_params.bitstream_resolution = resolution;
payload_type = HFI_PAYLOAD_32_PACKED;
}
@@ -237,10 +251,17 @@ static int iris_hfi_gen2_set_crop_offsets(struct iris_inst *inst, u32 plane)
left_offset = inst->crop.left;
top_offset = inst->crop.top;
} else {
- bottom_offset = (ALIGN(inst->enc_scale_height, codec_align) -
- inst->enc_scale_height);
- right_offset = (ALIGN(inst->enc_scale_width, codec_align) -
- inst->enc_scale_width);
+ if (is_rotation_90_or_270(inst)) {
+ bottom_offset = (ALIGN(inst->enc_scale_width, codec_align) -
+ inst->enc_scale_width);
+ right_offset = (ALIGN(inst->enc_scale_height, codec_align) -
+ inst->enc_scale_height);
+ } else {
+ bottom_offset = (ALIGN(inst->enc_scale_height, codec_align) -
+ inst->enc_scale_height);
+ right_offset = (ALIGN(inst->enc_scale_width, codec_align) -
+ inst->enc_scale_width);
+ }
left_offset = 0;
top_offset = 0;
}
diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen2_defines.h b/drivers/media/platform/qcom/iris/iris_hfi_gen2_defines.h
index aa1f795f5626c1f76a32dd650302633877ce67be..4edcce7faf5e2f74bfecfdbf574391d5b1c9cca5 100644
--- a/drivers/media/platform/qcom/iris/iris_hfi_gen2_defines.h
+++ b/drivers/media/platform/qcom/iris/iris_hfi_gen2_defines.h
@@ -83,6 +83,15 @@ enum hfi_seq_header_mode {
};
#define HFI_PROP_SEQ_HEADER_MODE 0x03000149
+
+enum hfi_rotation {
+ HFI_ROTATION_NONE = 0x00000000,
+ HFI_ROTATION_90 = 0x00000001,
+ HFI_ROTATION_180 = 0x00000002,
+ HFI_ROTATION_270 = 0x00000003,
+};
+
+#define HFI_PROP_ROTATION 0x0300014b
#define HFI_PROP_SIGNAL_COLOR_INFO 0x03000155
#define HFI_PROP_PICTURE_TYPE 0x03000162
#define HFI_PROP_DEC_DEFAULT_HEADER 0x03000168
diff --git a/drivers/media/platform/qcom/iris/iris_platform_common.h b/drivers/media/platform/qcom/iris/iris_platform_common.h
index 58d05e0a112eed25faea027a34c719c89d6c3897..9a4232b1c64eea6ce909e1e311769dd958b84c6e 100644
--- a/drivers/media/platform/qcom/iris/iris_platform_common.h
+++ b/drivers/media/platform/qcom/iris/iris_platform_common.h
@@ -140,6 +140,7 @@ enum platform_inst_fw_cap_type {
P_FRAME_QP_HEVC,
B_FRAME_QP_H264,
B_FRAME_QP_HEVC,
+ ROTATION,
INST_FW_CAP_MAX,
};
diff --git a/drivers/media/platform/qcom/iris/iris_platform_gen2.c b/drivers/media/platform/qcom/iris/iris_platform_gen2.c
index d3306189d902a1f42666010468c9e4e4316a66e1..c1f83e179d441c45df8d6487dc87e137e482fb63 100644
--- a/drivers/media/platform/qcom/iris/iris_platform_gen2.c
+++ b/drivers/media/platform/qcom/iris/iris_platform_gen2.c
@@ -588,6 +588,16 @@ static struct platform_inst_fw_cap inst_fw_cap_sm8550_enc[] = {
.flags = CAP_FLAG_OUTPUT_PORT,
.set = iris_set_u32,
},
+ {
+ .cap_id = ROTATION,
+ .min = 0,
+ .max = 270,
+ .step_or_mask = 90,
+ .value = 0,
+ .hfi_id = HFI_PROP_ROTATION,
+ .flags = CAP_FLAG_OUTPUT_PORT,
+ .set = iris_set_rotation,
+ },
};
static struct platform_inst_caps platform_inst_cap_sm8550 = {
diff --git a/drivers/media/platform/qcom/iris/iris_utils.c b/drivers/media/platform/qcom/iris/iris_utils.c
index 85c70a62b1fd2c409fc18b28f64771cb0097a7fd..97465dfbdec1497b1111b9069fd56dff286b2d0e 100644
--- a/drivers/media/platform/qcom/iris/iris_utils.c
+++ b/drivers/media/platform/qcom/iris/iris_utils.c
@@ -124,3 +124,9 @@ int iris_check_core_mbps(struct iris_inst *inst)
return 0;
}
+
+bool is_rotation_90_or_270(struct iris_inst *inst)
+{
+ return inst->fw_caps[ROTATION].value == 90 ||
+ inst->fw_caps[ROTATION].value == 270;
+}
diff --git a/drivers/media/platform/qcom/iris/iris_utils.h b/drivers/media/platform/qcom/iris/iris_utils.h
index 75740181122f5bdf93d64d3f43b3a26a9fe97919..b5705d156431a5cf59d645ce988bc3a3c9b9c5e2 100644
--- a/drivers/media/platform/qcom/iris/iris_utils.h
+++ b/drivers/media/platform/qcom/iris/iris_utils.h
@@ -51,5 +51,6 @@ void iris_helper_buffers_done(struct iris_inst *inst, unsigned int type,
int iris_wait_for_session_response(struct iris_inst *inst, bool is_flush);
int iris_check_core_mbpf(struct iris_inst *inst);
int iris_check_core_mbps(struct iris_inst *inst);
+bool is_rotation_90_or_270(struct iris_inst *inst);
#endif
diff --git a/drivers/media/platform/qcom/iris/iris_vpu_buffer.c b/drivers/media/platform/qcom/iris/iris_vpu_buffer.c
index db5adadd1b39c06bc41ae6f1b3d2f924b3ebf150..1e54ace966c74956208d88f06837b97b1fd48e17 100644
--- a/drivers/media/platform/qcom/iris/iris_vpu_buffer.c
+++ b/drivers/media/platform/qcom/iris/iris_vpu_buffer.c
@@ -556,6 +556,22 @@ static u32 iris_vpu_dec_scratch1_size(struct iris_inst *inst)
iris_vpu_dec_line_size(inst);
}
+static inline u32 iris_vpu_enc_get_bitstream_width(struct iris_inst *inst)
+{
+ if (is_rotation_90_or_270(inst))
+ return inst->fmt_dst->fmt.pix_mp.height;
+ else
+ return inst->fmt_dst->fmt.pix_mp.width;
+}
+
+static inline u32 iris_vpu_enc_get_bitstream_height(struct iris_inst *inst)
+{
+ if (is_rotation_90_or_270(inst))
+ return inst->fmt_dst->fmt.pix_mp.width;
+ else
+ return inst->fmt_dst->fmt.pix_mp.height;
+}
+
static inline u32 size_bin_bitstream_enc(u32 width, u32 height,
u32 rc_type)
{
@@ -638,10 +654,9 @@ static inline u32 hfi_buffer_bin_enc(u32 width, u32 height,
static u32 iris_vpu_enc_bin_size(struct iris_inst *inst)
{
u32 num_vpp_pipes = inst->core->iris_platform_data->num_vpp_pipe;
+ u32 height = iris_vpu_enc_get_bitstream_height(inst);
+ u32 width = iris_vpu_enc_get_bitstream_width(inst);
u32 stage = inst->fw_caps[STAGE].value;
- struct v4l2_format *f = inst->fmt_dst;
- u32 height = f->fmt.pix_mp.height;
- u32 width = f->fmt.pix_mp.width;
u32 lcu_size;
if (inst->codec == V4L2_PIX_FMT_HEVC)
@@ -676,9 +691,8 @@ u32 hfi_buffer_comv_enc(u32 frame_width, u32 frame_height, u32 lcu_size,
static u32 iris_vpu_enc_comv_size(struct iris_inst *inst)
{
- struct v4l2_format *f = inst->fmt_dst;
- u32 height = f->fmt.pix_mp.height;
- u32 width = f->fmt.pix_mp.width;
+ u32 height = iris_vpu_enc_get_bitstream_height(inst);
+ u32 width = iris_vpu_enc_get_bitstream_width(inst);
u32 num_recon = 1;
u32 lcu_size = 16;
@@ -958,9 +972,8 @@ u32 hfi_buffer_non_comv_enc(u32 frame_width, u32 frame_height,
static u32 iris_vpu_enc_non_comv_size(struct iris_inst *inst)
{
u32 num_vpp_pipes = inst->core->iris_platform_data->num_vpp_pipe;
- struct v4l2_format *f = inst->fmt_dst;
- u32 height = f->fmt.pix_mp.height;
- u32 width = f->fmt.pix_mp.width;
+ u32 height = iris_vpu_enc_get_bitstream_height(inst);
+ u32 width = iris_vpu_enc_get_bitstream_width(inst);
u32 lcu_size = 16;
if (inst->codec == V4L2_PIX_FMT_HEVC) {
@@ -1051,9 +1064,8 @@ u32 hfi_buffer_line_enc_vpu33(u32 frame_width, u32 frame_height, bool is_ten_bit
static u32 iris_vpu_enc_line_size(struct iris_inst *inst)
{
u32 num_vpp_pipes = inst->core->iris_platform_data->num_vpp_pipe;
- struct v4l2_format *f = inst->fmt_dst;
- u32 height = f->fmt.pix_mp.height;
- u32 width = f->fmt.pix_mp.width;
+ u32 height = iris_vpu_enc_get_bitstream_height(inst);
+ u32 width = iris_vpu_enc_get_bitstream_width(inst);
u32 lcu_size = 16;
if (inst->codec == V4L2_PIX_FMT_HEVC) {
@@ -1069,9 +1081,8 @@ static u32 iris_vpu_enc_line_size(struct iris_inst *inst)
static u32 iris_vpu33_enc_line_size(struct iris_inst *inst)
{
u32 num_vpp_pipes = inst->core->iris_platform_data->num_vpp_pipe;
- struct v4l2_format *f = inst->fmt_dst;
- u32 height = f->fmt.pix_mp.height;
- u32 width = f->fmt.pix_mp.width;
+ u32 height = iris_vpu_enc_get_bitstream_height(inst);
+ u32 width = iris_vpu_enc_get_bitstream_width(inst);
u32 lcu_size = 16;
if (inst->codec == V4L2_PIX_FMT_HEVC) {
@@ -1292,9 +1303,8 @@ static inline u32 hfi_buffer_scratch1_enc(u32 frame_width, u32 frame_height,
static u32 iris_vpu_enc_scratch1_size(struct iris_inst *inst)
{
u32 num_vpp_pipes = inst->core->iris_platform_data->num_vpp_pipe;
- struct v4l2_format *f = inst->fmt_dst;
- u32 frame_height = f->fmt.pix_mp.height;
- u32 frame_width = f->fmt.pix_mp.width;
+ u32 frame_height = iris_vpu_enc_get_bitstream_height(inst);
+ u32 frame_width = iris_vpu_enc_get_bitstream_width(inst);
u32 num_ref = 1;
u32 lcu_size;
bool is_h265;
@@ -1390,9 +1400,8 @@ static inline u32 hfi_buffer_scratch2_enc(u32 frame_width, u32 frame_height,
static u32 iris_vpu_enc_scratch2_size(struct iris_inst *inst)
{
- struct v4l2_format *f = inst->fmt_dst;
- u32 frame_width = f->fmt.pix_mp.width;
- u32 frame_height = f->fmt.pix_mp.height;
+ u32 frame_height = iris_vpu_enc_get_bitstream_height(inst);
+ u32 frame_width = iris_vpu_enc_get_bitstream_width(inst);
u32 num_ref = 1;
return hfi_buffer_scratch2_enc(frame_width, frame_height, num_ref,
--
2.43.0
^ permalink raw reply related [flat|nested] 14+ messages in thread* [PATCH v5 5/6] media: qcom: iris: Add flip support for encoder
2025-11-10 10:23 ` [PATCH v5 0/6] media: qcom: iris: encoder feature enhancements Wangao Wang
` (3 preceding siblings ...)
2025-11-10 10:23 ` [PATCH v5 4/6] media: qcom: iris: Add rotation " Wangao Wang
@ 2025-11-10 10:23 ` Wangao Wang
2025-11-10 10:23 ` [PATCH v5 6/6] media: qcom: iris: Add intra refresh " Wangao Wang
2025-11-13 10:05 ` [PATCH v5 0/6] media: qcom: iris: encoder feature enhancements Bryan O'Donoghue
6 siblings, 0 replies; 14+ messages in thread
From: Wangao Wang @ 2025-11-10 10:23 UTC (permalink / raw)
To: Vikash Garodia, Dikshita Agarwal, Abhinav Kumar,
Bryan O'Donoghue, Mauro Carvalho Chehab
Cc: linux-media, linux-arm-msm, linux-kernel, Wangao Wang,
Neil Armstrong, quic_qiweil, quic_renjiang
Add support for V4L2_CID_HFLIP and V4L2_CID_VFLIP controls in encoder.
Reviewed-by: Dikshita Agarwal <dikshita.agarwal@oss.qualcomm.com>
Tested-by: Neil Armstrong <neil.armstrong@linaro.org> # on SM8650-HDK
Signed-off-by: Wangao Wang <wangao.wang@oss.qualcomm.com>
---
drivers/media/platform/qcom/iris/iris_ctrls.c | 27 ++++++++++++++++++++++
drivers/media/platform/qcom/iris/iris_ctrls.h | 1 +
.../platform/qcom/iris/iris_hfi_gen2_defines.h | 8 +++++++
.../platform/qcom/iris/iris_platform_common.h | 2 ++
.../media/platform/qcom/iris/iris_platform_gen2.c | 22 ++++++++++++++++++
5 files changed, 60 insertions(+)
diff --git a/drivers/media/platform/qcom/iris/iris_ctrls.c b/drivers/media/platform/qcom/iris/iris_ctrls.c
index 00949c207ddb0203e51df359214bf23c3d8265d0..8f74c12f2f41f23d75424819c707aff61ea61b33 100644
--- a/drivers/media/platform/qcom/iris/iris_ctrls.c
+++ b/drivers/media/platform/qcom/iris/iris_ctrls.c
@@ -100,6 +100,10 @@ static enum platform_inst_fw_cap_type iris_get_cap_id(u32 id)
return B_FRAME_QP_HEVC;
case V4L2_CID_ROTATE:
return ROTATION;
+ case V4L2_CID_HFLIP:
+ return HFLIP;
+ case V4L2_CID_VFLIP:
+ return VFLIP;
default:
return INST_FW_CAP_MAX;
}
@@ -189,6 +193,10 @@ static u32 iris_get_v4l2_id(enum platform_inst_fw_cap_type cap_id)
return V4L2_CID_MPEG_VIDEO_HEVC_B_FRAME_QP;
case ROTATION:
return V4L2_CID_ROTATE;
+ case HFLIP:
+ return V4L2_CID_HFLIP;
+ case VFLIP:
+ return V4L2_CID_VFLIP;
default:
return 0;
}
@@ -917,6 +925,25 @@ int iris_set_rotation(struct iris_inst *inst, enum platform_inst_fw_cap_type cap
&hfi_val, sizeof(u32));
}
+int iris_set_flip(struct iris_inst *inst, enum platform_inst_fw_cap_type cap_id)
+{
+ const struct iris_hfi_command_ops *hfi_ops = inst->core->hfi_ops;
+ u32 hfi_id = inst->fw_caps[cap_id].hfi_id;
+ u32 hfi_val = HFI_DISABLE_FLIP;
+
+ if (inst->fw_caps[HFLIP].value)
+ hfi_val |= HFI_HORIZONTAL_FLIP;
+
+ if (inst->fw_caps[VFLIP].value)
+ hfi_val |= HFI_VERTICAL_FLIP;
+
+ return hfi_ops->session_set_property(inst, hfi_id,
+ HFI_HOST_FLAGS_NONE,
+ iris_get_port_info(inst, cap_id),
+ HFI_PAYLOAD_U32_ENUM,
+ &hfi_val, sizeof(u32));
+}
+
int iris_set_properties(struct iris_inst *inst, u32 plane)
{
const struct iris_hfi_command_ops *hfi_ops = inst->core->hfi_ops;
diff --git a/drivers/media/platform/qcom/iris/iris_ctrls.h b/drivers/media/platform/qcom/iris/iris_ctrls.h
index 3ea0a00c7587a516f19bb7307a0eb9a60c856ab0..355a592049f3fcc715a1b9df44b4d1398b052653 100644
--- a/drivers/media/platform/qcom/iris/iris_ctrls.h
+++ b/drivers/media/platform/qcom/iris/iris_ctrls.h
@@ -33,6 +33,7 @@ int iris_set_max_qp(struct iris_inst *inst, enum platform_inst_fw_cap_type cap_i
int iris_set_frame_qp(struct iris_inst *inst, enum platform_inst_fw_cap_type cap_id);
int iris_set_qp_range(struct iris_inst *inst, enum platform_inst_fw_cap_type cap_id);
int iris_set_rotation(struct iris_inst *inst, enum platform_inst_fw_cap_type cap_id);
+int iris_set_flip(struct iris_inst *inst, enum platform_inst_fw_cap_type cap_id);
int iris_set_properties(struct iris_inst *inst, u32 plane);
#endif
diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen2_defines.h b/drivers/media/platform/qcom/iris/iris_hfi_gen2_defines.h
index 4edcce7faf5e2f74bfecfdbf574391d5b1c9cca5..0f92468dca91cbb2ca9b451ebce255180066b3a4 100644
--- a/drivers/media/platform/qcom/iris/iris_hfi_gen2_defines.h
+++ b/drivers/media/platform/qcom/iris/iris_hfi_gen2_defines.h
@@ -92,6 +92,14 @@ enum hfi_rotation {
};
#define HFI_PROP_ROTATION 0x0300014b
+
+enum hfi_flip {
+ HFI_DISABLE_FLIP = 0x00000000,
+ HFI_HORIZONTAL_FLIP = 0x00000001,
+ HFI_VERTICAL_FLIP = 0x00000002,
+};
+
+#define HFI_PROP_FLIP 0x0300014c
#define HFI_PROP_SIGNAL_COLOR_INFO 0x03000155
#define HFI_PROP_PICTURE_TYPE 0x03000162
#define HFI_PROP_DEC_DEFAULT_HEADER 0x03000168
diff --git a/drivers/media/platform/qcom/iris/iris_platform_common.h b/drivers/media/platform/qcom/iris/iris_platform_common.h
index 9a4232b1c64eea6ce909e1e311769dd958b84c6e..284d6bde6d6bcdf70016646d1c92e6ae7f067efc 100644
--- a/drivers/media/platform/qcom/iris/iris_platform_common.h
+++ b/drivers/media/platform/qcom/iris/iris_platform_common.h
@@ -141,6 +141,8 @@ enum platform_inst_fw_cap_type {
B_FRAME_QP_H264,
B_FRAME_QP_HEVC,
ROTATION,
+ HFLIP,
+ VFLIP,
INST_FW_CAP_MAX,
};
diff --git a/drivers/media/platform/qcom/iris/iris_platform_gen2.c b/drivers/media/platform/qcom/iris/iris_platform_gen2.c
index c1f83e179d441c45df8d6487dc87e137e482fb63..e74bdd00a4bb2f457ec9352e0acaebc820dae235 100644
--- a/drivers/media/platform/qcom/iris/iris_platform_gen2.c
+++ b/drivers/media/platform/qcom/iris/iris_platform_gen2.c
@@ -598,6 +598,28 @@ static struct platform_inst_fw_cap inst_fw_cap_sm8550_enc[] = {
.flags = CAP_FLAG_OUTPUT_PORT,
.set = iris_set_rotation,
},
+ {
+ .cap_id = HFLIP,
+ .min = 0,
+ .max = 1,
+ .step_or_mask = 1,
+ .value = 0,
+ .hfi_id = HFI_PROP_FLIP,
+ .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
+ CAP_FLAG_DYNAMIC_ALLOWED,
+ .set = iris_set_flip,
+ },
+ {
+ .cap_id = VFLIP,
+ .min = 0,
+ .max = 1,
+ .step_or_mask = 1,
+ .value = 0,
+ .hfi_id = HFI_PROP_FLIP,
+ .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
+ CAP_FLAG_DYNAMIC_ALLOWED,
+ .set = iris_set_flip,
+ },
};
static struct platform_inst_caps platform_inst_cap_sm8550 = {
--
2.43.0
^ permalink raw reply related [flat|nested] 14+ messages in thread* [PATCH v5 6/6] media: qcom: iris: Add intra refresh support for encoder
2025-11-10 10:23 ` [PATCH v5 0/6] media: qcom: iris: encoder feature enhancements Wangao Wang
` (4 preceding siblings ...)
2025-11-10 10:23 ` [PATCH v5 5/6] media: qcom: iris: Add flip " Wangao Wang
@ 2025-11-10 10:23 ` Wangao Wang
2025-11-13 10:05 ` [PATCH v5 0/6] media: qcom: iris: encoder feature enhancements Bryan O'Donoghue
6 siblings, 0 replies; 14+ messages in thread
From: Wangao Wang @ 2025-11-10 10:23 UTC (permalink / raw)
To: Vikash Garodia, Dikshita Agarwal, Abhinav Kumar,
Bryan O'Donoghue, Mauro Carvalho Chehab
Cc: linux-media, linux-arm-msm, linux-kernel, Wangao Wang,
Neil Armstrong, quic_qiweil, quic_renjiang
Add support for V4L2_CID_MPEG_VIDEO_INTRA_REFRESH_PERIOD and
V4L2_CID_MPEG_VIDEO_INTRA_REFRESH_PERIOD_TYPE controls.
Reviewed-by: Dikshita Agarwal <dikshita.agarwal@oss.qualcomm.com>
Tested-by: Neil Armstrong <neil.armstrong@linaro.org> # on SM8650-HDK
Signed-off-by: Wangao Wang <wangao.wang@oss.qualcomm.com>
---
drivers/media/platform/qcom/iris/iris_ctrls.c | 34 ++++++++++++++++++++++
drivers/media/platform/qcom/iris/iris_ctrls.h | 1 +
.../platform/qcom/iris/iris_hfi_gen2_defines.h | 2 ++
.../platform/qcom/iris/iris_platform_common.h | 2 ++
.../media/platform/qcom/iris/iris_platform_gen2.c | 19 ++++++++++++
5 files changed, 58 insertions(+)
diff --git a/drivers/media/platform/qcom/iris/iris_ctrls.c b/drivers/media/platform/qcom/iris/iris_ctrls.c
index 8f74c12f2f41f23d75424819c707aff61ea61b33..8c19aef6eb361e0ddf7f8dc45f6c67a90f16a04e 100644
--- a/drivers/media/platform/qcom/iris/iris_ctrls.c
+++ b/drivers/media/platform/qcom/iris/iris_ctrls.c
@@ -104,6 +104,10 @@ static enum platform_inst_fw_cap_type iris_get_cap_id(u32 id)
return HFLIP;
case V4L2_CID_VFLIP:
return VFLIP;
+ case V4L2_CID_MPEG_VIDEO_INTRA_REFRESH_PERIOD_TYPE:
+ return IR_TYPE;
+ case V4L2_CID_MPEG_VIDEO_INTRA_REFRESH_PERIOD:
+ return IR_PERIOD;
default:
return INST_FW_CAP_MAX;
}
@@ -197,6 +201,10 @@ static u32 iris_get_v4l2_id(enum platform_inst_fw_cap_type cap_id)
return V4L2_CID_HFLIP;
case VFLIP:
return V4L2_CID_VFLIP;
+ case IR_TYPE:
+ return V4L2_CID_MPEG_VIDEO_INTRA_REFRESH_PERIOD_TYPE;
+ case IR_PERIOD:
+ return V4L2_CID_MPEG_VIDEO_INTRA_REFRESH_PERIOD;
default:
return 0;
}
@@ -944,6 +952,32 @@ int iris_set_flip(struct iris_inst *inst, enum platform_inst_fw_cap_type cap_id)
&hfi_val, sizeof(u32));
}
+int iris_set_ir_period(struct iris_inst *inst, enum platform_inst_fw_cap_type cap_id)
+{
+ const struct iris_hfi_command_ops *hfi_ops = inst->core->hfi_ops;
+ struct vb2_queue *q = v4l2_m2m_get_dst_vq(inst->m2m_ctx);
+ u32 ir_period = inst->fw_caps[cap_id].value;
+ u32 ir_type = 0;
+
+ if (inst->fw_caps[IR_TYPE].value ==
+ V4L2_CID_MPEG_VIDEO_INTRA_REFRESH_PERIOD_TYPE_RANDOM) {
+ if (vb2_is_streaming(q))
+ return 0;
+ ir_type = HFI_PROP_IR_RANDOM_PERIOD;
+ } else if (inst->fw_caps[IR_TYPE].value ==
+ V4L2_CID_MPEG_VIDEO_INTRA_REFRESH_PERIOD_TYPE_CYCLIC) {
+ ir_type = HFI_PROP_IR_CYCLIC_PERIOD;
+ } else {
+ return -EINVAL;
+ }
+
+ return hfi_ops->session_set_property(inst, ir_type,
+ HFI_HOST_FLAGS_NONE,
+ iris_get_port_info(inst, cap_id),
+ HFI_PAYLOAD_U32,
+ &ir_period, sizeof(u32));
+}
+
int iris_set_properties(struct iris_inst *inst, u32 plane)
{
const struct iris_hfi_command_ops *hfi_ops = inst->core->hfi_ops;
diff --git a/drivers/media/platform/qcom/iris/iris_ctrls.h b/drivers/media/platform/qcom/iris/iris_ctrls.h
index 355a592049f3fcc715a1b9df44b4d1398b052653..9518803577bc39f5c1339a49878dd0c3e8f510ad 100644
--- a/drivers/media/platform/qcom/iris/iris_ctrls.h
+++ b/drivers/media/platform/qcom/iris/iris_ctrls.h
@@ -34,6 +34,7 @@ int iris_set_frame_qp(struct iris_inst *inst, enum platform_inst_fw_cap_type cap
int iris_set_qp_range(struct iris_inst *inst, enum platform_inst_fw_cap_type cap_id);
int iris_set_rotation(struct iris_inst *inst, enum platform_inst_fw_cap_type cap_id);
int iris_set_flip(struct iris_inst *inst, enum platform_inst_fw_cap_type cap_id);
+int iris_set_ir_period(struct iris_inst *inst, enum platform_inst_fw_cap_type cap_id);
int iris_set_properties(struct iris_inst *inst, u32 plane);
#endif
diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen2_defines.h b/drivers/media/platform/qcom/iris/iris_hfi_gen2_defines.h
index 0f92468dca91cbb2ca9b451ebce255180066b3a4..9e8fdddf2aef439e7f133c9bb2fafa6d95062b02 100644
--- a/drivers/media/platform/qcom/iris/iris_hfi_gen2_defines.h
+++ b/drivers/media/platform/qcom/iris/iris_hfi_gen2_defines.h
@@ -70,6 +70,7 @@ enum hfi_rate_control {
#define HFI_PROP_QP_PACKED 0x0300012e
#define HFI_PROP_MIN_QP_PACKED 0x0300012f
#define HFI_PROP_MAX_QP_PACKED 0x03000130
+#define HFI_PROP_IR_RANDOM_PERIOD 0x03000131
#define HFI_PROP_TOTAL_BITRATE 0x0300013b
#define HFI_PROP_MAX_GOP_FRAMES 0x03000146
#define HFI_PROP_MAX_B_FRAMES 0x03000147
@@ -108,6 +109,7 @@ enum hfi_flip {
#define HFI_PROP_BUFFER_MARK 0x0300016c
#define HFI_PROP_RAW_RESOLUTION 0x03000178
#define HFI_PROP_TOTAL_PEAK_BITRATE 0x0300017C
+#define HFI_PROP_IR_CYCLIC_PERIOD 0x0300017E
#define HFI_PROP_COMV_BUFFER_COUNT 0x03000193
#define HFI_PROP_END 0x03FFFFFF
diff --git a/drivers/media/platform/qcom/iris/iris_platform_common.h b/drivers/media/platform/qcom/iris/iris_platform_common.h
index 284d6bde6d6bcdf70016646d1c92e6ae7f067efc..30b98e769ad34c2b63dd63e7714bfeaa5b4f162c 100644
--- a/drivers/media/platform/qcom/iris/iris_platform_common.h
+++ b/drivers/media/platform/qcom/iris/iris_platform_common.h
@@ -143,6 +143,8 @@ enum platform_inst_fw_cap_type {
ROTATION,
HFLIP,
VFLIP,
+ IR_TYPE,
+ IR_PERIOD,
INST_FW_CAP_MAX,
};
diff --git a/drivers/media/platform/qcom/iris/iris_platform_gen2.c b/drivers/media/platform/qcom/iris/iris_platform_gen2.c
index e74bdd00a4bb2f457ec9352e0acaebc820dae235..ce54aac766e2bf76fa2de64c884724ca63f05dcb 100644
--- a/drivers/media/platform/qcom/iris/iris_platform_gen2.c
+++ b/drivers/media/platform/qcom/iris/iris_platform_gen2.c
@@ -620,6 +620,25 @@ static struct platform_inst_fw_cap inst_fw_cap_sm8550_enc[] = {
CAP_FLAG_DYNAMIC_ALLOWED,
.set = iris_set_flip,
},
+ {
+ .cap_id = IR_TYPE,
+ .min = V4L2_CID_MPEG_VIDEO_INTRA_REFRESH_PERIOD_TYPE_RANDOM,
+ .max = V4L2_CID_MPEG_VIDEO_INTRA_REFRESH_PERIOD_TYPE_CYCLIC,
+ .step_or_mask = BIT(V4L2_CID_MPEG_VIDEO_INTRA_REFRESH_PERIOD_TYPE_RANDOM) |
+ BIT(V4L2_CID_MPEG_VIDEO_INTRA_REFRESH_PERIOD_TYPE_CYCLIC),
+ .value = V4L2_CID_MPEG_VIDEO_INTRA_REFRESH_PERIOD_TYPE_RANDOM,
+ .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU,
+ },
+ {
+ .cap_id = IR_PERIOD,
+ .min = 0,
+ .max = INT_MAX,
+ .step_or_mask = 1,
+ .value = 0,
+ .flags = CAP_FLAG_OUTPUT_PORT |
+ CAP_FLAG_DYNAMIC_ALLOWED,
+ .set = iris_set_ir_period,
+ },
};
static struct platform_inst_caps platform_inst_cap_sm8550 = {
--
2.43.0
^ permalink raw reply related [flat|nested] 14+ messages in thread* Re: [PATCH v5 0/6] media: qcom: iris: encoder feature enhancements
2025-11-10 10:23 ` [PATCH v5 0/6] media: qcom: iris: encoder feature enhancements Wangao Wang
` (5 preceding siblings ...)
2025-11-10 10:23 ` [PATCH v5 6/6] media: qcom: iris: Add intra refresh " Wangao Wang
@ 2025-11-13 10:05 ` Bryan O'Donoghue
6 siblings, 0 replies; 14+ messages in thread
From: Bryan O'Donoghue @ 2025-11-13 10:05 UTC (permalink / raw)
To: Wangao Wang, Vikash Garodia, Dikshita Agarwal, Abhinav Kumar,
Mauro Carvalho Chehab
Cc: linux-media, linux-arm-msm, linux-kernel, Neil Armstrong,
quic_qiweil, quic_renjiang
On 10/11/2025 10:23, Wangao Wang wrote:
> Hi All,
>
> This patch series introduces several enhancements to the Qualcomm Iris
> encoder driver, improving support for V4L2 controls and enabling more
> video encoding features.
>
> All patches have been tested with v4l2-compliance, v4l2-ctl and
> on QCS8300 for encoder.
>
> Commands used for V4l2-ctl validation:
>
> Scale:
> v4l2-ctl --verbose -d /dev/video1 \
> --set-fmt-video-out=width=1920,height=1080,pixelformat=NV12 \
> --set-selection-output target=crop,width=1920,height=1080 \
> --set-fmt-video=width=1280,height=720,pixelformat=H264 \
> --stream-mmap --stream-out-mmap \
> --stream-from=input_nv12_1080p.yuv \
> --stream-to=output/scale_720p_output.h264
>
> Flip:
> v4l2-ctl --verbose -d /dev/video1 \
> --set-fmt-video-out=width=1920,height=1080,pixelformat=NV12 \
> --set-selection-output target=crop,width=1920,height=1080 \
> --set-fmt-video=pixelformat=H264 --stream-mmap --stream-out-mmap \
> --stream-from=input_nv12_1080p.yuv \
> --stream-to=output/vertical_flip.h264 \
> --set-ctrl vertical_flip=1
>
> v4l2-ctl --verbose -d /dev/video1 \
> --set-fmt-video-out=width=1920,height=1080,pixelformat=NV12 \
> --set-selection-output target=crop,width=1920,height=1080 \
> --set-fmt-video=pixelformat=H264 --stream-mmap --stream-out-mmap \
> --stream-from=input_nv12_1080p.yuv \
> --stream-to=output/horizontal_flip.h264 \
> --set-ctrl horizontal_flip=1
>
> Rotate:
> v4l2-ctl --verbose -d /dev/video1 \
> --set-fmt-video-out=width=1920,height=1080,pixelformat=NV12 \
> --set-selection-output target=crop,width=1920,height=1080 \
> --set-fmt-video=pixelformat=H264 --stream-mmap --stream-out-mmap \
> --stream-from=input_nv12_1080p.yuv \
> --stream-to=output/rotate90.h264 \
> --set-ctrl rotate=90
>
> v4l2-ctl --verbose -d /dev/video1 \
> --set-fmt-video-out=width=1920,height=1080,pixelformat=NV12 \
> --set-selection-output target=crop,width=1920,height=1080 \
> --set-fmt-video=pixelformat=H264 --stream-mmap --stream-out-mmap \
> --stream-from=input_nv12_1080p.yuv \
> --stream-to=output/rotate180.h264 \
> --set-ctrl rotate=180
>
> v4l2-ctl --verbose -d /dev/video1 \
> --set-fmt-video-out=width=1920,height=1080,pixelformat=NV12 \
> --set-selection-output target=crop,width=1920,height=1080 \
> --set-fmt-video=pixelformat=H264 --stream-mmap --stream-out-mmap \
> --stream-from=input_nv12_1080p.yuv \
> --stream-to=output/rotate270.h264 \
> --set-ctrl rotate=270
>
> Intra Refresh:
> Testing of this feature requires the use of this application.
> https://github.com/quic/v4l-video-test-app
>
> The result of v4l2-compliance on QCS8300:
> v4l2-compliance 1.31.0-5378, 64 bits, 64-bit time_t
> v4l2-compliance SHA: 2ed8da243dd1 2025-06-30 08:18:40
>
> Compliance test for iris_driver device /dev/video1:
>
> Driver Info:
> Driver name : iris_driver
> Card type : Iris Encoder
> Bus info : platform:aa00000.video-codec
> Driver version : 6.17.0
> Capabilities : 0x84204000
> Video Memory-to-Memory Multiplanar
> Streaming
> Extended Pix Format
> Device Capabilities
> Device Caps : 0x04204000
> Video Memory-to-Memory Multiplanar
> Streaming
> Extended Pix Format
> Detected Stateful Encoder
>
> Required ioctls:
> test VIDIOC_QUERYCAP: OK
> test invalid ioctls: OK
>
> Allow for multiple opens:
> test second /dev/video1 open: OK
> test VIDIOC_QUERYCAP: OK
> test VIDIOC_G/S_PRIORITY: OK
> test for unlimited opens: OK
>
> Debug ioctls:
> test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
> test VIDIOC_LOG_STATUS: OK (Not Supported)
>
> Input ioctls:
> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
> test VIDIOC_ENUMAUDIO: OK (Not Supported)
> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
> test VIDIOC_G/S_AUDIO: OK (Not Supported)
> Inputs: 0 Audio Inputs: 0 Tuners: 0
>
> Output ioctls:
> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
> Outputs: 0 Audio Outputs: 0 Modulators: 0
>
> Input/Output configuration ioctls:
> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
> test VIDIOC_G/S_EDID: OK (Not Supported)
>
> Control ioctls:
> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK
> test VIDIOC_QUERYCTRL: OK
> test VIDIOC_G/S_CTRL: OK
> test VIDIOC_G/S/TRY_EXT_CTRLS: OK
> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK
> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
> Standard Controls: 43 Private Controls: 0
>
> Format ioctls:
> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
> test VIDIOC_G/S_PARM: OK
> test VIDIOC_G_FBUF: OK (Not Supported)
> test VIDIOC_G_FMT: OK
> test VIDIOC_TRY_FMT: OK
> test VIDIOC_S_FMT: OK
> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
> test Cropping: OK
> test Composing: OK (Not Supported)
> test Scaling: OK (Not Supported)
>
> Codec ioctls:
> test VIDIOC_(TRY_)ENCODER_CMD: OK
> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
>
> Buffer ioctls:
> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
> test CREATE_BUFS maximum buffers: OK
> test VIDIOC_REMOVE_BUFS: OK
> test VIDIOC_EXPBUF: OK
> test Requests: OK (Not Supported)
> test blocking wait: OK
>
> Test input 0:
>
> Streaming ioctls:
> test read/write: OK (Not Supported)
> Video Capture Multiplanar: Captured 61 buffers
> test MMAP (select, REQBUFS): OK
> Video Capture Multiplanar: Captured 61 buffers
> test MMAP (epoll, REQBUFS): OK
> Video Capture Multiplanar: Captured 61 buffers
> test MMAP (select, CREATE_BUFS): OK
> Video Capture Multiplanar: Captured 61 buffers
> test MMAP (epoll, CREATE_BUFS): OK
> test USERPTR (select): OK (Not Supported)
> test DMABUF: Cannot test, specify --expbuf-device
>
> Total for iris_driver device /dev/video1: 54, Succeeded: 54, Failed: 0, Warnings: 0
>
> Signed-off-by: Wangao Wang <wangao.wang@oss.qualcomm.com>
> ---
> Changes in v5:
> - Move crop_offset modification to 2nd patch.(Dikshita)
> - Fix missing braces.(Dikshita)
> - Link to v4: https://lore.kernel.org/r/20251106-iris_encoder_enhancements-v4-0-5d6cff963f1b@oss.qualcomm.com
>
> Changes in v4:
> - Split 'improve alignment' and 'crop offset' into two patches.(bod)
> - Modify the comments for the enc_raw_* variables.(Vikash)
> - Link to v3: https://lore.kernel.org/r/20251104-iris_encoder_enhancements-v3-0-63b0c431b4d0@oss.qualcomm.com
>
> Changes in v3:
> - Restore crop offset support for the input port.(Dikshita)
> - Set the output port's left and top offset directly to 0.(Dikshita)
> - fix the issue in iris_vpu_enc_line_size.(Neil Armstrong)
> - Link to v2: https://lore.kernel.org/r/20251031-iris_encoder_enhancements-v2-0-319cd75cbb45@oss.qualcomm.com
>
> Changes in v2:
> - Split 'improve alignment' and 'enable scale' into two patches.(bod)
> - HFI_PROP_RAW_RESOLUTION uses the actual YUV
> resolution.(Vikash,Dikshita)
> - Rename enc_bitstream_* to enc_scale_*.(Dikshita)
> - Add comment for scale case.(Dikshita)
> - Make the resolution assignment into an inline function.(bod)
> - Shorten the long chain that checks whether scaling is enabled.(bod)
> - Correct the handling of rotation in crop offsets.(Dikshita)
> - Move VPSS buffer things into scale patch.(Dikshita)
> - Link to v1: https://lore.kernel.org/r/20251015092708.3703-1-wangao.wang@oss.qualcomm.com
>
> ---
> Wangao Wang (6):
> media: qcom: iris: Improve format alignment for encoder
> media: qcom: iris: Improve crop_offset handling for encoder
> media: qcom: iris: Add scale support for encoder
> media: qcom: iris: Add rotation support for encoder
> media: qcom: iris: Add flip support for encoder
> media: qcom: iris: Add intra refresh support for encoder
>
> drivers/media/platform/qcom/iris/iris_ctrls.c | 95 ++++++++++++++++++++++
> drivers/media/platform/qcom/iris/iris_ctrls.h | 3 +
> .../platform/qcom/iris/iris_hfi_gen2_command.c | 56 ++++++++++---
> .../platform/qcom/iris/iris_hfi_gen2_defines.h | 19 +++++
> .../platform/qcom/iris/iris_hfi_gen2_response.c | 2 +
> drivers/media/platform/qcom/iris/iris_instance.h | 8 ++
> .../platform/qcom/iris/iris_platform_common.h | 5 ++
> .../media/platform/qcom/iris/iris_platform_gen2.c | 63 ++++++++++++++
> drivers/media/platform/qcom/iris/iris_utils.c | 6 ++
> drivers/media/platform/qcom/iris/iris_utils.h | 1 +
> drivers/media/platform/qcom/iris/iris_venc.c | 33 +++++++-
> drivers/media/platform/qcom/iris/iris_vpu_buffer.c | 60 ++++++++------
> 12 files changed, 310 insertions(+), 41 deletions(-)
> ---
> base-commit: 13863a59e410cab46d26751941980dc8f088b9b3
> change-id: 20251017-iris_encoder_enhancements-f2d1967b29f9
>
> Best regards,
> --
> Wangao Wang <wangao.wang@oss.qualcomm.com>
>
Please rebase
commit 29ae148fa88934bfd81af2a616816f9e22559b7c (HEAD ->
bod-media-commiters-next-25-11-13, media-committers/next,
media-committers/HEAD, bod-media-committers/next,
bod-media-committers/HEAD, media-committers/next-25-11-13)
Merge: 97e8e73777ab2 e9a6fb0bcdd76
Author: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
Date: Tue Nov 11 12:44:28 2025 +0100
Merge tag 'v6.18-rc5' into media-next
Linux 6.18-rc5
* tag 'v6.18-rc5': (1016 commits)
Linux 6.18-rc5
kbuild: Let kernel-doc.py use PYTHON3 override
rtc: rx8025: fix incorrect register reference
Revert "drm/nouveau: set DMA mask before creating the flush page"
io_uring: fix regbuf vector size truncation
compiler_types: Move unused static inline functions warning to W=2
smb: client: validate change notify buffer before copy
tracing/tools: Fix incorrcet short option in usage text for --threads
drm/xe: Enforce correct user fence signaling order using
x86/microcode/AMD: Add more known models to entry sign checking
drm/xe: Do clean shutdown also when using flr
drm/xe: Move declarations under conditional branch
drm/xe/guc: Synchronize Dead CT worker with unbind
tracing: Fix memory leaks in create_field_var()
ring-buffer: Do not warn in ring_buffer_map_get_reader() when
reader catches up
tracing: tprobe-events: Fix to put tracepoint_user when disable
the tprobe
tracing: tprobe-events: Fix to register tracepoint correctly
gpio: tb10x: Drop unused tb10x_set_bits() function
drm/amd/display: Enable mst when it's detected but yet to be
initialized
drm/amdgpu: Fix wait after reset sequence in S3
b4 shazam
20251110-iris_encoder_enhancements-v5-4-1dbb19968bd5@oss.qualcomm.com
Looking up
https://lore.kernel.org/all/20251110-iris_encoder_enhancements-v5-4-1dbb19968bd5@oss.qualcomm.com/
Grabbing thread from
lore.kernel.org/all/20251110-iris_encoder_enhancements-v5-4-1dbb19968bd5@oss.qualcomm.com/t.mbox.gz
Checking for newer revisions
Grabbing search results from lore.kernel.org
Analyzing 13 messages in the thread
Analyzing 36 code-review messages
Checking attestation on all messages, may take a moment...
---
✓ [PATCH v5 1/6] media: qcom: iris: Improve format alignment for encoder
+ Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org> (✓
DKIM/kernel.org)
+ Reviewed-by: Dikshita Agarwal <dikshita.agarwal@oss.qualcomm.com>
(✓ DKIM/oss.qualcomm.com)
✓ [PATCH v5 2/6] media: qcom: iris: Improve crop_offset handling for
encoder
+ Reviewed-by: Dikshita Agarwal <dikshita.agarwal@oss.qualcomm.com>
(✓ DKIM/oss.qualcomm.com)
✓ [PATCH v5 3/6] media: qcom: iris: Add scale support for encoder
+ Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org> (✓
DKIM/linaro.org)
+ Reviewed-by: Dikshita Agarwal <dikshita.agarwal@oss.qualcomm.com>
(✓ DKIM/oss.qualcomm.com)
✓ [PATCH v5 4/6] media: qcom: iris: Add rotation support for encoder
✓ [PATCH v5 5/6] media: qcom: iris: Add flip support for encoder
✓ [PATCH v5 6/6] media: qcom: iris: Add intra refresh support for encoder
---
✗ No key: ed25519/wangao.wang@oss.qualcomm.com
✓ Signed: DKIM/oss.qualcomm.com
---
Total patches: 6
---
Applying: media: qcom: iris: Improve format alignment for encoder
Applying: media: qcom: iris: Improve crop_offset handling for encoder
Applying: media: qcom: iris: Add scale support for encoder
Applying: media: qcom: iris: Add rotation support for encoder
Applying: media: qcom: iris: Add flip support for encoder
Applying: media: qcom: iris: Add intra refresh support for encoder
Patch failed at 0006 media: qcom: iris: Add intra refresh support for
encoder
error: patch failed:
drivers/media/platform/qcom/iris/iris_hfi_gen2_defines.h:108
error: drivers/media/platform/qcom/iris/iris_hfi_gen2_defines.h: patch
does not apply
hint: Use 'git am --show-current-patch=diff' to see the failed patch
hint: When you have resolved this problem, run "git am --continue".
hint: If you prefer to skip this patch, run "git am --skip" instead.
hint: To restore the original branch and stop patching, run "git am
--abort".
hint: Disable this message with "git config set advice.mergeConflict false"
^ permalink raw reply [flat|nested] 14+ messages in thread