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 
35 #include "cabac.h"
36 #include "error_resilience.h"
37 #include "h264_parse.h"
38 #include "h264_ps.h"
39 #include "h264_sei.h"
40 #include "h2645_parse.h"
41 #include "h264chroma.h"
42 #include "h264dsp.h"
43 #include "h264pred.h"
44 #include "h264qpel.h"
45 #include "h274.h"
46 #include "mpegutils.h"
47 #include "rectangle.h"
48 #include "videodsp.h"
49 
50 #define H264_MAX_PICTURE_COUNT 36
51 
52 /* Compiling in interlaced support reduces the speed
53  * of progressive decoding by about 2%. */
54 #define ALLOW_INTERLACE
55 
56 #define FMO 0
57 
58 /**
59  * The maximum number of slices supported by the decoder.
60  * must be a power of 2
61  */
62 #define MAX_SLICES 32
63 
64 #ifdef ALLOW_INTERLACE
65 #define MB_MBAFF(h) (h)->mb_mbaff
66 #define MB_FIELD(sl) (sl)->mb_field_decoding_flag
67 #define FRAME_MBAFF(h) (h)->mb_aff_frame
68 #define FIELD_PICTURE(h) ((h)->picture_structure != PICT_FRAME)
69 #define LEFT_MBS 2
70 #define LTOP 0
71 #define LBOT 1
72 #define LEFT(i) (i)
73 #else
74 #define MB_MBAFF(h) 0
75 #define MB_FIELD(sl) 0
76 #define FRAME_MBAFF(h) 0
77 #define FIELD_PICTURE(h) 0
78 #undef IS_INTERLACED
79 #define IS_INTERLACED(mb_type) 0
80 #define LEFT_MBS 1
81 #define LTOP 0
82 #define LBOT 0
83 #define LEFT(i) 0
84 #endif
85 #define FIELD_OR_MBAFF_PICTURE(h) (FRAME_MBAFF(h) || FIELD_PICTURE(h))
86 
87 #ifndef CABAC
88 #define CABAC(h) (h)->ps.pps->cabac
89 #endif
90 
91 #define CHROMA(h) ((h)->ps.sps->chroma_format_idc)
92 #define CHROMA422(h) ((h)->ps.sps->chroma_format_idc == 2)
93 #define CHROMA444(h) ((h)->ps.sps->chroma_format_idc == 3)
94 
95 #define IS_REF0(a) ((a) & MB_TYPE_REF0)
96 #define IS_8x8DCT(a) ((a) & MB_TYPE_8x8DCT)
97 
98 /**
99  * Memory management control operation.
100  */
101 typedef struct MMCO {
103  int short_pic_num; ///< pic_num without wrapping (pic_num & max_pic_num)
104  int long_arg; ///< index, pic_num, or num long refs depending on opcode
105 } MMCO;
106 
107 typedef struct H264Picture {
110 
112 
114  int8_t *qscale_table;
115 
117  int16_t (*motion_val[2])[2];
118 
120  uint32_t *mb_type;
121 
123  void *hwaccel_picture_private; ///< hardware accelerator private data
124 
126  int8_t *ref_index[2];
127 
128  int field_poc[2]; ///< top/bottom POC
129  int poc; ///< frame POC
130  int frame_num; ///< frame_num (raw frame_num from slice header)
131  int mmco_reset; /**< MMCO_RESET set this 1. Reordering code must
132  not mix pictures before and after MMCO_RESET. */
133  int pic_id; /**< pic_num (short -> no wrap version of pic_num,
134  pic_num & max_pic_num; long -> long_pic_num) */
135  int long_ref; ///< 1->long term reference 0->short term reference
136  int ref_poc[2][2][32]; ///< POCs of the frames/fields used as reference (FIXME need per slice)
137  int ref_count[2][2]; ///< number of entries in ref_poc (FIXME need per slice)
138  int mbaff; ///< 1 -> MBAFF frame 0-> not MBAFF
139  int field_picture; ///< whether or not picture was encoded in separate fields
140 
141 /**
142  * H264Picture.reference has this flag set,
143  * when the picture is held for delayed output.
144  */
145 #define DELAYED_PIC_REF (1 << 2)
147  int recovered; ///< picture at IDR or recovery point + recovery count
150  int needs_fg; ///< whether picture needs film grain synthesis (see `f_grain`)
151 
153  const PPS *pps;
154 
157 } H264Picture;
158 
159 typedef struct H264Ref {
160  uint8_t *data[3];
161  int linesize[3];
162 
164  int poc;
165  int pic_id;
166 
168 } H264Ref;
169 
170 typedef struct H264SliceContext {
171  const struct H264Context *h264;
174 
177  int slice_type_nos; ///< S free slice type (SI/SP are remapped to I/P)
179 
180  int qscale;
181  int chroma_qp[2]; // QPc
182  int qp_thresh; ///< QP threshold to skip loopfilter
184 
185  // deblock
186  int deblocking_filter; ///< disable_deblocking_filter_idc with 1 <-> 0
189 
191 
194 
197 
200 
205 
207  int top_type;
210 
211  const uint8_t *left_block;
213 
215  unsigned int top_samples_available;
218 
219  ptrdiff_t linesize, uvlinesize;
220  ptrdiff_t mb_linesize; ///< may be equal to s->linesize or s->linesize * 2, for mbaff
221  ptrdiff_t mb_uvlinesize;
222 
223  int mb_x, mb_y;
224  int mb_xy;
227  unsigned int first_mb_addr;
228  // index of the first MB of the next slice
232 
235  int mb_mbaff; ///< mb_aff_frame && mb_field_decoding_flag
236 
238 
239  /**
240  * number of neighbors (top and/or left) that used 8x8 dct
241  */
243 
247 
248  int cbp;
249  int top_cbp;
250  int left_cbp;
251 
254  int map_col_to_list0[2][16 + 32];
255  int map_col_to_list0_field[2][2][16 + 32];
256 
257  /**
258  * num_ref_idx_l0/1_active_minus1 + 1
259  */
260  unsigned int ref_count[2]; ///< counts frames or fields, depending on current mb mode
261  unsigned int list_count;
262  H264Ref ref_list[2][48]; /**< 0..15: frame refs, 16..47: mbaff field refs.
263  * Reordered version of default_ref_list
264  * according to picture reordering in slice header */
265  struct {
266  uint8_t op;
267  uint32_t val;
268  } ref_modifications[2][32];
270 
271  unsigned int pps_id;
272 
273  const uint8_t *intra_pcm_ptr;
274 
276  uint8_t *edge_emu_buffer;
277  uint8_t (*top_borders[2])[(16 * 3) * 2];
281 
282  /**
283  * non zero coeff count cache.
284  * is 64 if not available.
285  */
286  DECLARE_ALIGNED(8, uint8_t, non_zero_count_cache)[15 * 8];
287 
288  /**
289  * Motion vector cache.
290  */
291  DECLARE_ALIGNED(16, int16_t, mv_cache)[2][5 * 8][2];
292  DECLARE_ALIGNED(8, int8_t, ref_cache)[2][5 * 8];
293  DECLARE_ALIGNED(16, uint8_t, mvd_cache)[2][5 * 8][2];
294  uint8_t direct_cache[5 * 8];
295 
296  DECLARE_ALIGNED(8, uint16_t, sub_mb_type)[4];
297 
298  ///< as a DCT coefficient is int32_t in high depth, we need to reserve twice the space.
299  DECLARE_ALIGNED(16, int16_t, mb)[16 * 48 * 2];
300  DECLARE_ALIGNED(16, int16_t, mb_luma_dc)[3][16 * 2];
301  ///< as mb is addressed by scantable[i] and scantable is uint8_t we can either
302  ///< check that i is not too large or ensure that there is some unused stuff after mb
303  int16_t mb_padding[256 * 2];
304 
305  uint8_t (*mvd_table[2])[2];
306 
307  /**
308  * Cabac
309  */
311  uint8_t cabac_state[1024];
313 
315  int nb_mmco;
317 
320  int poc_lsb;
322  int delta_poc[2];
326 
327 /**
328  * H264Context
329  */
330 typedef struct H264Context {
331  const AVClass *class;
338 
343 
347 
349 
350  int pixel_shift; ///< 0 for 8-bit H.264, 1 for high-bit-depth H.264
351 
352  /* coded dimensions -- 16 * mb w/h */
353  int width, height;
355 
358 
360  int flags;
363  /* Set when slice threading is used and at least one slice uses deblocking
364  * mode 1 (i.e. across slice boundaries). Then we disable the loop filter
365  * during normal MB decoding and execute it serially at the end.
366  */
368 
369  /*
370  * Set to 1 when the current picture is IDR, 0 otherwise.
371  */
373 
374  /*
375  * Set to 1 when the current picture contains only I slices, 0 otherwise.
376  */
378 
381  int crop_top;
383 
386 
387  uint8_t (*non_zero_count)[48];
388 
389 #define LIST_NOT_USED -1 // FIXME rename?
390 
391  /**
392  * block_offset[ 0..23] for frame macroblocks
393  * block_offset[24..47] for field macroblocks
394  */
395  int block_offset[2 * (16 * 3)];
396 
397  uint32_t *mb2b_xy; // FIXME are these 4 a good idea?
398  uint32_t *mb2br_xy;
399  int b_stride; // FIXME use s->b4_stride
400 
401  uint16_t *slice_table; ///< slice_table_base + 2*mb_stride + 1
402 
403  // interlacing specific flags
407 
408  uint8_t *list_counts; ///< Array of list_count per MB specifying the slice type
409 
410  /* 0x100 -> non null luma_dc, 0x80/0x40 -> non null chroma_dc (cb/cr), 0x?0 -> chroma_cbp(0, 1, 2), 0x0? luma_cbp */
411  uint16_t *cbp_table;
412 
413  /* chroma_pred_mode for i4x4 or i16x16, else 0 */
415  uint8_t (*mvd_table[2])[2];
416  uint8_t *direct_table;
417 
418  uint8_t scan_padding[16];
419  uint8_t zigzag_scan[16];
420  uint8_t zigzag_scan8x8[64];
421  uint8_t zigzag_scan8x8_cavlc[64];
422  uint8_t field_scan[16];
423  uint8_t field_scan8x8[64];
424  uint8_t field_scan8x8_cavlc[64];
425  uint8_t zigzag_scan_q0[16];
426  uint8_t zigzag_scan8x8_q0[64];
428  uint8_t field_scan_q0[16];
429  uint8_t field_scan8x8_q0[64];
431 
432  int mb_y;
435  int mb_num;
436 
437  // =============================================================
438  // Things below are not used in the MB or more inner code
439 
442 
443  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()
444 
445  /**
446  * Used to parse AVC variant of H.264
447  */
448  int is_avc; ///< this flag is != 0 if codec is avc1
449  int nal_length_size; ///< Number of bytes used for nal length (1, 2 or 4)
450 
451  int bit_depth_luma; ///< luma bit depth from sps to detect changes
452  int chroma_format_idc; ///< chroma format from sps to detect changes
453 
455 
456  uint16_t *slice_table_base;
457 
459 
467  int poc_offset; ///< PicOrderCnt_offset from SMPTE RDD-2006
468 
469  /**
470  * memory management control operations buffer.
471  */
473  int nb_mmco;
476 
477  int long_ref_count; ///< number of actual long term references
478  int short_ref_count; ///< number of actual short term references
479 
480  /**
481  * @name Members for slice based multithreading
482  * @{
483  */
484  /**
485  * current slice number, used to initialize slice_num of each thread/context
486  */
488 
489  /** @} */
490 
491  /**
492  * Complement sei_pic_struct
493  * SEI_PIC_STRUCT_TOP_BOTTOM and SEI_PIC_STRUCT_BOTTOM_TOP indicate interlaced frames.
494  * However, soft telecined frames may have these values.
495  * This is used in an attempt to flag soft telecine progressive.
496  */
498 
499  /**
500  * Are the SEI recovery points looking valid.
501  */
503 
504  /**
505  * recovery_frame is the frame_num at which the next frame should
506  * be fully constructed.
507  *
508  * Set to -1 when not expecting a recovery point.
509  */
511 
512 /**
513  * We have seen an IDR, so all the following frames in coded order are correctly
514  * decodable.
515  */
516 #define FRAME_RECOVERED_IDR (1 << 0)
517 /**
518  * Sufficient number of frames have been decoded since a SEI recovery point,
519  * so all the following frames in presentation order are correct.
520  */
521 #define FRAME_RECOVERED_SEI (1 << 1)
522 
523  int frame_recovered; ///< Initial frame has been completely recovered
524 
526 
528 
529  /* for frame threading, this is set to 1
530  * after finish_setup() has been called, so we cannot modify
531  * some context properties (which are supposed to stay constant between
532  * slices) anymore */
534 
537  int16_t slice_row[MAX_SLICES]; ///< to detect when MAX_SLICES is too low
538 
539  /* original AVCodecContext dimensions, used to handle container
540  * cropping */
543 
546  int16_t *dc_val_base;
547 
549 
554  int ref2frm[MAX_SLICES][2][64]; ///< reference to frame number lists, used in the loop filter, the first 2 are for -2,-1
555 } H264Context;
556 
557 extern const uint16_t ff_h264_mb_sizes[4];
558 
559 /**
560  * Reconstruct bitstream slice_type.
561  */
563 
564 /**
565  * Allocate tables.
566  * needs width/height
567  */
569 
573 
574 /**
575  * Execute the reference picture marking (memory management control operations).
576  */
578 
580  const H2645NAL *nal, void *logctx);
581 
583 void ff_h264_decode_init_vlc(void);
584 
585 /**
586  * Decode a macroblock
587  * @return 0 if OK, ER_AC_ERROR / ER_DC_ERROR / ER_MV_ERROR on error
588  */
590 
591 /**
592  * Decode a CABAC coded macroblock
593  * @return 0 if OK, ER_AC_ERROR / ER_DC_ERROR / ER_MV_ERROR on error
594  */
596 
598 
602  int *mb_type);
603 
604 void ff_h264_filter_mb_fast(const H264Context *h, H264SliceContext *sl, int mb_x, int mb_y,
605  uint8_t *img_y, uint8_t *img_cb, uint8_t *img_cr,
606  unsigned int linesize, unsigned int uvlinesize);
607 void ff_h264_filter_mb(const H264Context *h, H264SliceContext *sl, int mb_x, int mb_y,
608  uint8_t *img_y, uint8_t *img_cb, uint8_t *img_cr,
609  unsigned int linesize, unsigned int uvlinesize);
610 
611 /*
612  * o-o o-o
613  * / / /
614  * o-o o-o
615  * ,---'
616  * o-o o-o
617  * / / /
618  * o-o o-o
619  */
620 
621 /* Scan8 organization:
622  * 0 1 2 3 4 5 6 7
623  * 0 DY y y y y y
624  * 1 y Y Y Y Y
625  * 2 y Y Y Y Y
626  * 3 y Y Y Y Y
627  * 4 y Y Y Y Y
628  * 5 DU u u u u u
629  * 6 u U U U U
630  * 7 u U U U U
631  * 8 u U U U U
632  * 9 u U U U U
633  * 10 DV v v v v v
634  * 11 v V V V V
635  * 12 v V V V V
636  * 13 v V V V V
637  * 14 v V V V V
638  * DY/DU/DV are for luma/chroma DC.
639  */
640 
641 #define LUMA_DC_BLOCK_INDEX 48
642 #define CHROMA_DC_BLOCK_INDEX 49
643 
644 /**
645  * Get the chroma qp.
646  */
647 static av_always_inline int get_chroma_qp(const PPS *pps, int t, int qscale)
648 {
649  return pps->chroma_qp_table[t][qscale];
650 }
651 
652 /**
653  * Get the predicted intra4x4 prediction mode.
654  */
656  H264SliceContext *sl, int n)
657 {
658  const int index8 = scan8[n];
659  const int left = sl->intra4x4_pred_mode_cache[index8 - 1];
660  const int top = sl->intra4x4_pred_mode_cache[index8 - 8];
661  const int min = FFMIN(left, top);
662 
663  ff_tlog(h->avctx, "mode:%d %d min:%d\n", left, top, min);
664 
665  if (min < 0)
666  return DC_PRED;
667  else
668  return min;
669 }
670 
672  H264SliceContext *sl)
673 {
674  int8_t *i4x4 = sl->intra4x4_pred_mode + h->mb2br_xy[sl->mb_xy];
675  int8_t *i4x4_cache = sl->intra4x4_pred_mode_cache;
676 
677  AV_COPY32(i4x4, i4x4_cache + 4 + 8 * 4);
678  i4x4[4] = i4x4_cache[7 + 8 * 3];
679  i4x4[5] = i4x4_cache[7 + 8 * 2];
680  i4x4[6] = i4x4_cache[7 + 8 * 1];
681 }
682 
684  H264SliceContext *sl)
685 {
686  const int mb_xy = sl->mb_xy;
687  uint8_t *nnz = h->non_zero_count[mb_xy];
688  uint8_t *nnz_cache = sl->non_zero_count_cache;
689 
690  AV_COPY32(&nnz[ 0], &nnz_cache[4 + 8 * 1]);
691  AV_COPY32(&nnz[ 4], &nnz_cache[4 + 8 * 2]);
692  AV_COPY32(&nnz[ 8], &nnz_cache[4 + 8 * 3]);
693  AV_COPY32(&nnz[12], &nnz_cache[4 + 8 * 4]);
694  AV_COPY32(&nnz[16], &nnz_cache[4 + 8 * 6]);
695  AV_COPY32(&nnz[20], &nnz_cache[4 + 8 * 7]);
696  AV_COPY32(&nnz[32], &nnz_cache[4 + 8 * 11]);
697  AV_COPY32(&nnz[36], &nnz_cache[4 + 8 * 12]);
698 
699  if (!h->chroma_y_shift) {
700  AV_COPY32(&nnz[24], &nnz_cache[4 + 8 * 8]);
701  AV_COPY32(&nnz[28], &nnz_cache[4 + 8 * 9]);
702  AV_COPY32(&nnz[40], &nnz_cache[4 + 8 * 13]);
703  AV_COPY32(&nnz[44], &nnz_cache[4 + 8 * 14]);
704  }
705 }
706 
708  H264SliceContext *sl,
709  int b_stride,
710  int b_xy, int b8_xy,
711  int mb_type, int list)
712 {
713  int16_t(*mv_dst)[2] = &h->cur_pic.motion_val[list][b_xy];
714  int16_t(*mv_src)[2] = &sl->mv_cache[list][scan8[0]];
715  AV_COPY128(mv_dst + 0 * b_stride, mv_src + 8 * 0);
716  AV_COPY128(mv_dst + 1 * b_stride, mv_src + 8 * 1);
717  AV_COPY128(mv_dst + 2 * b_stride, mv_src + 8 * 2);
718  AV_COPY128(mv_dst + 3 * b_stride, mv_src + 8 * 3);
719  if (CABAC(h)) {
720  uint8_t (*mvd_dst)[2] = &sl->mvd_table[list][FMO ? 8 * sl->mb_xy
721  : h->mb2br_xy[sl->mb_xy]];
722  uint8_t(*mvd_src)[2] = &sl->mvd_cache[list][scan8[0]];
723  if (IS_SKIP(mb_type)) {
724  AV_ZERO128(mvd_dst);
725  } else {
726  AV_COPY64(mvd_dst, mvd_src + 8 * 3);
727  AV_COPY16(mvd_dst + 3 + 3, mvd_src + 3 + 8 * 0);
728  AV_COPY16(mvd_dst + 3 + 2, mvd_src + 3 + 8 * 1);
729  AV_COPY16(mvd_dst + 3 + 1, mvd_src + 3 + 8 * 2);
730  }
731  }
732 
733  {
734  int8_t *ref_index = &h->cur_pic.ref_index[list][b8_xy];
735  int8_t *ref_cache = sl->ref_cache[list];
736  ref_index[0 + 0 * 2] = ref_cache[scan8[0]];
737  ref_index[1 + 0 * 2] = ref_cache[scan8[4]];
738  ref_index[0 + 1 * 2] = ref_cache[scan8[8]];
739  ref_index[1 + 1 * 2] = ref_cache[scan8[12]];
740  }
741 }
742 
744  H264SliceContext *sl,
745  int mb_type)
746 {
747  const int b_stride = h->b_stride;
748  const int b_xy = 4 * sl->mb_x + 4 * sl->mb_y * h->b_stride; // try mb2b(8)_xy
749  const int b8_xy = 4 * sl->mb_xy;
750 
751  if (USES_LIST(mb_type, 0)) {
752  write_back_motion_list(h, sl, b_stride, b_xy, b8_xy, mb_type, 0);
753  } else {
754  fill_rectangle(&h->cur_pic.ref_index[0][b8_xy],
755  2, 2, 2, (uint8_t)LIST_NOT_USED, 1);
756  }
757  if (USES_LIST(mb_type, 1))
758  write_back_motion_list(h, sl, b_stride, b_xy, b8_xy, mb_type, 1);
759 
760  if (sl->slice_type_nos == AV_PICTURE_TYPE_B && CABAC(h)) {
761  if (IS_8X8(mb_type)) {
762  uint8_t *direct_table = &h->direct_table[4 * sl->mb_xy];
763  direct_table[1] = sl->sub_mb_type[1] >> 1;
764  direct_table[2] = sl->sub_mb_type[2] >> 1;
765  direct_table[3] = sl->sub_mb_type[3] >> 1;
766  }
767  }
768 }
769 
771 {
772  if (h->ps.sps->direct_8x8_inference_flag)
773  return !(AV_RN64A(sl->sub_mb_type) &
775  0x0001000100010001ULL));
776  else
777  return !(AV_RN64A(sl->sub_mb_type) &
779  0x0001000100010001ULL));
780 }
781 
782 int ff_h264_field_end(H264Context *h, H264SliceContext *sl, int in_setup);
783 
787 
789 
790 void ff_h264_draw_horiz_band(const H264Context *h, H264SliceContext *sl, int y, int height);
791 
792 /**
793  * Submit a slice for decoding.
794  *
795  * Parse the slice header, starting a new field/frame if necessary. If any
796  * slices are queued for the previous field, they are decoded.
797  */
801  const AVCodecContext *src);
803  const AVCodecContext *src);
804 
806 
808 
810 
811 #endif /* AVCODEC_H264DEC_H */
H264Context::missing_fields
int missing_fields
Definition: h264dec.h:527
H264Context::context_initialized
int context_initialized
Definition: h264dec.h:359
H264Context::mb_num
int mb_num
Definition: h264dec.h:435
MMCO::opcode
MMCOOpcode opcode
Definition: h264dec.h:102
H264Context::nb_slice_ctx_queued
int nb_slice_ctx_queued
Definition: h264dec.h:346
H264Context::picture_intra_only
int picture_intra_only
Definition: h264dec.h:377
IS_8X8
#define IS_8X8(a)
Definition: mpegutils.h:82
H264SliceContext::mb_xy
int mb_xy
Definition: h264dec.h:224
CABAC
#define CABAC(h)
Definition: h264dec.h:88
H264SliceContext::nb_ref_modifications
int nb_ref_modifications[2]
Definition: h264dec.h:269
MMCO::long_arg
int long_arg
index, pic_num, or num long refs depending on opcode
Definition: h264dec.h:104
H264Context::picture_structure
int picture_structure
Definition: h264dec.h:405
H264Context::slice_table_base
uint16_t * slice_table_base
Definition: h264dec.h:456
H264SliceContext::ref_cache
int8_t ref_cache[2][5 *8]
Definition: h264dec.h:292
H264SliceContext::topleft_samples_available
unsigned int topleft_samples_available
Definition: h264dec.h:214
H264Context::explicit_ref_marking
int explicit_ref_marking
Definition: h264dec.h:475
H264Context::pixel_shift
int pixel_shift
0 for 8-bit H.264, 1 for high-bit-depth H.264
Definition: h264dec.h:350
H264SliceContext::max_pic_num
int max_pic_num
Definition: h264dec.h:324
h2645_parse.h
H264SliceContext::nb_mmco
int nb_mmco
Definition: h264dec.h:315
cabac.h
H264SliceContext::intra_pcm_ptr
const uint8_t * intra_pcm_ptr
Definition: h264dec.h:273
ff_h264_update_thread_context_for_user
int ff_h264_update_thread_context_for_user(AVCodecContext *dst, const AVCodecContext *src)
Definition: h264_slice.c:458
H264Picture::poc
int poc
frame POC
Definition: h264dec.h:129
H264Context::cbp_table
uint16_t * cbp_table
Definition: h264dec.h:411
H264Picture::f
AVFrame * f
Definition: h264dec.h:108
mem_internal.h
H264Context::h264dsp
H264DSPContext h264dsp
Definition: h264dec.h:334
H264Context::ref_index_pool
AVBufferPool * ref_index_pool
Definition: h264dec.h:553
AVBufferPool
The buffer pool.
Definition: buffer_internal.h:88
H264Context::slice_ctx
H264SliceContext * slice_ctx
Definition: h264dec.h:344
H264Context::flags
int flags
Definition: h264dec.h:360
H264Ref
Definition: h264dec.h:159
H264Picture::ref_count
int ref_count[2][2]
number of entries in ref_poc (FIXME need per slice)
Definition: h264dec.h:137
H264SliceContext::topright_mb_xy
int topright_mb_xy
Definition: h264dec.h:203
H264Picture::ref_index
int8_t * ref_index[2]
Definition: h264dec.h:126
H264SliceContext::mb
int16_t mb[16 *48 *2]
Definition: h264dec.h:299
MB_TYPE_16x8
#define MB_TYPE_16x8
Definition: mpegutils.h:48
H264SliceContext::mvd_table
uint8_t(*[2] mvd_table)[2]
Definition: h264dec.h:305
H264Context::b_stride
int b_stride
Definition: h264dec.h:399
H264Context::h274db
H274FilmGrainDatabase h274db
Definition: h264dec.h:337
H264Picture::pps
const PPS * pps
Definition: h264dec.h:153
ff_h264_set_erpic
void ff_h264_set_erpic(ERPicture *dst, H264Picture *src)
Definition: h264_picture.c:196
H264Context::motion_val_pool
AVBufferPool * motion_val_pool
Definition: h264dec.h:552
ff_h264_flush_change
void ff_h264_flush_change(H264Context *h)
Definition: h264dec.c:439
h264_parse.h
AVFrame
This structure describes decoded (raw) audio or video data.
Definition: frame.h:330
H264Context::recovery_frame
int recovery_frame
recovery_frame is the frame_num at which the next frame should be fully constructed.
Definition: h264dec.h:510
H264SliceContext::topleft_partition
int topleft_partition
Definition: h264dec.h:212
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:609
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:1920
H264SliceContext::val
uint32_t val
Definition: h264dec.h:267
H264Ref::pic_id
int pic_id
Definition: h264dec.h:165
H264SliceContext::ref_count
unsigned int ref_count[2]
num_ref_idx_l0/1_active_minus1 + 1
Definition: h264dec.h:260
H264Context::nal_unit_type
int nal_unit_type
Definition: h264dec.h:441
H264SliceContext::left_block
const uint8_t * left_block
Definition: h264dec.h:211
H264Picture::qscale_table
int8_t * qscale_table
Definition: h264dec.h:114
H264SliceContext::left_mb_xy
int left_mb_xy[LEFT_MBS]
Definition: h264dec.h:204
ERContext
Definition: error_resilience.h:53
H264Context::nb_mmco
int nb_mmco
Definition: h264dec.h:473
H264Context::setup_finished
int setup_finished
Definition: h264dec.h:533
H264Picture::ref_index_buf
AVBufferRef * ref_index_buf[2]
Definition: h264dec.h:125
H264Context::field_scan8x8_cavlc
uint8_t field_scan8x8_cavlc[64]
Definition: h264dec.h:424
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:296
ff_h264_draw_horiz_band
void ff_h264_draw_horiz_band(const H264Context *h, H264SliceContext *sl, int y, int height)
Definition: h264dec.c:99
ff_h264_alloc_tables
int ff_h264_alloc_tables(H264Context *h)
Allocate tables.
Definition: h264dec.c:179
H264Context::dc_val_base
int16_t * dc_val_base
Definition: h264dec.h:546
H264SliceContext::is_complex
int is_complex
Definition: h264dec.h:231
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:502
H264Context::field_scan8x8_q0
uint8_t field_scan8x8_q0[64]
Definition: h264dec.h:429
mpegutils.h
H264Picture::invalid_gap
int invalid_gap
Definition: h264dec.h:148
MMCOOpcode
MMCOOpcode
Memory management control operation opcode.
Definition: h264_parse.h:59
H264Picture::pps_buf
AVBufferRef * pps_buf
Definition: h264dec.h:152
H264SliceContext::dist_scale_factor
int dist_scale_factor[32]
Definition: h264dec.h:252
H264Context::height_from_caller
int height_from_caller
Definition: h264dec.h:542
ff_h264_ref_picture
int ff_h264_ref_picture(H264Context *h, H264Picture *dst, H264Picture *src)
Definition: h264_picture.c:92
H264SliceContext::mb_x
int mb_x
Definition: h264dec.h:223
ERPicture
Definition: error_resilience.h:41
H264Picture::frame_num
int frame_num
frame_num (raw frame_num from slice header)
Definition: h264dec.h:130
H264SliceContext::next_slice_idx
int next_slice_idx
Definition: h264dec.h:229
H264SliceContext
Definition: h264dec.h:170
H264SliceContext::mb_padding
int16_t mb_padding[256 *2]
Definition: h264dec.h:303
H264Context::cur_pic
H264Picture cur_pic
Definition: h264dec.h:341
H264SliceContext::mv_cache
int16_t mv_cache[2][5 *8][2]
Motion vector cache.
Definition: h264dec.h:291
H264Context::chroma_pred_mode_table
uint8_t * chroma_pred_mode_table
Definition: h264dec.h:414
h264qpel.h
H264SliceContext::mvd_cache
uint8_t mvd_cache[2][5 *8][2]
Definition: h264dec.h:293
H264SliceContext::map_col_to_list0
int map_col_to_list0[2][16+32]
Definition: h264dec.h:254
H264SliceContext::map_col_to_list0_field
int map_col_to_list0_field[2][2][16+32]
Definition: h264dec.h:255
ff_h264_remove_all_refs
void ff_h264_remove_all_refs(H264Context *h)
Definition: h264_refs.c:564
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:647
H264Picture::mmco_reset
int mmco_reset
MMCO_RESET set this 1.
Definition: h264dec.h:131
H264Picture::ref_poc
int ref_poc[2][2][32]
POCs of the frames/fields used as reference (FIXME need per slice)
Definition: h264dec.h:136
H264Context::cur_pic_ptr
H264Picture * cur_pic_ptr
Definition: h264dec.h:340
GetBitContext
Definition: get_bits.h:107
H264Context::mb_stride
int mb_stride
Definition: h264dec.h:434
USES_LIST
#define USES_LIST(a, list)
Definition: mpegutils.h:92
ff_h264_execute_decode_slices
int ff_h264_execute_decode_slices(H264Context *h)
Call decode_slice() for each context.
Definition: h264_slice.c:2726
H264Context::mb_y
int mb_y
Definition: h264dec.h:432
H264Context::nb_slice_ctx
int nb_slice_ctx
Definition: h264dec.h:345
H264Picture::mb_stride
int mb_stride
Definition: h264dec.h:156
scan8
static const uint8_t scan8[16 *3+3]
Definition: h264_parse.h:40
H264SliceContext::deblocking_filter
int deblocking_filter
disable_deblocking_filter_idc with 1 <-> 0
Definition: h264dec.h:186
H264Picture::f_grain
AVFrame * f_grain
Definition: h264dec.h:111
H264SliceContext::picture_structure
int picture_structure
Definition: h264dec.h:233
H264SliceContext::direct_spatial_mv_pred
int direct_spatial_mv_pred
Definition: h264dec.h:244
H264Context::avctx
AVCodecContext * avctx
Definition: h264dec.h:332
ff_h264_unref_picture
void ff_h264_unref_picture(H264Context *h, H264Picture *pic)
Definition: h264_picture.c:36
H264Ref::data
uint8_t * data[3]
Definition: h264dec.h:160
H264SliceContext::slice_num
int slice_num
Definition: h264dec.h:175
H264Context::chroma_format_idc
int chroma_format_idc
chroma format from sps to detect changes
Definition: h264dec.h:452
H264Context::mmco
MMCO mmco[H264_MAX_MMCO_COUNT]
memory management control operations buffer.
Definition: h264dec.h:472
H264Context::qscale_table_pool
AVBufferPool * qscale_table_pool
Definition: h264dec.h:550
H264Picture::mbaff
int mbaff
1 -> MBAFF frame 0-> not MBAFF
Definition: h264dec.h:138
H264Context::width
int width
Definition: h264dec.h:353
H264SliceContext::topleft_mb_xy
int topleft_mb_xy
Definition: h264dec.h:201
intreadwrite.h
H264_MAX_MMCO_COUNT
@ H264_MAX_MMCO_COUNT
Definition: h264.h:92
H264Context::postpone_filter
int postpone_filter
Definition: h264dec.h:367
H264Context::short_ref_count
int short_ref_count
number of actual short term references
Definition: h264dec.h:478
H264SliceContext::next_mb_skipped
int next_mb_skipped
Definition: h264dec.h:193
H264Context::crop_top
int crop_top
Definition: h264dec.h:381
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:655
H264_MAX_DPB_FRAMES
@ H264_MAX_DPB_FRAMES
Definition: h264.h:76
H264Context::zigzag_scan8x8
uint8_t zigzag_scan8x8[64]
Definition: h264dec.h:420
H264Ref::parent
H264Picture * parent
Definition: h264dec.h:167
H264Context::er
ERContext er
Definition: h264dec.h:545
IS_SKIP
#define IS_SKIP(a)
Definition: mpegutils.h:74
H264SliceContext::slice_alpha_c0_offset
int slice_alpha_c0_offset
Definition: h264dec.h:187
H264Context::crop_bottom
int crop_bottom
Definition: h264dec.h:382
ff_h264_direct_dist_scale_factor
void ff_h264_direct_dist_scale_factor(const H264Context *const h, H264SliceContext *sl)
Definition: h264_direct.c:61
H264Context::last_pocs
int last_pocs[H264_MAX_DPB_FRAMES]
Definition: h264dec.h:464
ff_h264_get_slice_type
int ff_h264_get_slice_type(const H264SliceContext *sl)
Reconstruct bitstream slice_type.
Definition: h264_slice.c:2144
H264SliceContext::slice_type
int slice_type
Definition: h264dec.h:176
MMCO::short_pic_num
int short_pic_num
pic_num without wrapping (pic_num & max_pic_num)
Definition: h264dec.h:103
H264SliceContext::resync_mb_x
int resync_mb_x
Definition: h264dec.h:225
H264Picture::sei_recovery_frame_cnt
int sei_recovery_frame_cnt
Definition: h264dec.h:149
H264Context::enable_er
int enable_er
Definition: h264dec.h:544
ff_h264_init_cabac_states
void ff_h264_init_cabac_states(const H264Context *h, H264SliceContext *sl)
Definition: h264_cabac.c:1262
H264Context::mvd_table
uint8_t(*[2] mvd_table)[2]
Definition: h264dec.h:415
H264SliceContext::curr_pic_num
int curr_pic_num
Definition: h264dec.h:323
MB_TYPE_8x16
#define MB_TYPE_8x16
Definition: mpegutils.h:49
H264SliceContext::topright_samples_available
unsigned int topright_samples_available
Definition: h264dec.h:216
H264Context::last_pic_for_ec
H264Picture last_pic_for_ec
Definition: h264dec.h:342
H264Context::mb_type_pool
AVBufferPool * mb_type_pool
Definition: h264dec.h:551
H264Context::zigzag_scan8x8_cavlc
uint8_t zigzag_scan8x8_cavlc[64]
Definition: h264dec.h:421
H264Context::non_zero_count
uint8_t(* non_zero_count)[48]
Definition: h264dec.h:387
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:116
H264Context::hpc
H264PredContext hpc
Definition: h264dec.h:385
AV_COPY128
#define AV_COPY128(d, s)
Definition: intreadwrite.h:609
H264SEIContext
Definition: h264_sei.h:119
AV_COPY64
#define AV_COPY64(d, s)
Definition: intreadwrite.h:605
H264SliceContext::edge_emu_buffer
uint8_t * edge_emu_buffer
Definition: h264dec.h:276
H264Context::pkt
H2645Packet pkt
Definition: h264dec.h:348
H264Context::next_outputed_poc
int next_outputed_poc
Definition: h264dec.h:466
H264Context::long_ref_count
int long_ref_count
number of actual long term references
Definition: h264dec.h:477
H264Ref::linesize
int linesize[3]
Definition: h264dec.h:161
H264Context::mb_width
int mb_width
Definition: h264dec.h:433
MB_TYPE_8x8
#define MB_TYPE_8x8
Definition: mpegutils.h:50
H264SliceContext::chroma_qp
int chroma_qp[2]
Definition: h264dec.h:181
h264dsp.h
PPS
Picture parameter set.
Definition: h264_ps.h:105
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:554
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:422
H264SliceContext::top_samples_available
unsigned int top_samples_available
Definition: h264dec.h:215
H264Context::h264qpel
H264QpelContext h264qpel
Definition: h264dec.h:336
H264Picture::mb_height
int mb_height
Definition: h264dec.h:155
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:300
H264SliceContext::qscale
int qscale
Definition: h264dec.h:180
write_back_motion
static av_always_inline void write_back_motion(const H264Context *h, H264SliceContext *sl, int mb_type)
Definition: h264dec.h:743
h274.h
AV_ZERO128
#define AV_ZERO128(d)
Definition: intreadwrite.h:637
H264SliceContext::top_borders_allocated
int top_borders_allocated[2]
Definition: h264dec.h:280
ff_h264_mb_sizes
const uint16_t ff_h264_mb_sizes[4]
Definition: h264dec.c:55
H264Context::delayed_pic
H264Picture * delayed_pic[H264_MAX_DPB_FRAMES+2]
Definition: h264dec.h:463
H264SliceContext::mb_skip_run
int mb_skip_run
Definition: h264dec.h:230
h264_ps.h
H264SliceContext::cabac_state
uint8_t cabac_state[1024]
Definition: h264dec.h:311
H264SliceContext::top_type
int top_type
Definition: h264dec.h:207
H264Context::bit_depth_luma
int bit_depth_luma
luma bit depth from sps to detect changes
Definition: h264dec.h:451
get_dct8x8_allowed
static av_always_inline int get_dct8x8_allowed(const H264Context *h, H264SliceContext *sl)
Definition: h264dec.h:770
H264Context::frame_recovered
int frame_recovered
Initial frame has been completely recovered.
Definition: h264dec.h:523
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:443
H264Context::next_output_pic
H264Picture * next_output_pic
Definition: h264dec.h:465
H264SliceContext::resync_mb_y
int resync_mb_y
Definition: h264dec.h:226
ff_h264_pred_direct_motion
void ff_h264_pred_direct_motion(const H264Context *const h, H264SliceContext *sl, int *mb_type)
Definition: h264_direct.c:720
H264Context::picture_idr
int picture_idr
Definition: h264dec.h:372
ff_h264_direct_ref_list_init
void ff_h264_direct_ref_list_init(const H264Context *const h, H264SliceContext *sl)
Definition: h264_direct.c:120
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:133
H264SliceContext::cabac
CABACContext cabac
Cabac.
Definition: h264dec.h:310
H264SliceContext::redundant_pic_count
int redundant_pic_count
Definition: h264dec.h:237
H264SliceContext::intra4x4_pred_mode_cache
int8_t intra4x4_pred_mode_cache[5 *8]
Definition: h264dec.h:198
H264SliceContext::ref_modifications
struct H264SliceContext::@78 ref_modifications[2][32]
H264Context::long_ref
H264Picture * long_ref[32]
Definition: h264dec.h:462
H274FilmGrainDatabase
Definition: h274.h:34
H264Context::mb_aff_frame
int mb_aff_frame
Definition: h264dec.h:404
H264Context::crop_left
int crop_left
Definition: h264dec.h:379
H264Picture::reference
int reference
Definition: h264dec.h:146
H264Context::poc
H264POCContext poc
Definition: h264dec.h:458
H264Context::vdsp
VideoDSPContext vdsp
Definition: h264dec.h:333
LEFT_MBS
#define LEFT_MBS
Definition: h264dec.h:69
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:395
DECLARE_ALIGNED
#define DECLARE_ALIGNED(n, t, v)
Definition: mem_internal.h:87
rectangle.h
H264SliceContext::mb_uvlinesize
ptrdiff_t mb_uvlinesize
Definition: h264dec.h:221
H264SliceContext::pwt
H264PredWeightTable pwt
Definition: h264dec.h:190
H264Picture::tf
ThreadFrame tf
Definition: h264dec.h:109
H264Picture::mb_type
uint32_t * mb_type
Definition: h264dec.h:120
H264SliceContext::intra16x16_pred_mode
int intra16x16_pred_mode
Definition: h264dec.h:196
H264Context::has_recovery_point
int has_recovery_point
Definition: h264dec.h:525
H264Picture::recovered
int recovered
picture at IDR or recovery point + recovery count
Definition: h264dec.h:147
H264Context::zigzag_scan8x8_cavlc_q0
uint8_t zigzag_scan8x8_cavlc_q0[64]
Definition: h264dec.h:427
H264SliceContext::top_mb_xy
int top_mb_xy
Definition: h264dec.h:202
H264SliceContext::qp_thresh
int qp_thresh
QP threshold to skip loopfilter.
Definition: h264dec.h:182
H264Context::chroma_x_shift
int chroma_x_shift
Definition: h264dec.h:354
H264Context::sei
H264SEIContext sei
Definition: h264dec.h:548
H2645NAL
Definition: h2645_parse.h:34
H264SliceContext::top_borders
uint8_t(*[2] top_borders)[(16 *3) *2]
Definition: h264dec.h:277
h264chroma.h
AV_RN64A
#define AV_RN64A(p)
Definition: intreadwrite.h:530
H264Context::direct_table
uint8_t * direct_table
Definition: h264dec.h:416
H264SliceContext::cbp
int cbp
Definition: h264dec.h:248
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:497
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:2019
H264SliceContext::left_type
int left_type[LEFT_MBS]
Definition: h264dec.h:209
buffer.h
H264SliceContext::mb_y
int mb_y
Definition: h264dec.h:223
height
#define height
H264SliceContext::explicit_ref_marking
int explicit_ref_marking
Definition: h264dec.h:316
H264Context::mmco_reset
int mmco_reset
Definition: h264dec.h:474
H264SliceContext::uvlinesize
ptrdiff_t uvlinesize
Definition: h264dec.h:219
H264SliceContext::slice_type_nos
int slice_type_nos
S free slice type (SI/SP are remapped to I/P)
Definition: h264dec.h:177
H264Context::ps
H264ParamSets ps
Definition: h264dec.h:454
H264SliceContext::delta_poc_bottom
int delta_poc_bottom
Definition: h264dec.h:321
H264Context::field_scan_q0
uint8_t field_scan_q0[16]
Definition: h264dec.h:428
H264Context::height
int height
Definition: h264dec.h:353
H264SliceContext::mb_mbaff
int mb_mbaff
mb_aff_frame && mb_field_decoding_flag
Definition: h264dec.h:235
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:716
H264Context::default_ref
H264Ref default_ref[2]
Definition: h264dec.h:460
AV_COPY16
#define AV_COPY16(d, s)
Definition: intreadwrite.h:597
h264_sei.h
LIST_NOT_USED
#define LIST_NOT_USED
Definition: h264dec.h:389
H264Picture::field_picture
int field_picture
whether or not picture was encoded in separate fields
Definition: h264dec.h:139
H264Context::poc_offset
int poc_offset
PicOrderCnt_offset from SMPTE RDD-2006.
Definition: h264dec.h:467
H264Context::intra4x4_pred_mode
int8_t * intra4x4_pred_mode
Definition: h264dec.h:384
H264SliceContext::poc_lsb
int poc_lsb
Definition: h264dec.h:320
H264SliceContext::chroma_pred_mode
int chroma_pred_mode
Definition: h264dec.h:195
H264SliceContext::first_mb_addr
unsigned int first_mb_addr
Definition: h264dec.h:227
H264SliceContext::top_cbp
int top_cbp
Definition: h264dec.h:249
H264SliceContext::topleft_type
int topleft_type
Definition: h264dec.h:206
ff_h264_field_end
int ff_h264_field_end(H264Context *h, H264SliceContext *sl, int in_setup)
Definition: h264_picture.c:219
ff_h264_free_tables
void ff_h264_free_tables(H264Context *h)
Definition: h264dec.c:134
H264Picture::needs_fg
int needs_fg
whether picture needs film grain synthesis (see f_grain)
Definition: h264dec.h:150
H264Context
H264Context.
Definition: h264dec.h:330
ff_h264_decode_mb_cavlc
int ff_h264_decode_mb_cavlc(const H264Context *h, H264SliceContext *sl)
Decode a macroblock.
Definition: h264_cavlc.c:695
H264SliceContext::frame_num
int frame_num
Definition: h264dec.h:318
H264POCContext
Definition: h264_parse.h:82
H264SliceContext::col_fieldoff
int col_fieldoff
Definition: h264dec.h:246
H264SliceContext::mb_linesize
ptrdiff_t mb_linesize
may be equal to s->linesize or s->linesize * 2, for mbaff
Definition: h264dec.h:220
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:440
H264Context::coded_picture_number
int coded_picture_number
Definition: h264dec.h:357
H264Picture::hwaccel_priv_buf
AVBufferRef * hwaccel_priv_buf
Definition: h264dec.h:122
AV_COPY32
#define AV_COPY32(d, s)
Definition: intreadwrite.h:601
H264Context::mb_height
int mb_height
Definition: h264dec.h:433
ff_h264_slice_context_init
void ff_h264_slice_context_init(H264Context *h, H264SliceContext *sl)
Init slice context.
Definition: h264dec.c:258
H264Context::cur_chroma_format_idc
int cur_chroma_format_idc
Definition: h264dec.h:535
H264QpelContext
Definition: h264qpel.h:27
H264Context::crop_right
int crop_right
Definition: h264dec.h:380
H264SliceContext::list_count
unsigned int list_count
Definition: h264dec.h:261
H264Context::field_scan8x8_cavlc_q0
uint8_t field_scan8x8_cavlc_q0[64]
Definition: h264dec.h:430
H264Context::list_counts
uint8_t * list_counts
Array of list_count per MB specifying the slice type.
Definition: h264dec.h:408
H264SliceContext::h264
const struct H264Context * h264
Definition: h264dec.h:171
H264Context::workaround_bugs
int workaround_bugs
Definition: h264dec.h:361
MAX_SLICES
#define MAX_SLICES
The maximum number of slices supported by the decoder.
Definition: h264dec.h:62
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:707
H264Context::mb2br_xy
uint32_t * mb2br_xy
Definition: h264dec.h:398
FMO
#define FMO
Definition: h264dec.h:56
H264SliceContext::last_qscale_diff
int last_qscale_diff
Definition: h264dec.h:183
ff_h264_build_ref_list
int ff_h264_build_ref_list(H264Context *h, H264SliceContext *sl)
Definition: h264_refs.c:298
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:537
H264SliceContext::pps_id
unsigned int pps_id
Definition: h264dec.h:271
H264SliceContext::linesize
ptrdiff_t linesize
Definition: h264dec.h:219
H264Context::h264chroma
H264ChromaContext h264chroma
Definition: h264dec.h:335
H264SliceContext::slice_beta_offset
int slice_beta_offset
Definition: h264dec.h:188
AVCodecContext
main external API structure.
Definition: avcodec.h:426
ThreadFrame
Definition: threadframe.h:27
H264SliceContext::bipred_scratchpad
uint8_t * bipred_scratchpad
Definition: h264dec.h:275
H264Picture::field_poc
int field_poc[2]
top/bottom POC
Definition: h264dec.h:128
H264Context::first_field
int first_field
Definition: h264dec.h:406
AV_PICTURE_TYPE_B
@ AV_PICTURE_TYPE_B
Bi-dir predicted.
Definition: avutil.h:276
H264SliceContext::mmco
MMCO mmco[H264_MAX_MMCO_COUNT]
Definition: h264dec.h:314
error_resilience.h
H264Context::zigzag_scan8x8_q0
uint8_t zigzag_scan8x8_q0[64]
Definition: h264dec.h:426
H264Picture::mb_width
int mb_width
Definition: h264dec.h:155
fill_rectangle
static void fill_rectangle(int x, int y, int w, int h)
Definition: ffplay.c:814
H264Picture
Definition: h264dec.h:107
H264ParamSets
Definition: h264_ps.h:137
H264Context::zigzag_scan
uint8_t zigzag_scan[16]
Definition: h264dec.h:419
H264Context::width_from_caller
int width_from_caller
Definition: h264dec.h:541
H264SliceContext::left_cbp
int left_cbp
Definition: h264dec.h:250
ff_h264_decode_init_vlc
void ff_h264_decode_init_vlc(void)
Definition: h264_cavlc.c:325
H264PredWeightTable
Definition: h264_parse.h:69
H264SliceContext::col_parity
int col_parity
Definition: h264dec.h:245
H264Context::slice_table
uint16_t * slice_table
slice_table_base + 2*mb_stride + 1
Definition: h264dec.h:401
VideoDSPContext
Definition: videodsp.h:40
H264Picture::mb_type_buf
AVBufferRef * mb_type_buf
Definition: h264dec.h:119
H264PredContext
Context for storing H.264 prediction functions.
Definition: h264pred.h:94
H264SliceContext::ref_list
H264Ref ref_list[2][48]
0..15: frame refs, 16..47: mbaff field refs.
Definition: h264dec.h:262
H264SliceContext::non_zero_count_cache
uint8_t non_zero_count_cache[15 *8]
non zero coeff count cache.
Definition: h264dec.h:286
H264SliceContext::dist_scale_factor_field
int dist_scale_factor_field[2][32]
Definition: h264dec.h:253
H264SliceContext::direct_cache
uint8_t direct_cache[5 *8]
Definition: h264dec.h:294
H264SliceContext::op
uint8_t op
Definition: h264dec.h:266
H264Context::cur_bit_depth_luma
int cur_bit_depth_luma
Definition: h264dec.h:536
MMCO
Memory management control operation.
Definition: h264dec.h:101
H264Context::scan_padding
uint8_t scan_padding[16]
Definition: h264dec.h:418
H264SliceContext::topright_type
int topright_type
Definition: h264dec.h:208
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:449
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:833
H264SliceContext::left_samples_available
unsigned int left_samples_available
Definition: h264dec.h:217
H264SliceContext::er
ERContext * er
Definition: h264dec.h:173
H264Picture::hwaccel_picture_private
void * hwaccel_picture_private
hardware accelerator private data
Definition: h264dec.h:123
H264SliceContext::idr_pic_id
int idr_pic_id
Definition: h264dec.h:319
H264SliceContext::neighbor_transform_size
int neighbor_transform_size
number of neighbors (top and/or left) that used 8x8 dct
Definition: h264dec.h:242
H264ChromaContext
Definition: h264chroma.h:27
ff_tlog
#define ff_tlog(ctx,...)
Definition: internal.h:162
H264SliceContext::gb
GetBitContext gb
Definition: h264dec.h:172
src
INIT_CLIP pixel * src
Definition: h264pred_template.c:418
videodsp.h
H264SliceContext::intra4x4_pred_mode
int8_t * intra4x4_pred_mode
Definition: h264dec.h:199
H264Context::short_ref
H264Picture * short_ref[32]
Definition: h264dec.h:461
H264Context::droppable
int droppable
Definition: h264dec.h:356
MB_TYPE_DIRECT2
#define MB_TYPE_DIRECT2
Definition: mpegutils.h:52
H264SliceContext::edge_emu_buffer_allocated
int edge_emu_buffer_allocated
Definition: h264dec.h:279
H264Context::zigzag_scan_q0
uint8_t zigzag_scan_q0[16]
Definition: h264dec.h:425
H264Context::field_scan
uint8_t field_scan[16]
Definition: h264dec.h:422
h
h
Definition: vp9dsp_template.c:2038
H264SliceContext::cabac_init_idc
int cabac_init_idc
Definition: h264dec.h:312
H264_MAX_PICTURE_COUNT
#define H264_MAX_PICTURE_COUNT
Definition: h264dec.h:50
ff_h264_update_thread_context
int ff_h264_update_thread_context(AVCodecContext *dst, const AVCodecContext *src)
Definition: h264_slice.c:308
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:671
H264SliceContext::bipred_scratchpad_allocated
int bipred_scratchpad_allocated
Definition: h264dec.h:278
write_back_non_zero_count
static av_always_inline void write_back_non_zero_count(const H264Context *h, H264SliceContext *sl)
Definition: h264dec.h:683
H264Context::x264_build
int x264_build
Definition: h264dec.h:362
H264SliceContext::slice_type_fixed
int slice_type_fixed
Definition: h264dec.h:178
ff_h264_replace_picture
int ff_h264_replace_picture(H264Context *h, H264Picture *dst, const H264Picture *src)
Definition: h264_picture.c:145
H264Ref::poc
int poc
Definition: h264dec.h:164
H264Context::mb2b_xy
uint32_t * mb2b_xy
Definition: h264dec.h:397
H2645Packet
Definition: h2645_parse.h:82
H264Picture::qscale_table_buf
AVBufferRef * qscale_table_buf
Definition: h264dec.h:113
CABACContext
Definition: cabac.h:41
H264SliceContext::delta_poc
int delta_poc[2]
Definition: h264dec.h:322
H264Context::chroma_y_shift
int chroma_y_shift
Definition: h264dec.h:354
H264Context::current_slice
int current_slice
current slice number, used to initialize slice_num of each thread/context
Definition: h264dec.h:487
H264Picture::long_ref
int long_ref
1->long term reference 0->short term reference
Definition: h264dec.h:135
H264Ref::reference
int reference
Definition: h264dec.h:163
H264Picture::motion_val
int16_t(*[2] motion_val)[2]
Definition: h264dec.h:117
H264SliceContext::prev_mb_skipped
int prev_mb_skipped
Definition: h264dec.h:192
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:416
H264Context::field_scan8x8
uint8_t field_scan8x8[64]
Definition: h264dec.h:423
H264SliceContext::mb_field_decoding_flag
int mb_field_decoding_flag
Definition: h264dec.h:234
H264Context::is_avc
int is_avc
Used to parse AVC variant of H.264.
Definition: h264dec.h:448
min
float min
Definition: vorbis_enc_data.h:429