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

Commit 3a970f53 authored by Vaibhav Deshu Venkatesh's avatar Vaibhav Deshu Venkatesh Committed by Gerrit - the friendly Code Review server
Browse files

msm: vidc: Use correct extradata size for DPB allocation



Extradata size is no longer stored instance buffreq
structure. So, during DPB allocation use the size stored
in instances bufq structure which is updated correctly.

Change-Id: I65c3d8371d599ba7755a8c4012734e412d55ac89
Signed-off-by: default avatarVaibhav Deshu Venkatesh <vdeshuve@codeaurora.org>
parent a0ea5cbb
Loading
Loading
Loading
Loading
+21 −11
Original line number Diff line number Diff line
@@ -3551,7 +3551,7 @@ static int set_dpb_only_buffers(struct msm_vidc_inst *inst,
	int rc = 0;
	struct internal_buf *binfo = NULL;
	u32 smem_flags = SMEM_UNCACHED, buffer_size, num_buffers, hfi_fmt;
	struct hal_buffer_requirements *output_buf, *extradata_buf;
	struct hal_buffer_requirements *output_buf;
	unsigned int i;
	struct hfi_device *hdev;
	struct hfi_buffer_size_minimum b;
@@ -3566,6 +3566,17 @@ static int set_dpb_only_buffers(struct msm_vidc_inst *inst,
		return 0;
	}

	/* Set DPB buffer count to firmware */
	rc = msm_comm_set_buffer_count(inst,
			output_buf->buffer_count_min,
			output_buf->buffer_count_min,
			HAL_BUFFER_OUTPUT);
	if (rc) {
		dprintk(VIDC_ERR, "%s: failed to set bufreqs(%#x)\n",
			__func__, buffer_type);
		return -EINVAL;
	}

	/* For DPB buffers, Always use FW count */
	num_buffers = output_buf->buffer_count_min;
	hfi_fmt = msm_comm_convert_color_fmt(inst->clk_data.dpb_fourcc);
@@ -3585,12 +3596,15 @@ static int set_dpb_only_buffers(struct msm_vidc_inst *inst,
		inst->session, HFI_PROPERTY_PARAM_BUFFER_SIZE_MINIMUM,
		&b, sizeof(b));

	extradata_buf = get_buff_req_buffer(inst, HAL_BUFFER_EXTRADATA_OUTPUT);
	if (extradata_buf) {
	if (inst->bufq[CAPTURE_PORT].num_planes == 1 ||
		!inst->bufq[CAPTURE_PORT].plane_sizes[1]) {
		dprintk(VIDC_DBG,
			"This extradata buffer not required, buffer_type: %x\n",
			buffer_type);
	} else {
		dprintk(VIDC_DBG,
			"extradata: num = %d, size = %d\n",
			extradata_buf->buffer_count_actual,
			extradata_buf->buffer_size);
			"extradata: num = 1, size = %d\n",
			inst->bufq[CAPTURE_PORT].plane_sizes[1]);
		inst->dpb_extra_binfo = NULL;
		inst->dpb_extra_binfo = kzalloc(sizeof(*binfo), GFP_KERNEL);
		if (!inst->dpb_extra_binfo) {
@@ -3599,17 +3613,13 @@ static int set_dpb_only_buffers(struct msm_vidc_inst *inst,
			goto fail_kzalloc;
		}
		rc = msm_comm_smem_alloc(inst,
			extradata_buf->buffer_size, 1, smem_flags,
			inst->bufq[CAPTURE_PORT].plane_sizes[1], 1, smem_flags,
			buffer_type, 0, &inst->dpb_extra_binfo->smem);
		if (rc) {
			dprintk(VIDC_ERR,
				"Failed to allocate output memory\n");
			goto err_no_mem;
		}
	} else {
		dprintk(VIDC_DBG,
			"This extradata buffer not required, buffer_type: %x\n",
			buffer_type);
	}

	if (inst->flags & VIDC_SECURE)