23 #ifndef AVCODEC_HEVC_H
24 #define AVCODEC_HEVC_H
26 #include "libavutil/buffer.h"
27 #include "libavutil/md5.h"
39 #define MAX_DPB_SIZE 16 // A.4.1
42 #define MAX_NB_THREADS 16
43 #define SHIFT_CTB_WPP 2
48 #define MAX_SUB_LAYERS 7
49 #define MAX_VPS_COUNT 16
50 #define MAX_SPS_COUNT 32
51 #define MAX_PPS_COUNT 256
52 #define MAX_SHORT_TERM_RPS_COUNT 64
53 #define MAX_CU_SIZE 128
56 #define MAX_TRANSFORM_DEPTH 5
58 #define MAX_TB_SIZE 32
59 #define MAX_PB_SIZE 64
60 #define MAX_LOG2_CTB_SIZE 6
62 #define DEFAULT_INTRA_TC_OFFSET 2
64 #define HEVC_CONTEXTS 183
66 #define MRG_MAX_NUM_CANDS 5
71 #define EPEL_EXTRA_BEFORE 1
72 #define EPEL_EXTRA_AFTER 2
78 #define SAMPLE(tab, x, y) ((tab)[(y) * s->sps->width + (x)])
79 #define SAMPLE_CTB(tab, x, y) ((tab)[(y) * min_cb_width + (x)])
80 #define SAMPLE_CBF(tab, x, y) ((tab)[((y) & ((1<<log2_trafo_size)-1)) * MAX_CU_SIZE + ((x) & ((1<<log2_trafo_size)-1))])
82 #define IS_IDR(s) (s->nal_unit_type == NAL_IDR_W_RADL || s->nal_unit_type == NAL_IDR_N_LP)
83 #define IS_BLA(s) (s->nal_unit_type == NAL_BLA_W_RADL || s->nal_unit_type == NAL_BLA_W_LP || \
84 s->nal_unit_type == NAL_BLA_N_LP)
683 #define HEVC_FRAME_FLAG_OUTPUT (1 << 0)
684 #define HEVC_FRAME_FLAG_SHORT_REF (1 << 1)
685 #define HEVC_FRAME_FLAG_LONG_REF (1 << 2)
877 const HEVCSPS *sps,
int is_slice_header);
960 void ff_hevc_luma_mv_mvp_mode(
HEVCContext *
s,
int x0,
int y0,
int nPbW,
int nPbH,
int log2_cb_size,
int part_idx,
int merge_idx,
MvField *
mv ,
int mvp_lx_flag,
int LX);
963 int slice_or_tiles_up_boundary,
int slice_or_tiles_left_boundary);
969 int log2_trafo_size,
enum ScanType scan_idx,
985 #endif // AVCODEC_HEVC_H
VPS * vps_list[MAX_VPS_COUNT]
unsigned int log2_min_cb_size
int min_spatial_segmentation_idc
This structure describes decoded (raw) audio or video data.
int sub_layer_profile_idc[MAX_SUB_LAYERS]
RefPicList * ff_hevc_get_ref_list(HEVCContext *s, HEVCFrame *frame, int x0, int y0)
int vui_num_ticks_poc_diff_one_minus1
int max_dec_pic_buffering
int ff_hevc_sao_band_position_decode(HEVCContext *s)
NALUnitType
Table 7-3: NAL unit type codes.
int16_t x
horizontal component of motion vector
int ff_hevc_part_mode_decode(HEVCContext *s, int log2_cb_size)
int vps_num_ticks_poc_diff_one
vps_num_ticks_poc_diff_one_minus1 + 1
uint8_t intra_split_flag
IntraSplitFlag.
int rem_intra_luma_pred_mode
int ff_hevc_no_residual_syntax_flag_decode(HEVCContext *s)
void ff_hevc_hls_mvd_coding(HEVCContext *s, int x0, int y0, int log2_cb_size)
uint8_t weighted_bipred_flag
#define DECLARE_ALIGNED(n, t, v)
uint8_t seq_loop_filter_across_slices_enabled_flag
uint8_t cabac_init_present_flag
int chroma_loc_info_present_flag
void ff_hevc_luma_mv_mvp_mode(HEVCContext *s, int x0, int y0, int nPbW, int nPbH, int log2_cb_size, int part_idx, int merge_idx, MvField *mv, int mvp_lx_flag, int LX)
int * ctb_addr_ts_to_rs
CtbAddrTSToRS.
int num_ref_idx_l0_default_active
num_ref_idx_l0_default_active_minus1 + 1
int vps_num_hrd_parameters
struct HEVCFrame * ref[MAX_REFS]
int * row_height
RowHeight.
ShortTermRPS st_rps[MAX_SHORT_TERM_RPS_COUNT]
int chroma_sample_loc_type_top_field
uint16_t seq_decode
Sequence counters for decoded and output frames, so that old frames are output first after a POC rese...
int ff_hevc_decode_nal_sei(HEVCContext *s)
int ff_hevc_frame_nb_refs(HEVCContext *s)
Get the number of candidate references for the current frame.
uint8_t entropy_coding_sync_enabled_flag
int band_position[3]
sao_band_position
const uint8_t ff_hevc_diag_scan4x4_y[16]
int log2_parallel_merge_level
log2_parallel_merge_level_minus2 + 2
AVBufferPool * rpl_tab_pool
candidate references for the current frame
int restricted_ref_pic_lists_flag
unsigned int log2_max_trafo_size
int is_nalff
this flag is != 0 if bitstream is encapsulated as a format defined in 14496-15
int ff_hevc_extract_rbsp(HEVCContext *s, const uint8_t *src, int length, HEVCNAL *nal)
uint8_t sub_layer_profile_present_flag[MAX_SUB_LAYERS]
int ff_hevc_rem_intra_luma_pred_mode_decode(HEVCContext *s)
int * min_cb_addr_zs
MinCbAddrZS.
int ff_hevc_split_transform_flag_decode(HEVCContext *s, int log2_trafo_size)
uint8_t sub_layer_profile_compatibility_flags[MAX_SUB_LAYERS][32]
int ff_hevc_split_coding_unit_flag_decode(HEVCContext *s, int ct_depth, int x0, int y0)
uint8_t ctb_up_right_flag
int overscan_info_present_flag
int ff_hevc_compute_poc(HEVCContext *s, int poc_lsb)
Compute POC of the current frame and return it.
Multithreading support functions.
uint32_t vps_num_units_in_tick
void ff_hevc_hls_residual_coding(HEVCContext *s, int x0, int y0, int log2_trafo_size, enum ScanType scan_idx, int c_idx)
int num_ref_idx_l1_default_active
num_ref_idx_l1_default_active_minus1 + 1
unsigned int log2_min_pcm_cb_size
int ff_hevc_decode_short_term_rps(HEVCContext *s, ShortTermRPS *rps, const HEVCSPS *sps, int is_slice_header)
int frame_field_info_present_flag
int ff_hevc_cu_transquant_bypass_flag_decode(HEVCContext *s)
int pps_scaling_list_data_present_flag
struct HEVCSPS::@63 temporal_layer[MAX_SUB_LAYERS]
void ff_hevc_flush_dpb(HEVCContext *s)
Drop all frames currently in DPB.
int ff_hevc_prev_intra_luma_pred_flag_decode(HEVCContext *s)
unsigned int vps_num_reorder_pics[MAX_SUB_LAYERS]
uint8_t sub_layer_tier_flag[MAX_SUB_LAYERS]
void ff_hevc_deblocking_boundary_strengths(HEVCContext *s, int x0, int y0, int log2_trafo_size, int slice_or_tiles_up_boundary, int slice_or_tiles_left_boundary)
void ff_hevc_clear_refs(HEVCContext *s)
Mark all frames in DPB as unused for reference.
bitstream reader API header.
uint8_t loop_filter_disable_flag
uint8_t cu_transquant_bypass_flag
int * skipped_bytes_pos_size_nal
int bitstream_restriction_flag
uint8_t transquant_bypass_enable_flag
int temporal_id
temporal_id_plus1 - 1
const uint8_t ff_hevc_diag_scan8x8_y[64]
HEVCLocalContext * HEVClcList[MAX_NB_THREADS]
const uint8_t ff_hevc_qpel_extra_after[4]
int slice_idx
number of the slice being currently decoded
uint8_t vps_temporal_id_nesting_flag
int ff_hevc_inter_pred_idc_decode(HEVCContext *s, int nPbW, int nPbH)
unsigned int vps_max_dec_pic_buffering[MAX_SUB_LAYERS]
uint8_t intra_pred_mode[4]
void ff_hevc_unref_frame(HEVCContext *s, HEVCFrame *frame, int flags)
int ff_hevc_ref_idx_lx_decode(HEVCContext *s, int num_ref_idx_lx)
uint8_t slice_initialized
1 if the independent slice segment header was successfully parsed
unsigned int log2_max_poc_lsb
int vps_sub_layer_ordering_info_present_flag
AVBufferRef * rpl_tab_buf
int vui_timing_info_present_flag
int ff_hevc_mvp_lx_flag_decode(HEVCContext *s)
int ff_hevc_slice_rpl(HEVCContext *s)
Construct the reference picture list(s) for the current slice.
unsigned int log2_ctb_size
uint8_t vps_poc_proportional_to_timing_flag
int ** skipped_bytes_pos_nal
int vui_poc_proportional_to_timing_flag
uint8_t general_tier_flag
unsigned int vps_max_latency_increase[MAX_SUB_LAYERS]
Libavcodec external API header.
AVPixelFormat
Pixel format.
#define MAX_SHORT_TERM_RPS_COUNT
uint8_t max_trafo_depth
MaxTrafoDepth.
uint16_t sequence
A sequence counter, so that old frames are output first after a POC reset.
int motion_vectors_over_pic_boundaries_flag
uint8_t tiles_enabled_flag
int eo_class[3]
sao_eo_class
struct HEVCContext * sList[MAX_NB_THREADS]
int ff_hevc_intra_chroma_pred_mode_decode(HEVCContext *s)
uint8_t lists_modification_present_flag
AVBufferRef * tab_mvf_buf
uint8_t type_idx[3]
sao_type_idx
int ff_hevc_pred_mode_decode(HEVCContext *s)
int ff_hevc_sao_eo_class_decode(HEVCContext *s)
int ff_hevc_sao_offset_sign_decode(HEVCContext *s)
int max_transform_hierarchy_depth_inter
uint8_t cabac_state[HEVC_CONTEXTS]
int16_t mc_buffer[(64+7)*64]
uint8_t vps_timing_info_present_flag
int offset_abs[3][4]
sao_offset_abs
int num_tile_columns
num_tile_columns_minus1 + 1
int * column_width
ColumnWidth.
int ff_hevc_transform_skip_flag_decode(HEVCContext *s, int c_idx)
int ff_hevc_sao_type_idx_decode(HEVCContext *s)
uint8_t * edge_emu_buffer
AVBufferRef * sps_list[MAX_SPS_COUNT]
int max_bits_per_min_cu_denom
int ff_hevc_end_of_slice_flag_decode(HEVCContext *s)
uint8_t cu_qp_delta_enabled_flag
uint8_t used_by_curr_pic_lt_sps_flag[32]
const uint8_t ff_hevc_qpel_extra_before[4]
struct HEVCFrame * collocated_ref
uint8_t sign_data_hiding_flag
uint8_t output_flag_present_flag
int log2_max_mv_length_vertical
const uint8_t ff_hevc_diag_scan8x8_x[64]
void ff_hevc_set_qPy(HEVCContext *s, int xC, int yC, int xBase, int yBase, int log2_cb_size)
int offset_val[3][5]
SaoOffsetVal.
int ff_hevc_cu_qp_delta_sign_flag(HEVCContext *s)
int max_bytes_per_pic_denom
int overscan_appropriate_flag
AVBufferRef * pps_list[MAX_PPS_COUNT]
const uint8_t ff_hevc_diag_scan4x4_x[16]
static void flush(AVCodecContext *avctx)
int ff_hevc_output_frame(HEVCContext *s, AVFrame *frame, int flush)
Find next frame in output order and put a reference to it in frame.
uint8_t constrained_intra_pred_flag
int sps_id
seq_parameter_set_id
uint8_t pic_slice_level_chroma_qp_offsets_present_flag
int colour_description_present_flag
static const int8_t mv[256][2]
uint8_t sub_layer_level_present_flag[MAX_SUB_LAYERS]
enum AVPixelFormat pix_fmt
int ff_hevc_merge_idx_decode(HEVCContext *s)
uint8_t transform_skip_enabled_flag
uint8_t uniform_spacing_flag
int * ctb_addr_rs_to_ts
CtbAddrRSToTS.
int ff_hevc_merge_flag_decode(HEVCContext *s)
unsigned int log2_min_pu_size
main external API structure.
int log2_max_mv_length_horizontal
enum PredMode pred_mode
PredMode.
int num_extra_slice_header_bits
int16_t y
vertical component of motion vector
uint8_t loop_filter_across_tiles_enabled_flag
int general_profile_compatibility_flag[32]
uint8_t pps_extension_flag
uint8_t num_long_term_ref_pics_sps
uint8_t pps_extension_data_flag
uint32_t vui_num_units_in_tick
uint8_t deblocking_filter_control_present_flag
uint8_t * checksum_buf
used on BE to byteswap the lines for checksumming
uint8_t sps_temporal_mvp_enabled_flag
int chroma_sample_loc_type_bottom_field
Describe the class of an AVClass context structure.
int ff_hevc_cbf_luma_decode(HEVCContext *s, int trafo_depth)
int num_tile_rows
num_tile_rows_minus1 + 1
rational number numerator/denominator
int enable_parallel_tiles
void ff_hevc_luma_mv_merge_mode(HEVCContext *s, int x0, int y0, int nPbW, int nPbH, int log2_cb_size, int part_idx, int merge_idx, MvField *mv)
unsigned int log2_min_tb_size
#define MAX_SUB_LAYERS
7.4.2.1
enum PartMode part_mode
PartMode.
uint16_t lt_ref_pic_poc_lsb_sps[32]
enum NALUnitType nal_unit_type
void ff_hevc_cabac_init(HEVCContext *s, int ctb_addr_ts)
int ff_hevc_frame_rps(HEVCContext *s)
Construct the reference picture sets for the current frame.
uint8_t scaling_list_enable_flag
int tc_offset
tc_offset_div2 * 2
uint8_t transfer_characteristic
uint8_t flags
A combination of HEVC_FRAME_FLAG_*.
HEVCLocalContext * HEVClc
int default_display_window_flag
int ff_hevc_cu_qp_delta_abs(HEVCContext *s)
unsigned int log2_diff_max_min_coding_block_size
unsigned int log2_max_pcm_cb_size
uint8_t intra_pred_mode_c
int general_profile_space
int eos
current packet contains an EOS/EOB NAL
int sub_layer_profile_space[MAX_SUB_LAYERS]
int neutra_chroma_indication_flag
int * tile_pos_rs
TilePosRS.
int skipped_bytes_pos_size
A reference to a data buffer.
void ff_hevc_hls_filters(HEVCContext *s, int x_ctb, int y_ctb, int ctb_size)
void ff_hevc_save_states(HEVCContext *s, int ctb_addr_ts)
int max_transform_hierarchy_depth_intra
coded frame dimension in various units
#define MAX_TRANSFORM_DEPTH
void ff_hevc_pps_free(HEVCPPS **ppps)
common internal api header.
uint8_t slice_or_tiles_up_boundary
uint8_t weighted_pred_flag
int32_t * tab_slice_address
uint8_t * filter_slice_edges
uint8_t slice_header_extension_present_flag
int ff_hevc_sao_merge_flag_decode(HEVCContext *s)
int nal_length_size
Number of bytes used for nal length (1, 2 or 4)
AVBufferPool * tab_mvf_pool
Core video DSP helper functions.
int video_full_range_flag
int ff_hevc_decode_nal_sps(HEVCContext *s)
int vps_max_sub_layers
vps_max_temporal_layers_minus1 + 1
uint8_t sps_strong_intra_smoothing_enable_flag
int ff_hevc_mpm_idx_decode(HEVCContext *s)
Decoded Picture Buffer (DPB).
int ff_hevc_decode_nal_pps(HEVCContext *s)
int ff_hevc_decode_nal_vps(HEVCContext *s)
int ff_hevc_set_new_ref(HEVCContext *s, AVFrame **frame, int poc)
void ff_hevc_set_neighbour_available(HEVCContext *s, int x0, int y0, int nPbW, int nPbH)
const uint8_t ff_hevc_qpel_extra[4]
int ff_hevc_cbf_cb_cr_decode(HEVCContext *s, int trafo_depth)
uint8_t slice_or_tiles_left_boundary
uint8_t long_term_ref_pics_present_flag
int vui_hrd_parameters_present_flag
int diff_cu_qp_delta_depth
int ff_hevc_sao_offset_abs_decode(HEVCContext *s)
int video_signal_type_present_flag
uint8_t deblocking_filter_override_enabled_flag
int beta_offset
beta_offset_div2 * 2
int * min_tb_addr_zs
MinTbAddrZS.
int sub_layer_level_idc[MAX_SUB_LAYERS]
int vps_num_layer_sets
vps_num_layer_sets_minus1 + 1
int tiles_fixed_structure_flag
uint8_t separate_colour_plane_flag
output (i.e. cropped) values
int ff_hevc_skip_flag_decode(HEVCContext *s, int x0, int y0, int x_cb, int y_cb)
void ff_hevc_hls_filter(HEVCContext *s, int x, int y)
Context Adaptive Binary Arithmetic Coder.
uint8_t dependent_slice_segments_enabled_flag
int offset_sign[3][4]
sao_offset_sign
int ff_hevc_pcm_flag_decode(HEVCContext *s)