video: driver: amend colorspace info setting
v4l2 enums for color space info are not one to one mappings with hevc spec values. Hence, introduce and use corresponding mapper functions. Change-Id: I37a79a9b34b66184ece9a284ae98c9fa4efd248f Signed-off-by: Akshata Sahukar <asahukar@codeaurora.org>
This commit is contained in:

committed by
Gerrit - the friendly Code Review server

parent
e743f5dd48
commit
20d30c5dd2
@@ -195,6 +195,18 @@ enum msm_vidc_colorformat_type v4l2_colorformat_to_driver(u32 colorformat,
|
|||||||
const char *func);
|
const char *func);
|
||||||
u32 v4l2_colorformat_from_driver(enum msm_vidc_colorformat_type colorformat,
|
u32 v4l2_colorformat_from_driver(enum msm_vidc_colorformat_type colorformat,
|
||||||
const char *func);
|
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,
|
int v4l2_type_to_driver_port(struct msm_vidc_inst *inst, u32 type,
|
||||||
const char *func);
|
const char *func);
|
||||||
const char *state_name(enum msm_vidc_inst_state state);
|
const char *state_name(enum msm_vidc_inst_state state);
|
||||||
|
@@ -198,6 +198,61 @@ enum msm_vidc_quality_mode {
|
|||||||
MSM_VIDC_POWER_SAVE_MODE = 0x2,
|
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 {
|
enum msm_vidc_core_capability_type {
|
||||||
CORE_CAP_NONE = 0,
|
CORE_CAP_NONE = 0,
|
||||||
ENC_CODECS,
|
ENC_CODECS,
|
||||||
|
@@ -334,8 +334,10 @@ static int msm_vdec_set_colorspace(struct msm_vidc_inst *inst,
|
|||||||
enum msm_vidc_port_type port)
|
enum msm_vidc_port_type port)
|
||||||
{
|
{
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
u32 primaries, matrix_coeff, transfer_char;
|
u32 primaries = MSM_VIDC_PRIMARIES_RESERVED;
|
||||||
u32 full_range = 0;
|
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 colour_description_present_flag = 0;
|
||||||
u32 video_signal_type_present_flag = 0, color_info = 0;
|
u32 video_signal_type_present_flag = 0, color_info = 0;
|
||||||
/* Unspecified video format */
|
/* 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)
|
if (inst->codec != MSM_VIDC_H264 && inst->codec != MSM_VIDC_HEVC)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
primaries = inst->fmts[port].fmt.pix_mp.colorspace;
|
if (inst->fmts[port].fmt.pix_mp.colorspace != V4L2_COLORSPACE_DEFAULT ||
|
||||||
matrix_coeff = inst->fmts[port].fmt.pix_mp.ycbcr_enc;
|
inst->fmts[port].fmt.pix_mp.ycbcr_enc != V4L2_XFER_FUNC_DEFAULT ||
|
||||||
transfer_char = inst->fmts[port].fmt.pix_mp.xfer_func;
|
inst->fmts[port].fmt.pix_mp.xfer_func != V4L2_YCBCR_ENC_DEFAULT) {
|
||||||
|
|
||||||
if (primaries != V4L2_COLORSPACE_DEFAULT ||
|
|
||||||
transfer_char != V4L2_XFER_FUNC_DEFAULT ||
|
|
||||||
matrix_coeff != V4L2_YCBCR_ENC_DEFAULT) {
|
|
||||||
colour_description_present_flag = 1;
|
colour_description_present_flag = 1;
|
||||||
video_signal_type_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 !=
|
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;
|
V4L2_QUANTIZATION_LIM_RANGE;
|
||||||
if (colour_description_present_flag) {
|
if (colour_description_present_flag) {
|
||||||
inst->fmts[OUTPUT_PORT].fmt.pix_mp.colorspace =
|
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 =
|
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 =
|
inst->fmts[OUTPUT_PORT].fmt.pix_mp.ycbcr_enc =
|
||||||
matrix_coeff;
|
v4l2_matrix_coeff_from_driver(inst, matrix_coeff);
|
||||||
} else {
|
} else {
|
||||||
i_vpr_h(inst,
|
i_vpr_h(inst,
|
||||||
"%s: color description flag is not present\n",
|
"%s: color description flag is not present\n",
|
||||||
|
@@ -272,8 +272,10 @@ static int msm_venc_set_colorspace(struct msm_vidc_inst* inst,
|
|||||||
enum msm_vidc_port_type port)
|
enum msm_vidc_port_type port)
|
||||||
{
|
{
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
u32 primaries, matrix_coeff, transfer_char;
|
u32 primaries = MSM_VIDC_PRIMARIES_RESERVED;
|
||||||
u32 full_range = 0;
|
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 colour_description_present_flag = 0;
|
||||||
u32 video_signal_type_present_flag = 0, payload = 0;
|
u32 video_signal_type_present_flag = 0, payload = 0;
|
||||||
/* Unspecified video format */
|
/* Unspecified video format */
|
||||||
@@ -284,15 +286,17 @@ static int msm_venc_set_colorspace(struct msm_vidc_inst* inst,
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
primaries = inst->fmts[port].fmt.pix_mp.colorspace;
|
if (inst->fmts[port].fmt.pix_mp.colorspace != V4L2_COLORSPACE_DEFAULT ||
|
||||||
matrix_coeff = inst->fmts[port].fmt.pix_mp.ycbcr_enc;
|
inst->fmts[port].fmt.pix_mp.ycbcr_enc != V4L2_XFER_FUNC_DEFAULT ||
|
||||||
transfer_char = inst->fmts[port].fmt.pix_mp.xfer_func;
|
inst->fmts[port].fmt.pix_mp.xfer_func != V4L2_YCBCR_ENC_DEFAULT) {
|
||||||
|
|
||||||
if (primaries != V4L2_COLORSPACE_DEFAULT ||
|
|
||||||
transfer_char != V4L2_XFER_FUNC_DEFAULT ||
|
|
||||||
matrix_coeff != V4L2_YCBCR_ENC_DEFAULT) {
|
|
||||||
colour_description_present_flag = 1;
|
colour_description_present_flag = 1;
|
||||||
video_signal_type_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 !=
|
if (inst->fmts[port].fmt.pix_mp.quantization !=
|
||||||
|
@@ -227,6 +227,297 @@ u32 v4l2_colorformat_from_driver(enum msm_vidc_colorformat_type colorformat,
|
|||||||
return v4l2_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,
|
int v4l2_type_to_driver_port(struct msm_vidc_inst *inst, u32 type,
|
||||||
const char *func)
|
const char *func)
|
||||||
{
|
{
|
||||||
|
@@ -26,6 +26,26 @@
|
|||||||
#define V4L2_PIX_FMT_VIDC_ARGB32C v4l2_fourcc('Q', '2', '4', 'C')
|
#define V4L2_PIX_FMT_VIDC_ARGB32C v4l2_fourcc('Q', '2', '4', 'C')
|
||||||
#define V4L2_META_FMT_VIDC v4l2_fourcc('Q', 'M', 'E', 'T')
|
#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 */
|
/* vendor controls start */
|
||||||
#define V4L2_CID_MPEG_VIDC_BASE (V4L2_CTRL_CLASS_MPEG | 0x2000)
|
#define V4L2_CID_MPEG_VIDC_BASE (V4L2_CTRL_CLASS_MPEG | 0x2000)
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user