summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/media/platform/qcom/iris/iris_ctrls.c19
-rw-r--r--drivers/media/platform/qcom/iris/iris_ctrls.h1
-rw-r--r--drivers/media/platform/qcom/iris/iris_hfi_gen2.c10
-rw-r--r--drivers/media/platform/qcom/iris/iris_hfi_gen2_defines.h1
-rw-r--r--drivers/media/platform/qcom/iris/iris_platform_common.h1
5 files changed, 32 insertions, 0 deletions
diff --git a/drivers/media/platform/qcom/iris/iris_ctrls.c b/drivers/media/platform/qcom/iris/iris_ctrls.c
index 2918a7df0b40..bf17d310eac0 100644
--- a/drivers/media/platform/qcom/iris/iris_ctrls.c
+++ b/drivers/media/platform/qcom/iris/iris_ctrls.c
@@ -1499,6 +1499,25 @@ int iris_set_req_sync_frame(struct iris_inst *inst, enum platform_inst_fw_cap_ty
&hfi_val, sizeof(u32));
}
+int iris_set_time_delta_based_rc(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 value = inst->fw_caps[cap_id].value;
+
+ /*
+ * Disable time-delta-based rate control (value = 0).
+ * This overrides the firmware's default (enabled), ensuring the
+ * firmware uses the configured bitrate target rather than calculating
+ * bitrate from frame timing.
+ */
+ return hfi_ops->session_set_property(inst, hfi_id,
+ HFI_HOST_FLAGS_NONE,
+ iris_get_port_info(inst, cap_id),
+ HFI_PAYLOAD_U32,
+ &value, 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 8d8bbef96007..5180d53d3c90 100644
--- a/drivers/media/platform/qcom/iris/iris_ctrls.h
+++ b/drivers/media/platform/qcom/iris/iris_ctrls.h
@@ -48,6 +48,7 @@ int iris_set_layer_count_gen1(struct iris_inst *inst, enum platform_inst_fw_cap_
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_time_delta_based_rc(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.c b/drivers/media/platform/qcom/iris/iris_hfi_gen2.c
index 619a54edb09f..3b8fbefb8b93 100644
--- a/drivers/media/platform/qcom/iris/iris_hfi_gen2.c
+++ b/drivers/media/platform/qcom/iris/iris_hfi_gen2.c
@@ -1241,6 +1241,16 @@ static const struct platform_inst_fw_cap inst_fw_cap_sm8550_enc[] = {
.set = iris_set_bitrate_mode_gen2,
},
{
+ .cap_id = TIME_DELTA_BASED_RC,
+ .min = 0,
+ .max = 1,
+ .step_or_mask = 1,
+ .value = 0,
+ .hfi_id = HFI_PROP_TIME_DELTA_BASED_RATE_CONTROL,
+ .flags = CAP_FLAG_OUTPUT_PORT,
+ .set = iris_set_time_delta_based_rc,
+ },
+ {
.cap_id = FRAME_SKIP_MODE,
.min = V4L2_MPEG_VIDEO_FRAME_SKIP_MODE_DISABLED,
.max = V4L2_MPEG_VIDEO_FRAME_SKIP_MODE_BUF_LIMIT,
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 a8b47e4ceba0..f43aea10090d 100644
--- a/drivers/media/platform/qcom/iris/iris_hfi_gen2_defines.h
+++ b/drivers/media/platform/qcom/iris/iris_hfi_gen2_defines.h
@@ -67,6 +67,7 @@ enum hfi_rate_control {
};
#define HFI_PROP_RATE_CONTROL 0x0300012a
+#define HFI_PROP_TIME_DELTA_BASED_RATE_CONTROL 0x0300012b
#define HFI_PROP_QP_PACKED 0x0300012e
#define HFI_PROP_MIN_QP_PACKED 0x0300012f
#define HFI_PROP_MAX_QP_PACKED 0x03000130
diff --git a/drivers/media/platform/qcom/iris/iris_platform_common.h b/drivers/media/platform/qcom/iris/iris_platform_common.h
index d8481a9689d5..974809509146 100644
--- a/drivers/media/platform/qcom/iris/iris_platform_common.h
+++ b/drivers/media/platform/qcom/iris/iris_platform_common.h
@@ -185,6 +185,7 @@ enum platform_inst_fw_cap_type {
LAYER4_BITRATE_HEVC,
LAYER5_BITRATE_HEVC,
REQUEST_SYNC_FRAME,
+ TIME_DELTA_BASED_RC,
INST_FW_CAP_MAX,
};