[PATCH 2/2] media: iris: add new rate control type MBR for encoder

Sachin Kumar Garg posted 2 patches 1 month, 2 weeks ago
There is a newer version of this series
[PATCH 2/2] media: iris: add new rate control type MBR for encoder
Posted by Sachin Kumar Garg 1 month, 2 weeks ago
Introduce V4L2_MPEG_VIDEO_BITRATE_MODE_MBR rate control to Encoder.
Encoder will choose appropriate quantization parameter and
do the smart bit allocation to set the frame maximum bitrate
level as per the Bitrate value configured.
---
 drivers/media/platform/qcom/iris/iris_ctrls.c      |   2 +
 .../platform/qcom/iris/iris_hfi_gen1_defines.h     |   1 +
 .../media/platform/qcom/iris/iris_platform_gen1.c  |   9 +-
 .../platform/qcom/iris/iris_platform_sc7280.h      | 202 +++++++++++++++++++++
 4 files changed, 207 insertions(+), 7 deletions(-)

diff --git a/drivers/media/platform/qcom/iris/iris_ctrls.c b/drivers/media/platform/qcom/iris/iris_ctrls.c
index 3cec957580f5..dba3a4ba5d26 100644
--- a/drivers/media/platform/qcom/iris/iris_ctrls.c
+++ b/drivers/media/platform/qcom/iris/iris_ctrls.c
@@ -628,6 +628,8 @@ int iris_set_bitrate_mode_gen1(struct iris_inst *inst, enum platform_inst_fw_cap
 		rc_mode = frame_skip ? HFI_RATE_CONTROL_CBR_VFR : HFI_RATE_CONTROL_CBR_CFR;
 	else if (bitrate_mode == V4L2_MPEG_VIDEO_BITRATE_MODE_CQ)
 		rc_mode = HFI_RATE_CONTROL_CQ;
+	else if (bitrate_mode == V4L2_MPEG_VIDEO_BITRATE_MODE_MBR)
+		rc_mode = HFI_RATE_CONTROL_MBR;
 
 	inst->hfi_rc_type = rc_mode;
 
diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen1_defines.h b/drivers/media/platform/qcom/iris/iris_hfi_gen1_defines.h
index 42226ccee3d9..6f3688bfbf58 100644
--- a/drivers/media/platform/qcom/iris/iris_hfi_gen1_defines.h
+++ b/drivers/media/platform/qcom/iris/iris_hfi_gen1_defines.h
@@ -130,6 +130,7 @@
 #define HFI_RATE_CONTROL_VBR_CFR		0x1000003
 #define HFI_RATE_CONTROL_CBR_VFR		0x1000004
 #define HFI_RATE_CONTROL_CBR_CFR		0x1000005
+#define HFI_RATE_CONTROL_MBR			0x1000006
 #define HFI_RATE_CONTROL_CQ				0x1000008
 
 #define HFI_H264_ENTROPY_CAVLC			0x1
diff --git a/drivers/media/platform/qcom/iris/iris_platform_gen1.c b/drivers/media/platform/qcom/iris/iris_platform_gen1.c
index df8e6bf9430e..286f623e60d3 100644
--- a/drivers/media/platform/qcom/iris/iris_platform_gen1.c
+++ b/drivers/media/platform/qcom/iris/iris_platform_gen1.c
@@ -15,11 +15,6 @@
 
 #include "iris_platform_sc7280.h"
 
-#define BITRATE_MIN		32000
-#define BITRATE_MAX		160000000
-#define BITRATE_PEAK_DEFAULT	(BITRATE_DEFAULT * 2)
-#define BITRATE_STEP		100
-
 static struct iris_fmt platform_fmts_sm8250_dec[] = {
 	[IRIS_FMT_H264] = {
 		.pixfmt = V4L2_PIX_FMT_H264,
@@ -419,8 +414,8 @@ const struct iris_platform_data sc7280_data = {
 	.inst_caps = &platform_inst_cap_sm8250,
 	.inst_fw_caps_dec = inst_fw_cap_sm8250_dec,
 	.inst_fw_caps_dec_size = ARRAY_SIZE(inst_fw_cap_sm8250_dec),
-	.inst_fw_caps_enc = inst_fw_cap_sm8250_enc,
-	.inst_fw_caps_enc_size = ARRAY_SIZE(inst_fw_cap_sm8250_enc),
+	.inst_fw_caps_enc = inst_fw_cap_sc7280_enc,
+	.inst_fw_caps_enc_size = ARRAY_SIZE(inst_fw_cap_sc7280_enc),
 	.tz_cp_config_data = tz_cp_config_sm8250,
 	.tz_cp_config_data_size = ARRAY_SIZE(tz_cp_config_sm8250),
 	.hw_response_timeout = HW_RESPONSE_TIMEOUT_VALUE,
diff --git a/drivers/media/platform/qcom/iris/iris_platform_sc7280.h b/drivers/media/platform/qcom/iris/iris_platform_sc7280.h
index 0ec8f334df67..3f220c4c9cc0 100644
--- a/drivers/media/platform/qcom/iris/iris_platform_sc7280.h
+++ b/drivers/media/platform/qcom/iris/iris_platform_sc7280.h
@@ -6,6 +6,13 @@
 #ifndef __IRIS_PLATFORM_SC7280_H__
 #define __IRIS_PLATFORM_SC7280_H__
 
+#include "iris_platform_common.h"
+
+#define BITRATE_MIN		32000
+#define BITRATE_MAX		160000000
+#define BITRATE_PEAK_DEFAULT	(BITRATE_DEFAULT * 2)
+#define BITRATE_STEP		100
+
 static const struct bw_info sc7280_bw_table_dec[] = {
 	{ ((3840 * 2160) / 256) * 60, 1896000, },
 	{ ((3840 * 2160) / 256) * 30,  968000, },
@@ -28,4 +35,199 @@ static const char * const sc7280_opp_clk_table[] = {
 	NULL,
 };
 
+static const struct platform_inst_fw_cap inst_fw_cap_sc7280_enc[] = {
+	{
+		.cap_id = STAGE,
+		.min = STAGE_1,
+		.max = STAGE_2,
+		.step_or_mask = 1,
+		.value = STAGE_2,
+		.hfi_id = HFI_PROPERTY_PARAM_WORK_MODE,
+		.set = iris_set_stage,
+	},
+	{
+		.cap_id = PROFILE_H264,
+		.min = V4L2_MPEG_VIDEO_H264_PROFILE_BASELINE,
+		.max = V4L2_MPEG_VIDEO_H264_PROFILE_MULTIVIEW_HIGH,
+		.step_or_mask = BIT(V4L2_MPEG_VIDEO_H264_PROFILE_BASELINE) |
+				BIT(V4L2_MPEG_VIDEO_H264_PROFILE_CONSTRAINED_BASELINE) |
+				BIT(V4L2_MPEG_VIDEO_H264_PROFILE_MAIN) |
+				BIT(V4L2_MPEG_VIDEO_H264_PROFILE_HIGH) |
+				BIT(V4L2_MPEG_VIDEO_H264_PROFILE_STEREO_HIGH) |
+				BIT(V4L2_MPEG_VIDEO_H264_PROFILE_MULTIVIEW_HIGH),
+		.value = V4L2_MPEG_VIDEO_H264_PROFILE_HIGH,
+		.hfi_id = HFI_PROPERTY_PARAM_PROFILE_LEVEL_CURRENT,
+		.flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU,
+		.set = iris_set_profile_level_gen1,
+	},
+	{
+		.cap_id = PROFILE_HEVC,
+		.min = V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN,
+		.max = V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_10,
+		.step_or_mask = BIT(V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN) |
+				BIT(V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_STILL_PICTURE) |
+				BIT(V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_10),
+		.value = V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN,
+		.hfi_id = HFI_PROPERTY_PARAM_PROFILE_LEVEL_CURRENT,
+		.flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU,
+		.set = iris_set_profile_level_gen1,
+	},
+	{
+		.cap_id = LEVEL_H264,
+		.min = V4L2_MPEG_VIDEO_H264_LEVEL_1_0,
+		.max = V4L2_MPEG_VIDEO_H264_LEVEL_5_1,
+		.step_or_mask = BIT(V4L2_MPEG_VIDEO_H264_LEVEL_1_0) |
+				BIT(V4L2_MPEG_VIDEO_H264_LEVEL_1B) |
+				BIT(V4L2_MPEG_VIDEO_H264_LEVEL_1_1) |
+				BIT(V4L2_MPEG_VIDEO_H264_LEVEL_1_2) |
+				BIT(V4L2_MPEG_VIDEO_H264_LEVEL_1_3) |
+				BIT(V4L2_MPEG_VIDEO_H264_LEVEL_2_0) |
+				BIT(V4L2_MPEG_VIDEO_H264_LEVEL_2_1) |
+				BIT(V4L2_MPEG_VIDEO_H264_LEVEL_2_2) |
+				BIT(V4L2_MPEG_VIDEO_H264_LEVEL_3_0) |
+				BIT(V4L2_MPEG_VIDEO_H264_LEVEL_3_1) |
+				BIT(V4L2_MPEG_VIDEO_H264_LEVEL_3_2) |
+				BIT(V4L2_MPEG_VIDEO_H264_LEVEL_4_0) |
+				BIT(V4L2_MPEG_VIDEO_H264_LEVEL_4_1) |
+				BIT(V4L2_MPEG_VIDEO_H264_LEVEL_4_2) |
+				BIT(V4L2_MPEG_VIDEO_H264_LEVEL_5_0) |
+				BIT(V4L2_MPEG_VIDEO_H264_LEVEL_5_1),
+		.value = V4L2_MPEG_VIDEO_H264_LEVEL_1_0,
+		.hfi_id = HFI_PROPERTY_PARAM_PROFILE_LEVEL_CURRENT,
+		.flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU,
+		.set = iris_set_profile_level_gen1,
+	},
+	{
+		.cap_id = LEVEL_HEVC,
+		.min = V4L2_MPEG_VIDEO_HEVC_LEVEL_1,
+		.max = V4L2_MPEG_VIDEO_HEVC_LEVEL_6_2,
+		.step_or_mask = BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_1) |
+				BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_2) |
+				BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_2_1) |
+				BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_3) |
+				BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_3_1) |
+				BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_4) |
+				BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_4_1) |
+				BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_5) |
+				BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_5_1) |
+				BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_5_2) |
+				BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_6) |
+				BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_6_1) |
+				BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_6_2),
+		.value = V4L2_MPEG_VIDEO_HEVC_LEVEL_1,
+		.hfi_id = HFI_PROPERTY_PARAM_PROFILE_LEVEL_CURRENT,
+		.flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU,
+		.set = iris_set_profile_level_gen1,
+	},
+	{
+		.cap_id = HEADER_MODE,
+		.min = V4L2_MPEG_VIDEO_HEADER_MODE_SEPARATE,
+		.max = V4L2_MPEG_VIDEO_HEADER_MODE_JOINED_WITH_1ST_FRAME,
+		.step_or_mask = BIT(V4L2_MPEG_VIDEO_HEADER_MODE_SEPARATE) |
+				BIT(V4L2_MPEG_VIDEO_HEADER_MODE_JOINED_WITH_1ST_FRAME),
+		.value = V4L2_MPEG_VIDEO_HEADER_MODE_JOINED_WITH_1ST_FRAME,
+		.hfi_id = HFI_PROPERTY_CONFIG_VENC_SYNC_FRAME_SEQUENCE_HEADER,
+		.flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU,
+		.set = iris_set_header_mode_gen1,
+	},
+	{
+		.cap_id = BITRATE,
+		.min = BITRATE_MIN,
+		.max = BITRATE_MAX,
+		.step_or_mask = BITRATE_STEP,
+		.value = BITRATE_DEFAULT,
+		.hfi_id = HFI_PROPERTY_CONFIG_VENC_TARGET_BITRATE,
+		.flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
+			CAP_FLAG_DYNAMIC_ALLOWED,
+		.set = iris_set_bitrate,
+	},
+	{
+		.cap_id = BITRATE_MODE,
+		.min = V4L2_MPEG_VIDEO_BITRATE_MODE_VBR,
+		.max = V4L2_MPEG_VIDEO_BITRATE_MODE_MBR,
+		.step_or_mask = BIT(V4L2_MPEG_VIDEO_BITRATE_MODE_VBR) |
+				BIT(V4L2_MPEG_VIDEO_BITRATE_MODE_CBR) |
+				BIT(V4L2_MPEG_VIDEO_BITRATE_MODE_MBR),
+		.value = V4L2_MPEG_VIDEO_BITRATE_MODE_VBR,
+		.hfi_id = HFI_PROPERTY_PARAM_VENC_RATE_CONTROL,
+		.flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU,
+		.set = iris_set_bitrate_mode_gen1,
+	},
+	{
+		.cap_id = FRAME_SKIP_MODE,
+		.min = V4L2_MPEG_VIDEO_FRAME_SKIP_MODE_DISABLED,
+		.max = V4L2_MPEG_VIDEO_FRAME_SKIP_MODE_BUF_LIMIT,
+		.step_or_mask = BIT(V4L2_MPEG_VIDEO_FRAME_SKIP_MODE_DISABLED) |
+				BIT(V4L2_MPEG_VIDEO_FRAME_SKIP_MODE_BUF_LIMIT),
+		.value = V4L2_MPEG_VIDEO_FRAME_SKIP_MODE_DISABLED,
+		.flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU,
+	},
+	{
+		.cap_id = FRAME_RC_ENABLE,
+		.min = 0,
+		.max = 1,
+		.step_or_mask = 1,
+		.value = 1,
+	},
+	{
+		.cap_id = GOP_SIZE,
+		.min = 0,
+		.max = (1 << 16) - 1,
+		.step_or_mask = 1,
+		.value = 30,
+		.set = iris_set_u32
+	},
+	{
+		.cap_id = ENTROPY_MODE,
+		.min = V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CAVLC,
+		.max = V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CABAC,
+		.step_or_mask = BIT(V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CAVLC) |
+				BIT(V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CABAC),
+		.value = V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CAVLC,
+		.hfi_id = HFI_PROPERTY_PARAM_VENC_H264_ENTROPY_CONTROL,
+		.flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU,
+		.set = iris_set_entropy_mode_gen1,
+	},
+	{
+		.cap_id = MIN_FRAME_QP_H264,
+		.min = MIN_QP_8BIT,
+		.max = MAX_QP,
+		.step_or_mask = 1,
+		.value = MIN_QP_8BIT,
+		.hfi_id = HFI_PROPERTY_PARAM_VENC_SESSION_QP_RANGE_V2,
+		.flags = CAP_FLAG_OUTPUT_PORT,
+		.set = iris_set_qp_range,
+	},
+	{
+		.cap_id = MIN_FRAME_QP_HEVC,
+		.min = MIN_QP_8BIT,
+		.max = MAX_QP_HEVC,
+		.step_or_mask = 1,
+		.value = MIN_QP_8BIT,
+		.hfi_id = HFI_PROPERTY_PARAM_VENC_SESSION_QP_RANGE_V2,
+		.flags = CAP_FLAG_OUTPUT_PORT,
+		.set = iris_set_qp_range,
+	},
+	{
+		.cap_id = MAX_FRAME_QP_H264,
+		.min = MIN_QP_8BIT,
+		.max = MAX_QP,
+		.step_or_mask = 1,
+		.value = MAX_QP,
+		.hfi_id = HFI_PROPERTY_PARAM_VENC_SESSION_QP_RANGE_V2,
+		.flags = CAP_FLAG_OUTPUT_PORT,
+		.set = iris_set_qp_range,
+	},
+	{
+		.cap_id = MAX_FRAME_QP_HEVC,
+		.min = MIN_QP_8BIT,
+		.max = MAX_QP_HEVC,
+		.step_or_mask = 1,
+		.value = MAX_QP_HEVC,
+		.hfi_id = HFI_PROPERTY_PARAM_VENC_SESSION_QP_RANGE_V2,
+		.flags = CAP_FLAG_OUTPUT_PORT,
+		.set = iris_set_qp_range,
+	},
+};
+
 #endif

-- 
2.34.1
Re: [PATCH 2/2] media: iris: add new rate control type MBR for encoder
Posted by Konrad Dybcio 1 month, 2 weeks ago
On 2/13/26 7:04 AM, Sachin Kumar Garg wrote:
> Introduce V4L2_MPEG_VIDEO_BITRATE_MODE_MBR rate control to Encoder.
> Encoder will choose appropriate quantization parameter and
> do the smart bit allocation to set the frame maximum bitrate
> level as per the Bitrate value configured.
> ---
>  drivers/media/platform/qcom/iris/iris_ctrls.c      |   2 +
>  .../platform/qcom/iris/iris_hfi_gen1_defines.h     |   1 +
>  .../media/platform/qcom/iris/iris_platform_gen1.c  |   9 +-
>  .../platform/qcom/iris/iris_platform_sc7280.h      | 202 +++++++++++++++++++++

Is this really only available on 7280?

Konrad
Re: [PATCH 2/2] media: iris: add new rate control type MBR for encoder
Posted by Sachin Kumar Garg 2 weeks, 3 days ago

On 2/13/2026 3:24 PM, Konrad Dybcio wrote:
> On 2/13/26 7:04 AM, Sachin Kumar Garg wrote:
>> Introduce V4L2_MPEG_VIDEO_BITRATE_MODE_MBR rate control to Encoder.
>> Encoder will choose appropriate quantization parameter and
>> do the smart bit allocation to set the frame maximum bitrate
>> level as per the Bitrate value configured.
>> ---
>>   drivers/media/platform/qcom/iris/iris_ctrls.c      |   2 +
>>   .../platform/qcom/iris/iris_hfi_gen1_defines.h     |   1 +
>>   .../media/platform/qcom/iris/iris_platform_gen1.c  |   9 +-
>>   .../platform/qcom/iris/iris_platform_sc7280.h      | 202 +++++++++++++++++++++
> 
> Is this really only available on 7280?
> 
> Konrad

Yes Konrad, in this series we enable V4L2_MPEG_VIDEO_BITRATE_MODE_MBR 
only for SC7280 because currently, we have added the support only for 
low tier chipset. MBR rate control aims to improve the compression 
efficiency of encoder for static and low motion scenes for extremely low 
bitrate use-case.

Thanks,
Sachin
Re: [PATCH 2/2] media: iris: add new rate control type MBR for encoder
Posted by Nicolas Dufresne 2 weeks, 3 days ago
Le lundi 16 mars 2026 à 11:52 +0530, Sachin Kumar Garg a écrit :
> 
> 
> On 2/13/2026 3:24 PM, Konrad Dybcio wrote:
> > On 2/13/26 7:04 AM, Sachin Kumar Garg wrote:
> > > Introduce V4L2_MPEG_VIDEO_BITRATE_MODE_MBR rate control to Encoder.
> > > Encoder will choose appropriate quantization parameter and
> > > do the smart bit allocation to set the frame maximum bitrate
> > > level as per the Bitrate value configured.
> > > ---
> > >   drivers/media/platform/qcom/iris/iris_ctrls.c      |   2 +
> > >   .../platform/qcom/iris/iris_hfi_gen1_defines.h     |   1 +
> > >   .../media/platform/qcom/iris/iris_platform_gen1.c  |   9 +-
> > >   .../platform/qcom/iris/iris_platform_sc7280.h      | 202
> > > +++++++++++++++++++++
> > 
> > Is this really only available on 7280?
> > 
> > Konrad
> 
> Yes Konrad, in this series we enable V4L2_MPEG_VIDEO_BITRATE_MODE_MBR 
> only for SC7280 because currently, we have added the support only for 
> low tier chipset. MBR rate control aims to improve the compression 
> efficiency of encoder for static and low motion scenes for extremely low 
> bitrate use-case.

Without a spec definition, which constrained the implementations toward
interoperability, this needs to be made vendor specific. That being said, even
as vendor specific control, I think it deserves more documentation for your
users.

Nicolas
Re: [PATCH 2/2] media: iris: add new rate control type MBR for encoder
Posted by Dmitry Baryshkov 2 weeks, 3 days ago
On Mon, Mar 16, 2026 at 01:37:21PM -0400, Nicolas Dufresne wrote:
> Le lundi 16 mars 2026 à 11:52 +0530, Sachin Kumar Garg a écrit :
> > 
> > 
> > On 2/13/2026 3:24 PM, Konrad Dybcio wrote:
> > > On 2/13/26 7:04 AM, Sachin Kumar Garg wrote:
> > > > Introduce V4L2_MPEG_VIDEO_BITRATE_MODE_MBR rate control to Encoder.
> > > > Encoder will choose appropriate quantization parameter and
> > > > do the smart bit allocation to set the frame maximum bitrate
> > > > level as per the Bitrate value configured.
> > > > ---
> > > >   drivers/media/platform/qcom/iris/iris_ctrls.c      |   2 +
> > > >   .../platform/qcom/iris/iris_hfi_gen1_defines.h     |   1 +
> > > >   .../media/platform/qcom/iris/iris_platform_gen1.c  |   9 +-
> > > >   .../platform/qcom/iris/iris_platform_sc7280.h      | 202
> > > > +++++++++++++++++++++
> > > 
> > > Is this really only available on 7280?
> > > 
> > > Konrad
> > 
> > Yes Konrad, in this series we enable V4L2_MPEG_VIDEO_BITRATE_MODE_MBR 
> > only for SC7280 because currently, we have added the support only for 
> > low tier chipset. MBR rate control aims to improve the compression 
> > efficiency of encoder for static and low motion scenes for extremely low 
> > bitrate use-case.
> 
> Without a spec definition, which constrained the implementations toward
> interoperability, this needs to be made vendor specific. That being said, even
> as vendor specific control, I think it deserves more documentation for your
> users.

What kind of documentation would be a better fit for keeping this in the
generic namespace? Frankly speaking, I think that the current
documentation is too vendor-specific, it describe the particular
algorithm, while the control seems to be more generic. However, I also
feel that defining it as "Maximum Bitrate" might not be specific enough
(nor would it show a difference from the CBR mode).


-- 
With best wishes
Dmitry
Re: [PATCH 2/2] media: iris: add new rate control type MBR for encoder
Posted by Sachin Kumar Garg 3 days, 14 hours ago

On 3/17/2026 12:17 AM, Dmitry Baryshkov wrote:
> On Mon, Mar 16, 2026 at 01:37:21PM -0400, Nicolas Dufresne wrote:
>> Le lundi 16 mars 2026 à 11:52 +0530, Sachin Kumar Garg a écrit :
>>>
>>>
>>> On 2/13/2026 3:24 PM, Konrad Dybcio wrote:
>>>> On 2/13/26 7:04 AM, Sachin Kumar Garg wrote:
>>>>> Introduce V4L2_MPEG_VIDEO_BITRATE_MODE_MBR rate control to Encoder.
>>>>> Encoder will choose appropriate quantization parameter and
>>>>> do the smart bit allocation to set the frame maximum bitrate
>>>>> level as per the Bitrate value configured.
>>>>> ---
>>>>>    drivers/media/platform/qcom/iris/iris_ctrls.c      |   2 +
>>>>>    .../platform/qcom/iris/iris_hfi_gen1_defines.h     |   1 +
>>>>>    .../media/platform/qcom/iris/iris_platform_gen1.c  |   9 +-
>>>>>    .../platform/qcom/iris/iris_platform_sc7280.h      | 202
>>>>> +++++++++++++++++++++
>>>>
>>>> Is this really only available on 7280?
>>>>
>>>> Konrad
>>>
>>> Yes Konrad, in this series we enable V4L2_MPEG_VIDEO_BITRATE_MODE_MBR
>>> only for SC7280 because currently, we have added the support only for
>>> low tier chipset. MBR rate control aims to improve the compression
>>> efficiency of encoder for static and low motion scenes for extremely low
>>> bitrate use-case.
>>
>> Without a spec definition, which constrained the implementations toward
>> interoperability, this needs to be made vendor specific. That being said, even
>> as vendor specific control, I think it deserves more documentation for your
>> users.
> 
> What kind of documentation would be a better fit for keeping this in the
> generic namespace? Frankly speaking, I think that the current
> documentation is too vendor-specific, it describe the particular
> algorithm, while the control seems to be more generic. However, I also
> feel that defining it as "Maximum Bitrate" might not be specific enough
> (nor would it show a difference from the CBR mode).
> 
> 
Thanks for the suggestion.
I understand that this functionality is vendor-specific and should not 
be exposed via a generic control. Would it be acceptable to convert this 
into a vendor-specific control (for example, 
V4L2_MPEG_VIDEO_BITRATE_MODE_QCOM_MBR) and update the documentation 
accordingly?
Please let me know if this aligns with upstream expectations, or can you 
please suggest if there is any other preferred approach for adding 
vendor-specific controls in this case.

Thanks,
Sachin