FFmpeg
Loading...
Searching...
No Matches
h264dec.h
Go to the documentation of this file.
1/*
2 * H.26L/H.264/AVC/JVT/14496-10/... encoder/decoder
3 * Copyright (c) 2003 Michael Niedermayer <michaelni@gmx.at>
4 *
5 * This file is part of FFmpeg.
6 *
7 * FFmpeg is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
11 *
12 * FFmpeg is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with FFmpeg; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 */
21
22/**
23 * @file
24 * H.264 / AVC / MPEG-4 part10 codec.
25 * @author Michael Niedermayer <michaelni@gmx.at>
26 */
27
28#ifndef AVCODEC_H264DEC_H
29#define AVCODEC_H264DEC_H
30
32
33#include "cabac.h"
34#include "error_resilience.h"
35#include "h264_parse.h"
36#include "h264_ps.h"
37#include "h264_sei.h"
38#include "h2645_parse.h"
39#include "h264chroma.h"
40#include "h264dsp.h"
41#include "h264pred.h"
42#include "h264qpel.h"
43#include "mpegutils.h"
44#include "threadframe.h"
45#include "videodsp.h"
46
47#define H264_MAX_PICTURE_COUNT 36
48
49/* Compiling in interlaced support reduces the speed
50 * of progressive decoding by about 2%. */
51#define ALLOW_INTERLACE
52
53#define FMO 0
54
55/**
56 * The maximum number of slices supported by the decoder.
57 * must be a power of 2
58 */
59#define MAX_SLICES 32
60
61#ifdef 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)
66#define LEFT_MBS 2
67#define LTOP 0
68#define LBOT 1
69#define LEFT(i) (i)
70#else
71#define MB_MBAFF(h) 0
72#define MB_FIELD(sl) 0
73#define FRAME_MBAFF(h) 0
74#define FIELD_PICTURE(h) 0
75#undef IS_INTERLACED
76#define IS_INTERLACED(mb_type) 0
77#define LEFT_MBS 1
78#define LTOP 0
79#define LBOT 0
80#define LEFT(i) 0
81#endif
82#define FIELD_OR_MBAFF_PICTURE(h) (FRAME_MBAFF(h) || FIELD_PICTURE(h))
83
84#ifndef CABAC
85#define CABAC(h) (h)->ps.pps->cabac
86#endif
87
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)
91
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) // note reused
95#define IS_SUB_8X4(a) ((a) & MB_TYPE_16x8) // note reused
96#define IS_SUB_4X8(a) ((a) & MB_TYPE_8x16) // note reused
97#define IS_SUB_4X4(a) ((a) & MB_TYPE_8x8) // note reused
98#define IS_DIR(a, part, list) ((a) & (MB_TYPE_P0L0 << ((part) + 2 * (list))))
99
100// does this mb use listX, note does not work if subMBs
101#define USES_LIST(a, list) ((a) & ((MB_TYPE_P0L0 | MB_TYPE_P1L0) << (2 * (list))))
102
103/**
104 * Memory management control operation.
105 */
106typedef struct MMCO {
108 int short_pic_num; ///< pic_num without wrapping (pic_num & max_pic_num)
109 int long_arg; ///< index, pic_num, or num long refs depending on opcode
110} MMCO;
111
112typedef struct H264Picture {
115
117
118 int8_t *qscale_table_base; ///< RefStruct reference
120
121 int16_t (*motion_val_base[2])[2]; ///< RefStruct reference
122 int16_t (*motion_val[2])[2];
123
124 uint32_t *mb_type_base; ///< RefStruct reference
125 uint32_t *mb_type;
126
127 /// RefStruct reference for hardware accelerator private data
129
130 int8_t *ref_index[2]; ///< RefStruct reference
131
132 int field_poc[2]; ///< top/bottom POC
133 int poc; ///< frame POC
134 int frame_num; ///< frame_num (raw frame_num from slice header)
135 int mmco_reset; /**< MMCO_RESET set this 1. Reordering code must
136 not mix pictures before and after MMCO_RESET. */
137 int pic_id; /**< pic_num (short -> no wrap version of pic_num,
138 pic_num & max_pic_num; long -> long_pic_num) */
139 int long_ref; ///< 1->long term reference 0->short term reference
140 int ref_poc[2][2][32]; ///< POCs of the frames/fields used as reference (FIXME need per slice)
141 int ref_count[2][2]; ///< number of entries in ref_poc (FIXME need per slice)
142 int mbaff; ///< 1 -> MBAFF frame 0-> not MBAFF
143 int field_picture; ///< whether or not picture was encoded in separate fields
144
145/**
146 * H264Picture.reference has this flag set,
147 * when the picture is held for delayed output.
148 */
149#define DELAYED_PIC_REF (1 << 2)
151 int recovered; ///< picture at IDR or recovery point + recovery count
154 int needs_fg; ///< whether picture needs film grain synthesis (see `f_grain`)
155
156 const PPS *pps;
157
160
161 /// RefStruct reference; its pointee is shared between decoding threads.
163
164 int gray;
166
167typedef struct H264Ref {
168 uint8_t *data[3];
169 int linesize[3];
170
172 int poc;
174
176} H264Ref;
177
178typedef struct H264SliceContext {
179 const struct H264Context *h264;
182
183 /* Data partitioning: residual comes from gb_dpb (intra) or gb_dpc (inter),
184 * chosen per macroblock. Values not pointers: this struct is memcpy'd. */
190 unsigned slice_id;
191
194 int slice_type_nos; ///< S free slice type (SI/SP are remapped to I/P)
196
198 int chroma_qp[2]; // QPc
199 int qp_thresh; ///< QP threshold to skip loopfilter
201
202 // deblock
203 int deblocking_filter; ///< disable_deblocking_filter_idc with 1 <-> 0
206
208
211
214
217
222
227
228 const uint8_t *left_block;
230
235
237 ptrdiff_t mb_linesize; ///< may be equal to s->linesize or s->linesize * 2, for mbaff
238 ptrdiff_t mb_uvlinesize;
239
240 int mb_x, mb_y;
241 int mb_xy;
244 unsigned int first_mb_addr;
245 // index of the first MB of the next slice
249
252 int mb_mbaff; ///< mb_aff_frame && mb_field_decoding_flag
253
255
256 /**
257 * number of neighbors (top and/or left) that used 8x8 dct
258 */
260
264
265 int cbp;
268
271 int map_col_to_list0[2][16 + 32];
272 int map_col_to_list0_field[2][2][16 + 32];
273
274 /**
275 * num_ref_idx_l0/1_active_minus1 + 1
276 */
277 unsigned int ref_count[2]; ///< counts frames or fields, depending on current mb mode
278 unsigned int list_count;
279 H264Ref ref_list[2][48]; /**< 0..15: frame refs, 16..47: mbaff field refs.
280 * Reordered version of default_ref_list
281 * according to picture reordering in slice header */
282 struct {
283 uint8_t op;
284 uint32_t val;
287
288 unsigned int pps_id;
289
290 const uint8_t *intra_pcm_ptr;
291
294 uint8_t (*top_borders[2])[(16 * 3) * 2];
298
299 /**
300 * non zero coeff count cache.
301 * is 64 if not available.
302 */
304
305 /**
306 * Motion vector cache.
307 */
308 DECLARE_ALIGNED(16, int16_t, mv_cache)[2][5 * 8][2];
309 DECLARE_ALIGNED(8, int8_t, ref_cache)[2][5 * 8];
310 DECLARE_ALIGNED(16, uint8_t, mvd_cache)[2][5 * 8][2];
311 uint8_t direct_cache[5 * 8];
312
313 DECLARE_ALIGNED(8, uint16_t, sub_mb_type)[4];
314
315 /// as a DCT coefficient is int32_t in high depth, we need to reserve twice the space.
316 DECLARE_ALIGNED(16, int16_t, mb)[16 * 48 * 2];
317 DECLARE_ALIGNED(16, int16_t, mb_luma_dc)[3][16 * 2];
318 /// as mb is addressed by scantable[i] and scantable is uint8_t we can either
319 /// check that i is not too large or ensure that there is some unused stuff after mb
320 int16_t mb_padding[256 * 2];
321
322 uint8_t (*mvd_table[2])[2];
323
324 /**
325 * Cabac
326 */
328 uint8_t cabac_state[1024];
330
334
339 int delta_poc[2];
343
344/**
345 * H264Context
346 */
347typedef struct H264Context {
348 const AVClass *class;
354
359
363
365
366 int pixel_shift; ///< 0 for 8-bit H.264, 1 for high-bit-depth H.264
367
368 /* coded dimensions -- 16 * mb w/h */
371
373
375 int flags;
378 /* Set when slice threading is used and at least one slice uses deblocking
379 * mode 1 (i.e. across slice boundaries). Then we disable the loop filter
380 * during normal MB decoding and execute it serially at the end.
381 */
383
384 /*
385 * Set to 1 when the current picture is IDR, 0 otherwise.
386 */
388
389 /*
390 * Set to 1 when the current picture contains only I slices, 0 otherwise.
391 */
393
398
401
402 uint8_t (*non_zero_count)[48];
403
404#define LIST_NOT_USED -1 // FIXME rename?
405
406 /**
407 * block_offset[ 0..23] for frame macroblocks
408 * block_offset[24..47] for field macroblocks
409 */
410 int block_offset[2 * (16 * 3)];
411
412 uint32_t *mb2b_xy; // FIXME are these 4 a good idea?
413 uint32_t *mb2br_xy;
414 int b_stride; // FIXME use s->b4_stride
415
416 uint16_t *slice_table; ///< slice_table_base + 2*mb_stride + 1
417
418 // interlacing specific flags
422
423 uint8_t *list_counts; ///< Array of list_count per MB specifying the slice type
424
425 /* 0x100 -> non null luma_dc, 0x80/0x40 -> non null chroma_dc (cb/cr), 0x?0 -> chroma_cbp(0, 1, 2), 0x0? luma_cbp */
426 uint16_t *cbp_table;
427
428 /* chroma_pred_mode for i4x4 or i16x16, else 0 */
430 uint8_t (*mvd_table[2])[2];
431 uint8_t *direct_table;
432
433 uint8_t scan_padding[16];
434 uint8_t zigzag_scan[16];
435 uint8_t zigzag_scan8x8[64];
437 uint8_t field_scan[16];
438 uint8_t field_scan8x8[64];
440 uint8_t zigzag_scan_q0[16];
441 uint8_t zigzag_scan8x8_q0[64];
443 uint8_t field_scan_q0[16];
444 uint8_t field_scan8x8_q0[64];
446
447 int mb_y;
451
452 // =============================================================
453 // Things below are not used in the MB or more inner code
454
457
458 int has_slice; ///< slice NAL is found in the packet, set by decode_nal_units, its state does not need to be preserved outside h264_decode_frame()
459
460 /**
461 * Used to parse AVC variant of H.264
462 */
463 int is_avc; ///< this flag is != 0 if codec is avc1
464 int nal_length_size; ///< Number of bytes used for nal length (1, 2 or 4)
465
466 int bit_depth_luma; ///< luma bit depth from sps to detect changes
467 int chroma_format_idc; ///< chroma format from sps to detect changes
468
470
472
474
482 int poc_offset; ///< PicOrderCnt_offset from SMPTE RDD-2006
483
484 /**
485 * memory management control operations buffer.
486 */
491
492 int long_ref_count; ///< number of actual long term references
493 int short_ref_count; ///< number of actual short term references
494
495 /**
496 * @name Members for slice based multithreading
497 * @{
498 */
499 /**
500 * current slice number, used to initialize slice_num of each thread/context
501 */
503
504 /** @} */
505
506 /**
507 * Complement sei_pic_struct
508 * SEI_PIC_STRUCT_TOP_BOTTOM and SEI_PIC_STRUCT_BOTTOM_TOP indicate interlaced frames.
509 * However, soft telecined frames may have these values.
510 * This is used in an attempt to flag soft telecine progressive.
511 */
513
514 /**
515 * Are the SEI recovery points looking valid.
516 */
518
519 /**
520 * recovery_frame is the frame_num at which the next frame should
521 * be fully constructed.
522 *
523 * Set to -1 when not expecting a recovery point.
524 */
526
527/**
528 * We have seen an IDR, so all the following frames in coded order are correctly
529 * decodable.
530 */
531#define FRAME_RECOVERED_IDR (1 << 0)
532/**
533 * Sufficient number of frames have been decoded since a SEI recovery point,
534 * so all the following frames in presentation order are correct.
535 */
536#define FRAME_RECOVERED_SEI (1 << 1)
537/**
538 * Recovery point detected by heuristic
539 */
540#define FRAME_RECOVERED_HEURISTIC (1 << 2)
541
542 /**
543 * Initial frame has been completely recovered.
544 *
545 * Once this is set, all following decoded as well as displayed frames will be marked as recovered
546 * If a frame is marked as recovered frame_recovered will be set once this frame is output and thus
547 * all subsequently output fraames are also marked as recovered
548 *
549 * In effect, if you want all subsequent DECODED frames marked as recovered, set frame_recovered
550 * If you want all subsequent DISPLAYED frames marked as recovered, set the frame->recovered
551 */
553
555
557
558 /* for frame threading, this is set to 1
559 * after finish_setup() has been called, so we cannot modify
560 * some context properties (which are supposed to stay constant between
561 * slices) anymore */
563
566 int16_t slice_row[MAX_SLICES]; ///< to detect when MAX_SLICES is too low
567
568 /* original AVCodecContext dimensions, used to handle container
569 * cropping */
572
575 int16_t *dc_val_base;
576
578
584 int ref2frm[MAX_SLICES][2][64]; ///< reference to frame number lists, used in the loop filter, the first 2 are for -2,-1
585
586 int non_gray; ///< Did we encounter a intra frame after a gray gap frame
590
591extern const uint16_t ff_h264_mb_sizes[4];
592
593/**
594 * Reconstruct bitstream slice_type.
595 */
597
598/**
599 * Allocate tables.
600 * needs width/height
601 */
603
607
608/**
609 * Execute the reference picture marking (memory management control operations).
610 */
612
614 const H2645NAL *nal, void *logctx);
615
617void ff_h264_decode_init_vlc(void);
618
619/**
620 * Decode a macroblock
621 * @return 0 if OK, ER_AC_ERROR / ER_DC_ERROR / ER_MV_ERROR on error
622 */
624
625/**
626 * Decode a CABAC coded macroblock
627 * @return 0 if OK, ER_AC_ERROR / ER_DC_ERROR / ER_MV_ERROR on error
628 */
630
632
636 int *mb_type);
637
638void ff_h264_filter_mb_fast(const H264Context *h, H264SliceContext *sl, int mb_x, int mb_y,
639 uint8_t *img_y, uint8_t *img_cb, uint8_t *img_cr,
640 unsigned int linesize, unsigned int uvlinesize);
641void ff_h264_filter_mb(const H264Context *h, H264SliceContext *sl, int mb_x, int mb_y,
642 uint8_t *img_y, uint8_t *img_cb, uint8_t *img_cr,
643 unsigned int linesize, unsigned int uvlinesize);
644
645/*
646 * o-o o-o
647 * / / /
648 * o-o o-o
649 * ,---'
650 * o-o o-o
651 * / / /
652 * o-o o-o
653 */
654
655/* Scan8 organization:
656 * 0 1 2 3 4 5 6 7
657 * 0 DY y y y y y
658 * 1 y Y Y Y Y
659 * 2 y Y Y Y Y
660 * 3 y Y Y Y Y
661 * 4 y Y Y Y Y
662 * 5 DU u u u u u
663 * 6 u U U U U
664 * 7 u U U U U
665 * 8 u U U U U
666 * 9 u U U U U
667 * 10 DV v v v v v
668 * 11 v V V V V
669 * 12 v V V V V
670 * 13 v V V V V
671 * 14 v V V V V
672 * DY/DU/DV are for luma/chroma DC.
673 */
674
675#define LUMA_DC_BLOCK_INDEX 48
676#define CHROMA_DC_BLOCK_INDEX 49
677
678/**
679 * Get the chroma qp.
680 */
681static av_always_inline int get_chroma_qp(const PPS *pps, int t, int qscale)
682{
683 return pps->chroma_qp_table[t][qscale];
684}
685
686static inline int ff_h264_skip_all_pixels(const AVCodecContext *avctx)
687{
688 return avctx->skip_pred >= AVDISCARD_ALL &&
689 avctx->skip_idct >= AVDISCARD_ALL &&
690 !avctx->err_recognition &&
691 !(avctx->flags2 & AV_CODEC_FLAG2_CHUNKS) &&
694 !(avctx->debug & (FF_DEBUG_QP | FF_DEBUG_MB_TYPE));
695}
696
697int ff_h264_field_end(H264Context *h, H264SliceContext *sl, int in_setup);
698
702
704
705void ff_h264_draw_horiz_band(const H264Context *h, H264SliceContext *sl, int y, int height);
706
707/**
708 * Submit a slice for decoding.
709 *
710 * Parse the slice header, starting a new field/frame if necessary. If any
711 * slices are queued for the previous field, they are decoded.
712 *
713 * @param queued set to the queued context, or NULL if the slice was discarded
714 */
716 H264SliceContext **queued);
717
718/**
719 * Attach a slice data partition B or C to the slice started by partition A.
720 */
722 const H2645NAL *nal);
723
726 const AVCodecContext *src);
728 const AVCodecContext *src);
729
731
733
735
736#endif /* AVCODEC_H264DEC_H */
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
Definition dsp.h:87
#define FF_DEBUG_QP
Definition avcodec.h:1398
#define FF_DEBUG_MB_TYPE
Definition avcodec.h:1397
Context Adaptive Binary Arithmetic Coder.
static int FUNC nal(CodedBitstreamContext *ctx, RWContext *rw, LCEVCRawNAL *current, int nal_unit_type)
uint64_t pps
Definition dovi_rpuenc.c:36
intptr_t atomic_int
Definition stdatomic.h:55
#define AV_CODEC_FLAG2_CHUNKS
Input bitstream might be truncated at a packet boundaries instead of only at frame boundaries.
Definition avcodec.h:351
#define AV_CODEC_EXPORT_DATA_MVS
Export motion vectors through frame side data.
Definition avcodec.h:390
#define AV_CODEC_EXPORT_DATA_VIDEO_ENC_PARAMS
Decoding only.
Definition avcodec.h:399
@ AVDISCARD_ALL
discard all
Definition defs.h:232
@ H264_MAX_DPB_FRAMES
Definition h264.h:76
@ H264_MAX_MMCO_COUNT
Definition h264.h:92
H.264 decoder/parser shared code.
MMCOOpcode
Memory management control operation opcode.
Definition h264_parse.h:59
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)
Definition h264_refs.c:431
int ff_h264_decode_ref_pic_marking(H264SliceContext *sl, GetBitContext *gb, const H2645NAL *nal, void *logctx)
Definition h264_refs.c:832
void ff_h264_hl_decode_mb(const H264Context *h, H264SliceContext *sl)
Definition h264_mb.c:800
int ff_h264_update_thread_context(AVCodecContext *dst, const AVCodecContext *src)
Definition h264_slice.c:339
void ff_h264_set_erpic(ERPicture *dst, const H264Picture *src)
int ff_h264_alloc_tables(H264Context *h)
Allocate tables.
Definition h264dec.c:187
int ff_h264_decode_mb_cavlc(const H264Context *h, H264SliceContext *sl)
Decode a macroblock.
Definition h264_cavlc.c:682
#define H264_MAX_PICTURE_COUNT
Definition h264dec.h:47
int ff_h264_execute_decode_slices(H264Context *h)
Call decode_slice() for each context.
void ff_h264_remove_all_refs(H264Context *h)
Definition h264_refs.c:568
void ff_h264_free_tables(H264Context *h)
Definition h264dec.c:142
int ff_h264_queue_decode_slice(H264Context *h, const H2645NAL *nal, H264SliceContext **queued)
Submit a slice for decoding.
void ff_h264_draw_horiz_band(const H264Context *h, H264SliceContext *sl, int y, int height)
Definition h264dec.c:104
static int ff_h264_skip_all_pixels(const AVCodecContext *avctx)
Definition h264dec.h:686
static av_always_inline int get_chroma_qp(const PPS *pps, int t, int qscale)
Get the chroma qp.
Definition h264dec.h:681
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)
Definition h264_direct.c:61
int ff_h264_execute_ref_pic_marking(H264Context *h)
Execute the reference picture marking (memory management control operations).
Definition h264_refs.c:610
#define LEFT_MBS
Definition h264dec.h:66
int ff_h264_update_thread_context_for_user(AVCodecContext *dst, const AVCodecContext *src)
Definition h264_slice.c:472
void ff_h264_decode_init_vlc(void)
Definition h264_cavlc.c:315
void ff_h264_slice_context_init(H264Context *h, H264SliceContext *sl)
Init slice context.
Definition h264dec.c:264
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_attach_slice_partition(const H264Context *h, H264SliceContext *sl, const H2645NAL *nal)
Attach a slice data partition B or C to the slice started by partition A.
int ff_h264_build_ref_list(H264Context *h, H264SliceContext *sl)
Definition h264_refs.c:292
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.
Definition h264dec.h:59
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)
Definition h264dec.c:451
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 DSP functions.
H.264 / AVC / MPEG-4 prediction functions.
const uint16_t ff_h264_mb_sizes[4]
Definition h264dec.c:60
#define av_always_inline
Definition attributes.h:72
#define DECLARE_ALIGNED(n, t, v)
Declare a variable that is aligned in memory.
Describe the class of an AVClass context structure.
Definition log.h:76
main external API structure.
Definition avcodec.h:443
int flags2
AV_CODEC_FLAG2_*.
Definition avcodec.h:507
int debug
debug
Definition avcodec.h:1393
enum AVDiscard skip_pred
Skip prediction (intra prediction and motion compensation) for selected frames.
Definition avcodec.h:1948
int export_side_data
Bit set of AV_CODEC_EXPORT_DATA_* flags, which affects the kind of metadata exported in frame,...
Definition avcodec.h:1780
enum AVDiscard skip_idct
Skip IDCT/dequantization for selected frames.
Definition avcodec.h:1661
int err_recognition
Error recognition; may misdetect some more or less valid parts as errors.
Definition avcodec.h:1417
This structure describes decoded (raw) audio or video data.
Definition frame.h:472
AVRefStructPool is an API for a thread-safe pool of objects managed via the RefStruct API.
Definition refstruct.c:183
H264Context.
Definition h264dec.h:347
int width_from_caller
Definition h264dec.h:570
struct AVRefStructPool * decode_error_flags_pool
Definition h264dec.h:583
int missing_fields
Definition h264dec.h:556
int nb_slice_ctx
Definition h264dec.h:361
int mmco_reset
Definition h264dec.h:489
int non_gray
Did we encounter a intra frame after a gray gap frame.
Definition h264dec.h:586
H264ChromaContext h264chroma
Definition h264dec.h:352
int short_ref_count
number of actual short term references
Definition h264dec.h:493
int crop_bottom
Definition h264dec.h:397
uint8_t field_scan_q0[16]
Definition h264dec.h:443
H264Ref default_ref[2]
Definition h264dec.h:475
uint8_t scan_padding[16]
Definition h264dec.h:433
H264QpelContext h264qpel
Definition h264dec.h:353
int poc_offset
PicOrderCnt_offset from SMPTE RDD-2006.
Definition h264dec.h:482
H264Picture * long_ref[32]
Definition h264dec.h:477
uint16_t * cbp_table
Definition h264dec.h:426
uint8_t * list_counts
Array of list_count per MB specifying the slice type.
Definition h264dec.h:423
uint8_t zigzag_scan8x8_cavlc_q0[64]
Definition h264dec.h:442
int mb_stride
Definition h264dec.h:449
int crop_top
Definition h264dec.h:396
MMCO mmco[H264_MAX_MMCO_COUNT]
memory management control operations buffer.
Definition h264dec.h:487
int workaround_bugs
Definition h264dec.h:376
int pixel_shift
0 for 8-bit H.264, 1 for high-bit-depth H.264
Definition h264dec.h:366
int nb_mmco
Definition h264dec.h:488
H264Picture last_pic_for_ec
Definition h264dec.h:358
int16_t * dc_val_base
Definition h264dec.h:575
H264Picture * next_output_pic
Definition h264dec.h:480
uint8_t field_scan8x8[64]
Definition h264dec.h:438
H264Picture * cur_pic_ptr
Definition h264dec.h:356
uint8_t(*[2] mvd_table)[2]
Definition h264dec.h:430
int ref2frm[MAX_SLICES][2][64]
reference to frame number lists, used in the loop filter, the first 2 are for -2,-1
Definition h264dec.h:584
int context_initialized
Definition h264dec.h:374
uint8_t field_scan[16]
Definition h264dec.h:437
H264POCContext poc
Definition h264dec.h:473
uint8_t zigzag_scan8x8_q0[64]
Definition h264dec.h:441
uint16_t * slice_table
slice_table_base + 2*mb_stride + 1
Definition h264dec.h:416
int mb_width
Definition h264dec.h:448
AVCodecContext * avctx
Definition h264dec.h:349
int skip_gray
Definition h264dec.h:588
int chroma_x_shift
Definition h264dec.h:370
int cur_chroma_format_idc
Definition h264dec.h:564
int height_from_caller
Definition h264dec.h:571
int8_t * intra4x4_pred_mode
Definition h264dec.h:399
int nb_slice_ctx_queued
Definition h264dec.h:362
uint8_t * chroma_pred_mode_table
Definition h264dec.h:429
VideoDSPContext vdsp
Definition h264dec.h:350
uint8_t field_scan8x8_cavlc[64]
Definition h264dec.h:439
uint16_t * slice_table_base
Definition h264dec.h:471
int frame_recovered
Initial frame has been completely recovered.
Definition h264dec.h:552
int long_ref_count
number of actual long term references
Definition h264dec.h:492
int chroma_y_shift
Definition h264dec.h:370
uint8_t(* non_zero_count)[48]
Definition h264dec.h:402
H264Picture DPB[H264_MAX_PICTURE_COUNT]
Definition h264dec.h:355
int nal_ref_idc
Definition h264dec.h:455
struct AVRefStructPool * motion_val_pool
Definition h264dec.h:581
int recovery_frame
recovery_frame is the frame_num at which the next frame should be fully constructed.
Definition h264dec.h:525
int has_slice
slice NAL is found in the packet, set by decode_nal_units, its state does not need to be preserved ou...
Definition h264dec.h:458
int noref_gray
Definition h264dec.h:587
int bit_depth_luma
luma bit depth from sps to detect changes
Definition h264dec.h:466
int current_slice
current slice number, used to initialize slice_num of each thread/context
Definition h264dec.h:502
struct AVRefStructPool * mb_type_pool
Definition h264dec.h:580
int prev_interlaced_frame
Complement sei_pic_struct SEI_PIC_STRUCT_TOP_BOTTOM and SEI_PIC_STRUCT_BOTTOM_TOP indicate interlaced...
Definition h264dec.h:512
int chroma_format_idc
chroma format from sps to detect changes
Definition h264dec.h:467
int mb_aff_frame
Definition h264dec.h:419
int first_field
Definition h264dec.h:421
struct AVRefStructPool * ref_index_pool
Definition h264dec.h:582
ERContext er
Definition h264dec.h:574
int valid_recovery_point
Are the SEI recovery points looking valid.
Definition h264dec.h:517
H264ParamSets ps
Definition h264dec.h:469
uint32_t * mb2br_xy
Definition h264dec.h:413
H264Picture * delayed_pic[H264_MAX_DPB_FRAMES+2]
Definition h264dec.h:478
H264DSPContext h264dsp
Definition h264dec.h:351
H2645Packet pkt
Definition h264dec.h:364
int explicit_ref_marking
Definition h264dec.h:490
uint8_t field_scan8x8_cavlc_q0[64]
Definition h264dec.h:445
int droppable
Definition h264dec.h:372
uint8_t zigzag_scan8x8_cavlc[64]
Definition h264dec.h:436
int block_offset[2 *(16 *3)]
block_offset[ 0..23] for frame macroblocks block_offset[24..47] for field macroblocks
Definition h264dec.h:410
H264Picture * short_ref[32]
Definition h264dec.h:476
int mb_height
Definition h264dec.h:448
int is_avc
Used to parse AVC variant of H.264.
Definition h264dec.h:463
uint8_t field_scan8x8_q0[64]
Definition h264dec.h:444
int crop_right
Definition h264dec.h:395
int picture_structure
Definition h264dec.h:420
uint8_t zigzag_scan8x8[64]
Definition h264dec.h:435
int postpone_filter
Definition h264dec.h:382
int crop_left
Definition h264dec.h:394
H264PredContext hpc
Definition h264dec.h:400
int has_recovery_point
Definition h264dec.h:554
int x264_build
Definition h264dec.h:377
int enable_er
Definition h264dec.h:573
int picture_idr
Definition h264dec.h:387
int picture_intra_only
Definition h264dec.h:392
int nal_unit_type
Definition h264dec.h:456
int cur_bit_depth_luma
Definition h264dec.h:565
uint32_t * mb2b_xy
Definition h264dec.h:412
struct AVRefStructPool * qscale_table_pool
Definition h264dec.h:579
int nal_length_size
Number of bytes used for nal length (1, 2 or 4)
Definition h264dec.h:464
int setup_finished
Definition h264dec.h:562
uint8_t zigzag_scan_q0[16]
Definition h264dec.h:440
H264Picture cur_pic
Definition h264dec.h:357
uint8_t zigzag_scan[16]
Definition h264dec.h:434
int b_stride
Definition h264dec.h:414
int last_pocs[H264_MAX_DPB_FRAMES]
Definition h264dec.h:479
int16_t slice_row[MAX_SLICES]
to detect when MAX_SLICES is too low
Definition h264dec.h:566
H264SEIContext sei
Definition h264dec.h:577
int next_outputed_poc
Definition h264dec.h:481
H264SliceContext * slice_ctx
Definition h264dec.h:360
uint8_t * direct_table
Definition h264dec.h:431
Context for storing H.264 DSP functions.
Definition h264dsp.h:42
int ref_count[2][2]
number of entries in ref_poc (FIXME need per slice)
Definition h264dec.h:141
const PPS * pps
Definition h264dec.h:156
atomic_int * decode_error_flags
RefStruct reference; its pointee is shared between decoding threads.
Definition h264dec.h:162
uint32_t * mb_type
Definition h264dec.h:125
int mb_stride
Definition h264dec.h:159
int recovered
picture at IDR or recovery point + recovery count
Definition h264dec.h:151
int invalid_gap
Definition h264dec.h:152
int16_t(*[2] motion_val)[2]
Definition h264dec.h:122
int8_t * ref_index[2]
RefStruct reference.
Definition h264dec.h:130
int reference
Definition h264dec.h:150
int8_t * qscale_table
Definition h264dec.h:119
int sei_recovery_frame_cnt
Definition h264dec.h:153
int field_picture
whether or not picture was encoded in separate fields
Definition h264dec.h:143
int pic_id
pic_num (short -> no wrap version of pic_num, pic_num & max_pic_num; long -> long_pic_num)
Definition h264dec.h:137
int frame_num
frame_num (raw frame_num from slice header)
Definition h264dec.h:134
int long_ref
1->long term reference 0->short term reference
Definition h264dec.h:139
int ref_poc[2][2][32]
POCs of the frames/fields used as reference (FIXME need per slice)
Definition h264dec.h:140
void * hwaccel_picture_private
RefStruct reference for hardware accelerator private data.
Definition h264dec.h:128
AVFrame * f
Definition h264dec.h:113
int mmco_reset
MMCO_RESET set this 1.
Definition h264dec.h:135
int field_poc[2]
top/bottom POC
Definition h264dec.h:132
int poc
frame POC
Definition h264dec.h:133
int8_t * qscale_table_base
RefStruct reference.
Definition h264dec.h:118
int16_t(*[2] motion_val_base)[2]
RefStruct reference.
Definition h264dec.h:121
int mbaff
1 -> MBAFF frame 0-> not MBAFF
Definition h264dec.h:142
uint32_t * mb_type_base
RefStruct reference.
Definition h264dec.h:124
int mb_height
Definition h264dec.h:158
AVFrame * f_grain
Definition h264dec.h:116
int mb_width
Definition h264dec.h:158
ThreadFrame tf
Definition h264dec.h:114
int needs_fg
whether picture needs film grain synthesis (see f_grain)
Definition h264dec.h:154
Context for storing H.264 prediction functions.
Definition h264pred.h:94
int poc
Definition h264dec.h:172
const H264Picture * parent
Definition h264dec.h:175
int linesize[3]
Definition h264dec.h:169
uint8_t * data[3]
Definition h264dec.h:168
int reference
Definition h264dec.h:171
int pic_id
Definition h264dec.h:173
ptrdiff_t mb_linesize
may be equal to s->linesize or s->linesize * 2, for mbaff
Definition h264dec.h:237
ptrdiff_t uvlinesize
Definition h264dec.h:236
int mb_field_decoding_flag
Definition h264dec.h:251
unsigned int list_count
Definition h264dec.h:278
int8_t ref_cache[2][5 *8]
Definition h264dec.h:309
int dist_scale_factor_field[2][32]
Definition h264dec.h:270
H264PredWeightTable pwt
Definition h264dec.h:207
int left_type[LEFT_MBS]
Definition h264dec.h:226
unsigned int pps_id
Definition h264dec.h:288
int data_partitioning
Definition h264dec.h:187
unsigned int first_mb_addr
Definition h264dec.h:244
uint16_t sub_mb_type[4]
Definition h264dec.h:313
int dist_scale_factor[32]
Definition h264dec.h:269
int bipred_scratchpad_allocated
Definition h264dec.h:295
ptrdiff_t linesize
Definition h264dec.h:236
ptrdiff_t mb_uvlinesize
Definition h264dec.h:238
const uint8_t * intra_pcm_ptr
Definition h264dec.h:290
int16_t mv_cache[2][5 *8][2]
Motion vector cache.
Definition h264dec.h:308
unsigned slice_id
Definition h264dec.h:190
int left_mb_xy[LEFT_MBS]
Definition h264dec.h:221
int nb_ref_modifications[2]
Definition h264dec.h:286
GetBitContext gb_dpb
Definition h264dec.h:185
CABACContext cabac
Cabac.
Definition h264dec.h:327
uint8_t * edge_emu_buffer
Definition h264dec.h:293
uint32_t val
Definition h264dec.h:284
int redundant_pic_count
Definition h264dec.h:254
int delta_poc[2]
Definition h264dec.h:339
int deblocking_filter
disable_deblocking_filter_idc with 1 <-> 0
Definition h264dec.h:203
int top_borders_allocated[2]
Definition h264dec.h:297
uint8_t * bipred_scratchpad
Definition h264dec.h:292
unsigned int left_samples_available
Definition h264dec.h:234
int map_col_to_list0[2][16+32]
Definition h264dec.h:271
int qp_thresh
QP threshold to skip loopfilter.
Definition h264dec.h:199
uint8_t mvd_cache[2][5 *8][2]
Definition h264dec.h:310
int slice_type_nos
S free slice type (SI/SP are remapped to I/P)
Definition h264dec.h:194
unsigned int top_samples_available
Definition h264dec.h:232
uint8_t(*[2] top_borders)[(16 *3) *2]
Definition h264dec.h:294
int16_t mb[16 *48 *2]
as a DCT coefficient is int32_t in high depth, we need to reserve twice the space.
Definition h264dec.h:316
unsigned int topright_samples_available
Definition h264dec.h:233
H264Ref ref_list[2][48]
0..15: frame refs, 16..47: mbaff field refs.
Definition h264dec.h:279
int direct_spatial_mv_pred
Definition h264dec.h:261
int mb_mbaff
mb_aff_frame && mb_field_decoding_flag
Definition h264dec.h:252
uint8_t(*[2] mvd_table)[2]
Definition h264dec.h:322
const uint8_t * left_block
Definition h264dec.h:228
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...
Definition h264dec.h:320
GetBitContext gb
Definition h264dec.h:180
int map_col_to_list0_field[2][2][16+32]
Definition h264dec.h:272
struct H264SliceContext::@124061371101161022054012115351023212223223305145 ref_modifications[2][32]
int chroma_qp[2]
Definition h264dec.h:198
int8_t * intra4x4_pred_mode
Definition h264dec.h:216
ERContext * er
Definition h264dec.h:181
const struct H264Context * h264
Definition h264dec.h:179
int edge_emu_buffer_allocated
Definition h264dec.h:296
int explicit_ref_marking
Definition h264dec.h:333
uint8_t direct_cache[5 *8]
Definition h264dec.h:311
int8_t intra4x4_pred_mode_cache[5 *8]
Definition h264dec.h:215
unsigned int topleft_samples_available
Definition h264dec.h:231
int slice_alpha_c0_offset
Definition h264dec.h:204
uint8_t non_zero_count_cache[15 *8]
non zero coeff count cache.
Definition h264dec.h:303
uint8_t cabac_state[1024]
Definition h264dec.h:328
int slice_beta_offset
Definition h264dec.h:205
unsigned int ref_count[2]
num_ref_idx_l0/1_active_minus1 + 1
Definition h264dec.h:277
MMCO mmco[H264_MAX_MMCO_COUNT]
Definition h264dec.h:331
int picture_structure
Definition h264dec.h:250
int topleft_partition
Definition h264dec.h:229
int16_t mb_luma_dc[3][16 *2]
Definition h264dec.h:317
int intra16x16_pred_mode
Definition h264dec.h:213
int neighbor_transform_size
number of neighbors (top and/or left) that used 8x8 dct
Definition h264dec.h:259
GetBitContext gb_dpc
Definition h264dec.h:186
Memory management control operation.
Definition h264dec.h:106
MMCOOpcode opcode
Definition h264dec.h:107
int long_arg
index, pic_num, or num long refs depending on opcode
Definition h264dec.h:109
int short_pic_num
pic_num without wrapping (pic_num & max_pic_num)
Definition h264dec.h:108
Picture parameter set.
Definition h264_ps.h:110
#define src
Definition vp8dsp.c:248
#define height
Definition dsp.h:89
Core video DSP helper functions.