Forráskód Böngészése

video: driver: Align dec dpb buffer size calculation with HFI

Align decoder dpb buffer size calculated via HFI macro
HFI_NV12_UBWC_IL_CALC_BUF_SIZE_V2 with HFI file

Change-Id: I431bbee8bca07d87713bc7706259f679ab0734bd
Signed-off-by: Akshata Sahukar <[email protected]>
Akshata Sahukar 2 éve
szülő
commit
dbc5f268c9

+ 2 - 2
driver/variant/iris33/inc/hfi_buffer_iris33.h

@@ -89,7 +89,7 @@ typedef HFI_U32 HFI_BOOL;
 	y_buffer_height_multiple, uv_stride_multiple, \
 	uv_buffer_height_multiple, y_metadata_stride_multiple, \
 	y_metadata_buffer_height_multiple, \
-	uv_metadata_stride_multiple, uv_metadata_buffer_height_multiple) \
+	uv_metadata_stride_multiple, uv_metadata_buffer_height_multiple, binterlace) \
 	do \
 	{ \
 		HFI_U32 y_buf_size, uv_buf_size, y_meta_size, uv_meta_size;   \
@@ -122,7 +122,7 @@ typedef HFI_U32 HFI_BOOL;
 		HFI_UBWC_METADATA_PLANE_BUFFER_SIZE(uv_meta_size, stride, \
 				 _height); \
 		buf_size = (y_buf_size + uv_buf_size + y_meta_size + \
-			uv_meta_size) << 1;\
+			uv_meta_size) << binterlace;\
 	} while (0)
 
 #define HFI_YUV420_TP10_CALC_Y_STRIDE(stride, frame_width, stride_multiple) \

+ 8 - 1
driver/variant/iris33/src/msm_vidc_buffer_iris33.c

@@ -266,6 +266,7 @@ static u32 msm_vidc_decoder_dpb_size_iris33(struct msm_vidc_inst *inst)
 	u32 size = 0;
 	u32 color_fmt;
 	u32 width, height;
+	u32 interlace = 0;
 	struct v4l2_format *f;
 
 	if (!inst) {
@@ -292,6 +293,11 @@ static u32 msm_vidc_decoder_dpb_size_iris33(struct msm_vidc_inst *inst)
 	width = f->fmt.pix_mp.width;
 	height = f->fmt.pix_mp.height;
 
+
+	if (inst->codec == MSM_VIDC_H264 &&
+		res_is_less_than_or_equal_to(width, height, 1920, 1088))
+		interlace = 1;
+
 	if (color_fmt == MSM_VIDC_FMT_NV12 ||
 		color_fmt == MSM_VIDC_FMT_NV12C) {
 		color_fmt = MSM_VIDC_FMT_NV12C;
@@ -303,7 +309,8 @@ static u32 msm_vidc_decoder_dpb_size_iris33(struct msm_vidc_inst *inst)
 			video_y_meta_stride(color_fmt, width),
 			video_y_meta_scanlines(color_fmt, height),
 			video_uv_meta_stride(color_fmt, width),
-			video_uv_meta_scanlines(color_fmt, height));
+			video_uv_meta_scanlines(color_fmt, height),
+			interlace);
 	} else if (color_fmt == MSM_VIDC_FMT_P010 ||
 		color_fmt == MSM_VIDC_FMT_TP10C) {
 		color_fmt = MSM_VIDC_FMT_TP10C;