ソースを参照

video: variant: update buffer calculation in iris2 variant

Update the buffer sizes for h264 codec in IRIS2 variant to
align with updated buffer calculation for IRIS3.

Change-Id: Ic211cdc88bb173f790ac11dad68ad248ed4a3f34
Signed-off-by: Dikshita Agarwal <[email protected]>
Dikshita Agarwal 2 年 前
コミット
f13df6b014

+ 22 - 10
driver/variant/iris2/inc/hfi_buffer_iris2.h

@@ -371,7 +371,7 @@ typedef HFI_U32 HFI_BOOL;
 	{    \
 		HFI_U32 _height = HFI_ALIGN(frame_height, \
 				BUFFER_ALIGNMENT_32_BYTES);  \
-		_size = MIN((((_height + 15) >> 4) * 3 * 4), H264D_MAX_SLICE) *\
+		_size = MIN((((_height + 15) >> 4) * 48), H264D_MAX_SLICE) *\
 					  SIZE_H264D_BSE_CMD_PER_BUF; \
 	} while (0)
 
@@ -380,7 +380,7 @@ typedef HFI_U32 HFI_BOOL;
 	{    \
 		HFI_U32 _height = HFI_ALIGN(frame_height, \
 				BUFFER_ALIGNMENT_32_BYTES); \
-		_size = MIN((((_height + 15) >> 4) * 3 * 4), H264D_MAX_SLICE) * \
+		_size = MIN((((_height + 15) >> 4) * 48), H264D_MAX_SLICE) * \
 					SIZE_H264D_VPP_CMD_PER_BUF; \
 		if (_size > VPP_CMD_MAX_SIZE) { _size = VPP_CMD_MAX_SIZE; } \
 	} while (0)
@@ -512,9 +512,15 @@ typedef HFI_U32 HFI_BOOL;
 #define NUM_SLIST_BUF_H264 (256 + 32)
 #define SIZE_SLIST_BUF_H264 (512)
 #define SIZE_SEI_USERDATA (4096)
-#define HFI_BUFFER_PERSIST_H264D(_size) \
-	_size = HFI_ALIGN((SIZE_SLIST_BUF_H264 * NUM_SLIST_BUF_H264 + \
-	NUM_HW_PIC_BUF * SIZE_SEI_USERDATA), VENUS_DMA_ALIGNMENT)
+#define H264_NUM_FRM_INFO (66)
+#define H264_DISPLAY_BUF_SIZE (3328)
+#define SIZE_DOLBY_RPU_METADATA (41 * 1024)
+#define HFI_BUFFER_PERSIST_H264D(_size, rpu_enabled) \
+	(_size = HFI_ALIGN((SIZE_SLIST_BUF_H264 * NUM_SLIST_BUF_H264 + \
+	H264_DISPLAY_BUF_SIZE * H264_NUM_FRM_INFO + \
+	NUM_HW_PIC_BUF * SIZE_SEI_USERDATA + \
+	(rpu_enabled) * NUM_HW_PIC_BUF * SIZE_DOLBY_RPU_METADATA), \
+	VENUS_DMA_ALIGNMENT))
 
 #define LCU_MAX_SIZE_PELS 64
 #define LCU_MIN_SIZE_PELS 16
@@ -712,10 +718,14 @@ typedef HFI_U32 HFI_BOOL;
 #define H265_NUM_TILE_COL 32
 #define H265_NUM_TILE_ROW 128
 #define H265_NUM_TILE (H265_NUM_TILE_ROW * H265_NUM_TILE_COL + 1)
-#define HFI_BUFFER_PERSIST_H265D(_size) \
-	_size = HFI_ALIGN((SIZE_SLIST_BUF_H265 * NUM_SLIST_BUF_H265 + \
-	H265_NUM_TILE * sizeof(HFI_U32) + NUM_HW_PIC_BUF * SIZE_SEI_USERDATA),\
-	VENUS_DMA_ALIGNMENT)
+#define H265_NUM_FRM_INFO (48)
+#define H265_DISPLAY_BUF_SIZE (3072)
+#define HFI_BUFFER_PERSIST_H265D(_size, rpu_enabled) \
+	(_size = HFI_ALIGN((SIZE_SLIST_BUF_H265 * NUM_SLIST_BUF_H265 + \
+	H265_NUM_FRM_INFO * H265_DISPLAY_BUF_SIZE + \
+	H265_NUM_TILE * sizeof(HFI_U32) + NUM_HW_PIC_BUF * SIZE_SEI_USERDATA + \
+	(rpu_enabled) * NUM_HW_PIC_BUF * SIZE_DOLBY_RPU_METADATA),\
+	VENUS_DMA_ALIGNMENT))
 
 #define SIZE_VPXD_LB_FE_LEFT_CTRL(frame_width, frame_height)   \
 	MAX(((frame_height + 15) >> 4) * \
@@ -827,6 +837,7 @@ typedef HFI_U32 HFI_BOOL;
 #define VP9_NUM_FRAME_INFO_BUF 32
 #define VP9_NUM_PROBABILITY_TABLE_BUF (VP9_NUM_FRAME_INFO_BUF + 4)
 #define VP9_PROB_TABLE_SIZE (3840)
+#define VP9_FRAME_INFO_BUF_SIZE (6144)
 
 #define VP9_UDC_HEADER_BUF_SIZE (3 * 128)
 #define MAX_SUPERFRAME_HEADER_LEN (34)
@@ -839,7 +850,8 @@ typedef HFI_U32 HFI_BOOL;
 	VENUS_DMA_ALIGNMENT) + HFI_ALIGN(VP9_UDC_HEADER_BUF_SIZE, \
 	VENUS_DMA_ALIGNMENT) + HFI_ALIGN(VP9_NUM_FRAME_INFO_BUF * \
 	CCE_TILE_OFFSET_SIZE, VENUS_DMA_ALIGNMENT) + \
-	HDR10_HIST_EXTRADATA_SIZE
+	HFI_ALIGN(VP9_NUM_FRAME_INFO_BUF * VP9_FRAME_INFO_BUF_SIZE, \
+	VENUS_DMA_ALIGNMENT) + HDR10_HIST_EXTRADATA_SIZE
 
 #define HFI_BUFFER_LINE_MP2D(_size, frame_width, frame_height, \
 _yuv_bufcount_min, is_opb, num_vpp_pipes)           \

+ 6 - 2
driver/variant/iris2/src/msm_vidc_buffer_iris2.c

@@ -182,16 +182,20 @@ static u32 msm_vidc_decoder_line_size_iris2(struct msm_vidc_inst *inst)
 static u32 msm_vidc_decoder_persist_size_iris2(struct msm_vidc_inst *inst)
 {
 	u32 size = 0;
+	u32 rpu_enabled = 0;
 
 	if (!inst) {
 		d_vpr_e("%s: invalid params\n", __func__);
 		return size;
 	}
 
+	if (inst->capabilities->cap[META_DOLBY_RPU].value)
+		rpu_enabled = 1;
+
 	if (inst->codec == MSM_VIDC_H264)
-		HFI_BUFFER_PERSIST_H264D(size);
+		HFI_BUFFER_PERSIST_H264D(size, rpu_enabled);
 	else if (inst->codec == MSM_VIDC_HEVC || inst->codec == MSM_VIDC_HEIC)
-		HFI_BUFFER_PERSIST_H265D(size);
+		HFI_BUFFER_PERSIST_H265D(size, rpu_enabled);
 	else if (inst->codec == MSM_VIDC_VP9)
 		HFI_BUFFER_PERSIST_VP9D(size);