Message ID | 20240814-submit-v3-1-f7d05e3e8560@chromium.org (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | media: venus: Add hierarchical h.264 controls | expand |
On 14/08/2024 23:14, Fritz Koenig wrote: > 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> > --- > drivers/media/platform/qcom/venus/venc_ctrls.c | 34 +++++++++++++++----------- > 1 file changed, 20 insertions(+), 14 deletions(-) > > diff --git a/drivers/media/platform/qcom/venus/venc_ctrls.c b/drivers/media/platform/qcom/venus/venc_ctrls.c > index d9d2a293f3ef..3e1f6f26eddf 100644 > --- a/drivers/media/platform/qcom/venus/venc_ctrls.c > +++ b/drivers/media/platform/qcom/venus/venc_ctrls.c > @@ -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; > Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
diff --git a/drivers/media/platform/qcom/venus/venc_ctrls.c b/drivers/media/platform/qcom/venus/venc_ctrls.c index d9d2a293f3ef..3e1f6f26eddf 100644 --- a/drivers/media/platform/qcom/venus/venc_ctrls.c +++ b/drivers/media/platform/qcom/venus/venc_ctrls.c @@ -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;
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> --- drivers/media/platform/qcom/venus/venc_ctrls.c | 34 +++++++++++++++----------- 1 file changed, 20 insertions(+), 14 deletions(-)