Merge "msm: vidc: update current value while updating the v4l controls"

This commit is contained in:
qctecmdr 2019-08-14 12:57:59 -07:00 • committed by Gerrit - the friendly Code Review server
commit 953fe222c3
2 changed files with 35 additions and 19 deletions

View file

@ -2231,7 +2231,7 @@ void msm_venc_decide_bframe(struct msm_vidc_inst *inst)
* Hence, forcefully enable bframe
*/
inst->prop.bframe_changed = true;
bframe_ctrl->val = MAX_NUM_B_FRAMES;
update_ctrl(bframe_ctrl, MAX_NUM_B_FRAMES);
dprintk(VIDC_HIGH, "Bframe is forcefully enabled\n");
} else {
/*
@ -2258,7 +2258,7 @@ disable_bframe:
* Hence, forcefully disable bframe
*/
inst->prop.bframe_changed = true;
bframe_ctrl->val = 0;
update_ctrl(bframe_ctrl, 0);
dprintk(VIDC_HIGH, "Bframe is forcefully disabled!\n");
} else {
dprintk(VIDC_HIGH, "Bframe is disabled\n");
@ -2293,6 +2293,7 @@ void msm_venc_adjust_gop_size(struct msm_vidc_inst *inst)
struct v4l2_ctrl *hier_ctrl;
struct v4l2_ctrl *bframe_ctrl;
struct v4l2_ctrl *gop_size_ctrl;
s32 val;
gop_size_ctrl = get_ctrl(inst, V4L2_CID_MPEG_VIDEO_GOP_SIZE);
if (inst->prop.bframe_changed) {
@ -2303,12 +2304,12 @@ void msm_venc_adjust_gop_size(struct msm_vidc_inst *inst)
bframe_ctrl = get_ctrl(inst, V4L2_CID_MPEG_VIDEO_B_FRAMES);
if (!bframe_ctrl->val)
/* Forcefully disabled */
gop_size_ctrl->val = gop_size_ctrl->val *
(1 + MAX_NUM_B_FRAMES);
val = gop_size_ctrl->val * (1 + MAX_NUM_B_FRAMES);
else
/* Forcefully enabled */
gop_size_ctrl->val = gop_size_ctrl->val /
(1 + MAX_NUM_B_FRAMES);
val = gop_size_ctrl->val / (1 + MAX_NUM_B_FRAMES);
update_ctrl(gop_size_ctrl, val);
}
/*
@ -2324,9 +2325,11 @@ void msm_venc_adjust_gop_size(struct msm_vidc_inst *inst)
num_subgops = (gop_size_ctrl->val + (min_gop_size >> 1)) /
min_gop_size;
if (num_subgops)
gop_size_ctrl->val = num_subgops * min_gop_size;
val = num_subgops * min_gop_size;
else
gop_size_ctrl->val = min_gop_size;
val = min_gop_size;
update_ctrl(gop_size_ctrl, val);
}
}
@ -2853,14 +2856,14 @@ static void set_all_intra_preconditions(struct msm_vidc_inst *inst)
ctrl = get_ctrl(inst, V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE);
if (ctrl->val) {
dprintk(VIDC_HIGH, "Disable multi slice for all intra\n");
ctrl->val = V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_SINGLE;
update_ctrl(ctrl, V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_SINGLE);
}
/* Disable LTR */
ctrl = get_ctrl(inst, V4L2_CID_MPEG_VIDC_VIDEO_LTRCOUNT);
if (ctrl->val) {
dprintk(VIDC_HIGH, "Disable LTR for all intra\n");
ctrl->val = 0;
update_ctrl(ctrl, 0);
}
/* Disable Layer encoding */
@ -2869,8 +2872,8 @@ static void set_all_intra_preconditions(struct msm_vidc_inst *inst)
V4L2_CID_MPEG_VIDC_VIDEO_HEVC_MAX_HIER_CODING_LAYER);
if (ctrl->val || ctrl_t->val) {
dprintk(VIDC_HIGH, "Disable layer encoding for all intra\n");
ctrl->val = 0;
ctrl_t->val = 0;
update_ctrl(ctrl, 0);
update_ctrl(ctrl_t, 0);
}
/* Disable IR */
@ -2878,8 +2881,8 @@ static void set_all_intra_preconditions(struct msm_vidc_inst *inst)
ctrl_t = get_ctrl(inst, V4L2_CID_MPEG_VIDEO_CYCLIC_INTRA_REFRESH_MB);
if (ctrl->val || ctrl_t->val) {
dprintk(VIDC_HIGH, "Disable IR for all intra\n");
ctrl->val = 0;
ctrl_t->val = 0;
update_ctrl(ctrl, 0);
update_ctrl(ctrl_t, 0);
}
return;
@ -2893,14 +2896,14 @@ static void set_heif_preconditions(struct msm_vidc_inst *inst)
ctrl = get_ctrl(inst, V4L2_CID_MPEG_VIDEO_GOP_SIZE);
if (ctrl->val) {
dprintk(VIDC_HIGH, "Reset P-frame count for HEIF\n");
ctrl->val = 0;
update_ctrl(ctrl, 0);
}
/* Reset BFrames */
ctrl = get_ctrl(inst, V4L2_CID_MPEG_VIDEO_B_FRAMES);
if (ctrl->val) {
dprintk(VIDC_HIGH, "Reset B-frame count for HEIF\n");
ctrl->val = 0;
update_ctrl(ctrl, 0);
}
return;
@ -3075,8 +3078,8 @@ int msm_venc_set_slice_control_mode(struct msm_vidc_inst *inst)
}
if (slice_mode == HFI_MULTI_SLICE_OFF) {
ctrl->val = V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_SINGLE;
ctrl_t->val = 0;
update_ctrl(ctrl, V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_SINGLE);
update_ctrl(ctrl_t, 0);
}
set_and_exit:
@ -3902,7 +3905,7 @@ disable_ltr:
* client sets unsupported codec/rate control.
*/
if (!is_ltr) {
ctrl->val = 0;
update_ctrl(ctrl, 0);
dprintk(VIDC_HIGH, "LTR is forcefully disabled!\n");
}
return rc;

View file

@ -76,6 +76,19 @@ static inline struct v4l2_ctrl *get_ctrl(struct msm_vidc_inst *inst,
return inst->ctrls[0];
}
static inline void update_ctrl(struct v4l2_ctrl *ctrl, s32 val)
{
switch (ctrl->type) {
case V4L2_CTRL_TYPE_INTEGER:
*ctrl->p_cur.p_s32 = val;
memcpy(ctrl->p_new.p, ctrl->p_cur.p,
ctrl->elems * ctrl->elem_size);
break;
default:
dprintk(VIDC_ERR, "unhandled control type");
}
}
static inline u32 get_v4l2_codec(struct msm_vidc_inst *inst)
{
struct v4l2_format *f;