Loading msm/vidc/msm_vdec.c +3 −3 Original line number Diff line number Diff line Loading @@ -685,7 +685,7 @@ int msm_vdec_s_fmt(struct msm_vidc_inst *inst, struct v4l2_format *f) } mplane->plane_fmt[0].sizeimage = msm_vidc_calculate_dec_input_frame_size(inst); msm_vidc_calculate_dec_input_frame_size(inst, inst->buffer_size_limit); /* Driver can recalculate buffer count only for * only for bitstream port. Decoder YUV port reconfig Loading Loading @@ -733,7 +733,7 @@ int msm_vdec_g_fmt(struct msm_vidc_inst *inst, struct v4l2_format *f) } else if (f->type == INPUT_MPLANE) { fmt = &inst->fmts[INPUT_PORT].v4l2_fmt; fmt->fmt.pix_mp.plane_fmt[0].sizeimage = msm_vidc_calculate_dec_input_frame_size(inst); msm_vidc_calculate_dec_input_frame_size(inst, inst->buffer_size_limit); memcpy(f, fmt, sizeof(struct v4l2_format)); } else { s_vpr_e(inst->sid, "%s: Unsupported buf type: %d\n", Loading Loading @@ -817,7 +817,7 @@ int msm_vdec_inst_init(struct msm_vidc_inst *inst) f->fmt.pix_mp.pixelformat = V4L2_PIX_FMT_H264; f->fmt.pix_mp.num_planes = 1; f->fmt.pix_mp.plane_fmt[0].sizeimage = msm_vidc_calculate_dec_input_frame_size(inst); msm_vidc_calculate_dec_input_frame_size(inst, inst->buffer_size_limit); fmt_desc = msm_comm_get_pixel_fmt_fourcc(vdec_input_formats, ARRAY_SIZE(vdec_input_formats), f->fmt.pix_mp.pixelformat, inst->sid); Loading msm/vidc/msm_vidc_buffer_calculations.c +3 −4 Original line number Diff line number Diff line Loading @@ -876,7 +876,7 @@ static int msm_vidc_get_extra_output_buff_count(struct msm_vidc_inst *inst) return extra_output_count; } u32 msm_vidc_calculate_dec_input_frame_size(struct msm_vidc_inst *inst) u32 msm_vidc_calculate_dec_input_frame_size(struct msm_vidc_inst *inst, u32 buffer_size_limit) { u32 frame_size, num_mbs; u32 div_factor = 1; Loading Loading @@ -928,9 +928,8 @@ u32 msm_vidc_calculate_dec_input_frame_size(struct msm_vidc_inst *inst) inst->core->platform_data->vpu_ver != VPU_VERSION_AR50_LITE) frame_size = frame_size + (frame_size >> 2); if (inst->buffer_size_limit && (inst->buffer_size_limit < frame_size)) { frame_size = inst->buffer_size_limit; if (buffer_size_limit && (buffer_size_limit < frame_size)) { frame_size = buffer_size_limit; s_vpr_h(inst->sid, "input buffer size limited to %d\n", frame_size); } else { Loading msm/vidc/msm_vidc_buffer_calculations.h +2 −1 Original line number Diff line number Diff line Loading @@ -37,7 +37,8 @@ int msm_vidc_calculate_output_buffer_count(struct msm_vidc_inst *inst); int msm_vidc_calculate_buffer_counts(struct msm_vidc_inst *inst); int msm_vidc_get_extra_buff_count(struct msm_vidc_inst *inst, enum hal_buffer buffer_type); u32 msm_vidc_calculate_dec_input_frame_size(struct msm_vidc_inst *inst); u32 msm_vidc_calculate_dec_input_frame_size(struct msm_vidc_inst *inst, u32 buffer_size_limit); 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); Loading msm/vidc/msm_vidc_common.c +13 −3 Original line number Diff line number Diff line Loading @@ -3351,6 +3351,9 @@ static void msm_comm_print_mem_usage(struct msm_vidc_core *core) break; } } if (is_decode_session(inst)) sz_i = msm_vidc_calculate_dec_input_frame_size(inst, 0); else sz_i = iplane->plane_fmt[0].sizeimage; sz_i_e = iplane->plane_fmt[1].sizeimage; cnt_i = inp_f->count_min_host; Loading Loading @@ -5802,7 +5805,7 @@ int msm_comm_check_memory_supported(struct msm_vidc_inst *vidc_inst) struct v4l2_format *f; struct hal_buffer_requirements *req; struct context_bank_info *cb = NULL; u32 i, dpb_cnt = 0, dpb_size = 0, rc = 0; u32 i, dpb_cnt = 0, dpb_size = 0, input_size = 1, rc = 0; u32 inst_mem_size, non_sec_cb_size = 0; u64 total_mem_size = 0, non_sec_mem_size = 0; u32 memory_limit_mbytes; Loading @@ -5812,10 +5815,17 @@ int msm_comm_check_memory_supported(struct msm_vidc_inst *vidc_inst) mutex_lock(&core->lock); list_for_each_entry(inst, &core->instances, list) { inst_mem_size = 0; input_size = 1; /* input port buffers memory size */ fmt = &inst->fmts[INPUT_PORT]; f = &fmt->v4l2_fmt; for (i = 0; i < f->fmt.pix_mp.num_planes; i++) if (is_decode_session(inst)) input_size = msm_vidc_calculate_dec_input_frame_size(inst, 0); else input_size = f->fmt.pix_mp.plane_fmt[0].sizeimage; inst_mem_size += input_size * fmt->count_min_host; for (i = 1; i < f->fmt.pix_mp.num_planes; i++) inst_mem_size += f->fmt.pix_mp.plane_fmt[i].sizeimage * fmt->count_min_host; Loading Loading
msm/vidc/msm_vdec.c +3 −3 Original line number Diff line number Diff line Loading @@ -685,7 +685,7 @@ int msm_vdec_s_fmt(struct msm_vidc_inst *inst, struct v4l2_format *f) } mplane->plane_fmt[0].sizeimage = msm_vidc_calculate_dec_input_frame_size(inst); msm_vidc_calculate_dec_input_frame_size(inst, inst->buffer_size_limit); /* Driver can recalculate buffer count only for * only for bitstream port. Decoder YUV port reconfig Loading Loading @@ -733,7 +733,7 @@ int msm_vdec_g_fmt(struct msm_vidc_inst *inst, struct v4l2_format *f) } else if (f->type == INPUT_MPLANE) { fmt = &inst->fmts[INPUT_PORT].v4l2_fmt; fmt->fmt.pix_mp.plane_fmt[0].sizeimage = msm_vidc_calculate_dec_input_frame_size(inst); msm_vidc_calculate_dec_input_frame_size(inst, inst->buffer_size_limit); memcpy(f, fmt, sizeof(struct v4l2_format)); } else { s_vpr_e(inst->sid, "%s: Unsupported buf type: %d\n", Loading Loading @@ -817,7 +817,7 @@ int msm_vdec_inst_init(struct msm_vidc_inst *inst) f->fmt.pix_mp.pixelformat = V4L2_PIX_FMT_H264; f->fmt.pix_mp.num_planes = 1; f->fmt.pix_mp.plane_fmt[0].sizeimage = msm_vidc_calculate_dec_input_frame_size(inst); msm_vidc_calculate_dec_input_frame_size(inst, inst->buffer_size_limit); fmt_desc = msm_comm_get_pixel_fmt_fourcc(vdec_input_formats, ARRAY_SIZE(vdec_input_formats), f->fmt.pix_mp.pixelformat, inst->sid); Loading
msm/vidc/msm_vidc_buffer_calculations.c +3 −4 Original line number Diff line number Diff line Loading @@ -876,7 +876,7 @@ static int msm_vidc_get_extra_output_buff_count(struct msm_vidc_inst *inst) return extra_output_count; } u32 msm_vidc_calculate_dec_input_frame_size(struct msm_vidc_inst *inst) u32 msm_vidc_calculate_dec_input_frame_size(struct msm_vidc_inst *inst, u32 buffer_size_limit) { u32 frame_size, num_mbs; u32 div_factor = 1; Loading Loading @@ -928,9 +928,8 @@ u32 msm_vidc_calculate_dec_input_frame_size(struct msm_vidc_inst *inst) inst->core->platform_data->vpu_ver != VPU_VERSION_AR50_LITE) frame_size = frame_size + (frame_size >> 2); if (inst->buffer_size_limit && (inst->buffer_size_limit < frame_size)) { frame_size = inst->buffer_size_limit; if (buffer_size_limit && (buffer_size_limit < frame_size)) { frame_size = buffer_size_limit; s_vpr_h(inst->sid, "input buffer size limited to %d\n", frame_size); } else { Loading
msm/vidc/msm_vidc_buffer_calculations.h +2 −1 Original line number Diff line number Diff line Loading @@ -37,7 +37,8 @@ int msm_vidc_calculate_output_buffer_count(struct msm_vidc_inst *inst); int msm_vidc_calculate_buffer_counts(struct msm_vidc_inst *inst); int msm_vidc_get_extra_buff_count(struct msm_vidc_inst *inst, enum hal_buffer buffer_type); u32 msm_vidc_calculate_dec_input_frame_size(struct msm_vidc_inst *inst); u32 msm_vidc_calculate_dec_input_frame_size(struct msm_vidc_inst *inst, u32 buffer_size_limit); 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); Loading
msm/vidc/msm_vidc_common.c +13 −3 Original line number Diff line number Diff line Loading @@ -3351,6 +3351,9 @@ static void msm_comm_print_mem_usage(struct msm_vidc_core *core) break; } } if (is_decode_session(inst)) sz_i = msm_vidc_calculate_dec_input_frame_size(inst, 0); else sz_i = iplane->plane_fmt[0].sizeimage; sz_i_e = iplane->plane_fmt[1].sizeimage; cnt_i = inp_f->count_min_host; Loading Loading @@ -5802,7 +5805,7 @@ int msm_comm_check_memory_supported(struct msm_vidc_inst *vidc_inst) struct v4l2_format *f; struct hal_buffer_requirements *req; struct context_bank_info *cb = NULL; u32 i, dpb_cnt = 0, dpb_size = 0, rc = 0; u32 i, dpb_cnt = 0, dpb_size = 0, input_size = 1, rc = 0; u32 inst_mem_size, non_sec_cb_size = 0; u64 total_mem_size = 0, non_sec_mem_size = 0; u32 memory_limit_mbytes; Loading @@ -5812,10 +5815,17 @@ int msm_comm_check_memory_supported(struct msm_vidc_inst *vidc_inst) mutex_lock(&core->lock); list_for_each_entry(inst, &core->instances, list) { inst_mem_size = 0; input_size = 1; /* input port buffers memory size */ fmt = &inst->fmts[INPUT_PORT]; f = &fmt->v4l2_fmt; for (i = 0; i < f->fmt.pix_mp.num_planes; i++) if (is_decode_session(inst)) input_size = msm_vidc_calculate_dec_input_frame_size(inst, 0); else input_size = f->fmt.pix_mp.plane_fmt[0].sizeimage; inst_mem_size += input_size * fmt->count_min_host; for (i = 1; i < f->fmt.pix_mp.num_planes; i++) inst_mem_size += f->fmt.pix_mp.plane_fmt[i].sizeimage * fmt->count_min_host; Loading