video: driver: fix colorspace subscribe params initialization

Initialize subscribe params for colorspace using OUTPUT
port params and use right mapper function

Change-Id: Ie6be50c1de20e351bad0fc4b015bcc4d72d1711b
Signed-off-by: Akshata Sahukar <asahukar@codeaurora.org>
This commit is contained in:
Akshata Sahukar
2021-03-19 16:18:42 -07:00
bovenliggende 98e799da29
commit 7a9d3462dd
4 gewijzigde bestanden met toevoegingen van 49 en 44 verwijderingen

Bestand weergeven

@@ -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);

Bestand weergeven

@@ -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",

Bestand weergeven

@@ -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 !=

Bestand weergeven

@@ -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;
}