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

Commit ea04bb55 authored by qctecmdr Service's avatar qctecmdr Service Committed by Gerrit - the friendly Code Review server
Browse files

Merge "msm: vidc: optimize encoder ftb cache ops"

parents 6773f9c1 dc7c653a
Loading
Loading
Loading
Loading
+67 −1
Original line number Original line Diff line number Diff line
@@ -2582,6 +2582,10 @@ static void handle_fbd(enum hal_command_response cmd, void *data)
		msm_comm_store_mark_data(&inst->fbd_data, vb->index,
		msm_comm_store_mark_data(&inst->fbd_data, vb->index,
			fill_buf_done->mark_data, fill_buf_done->mark_target);
			fill_buf_done->mark_data, fill_buf_done->mark_target);
	}
	}
	if (inst->session_type == MSM_VIDC_ENCODER) {
		msm_comm_store_filled_length(&inst->fbd_data, vb->index,
			fill_buf_done->filled_len1);
	}


	extra_idx = EXTRADATA_IDX(inst->bufq[CAPTURE_PORT].num_planes);
	extra_idx = EXTRADATA_IDX(inst->bufq[CAPTURE_PORT].num_planes);
	if (extra_idx && extra_idx < VIDEO_MAX_PLANES)
	if (extra_idx && extra_idx < VIDEO_MAX_PLANES)
@@ -6056,9 +6060,14 @@ int msm_comm_qbuf_cache_operations(struct msm_vidc_inst *inst,
			} else if (vb->type ==
			} else if (vb->type ==
					V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE) {
					V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE) {
				if (!i) { /* bitstream */
				if (!i) { /* bitstream */
					u32 size_u32;
					skip = false;
					skip = false;
					offset = 0;
					offset = 0;
					size = vb->planes[i].length;
					size_u32 = vb->planes[i].length;
					msm_comm_fetch_filled_length(
						&inst->fbd_data, vb->index,
						&size_u32);
					size = size_u32;
					cache_op = SMEM_CACHE_INVALIDATE;
					cache_op = SMEM_CACHE_INVALIDATE;
				}
				}
			}
			}
@@ -6520,6 +6529,63 @@ bool kref_get_mbuf(struct msm_vidc_inst *inst, struct msm_vidc_buffer *mbuf)
	return ret;
	return ret;
}
}


void msm_comm_store_filled_length(struct msm_vidc_list *data_list,
		u32 index, u32 filled_length)
{
	struct msm_vidc_buf_data *pdata = NULL;
	bool found = false;

	if (!data_list) {
		dprintk(VIDC_ERR, "%s: invalid params %pK\n",
			__func__, data_list);
		return;
	}

	mutex_lock(&data_list->lock);
	list_for_each_entry(pdata, &data_list->list, list) {
		if (pdata->index == index) {
			pdata->filled_length = filled_length;
			found = true;
			break;
		}
	}

	if (!found) {
		pdata = kzalloc(sizeof(*pdata), GFP_KERNEL);
		if (!pdata)  {
			dprintk(VIDC_WARN, "%s: malloc failure.\n", __func__);
			goto exit;
		}
		pdata->index = index;
		pdata->filled_length = filled_length;
		list_add_tail(&pdata->list, &data_list->list);
	}

exit:
	mutex_unlock(&data_list->lock);
}

void msm_comm_fetch_filled_length(struct msm_vidc_list *data_list,
		u32 index, u32 *filled_length)
{
	struct msm_vidc_buf_data *pdata = NULL;

	if (!data_list || !filled_length) {
		dprintk(VIDC_ERR, "%s: invalid params %pK %pK\n",
			__func__, data_list, filled_length);
		return;
	}

	mutex_lock(&data_list->lock);
	list_for_each_entry(pdata, &data_list->list, list) {
		if (pdata->index == index) {
			*filled_length = pdata->filled_length;
			break;
		}
	}
	mutex_unlock(&data_list->lock);
}

void msm_comm_store_mark_data(struct msm_vidc_list *data_list,
void msm_comm_store_mark_data(struct msm_vidc_list *data_list,
		u32 index, u32 mark_data, u32 mark_target)
		u32 index, u32 mark_data, u32 mark_target)
{
{
+4 −0
Original line number Original line Diff line number Diff line
@@ -252,6 +252,10 @@ void print_v4l2_buffer(u32 tag, const char *str, struct msm_vidc_inst *inst,
		struct v4l2_buffer *v4l2);
		struct v4l2_buffer *v4l2);
void kref_put_mbuf(struct msm_vidc_buffer *mbuf);
void kref_put_mbuf(struct msm_vidc_buffer *mbuf);
bool kref_get_mbuf(struct msm_vidc_inst *inst, struct msm_vidc_buffer *mbuf);
bool kref_get_mbuf(struct msm_vidc_inst *inst, struct msm_vidc_buffer *mbuf);
void msm_comm_store_filled_length(struct msm_vidc_list *data_list,
		u32 index, u32 filled_length);
void msm_comm_fetch_filled_length(struct msm_vidc_list *data_list,
		u32 index, u32 *filled_length);
void msm_comm_store_mark_data(struct msm_vidc_list *data_list,
void msm_comm_store_mark_data(struct msm_vidc_list *data_list,
		u32 index, u32 mark_data, u32 mark_target);
		u32 index, u32 mark_data, u32 mark_target);
void msm_comm_fetch_mark_data(struct msm_vidc_list *data_list,
void msm_comm_fetch_mark_data(struct msm_vidc_list *data_list,
+1 −0
Original line number Original line Diff line number Diff line
@@ -187,6 +187,7 @@ struct msm_vidc_buf_data {
	u32 index;
	u32 index;
	u32 mark_data;
	u32 mark_data;
	u32 mark_target;
	u32 mark_target;
	u32 filled_length;
};
};


struct msm_vidc_common_data {
struct msm_vidc_common_data {