Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit da153904 authored by Vaibhav Deshu Venkatesh's avatar Vaibhav Deshu Venkatesh
Browse files

msm: vidc: Fix encoder input extradata size calculation



Encoder input extradata size calculation uses get control
and this is called before control initialization in inst
init. Change this to take the control as a parameter and
pass 0 during init.

CRs-Fixed: 2368458
Change-Id: I8bd7c347d511d8468f4b01e0cf9f2665649063c8
Signed-off-by: default avatarVaibhav Deshu Venkatesh <vdeshuve@codeaurora.org>
parent 377e49df
Loading
Loading
Loading
Loading
+8 −3
Original line number Diff line number Diff line
@@ -1106,7 +1106,7 @@ int msm_venc_inst_init(struct msm_vidc_inst *inst)
	}

	buff_req_buffer->buffer_size =
		msm_vidc_calculate_enc_input_extra_size(inst);
		msm_vidc_calculate_enc_input_extra_size(inst, 0);
	inst->bufq[OUTPUT_PORT].plane_sizes[1] =
		buff_req_buffer->buffer_size;

@@ -1222,6 +1222,7 @@ int msm_venc_s_fmt(struct msm_vidc_inst *inst, struct v4l2_format *f)
	int rc = 0;
	int i = 0;
	struct msm_vidc_format *fmt = NULL;
	struct v4l2_ctrl *extradata_ctrl;

	if (!inst || !f) {
		dprintk(VIDC_ERR,
@@ -1304,8 +1305,11 @@ int msm_venc_s_fmt(struct msm_vidc_inst *inst, struct v4l2_format *f)
		 */
		inst->bufq[fmt->type].plane_sizes[0] =
			msm_vidc_calculate_enc_input_frame_size(inst);
		extradata_ctrl = get_ctrl(inst,
			V4L2_CID_MPEG_VIDC_VIDEO_EXTRADATA);
		inst->bufq[fmt->type].plane_sizes[1] =
			msm_vidc_calculate_enc_input_extra_size(inst);
			msm_vidc_calculate_enc_input_extra_size(inst,
				extradata_ctrl->val);
		f->fmt.pix_mp.num_planes = inst->bufq[fmt->type].num_planes;
		for (i = 0; i < inst->bufq[fmt->type].num_planes; i++) {
			f->fmt.pix_mp.plane_fmt[i].sizeimage =
@@ -1576,7 +1580,8 @@ int msm_venc_s_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl)
			}

			buff_req_buffer->buffer_size =
				msm_vidc_calculate_enc_input_extra_size(inst);
				msm_vidc_calculate_enc_input_extra_size(inst,
					ctrl->val);
			inst->bufq[OUTPUT_PORT].plane_sizes[1] =
					buff_req_buffer->buffer_size;
		}
+2 −6
Original line number Diff line number Diff line
@@ -854,18 +854,14 @@ static inline u32 ROI_EXTRADATA_SIZE(
	return (((lcu_width + 7) >> 3) << 3) * lcu_height * 2;
}

u32 msm_vidc_calculate_enc_input_extra_size(struct msm_vidc_inst *inst)
u32 msm_vidc_calculate_enc_input_extra_size(struct msm_vidc_inst *inst,
	u32 extra_types)
{
	u32 size = 0;
	u32 width = inst->prop.width[OUTPUT_PORT];
	u32 height = inst->prop.height[OUTPUT_PORT];
	u32 extradata_count = 0;
	u32 extra_types;
	struct v4l2_ctrl *extradata_ctrl;

	extradata_ctrl = get_ctrl(inst,
			V4L2_CID_MPEG_VIDC_VIDEO_EXTRADATA);
	extra_types = extradata_ctrl->val;
	/* Add size for default extradata */
	size += sizeof(struct msm_vidc_enc_cvp_metadata_payload);
	extradata_count++;
+2 −1
Original line number Diff line number Diff line
@@ -34,7 +34,8 @@ u32 msm_vidc_calculate_dec_output_frame_size(struct msm_vidc_inst *inst);
u32 msm_vidc_calculate_dec_output_extra_size(struct msm_vidc_inst *inst);
u32 msm_vidc_calculate_enc_input_frame_size(struct msm_vidc_inst *inst);
u32 msm_vidc_calculate_enc_output_frame_size(struct msm_vidc_inst *inst);
u32 msm_vidc_calculate_enc_input_extra_size(struct msm_vidc_inst *inst);
u32 msm_vidc_calculate_enc_input_extra_size(struct msm_vidc_inst *inst,
	u32 extra_types);
u32 msm_vidc_calculate_enc_output_extra_size(struct msm_vidc_inst *inst);
u32 msm_vidc_set_buffer_count_for_thumbnail(struct msm_vidc_inst *inst);