Re: [PATCH v2 2/2] media: qcom: iris: Add request key frame support for encoder

From: Dmitry Baryshkov

Date: Sun Jun 07 2026 - 16:38:27 EST


On Thu, Jun 04, 2026 at 04:00:39PM +0800, Wangao Wang wrote:
> Add request key frame support for both gen1 and gen2 encoders by enabling
>
> V4L2_CID_MPEG_VIDEO_FORCE_KEY_FRAME.
>
> Signed-off-by: Wangao Wang <wangao.wang@xxxxxxxxxxxxxxxx>
> ---
> drivers/media/platform/qcom/iris/iris_ctrls.c | 22 ++++++++++++++++++++++
> drivers/media/platform/qcom/iris/iris_ctrls.h | 1 +
> drivers/media/platform/qcom/iris/iris_hfi_gen1.c | 10 ++++++++++
> .../platform/qcom/iris/iris_hfi_gen1_command.c | 3 +++
> .../platform/qcom/iris/iris_hfi_gen1_defines.h | 1 +
> drivers/media/platform/qcom/iris/iris_hfi_gen2.c | 12 +++++++++++-
> .../platform/qcom/iris/iris_hfi_gen2_defines.h | 7 +++++++
> .../platform/qcom/iris/iris_platform_common.h | 1 +
> 8 files changed, 56 insertions(+), 1 deletion(-)
>
> @@ -1477,6 +1481,24 @@ int iris_set_layer_bitrate(struct iris_inst *inst, enum platform_inst_fw_cap_typ
> &bitrate, sizeof(u32));
> }
>
> +int iris_set_req_sync_frame(struct iris_inst *inst, enum platform_inst_fw_cap_type cap_id)
> +{
> + const struct iris_hfi_session_ops *hfi_ops = inst->hfi_session_ops;
> + u32 hfi_id = inst->fw_caps[cap_id].hfi_id;
> + u32 hfi_val = 0;
> +
> + if (inst->fw_caps[PREPEND_SPSPPS_TO_IDR].value)
> + hfi_val = HFI_SYNC_FRAME_REQUEST_WITH_PREFIX_SEQ_HDR;
> + else
> + hfi_val = HFI_SYNC_FRAME_REQUEST_WITHOUT_SEQ_HDR;
> +
> + 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_session_ops *hfi_ops = inst->hfi_session_ops;
> diff --git a/drivers/media/platform/qcom/iris/iris_ctrls.h b/drivers/media/platform/qcom/iris/iris_ctrls.h
> index 3c462ec9190be8935176b290588f224fe4f144a4..8d8bbef960076c08e5af0f65920dde187f24a313 100644
> --- a/drivers/media/platform/qcom/iris/iris_ctrls.h
> +++ b/drivers/media/platform/qcom/iris/iris_ctrls.h
> @@ -47,6 +47,7 @@ int iris_set_layer_type(struct iris_inst *inst, enum platform_inst_fw_cap_type c
> int iris_set_layer_count_gen1(struct iris_inst *inst, enum platform_inst_fw_cap_type cap_id);
> int iris_set_layer_count_gen2(struct iris_inst *inst, enum platform_inst_fw_cap_type cap_id);
> int iris_set_layer_bitrate(struct iris_inst *inst, enum platform_inst_fw_cap_type cap_id);
> +int iris_set_req_sync_frame(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_gen1.c b/drivers/media/platform/qcom/iris/iris_hfi_gen1.c
> index eff9216bb50143c0d752051a6400605bbaf3803e..04c78417dbae33dff1cc7099e6f105caa606048e 100644
> --- a/drivers/media/platform/qcom/iris/iris_hfi_gen1.c
> +++ b/drivers/media/platform/qcom/iris/iris_hfi_gen1.c
> @@ -375,6 +375,16 @@ static const struct platform_inst_fw_cap inst_fw_cap_sm8250_enc[] = {
> CAP_FLAG_DYNAMIC_ALLOWED,
> .set = iris_set_bitrate_gen1,
> },
> + {
> + .cap_id = REQUEST_SYNC_FRAME,
> + .min = 0,
> + .max = 0,
> + .step_or_mask = 0,
> + .value = 0,

How does it work if min = max = 0?

> + .hfi_id = HFI_PROPERTY_CONFIG_VENC_REQUEST_SYNC_FRAME,
> + .flags = CAP_FLAG_INPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED,
> + .set = iris_set_req_sync_frame,
> + },
> };
>

--
With best wishes
Dmitry