Просмотр исходного кода

video: driver: update bitstream buffer size calculation

calculate bitstream buffer size using firware macro

Change-Id: I1a06007ae8cd2852d70a426ba57119563813ebc5
Signed-off-by: Deepa Guthyappa Madivalara <[email protected]>
Deepa Guthyappa Madivalara 3 лет назад
Родитель
Сommit
197328a67e

+ 34 - 1
driver/variant/iris3/src/msm_vidc_buffer_iris3.c

@@ -546,6 +546,39 @@ static u32 msm_vidc_encoder_vpss_size_iris3(struct msm_vidc_inst* inst)
 	return size;
 	return size;
 }
 }
 
 
+static u32 msm_vidc_encoder_output_size_iris3(struct msm_vidc_inst *inst)
+{
+	u32 frame_size;
+	struct v4l2_format *f;
+	bool is_ten_bit = false;
+	int bitrate_mode, frame_rc;
+	u32 hfi_rc_type = HFI_RC_VBR_CFR;
+
+	if (!inst || !inst->capabilities) {
+		d_vpr_e("%s: invalid params\n", __func__);
+		return -EINVAL;
+	}
+
+	f = &inst->fmts[OUTPUT_PORT];
+	if (f->fmt.pix_mp.pixelformat == V4L2_PIX_FMT_HEVC ||
+		f->fmt.pix_mp.pixelformat == V4L2_PIX_FMT_HEIC)
+		is_ten_bit = true;
+
+	bitrate_mode = inst->capabilities->cap[BITRATE_MODE].value;
+	frame_rc = inst->capabilities->cap[FRAME_RC_ENABLE].value;
+	if (!frame_rc && !is_image_session(inst))
+		hfi_rc_type = HFI_RC_OFF;
+	else if (bitrate_mode == V4L2_MPEG_VIDEO_BITRATE_MODE_CQ)
+		hfi_rc_type = HFI_RC_CQ;
+
+	HFI_BUFFER_BITSTREAM_ENC(frame_size, f->fmt.pix_mp.width,
+		f->fmt.pix_mp.height, hfi_rc_type, is_ten_bit);
+
+	frame_size = msm_vidc_enc_delivery_mode_based_output_buf_size(inst, frame_size);
+
+	return frame_size;
+}
+
 struct msm_vidc_buf_type_handle {
 struct msm_vidc_buf_type_handle {
 	enum msm_vidc_buffer_type type;
 	enum msm_vidc_buffer_type type;
 	u32 (*handle)(struct msm_vidc_inst *inst);
 	u32 (*handle)(struct msm_vidc_inst *inst);
@@ -572,7 +605,7 @@ int msm_buffer_size_iris3(struct msm_vidc_inst *inst,
 	};
 	};
 	static const struct msm_vidc_buf_type_handle enc_buf_type_handle[] = {
 	static const struct msm_vidc_buf_type_handle enc_buf_type_handle[] = {
 		{MSM_VIDC_BUF_INPUT,           msm_vidc_encoder_input_size              },
 		{MSM_VIDC_BUF_INPUT,           msm_vidc_encoder_input_size              },
-		{MSM_VIDC_BUF_OUTPUT,          msm_vidc_encoder_output_size             },
+		{MSM_VIDC_BUF_OUTPUT,          msm_vidc_encoder_output_size_iris3       },
 		{MSM_VIDC_BUF_INPUT_META,      msm_vidc_encoder_input_meta_size         },
 		{MSM_VIDC_BUF_INPUT_META,      msm_vidc_encoder_input_meta_size         },
 		{MSM_VIDC_BUF_OUTPUT_META,     msm_vidc_encoder_output_meta_size        },
 		{MSM_VIDC_BUF_OUTPUT_META,     msm_vidc_encoder_output_meta_size        },
 		{MSM_VIDC_BUF_BIN,             msm_vidc_encoder_bin_size_iris3          },
 		{MSM_VIDC_BUF_BIN,             msm_vidc_encoder_bin_size_iris3          },

+ 2 - 0
driver/vidc/inc/msm_vidc_buffer.h

@@ -31,5 +31,7 @@ u32 msm_vidc_encoder_input_size(struct msm_vidc_inst *inst);
 u32 msm_vidc_encoder_output_size(struct msm_vidc_inst *inst);
 u32 msm_vidc_encoder_output_size(struct msm_vidc_inst *inst);
 u32 msm_vidc_encoder_input_meta_size(struct msm_vidc_inst *inst);
 u32 msm_vidc_encoder_input_meta_size(struct msm_vidc_inst *inst);
 u32 msm_vidc_encoder_output_meta_size(struct msm_vidc_inst *inst);
 u32 msm_vidc_encoder_output_meta_size(struct msm_vidc_inst *inst);
+u32 msm_vidc_enc_delivery_mode_based_output_buf_size(struct msm_vidc_inst *inst,
+	u32 frame_size);
 
 
 #endif // __H_MSM_VIDC_BUFFER_H__
 #endif // __H_MSM_VIDC_BUFFER_H__

+ 1 - 1
driver/vidc/src/msm_vidc_buffer.c

@@ -313,7 +313,7 @@ u32 msm_vidc_encoder_input_size(struct msm_vidc_inst *inst)
 	return size;
 	return size;
 }
 }
 
 
-static u32 msm_vidc_enc_delivery_mode_based_output_buf_size(struct msm_vidc_inst *inst,
+u32 msm_vidc_enc_delivery_mode_based_output_buf_size(struct msm_vidc_inst *inst,
 	u32 frame_size)
 	u32 frame_size)
 {
 {
 	u32 slice_size;
 	u32 slice_size;

+ 1 - 1
driver/vidc/src/msm_vidc_driver.c

@@ -6233,7 +6233,7 @@ static bool msm_vidc_allow_image_encode_session(struct msm_vidc_inst *inst)
 	}
 	}
 
 
 	/* is bitrate mode CQ */
 	/* is bitrate mode CQ */
-	allow = capability->cap[BITRATE_MODE].value == HFI_RC_CQ;
+	allow = capability->cap[BITRATE_MODE].value == V4L2_MPEG_VIDEO_BITRATE_MODE_CQ;
 	if (!allow) {
 	if (!allow) {
 		i_vpr_e(inst, "%s: bitrate mode is not CQ: %#x\n", __func__,
 		i_vpr_e(inst, "%s: bitrate mode is not CQ: %#x\n", __func__,
 			capability->cap[BITRATE_MODE].value);
 			capability->cap[BITRATE_MODE].value);