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:
Akshata Sahukar
2021-02-22 11:54:19 -08:00
committed by Gerrit - the friendly Code Review server
parent e743f5dd48
commit 20d30c5dd2
6 changed files with 407 additions and 21 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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