diff --git a/driver/vidc/inc/msm_vidc_driver.h b/driver/vidc/inc/msm_vidc_driver.h index 5d6c76ed2b..61a43694a6 100644 --- a/driver/vidc/inc/msm_vidc_driver.h +++ b/driver/vidc/inc/msm_vidc_driver.h @@ -195,6 +195,18 @@ enum msm_vidc_colorformat_type v4l2_colorformat_to_driver(u32 colorformat, const char *func); 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_color_primaries_from_driver(struct msm_vidc_inst *inst, + u32 vidc_color_primaries); +u32 v4l2_transfer_char_to_driver(struct msm_vidc_inst *inst, + u32 v4l2_transfer_char); +u32 v4l2_transfer_char_from_driver(struct msm_vidc_inst *inst, + u32 vidc_transfer_char); +u32 v4l2_matrix_coeff_to_driver(struct msm_vidc_inst *inst, + u32 v4l2_matrix_coeff); +u32 v4l2_matrix_coeff_from_driver(struct msm_vidc_inst *inst, + u32 vidc_matrix_coeff); 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); diff --git a/driver/vidc/inc/msm_vidc_internal.h b/driver/vidc/inc/msm_vidc_internal.h index fba7c795a2..f032f037c4 100644 --- a/driver/vidc/inc/msm_vidc_internal.h +++ b/driver/vidc/inc/msm_vidc_internal.h @@ -198,6 +198,61 @@ enum msm_vidc_quality_mode { MSM_VIDC_POWER_SAVE_MODE = 0x2, }; +enum msm_vidc_color_primaries { + MSM_VIDC_PRIMARIES_RESERVED = 0, + MSM_VIDC_PRIMARIES_BT709 = 1, + MSM_VIDC_PRIMARIES_UNSPECIFIED = 2, + MSM_VIDC_PRIMARIES_BT470_SYSTEM_M = 4, + MSM_VIDC_PRIMARIES_BT470_SYSTEM_BG = 5, + MSM_VIDC_PRIMARIES_BT601_525 = 6, + MSM_VIDC_PRIMARIES_SMPTE_ST240M = 7, + MSM_VIDC_PRIMARIES_GENERIC_FILM = 8, + MSM_VIDC_PRIMARIES_BT2020 = 9, + MSM_VIDC_PRIMARIES_SMPTE_ST428_1 = 10, + MSM_VIDC_PRIMARIES_SMPTE_RP431_2 = 11, + MSM_VIDC_PRIMARIES_SMPTE_EG431_1 = 12, + MSM_VIDC_PRIMARIES_SMPTE_EBU_TECH = 22, +}; + +enum msm_vidc_transfer_characteristics { + MSM_VIDC_TRANSFER_RESERVED = 0, + MSM_VIDC_TRANSFER_BT709 = 1, + MSM_VIDC_TRANSFER_UNSPECIFIED = 2, + MSM_VIDC_TRANSFER_BT470_SYSTEM_M = 4, + MSM_VIDC_TRANSFER_BT470_SYSTEM_BG = 5, + MSM_VIDC_TRANSFER_BT601_525_OR_625 = 6, + MSM_VIDC_TRANSFER_SMPTE_ST240M = 7, + MSM_VIDC_TRANSFER_LINEAR = 8, + MSM_VIDC_TRANSFER_LOG_100_1 = 9, + MSM_VIDC_TRANSFER_LOG_SQRT = 10, + MSM_VIDC_TRANSFER_XVYCC = 11, + MSM_VIDC_TRANSFER_BT1361_0 = 12, + MSM_VIDC_TRANSFER_SRGB_SYCC = 13, + MSM_VIDC_TRANSFER_BT2020_14 = 14, + MSM_VIDC_TRANSFER_BT2020_15 = 15, + MSM_VIDC_TRANSFER_SMPTE_ST2084_PQ = 16, + MSM_VIDC_TRANSFER_SMPTE_ST428_1 = 17, + MSM_VIDC_TRANSFER_BT2100_2_HLG = 18, +}; + +enum msm_vidc_matrix_coefficients { + MSM_VIDC_MATRIX_COEFF_SRGB_SMPTE_ST428_1 = 0, + MSM_VIDC_MATRIX_COEFF_BT709 = 1, + MSM_VIDC_MATRIX_COEFF_UNSPECIFIED = 2, + MSM_VIDC_MATRIX_COEFF_RESERVED = 3, + MSM_VIDC_MATRIX_COEFF_FCC_TITLE_47 = 4, + MSM_VIDC_MATRIX_COEFF_BT470_SYS_BG_OR_BT601_625 = 5, + MSM_VIDC_MATRIX_COEFF_BT601_525_BT1358_525_OR_625 = 6, + MSM_VIDC_MATRIX_COEFF_SMPTE_ST240 = 7, + MSM_VIDC_MATRIX_COEFF_YCGCO = 8, + MSM_VIDC_MATRIX_COEFF_BT2020_NON_CONSTANT = 9, + MSM_VIDC_MATRIX_COEFF_BT2020_CONSTANT = 10, + MSM_VIDC_MATRIX_COEFF_SMPTE_ST2085 = 11, + MSM_VIDC_MATRIX_COEFF_SMPTE_CHROM_DERV_NON_CONSTANT = 12, + MSM_VIDC_MATRIX_COEFF_SMPTE_CHROM_DERV_CONSTANT = 13, + MSM_VIDC_MATRIX_COEFF_BT2100 = 14, +}; + enum msm_vidc_core_capability_type { CORE_CAP_NONE = 0, ENC_CODECS, diff --git a/driver/vidc/src/msm_vdec.c b/driver/vidc/src/msm_vdec.c index 7906586b07..1d2471cdca 100644 --- a/driver/vidc/src/msm_vdec.c +++ b/driver/vidc/src/msm_vdec.c @@ -334,8 +334,10 @@ static int msm_vdec_set_colorspace(struct msm_vidc_inst *inst, enum msm_vidc_port_type port) { int rc = 0; - u32 primaries, matrix_coeff, transfer_char; - u32 full_range = 0; + u32 primaries = MSM_VIDC_PRIMARIES_RESERVED; + u32 matrix_coeff = MSM_VIDC_MATRIX_COEFF_RESERVED; + u32 transfer_char = MSM_VIDC_TRANSFER_RESERVED; + u32 full_range = V4L2_QUANTIZATION_DEFAULT; u32 colour_description_present_flag = 0; u32 video_signal_type_present_flag = 0, color_info = 0; /* Unspecified video format */ @@ -349,15 +351,17 @@ static int msm_vdec_set_colorspace(struct msm_vidc_inst *inst, if (inst->codec != MSM_VIDC_H264 && inst->codec != MSM_VIDC_HEVC) return 0; - primaries = inst->fmts[port].fmt.pix_mp.colorspace; - matrix_coeff = inst->fmts[port].fmt.pix_mp.ycbcr_enc; - transfer_char = inst->fmts[port].fmt.pix_mp.xfer_func; - - if (primaries != V4L2_COLORSPACE_DEFAULT || - transfer_char != V4L2_XFER_FUNC_DEFAULT || - matrix_coeff != V4L2_YCBCR_ENC_DEFAULT) { + 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) { 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); + matrix_coeff = v4l2_matrix_coeff_to_driver(inst, + inst->fmts[port].fmt.pix_mp.ycbcr_enc); + transfer_char = v4l2_transfer_char_to_driver(inst, + inst->fmts[port].fmt.pix_mp.xfer_func); } if (inst->fmts[port].fmt.pix_mp.quantization != @@ -1291,11 +1295,11 @@ static int msm_vdec_update_properties(struct msm_vidc_inst *inst) V4L2_QUANTIZATION_LIM_RANGE; if (colour_description_present_flag) { inst->fmts[OUTPUT_PORT].fmt.pix_mp.colorspace = - primaries; + v4l2_color_primaries_from_driver(inst, primaries); inst->fmts[OUTPUT_PORT].fmt.pix_mp.xfer_func = - transfer_char; + v4l2_transfer_char_from_driver(inst, transfer_char); inst->fmts[OUTPUT_PORT].fmt.pix_mp.ycbcr_enc = - matrix_coeff; + v4l2_matrix_coeff_from_driver(inst, matrix_coeff); } else { i_vpr_h(inst, "%s: color description flag is not present\n", diff --git a/driver/vidc/src/msm_venc.c b/driver/vidc/src/msm_venc.c index 8751f6dfc5..758a3f45d7 100644 --- a/driver/vidc/src/msm_venc.c +++ b/driver/vidc/src/msm_venc.c @@ -272,8 +272,10 @@ static int msm_venc_set_colorspace(struct msm_vidc_inst* inst, enum msm_vidc_port_type port) { int rc = 0; - u32 primaries, matrix_coeff, transfer_char; - u32 full_range = 0; + u32 primaries = MSM_VIDC_PRIMARIES_RESERVED; + u32 matrix_coeff = MSM_VIDC_MATRIX_COEFF_RESERVED; + u32 transfer_char = MSM_VIDC_TRANSFER_RESERVED; + u32 full_range = V4L2_QUANTIZATION_DEFAULT; u32 colour_description_present_flag = 0; u32 video_signal_type_present_flag = 0, payload = 0; /* Unspecified video format */ @@ -284,15 +286,17 @@ static int msm_venc_set_colorspace(struct msm_vidc_inst* inst, return -EINVAL; } - primaries = inst->fmts[port].fmt.pix_mp.colorspace; - matrix_coeff = inst->fmts[port].fmt.pix_mp.ycbcr_enc; - transfer_char = inst->fmts[port].fmt.pix_mp.xfer_func; - - if (primaries != V4L2_COLORSPACE_DEFAULT || - transfer_char != V4L2_XFER_FUNC_DEFAULT || - matrix_coeff != V4L2_YCBCR_ENC_DEFAULT) { + 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) { 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); + matrix_coeff = v4l2_matrix_coeff_to_driver(inst, + inst->fmts[port].fmt.pix_mp.ycbcr_enc); + transfer_char = v4l2_transfer_char_to_driver(inst, + inst->fmts[port].fmt.pix_mp.xfer_func); } if (inst->fmts[port].fmt.pix_mp.quantization != diff --git a/driver/vidc/src/msm_vidc_driver.c b/driver/vidc/src/msm_vidc_driver.c index 4d830ac985..eaa56fe318 100644 --- a/driver/vidc/src/msm_vidc_driver.c +++ b/driver/vidc/src/msm_vidc_driver.c @@ -227,6 +227,297 @@ u32 v4l2_colorformat_from_driver(enum msm_vidc_colorformat_type colorformat, return v4l2_colorformat; } +u32 v4l2_color_primaries_to_driver(struct msm_vidc_inst *inst, + u32 v4l2_primaries) +{ + u32 vidc_color_primaries = MSM_VIDC_PRIMARIES_RESERVED; + + switch(v4l2_primaries) { + case V4L2_COLORSPACE_DEFAULT: + vidc_color_primaries = MSM_VIDC_PRIMARIES_RESERVED; + break; + case V4L2_COLORSPACE_REC709: + vidc_color_primaries = MSM_VIDC_PRIMARIES_BT709; + break; + case V4L2_COLORSPACE_470_SYSTEM_M: + vidc_color_primaries = MSM_VIDC_PRIMARIES_BT470_SYSTEM_M; + break; + case V4L2_COLORSPACE_470_SYSTEM_BG: + vidc_color_primaries = MSM_VIDC_PRIMARIES_BT470_SYSTEM_BG; + break; + case V4L2_COLORSPACE_SMPTE170M: + vidc_color_primaries = MSM_VIDC_PRIMARIES_BT601_525; + break; + case V4L2_COLORSPACE_SMPTE240M: + vidc_color_primaries = MSM_VIDC_PRIMARIES_SMPTE_ST240M; + break; + case V4L2_COLORSPACE_VIDC_GENERIC_FILM: + vidc_color_primaries = MSM_VIDC_PRIMARIES_GENERIC_FILM; + break; + case V4L2_COLORSPACE_BT2020: + vidc_color_primaries = MSM_VIDC_PRIMARIES_BT2020; + break; + case V4L2_COLORSPACE_DCI_P3: + vidc_color_primaries = MSM_VIDC_PRIMARIES_SMPTE_RP431_2; + break; + case V4L2_COLORSPACE_VIDC_EG431: + vidc_color_primaries = MSM_VIDC_PRIMARIES_SMPTE_EG431_1; + break; + case V4L2_COLORSPACE_VIDC_EBU_TECH: + vidc_color_primaries = MSM_VIDC_PRIMARIES_SMPTE_EBU_TECH; + break; + default: + i_vpr_e(inst, "%s: invalid color primaries %d\n", + __func__, v4l2_primaries); + break; + } + + return vidc_color_primaries; +} + +u32 v4l2_color_primaries_from_driver(struct msm_vidc_inst *inst, + u32 vidc_color_primaries) +{ + u32 v4l2_primaries = V4L2_COLORSPACE_DEFAULT; + + switch(vidc_color_primaries) { + case MSM_VIDC_PRIMARIES_UNSPECIFIED: + v4l2_primaries = V4L2_COLORSPACE_DEFAULT; + break; + case MSM_VIDC_PRIMARIES_BT709: + v4l2_primaries = V4L2_COLORSPACE_REC709; + break; + case MSM_VIDC_PRIMARIES_BT470_SYSTEM_M: + v4l2_primaries = V4L2_COLORSPACE_470_SYSTEM_M; + break; + case MSM_VIDC_PRIMARIES_BT470_SYSTEM_BG: + v4l2_primaries = V4L2_COLORSPACE_470_SYSTEM_BG; + break; + case MSM_VIDC_PRIMARIES_BT601_525: + v4l2_primaries = V4L2_COLORSPACE_SMPTE170M; + break; + case MSM_VIDC_PRIMARIES_SMPTE_ST240M: + v4l2_primaries = V4L2_COLORSPACE_SMPTE240M; + break; + case MSM_VIDC_PRIMARIES_GENERIC_FILM: + v4l2_primaries = V4L2_COLORSPACE_VIDC_GENERIC_FILM; + break; + case MSM_VIDC_PRIMARIES_BT2020: + v4l2_primaries = V4L2_COLORSPACE_BT2020; + break; + case MSM_VIDC_PRIMARIES_SMPTE_RP431_2: + v4l2_primaries = V4L2_COLORSPACE_DCI_P3; + break; + case MSM_VIDC_PRIMARIES_SMPTE_EG431_1: + v4l2_primaries = V4L2_COLORSPACE_VIDC_EG431; + break; + case MSM_VIDC_PRIMARIES_SMPTE_EBU_TECH: + v4l2_primaries = V4L2_COLORSPACE_VIDC_EBU_TECH; + break; + default: + i_vpr_e(inst, "%s: invalid hfi color primaries %d\n", + __func__, vidc_color_primaries); + v4l2_primaries = V4L2_COLORSPACE_DEFAULT; + break; + } + + return v4l2_primaries; +} + +u32 v4l2_transfer_char_to_driver(struct msm_vidc_inst *inst, + u32 v4l2_transfer_char) +{ + u32 vidc_transfer_char = MSM_VIDC_TRANSFER_RESERVED; + + switch(v4l2_transfer_char) { + case V4L2_XFER_FUNC_DEFAULT: + vidc_transfer_char = MSM_VIDC_TRANSFER_RESERVED; + break; + case V4L2_XFER_FUNC_709: + vidc_transfer_char = MSM_VIDC_TRANSFER_BT709; + break; + case V4L2_XFER_FUNC_VIDC_BT470_SYSTEM_M: + vidc_transfer_char = MSM_VIDC_TRANSFER_BT470_SYSTEM_M; + break; + case V4L2_XFER_FUNC_VIDC_BT470_SYSTEM_BG: + vidc_transfer_char = MSM_VIDC_TRANSFER_BT470_SYSTEM_BG; + break; + case V4L2_XFER_FUNC_VIDC_BT601_525_OR_625: + vidc_transfer_char = MSM_VIDC_TRANSFER_BT601_525_OR_625; + break; + case V4L2_XFER_FUNC_SMPTE240M: + vidc_transfer_char = MSM_VIDC_TRANSFER_SMPTE_ST240M; + break; + case V4L2_XFER_FUNC_VIDC_LINEAR: + vidc_transfer_char = MSM_VIDC_TRANSFER_LINEAR; + break; + case V4L2_XFER_FUNC_VIDC_XVYCC: + vidc_transfer_char = MSM_VIDC_TRANSFER_XVYCC; + break; + case V4L2_XFER_FUNC_VIDC_BT1361: + vidc_transfer_char = MSM_VIDC_TRANSFER_BT1361_0; + break; + case V4L2_XFER_FUNC_SRGB: + vidc_transfer_char = MSM_VIDC_TRANSFER_SRGB_SYCC; + break; + case V4L2_XFER_FUNC_VIDC_BT2020: + vidc_transfer_char = MSM_VIDC_TRANSFER_BT2020_14; + break; + case V4L2_XFER_FUNC_SMPTE2084: + vidc_transfer_char = MSM_VIDC_TRANSFER_SMPTE_ST2084_PQ; + break; + case V4L2_XFER_FUNC_VIDC_ST428: + vidc_transfer_char = MSM_VIDC_TRANSFER_SMPTE_ST428_1; + break; + case V4L2_XFER_FUNC_VIDC_HLG: + 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); + break; + } + + return vidc_transfer_char; +} + +u32 v4l2_transfer_char_from_driver(struct msm_vidc_inst *inst, + u32 vidc_transfer_char) +{ + u32 v4l2_transfer_char = V4L2_XFER_FUNC_DEFAULT; + + switch(vidc_transfer_char) { + case MSM_VIDC_TRANSFER_UNSPECIFIED: + v4l2_transfer_char = V4L2_XFER_FUNC_DEFAULT; + break; + case MSM_VIDC_TRANSFER_BT709: + v4l2_transfer_char = V4L2_XFER_FUNC_709; + break; + case MSM_VIDC_TRANSFER_BT470_SYSTEM_M: + v4l2_transfer_char = V4L2_XFER_FUNC_VIDC_BT470_SYSTEM_M; + break; + case MSM_VIDC_TRANSFER_BT470_SYSTEM_BG: + v4l2_transfer_char = V4L2_XFER_FUNC_VIDC_BT470_SYSTEM_BG; + break; + case MSM_VIDC_TRANSFER_BT601_525_OR_625: + v4l2_transfer_char = V4L2_XFER_FUNC_VIDC_BT601_525_OR_625; + break; + case MSM_VIDC_TRANSFER_SMPTE_ST240M: + v4l2_transfer_char = V4L2_XFER_FUNC_SMPTE240M; + break; + case MSM_VIDC_TRANSFER_LINEAR: + v4l2_transfer_char = V4L2_XFER_FUNC_VIDC_LINEAR; + break; + case MSM_VIDC_TRANSFER_XVYCC: + v4l2_transfer_char = V4L2_XFER_FUNC_VIDC_XVYCC; + break; + case MSM_VIDC_TRANSFER_BT1361_0: + v4l2_transfer_char = V4L2_XFER_FUNC_VIDC_BT1361; + break; + case MSM_VIDC_TRANSFER_SRGB_SYCC: + v4l2_transfer_char = V4L2_XFER_FUNC_SRGB; + break; + case MSM_VIDC_TRANSFER_BT2020_14: + case MSM_VIDC_TRANSFER_BT2020_15: + v4l2_transfer_char = V4L2_XFER_FUNC_VIDC_BT2020; + break; + case MSM_VIDC_TRANSFER_SMPTE_ST2084_PQ: + v4l2_transfer_char = V4L2_XFER_FUNC_SMPTE2084; + break; + case MSM_VIDC_TRANSFER_SMPTE_ST428_1: + v4l2_transfer_char = V4L2_XFER_FUNC_VIDC_ST428; + break; + case MSM_VIDC_TRANSFER_BT2100_2_HLG: + v4l2_transfer_char = V4L2_XFER_FUNC_VIDC_HLG; + break; + default: + i_vpr_e(inst, "%s: invalid transfer char %d\n", + __func__, vidc_transfer_char); + break; + } + + return v4l2_transfer_char; +} + +u32 v4l2_matrix_coeff_to_driver(struct msm_vidc_inst *inst, + u32 v4l2_matrix_coeff) +{ + u32 vidc_matrix_coeff = MSM_VIDC_MATRIX_COEFF_RESERVED; + + switch(v4l2_matrix_coeff) { + case V4L2_YCBCR_VIDC_SRGB_OR_SMPTE_ST428: + vidc_matrix_coeff = MSM_VIDC_MATRIX_COEFF_SRGB_SMPTE_ST428_1; + break; + case V4L2_YCBCR_ENC_709: + case V4L2_YCBCR_ENC_XV709: + vidc_matrix_coeff = MSM_VIDC_MATRIX_COEFF_BT709; + break; + case V4L2_YCBCR_VIDC_FCC47_73_682: + vidc_matrix_coeff = MSM_VIDC_MATRIX_COEFF_FCC_TITLE_47; + break; + case V4L2_YCBCR_ENC_XV601: + vidc_matrix_coeff = MSM_VIDC_MATRIX_COEFF_BT470_SYS_BG_OR_BT601_625; + break; + case V4L2_YCBCR_ENC_601: + vidc_matrix_coeff = MSM_VIDC_MATRIX_COEFF_BT601_525_BT1358_525_OR_625; + break; + case V4L2_YCBCR_ENC_SMPTE240M: + vidc_matrix_coeff = MSM_VIDC_MATRIX_COEFF_SMPTE_ST240; + break; + case V4L2_YCBCR_ENC_BT2020: + vidc_matrix_coeff = MSM_VIDC_MATRIX_COEFF_BT2020_NON_CONSTANT; + break; + case V4L2_YCBCR_ENC_BT2020_CONST_LUM: + 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); + break; + } + + return vidc_matrix_coeff; +} + +u32 v4l2_matrix_coeff_from_driver(struct msm_vidc_inst *inst, + u32 vidc_matrix_coeff) +{ + u32 v4l2_matrix_coeff = V4L2_YCBCR_ENC_DEFAULT; + + switch(vidc_matrix_coeff) { + case MSM_VIDC_MATRIX_COEFF_SRGB_SMPTE_ST428_1: + v4l2_matrix_coeff = V4L2_YCBCR_VIDC_SRGB_OR_SMPTE_ST428; + break; + case MSM_VIDC_MATRIX_COEFF_BT709: + v4l2_matrix_coeff = V4L2_YCBCR_ENC_709; + break; + case MSM_VIDC_MATRIX_COEFF_FCC_TITLE_47: + v4l2_matrix_coeff = V4L2_YCBCR_VIDC_FCC47_73_682; + break; + case MSM_VIDC_MATRIX_COEFF_BT470_SYS_BG_OR_BT601_625: + v4l2_matrix_coeff = V4L2_YCBCR_ENC_XV601; + break; + case MSM_VIDC_MATRIX_COEFF_BT601_525_BT1358_525_OR_625: + v4l2_matrix_coeff = V4L2_YCBCR_ENC_601; + break; + case MSM_VIDC_MATRIX_COEFF_SMPTE_ST240: + v4l2_matrix_coeff = V4L2_YCBCR_ENC_SMPTE240M; + break; + case MSM_VIDC_MATRIX_COEFF_BT2020_NON_CONSTANT: + v4l2_matrix_coeff = V4L2_YCBCR_ENC_BT2020; + break; + case MSM_VIDC_MATRIX_COEFF_BT2020_CONSTANT: + 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); + break; + } + + return v4l2_matrix_coeff; +} + int v4l2_type_to_driver_port(struct msm_vidc_inst *inst, u32 type, const char *func) { diff --git a/include/uapi/vidc/media/v4l2_vidc_extensions.h b/include/uapi/vidc/media/v4l2_vidc_extensions.h index 4f176b3ee0..aae48b2f6e 100644 --- a/include/uapi/vidc/media/v4l2_vidc_extensions.h +++ b/include/uapi/vidc/media/v4l2_vidc_extensions.h @@ -26,6 +26,26 @@ #define V4L2_PIX_FMT_VIDC_ARGB32C v4l2_fourcc('Q', '2', '4', 'C') #define V4L2_META_FMT_VIDC v4l2_fourcc('Q', 'M', 'E', 'T') +/* start of vidc specific colorspace definitions */ +#define V4L2_COLORSPACE_VIDC_GENERIC_FILM 101 +#define V4L2_COLORSPACE_VIDC_EG431 102 +#define V4L2_COLORSPACE_VIDC_EBU_TECH 103 + +#define V4L2_XFER_FUNC_VIDC_BT470_SYSTEM_M 201 +#define V4L2_XFER_FUNC_VIDC_BT470_SYSTEM_BG 202 +#define V4L2_XFER_FUNC_VIDC_BT601_525_OR_625 203 +#define V4L2_XFER_FUNC_VIDC_LINEAR 204 +#define V4L2_XFER_FUNC_VIDC_XVYCC 205 +#define V4L2_XFER_FUNC_VIDC_BT1361 206 +#define V4L2_XFER_FUNC_VIDC_BT2020 207 +#define V4L2_XFER_FUNC_VIDC_ST428 208 +#define V4L2_XFER_FUNC_VIDC_HLG 209 + +#define V4L2_YCBCR_VIDC_SRGB_OR_SMPTE_ST428 301 +#define V4L2_YCBCR_VIDC_FCC47_73_682 302 + +/* end of vidc specific colorspace definitions */ + /* vendor controls start */ #define V4L2_CID_MPEG_VIDC_BASE (V4L2_CTRL_CLASS_MPEG | 0x2000)