/* 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.
*/
/* * struct nal_h264_sps - Sequence parameter set * * C struct representation of the sequence parameter set NAL unit as defined by * Rec. ITU-T H.264 (04/2017) 7.3.2.1.1 Sequence parameter set data syntax.
*/ struct nal_h264_sps { unsignedint profile_idc; unsignedint constraint_set0_flag; unsignedint constraint_set1_flag; unsignedint constraint_set2_flag; unsignedint constraint_set3_flag; unsignedint constraint_set4_flag; unsignedint constraint_set5_flag; unsignedint reserved_zero_2bits; unsignedint level_idc; unsignedint seq_parameter_set_id; struct { unsignedint chroma_format_idc; unsignedint separate_colour_plane_flag; unsignedint bit_depth_luma_minus8; unsignedint bit_depth_chroma_minus8; unsignedint qpprime_y_zero_transform_bypass_flag; unsignedint seq_scaling_matrix_present_flag;
}; unsignedint log2_max_frame_num_minus4; unsignedint pic_order_cnt_type; union { unsignedint log2_max_pic_order_cnt_lsb_minus4; struct { unsignedint delta_pic_order_always_zero_flag; int offset_for_non_ref_pic; int offset_for_top_to_bottom_field; unsignedint num_ref_frames_in_pic_order_cnt_cycle; int offset_for_ref_frame[255];
};
}; unsignedint max_num_ref_frames; unsignedint gaps_in_frame_num_value_allowed_flag; unsignedint pic_width_in_mbs_minus1; unsignedint pic_height_in_map_units_minus1; unsignedint frame_mbs_only_flag; unsignedint mb_adaptive_frame_field_flag; unsignedint direct_8x8_inference_flag; unsignedint frame_cropping_flag; struct { unsignedint crop_left; unsignedint crop_right; unsignedint crop_top; unsignedint crop_bottom;
}; unsignedint vui_parameters_present_flag; struct nal_h264_vui_parameters vui;
};
/* * struct nal_h264_pps - Picture parameter set * * C struct representation of the picture parameter set NAL unit as defined by * Rec. ITU-T H.264 (04/2017) 7.3.2.2 Picture parameter set RBSP syntax.
*/ struct nal_h264_pps { unsignedint pic_parameter_set_id; unsignedint seq_parameter_set_id; unsignedint entropy_coding_mode_flag; unsignedint bottom_field_pic_order_in_frame_present_flag; unsignedint num_slice_groups_minus1; unsignedint slice_group_map_type; union { unsignedint run_length_minus1[8]; struct { unsignedint top_left[8]; unsignedint bottom_right[8];
}; struct { unsignedint slice_group_change_direction_flag; unsignedint slice_group_change_rate_minus1;
}; struct { unsignedint pic_size_in_map_units_minus1; unsignedint slice_group_id[8];
};
}; unsignedint num_ref_idx_l0_default_active_minus1; unsignedint num_ref_idx_l1_default_active_minus1; unsignedint weighted_pred_flag; unsignedint weighted_bipred_idc; int pic_init_qp_minus26; int pic_init_qs_minus26; int chroma_qp_index_offset; unsignedint deblocking_filter_control_present_flag; unsignedint constrained_intra_pred_flag; unsignedint redundant_pic_cnt_present_flag; struct { unsignedint transform_8x8_mode_flag; unsignedint pic_scaling_matrix_present_flag; int second_chroma_qp_index_offset;
};
};
/** * nal_h264_profile() - Get profile_idc for v4l2 h264 profile * @profile: the profile as &enum v4l2_mpeg_video_h264_profile * * Convert the &enum v4l2_mpeg_video_h264_profile to profile_idc as specified * in Rec. ITU-T H.264 (04/2017) A.2. * * Return: the profile_idc for the passed level
*/ staticinlineint nal_h264_profile(enum v4l2_mpeg_video_h264_profile profile)
{ switch (profile) { case V4L2_MPEG_VIDEO_H264_PROFILE_BASELINE: return 66; case V4L2_MPEG_VIDEO_H264_PROFILE_MAIN: return 77; case V4L2_MPEG_VIDEO_H264_PROFILE_EXTENDED: return 88; case V4L2_MPEG_VIDEO_H264_PROFILE_HIGH: return 100; default: return -EINVAL;
}
}
/** * nal_h264_level() - Get level_idc for v4l2 h264 level * @level: the level as &enum v4l2_mpeg_video_h264_level * * Convert the &enum v4l2_mpeg_video_h264_level to level_idc as specified in * Rec. ITU-T H.264 (04/2017) A.3.2. * * Return: the level_idc for the passed level
*/ staticinlineint nal_h264_level(enum v4l2_mpeg_video_h264_level level)
{ switch (level) { case V4L2_MPEG_VIDEO_H264_LEVEL_1_0: return 10; case V4L2_MPEG_VIDEO_H264_LEVEL_1B: return 9; case V4L2_MPEG_VIDEO_H264_LEVEL_1_1: return 11; case V4L2_MPEG_VIDEO_H264_LEVEL_1_2: return 12; case V4L2_MPEG_VIDEO_H264_LEVEL_1_3: return 13; case V4L2_MPEG_VIDEO_H264_LEVEL_2_0: return 20; case V4L2_MPEG_VIDEO_H264_LEVEL_2_1: return 21; case V4L2_MPEG_VIDEO_H264_LEVEL_2_2: return 22; case V4L2_MPEG_VIDEO_H264_LEVEL_3_0: return 30; case V4L2_MPEG_VIDEO_H264_LEVEL_3_1: return 31; case V4L2_MPEG_VIDEO_H264_LEVEL_3_2: return 32; case V4L2_MPEG_VIDEO_H264_LEVEL_4_0: return 40; case V4L2_MPEG_VIDEO_H264_LEVEL_4_1: return 41; case V4L2_MPEG_VIDEO_H264_LEVEL_4_2: return 42; case V4L2_MPEG_VIDEO_H264_LEVEL_5_0: return 50; case V4L2_MPEG_VIDEO_H264_LEVEL_5_1: return 51; default: return -EINVAL;
}
}
/** * nal_h264_full_range() - Get video_full_range_flag for v4l2 quantization * @quantization: the quantization type as &enum v4l2_quantization * * Convert the &enum v4l2_quantization to video_full_range_flag as specified in * Rec. ITU-T H.264 (04/2017) E.2.1. * * Return: the video_full_range_flag value for the passed quantization
*/ staticinlineint nal_h264_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;
}
/** * nal_h264_color_primaries() - Get color_primaries for v4l2 colorspace * @colorspace: the color space as &enum v4l2_colorspace * * Convert the &enum v4l2_colorspace to color_primaries as specified in * Rec. ITU-T H.264 (04/2017) E.2.1. * * Return: the color_primaries value for the passed colorspace
*/ staticinlineint nal_h264_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;
}
}
/** * nal_h264_transfer_characteristics() - Get transfer_characteristics for v4l2 xfer_func * @colorspace: the color space as &enum v4l2_colorspace * @xfer_func: the transfer function as &enum v4l2_xfer_func * * Convert the &enum v4l2_xfer_func to transfer_characteristics as specified in * Rec. ITU-T H.264 (04/2017) E.2.1. * * Return: the transfer_characteristics value for the passed transfer function
*/ staticinlineint nal_h264_transfer_characteristics(enum v4l2_colorspace colorspace, enum v4l2_xfer_func xfer_func)
{ if (xfer_func == V4L2_XFER_FUNC_DEFAULT)
xfer_func = V4L2_MAP_XFER_FUNC_DEFAULT(colorspace);
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;
}
}
/** * nal_h264_matrix_coeffs() - Get matrix_coefficients for v4l2 v4l2_ycbcr_encoding * @colorspace: the color space as &enum v4l2_colorspace * @ycbcr_encoding: the ycbcr encoding as &enum v4l2_ycbcr_encoding * * Convert the &enum v4l2_ycbcr_encoding to matrix_coefficients as specified in * Rec. ITU-T H.264 (04/2017) E.2.1. * * Return: the matrix_coefficients value for the passed encoding
*/ staticinlineint nal_h264_matrix_coeffs(enum v4l2_colorspace colorspace, enum v4l2_ycbcr_encoding ycbcr_encoding)
{ if (ycbcr_encoding == V4L2_YCBCR_ENC_DEFAULT)
ycbcr_encoding = V4L2_MAP_YCBCR_ENC_DEFAULT(colorspace);
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.