FFmpeg
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 
31 #include "libavutil/buffer.h"
32 #include "libavutil/intreadwrite.h"
33 #include "libavutil/mem_internal.h"
34 #include "libavutil/thread.h"
35 
36 #include "cabac.h"
37 #include "error_resilience.h"
38 #include "h264_parse.h"
39 #include "h264_ps.h"
40 #include "h264_sei.h"
41 #include "h2645_parse.h"
42 #include "h264chroma.h"
43 #include "h264dsp.h"
44 #include "h264pred.h"
45 #include "h264qpel.h"
46 #include "h274.h"
47 #include "internal.h"
48 #include "mpegutils.h"
49 #include "parser.h"
50 #include "qpeldsp.h"
51 #include "rectangle.h"
52 #include "videodsp.h"
53 
54 #define H264_MAX_PICTURE_COUNT 36
55 
56 #define MAX_MMCO_COUNT 66
57 
58 #define MAX_DELAYED_PIC_COUNT 16
59 
60 /* Compiling in interlaced support reduces the speed
61  * of progressive decoding by about 2%. */
62 #define ALLOW_INTERLACE
63 
64 #define FMO 0
65 
66 /**
67  * The maximum number of slices supported by the decoder.
68  * must be a power of 2
69  */
70 #define MAX_SLICES 32
71 
72 #ifdef ALLOW_INTERLACE
73 #define MB_MBAFF(h) (h)->mb_mbaff
74 #define MB_FIELD(sl) (sl)->mb_field_decoding_flag
75 #define FRAME_MBAFF(h) (h)->mb_aff_frame
76 #define FIELD_PICTURE(h) ((h)->picture_structure != PICT_FRAME)
77 #define LEFT_MBS 2
78 #define LTOP 0
79 #define LBOT 1
80 #define LEFT(i) (i)
81 #else
82 #define MB_MBAFF(h) 0
83 #define MB_FIELD(sl) 0
84 #define FRAME_MBAFF(h) 0
85 #define FIELD_PICTURE(h) 0
86 #undef IS_INTERLACED
87 #define IS_INTERLACED(mb_type) 0
88 #define LEFT_MBS 1
89 #define LTOP 0
90 #define LBOT 0
91 #define LEFT(i) 0
92 #endif
93 #define FIELD_OR_MBAFF_PICTURE(h) (FRAME_MBAFF(h) || FIELD_PICTURE(h))
94 
95 #ifndef CABAC
96 #define CABAC(h) (h)->ps.pps->cabac
97 #endif
98 
99 #define CHROMA(h) ((h)->ps.sps->chroma_format_idc)
100 #define CHROMA422(h) ((h)->ps.sps->chroma_format_idc == 2)
101 #define CHROMA444(h) ((h)->ps.sps->chroma_format_idc == 3)
102 
103 #define MB_TYPE_REF0 MB_TYPE_ACPRED // dirty but it fits in 16 bit
104 #define MB_TYPE_8x8DCT 0x01000000
105 #define IS_REF0(a) ((a) & MB_TYPE_REF0)
106 #define IS_8x8DCT(a) ((a) & MB_TYPE_8x8DCT)
107 
108 /**
109  * Memory management control operation opcode.
110  */
111 typedef enum MMCOOpcode {
112  MMCO_END = 0,
119 } MMCOOpcode;
120 
121 /**
122  * Memory management control operation.
123  */
124 typedef struct MMCO {
126  int short_pic_num; ///< pic_num without wrapping (pic_num & max_pic_num)
127  int long_arg; ///< index, pic_num, or num long refs depending on opcode
128 } MMCO;
129 
130 typedef struct H264Picture {
133 
136 
138  int8_t *qscale_table;
139 
141  int16_t (*motion_val[2])[2];
142 
144  uint32_t *mb_type;
145 
147  void *hwaccel_picture_private; ///< hardware accelerator private data
148 
150  int8_t *ref_index[2];
151 
152  int field_poc[2]; ///< top/bottom POC
153  int poc; ///< frame POC
154  int frame_num; ///< frame_num (raw frame_num from slice header)
155  int mmco_reset; /**< MMCO_RESET set this 1. Reordering code must
156  not mix pictures before and after MMCO_RESET. */
157  int pic_id; /**< pic_num (short -> no wrap version of pic_num,
158  pic_num & max_pic_num; long -> long_pic_num) */
159  int long_ref; ///< 1->long term reference 0->short term reference
160  int ref_poc[2][2][32]; ///< POCs of the frames/fields used as reference (FIXME need per slice)
161  int ref_count[2][2]; ///< number of entries in ref_poc (FIXME need per slice)
162  int mbaff; ///< 1 -> MBAFF frame 0-> not MBAFF
163  int field_picture; ///< whether or not picture was encoded in separate fields
164 
166  int recovered; ///< picture at IDR or recovery point + recovery count
169  int needs_fg; ///< whether picture needs film grain synthesis (see `f_grain`)
170 
172  const PPS *pps;
173 
176 } H264Picture;
177 
178 typedef struct H264Ref {
179  uint8_t *data[3];
180  int linesize[3];
181 
183  int poc;
184  int pic_id;
185 
187 } H264Ref;
188 
189 typedef struct H264SliceContext {
190  struct H264Context *h264;
193 
196  int slice_type_nos; ///< S free slice type (SI/SP are remapped to I/P)
198 
199  int qscale;
200  int chroma_qp[2]; // QPc
201  int qp_thresh; ///< QP threshold to skip loopfilter
203 
204  // deblock
205  int deblocking_filter; ///< disable_deblocking_filter_idc with 1 <-> 0
208 
210 
213 
216 
219 
224 
226  int top_type;
229 
230  const uint8_t *left_block;
232 
234  unsigned int top_samples_available;
237 
238  ptrdiff_t linesize, uvlinesize;
239  ptrdiff_t mb_linesize; ///< may be equal to s->linesize or s->linesize * 2, for mbaff
240  ptrdiff_t mb_uvlinesize;
241 
242  int mb_x, mb_y;
243  int mb_xy;
246  unsigned int first_mb_addr;
247  // index of the first MB of the next slice
251 
254  int mb_mbaff; ///< mb_aff_frame && mb_field_decoding_flag
255 
257 
258  /**
259  * number of neighbors (top and/or left) that used 8x8 dct
260  */
262 
266 
267  int cbp;
268  int top_cbp;
269  int left_cbp;
270 
273  int map_col_to_list0[2][16 + 32];
274  int map_col_to_list0_field[2][2][16 + 32];
275 
276  /**
277  * num_ref_idx_l0/1_active_minus1 + 1
278  */
279  unsigned int ref_count[2]; ///< counts frames or fields, depending on current mb mode
280  unsigned int list_count;
281  H264Ref ref_list[2][48]; /**< 0..15: frame refs, 16..47: mbaff field refs.
282  * Reordered version of default_ref_list
283  * according to picture reordering in slice header */
284  struct {
285  uint8_t op;
286  uint32_t val;
287  } ref_modifications[2][32];
289 
290  unsigned int pps_id;
291 
292  const uint8_t *intra_pcm_ptr;
293  int16_t *dc_val_base;
294 
296  uint8_t *edge_emu_buffer;
297  uint8_t (*top_borders[2])[(16 * 3) * 2];
301 
302  /**
303  * non zero coeff count cache.
304  * is 64 if not available.
305  */
306  DECLARE_ALIGNED(8, uint8_t, non_zero_count_cache)[15 * 8];
307 
308  /**
309  * Motion vector cache.
310  */
311  DECLARE_ALIGNED(16, int16_t, mv_cache)[2][5 * 8][2];
312  DECLARE_ALIGNED(8, int8_t, ref_cache)[2][5 * 8];
313  DECLARE_ALIGNED(16, uint8_t, mvd_cache)[2][5 * 8][2];
314  uint8_t direct_cache[5 * 8];
315 
316  DECLARE_ALIGNED(8, uint16_t, sub_mb_type)[4];
317 
318  ///< as a DCT coefficient is int32_t in high depth, we need to reserve twice the space.
319  DECLARE_ALIGNED(16, int16_t, mb)[16 * 48 * 2];
320  DECLARE_ALIGNED(16, int16_t, mb_luma_dc)[3][16 * 2];
321  ///< as mb is addressed by scantable[i] and scantable is uint8_t we can either
322  ///< check that i is not too large or ensure that there is some unused stuff after mb
323  int16_t mb_padding[256 * 2];
324 
325  uint8_t (*mvd_table[2])[2];
326 
327  /**
328  * Cabac
329  */
331  uint8_t cabac_state[1024];
333 
335  int nb_mmco;
337 
340  int poc_lsb;
342  int delta_poc[2];
346 
347 /**
348  * H264Context
349  */
350 typedef struct H264Context {
351  const AVClass *class;
358 
363 
367 
369 
370  int pixel_shift; ///< 0 for 8-bit H.264, 1 for high-bit-depth H.264
371 
372  /* coded dimensions -- 16 * mb w/h */
373  int width, height;
375 
378 
380  int flags;
383  /* Set when slice threading is used and at least one slice uses deblocking
384  * mode 1 (i.e. across slice boundaries). Then we disable the loop filter
385  * during normal MB decoding and execute it serially at the end.
386  */
388 
389  /*
390  * Set to 1 when the current picture is IDR, 0 otherwise.
391  */
393 
394  /*
395  * Set to 1 when the current picture contains only I slices, 0 otherwise.
396  */
398 
401  int crop_top;
403 
406 
407  uint8_t (*non_zero_count)[48];
408 
409 #define LIST_NOT_USED -1 // FIXME rename?
410 #define PART_NOT_AVAILABLE -2
411 
412  /**
413  * block_offset[ 0..23] for frame macroblocks
414  * block_offset[24..47] for field macroblocks
415  */
416  int block_offset[2 * (16 * 3)];
417 
418  uint32_t *mb2b_xy; // FIXME are these 4 a good idea?
419  uint32_t *mb2br_xy;
420  int b_stride; // FIXME use s->b4_stride
421 
422  uint16_t *slice_table; ///< slice_table_base + 2*mb_stride + 1
423 
424  // interlacing specific flags
428 
429  uint8_t *list_counts; ///< Array of list_count per MB specifying the slice type
430 
431  /* 0x100 -> non null luma_dc, 0x80/0x40 -> non null chroma_dc (cb/cr), 0x?0 -> chroma_cbp(0, 1, 2), 0x0? luma_cbp */
432  uint16_t *cbp_table;
433 
434  /* chroma_pred_mode for i4x4 or i16x16, else 0 */
436  uint8_t (*mvd_table[2])[2];
437  uint8_t *direct_table;
438 
439  uint8_t scan_padding[16];
440  uint8_t zigzag_scan[16];
441  uint8_t zigzag_scan8x8[64];
442  uint8_t zigzag_scan8x8_cavlc[64];
443  uint8_t field_scan[16];
444  uint8_t field_scan8x8[64];
445  uint8_t field_scan8x8_cavlc[64];
446  uint8_t zigzag_scan_q0[16];
447  uint8_t zigzag_scan8x8_q0[64];
449  uint8_t field_scan_q0[16];
450  uint8_t field_scan8x8_q0[64];
452 
453  int mb_y;
456  int mb_num;
457 
458  // =============================================================
459  // Things below are not used in the MB or more inner code
460 
463 
464  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()
465 
466  /**
467  * Used to parse AVC variant of H.264
468  */
469  int is_avc; ///< this flag is != 0 if codec is avc1
470  int nal_length_size; ///< Number of bytes used for nal length (1, 2 or 4)
471 
472  int bit_depth_luma; ///< luma bit depth from sps to detect changes
473  int chroma_format_idc; ///< chroma format from sps to detect changes
474 
476 
477  uint16_t *slice_table_base;
478 
480 
488  int poc_offset; ///< PicOrderCnt_offset from SMPTE RDD-2006
489 
490  /**
491  * memory management control operations buffer.
492  */
494  int nb_mmco;
497 
498  int long_ref_count; ///< number of actual long term references
499  int short_ref_count; ///< number of actual short term references
500 
501  /**
502  * @name Members for slice based multithreading
503  * @{
504  */
505  /**
506  * current slice number, used to initialize slice_num of each thread/context
507  */
509 
510  /** @} */
511 
512  /**
513  * Complement sei_pic_struct
514  * SEI_PIC_STRUCT_TOP_BOTTOM and SEI_PIC_STRUCT_BOTTOM_TOP indicate interlaced frames.
515  * However, soft telecined frames may have these values.
516  * This is used in an attempt to flag soft telecine progressive.
517  */
519 
520  /**
521  * Are the SEI recovery points looking valid.
522  */
524 
525  /**
526  * recovery_frame is the frame_num at which the next frame should
527  * be fully constructed.
528  *
529  * Set to -1 when not expecting a recovery point.
530  */
532 
533 /**
534  * We have seen an IDR, so all the following frames in coded order are correctly
535  * decodable.
536  */
537 #define FRAME_RECOVERED_IDR (1 << 0)
538 /**
539  * Sufficient number of frames have been decoded since a SEI recovery point,
540  * so all the following frames in presentation order are correct.
541  */
542 #define FRAME_RECOVERED_SEI (1 << 1)
543 
544  int frame_recovered; ///< Initial frame has been completely recovered
545 
547 
549 
550  /* for frame threading, this is set to 1
551  * after finish_setup() has been called, so we cannot modify
552  * some context properties (which are supposed to stay constant between
553  * slices) anymore */
555 
558  int16_t slice_row[MAX_SLICES]; ///< to detect when MAX_SLICES is too low
559 
560  /* original AVCodecContext dimensions, used to handle container
561  * cropping */
564 
566 
568 
573  int ref2frm[MAX_SLICES][2][64]; ///< reference to frame number lists, used in the loop filter, the first 2 are for -2,-1
574 } H264Context;
575 
576 extern const uint16_t ff_h264_mb_sizes[4];
577 
578 /**
579  * Reconstruct bitstream slice_type.
580  */
582 
583 /**
584  * Allocate tables.
585  * needs width/height
586  */
588 
592 
593 /**
594  * Execute the reference picture marking (memory management control operations).
595  */
597 
599  const H2645NAL *nal, void *logctx);
600 
602 void ff_h264_decode_init_vlc(void);
603 
604 /**
605  * Decode a macroblock
606  * @return 0 if OK, ER_AC_ERROR / ER_DC_ERROR / ER_MV_ERROR on error
607  */
609 
610 /**
611  * Decode a CABAC coded macroblock
612  * @return 0 if OK, ER_AC_ERROR / ER_DC_ERROR / ER_MV_ERROR on error
613  */
615 
617 
621  int *mb_type);
622 
623 void ff_h264_filter_mb_fast(const H264Context *h, H264SliceContext *sl, int mb_x, int mb_y,
624  uint8_t *img_y, uint8_t *img_cb, uint8_t *img_cr,
625  unsigned int linesize, unsigned int uvlinesize);
626 void ff_h264_filter_mb(const H264Context *h, H264SliceContext *sl, int mb_x, int mb_y,
627  uint8_t *img_y, uint8_t *img_cb, uint8_t *img_cr,
628  unsigned int linesize, unsigned int uvlinesize);
629 
630 /*
631  * o-o o-o
632  * / / /
633  * o-o o-o
634  * ,---'
635  * o-o o-o
636  * / / /
637  * o-o o-o
638  */
639 
640 /* Scan8 organization:
641  * 0 1 2 3 4 5 6 7
642  * 0 DY y y y y y
643  * 1 y Y Y Y Y
644  * 2 y Y Y Y Y
645  * 3 y Y Y Y Y
646  * 4 y Y Y Y Y
647  * 5 DU u u u u u
648  * 6 u U U U U
649  * 7 u U U U U
650  * 8 u U U U U
651  * 9 u U U U U
652  * 10 DV v v v v v
653  * 11 v V V V V
654  * 12 v V V V V
655  * 13 v V V V V
656  * 14 v V V V V
657  * DY/DU/DV are for luma/chroma DC.
658  */
659 
660 #define LUMA_DC_BLOCK_INDEX 48
661 #define CHROMA_DC_BLOCK_INDEX 49
662 
663 // This table must be here because scan8[constant] must be known at compiletime
664 static const uint8_t scan8[16 * 3 + 3] = {
665  4 + 1 * 8, 5 + 1 * 8, 4 + 2 * 8, 5 + 2 * 8,
666  6 + 1 * 8, 7 + 1 * 8, 6 + 2 * 8, 7 + 2 * 8,
667  4 + 3 * 8, 5 + 3 * 8, 4 + 4 * 8, 5 + 4 * 8,
668  6 + 3 * 8, 7 + 3 * 8, 6 + 4 * 8, 7 + 4 * 8,
669  4 + 6 * 8, 5 + 6 * 8, 4 + 7 * 8, 5 + 7 * 8,
670  6 + 6 * 8, 7 + 6 * 8, 6 + 7 * 8, 7 + 7 * 8,
671  4 + 8 * 8, 5 + 8 * 8, 4 + 9 * 8, 5 + 9 * 8,
672  6 + 8 * 8, 7 + 8 * 8, 6 + 9 * 8, 7 + 9 * 8,
673  4 + 11 * 8, 5 + 11 * 8, 4 + 12 * 8, 5 + 12 * 8,
674  6 + 11 * 8, 7 + 11 * 8, 6 + 12 * 8, 7 + 12 * 8,
675  4 + 13 * 8, 5 + 13 * 8, 4 + 14 * 8, 5 + 14 * 8,
676  6 + 13 * 8, 7 + 13 * 8, 6 + 14 * 8, 7 + 14 * 8,
677  0 + 0 * 8, 0 + 5 * 8, 0 + 10 * 8
678 };
679 
680 static av_always_inline uint32_t pack16to32(unsigned a, unsigned b)
681 {
682 #if HAVE_BIGENDIAN
683  return (b & 0xFFFF) + (a << 16);
684 #else
685  return (a & 0xFFFF) + (b << 16);
686 #endif
687 }
688 
689 static av_always_inline uint16_t pack8to16(unsigned a, unsigned b)
690 {
691 #if HAVE_BIGENDIAN
692  return (b & 0xFF) + (a << 8);
693 #else
694  return (a & 0xFF) + (b << 8);
695 #endif
696 }
697 
698 /**
699  * Get the chroma qp.
700  */
701 static av_always_inline int get_chroma_qp(const PPS *pps, int t, int qscale)
702 {
703  return pps->chroma_qp_table[t][qscale];
704 }
705 
706 /**
707  * Get the predicted intra4x4 prediction mode.
708  */
710  H264SliceContext *sl, int n)
711 {
712  const int index8 = scan8[n];
713  const int left = sl->intra4x4_pred_mode_cache[index8 - 1];
714  const int top = sl->intra4x4_pred_mode_cache[index8 - 8];
715  const int min = FFMIN(left, top);
716 
717  ff_tlog(h->avctx, "mode:%d %d min:%d\n", left, top, min);
718 
719  if (min < 0)
720  return DC_PRED;
721  else
722  return min;
723 }
724 
726  H264SliceContext *sl)
727 {
728  int8_t *i4x4 = sl->intra4x4_pred_mode + h->mb2br_xy[sl->mb_xy];
729  int8_t *i4x4_cache = sl->intra4x4_pred_mode_cache;
730 
731  AV_COPY32(i4x4, i4x4_cache + 4 + 8 * 4);
732  i4x4[4] = i4x4_cache[7 + 8 * 3];
733  i4x4[5] = i4x4_cache[7 + 8 * 2];
734  i4x4[6] = i4x4_cache[7 + 8 * 1];
735 }
736 
738  H264SliceContext *sl)
739 {
740  const int mb_xy = sl->mb_xy;
741  uint8_t *nnz = h->non_zero_count[mb_xy];
742  uint8_t *nnz_cache = sl->non_zero_count_cache;
743 
744  AV_COPY32(&nnz[ 0], &nnz_cache[4 + 8 * 1]);
745  AV_COPY32(&nnz[ 4], &nnz_cache[4 + 8 * 2]);
746  AV_COPY32(&nnz[ 8], &nnz_cache[4 + 8 * 3]);
747  AV_COPY32(&nnz[12], &nnz_cache[4 + 8 * 4]);
748  AV_COPY32(&nnz[16], &nnz_cache[4 + 8 * 6]);
749  AV_COPY32(&nnz[20], &nnz_cache[4 + 8 * 7]);
750  AV_COPY32(&nnz[32], &nnz_cache[4 + 8 * 11]);
751  AV_COPY32(&nnz[36], &nnz_cache[4 + 8 * 12]);
752 
753  if (!h->chroma_y_shift) {
754  AV_COPY32(&nnz[24], &nnz_cache[4 + 8 * 8]);
755  AV_COPY32(&nnz[28], &nnz_cache[4 + 8 * 9]);
756  AV_COPY32(&nnz[40], &nnz_cache[4 + 8 * 13]);
757  AV_COPY32(&nnz[44], &nnz_cache[4 + 8 * 14]);
758  }
759 }
760 
762  H264SliceContext *sl,
763  int b_stride,
764  int b_xy, int b8_xy,
765  int mb_type, int list)
766 {
767  int16_t(*mv_dst)[2] = &h->cur_pic.motion_val[list][b_xy];
768  int16_t(*mv_src)[2] = &sl->mv_cache[list][scan8[0]];
769  AV_COPY128(mv_dst + 0 * b_stride, mv_src + 8 * 0);
770  AV_COPY128(mv_dst + 1 * b_stride, mv_src + 8 * 1);
771  AV_COPY128(mv_dst + 2 * b_stride, mv_src + 8 * 2);
772  AV_COPY128(mv_dst + 3 * b_stride, mv_src + 8 * 3);
773  if (CABAC(h)) {
774  uint8_t (*mvd_dst)[2] = &sl->mvd_table[list][FMO ? 8 * sl->mb_xy
775  : h->mb2br_xy[sl->mb_xy]];
776  uint8_t(*mvd_src)[2] = &sl->mvd_cache[list][scan8[0]];
777  if (IS_SKIP(mb_type)) {
778  AV_ZERO128(mvd_dst);
779  } else {
780  AV_COPY64(mvd_dst, mvd_src + 8 * 3);
781  AV_COPY16(mvd_dst + 3 + 3, mvd_src + 3 + 8 * 0);
782  AV_COPY16(mvd_dst + 3 + 2, mvd_src + 3 + 8 * 1);
783  AV_COPY16(mvd_dst + 3 + 1, mvd_src + 3 + 8 * 2);
784  }
785  }
786 
787  {
788  int8_t *ref_index = &h->cur_pic.ref_index[list][b8_xy];
789  int8_t *ref_cache = sl->ref_cache[list];
790  ref_index[0 + 0 * 2] = ref_cache[scan8[0]];
791  ref_index[1 + 0 * 2] = ref_cache[scan8[4]];
792  ref_index[0 + 1 * 2] = ref_cache[scan8[8]];
793  ref_index[1 + 1 * 2] = ref_cache[scan8[12]];
794  }
795 }
796 
798  H264SliceContext *sl,
799  int mb_type)
800 {
801  const int b_stride = h->b_stride;
802  const int b_xy = 4 * sl->mb_x + 4 * sl->mb_y * h->b_stride; // try mb2b(8)_xy
803  const int b8_xy = 4 * sl->mb_xy;
804 
805  if (USES_LIST(mb_type, 0)) {
806  write_back_motion_list(h, sl, b_stride, b_xy, b8_xy, mb_type, 0);
807  } else {
808  fill_rectangle(&h->cur_pic.ref_index[0][b8_xy],
809  2, 2, 2, (uint8_t)LIST_NOT_USED, 1);
810  }
811  if (USES_LIST(mb_type, 1))
812  write_back_motion_list(h, sl, b_stride, b_xy, b8_xy, mb_type, 1);
813 
814  if (sl->slice_type_nos == AV_PICTURE_TYPE_B && CABAC(h)) {
815  if (IS_8X8(mb_type)) {
816  uint8_t *direct_table = &h->direct_table[4 * sl->mb_xy];
817  direct_table[1] = sl->sub_mb_type[1] >> 1;
818  direct_table[2] = sl->sub_mb_type[2] >> 1;
819  direct_table[3] = sl->sub_mb_type[3] >> 1;
820  }
821  }
822 }
823 
825 {
826  if (h->ps.sps->direct_8x8_inference_flag)
827  return !(AV_RN64A(sl->sub_mb_type) &
829  0x0001000100010001ULL));
830  else
831  return !(AV_RN64A(sl->sub_mb_type) &
833  0x0001000100010001ULL));
834 }
835 
836 static inline int find_start_code(const uint8_t *buf, int buf_size,
837  int buf_index, int next_avc)
838 {
839  uint32_t state = -1;
840 
841  buf_index = avpriv_find_start_code(buf + buf_index, buf + next_avc + 1, &state) - buf - 1;
842 
843  return FFMIN(buf_index, buf_size);
844 }
845 
846 int ff_h264_field_end(H264Context *h, H264SliceContext *sl, int in_setup);
847 
851 
853 
854 void ff_h264_draw_horiz_band(const H264Context *h, H264SliceContext *sl, int y, int height);
855 
856 /**
857  * Submit a slice for decoding.
858  *
859  * Parse the slice header, starting a new field/frame if necessary. If any
860  * slices are queued for the previous field, they are decoded.
861  */
865  const AVCodecContext *src);
867  const AVCodecContext *src);
868 
870 
872 
874 
875 #endif /* AVCODEC_H264DEC_H */
H264Context::missing_fields
int missing_fields
Definition: h264dec.h:548
H264Context::context_initialized
int context_initialized
Definition: h264dec.h:379
H264Context::mb_num
int mb_num
Definition: h264dec.h:456
MMCO::opcode
MMCOOpcode opcode
Definition: h264dec.h:125
H264Context::nb_slice_ctx_queued
int nb_slice_ctx_queued
Definition: h264dec.h:366
H264Context::picture_intra_only
int picture_intra_only
Definition: h264dec.h:397
IS_8X8
#define IS_8X8(a)
Definition: mpegutils.h:88
H264SliceContext::mb_xy
int mb_xy
Definition: h264dec.h:243
CABAC
#define CABAC(h)
Definition: h264dec.h:96
H264SliceContext::nb_ref_modifications
int nb_ref_modifications[2]
Definition: h264dec.h:288
MMCO::long_arg
int long_arg
index, pic_num, or num long refs depending on opcode
Definition: h264dec.h:127
MMCO_RESET
@ MMCO_RESET
Definition: h264dec.h:117
H264Context::picture_structure
int picture_structure
Definition: h264dec.h:426
H264Context::slice_table_base
uint16_t * slice_table_base
Definition: h264dec.h:477
H264SliceContext::ref_cache
int8_t ref_cache[2][5 *8]
Definition: h264dec.h:312
H264SliceContext::topleft_samples_available
unsigned int topleft_samples_available
Definition: h264dec.h:233
H264Context::explicit_ref_marking
int explicit_ref_marking
Definition: h264dec.h:496
H264Context::pixel_shift
int pixel_shift
0 for 8-bit H.264, 1 for high-bit-depth H.264
Definition: h264dec.h:370
H264SliceContext::max_pic_num
int max_pic_num
Definition: h264dec.h:344
h2645_parse.h
H264SliceContext::nb_mmco
int nb_mmco
Definition: h264dec.h:335
cabac.h
H264SliceContext::intra_pcm_ptr
const uint8_t * intra_pcm_ptr
Definition: h264dec.h:292
ff_h264_update_thread_context_for_user
int ff_h264_update_thread_context_for_user(AVCodecContext *dst, const AVCodecContext *src)
Definition: h264_slice.c:475
H264Picture::poc
int poc
frame POC
Definition: h264dec.h:153
H264Context::cbp_table
uint16_t * cbp_table
Definition: h264dec.h:432
H264Picture::f
AVFrame * f
Definition: h264dec.h:131
mem_internal.h
H264Context::h264dsp
H264DSPContext h264dsp
Definition: h264dec.h:354
H264Context::ref_index_pool
AVBufferPool * ref_index_pool
Definition: h264dec.h:572
AVBufferPool
The buffer pool.
Definition: buffer_internal.h:89
H264Context::slice_ctx
H264SliceContext * slice_ctx
Definition: h264dec.h:364
thread.h
H264Context::flags
int flags
Definition: h264dec.h:380
H264Ref
Definition: h264dec.h:178
H264Picture::ref_count
int ref_count[2][2]
number of entries in ref_poc (FIXME need per slice)
Definition: h264dec.h:161
H264SliceContext::topright_mb_xy
int topright_mb_xy
Definition: h264dec.h:222
find_start_code
static int find_start_code(const uint8_t *buf, int buf_size, int buf_index, int next_avc)
Definition: h264dec.h:836
H264Picture::ref_index
int8_t * ref_index[2]
Definition: h264dec.h:150
H264SliceContext::mb
int16_t mb[16 *48 *2]
Definition: h264dec.h:319
MB_TYPE_16x8
#define MB_TYPE_16x8
Definition: mpegutils.h:54
H264SliceContext::mvd_table
uint8_t(*[2] mvd_table)[2]
Definition: h264dec.h:325
H264Context::b_stride
int b_stride
Definition: h264dec.h:420
H264Context::h274db
H274FilmGrainDatabase h274db
Definition: h264dec.h:357
H264Picture::pps
const PPS * pps
Definition: h264dec.h:172
ff_h264_set_erpic
void ff_h264_set_erpic(ERPicture *dst, H264Picture *src)
Definition: h264_picture.c:208
H264Context::motion_val_pool
AVBufferPool * motion_val_pool
Definition: h264dec.h:571
ff_h264_flush_change
void ff_h264_flush_change(H264Context *h)
Definition: h264dec.c:453
h264_parse.h
AVFrame
This structure describes decoded (raw) audio or video data.
Definition: frame.h:317
H264Context::recovery_frame
int recovery_frame
recovery_frame is the frame_num at which the next frame should be fully constructed.
Definition: h264dec.h:531
internal.h
H264SliceContext::topleft_partition
int topleft_partition
Definition: h264dec.h:231
DC_PRED
@ DC_PRED
Definition: vp9.h:48
ff_h264_execute_ref_pic_marking
int ff_h264_execute_ref_pic_marking(H264Context *h)
Execute the reference picture marking (memory management control operations).
Definition: h264_refs.c:610
b
#define b
Definition: input.c:40
ff_h264_decode_mb_cabac
int ff_h264_decode_mb_cabac(const H264Context *h, H264SliceContext *sl)
Decode a CABAC coded macroblock.
Definition: h264_cabac.c:1912
H264SliceContext::mmco
MMCO mmco[MAX_MMCO_COUNT]
Definition: h264dec.h:334
H264SliceContext::val
uint32_t val
Definition: h264dec.h:286
H264Ref::pic_id
int pic_id
Definition: h264dec.h:184
H264SliceContext::ref_count
unsigned int ref_count[2]
num_ref_idx_l0/1_active_minus1 + 1
Definition: h264dec.h:279
H264Context::nal_unit_type
int nal_unit_type
Definition: h264dec.h:462
H264SliceContext::left_block
const uint8_t * left_block
Definition: h264dec.h:230
H264Picture::qscale_table
int8_t * qscale_table
Definition: h264dec.h:138
H264SliceContext::h264
struct H264Context * h264
Definition: h264dec.h:190
H264SliceContext::left_mb_xy
int left_mb_xy[LEFT_MBS]
Definition: h264dec.h:223
ERContext
Definition: error_resilience.h:53
H264Context::nb_mmco
int nb_mmco
Definition: h264dec.h:494
H264Context::delayed_pic
H264Picture * delayed_pic[MAX_DELAYED_PIC_COUNT+2]
Definition: h264dec.h:484
H264Context::setup_finished
int setup_finished
Definition: h264dec.h:554
avpriv_find_start_code
const uint8_t * avpriv_find_start_code(const uint8_t *p, const uint8_t *end, uint32_t *state)
H264Picture::ref_index_buf
AVBufferRef * ref_index_buf[2]
Definition: h264dec.h:149
H264Context::field_scan8x8_cavlc
uint8_t field_scan8x8_cavlc[64]
Definition: h264dec.h:445
H264SliceContext::sub_mb_type
uint16_t sub_mb_type[4]
as a DCT coefficient is int32_t in high depth, we need to reserve twice the space.
Definition: h264dec.h:316
ff_h264_draw_horiz_band
void ff_h264_draw_horiz_band(const H264Context *h, H264SliceContext *sl, int y, int height)
Definition: h264dec.c:103
ff_h264_alloc_tables
int ff_h264_alloc_tables(H264Context *h)
Allocate tables.
Definition: h264dec.c:181
H264SliceContext::is_complex
int is_complex
Definition: h264dec.h:250
DPB
Decoded Picture Buffer (DPB).
Definition: vaapi_h264.c:82
H264Context::valid_recovery_point
int valid_recovery_point
Are the SEI recovery points looking valid.
Definition: h264dec.h:523
H264Context::field_scan8x8_q0
uint8_t field_scan8x8_q0[64]
Definition: h264dec.h:450
mpegutils.h
H264Picture::invalid_gap
int invalid_gap
Definition: h264dec.h:167
H264Picture::pps_buf
AVBufferRef * pps_buf
Definition: h264dec.h:171
H264SliceContext::dist_scale_factor
int dist_scale_factor[32]
Definition: h264dec.h:271
H264Context::height_from_caller
int height_from_caller
Definition: h264dec.h:563
MMCO_LONG
@ MMCO_LONG
Definition: h264dec.h:118
ff_h264_ref_picture
int ff_h264_ref_picture(H264Context *h, H264Picture *dst, H264Picture *src)
Definition: h264_picture.c:100
H264SliceContext::mb_x
int mb_x
Definition: h264dec.h:242
ERPicture
Definition: error_resilience.h:41
H264Picture::frame_num
int frame_num
frame_num (raw frame_num from slice header)
Definition: h264dec.h:154
H264SliceContext::next_slice_idx
int next_slice_idx
Definition: h264dec.h:248
H264SliceContext
Definition: h264dec.h:189
H264SliceContext::mb_padding
int16_t mb_padding[256 *2]
Definition: h264dec.h:323
H264Context::cur_pic
H264Picture cur_pic
Definition: h264dec.h:361
ff_h264_slice_context_init
int ff_h264_slice_context_init(H264Context *h, H264SliceContext *sl)
Init context Allocate buffers which are not shared amongst multiple threads.
Definition: h264dec.c:222
H264SliceContext::mv_cache
int16_t mv_cache[2][5 *8][2]
Motion vector cache.
Definition: h264dec.h:311
H264Context::chroma_pred_mode_table
uint8_t * chroma_pred_mode_table
Definition: h264dec.h:435
h264qpel.h
H264SliceContext::mvd_cache
uint8_t mvd_cache[2][5 *8][2]
Definition: h264dec.h:313
H264SliceContext::map_col_to_list0
int map_col_to_list0[2][16+32]
Definition: h264dec.h:273
H264SliceContext::map_col_to_list0_field
int map_col_to_list0_field[2][2][16+32]
Definition: h264dec.h:274
ff_h264_remove_all_refs
void ff_h264_remove_all_refs(H264Context *h)
Definition: h264_refs.c:565
get_chroma_qp
static av_always_inline int get_chroma_qp(const PPS *pps, int t, int qscale)
Get the chroma qp.
Definition: h264dec.h:701
H264Picture::mmco_reset
int mmco_reset
MMCO_RESET set this 1.
Definition: h264dec.h:155
H264Picture::ref_poc
int ref_poc[2][2][32]
POCs of the frames/fields used as reference (FIXME need per slice)
Definition: h264dec.h:160
H264Context::cur_pic_ptr
H264Picture * cur_pic_ptr
Definition: h264dec.h:360
GetBitContext
Definition: get_bits.h:62
H264Context::mmco
MMCO mmco[MAX_MMCO_COUNT]
memory management control operations buffer.
Definition: h264dec.h:493
H264SliceContext::er
ERContext er
Definition: h264dec.h:192
H264Context::mb_stride
int mb_stride
Definition: h264dec.h:455
USES_LIST
#define USES_LIST(a, list)
Definition: mpegutils.h:98
ff_h264_execute_decode_slices
int ff_h264_execute_decode_slices(H264Context *h)
Call decode_slice() for each context.
Definition: h264_slice.c:2902
H264Context::mb_y
int mb_y
Definition: h264dec.h:453
H264Context::nb_slice_ctx
int nb_slice_ctx
Definition: h264dec.h:365
H264Picture::mb_stride
int mb_stride
Definition: h264dec.h:175
H264SliceContext::deblocking_filter
int deblocking_filter
disable_deblocking_filter_idc with 1 <-> 0
Definition: h264dec.h:205
H264Picture::f_grain
AVFrame * f_grain
Definition: h264dec.h:134
H264SliceContext::picture_structure
int picture_structure
Definition: h264dec.h:252
H264SliceContext::direct_spatial_mv_pred
int direct_spatial_mv_pred
Definition: h264dec.h:263
H264Context::avctx
AVCodecContext * avctx
Definition: h264dec.h:352
ff_h264_unref_picture
void ff_h264_unref_picture(H264Context *h, H264Picture *pic)
Definition: h264_picture.c:44
H264Ref::data
uint8_t * data[3]
Definition: h264dec.h:179
H264SliceContext::slice_num
int slice_num
Definition: h264dec.h:194
H264Context::chroma_format_idc
int chroma_format_idc
chroma format from sps to detect changes
Definition: h264dec.h:473
H264Context::qscale_table_pool
AVBufferPool * qscale_table_pool
Definition: h264dec.h:569
H264SliceContext::dc_val_base
int16_t * dc_val_base
Definition: h264dec.h:293
H264Picture::mbaff
int mbaff
1 -> MBAFF frame 0-> not MBAFF
Definition: h264dec.h:162
H264Context::width
int width
Definition: h264dec.h:373
H264SliceContext::topleft_mb_xy
int topleft_mb_xy
Definition: h264dec.h:220
intreadwrite.h
H264Context::last_pocs
int last_pocs[MAX_DELAYED_PIC_COUNT]
Definition: h264dec.h:485
H264Context::postpone_filter
int postpone_filter
Definition: h264dec.h:387
H264Context::short_ref_count
int short_ref_count
number of actual short term references
Definition: h264dec.h:499
H264SliceContext::next_mb_skipped
int next_mb_skipped
Definition: h264dec.h:212
H264Context::crop_top
int crop_top
Definition: h264dec.h:401
pred_intra_mode
static av_always_inline int pred_intra_mode(const H264Context *h, H264SliceContext *sl, int n)
Get the predicted intra4x4 prediction mode.
Definition: h264dec.h:709
H264Context::zigzag_scan8x8
uint8_t zigzag_scan8x8[64]
Definition: h264dec.h:441
H264Ref::parent
H264Picture * parent
Definition: h264dec.h:186
MMCO_SHORT2LONG
@ MMCO_SHORT2LONG
Definition: h264dec.h:115
IS_SKIP
#define IS_SKIP(a)
Definition: mpegutils.h:80
H264SliceContext::slice_alpha_c0_offset
int slice_alpha_c0_offset
Definition: h264dec.h:206
H264Context::crop_bottom
int crop_bottom
Definition: h264dec.h:402
ff_h264_direct_dist_scale_factor
void ff_h264_direct_dist_scale_factor(const H264Context *const h, H264SliceContext *sl)
Definition: h264_direct.c:62
ff_h264_get_slice_type
int ff_h264_get_slice_type(const H264SliceContext *sl)
Reconstruct bitstream slice_type.
Definition: h264_slice.c:2318
H264SliceContext::slice_type
int slice_type
Definition: h264dec.h:195
MMCO::short_pic_num
int short_pic_num
pic_num without wrapping (pic_num & max_pic_num)
Definition: h264dec.h:126
H264SliceContext::resync_mb_x
int resync_mb_x
Definition: h264dec.h:244
H264Picture::sei_recovery_frame_cnt
int sei_recovery_frame_cnt
Definition: h264dec.h:168
H264Context::enable_er
int enable_er
Definition: h264dec.h:565
ff_h264_init_cabac_states
void ff_h264_init_cabac_states(const H264Context *h, H264SliceContext *sl)
Definition: h264_cabac.c:1263
H264Context::mvd_table
uint8_t(*[2] mvd_table)[2]
Definition: h264dec.h:436
H264SliceContext::curr_pic_num
int curr_pic_num
Definition: h264dec.h:343
MB_TYPE_8x16
#define MB_TYPE_8x16
Definition: mpegutils.h:55
H264SliceContext::topright_samples_available
unsigned int topright_samples_available
Definition: h264dec.h:235
H264Context::last_pic_for_ec
H264Picture last_pic_for_ec
Definition: h264dec.h:362
H264Context::mb_type_pool
AVBufferPool * mb_type_pool
Definition: h264dec.h:570
H264Context::zigzag_scan8x8_cavlc
uint8_t zigzag_scan8x8_cavlc[64]
Definition: h264dec.h:442
H264Context::non_zero_count
uint8_t(* non_zero_count)[48]
Definition: h264dec.h:407
AVClass
Describe the class of an AVClass context structure.
Definition: log.h:66
H264Picture::motion_val_buf
AVBufferRef * motion_val_buf[2]
Definition: h264dec.h:140
H264Context::hpc
H264PredContext hpc
Definition: h264dec.h:405
AV_COPY128
#define AV_COPY128(d, s)
Definition: intreadwrite.h:609
H264SEIContext
Definition: h264_sei.h:189
AV_COPY64
#define AV_COPY64(d, s)
Definition: intreadwrite.h:605
H264SliceContext::edge_emu_buffer
uint8_t * edge_emu_buffer
Definition: h264dec.h:296
H264Context::pkt
H2645Packet pkt
Definition: h264dec.h:368
H264Context::next_outputed_poc
int next_outputed_poc
Definition: h264dec.h:487
H264Context::long_ref_count
int long_ref_count
number of actual long term references
Definition: h264dec.h:498
H264Ref::linesize
int linesize[3]
Definition: h264dec.h:180
H264Context::mb_width
int mb_width
Definition: h264dec.h:454
MB_TYPE_8x8
#define MB_TYPE_8x8
Definition: mpegutils.h:56
H264SliceContext::chroma_qp
int chroma_qp[2]
Definition: h264dec.h:200
src
#define src
Definition: vp8dsp.c:255
h264dsp.h
PPS
Picture parameter set.
Definition: h264_ps.h:111
H264Context::ref2frm
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:573
list
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining list
Definition: filter_design.txt:25
ff_h264_decode_ref_pic_list_reordering
int ff_h264_decode_ref_pic_list_reordering(H264SliceContext *sl, void *logctx)
Definition: h264_refs.c:423
H264SliceContext::top_samples_available
unsigned int top_samples_available
Definition: h264dec.h:234
H264Context::h264qpel
H264QpelContext h264qpel
Definition: h264dec.h:356
qpeldsp.h
H264Picture::mb_height
int mb_height
Definition: h264dec.h:174
H264SliceContext::mb_luma_dc
int16_t mb_luma_dc[3][16 *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
H264SliceContext::qscale
int qscale
Definition: h264dec.h:199
write_back_motion
static av_always_inline void write_back_motion(const H264Context *h, H264SliceContext *sl, int mb_type)
Definition: h264dec.h:797
h274.h
AV_ZERO128
#define AV_ZERO128(d)
Definition: intreadwrite.h:637
H264SliceContext::top_borders_allocated
int top_borders_allocated[2]
Definition: h264dec.h:300
ff_h264_mb_sizes
const uint16_t ff_h264_mb_sizes[4]
Definition: h264dec.c:59
H264SliceContext::mb_skip_run
int mb_skip_run
Definition: h264dec.h:249
h264_ps.h
H264SliceContext::cabac_state
uint8_t cabac_state[1024]
Definition: h264dec.h:331
H264SliceContext::top_type
int top_type
Definition: h264dec.h:226
H264Context::bit_depth_luma
int bit_depth_luma
luma bit depth from sps to detect changes
Definition: h264dec.h:472
get_dct8x8_allowed
static av_always_inline int get_dct8x8_allowed(const H264Context *h, H264SliceContext *sl)
Definition: h264dec.h:824
H264Context::frame_recovered
int frame_recovered
Initial frame has been completely recovered.
Definition: h264dec.h:544
H264Context::has_slice
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:464
H264Context::next_output_pic
H264Picture * next_output_pic
Definition: h264dec.h:486
H264SliceContext::resync_mb_y
int resync_mb_y
Definition: h264dec.h:245
ff_h264_pred_direct_motion
void ff_h264_pred_direct_motion(const H264Context *const h, H264SliceContext *sl, int *mb_type)
Definition: h264_direct.c:721
H264Context::picture_idr
int picture_idr
Definition: h264dec.h:392
ff_h264_direct_ref_list_init
void ff_h264_direct_ref_list_init(const H264Context *const h, H264SliceContext *sl)
Definition: h264_direct.c:121
H264DSPContext
Context for storing H.264 DSP functions.
Definition: h264dsp.h:42
H264Picture::pic_id
int pic_id
pic_num (short -> no wrap version of pic_num, pic_num & max_pic_num; long -> long_pic_num)
Definition: h264dec.h:157
H264SliceContext::cabac
CABACContext cabac
Cabac.
Definition: h264dec.h:330
H264SliceContext::redundant_pic_count
int redundant_pic_count
Definition: h264dec.h:256
H264SliceContext::intra4x4_pred_mode_cache
int8_t intra4x4_pred_mode_cache[5 *8]
Definition: h264dec.h:217
H264Context::long_ref
H264Picture * long_ref[32]
Definition: h264dec.h:483
state
static struct @320 state
H274FilmGrainDatabase
Definition: h274.h:34
H264Context::mb_aff_frame
int mb_aff_frame
Definition: h264dec.h:425
H264Context::crop_left
int crop_left
Definition: h264dec.h:399
H264Picture::reference
int reference
Definition: h264dec.h:165
H264Context::poc
H264POCContext poc
Definition: h264dec.h:479
H264Context::vdsp
VideoDSPContext vdsp
Definition: h264dec.h:353
LEFT_MBS
#define LEFT_MBS
Definition: h264dec.h:77
pps
static int FUNC() pps(CodedBitstreamContext *ctx, RWContext *rw, H264RawPPS *current)
Definition: cbs_h264_syntax_template.c:404
H264Context::block_offset
int block_offset[2 *(16 *3)]
block_offset[ 0..23] for frame macroblocks block_offset[24..47] for field macroblocks
Definition: h264dec.h:416
rectangle.h
MMCO_LONG2UNUSED
@ MMCO_LONG2UNUSED
Definition: h264dec.h:114
H264SliceContext::mb_uvlinesize
ptrdiff_t mb_uvlinesize
Definition: h264dec.h:240
H264SliceContext::pwt
H264PredWeightTable pwt
Definition: h264dec.h:209
MAX_DELAYED_PIC_COUNT
#define MAX_DELAYED_PIC_COUNT
Definition: h264dec.h:58
H264Picture::tf
ThreadFrame tf
Definition: h264dec.h:132
H264Picture::mb_type
uint32_t * mb_type
Definition: h264dec.h:144
H264SliceContext::intra16x16_pred_mode
int intra16x16_pred_mode
Definition: h264dec.h:215
H264Context::has_recovery_point
int has_recovery_point
Definition: h264dec.h:546
H264Picture::recovered
int recovered
picture at IDR or recovery point + recovery count
Definition: h264dec.h:166
H264Context::zigzag_scan8x8_cavlc_q0
uint8_t zigzag_scan8x8_cavlc_q0[64]
Definition: h264dec.h:448
H264SliceContext::top_mb_xy
int top_mb_xy
Definition: h264dec.h:221
H264SliceContext::qp_thresh
int qp_thresh
QP threshold to skip loopfilter.
Definition: h264dec.h:201
MMCOOpcode
MMCOOpcode
Memory management control operation opcode.
Definition: h264dec.h:111
H264Context::chroma_x_shift
int chroma_x_shift
Definition: h264dec.h:374
H264Context::sei
H264SEIContext sei
Definition: h264dec.h:567
H2645NAL
Definition: h2645_parse.h:34
H264SliceContext::top_borders
uint8_t(*[2] top_borders)[(16 *3) *2]
Definition: h264dec.h:297
h264chroma.h
AV_RN64A
#define AV_RN64A(p)
Definition: intreadwrite.h:530
H264Context::direct_table
uint8_t * direct_table
Definition: h264dec.h:437
H264SliceContext::cbp
int cbp
Definition: h264dec.h:267
H264Context::prev_interlaced_frame
int prev_interlaced_frame
Complement sei_pic_struct SEI_PIC_STRUCT_TOP_BOTTOM and SEI_PIC_STRUCT_BOTTOM_TOP indicate interlaced...
Definition: h264dec.h:518
ff_h264_queue_decode_slice
int ff_h264_queue_decode_slice(H264Context *h, const H2645NAL *nal)
Submit a slice for decoding.
Definition: h264_slice.c:2193
pack8to16
static av_always_inline uint16_t pack8to16(unsigned a, unsigned b)
Definition: h264dec.h:689
H264SliceContext::left_type
int left_type[LEFT_MBS]
Definition: h264dec.h:228
buffer.h
H264SliceContext::mb_y
int mb_y
Definition: h264dec.h:242
height
#define height
H264SliceContext::explicit_ref_marking
int explicit_ref_marking
Definition: h264dec.h:336
a
The reader does not expect b to be semantically here and if the code is changed by maybe adding a a division or other the signedness will almost certainly be mistaken To avoid this confusion a new type was SUINT is the C unsigned type but it holds a signed int to use the same example SUINT a
Definition: undefined.txt:41
MMCO_SET_MAX_LONG
@ MMCO_SET_MAX_LONG
Definition: h264dec.h:116
H264Context::mmco_reset
int mmco_reset
Definition: h264dec.h:495
H264SliceContext::uvlinesize
ptrdiff_t uvlinesize
Definition: h264dec.h:238
H264SliceContext::slice_type_nos
int slice_type_nos
S free slice type (SI/SP are remapped to I/P)
Definition: h264dec.h:196
H264Context::ps
H264ParamSets ps
Definition: h264dec.h:475
H264SliceContext::delta_poc_bottom
int delta_poc_bottom
Definition: h264dec.h:341
H264Context::field_scan_q0
uint8_t field_scan_q0[16]
Definition: h264dec.h:449
pack16to32
static av_always_inline uint32_t pack16to32(unsigned a, unsigned b)
Definition: h264dec.h:680
H264Context::height
int height
Definition: h264dec.h:373
H264SliceContext::mb_mbaff
int mb_mbaff
mb_aff_frame && mb_field_decoding_flag
Definition: h264dec.h:254
ff_h264_filter_mb
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)
Definition: h264_loopfilter.c:719
H264Context::default_ref
H264Ref default_ref[2]
Definition: h264dec.h:481
DECLARE_ALIGNED
#define DECLARE_ALIGNED(n, t, v)
Definition: mem.h:116
AV_COPY16
#define AV_COPY16(d, s)
Definition: intreadwrite.h:597
h264_sei.h
LIST_NOT_USED
#define LIST_NOT_USED
Definition: h264dec.h:409
H264Picture::field_picture
int field_picture
whether or not picture was encoded in separate fields
Definition: h264dec.h:163
H264Context::poc_offset
int poc_offset
PicOrderCnt_offset from SMPTE RDD-2006.
Definition: h264dec.h:488
H264Context::intra4x4_pred_mode
int8_t * intra4x4_pred_mode
Definition: h264dec.h:404
H264SliceContext::poc_lsb
int poc_lsb
Definition: h264dec.h:340
H264SliceContext::chroma_pred_mode
int chroma_pred_mode
Definition: h264dec.h:214
H264SliceContext::first_mb_addr
unsigned int first_mb_addr
Definition: h264dec.h:246
H264SliceContext::top_cbp
int top_cbp
Definition: h264dec.h:268
H264SliceContext::topleft_type
int topleft_type
Definition: h264dec.h:225
ff_h264_field_end
int ff_h264_field_end(H264Context *h, H264SliceContext *sl, int in_setup)
Definition: h264_picture.c:231
ff_h264_free_tables
void ff_h264_free_tables(H264Context *h)
Definition: h264dec.c:138
H264Picture::needs_fg
int needs_fg
whether picture needs film grain synthesis (see f_grain)
Definition: h264dec.h:169
H264Context
H264Context.
Definition: h264dec.h:350
ff_h264_decode_mb_cavlc
int ff_h264_decode_mb_cavlc(const H264Context *h, H264SliceContext *sl)
Decode a macroblock.
Definition: h264_cavlc.c:696
H264SliceContext::frame_num
int frame_num
Definition: h264dec.h:338
H264POCContext
Definition: h264_parse.h:43
H264SliceContext::col_fieldoff
int col_fieldoff
Definition: h264dec.h:265
H264SliceContext::mb_linesize
ptrdiff_t mb_linesize
may be equal to s->linesize or s->linesize * 2, for mbaff
Definition: h264dec.h:239
av_always_inline
#define av_always_inline
Definition: attributes.h:49
FFMIN
#define FFMIN(a, b)
Definition: macros.h:49
H264Context::nal_ref_idc
int nal_ref_idc
Definition: h264dec.h:461
H264Context::coded_picture_number
int coded_picture_number
Definition: h264dec.h:377
H264Picture::hwaccel_priv_buf
AVBufferRef * hwaccel_priv_buf
Definition: h264dec.h:146
AV_COPY32
#define AV_COPY32(d, s)
Definition: intreadwrite.h:601
H264Context::mb_height
int mb_height
Definition: h264dec.h:454
parser.h
H264Context::cur_chroma_format_idc
int cur_chroma_format_idc
Definition: h264dec.h:556
H264QpelContext
Definition: h264qpel.h:27
H264Context::crop_right
int crop_right
Definition: h264dec.h:400
H264SliceContext::list_count
unsigned int list_count
Definition: h264dec.h:280
H264Context::field_scan8x8_cavlc_q0
uint8_t field_scan8x8_cavlc_q0[64]
Definition: h264dec.h:451
H264Context::list_counts
uint8_t * list_counts
Array of list_count per MB specifying the slice type.
Definition: h264dec.h:429
H264Context::workaround_bugs
int workaround_bugs
Definition: h264dec.h:381
MAX_SLICES
#define MAX_SLICES
The maximum number of slices supported by the decoder.
Definition: h264dec.h:70
MMCO_END
@ MMCO_END
Definition: h264dec.h:112
write_back_motion_list
static av_always_inline void write_back_motion_list(const H264Context *h, H264SliceContext *sl, int b_stride, int b_xy, int b8_xy, int mb_type, int list)
Definition: h264dec.h:761
H264Context::mb2br_xy
uint32_t * mb2br_xy
Definition: h264dec.h:419
FMO
#define FMO
Definition: h264dec.h:64
H264SliceContext::last_qscale_diff
int last_qscale_diff
Definition: h264dec.h:202
ff_h264_build_ref_list
int ff_h264_build_ref_list(H264Context *h, H264SliceContext *sl)
Definition: h264_refs.c:299
h264pred.h
left
Tag MUST be and< 10hcoeff half pel interpolation filter coefficients, hcoeff[0] are the 2 middle coefficients[1] are the next outer ones and so on, resulting in a filter like:...eff[2], hcoeff[1], hcoeff[0], hcoeff[0], hcoeff[1], hcoeff[2] ... the sign of the coefficients is not explicitly stored but alternates after each coeff and coeff[0] is positive, so ...,+,-,+,-,+,+,-,+,-,+,... hcoeff[0] is not explicitly stored but found by subtracting the sum of all stored coefficients with signs from 32 hcoeff[0]=32 - hcoeff[1] - hcoeff[2] - ... a good choice for hcoeff and htaps is htaps=6 hcoeff={40,-10, 2} an alternative which requires more computations at both encoder and decoder side and may or may not be better is htaps=8 hcoeff={42,-14, 6,-2}ref_frames minimum of the number of available reference frames and max_ref_frames for example the first frame after a key frame always has ref_frames=1spatial_decomposition_type wavelet type 0 is a 9/7 symmetric compact integer wavelet 1 is a 5/3 symmetric compact integer wavelet others are reserved stored as delta from last, last is reset to 0 if always_reset||keyframeqlog quality(logarithmic quantizer scale) stored as delta from last, last is reset to 0 if always_reset||keyframemv_scale stored as delta from last, last is reset to 0 if always_reset||keyframe FIXME check that everything works fine if this changes between framesqbias dequantization bias stored as delta from last, last is reset to 0 if always_reset||keyframeblock_max_depth maximum depth of the block tree stored as delta from last, last is reset to 0 if always_reset||keyframequant_table quantization tableHighlevel bitstream structure:==============================--------------------------------------------|Header|--------------------------------------------|------------------------------------|||Block0||||split?||||yes no||||......... intra?||||:Block01 :yes no||||:Block02 :....... ..........||||:Block03 ::y DC ::ref index:||||:Block04 ::cb DC ::motion x :||||......... :cr DC ::motion y :||||....... ..........|||------------------------------------||------------------------------------|||Block1|||...|--------------------------------------------|------------ ------------ ------------|||Y subbands||Cb subbands||Cr subbands||||--- ---||--- ---||--- ---|||||LL0||HL0||||LL0||HL0||||LL0||HL0|||||--- ---||--- ---||--- ---||||--- ---||--- ---||--- ---|||||LH0||HH0||||LH0||HH0||||LH0||HH0|||||--- ---||--- ---||--- ---||||--- ---||--- ---||--- ---|||||HL1||LH1||||HL1||LH1||||HL1||LH1|||||--- ---||--- ---||--- ---||||--- ---||--- ---||--- ---|||||HH1||HL2||||HH1||HL2||||HH1||HL2|||||...||...||...|||------------ ------------ ------------|--------------------------------------------Decoding process:=================------------|||Subbands|------------||||------------|Intra DC||||LL0 subband prediction ------------|\ Dequantization ------------------- \||Reference frames|\ IDWT|------- -------|Motion \|||Frame 0||Frame 1||Compensation . OBMC v -------|------- -------|--------------. \------> Frame n output Frame Frame<----------------------------------/|...|------------------- Range Coder:============Binary Range Coder:------------------- The implemented range coder is an adapted version based upon "Range encoding: an algorithm for removing redundancy from a digitised message." by G. N. N. Martin. The symbols encoded by the Snow range coder are bits(0|1). The associated probabilities are not fix but change depending on the symbol mix seen so far. bit seen|new state ---------+----------------------------------------------- 0|256 - state_transition_table[256 - old_state];1|state_transition_table[old_state];state_transition_table={ 0, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 190, 191, 192, 194, 194, 195, 196, 197, 198, 199, 200, 201, 202, 202, 204, 205, 206, 207, 208, 209, 209, 210, 211, 212, 213, 215, 215, 216, 217, 218, 219, 220, 220, 222, 223, 224, 225, 226, 227, 227, 229, 229, 230, 231, 232, 234, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 248, 0, 0, 0, 0, 0, 0, 0};FIXME Range Coding of integers:------------------------- FIXME Neighboring Blocks:===================left and top are set to the respective blocks unless they are outside of the image in which case they are set to the Null block top-left is set to the top left block unless it is outside of the image in which case it is set to the left block if this block has no larger parent block or it is at the left side of its parent block and the top right block is not outside of the image then the top right block is used for top-right else the top-left block is used Null block y, cb, cr are 128 level, ref, mx and my are 0 Motion Vector Prediction:=========================1. the motion vectors of all the neighboring blocks are scaled to compensate for the difference of reference frames scaled_mv=(mv *(256 *(current_reference+1)/(mv.reference+1))+128)> the median of the scaled left
Definition: snow.txt:386
H264Context::slice_row
int16_t slice_row[MAX_SLICES]
to detect when MAX_SLICES is too low
Definition: h264dec.h:558
H264SliceContext::pps_id
unsigned int pps_id
Definition: h264dec.h:290
H264SliceContext::linesize
ptrdiff_t linesize
Definition: h264dec.h:238
H264Context::h264chroma
H264ChromaContext h264chroma
Definition: h264dec.h:355
H264SliceContext::slice_beta_offset
int slice_beta_offset
Definition: h264dec.h:207
AVCodecContext
main external API structure.
Definition: avcodec.h:383
ThreadFrame
Definition: thread.h:34
H264SliceContext::bipred_scratchpad
uint8_t * bipred_scratchpad
Definition: h264dec.h:295
H264Picture::field_poc
int field_poc[2]
top/bottom POC
Definition: h264dec.h:152
H264Context::first_field
int first_field
Definition: h264dec.h:427
AV_PICTURE_TYPE_B
@ AV_PICTURE_TYPE_B
Bi-dir predicted.
Definition: avutil.h:276
H264SliceContext::ref_modifications
struct H264SliceContext::@65 ref_modifications[2][32]
error_resilience.h
H264Context::zigzag_scan8x8_q0
uint8_t zigzag_scan8x8_q0[64]
Definition: h264dec.h:447
H264Picture::mb_width
int mb_width
Definition: h264dec.h:174
fill_rectangle
static void fill_rectangle(int x, int y, int w, int h)
Definition: ffplay.c:826
H264Picture
Definition: h264dec.h:130
H264ParamSets
Definition: h264_ps.h:143
H264Context::zigzag_scan
uint8_t zigzag_scan[16]
Definition: h264dec.h:440
H264Context::width_from_caller
int width_from_caller
Definition: h264dec.h:562
scan8
static const uint8_t scan8[16 *3+3]
Definition: h264dec.h:664
H264SliceContext::left_cbp
int left_cbp
Definition: h264dec.h:269
H264Picture::tf_grain
ThreadFrame tf_grain
Definition: h264dec.h:135
ff_h264_decode_init_vlc
void ff_h264_decode_init_vlc(void)
Definition: h264_cavlc.c:326
H264PredWeightTable
Definition: h264_parse.h:30
H264SliceContext::col_parity
int col_parity
Definition: h264dec.h:264
H264Context::slice_table
uint16_t * slice_table
slice_table_base + 2*mb_stride + 1
Definition: h264dec.h:422
VideoDSPContext
Definition: videodsp.h:41
H264Picture::mb_type_buf
AVBufferRef * mb_type_buf
Definition: h264dec.h:143
H264PredContext
Context for storing H.264 prediction functions.
Definition: h264pred.h:92
H264SliceContext::ref_list
H264Ref ref_list[2][48]
0..15: frame refs, 16..47: mbaff field refs.
Definition: h264dec.h:281
H264SliceContext::non_zero_count_cache
uint8_t non_zero_count_cache[15 *8]
non zero coeff count cache.
Definition: h264dec.h:306
H264SliceContext::dist_scale_factor_field
int dist_scale_factor_field[2][32]
Definition: h264dec.h:272
H264SliceContext::direct_cache
uint8_t direct_cache[5 *8]
Definition: h264dec.h:314
H264SliceContext::op
uint8_t op
Definition: h264dec.h:285
H264Context::cur_bit_depth_luma
int cur_bit_depth_luma
Definition: h264dec.h:557
MMCO
Memory management control operation.
Definition: h264dec.h:124
H264Context::scan_padding
uint8_t scan_padding[16]
Definition: h264dec.h:439
H264SliceContext::topright_type
int topright_type
Definition: h264dec.h:227
AVBufferRef
A reference to a data buffer.
Definition: buffer.h:82
H264Context::nal_length_size
int nal_length_size
Number of bytes used for nal length (1, 2 or 4)
Definition: h264dec.h:470
ff_h264_decode_ref_pic_marking
int ff_h264_decode_ref_pic_marking(H264SliceContext *sl, GetBitContext *gb, const H2645NAL *nal, void *logctx)
Definition: h264_refs.c:834
H264SliceContext::left_samples_available
unsigned int left_samples_available
Definition: h264dec.h:236
H264Picture::hwaccel_picture_private
void * hwaccel_picture_private
hardware accelerator private data
Definition: h264dec.h:147
H264SliceContext::idr_pic_id
int idr_pic_id
Definition: h264dec.h:339
H264SliceContext::neighbor_transform_size
int neighbor_transform_size
number of neighbors (top and/or left) that used 8x8 dct
Definition: h264dec.h:261
H264ChromaContext
Definition: h264chroma.h:27
ff_tlog
#define ff_tlog(ctx,...)
Definition: internal.h:205
MMCO_SHORT2UNUSED
@ MMCO_SHORT2UNUSED
Definition: h264dec.h:113
H264SliceContext::gb
GetBitContext gb
Definition: h264dec.h:191
videodsp.h
H264SliceContext::intra4x4_pred_mode
int8_t * intra4x4_pred_mode
Definition: h264dec.h:218
H264Context::short_ref
H264Picture * short_ref[32]
Definition: h264dec.h:482
H264Context::droppable
int droppable
Definition: h264dec.h:376
MB_TYPE_DIRECT2
#define MB_TYPE_DIRECT2
Definition: mpegutils.h:58
H264SliceContext::edge_emu_buffer_allocated
int edge_emu_buffer_allocated
Definition: h264dec.h:299
H264Context::zigzag_scan_q0
uint8_t zigzag_scan_q0[16]
Definition: h264dec.h:446
H264Context::field_scan
uint8_t field_scan[16]
Definition: h264dec.h:443
h
h
Definition: vp9dsp_template.c:2038
H264SliceContext::cabac_init_idc
int cabac_init_idc
Definition: h264dec.h:332
H264_MAX_PICTURE_COUNT
#define H264_MAX_PICTURE_COUNT
Definition: h264dec.h:54
MAX_MMCO_COUNT
#define MAX_MMCO_COUNT
Definition: h264dec.h:56
ff_h264_update_thread_context
int ff_h264_update_thread_context(AVCodecContext *dst, const AVCodecContext *src)
Definition: h264_slice.c:307
ff_h264_hl_decode_mb
void ff_h264_hl_decode_mb(const H264Context *h, H264SliceContext *sl)
Definition: h264_mb.c:799
write_back_intra_pred_mode
static av_always_inline void write_back_intra_pred_mode(const H264Context *h, H264SliceContext *sl)
Definition: h264dec.h:725
H264SliceContext::bipred_scratchpad_allocated
int bipred_scratchpad_allocated
Definition: h264dec.h:298
write_back_non_zero_count
static av_always_inline void write_back_non_zero_count(const H264Context *h, H264SliceContext *sl)
Definition: h264dec.h:737
H264Context::x264_build
int x264_build
Definition: h264dec.h:382
H264SliceContext::slice_type_fixed
int slice_type_fixed
Definition: h264dec.h:197
ff_h264_replace_picture
int ff_h264_replace_picture(H264Context *h, H264Picture *dst, const H264Picture *src)
Definition: h264_picture.c:155
H264Ref::poc
int poc
Definition: h264dec.h:183
H264Context::mb2b_xy
uint32_t * mb2b_xy
Definition: h264dec.h:418
H2645Packet
Definition: h2645_parse.h:82
H264Picture::qscale_table_buf
AVBufferRef * qscale_table_buf
Definition: h264dec.h:137
CABACContext
Definition: cabac.h:41
H264SliceContext::delta_poc
int delta_poc[2]
Definition: h264dec.h:342
H264Context::chroma_y_shift
int chroma_y_shift
Definition: h264dec.h:374
H264Context::current_slice
int current_slice
current slice number, used to initialize slice_num of each thread/context
Definition: h264dec.h:508
H264Picture::long_ref
int long_ref
1->long term reference 0->short term reference
Definition: h264dec.h:159
H264Ref::reference
int reference
Definition: h264dec.h:182
H264Picture::motion_val
int16_t(*[2] motion_val)[2]
Definition: h264dec.h:141
H264SliceContext::prev_mb_skipped
int prev_mb_skipped
Definition: h264dec.h:211
ff_h264_filter_mb_fast
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)
Definition: h264_loopfilter.c:419
H264Context::field_scan8x8
uint8_t field_scan8x8[64]
Definition: h264dec.h:444
H264SliceContext::mb_field_decoding_flag
int mb_field_decoding_flag
Definition: h264dec.h:253
H264Context::is_avc
int is_avc
Used to parse AVC variant of H.264.
Definition: h264dec.h:469
min
float min
Definition: vorbis_enc_data.h:429