]> www.infradead.org Git - users/willy/linux.git/commitdiff
media: venus: Helper function for dynamically updating bitrate
authorFritz Koenig <frkoenig@chromium.org>
Tue, 22 Oct 2024 17:40:42 +0000 (10:40 -0700)
committerHans Verkuil <hverkuil@xs4all.nl>
Thu, 7 Nov 2024 10:43:31 +0000 (10:43 +0000)
Move the dynamic bitrate updating functionality to a separate function
so that it can be shared.

No functionality changes.

Signed-off-by: Fritz Koenig <frkoenig@chromium.org>
Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Stanimir Varbanov <stanimir.k.varbanov@gmail.com>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
drivers/media/platform/qcom/venus/venc_ctrls.c

index d9d2a293f3ef3aebc204f8a1e4307488c7e3ede4..3e1f6f26eddf06c91fa7e84dcadead6e91dc6547 100644 (file)
@@ -67,12 +67,28 @@ static int venc_calc_bpframes(u32 gop_size, u32 conseq_b, u32 *bf, u32 *pf)
        return 0;
 }
 
+static int dynamic_bitrate_update(struct venus_inst *inst, u32 bitrate,
+                                 u32 layer_id)
+{
+       int ret = 0;
+
+       mutex_lock(&inst->lock);
+       if (inst->streamon_out && inst->streamon_cap) {
+               u32 ptype = HFI_PROPERTY_CONFIG_VENC_TARGET_BITRATE;
+               struct hfi_bitrate brate = { .bitrate = bitrate, .layer_id = layer_id };
+
+               ret = hfi_session_set_property(inst, ptype, &brate);
+       }
+       mutex_unlock(&inst->lock);
+
+       return ret;
+}
+
 static int venc_op_s_ctrl(struct v4l2_ctrl *ctrl)
 {
        struct venus_inst *inst = ctrl_to_inst(ctrl);
        struct venc_controls *ctr = &inst->controls.enc;
        struct hfi_enable en = { .enable = 1 };
-       struct hfi_bitrate brate;
        struct hfi_ltr_use ltr_use;
        struct hfi_ltr_mark ltr_mark;
        u32 bframes;
@@ -85,19 +101,9 @@ static int venc_op_s_ctrl(struct v4l2_ctrl *ctrl)
                break;
        case V4L2_CID_MPEG_VIDEO_BITRATE:
                ctr->bitrate = ctrl->val;
-               mutex_lock(&inst->lock);
-               if (inst->streamon_out && inst->streamon_cap) {
-                       ptype = HFI_PROPERTY_CONFIG_VENC_TARGET_BITRATE;
-                       brate.bitrate = ctr->bitrate;
-                       brate.layer_id = 0;
-
-                       ret = hfi_session_set_property(inst, ptype, &brate);
-                       if (ret) {
-                               mutex_unlock(&inst->lock);
-                               return ret;
-                       }
-               }
-               mutex_unlock(&inst->lock);
+               ret = dynamic_bitrate_update(inst, ctr->bitrate, 0);
+               if (ret)
+                       return ret;
                break;
        case V4L2_CID_MPEG_VIDEO_BITRATE_PEAK:
                ctr->bitrate_peak = ctrl->val;