Quellcode durchsuchen

Merge "video: driver: separate i/o subscribe prop codec wise"

qctecmdr vor 2 Jahren
Ursprung
Commit
76ac7dd6d5

+ 16 - 4
driver/platform/common/inc/msm_vidc_platform.h

@@ -248,10 +248,22 @@ struct msm_vidc_platform_data {
 	unsigned int psc_vp9_tbl_size;
 	const u32 *psc_av1_tbl;
 	unsigned int psc_av1_tbl_size;
-	const u32 *dec_input_prop;
-	unsigned int dec_input_prop_size;
-	const u32 *dec_output_prop;
-	unsigned int dec_output_prop_size;
+	const u32 *dec_input_prop_avc;
+	unsigned int dec_input_prop_size_avc;
+	const u32 *dec_input_prop_hevc;
+	unsigned int dec_input_prop_size_hevc;
+	const u32 *dec_input_prop_vp9;
+	unsigned int dec_input_prop_size_vp9;
+	const u32 *dec_input_prop_av1;
+	unsigned int dec_input_prop_size_av1;
+	const u32 *dec_output_prop_avc;
+	unsigned int dec_output_prop_size_avc;
+	const u32 *dec_output_prop_hevc;
+	unsigned int dec_output_prop_size_hevc;
+	const u32 *dec_output_prop_vp9;
+	unsigned int dec_output_prop_size_vp9;
+	const u32 *dec_output_prop_av1;
+	unsigned int dec_output_prop_size_av1;
 };
 
 struct msm_vidc_platform {

+ 57 - 6
driver/platform/pineapple/src/msm_vidc_pineapple.c

@@ -3053,7 +3053,25 @@ static const u32 pineapple_vdec_psc_av1[] = {
 	HFI_PROP_SIGNAL_COLOR_INFO,
 };
 
-static const u32 pineapple_vdec_input_properties[] = {
+static const u32 pineapple_vdec_input_properties_avc[] = {
+	HFI_PROP_NO_OUTPUT,
+	HFI_PROP_SUBFRAME_INPUT,
+	HFI_PROP_DPB_LIST,
+};
+
+static const u32 pineapple_vdec_input_properties_hevc[] = {
+	HFI_PROP_NO_OUTPUT,
+	HFI_PROP_SUBFRAME_INPUT,
+	HFI_PROP_DPB_LIST,
+};
+
+static const u32 pineapple_vdec_input_properties_vp9[] = {
+	HFI_PROP_NO_OUTPUT,
+	HFI_PROP_SUBFRAME_INPUT,
+	HFI_PROP_DPB_LIST,
+};
+
+static const u32 pineapple_vdec_input_properties_av1[] = {
 	HFI_PROP_NO_OUTPUT,
 	HFI_PROP_SUBFRAME_INPUT,
 	HFI_PROP_DPB_LIST,
@@ -3061,7 +3079,7 @@ static const u32 pineapple_vdec_input_properties[] = {
 	HFI_PROP_AV1_UNIFORM_TILE_SPACING,
 };
 
-static const u32 pineapple_vdec_output_properties[] = {
+static const u32 pineapple_vdec_output_properties_avc[] = {
 	HFI_PROP_WORST_COMPRESSION_RATIO,
 	HFI_PROP_WORST_COMPLEXITY_FACTOR,
 	HFI_PROP_PICTURE_TYPE,
@@ -3069,6 +3087,27 @@ static const u32 pineapple_vdec_output_properties[] = {
 	HFI_PROP_FENCE,
 };
 
+static const u32 pineapple_vdec_output_properties_hevc[] = {
+	HFI_PROP_WORST_COMPRESSION_RATIO,
+	HFI_PROP_WORST_COMPLEXITY_FACTOR,
+	HFI_PROP_PICTURE_TYPE,
+	HFI_PROP_FENCE,
+};
+
+static const u32 pineapple_vdec_output_properties_vp9[] = {
+	HFI_PROP_WORST_COMPRESSION_RATIO,
+	HFI_PROP_WORST_COMPLEXITY_FACTOR,
+	HFI_PROP_PICTURE_TYPE,
+	HFI_PROP_FENCE,
+};
+
+static const u32 pineapple_vdec_output_properties_av1[] = {
+	HFI_PROP_WORST_COMPRESSION_RATIO,
+	HFI_PROP_WORST_COMPLEXITY_FACTOR,
+	HFI_PROP_PICTURE_TYPE,
+	HFI_PROP_FENCE,
+};
+
 static const struct msm_vidc_platform_data pineapple_data = {
 	/* resources dependent on other module */
 	.bw_tbl = pineapple_bw_table,
@@ -3119,10 +3158,22 @@ static const struct msm_vidc_platform_data pineapple_data = {
 	.psc_vp9_tbl_size = ARRAY_SIZE(pineapple_vdec_psc_vp9),
 	.psc_av1_tbl = pineapple_vdec_psc_av1,
 	.psc_av1_tbl_size = ARRAY_SIZE(pineapple_vdec_psc_av1),
-	.dec_input_prop = pineapple_vdec_input_properties,
-	.dec_input_prop_size = ARRAY_SIZE(pineapple_vdec_input_properties),
-	.dec_output_prop = pineapple_vdec_output_properties,
-	.dec_output_prop_size = ARRAY_SIZE(pineapple_vdec_output_properties),
+	.dec_input_prop_avc = pineapple_vdec_input_properties_avc,
+	.dec_input_prop_hevc = pineapple_vdec_input_properties_hevc,
+	.dec_input_prop_vp9 = pineapple_vdec_input_properties_vp9,
+	.dec_input_prop_av1 = pineapple_vdec_input_properties_av1,
+	.dec_input_prop_size_avc = ARRAY_SIZE(pineapple_vdec_input_properties_avc),
+	.dec_input_prop_size_hevc = ARRAY_SIZE(pineapple_vdec_input_properties_hevc),
+	.dec_input_prop_size_vp9 = ARRAY_SIZE(pineapple_vdec_input_properties_vp9),
+	.dec_input_prop_size_av1 = ARRAY_SIZE(pineapple_vdec_input_properties_av1),
+	.dec_output_prop_avc = pineapple_vdec_output_properties_avc,
+	.dec_output_prop_hevc = pineapple_vdec_output_properties_hevc,
+	.dec_output_prop_vp9 = pineapple_vdec_output_properties_vp9,
+	.dec_output_prop_av1 = pineapple_vdec_output_properties_av1,
+	.dec_output_prop_size_avc = ARRAY_SIZE(pineapple_vdec_output_properties_avc),
+	.dec_output_prop_size_hevc = ARRAY_SIZE(pineapple_vdec_output_properties_hevc),
+	.dec_output_prop_size_vp9 = ARRAY_SIZE(pineapple_vdec_output_properties_vp9),
+	.dec_output_prop_size_av1 = ARRAY_SIZE(pineapple_vdec_output_properties_av1),
 };
 
 int msm_vidc_pineapple_check_ddr_type(void)

+ 35 - 4
driver/vidc/src/msm_vdec.c

@@ -962,8 +962,24 @@ static int msm_vdec_subscribe_property(struct msm_vidc_inst *inst,
 	payload[0] = HFI_MODE_PROPERTY;
 
 	if (port == INPUT_PORT) {
-		subscribe_prop_size = core->platform->data.dec_input_prop_size;
-		subcribe_prop = core->platform->data.dec_input_prop;
+		if (inst->codec == MSM_VIDC_H264) {
+			subscribe_prop_size = core->platform->data.dec_input_prop_size_avc;
+			subcribe_prop = core->platform->data.dec_input_prop_avc;
+		} else if (inst->codec == MSM_VIDC_HEVC || inst->codec == MSM_VIDC_HEIC) {
+			subscribe_prop_size = core->platform->data.dec_input_prop_size_hevc;
+			subcribe_prop = core->platform->data.dec_input_prop_hevc;
+		} else if (inst->codec == MSM_VIDC_VP9) {
+			subscribe_prop_size = core->platform->data.dec_input_prop_size_vp9;
+			subcribe_prop = core->platform->data.dec_input_prop_vp9;
+		} else if (inst->codec == MSM_VIDC_AV1) {
+			subscribe_prop_size = core->platform->data.dec_input_prop_size_av1;
+			subcribe_prop = core->platform->data.dec_input_prop_av1;
+		} else {
+			i_vpr_e(inst, "%s: unsupported codec: %d\n", __func__, inst->codec);
+			subcribe_prop = NULL;
+			return -EINVAL;
+		}
+
 		for (i = 0; i < subscribe_prop_size; i++) {
 			allow = msm_vidc_allow_property(inst,
 				subcribe_prop[i]);
@@ -978,8 +994,23 @@ static int msm_vdec_subscribe_property(struct msm_vidc_inst *inst,
 			}
 		}
 	} else if (port == OUTPUT_PORT) {
-		subscribe_prop_size = core->platform->data.dec_output_prop_size;
-		subcribe_prop = core->platform->data.dec_output_prop;
+		if (inst->codec == MSM_VIDC_H264) {
+			subscribe_prop_size = core->platform->data.dec_output_prop_size_avc;
+			subcribe_prop = core->platform->data.dec_output_prop_avc;
+		} else if (inst->codec == MSM_VIDC_HEVC || inst->codec == MSM_VIDC_HEIC) {
+			subscribe_prop_size = core->platform->data.dec_output_prop_size_hevc;
+			subcribe_prop = core->platform->data.dec_output_prop_hevc;
+		} else if (inst->codec == MSM_VIDC_VP9) {
+			subscribe_prop_size = core->platform->data.dec_output_prop_size_vp9;
+			subcribe_prop = core->platform->data.dec_output_prop_vp9;
+		} else if (inst->codec == MSM_VIDC_AV1) {
+			subscribe_prop_size = core->platform->data.dec_output_prop_size_av1;
+			subcribe_prop = core->platform->data.dec_output_prop_av1;
+		} else {
+			i_vpr_e(inst, "%s: unsupported codec: %d\n", __func__, inst->codec);
+			subcribe_prop = NULL;
+			return -EINVAL;
+		}
 		for (i = 0; i < subscribe_prop_size; i++) {
 			allow = msm_vidc_allow_property(inst,
 				subcribe_prop[i]);