/* SPDX-License-Identifier: GPL-2.0 */ /* * Copyright (C) 2019 Pengutronix, Michael Tretter <kernel@pengutronix.de> * * Convert NAL units between raw byte sequence payloads (RBSP) and C structs.
*/
/** * nal_hevc_profile() - Get profile_idc for v4l2 hevc profile * @profile: the profile as &enum v4l2_mpeg_video_hevc_profile * * Convert the &enum v4l2_mpeg_video_hevc_profile to profile_idc as specified * in Rec. ITU-T H.265 (02/2018) A.3. * * Return: the profile_idc for the passed level
*/ staticinlineint nal_hevc_profile(enum v4l2_mpeg_video_hevc_profile profile)
{ switch (profile) { case V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN: return 1; case V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_10: return 2; case V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_STILL_PICTURE: return 3; default: return -EINVAL;
}
}
/** * nal_hevc_tier() - Get tier_flag for v4l2 hevc tier * @tier: the tier as &enum v4l2_mpeg_video_hevc_tier * * Convert the &enum v4l2_mpeg_video_hevc_tier to tier_flag as specified * in Rec. ITU-T H.265 (02/2018) A.4.1. * * Return: the tier_flag for the passed tier
*/ staticinlineint nal_hevc_tier(enum v4l2_mpeg_video_hevc_tier tier)
{ switch (tier) { case V4L2_MPEG_VIDEO_HEVC_TIER_MAIN: return 0; case V4L2_MPEG_VIDEO_HEVC_TIER_HIGH: return 1; default: return -EINVAL;
}
}
/** * nal_hevc_level() - Get level_idc for v4l2 hevc level * @level: the level as &enum v4l2_mpeg_video_hevc_level * * Convert the &enum v4l2_mpeg_video_hevc_level to level_idc as specified in * Rec. ITU-T H.265 (02/2018) A.4.1. * * Return: the level_idc for the passed level
*/ staticinlineint nal_hevc_level(enum v4l2_mpeg_video_hevc_level level)
{ /* * T-Rec-H.265 p. 280: general_level_idc and sub_layer_level_idc[ i ] * shall be set equal to a value of 30 times the level number * specified in Table A.6.
*/ int factor = 30 / 10;
switch (level) { case V4L2_MPEG_VIDEO_HEVC_LEVEL_1: return factor * 10; case V4L2_MPEG_VIDEO_HEVC_LEVEL_2: return factor * 20; case V4L2_MPEG_VIDEO_HEVC_LEVEL_2_1: return factor * 21; case V4L2_MPEG_VIDEO_HEVC_LEVEL_3: return factor * 30; case V4L2_MPEG_VIDEO_HEVC_LEVEL_3_1: return factor * 31; case V4L2_MPEG_VIDEO_HEVC_LEVEL_4: return factor * 40; case V4L2_MPEG_VIDEO_HEVC_LEVEL_4_1: return factor * 41; case V4L2_MPEG_VIDEO_HEVC_LEVEL_5: return factor * 50; case V4L2_MPEG_VIDEO_HEVC_LEVEL_5_1: return factor * 51; case V4L2_MPEG_VIDEO_HEVC_LEVEL_5_2: return factor * 52; case V4L2_MPEG_VIDEO_HEVC_LEVEL_6: return factor * 60; case V4L2_MPEG_VIDEO_HEVC_LEVEL_6_1: return factor * 61; case V4L2_MPEG_VIDEO_HEVC_LEVEL_6_2: return factor * 62; default: return -EINVAL;
}
}
staticinlineint nal_hevc_full_range(enum v4l2_quantization quantization)
{ switch (quantization) { case V4L2_QUANTIZATION_FULL_RANGE: return 1; case V4L2_QUANTIZATION_LIM_RANGE: return 0; default: break;
}
return 0;
}
staticinlineint nal_hevc_color_primaries(enum v4l2_colorspace colorspace)
{ switch (colorspace) { case V4L2_COLORSPACE_SMPTE170M: return 6; case V4L2_COLORSPACE_SMPTE240M: return 7; case V4L2_COLORSPACE_REC709: return 1; case V4L2_COLORSPACE_470_SYSTEM_M: return 4; case V4L2_COLORSPACE_JPEG: case V4L2_COLORSPACE_SRGB: case V4L2_COLORSPACE_470_SYSTEM_BG: return 5; case V4L2_COLORSPACE_BT2020: return 9; case V4L2_COLORSPACE_DEFAULT: case V4L2_COLORSPACE_OPRGB: case V4L2_COLORSPACE_RAW: case V4L2_COLORSPACE_DCI_P3: default: return 2;
}
}
switch (xfer_func) { case V4L2_XFER_FUNC_709: return 6; case V4L2_XFER_FUNC_SMPTE2084: return 16; case V4L2_XFER_FUNC_SRGB: case V4L2_XFER_FUNC_OPRGB: case V4L2_XFER_FUNC_NONE: case V4L2_XFER_FUNC_DCI_P3: case V4L2_XFER_FUNC_SMPTE240M: default: return 2;
}
}
switch (ycbcr_encoding) { case V4L2_YCBCR_ENC_601: case V4L2_YCBCR_ENC_XV601: return 5; case V4L2_YCBCR_ENC_709: case V4L2_YCBCR_ENC_XV709: return 1; case V4L2_YCBCR_ENC_BT2020: return 9; case V4L2_YCBCR_ENC_BT2020_CONST_LUM: return 10; case V4L2_YCBCR_ENC_SMPTE240M: default: return 2;
}
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.