Pārlūkot izejas kodu

Merge "video: driver: fix colorspace subscribe params initialization"

qctecmdr 4 gadi atpakaļ
vecāks
revīzija
e9e2d38148

+ 6 - 6
driver/vidc/inc/msm_vidc_driver.h

@@ -220,17 +220,17 @@ enum msm_vidc_colorformat_type v4l2_colorformat_to_driver(u32 colorformat,
 u32 v4l2_colorformat_from_driver(enum msm_vidc_colorformat_type colorformat,
 	const char *func);
 u32 v4l2_color_primaries_to_driver(struct msm_vidc_inst *inst,
-	u32 v4l2_primaries);
+	u32 v4l2_primaries, const char *func);
 u32 v4l2_color_primaries_from_driver(struct msm_vidc_inst *inst,
-	u32 vidc_color_primaries);
+	u32 vidc_color_primaries, const char *func);
 u32 v4l2_transfer_char_to_driver(struct msm_vidc_inst *inst,
-	u32 v4l2_transfer_char);
+	u32 v4l2_transfer_char, const char *func);
 u32 v4l2_transfer_char_from_driver(struct msm_vidc_inst *inst,
-	u32 vidc_transfer_char);
+	u32 vidc_transfer_char, const char *func);
 u32 v4l2_matrix_coeff_to_driver(struct msm_vidc_inst *inst,
-	u32 v4l2_matrix_coeff);
+	u32 v4l2_matrix_coeff, const char *func);
 u32 v4l2_matrix_coeff_from_driver(struct msm_vidc_inst *inst,
-	u32 vidc_matrix_coeff);
+	u32 vidc_matrix_coeff, const char *func);
 int v4l2_type_to_driver_port(struct msm_vidc_inst *inst, u32 type,
 	const char *func);
 const char *state_name(enum msm_vidc_inst_state state);

+ 15 - 15
driver/vidc/src/msm_vdec.c

@@ -377,16 +377,16 @@ static int msm_vdec_set_colorspace(struct msm_vidc_inst *inst,
 		return 0;
 
 	if (inst->fmts[port].fmt.pix_mp.colorspace != V4L2_COLORSPACE_DEFAULT ||
-	    inst->fmts[port].fmt.pix_mp.ycbcr_enc != V4L2_XFER_FUNC_DEFAULT ||
-	    inst->fmts[port].fmt.pix_mp.xfer_func != V4L2_YCBCR_ENC_DEFAULT) {
+	    inst->fmts[port].fmt.pix_mp.ycbcr_enc != V4L2_YCBCR_ENC_DEFAULT ||
+	    inst->fmts[port].fmt.pix_mp.xfer_func != V4L2_XFER_FUNC_DEFAULT) {
 		colour_description_present_flag = 1;
 		video_signal_type_present_flag = 1;
 		primaries = v4l2_color_primaries_to_driver(inst,
-			inst->fmts[port].fmt.pix_mp.colorspace);
+			inst->fmts[port].fmt.pix_mp.colorspace, __func__);
 		matrix_coeff = v4l2_matrix_coeff_to_driver(inst,
-			inst->fmts[port].fmt.pix_mp.ycbcr_enc);
+			inst->fmts[port].fmt.pix_mp.ycbcr_enc, __func__);
 		transfer_char = v4l2_transfer_char_to_driver(inst,
-			inst->fmts[port].fmt.pix_mp.xfer_func);
+			inst->fmts[port].fmt.pix_mp.xfer_func, __func__);
 	}
 
 	if (inst->fmts[port].fmt.pix_mp.quantization !=
@@ -1235,13 +1235,13 @@ int msm_vdec_init_input_subcr_params(struct msm_vidc_inst *inst)
 
 	subsc_params->fw_min_count = inst->buffers.output.min_count;
 
-	primaries = v4l2_color_primaries_from_driver(inst,
-		inst->fmts[INPUT_PORT].fmt.pix_mp.colorspace);
-	matrix_coeff = v4l2_matrix_coeff_from_driver(inst,
-		inst->fmts[INPUT_PORT].fmt.pix_mp.ycbcr_enc);
-	transfer_char = v4l2_transfer_char_from_driver(inst,
-		inst->fmts[INPUT_PORT].fmt.pix_mp.xfer_func);
-	full_range = inst->fmts[INPUT_PORT].fmt.pix_mp.quantization ==
+	primaries = v4l2_color_primaries_to_driver(inst,
+		inst->fmts[OUTPUT_PORT].fmt.pix_mp.colorspace, __func__);
+	matrix_coeff = v4l2_matrix_coeff_to_driver(inst,
+		inst->fmts[OUTPUT_PORT].fmt.pix_mp.ycbcr_enc, __func__);
+	transfer_char = v4l2_transfer_char_to_driver(inst,
+		inst->fmts[OUTPUT_PORT].fmt.pix_mp.xfer_func, __func__);
+	full_range = inst->fmts[OUTPUT_PORT].fmt.pix_mp.quantization ==
 		V4L2_QUANTIZATION_FULL_RANGE ? 1 : 0;
 	subsc_params->color_info =
 		(matrix_coeff & 0xFF) |
@@ -1324,11 +1324,11 @@ static int msm_vdec_read_input_subcr_params(struct msm_vidc_inst *inst)
 			V4L2_QUANTIZATION_LIM_RANGE;
 		if (colour_description_present_flag) {
 			inst->fmts[OUTPUT_PORT].fmt.pix_mp.colorspace =
-				v4l2_color_primaries_from_driver(inst, primaries);
+				v4l2_color_primaries_from_driver(inst, primaries, __func__);
 			inst->fmts[OUTPUT_PORT].fmt.pix_mp.xfer_func =
-				v4l2_transfer_char_from_driver(inst, transfer_char);
+				v4l2_transfer_char_from_driver(inst, transfer_char, __func__);
 			inst->fmts[OUTPUT_PORT].fmt.pix_mp.ycbcr_enc =
-				v4l2_matrix_coeff_from_driver(inst, matrix_coeff);
+				v4l2_matrix_coeff_from_driver(inst, matrix_coeff, __func__);
 		} else {
 			i_vpr_h(inst,
 				"%s: color description flag is not present\n",

+ 5 - 5
driver/vidc/src/msm_venc.c

@@ -304,16 +304,16 @@ static int msm_venc_set_colorspace(struct msm_vidc_inst* inst,
 	}
 
 	if (inst->fmts[port].fmt.pix_mp.colorspace != V4L2_COLORSPACE_DEFAULT ||
-	    inst->fmts[port].fmt.pix_mp.ycbcr_enc != V4L2_XFER_FUNC_DEFAULT ||
-	    inst->fmts[port].fmt.pix_mp.xfer_func != V4L2_YCBCR_ENC_DEFAULT) {
+	    inst->fmts[port].fmt.pix_mp.ycbcr_enc != V4L2_YCBCR_ENC_DEFAULT ||
+	    inst->fmts[port].fmt.pix_mp.xfer_func != V4L2_XFER_FUNC_DEFAULT) {
 		colour_description_present_flag = 1;
 		video_signal_type_present_flag = 1;
 		primaries = v4l2_color_primaries_to_driver(inst,
-			inst->fmts[port].fmt.pix_mp.colorspace);
+			inst->fmts[port].fmt.pix_mp.colorspace, __func__);
 		matrix_coeff = v4l2_matrix_coeff_to_driver(inst,
-			inst->fmts[port].fmt.pix_mp.ycbcr_enc);
+			inst->fmts[port].fmt.pix_mp.ycbcr_enc, __func__);
 		transfer_char = v4l2_transfer_char_to_driver(inst,
-			inst->fmts[port].fmt.pix_mp.xfer_func);
+			inst->fmts[port].fmt.pix_mp.xfer_func, __func__);
 	}
 
 	if (inst->fmts[port].fmt.pix_mp.quantization !=

+ 23 - 18
driver/vidc/src/msm_vidc_driver.c

@@ -469,7 +469,7 @@ u32 v4l2_colorformat_from_driver(enum msm_vidc_colorformat_type colorformat,
 }
 
 u32 v4l2_color_primaries_to_driver(struct msm_vidc_inst *inst,
-	u32 v4l2_primaries)
+	u32 v4l2_primaries, const char *func)
 {
 	u32 vidc_color_primaries = MSM_VIDC_PRIMARIES_RESERVED;
 
@@ -508,8 +508,8 @@ u32 v4l2_color_primaries_to_driver(struct msm_vidc_inst *inst,
 		vidc_color_primaries = MSM_VIDC_PRIMARIES_SMPTE_EBU_TECH;
 		break;
 	default:
-		i_vpr_e(inst, "%s: invalid color primaries %d\n",
-			__func__, v4l2_primaries);
+		i_vpr_e(inst, "%s: invalid v4l2 color primaries %d\n",
+			func, v4l2_primaries);
 		break;
 	}
 
@@ -517,7 +517,7 @@ u32 v4l2_color_primaries_to_driver(struct msm_vidc_inst *inst,
 }
 
 u32 v4l2_color_primaries_from_driver(struct msm_vidc_inst *inst,
-	u32 vidc_color_primaries)
+	u32 vidc_color_primaries, const char *func)
 {
 	u32 v4l2_primaries = V4L2_COLORSPACE_DEFAULT;
 
@@ -557,8 +557,7 @@ u32 v4l2_color_primaries_from_driver(struct msm_vidc_inst *inst,
 		break;
 	default:
 		i_vpr_e(inst, "%s: invalid hfi color primaries %d\n",
-			__func__, vidc_color_primaries);
-		v4l2_primaries = V4L2_COLORSPACE_DEFAULT;
+			func, vidc_color_primaries);
 		break;
 	}
 
@@ -566,7 +565,7 @@ u32 v4l2_color_primaries_from_driver(struct msm_vidc_inst *inst,
 }
 
 u32 v4l2_transfer_char_to_driver(struct msm_vidc_inst *inst,
-	u32 v4l2_transfer_char)
+	u32 v4l2_transfer_char, const char *func)
 {
 	u32 vidc_transfer_char = MSM_VIDC_TRANSFER_RESERVED;
 
@@ -614,8 +613,8 @@ u32 v4l2_transfer_char_to_driver(struct msm_vidc_inst *inst,
 		vidc_transfer_char = MSM_VIDC_TRANSFER_BT2100_2_HLG;
 		break;
 	default:
-		i_vpr_e(inst, "%s: invalid transfer char %d\n",
-			__func__, v4l2_transfer_char);
+		i_vpr_e(inst, "%s: invalid v4l2 transfer char %d\n",
+			func, v4l2_transfer_char);
 		break;
 	}
 
@@ -623,7 +622,7 @@ u32 v4l2_transfer_char_to_driver(struct msm_vidc_inst *inst,
 }
 
 u32 v4l2_transfer_char_from_driver(struct msm_vidc_inst *inst,
-	u32 vidc_transfer_char)
+	u32 vidc_transfer_char, const char *func)
 {
 	u32  v4l2_transfer_char = V4L2_XFER_FUNC_DEFAULT;
 
@@ -672,8 +671,8 @@ u32 v4l2_transfer_char_from_driver(struct msm_vidc_inst *inst,
 		v4l2_transfer_char = V4L2_XFER_FUNC_VIDC_HLG;
 		break;
 	default:
-		i_vpr_e(inst, "%s: invalid transfer char %d\n",
-			__func__, vidc_transfer_char);
+		i_vpr_e(inst, "%s: invalid hfi transfer char %d\n",
+			func, vidc_transfer_char);
 		break;
 	}
 
@@ -681,11 +680,14 @@ u32 v4l2_transfer_char_from_driver(struct msm_vidc_inst *inst,
 }
 
 u32 v4l2_matrix_coeff_to_driver(struct msm_vidc_inst *inst,
-	u32 v4l2_matrix_coeff)
+	u32 v4l2_matrix_coeff, const char *func)
 {
 	u32 vidc_matrix_coeff = MSM_VIDC_MATRIX_COEFF_RESERVED;
 
 	switch(v4l2_matrix_coeff) {
+	case V4L2_YCBCR_ENC_DEFAULT:
+		vidc_matrix_coeff = MSM_VIDC_MATRIX_COEFF_RESERVED;
+		break;
 	case V4L2_YCBCR_VIDC_SRGB_OR_SMPTE_ST428:
 		vidc_matrix_coeff = MSM_VIDC_MATRIX_COEFF_SRGB_SMPTE_ST428_1;
 		break;
@@ -712,8 +714,8 @@ u32 v4l2_matrix_coeff_to_driver(struct msm_vidc_inst *inst,
 		vidc_matrix_coeff = MSM_VIDC_MATRIX_COEFF_BT2020_CONSTANT;
 		break;
 	default:
-		i_vpr_e(inst, "%s: invalid matrix coeff %d\n",
-			__func__, v4l2_matrix_coeff);
+		i_vpr_e(inst, "%s: invalid v4l2 matrix coeff %d\n",
+			func, v4l2_matrix_coeff);
 		break;
 	}
 
@@ -721,7 +723,7 @@ u32 v4l2_matrix_coeff_to_driver(struct msm_vidc_inst *inst,
 }
 
 u32 v4l2_matrix_coeff_from_driver(struct msm_vidc_inst *inst,
-	u32 vidc_matrix_coeff)
+	u32 vidc_matrix_coeff, const char *func)
 {
 	u32 v4l2_matrix_coeff = V4L2_YCBCR_ENC_DEFAULT;
 
@@ -732,6 +734,9 @@ u32 v4l2_matrix_coeff_from_driver(struct msm_vidc_inst *inst,
 	case MSM_VIDC_MATRIX_COEFF_BT709:
 		v4l2_matrix_coeff = V4L2_YCBCR_ENC_709;
 		break;
+	case MSM_VIDC_MATRIX_COEFF_UNSPECIFIED:
+		v4l2_matrix_coeff = V4L2_YCBCR_ENC_DEFAULT;
+		break;
 	case MSM_VIDC_MATRIX_COEFF_FCC_TITLE_47:
 		v4l2_matrix_coeff = V4L2_YCBCR_VIDC_FCC47_73_682;
 		break;
@@ -751,8 +756,8 @@ u32 v4l2_matrix_coeff_from_driver(struct msm_vidc_inst *inst,
 		v4l2_matrix_coeff = V4L2_YCBCR_ENC_BT2020_CONST_LUM;
 		break;
 	default:
-		i_vpr_e(inst, "%s: invalid matrix coeff %d\n",
-			__func__, vidc_matrix_coeff);
+		i_vpr_e(inst, "%s: invalid hfi matrix coeff %d\n",
+			func, vidc_matrix_coeff);
 		break;
 	}