31 16, 16, 16, 16, 17, 18, 21, 24,
32 16, 16, 16, 16, 17, 19, 22, 25,
33 16, 16, 17, 18, 20, 22, 25, 29,
34 16, 16, 18, 21, 24, 27, 31, 36,
35 17, 17, 20, 24, 30, 35, 41, 47,
36 18, 19, 22, 27, 35, 44, 54, 65,
37 21, 22, 25, 31, 41, 54, 70, 88,
38 24, 25, 29, 36, 47, 65, 88, 115
42 16, 16, 16, 16, 17, 18, 20, 24,
43 16, 16, 16, 17, 18, 20, 24, 25,
44 16, 16, 17, 18, 20, 24, 25, 28,
45 16, 17, 18, 20, 24, 25, 28, 33,
46 17, 18, 20, 24, 25, 28, 33, 41,
47 18, 20, 24, 25, 28, 33, 41, 54,
48 20, 24, 25, 28, 33, 41, 54, 71,
49 24, 25, 28, 33, 41, 54, 71, 91
73 const HEVCSPS *sps,
int is_slice_header)
91 unsigned abs_delta_rps;
95 if (is_slice_header) {
99 "Invalid value of delta_idx in slice header RPS: %d > %d.\n",
109 if (abs_delta_rps < 1 || abs_delta_rps > 32768) {
111 "Invalid value of abs_delta_rps: %d\n",
115 delta_rps = (1 - (delta_rps_sign << 1)) * abs_delta_rps;
122 if (used || use_delta_flag) {
123 if (i < rps_ridx->num_delta_pocs)
124 delta_poc = delta_rps + rps_ridx->
delta_poc[i];
126 delta_poc = delta_rps;
144 for (k = i - 1; k >= 0; k--) {
146 if (delta_poc < tmp) {
170 unsigned int prev, nb_positive_pics;
190 for (i = 0; i < nb_positive_pics; i++) {
225 for (i = 0; i < 32; i++)
252 for (i = 0; i < max_num_sub_layers - 1; i++) {
257 if (max_num_sub_layers - 1> 0)
258 for (i = max_num_sub_layers - 1; i < 8; i++)
260 for (i = 0; i < max_num_sub_layers - 1; i++) {
264 "PTL information for sublayer %i too short\n", i);
270 "Not enough data for sublayer %i level_idc\n", i);
281 int subpic_params_present)
286 for (i = 0; i < nb_cpb; i++) {
290 if (subpic_params_present) {
302 int nal_params_present = 0, vcl_params_present = 0;
303 int subpic_params_present = 0;
306 if (common_inf_present) {
310 if (nal_params_present || vcl_params_present) {
313 if (subpic_params_present) {
323 if (subpic_params_present)
332 for (i = 0; i < max_sublayers; i++) {
334 unsigned int nb_cpb = 1;
347 if (nb_cpb < 1 || nb_cpb > 32) {
353 if (nal_params_present)
355 if (vcl_params_present)
451 int common_inf_present = 1;
482 int sar_present, alt = 0;
490 vui->
sar = vui_sar[sar_idx];
491 else if (sar_idx == 255) {
496 "Unknown SAR index: %u.\n", sar_idx);
541 memcpy(&backup, gb,
sizeof(backup));
553 "discarding vui default display window, "
554 "original values are l:%u r:%u t:%u b:%u\n",
574 "Strange VUI timing information, retrying...\n");
577 memcpy(gb, &backup,
sizeof(backup));
611 for (matrixId = 0; matrixId < 6; matrixId++) {
613 memset(sl->
sl[0][matrixId], 16, 16);
614 sl->
sl_dc[0][matrixId] = 16;
615 sl->
sl_dc[1][matrixId] = 16;
640 uint8_t scaling_list_pred_mode_flag;
641 int32_t scaling_list_dc_coef[2][6];
642 int size_id, matrix_id, pos;
645 for (size_id = 0; size_id < 4; size_id++)
646 for (matrix_id = 0; matrix_id < 6; matrix_id += ((size_id == 3) ? 3 : 1)) {
647 scaling_list_pred_mode_flag =
get_bits1(gb);
648 if (!scaling_list_pred_mode_flag) {
654 if (matrix_id < delta) {
656 "Invalid delta in scaling list data: %d.\n", delta);
660 memcpy(sl->
sl[size_id][matrix_id],
661 sl->
sl[size_id][matrix_id - delta],
662 size_id > 0 ? 64 : 16);
664 sl->
sl_dc[size_id - 2][matrix_id] = sl->
sl_dc[size_id - 2][matrix_id -
delta];
667 int next_coef, coef_num;
668 int32_t scaling_list_delta_coef;
671 coef_num =
FFMIN(64, 1 << (4 + (size_id << 1)));
673 scaling_list_dc_coef[size_id - 2][matrix_id] =
get_se_golomb(gb) + 8;
674 next_coef = scaling_list_dc_coef[size_id - 2][matrix_id];
675 sl->
sl_dc[size_id - 2][matrix_id] = next_coef;
677 for (i = 0; i < coef_num; i++) {
686 next_coef = (next_coef + scaling_list_delta_coef + 256) % 256;
687 sl->
sl[size_id][matrix_id][pos] = next_coef;
693 for (i = 0; i < 64; i++) {
694 sl->
sl[3][1][i] = sl->
sl[2][1][i];
695 sl->
sl[3][2][i] = sl->
sl[2][2][i];
696 sl->
sl[3][4][i] = sl->
sl[2][4][i];
697 sl->
sl[3][5][i] = sl->
sl[2][5][i];
714 unsigned int sps_id = 0;
715 int log2_diff_max_min_transform_block_size;
716 int bit_depth_chroma,
start, vui_present, sublayer_ordering_info;
790 "discarding sps conformance window, "
791 "original values are l:%u r:%u t:%u b:%u\n",
809 "Luma bit depth (%d) is different from chroma bit depth (%d), "
810 "this is unsupported.\n",
843 "4:2:0, 4:2:2, 4:4:4 supports are currently specified for 8, 10 and 12 bits.\n");
892 if (!sublayer_ordering_info) {
893 for (i = 0; i <
start; i++) {
925 if (log2_diff_max_min_transform_block_size < 0 || log2_diff_max_min_transform_block_size > 30) {
926 av_log(s->
avctx,
AV_LOG_ERROR,
"Invalid value %d for log2_diff_max_min_transform_block_size", log2_diff_max_min_transform_block_size);
957 "PCM bit depth (%d) is greater than normal bit depth (%d)\n",
1001 int sps_extension_flag[1];
1002 for (i = 0; i < 1; i++)
1005 if (sps_extension_flag[0]) {
1006 int extended_precision_processing_flag;
1007 int high_precision_offsets_enabled_flag;
1008 int cabac_bypass_alignment_enabled_flag;
1016 extended_precision_processing_flag =
get_bits1(gb);
1017 if (extended_precision_processing_flag)
1019 "extended_precision_processing_flag not yet implemented\n");
1022 high_precision_offsets_enabled_flag =
get_bits1(gb);
1023 if (high_precision_offsets_enabled_flag)
1025 "high_precision_offsets_enabled_flag not yet implemented\n");
1029 cabac_bypass_alignment_enabled_flag =
get_bits1(gb);
1030 if (cabac_bypass_alignment_enabled_flag)
1032 "cabac_bypass_alignment_enabled_flag not yet implemented\n");
1045 "chroma samples to preserve alignment.\n",
1061 "Displaying the whole video surface.\n");
1100 "log2_ctb_size %d differs from the bounds of any known profile\n",
1117 "max transform block size out of range: %d\n",
1130 "Parsed SPS: id %d; coded wxh: %dx%d; "
1131 "cropped wxh: %dx%d; pix_fmt: %s.\n",
1197 "chroma_qp_offset_list_len_minus1 shall be in the range [0, 5].\n");
1204 "cb_qp_offset_list not tested yet.\n");
1209 "cb_qp_offset_list not tested yet.\n");
1223 int pic_area_in_ctbs;
1224 int log2_diff_ctb_min_tb_size;
1225 int i, j, x,
y, ctb_addr_rs, tile_id;
1227 unsigned int pps_id = 0;
1423 int pps_range_extensions_flag =
get_bits1(gb);
1490 for (ctb_addr_rs = 0; ctb_addr_rs < pic_area_in_ctbs; ctb_addr_rs++) {
1491 int tb_x = ctb_addr_rs % sps->
ctb_width;
1492 int tb_y = ctb_addr_rs / sps->
ctb_width;
1498 if (tb_x < pps->col_bd[i + 1]) {
1505 if (tb_y < pps->row_bd[i + 1]) {
1511 for (i = 0; i < tile_x; i++)
1513 for (i = 0; i < tile_y; i++)
1517 tb_x - pps->
col_bd[tile_x];
1525 for (y = pps->
row_bd[j]; y < pps->row_bd[j + 1]; y++)
1526 for (x = pps->
col_bd[i]; x < pps->col_bd[i + 1]; x++)
1541 for (y = 0; y < sps->
tb_mask+2; y++) {
1545 for (y = 0; y < sps->
tb_mask+1; y++) {
1546 for (x = 0; x < sps->
tb_mask+1; x++) {
1547 int tb_x = x >> log2_diff_ctb_min_tb_size;
1548 int tb_y = y >> log2_diff_ctb_min_tb_size;
1549 int ctb_addr_rs = sps->
ctb_width * tb_y + tb_x;
1551 (log2_diff_ctb_min_tb_size * 2);
1552 for (i = 0; i < log2_diff_ctb_min_tb_size; i++) {
1554 val += (m & x ? m * m : 0) + (m & y ? 2 * m * m : 0);
static unsigned int show_bits_long(GetBitContext *s, int n)
Show 0-32 bits.
unsigned int log2_min_cb_size
const char const char void * val
uint8_t log2_sao_offset_scale_luma
int min_spatial_segmentation_idc
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
void av_buffer_unref(AVBufferRef **buf)
Free a given reference and automatically free the buffer if there are no more references to it...
const AVPixFmtDescriptor * av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
static int parse_ptl(HEVCContext *s, PTL *ptl, int max_num_sub_layers)
ptrdiff_t const GLvoid * data
#define CODEC_FLAG_UNALIGNED
Allow decoders to produce frames with data planes that are not aligned to CPU requirements (e...
uint8_t diff_cu_chroma_qp_offset_depth
static int get_se_golomb(GetBitContext *gb)
read signed exp golomb code.
int vui_num_ticks_poc_diff_one_minus1
int max_dec_pic_buffering
planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples)
int transform_skip_rotation_enabled_flag
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
#define AV_LOG_WARNING
Something somehow does not look correct.
#define CODEC_FLAG2_IGNORE_CROP
Discard cropping information from SPS.
int8_t cb_qp_offset_list[5]
int ff_hevc_decode_nal_sps(HEVCContext *s)
unsigned int * row_height
RowHeight.
#define FF_PROFILE_HEVC_MAIN_STILL_PICTURE
int vps_num_ticks_poc_diff_one
vps_num_ticks_poc_diff_one_minus1 + 1
#define MAX_LOG2_CTB_SIZE
const uint8_t ff_hevc_diag_scan4x4_x[16]
static int decode_hrd(HEVCContext *s, int common_inf_present, int max_sublayers)
uint8_t weighted_bipred_flag
uint8_t seq_loop_filter_across_slices_enabled_flag
uint8_t cabac_init_present_flag
int chroma_loc_info_present_flag
#define AV_PIX_FMT_YUV420P12
#define FF_ARRAY_ELEMS(a)
int * ctb_addr_ts_to_rs
CtbAddrTSToRS.
int explicit_rdpcm_enabled_flag
int num_ref_idx_l0_default_active
num_ref_idx_l0_default_active_minus1 + 1
static const AVRational vui_sar[]
ShortTermRPS st_rps[MAX_SHORT_TERM_RPS_COUNT]
int chroma_sample_loc_type_top_field
uint8_t log2_chroma_w
Amount to shift the luma width right to find the chroma width.
uint8_t entropy_coding_sync_enabled_flag
int log2_parallel_merge_level
log2_parallel_merge_level_minus2 + 2
uint8_t log2_sao_offset_scale_chroma
int restricted_ref_pic_lists_flag
unsigned int log2_max_trafo_size
void void avpriv_request_sample(void *avc, const char *msg,...) av_printf_format(2
Log a generic warning message about a missing feature.
uint8_t profile_compatibility_flag[32]
unsigned int num_negative_pics
uint8_t sub_layer_profile_present_flag[MAX_SUB_LAYERS]
static const uint8_t default_scaling_list_inter[]
unsigned int vps_num_reorder_pics[MAX_SUB_LAYERS]
uint8_t log2_max_transform_skip_block_size
int overscan_info_present_flag
uint8_t vps_timing_info_present_flag
int num_ref_idx_l1_default_active
num_ref_idx_l1_default_active_minus1 + 1
unsigned int log2_min_pcm_cb_size
int vps_max_sub_layers
vps_max_temporal_layers_minus1 + 1
int frame_field_info_present_flag
uint8_t scaling_list_data_present_flag
static int decode_profile_tier_level(HEVCContext *s, PTLCommon *ptl)
static int pps_range_extensions(HEVCContext *s, HEVCPPS *pps, HEVCSPS *sps)
int ff_hevc_decode_nal_vps(HEVCContext *s)
uint8_t loop_filter_disable_flag
int ff_hevc_decode_nal_pps(HEVCContext *s)
#define AV_PIX_FMT_YUV422P12
int bitstream_restriction_flag
uint8_t transquant_bypass_enable_flag
int8_t cr_qp_offset_list[5]
static int get_bits_left(GetBitContext *gb)
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
uint8_t frame_only_constraint_flag
unsigned int log2_max_poc_lsb
uint8_t log2_chroma_h
Amount to shift the luma height right to find the chroma height.
AVBufferRef * vps_list[MAX_VPS_COUNT]
int persistent_rice_adaptation_enabled_flag
coded frame dimension in various units
#define AV_EF_EXPLODE
abort decoding on minor error detection
int vui_timing_info_present_flag
AVBufferRef * current_sps
struct HEVCSPS::@51 temporal_layer[MAX_SUB_LAYERS]
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
#define MAX_SHORT_TERM_RPS_COUNT
unsigned int log2_ctb_size
int vui_poc_proportional_to_timing_flag
#define AV_PIX_FMT_YUV444P10
AVBufferRef * av_buffer_create(uint8_t *data, int size, void(*free)(void *opaque, uint8_t *data), void *opaque, int flags)
Create an AVBuffer from an existing array.
uint8_t vps_temporal_id_nesting_flag
int motion_vectors_over_pic_boundaries_flag
uint8_t tiles_enabled_flag
planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
uint32_t vps_num_units_in_tick
int vps_num_layer_sets
vps_num_layer_sets_minus1 + 1
#define AV_PIX_FMT_YUV422P9
uint8_t lists_modification_present_flag
int * min_tb_addr_zs_tab
MinTbAddrZS.
int av_image_check_size(unsigned int w, unsigned int h, int log_offset, void *log_ctx)
Check if the given dimension of an image is valid, meaning that all bytes of the image can be address...
static int scaling_list_data(HEVCContext *s, ScalingList *sl, HEVCSPS *sps)
int err_recognition
Error recognition; may misdetect some more or less valid parts as errors.
#define AV_PIX_FMT_GRAY16
int max_transform_hierarchy_depth_inter
planar YUV 4:2:0, 12bpp, full scale (JPEG), deprecated in favor of PIX_FMT_YUV420P and setting color_...
uint8_t vps_poc_proportional_to_timing_flag
int num_tile_columns
num_tile_columns_minus1 + 1
#define FF_PROFILE_HEVC_MAIN_10
AVBufferRef * sps_list[MAX_SPS_COUNT]
int max_bits_per_min_cu_denom
uint8_t cu_qp_delta_enabled_flag
uint8_t used_by_curr_pic_lt_sps_flag[32]
uint8_t sign_data_hiding_flag
uint8_t output_flag_present_flag
int log2_max_mv_length_vertical
#define AV_PIX_FMT_YUV444P9
int max_bytes_per_pic_denom
int overscan_appropriate_flag
static void set_default_scaling_list_data(ScalingList *sl)
int implicit_rdpcm_enabled_flag
AVBufferRef * pps_list[MAX_PPS_COUNT]
uint8_t constrained_intra_pred_flag
uint8_t pic_slice_level_chroma_qp_offsets_present_flag
static unsigned get_ue_golomb_long(GetBitContext *gb)
Read an unsigned Exp-Golomb code in the range 0 to UINT32_MAX-1.
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
int colour_description_present_flag
uint8_t sub_layer_level_present_flag[MAX_SUB_LAYERS]
enum AVPixelFormat pix_fmt
static int get_se_golomb_long(GetBitContext *gb)
#define AV_LOG_INFO
Standard information.
uint8_t transform_skip_enabled_flag
uint8_t uniform_spacing_flag
int * ctb_addr_rs_to_ts
CtbAddrRSToTS.
unsigned int log2_min_pu_size
unsigned int sps_id
seq_parameter_set_id
Descriptor that unambiguously describes how the bits of a pixel are stored in the up to 4 data planes...
int log2_max_mv_length_horizontal
int num_extra_slice_header_bits
uint8_t * data
The data buffer.
uint8_t loop_filter_across_tiles_enabled_flag
uint8_t num_long_term_ref_pics_sps
uint8_t cross_component_prediction_enabled_flag
uint32_t vui_num_units_in_tick
AVBufferRef * av_buffer_allocz(int size)
Same as av_buffer_alloc(), except the returned buffer will be initialized to zero.
uint8_t deblocking_filter_control_present_flag
static unsigned int get_bits1(GetBitContext *s)
int transform_skip_context_enabled_flag
static void skip_bits1(GetBitContext *s)
#define AV_PIX_FMT_YUV420P10
uint8_t sps_temporal_mvp_enabled_flag
int chroma_sample_loc_type_bottom_field
int num_tile_rows
num_tile_rows_minus1 + 1
static void skip_bits(GetBitContext *s, int n)
uint8_t chroma_qp_offset_list_enabled_flag
const uint8_t ff_hevc_diag_scan8x8_y[64]
rational number numerator/denominator
int vps_num_hrd_parameters
#define MAX_SUB_LAYERS
7.4.2.1
static void hevc_pps_free(void *opaque, uint8_t *data)
#define FF_PROFILE_HEVC_REXT
unsigned int log2_min_tb_size
uint16_t lt_ref_pic_poc_lsb_sps[32]
#define AV_PIX_FMT_YUV420P9
static unsigned int get_bits_long(GetBitContext *s, int n)
Read 0-32 bits.
uint8_t scaling_list_enable_flag
static const uint8_t default_scaling_list_intra[]
int tc_offset
tc_offset_div2 * 2
uint8_t transfer_characteristic
int default_display_window_flag
HEVCLocalContext * HEVClc
int size
Size of data in bytes.
#define AV_PIX_FMT_YUV422P10
unsigned int log2_diff_max_min_coding_block_size
#define AV_PIX_FMT_YUV444P12
unsigned int log2_max_pcm_cb_size
int neutra_chroma_indication_flag
int * tile_pos_rs
TilePosRS.
static void decode_vui(HEVCContext *s, HEVCSPS *sps)
A reference to a data buffer.
int max_transform_hierarchy_depth_intra
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
unsigned int * row_bd
RowBd.
uint8_t weighted_pred_flag
unsigned int * col_bd
ColBd.
unsigned int * column_width
ColumnWidth.
AVBufferRef * av_buffer_ref(AVBufferRef *buf)
Create a new reference to an AVBuffer.
uint8_t slice_header_extension_present_flag
int video_full_range_flag
PTLCommon sub_layer_ptl[MAX_SUB_LAYERS]
#define FF_PROFILE_HEVC_MAIN
uint8_t chroma_qp_offset_list_len_minus1
uint8_t sps_strong_intra_smoothing_enable_flag
#define FF_DEBUG_BITSTREAM
int ff_hevc_decode_short_term_rps(HEVCContext *s, ShortTermRPS *rps, const HEVCSPS *sps, int is_slice_header)
unsigned int vps_max_dec_pic_buffering[MAX_SUB_LAYERS]
uint8_t long_term_ref_pics_present_flag
unsigned int vps_max_latency_increase[MAX_SUB_LAYERS]
static void decode_sublayer_hrd(HEVCContext *s, unsigned int nb_cpb, int subpic_params_present)
int vui_hrd_parameters_present_flag
unsigned int right_offset
int diff_cu_qp_delta_depth
const uint8_t ff_hevc_diag_scan8x8_x[64]
uint8_t progressive_source_flag
#define av_malloc_array(a, b)
int video_signal_type_present_flag
uint8_t deblocking_filter_override_enabled_flag
int beta_offset
beta_offset_div2 * 2
const char * av_get_pix_fmt_name(enum AVPixelFormat pix_fmt)
Return the short name for a pixel format, NULL in case pix_fmt is unknown.
int * min_tb_addr_zs
MinTbAddrZS.
uint8_t non_packed_constraint_flag
int intra_smoothing_disabled_flag
int tiles_fixed_structure_flag
uint8_t interlaced_source_flag
void * av_mallocz(size_t size)
Allocate a block of size bytes with alignment suitable for all memory accesses (including vectors if ...
uint8_t separate_colour_plane_flag
output (i.e. cropped) values
const uint8_t ff_hevc_diag_scan4x4_y[16]
unsigned int bottom_offset
int vps_sub_layer_ordering_info_present_flag
uint8_t dependent_slice_segments_enabled_flag