28#ifndef AVCODEC_H264DEC_H
29#define AVCODEC_H264DEC_H
47#define H264_MAX_PICTURE_COUNT 36
51#define ALLOW_INTERLACE
62#define MB_MBAFF(h) (h)->mb_mbaff
63#define MB_FIELD(sl) (sl)->mb_field_decoding_flag
64#define FRAME_MBAFF(h) (h)->mb_aff_frame
65#define FIELD_PICTURE(h) ((h)->picture_structure != PICT_FRAME)
73#define FRAME_MBAFF(h) 0
74#define FIELD_PICTURE(h) 0
76#define IS_INTERLACED(mb_type) 0
82#define FIELD_OR_MBAFF_PICTURE(h) (FRAME_MBAFF(h) || FIELD_PICTURE(h))
85#define CABAC(h) (h)->ps.pps->cabac
88#define CHROMA(h) ((h)->ps.sps->chroma_format_idc)
89#define CHROMA422(h) ((h)->ps.sps->chroma_format_idc == 2)
90#define CHROMA444(h) ((h)->ps.sps->chroma_format_idc == 3)
92#define IS_REF0(a) ((a) & MB_TYPE_REF0)
93#define IS_8x8DCT(a) ((a) & MB_TYPE_8x8DCT)
94#define IS_SUB_8X8(a) ((a) & MB_TYPE_16x16)
95#define IS_SUB_8X4(a) ((a) & MB_TYPE_16x8)
96#define IS_SUB_4X8(a) ((a) & MB_TYPE_8x16)
97#define IS_SUB_4X4(a) ((a) & MB_TYPE_8x8)
98#define IS_DIR(a, part, list) ((a) & (MB_TYPE_P0L0 << ((part) + 2 * (list))))
101#define USES_LIST(a, list) ((a) & ((MB_TYPE_P0L0 | MB_TYPE_P1L0) << (2 * (list))))
149#define DELAYED_PIC_REF (1 << 2)
395#define LIST_NOT_USED -1
522#define FRAME_RECOVERED_IDR (1 << 0)
527#define FRAME_RECOVERED_SEI (1 << 1)
531#define FRAME_RECOVERED_HEURISTIC (1 << 2)
630 uint8_t *img_y, uint8_t *img_cb, uint8_t *img_cr,
631 unsigned int linesize,
unsigned int uvlinesize);
633 uint8_t *img_y, uint8_t *img_cb, uint8_t *img_cr,
634 unsigned int linesize,
unsigned int uvlinesize);
666#define LUMA_DC_BLOCK_INDEX 48
667#define CHROMA_DC_BLOCK_INDEX 49
674 return pps->chroma_qp_table[t][qscale];
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
Context Adaptive Binary Arithmetic Coder.
static int FUNC nal(CodedBitstreamContext *ctx, RWContext *rw, LCEVCRawNAL *current, int nal_unit_type)
H.264 decoder/parser shared code.
MMCOOpcode
Memory management control operation opcode.
H.264 parameter set handling.
void ff_h264_direct_ref_list_init(const H264Context *const h, H264SliceContext *sl)
int ff_h264_decode_ref_pic_list_reordering(H264SliceContext *sl, void *logctx)
int ff_h264_decode_ref_pic_marking(H264SliceContext *sl, GetBitContext *gb, const H2645NAL *nal, void *logctx)
void ff_h264_hl_decode_mb(const H264Context *h, H264SliceContext *sl)
int ff_h264_update_thread_context(AVCodecContext *dst, const AVCodecContext *src)
void ff_h264_set_erpic(ERPicture *dst, const H264Picture *src)
int ff_h264_alloc_tables(H264Context *h)
Allocate tables.
int ff_h264_decode_mb_cavlc(const H264Context *h, H264SliceContext *sl)
Decode a macroblock.
#define H264_MAX_PICTURE_COUNT
int ff_h264_execute_decode_slices(H264Context *h)
Call decode_slice() for each context.
void ff_h264_remove_all_refs(H264Context *h)
void ff_h264_free_tables(H264Context *h)
int ff_h264_queue_decode_slice(H264Context *h, const H2645NAL *nal)
Submit a slice for decoding.
void ff_h264_draw_horiz_band(const H264Context *h, H264SliceContext *sl, int y, int height)
static av_always_inline int get_chroma_qp(const PPS *pps, int t, int qscale)
Get the chroma qp.
void ff_h264_unref_picture(H264Picture *pic)
void ff_h264_filter_mb(const H264Context *h, H264SliceContext *sl, int mb_x, int mb_y, uint8_t *img_y, uint8_t *img_cb, uint8_t *img_cr, unsigned int linesize, unsigned int uvlinesize)
void ff_h264_direct_dist_scale_factor(const H264Context *const h, H264SliceContext *sl)
int ff_h264_execute_ref_pic_marking(H264Context *h)
Execute the reference picture marking (memory management control operations).
int ff_h264_update_thread_context_for_user(AVCodecContext *dst, const AVCodecContext *src)
void ff_h264_decode_init_vlc(void)
void ff_h264_slice_context_init(H264Context *h, H264SliceContext *sl)
Init slice context.
int ff_h264_ref_picture(H264Picture *dst, const H264Picture *src)
int ff_h264_decode_mb_cabac(const H264Context *h, H264SliceContext *sl)
Decode a CABAC coded macroblock.
int ff_h264_get_slice_type(const H264SliceContext *sl)
Reconstruct bitstream slice_type.
int ff_h264_build_ref_list(H264Context *h, H264SliceContext *sl)
void ff_h264_pred_direct_motion(const H264Context *const h, H264SliceContext *sl, int *mb_type)
#define MAX_SLICES
The maximum number of slices supported by the decoder.
int ff_h264_field_end(H264Context *h, H264SliceContext *sl, int in_setup)
void ff_h264_init_cabac_states(const H264Context *h, H264SliceContext *sl)
void ff_h264_flush_change(H264Context *h)
void ff_h264_filter_mb_fast(const H264Context *h, H264SliceContext *sl, int mb_x, int mb_y, uint8_t *img_y, uint8_t *img_cb, uint8_t *img_cr, unsigned int linesize, unsigned int uvlinesize)
int ff_h264_replace_picture(H264Picture *dst, const H264Picture *src)
H.264 / AVC / MPEG-4 prediction functions.
const uint16_t ff_h264_mb_sizes[4]
#define DECLARE_ALIGNED(n, t, v)
Declare a variable that is aligned in memory.
Describe the class of an AVClass context structure.
main external API structure.
This structure describes decoded (raw) audio or video data.
AVRefStructPool is an API for a thread-safe pool of objects managed via the RefStruct API.
struct AVRefStructPool * decode_error_flags_pool
int non_gray
Did we encounter a intra frame after a gray gap frame.
H264ChromaContext h264chroma
int short_ref_count
number of actual short term references
uint8_t field_scan_q0[16]
int poc_offset
PicOrderCnt_offset from SMPTE RDD-2006.
H264Picture * long_ref[32]
uint8_t * list_counts
Array of list_count per MB specifying the slice type.
uint8_t zigzag_scan8x8_cavlc_q0[64]
MMCO mmco[H264_MAX_MMCO_COUNT]
memory management control operations buffer.
int pixel_shift
0 for 8-bit H.264, 1 for high-bit-depth H.264
H264Picture last_pic_for_ec
H264Picture * next_output_pic
uint8_t field_scan8x8[64]
H264Picture * cur_pic_ptr
uint8_t(*[2] mvd_table)[2]
int ref2frm[MAX_SLICES][2][64]
reference to frame number lists, used in the loop filter, the first 2 are for -2,-1
uint8_t zigzag_scan8x8_q0[64]
uint16_t * slice_table
slice_table_base + 2*mb_stride + 1
int cur_chroma_format_idc
int8_t * intra4x4_pred_mode
uint8_t * chroma_pred_mode_table
uint8_t field_scan8x8_cavlc[64]
uint16_t * slice_table_base
int frame_recovered
Initial frame has been completely recovered.
int long_ref_count
number of actual long term references
uint8_t(* non_zero_count)[48]
H264Picture DPB[H264_MAX_PICTURE_COUNT]
struct AVRefStructPool * motion_val_pool
int recovery_frame
recovery_frame is the frame_num at which the next frame should be fully constructed.
int has_slice
slice NAL is found in the packet, set by decode_nal_units, its state does not need to be preserved ou...
int bit_depth_luma
luma bit depth from sps to detect changes
int current_slice
current slice number, used to initialize slice_num of each thread/context
struct AVRefStructPool * mb_type_pool
int prev_interlaced_frame
Complement sei_pic_struct SEI_PIC_STRUCT_TOP_BOTTOM and SEI_PIC_STRUCT_BOTTOM_TOP indicate interlaced...
int chroma_format_idc
chroma format from sps to detect changes
struct AVRefStructPool * ref_index_pool
int valid_recovery_point
Are the SEI recovery points looking valid.
H264Picture * delayed_pic[H264_MAX_DPB_FRAMES+2]
uint8_t field_scan8x8_cavlc_q0[64]
uint8_t zigzag_scan8x8_cavlc[64]
int block_offset[2 *(16 *3)]
block_offset[ 0..23] for frame macroblocks block_offset[24..47] for field macroblocks
H264Picture * short_ref[32]
int is_avc
Used to parse AVC variant of H.264.
uint8_t field_scan8x8_q0[64]
uint8_t zigzag_scan8x8[64]
struct AVRefStructPool * qscale_table_pool
int nal_length_size
Number of bytes used for nal length (1, 2 or 4)
uint8_t zigzag_scan_q0[16]
int last_pocs[H264_MAX_DPB_FRAMES]
int16_t slice_row[MAX_SLICES]
to detect when MAX_SLICES is too low
H264SliceContext * slice_ctx
Context for storing H.264 DSP functions.
int ref_count[2][2]
number of entries in ref_poc (FIXME need per slice)
atomic_int * decode_error_flags
RefStruct reference; its pointee is shared between decoding threads.
int recovered
picture at IDR or recovery point + recovery count
int16_t(*[2] motion_val)[2]
int8_t * ref_index[2]
RefStruct reference.
int sei_recovery_frame_cnt
int field_picture
whether or not picture was encoded in separate fields
int pic_id
pic_num (short -> no wrap version of pic_num, pic_num & max_pic_num; long -> long_pic_num)
int frame_num
frame_num (raw frame_num from slice header)
int long_ref
1->long term reference 0->short term reference
int ref_poc[2][2][32]
POCs of the frames/fields used as reference (FIXME need per slice)
void * hwaccel_picture_private
RefStruct reference for hardware accelerator private data.
int mmco_reset
MMCO_RESET set this 1.
int field_poc[2]
top/bottom POC
int8_t * qscale_table_base
RefStruct reference.
int16_t(*[2] motion_val_base)[2]
RefStruct reference.
int mbaff
1 -> MBAFF frame 0-> not MBAFF
uint32_t * mb_type_base
RefStruct reference.
int needs_fg
whether picture needs film grain synthesis (see f_grain)
Context for storing H.264 prediction functions.
const H264Picture * parent
ptrdiff_t mb_linesize
may be equal to s->linesize or s->linesize * 2, for mbaff
int mb_field_decoding_flag
int8_t ref_cache[2][5 *8]
int dist_scale_factor_field[2][32]
unsigned int first_mb_addr
int dist_scale_factor[32]
int bipred_scratchpad_allocated
const uint8_t * intra_pcm_ptr
int16_t mv_cache[2][5 *8][2]
Motion vector cache.
int nb_ref_modifications[2]
uint8_t * edge_emu_buffer
int deblocking_filter
disable_deblocking_filter_idc with 1 <-> 0
int top_borders_allocated[2]
uint8_t * bipred_scratchpad
unsigned int left_samples_available
int map_col_to_list0[2][16+32]
int qp_thresh
QP threshold to skip loopfilter.
uint8_t mvd_cache[2][5 *8][2]
int slice_type_nos
S free slice type (SI/SP are remapped to I/P)
unsigned int top_samples_available
uint8_t(*[2] top_borders)[(16 *3) *2]
int16_t mb[16 *48 *2]
as a DCT coefficient is int32_t in high depth, we need to reserve twice the space.
unsigned int topright_samples_available
H264Ref ref_list[2][48]
0..15: frame refs, 16..47: mbaff field refs.
int direct_spatial_mv_pred
int mb_mbaff
mb_aff_frame && mb_field_decoding_flag
uint8_t(*[2] mvd_table)[2]
const uint8_t * left_block
int16_t mb_padding[256 *2]
as mb is addressed by scantable[i] and scantable is uint8_t we can either check that i is not too lar...
int map_col_to_list0_field[2][2][16+32]
struct H264SliceContext::@124061371101161022054012115351023212223223305145 ref_modifications[2][32]
int8_t * intra4x4_pred_mode
const struct H264Context * h264
int edge_emu_buffer_allocated
uint8_t direct_cache[5 *8]
int8_t intra4x4_pred_mode_cache[5 *8]
unsigned int topleft_samples_available
int slice_alpha_c0_offset
uint8_t non_zero_count_cache[15 *8]
non zero coeff count cache.
uint8_t cabac_state[1024]
unsigned int ref_count[2]
num_ref_idx_l0/1_active_minus1 + 1
MMCO mmco[H264_MAX_MMCO_COUNT]
int16_t mb_luma_dc[3][16 *2]
int neighbor_transform_size
number of neighbors (top and/or left) that used 8x8 dct
Memory management control operation.
int long_arg
index, pic_num, or num long refs depending on opcode
int short_pic_num
pic_num without wrapping (pic_num & max_pic_num)
Core video DSP helper functions.