diff --git a/driver/variant/iris3/src/msm_vidc_buffer_iris3.c b/driver/variant/iris3/src/msm_vidc_buffer_iris3.c index 589ab40eff..9dc9b05640 100644 --- a/driver/variant/iris3/src/msm_vidc_buffer_iris3.c +++ b/driver/variant/iris3/src/msm_vidc_buffer_iris3.c @@ -557,6 +557,7 @@ static u32 msm_vidc_encoder_output_size_iris3(struct msm_vidc_inst *inst) bool is_ten_bit = false; int bitrate_mode, frame_rc; u32 hfi_rc_type = HFI_RC_VBR_CFR; + enum msm_vidc_codec_type codec; if (!inst || !inst->capabilities) { d_vpr_e("%s: invalid params\n", __func__); @@ -564,8 +565,8 @@ static u32 msm_vidc_encoder_output_size_iris3(struct msm_vidc_inst *inst) } f = &inst->fmts[OUTPUT_PORT]; - if (f->fmt.pix_mp.pixelformat == V4L2_PIX_FMT_HEVC || - f->fmt.pix_mp.pixelformat == V4L2_PIX_FMT_HEIC) + codec = v4l2_codec_to_driver(inst, f->fmt.pix_mp.pixelformat, __func__); + if (codec == MSM_VIDC_HEVC || codec == MSM_VIDC_HEIC) is_ten_bit = true; bitrate_mode = inst->capabilities->cap[BITRATE_MODE].value; diff --git a/driver/vidc/src/msm_venc.c b/driver/vidc/src/msm_venc.c index 0e850bf757..bb487d2119 100644 --- a/driver/vidc/src/msm_venc.c +++ b/driver/vidc/src/msm_venc.c @@ -1082,6 +1082,7 @@ int msm_venc_s_fmt_output(struct msm_vidc_inst *inst, struct v4l2_format *f) struct msm_vidc_core *core; u32 codec_align; u32 width, height; + enum msm_vidc_codec_type codec; if (!inst || !inst->core || !f) { d_vpr_e("%s: invalid params\n", __func__); @@ -1098,8 +1099,10 @@ int msm_venc_s_fmt_output(struct msm_vidc_inst *inst, struct v4l2_format *f) } fmt->type = OUTPUT_MPLANE; - codec_align = (f->fmt.pix_mp.pixelformat == V4L2_PIX_FMT_HEVC || - f->fmt.pix_mp.pixelformat == V4L2_PIX_FMT_HEIC) ? 32 : 16; + codec = v4l2_codec_to_driver(inst, f->fmt.pix_mp.pixelformat, __func__); + + codec_align = (codec == MSM_VIDC_HEVC || + codec == MSM_VIDC_HEIC) ? 32 : 16; /* use rotated width height if rotation is enabled */ width = inst->compose.width; height = inst->compose.height; diff --git a/driver/vidc/src/msm_vidc_buffer.c b/driver/vidc/src/msm_vidc_buffer.c index 9c552e74ef..da85f3b73b 100644 --- a/driver/vidc/src/msm_vidc_buffer.c +++ b/driver/vidc/src/msm_vidc_buffer.c @@ -210,6 +210,7 @@ u32 msm_vidc_decoder_input_size(struct msm_vidc_inst *inst) u32 base_res_mbs = NUM_MBS_4k; struct v4l2_format *f; u32 bitstream_size_overwrite = 0; + enum msm_vidc_codec_type codec; if (!inst || !inst->capabilities) { d_vpr_e("%s: invalid params\n", __func__); @@ -233,13 +234,14 @@ u32 msm_vidc_decoder_input_size(struct msm_vidc_inst *inst) * 4k mbs for VP8/VP9 and 4k / 2 for remaining codecs. */ f = &inst->fmts[INPUT_PORT]; + codec = v4l2_codec_to_driver(inst, f->fmt.pix_mp.pixelformat, __func__); num_mbs = msm_vidc_get_mbs_per_frame(inst); if (num_mbs > NUM_MBS_4k) { div_factor = 4; base_res_mbs = inst->capabilities->cap[MBPF].value; } else { base_res_mbs = NUM_MBS_4k; - if (f->fmt.pix_mp.pixelformat == V4L2_PIX_FMT_VP9) + if (codec == MSM_VIDC_VP9) div_factor = 1; else div_factor = 2; @@ -257,10 +259,8 @@ u32 msm_vidc_decoder_input_size(struct msm_vidc_inst *inst) frame_size = base_res_mbs * MB_SIZE_IN_PIXEL * 3 / 2 / div_factor; /* multiply by 10/8 (1.25) to get size for 10 bit case */ - if (f->fmt.pix_mp.pixelformat == V4L2_PIX_FMT_VP9 || - f->fmt.pix_mp.pixelformat == V4L2_PIX_FMT_AV1 || - f->fmt.pix_mp.pixelformat == V4L2_PIX_FMT_HEVC || - f->fmt.pix_mp.pixelformat == V4L2_PIX_FMT_HEIC) + if (codec == MSM_VIDC_VP9 || codec == MSM_VIDC_AV1 || + codec == MSM_VIDC_HEVC || codec == MSM_VIDC_HEIC) frame_size = frame_size + (frame_size >> 2); i_vpr_h(inst, "set input buffer size to %d\n", frame_size); @@ -363,6 +363,7 @@ u32 msm_vidc_encoder_output_size(struct msm_vidc_inst *inst) u32 mbs_per_frame; u32 width, height; struct v4l2_format *f; + enum msm_vidc_codec_type codec; if (!inst || !inst->capabilities) { d_vpr_e("%s: invalid params\n", __func__); @@ -370,6 +371,7 @@ u32 msm_vidc_encoder_output_size(struct msm_vidc_inst *inst) } f = &inst->fmts[OUTPUT_PORT]; + codec = v4l2_codec_to_driver(inst, f->fmt.pix_mp.pixelformat, __func__); /* * Encoder output size calculation: 32 Align width/height * For heic session : YUVsize * 2 @@ -405,8 +407,7 @@ u32 msm_vidc_encoder_output_size(struct msm_vidc_inst *inst) skip_calc: /* multiply by 10/8 (1.25) to get size for 10 bit case */ - if (f->fmt.pix_mp.pixelformat == V4L2_PIX_FMT_HEVC || - f->fmt.pix_mp.pixelformat == V4L2_PIX_FMT_HEIC) + if (codec == MSM_VIDC_HEVC || codec == MSM_VIDC_HEIC) frame_size = frame_size + (frame_size >> 2); frame_size = ALIGN(frame_size, SZ_4K);