Loading drivers/media/platform/msm/vidc/msm_vidc_common.c +67 −1 Original line number Original line Diff line number Diff line Loading @@ -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) Loading Loading @@ -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; } } } } Loading Loading @@ -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) { { Loading drivers/media/platform/msm/vidc/msm_vidc_common.h +4 −0 Original line number Original line Diff line number Diff line Loading @@ -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, Loading drivers/media/platform/msm/vidc/msm_vidc_internal.h +1 −0 Original line number Original line Diff line number Diff line Loading @@ -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 { Loading Loading
drivers/media/platform/msm/vidc/msm_vidc_common.c +67 −1 Original line number Original line Diff line number Diff line Loading @@ -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) Loading Loading @@ -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; } } } } Loading Loading @@ -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) { { Loading
drivers/media/platform/msm/vidc/msm_vidc_common.h +4 −0 Original line number Original line Diff line number Diff line Loading @@ -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, Loading
drivers/media/platform/msm/vidc/msm_vidc_internal.h +1 −0 Original line number Original line Diff line number Diff line Loading @@ -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 { Loading