h264.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 / MPEG4 part10 codec.
25  * @author Michael Niedermayer <michaelni@gmx.at>
26  */
27 
28 #ifndef AVCODEC_H264_H
29 #define AVCODEC_H264_H
30 
31 #include "libavutil/intreadwrite.h"
32 #include "cabac.h"
33 #include "error_resilience.h"
34 #include "get_bits.h"
35 #include "mpegvideo.h"
36 #include "h264chroma.h"
37 #include "h264dsp.h"
38 #include "h264pred.h"
39 #include "h264qpel.h"
40 #include "rectangle.h"
41 
42 #define MAX_SPS_COUNT 32
43 #define MAX_PPS_COUNT 256
44 
45 #define MAX_MMCO_COUNT 66
46 
47 #define MAX_DELAYED_PIC_COUNT 16
48 
49 #define MAX_MBPAIR_SIZE (256*1024) // a tighter bound could be calculated if someone cares about a few bytes
50 
51 /* Compiling in interlaced support reduces the speed
52  * of progressive decoding by about 2%. */
53 #define ALLOW_INTERLACE
54 
55 #define FMO 0
56 
57 /**
58  * The maximum number of slices supported by the decoder.
59  * must be a power of 2
60  */
61 #define MAX_SLICES 16
62 
63 #ifdef ALLOW_INTERLACE
64 #define MB_MBAFF(h) h->mb_mbaff
65 #define MB_FIELD(h) h->mb_field_decoding_flag
66 #define FRAME_MBAFF(h) h->mb_aff_frame
67 #define FIELD_PICTURE(h) (h->picture_structure != PICT_FRAME)
68 #define LEFT_MBS 2
69 #define LTOP 0
70 #define LBOT 1
71 #define LEFT(i) (i)
72 #else
73 #define MB_MBAFF(h) 0
74 #define MB_FIELD(h) 0
75 #define FRAME_MBAFF(h) 0
76 #define FIELD_PICTURE(h) 0
77 #undef IS_INTERLACED
78 #define IS_INTERLACED(mb_type) 0
79 #define LEFT_MBS 1
80 #define LTOP 0
81 #define LBOT 0
82 #define LEFT(i) 0
83 #endif
84 #define FIELD_OR_MBAFF_PICTURE(h) (FRAME_MBAFF(h) || FIELD_PICTURE(h))
85 
86 #ifndef CABAC
87 #define CABAC(h) h->pps.cabac
88 #endif
89 
90 #define CHROMA(h) (h->sps.chroma_format_idc)
91 #define CHROMA422(h) (h->sps.chroma_format_idc == 2)
92 #define CHROMA444(h) (h->sps.chroma_format_idc == 3)
93 
94 #define EXTENDED_SAR 255
95 
96 #define MB_TYPE_REF0 MB_TYPE_ACPRED // dirty but it fits in 16 bit
97 #define MB_TYPE_8x8DCT 0x01000000
98 #define IS_REF0(a) ((a) & MB_TYPE_REF0)
99 #define IS_8x8DCT(a) ((a) & MB_TYPE_8x8DCT)
100 
101 #define QP_MAX_NUM (51 + 6*6) // The maximum supported qp
102 
103 /* NAL unit types */
104 enum {
119  NAL_FF_IGNORE = 0xff0f001,
120 };
121 
122 /**
123  * SEI message types
124  */
125 typedef enum {
126  SEI_BUFFERING_PERIOD = 0, ///< buffering period (H.264, D.1.1)
127  SEI_TYPE_PIC_TIMING = 1, ///< picture timing
128  SEI_TYPE_USER_DATA_ITU_T_T35 = 4, ///< user data registered by ITU-T Recommendation T.35
129  SEI_TYPE_USER_DATA_UNREGISTERED = 5, ///< unregistered user data
130  SEI_TYPE_RECOVERY_POINT = 6 ///< recovery point (frame # to decoder sync)
131 } SEI_Type;
132 
133 /**
134  * pic_struct in picture timing SEI message
135  */
136 typedef enum {
137  SEI_PIC_STRUCT_FRAME = 0, ///< 0: %frame
138  SEI_PIC_STRUCT_TOP_FIELD = 1, ///< 1: top field
139  SEI_PIC_STRUCT_BOTTOM_FIELD = 2, ///< 2: bottom field
140  SEI_PIC_STRUCT_TOP_BOTTOM = 3, ///< 3: top field, bottom field, in that order
141  SEI_PIC_STRUCT_BOTTOM_TOP = 4, ///< 4: bottom field, top field, in that order
142  SEI_PIC_STRUCT_TOP_BOTTOM_TOP = 5, ///< 5: top field, bottom field, top field repeated, in that order
143  SEI_PIC_STRUCT_BOTTOM_TOP_BOTTOM = 6, ///< 6: bottom field, top field, bottom field repeated, in that order
144  SEI_PIC_STRUCT_FRAME_DOUBLING = 7, ///< 7: %frame doubling
145  SEI_PIC_STRUCT_FRAME_TRIPLING = 8 ///< 8: %frame tripling
147 
148 /**
149  * Sequence parameter set
150  */
151 typedef struct SPS {
155  int transform_bypass; ///< qpprime_y_zero_transform_bypass_flag
156  int log2_max_frame_num; ///< log2_max_frame_num_minus4 + 4
157  int poc_type; ///< pic_order_cnt_type
158  int log2_max_poc_lsb; ///< log2_max_pic_order_cnt_lsb_minus4
162  int poc_cycle_length; ///< num_ref_frames_in_pic_order_cnt_cycle
163  int ref_frame_count; ///< num_ref_frames
165  int mb_width; ///< pic_width_in_mbs_minus1 + 1
166  int mb_height; ///< pic_height_in_map_units_minus1 + 1
168  int mb_aff; ///< mb_adaptive_frame_field_flag
170  int crop; ///< frame_cropping_flag
171 
172  /* those 4 are already in luma samples */
173  unsigned int crop_left; ///< frame_cropping_rect_left_offset
174  unsigned int crop_right; ///< frame_cropping_rect_right_offset
175  unsigned int crop_top; ///< frame_cropping_rect_top_offset
176  unsigned int crop_bottom; ///< frame_cropping_rect_bottom_offset
187  uint32_t time_scale;
189  short offset_for_ref_frame[256]; // FIXME dyn aloc?
199  int cpb_cnt; ///< See H.264 E.1.2
200  int initial_cpb_removal_delay_length; ///< initial_cpb_removal_delay_length_minus1 + 1
201  int cpb_removal_delay_length; ///< cpb_removal_delay_length_minus1 + 1
202  int dpb_output_delay_length; ///< dpb_output_delay_length_minus1 + 1
203  int bit_depth_luma; ///< bit_depth_luma_minus8 + 8
204  int bit_depth_chroma; ///< bit_depth_chroma_minus8 + 8
205  int residual_color_transform_flag; ///< residual_colour_transform_flag
206  int constraint_set_flags; ///< constraint_set[0-3]_flag
207  int new; ///< flag to keep track if the decoder context needs re-init due to changed SPS
208 } SPS;
209 
210 /**
211  * Picture parameter set
212  */
213 typedef struct PPS {
214  unsigned int sps_id;
215  int cabac; ///< entropy_coding_mode_flag
216  int pic_order_present; ///< pic_order_present_flag
217  int slice_group_count; ///< num_slice_groups_minus1 + 1
219  unsigned int ref_count[2]; ///< num_ref_idx_l0/1_active_minus1 + 1
220  int weighted_pred; ///< weighted_pred_flag
222  int init_qp; ///< pic_init_qp_minus26 + 26
223  int init_qs; ///< pic_init_qs_minus26 + 26
224  int chroma_qp_index_offset[2];
225  int deblocking_filter_parameters_present; ///< deblocking_filter_parameters_present_flag
226  int constrained_intra_pred; ///< constrained_intra_pred_flag
227  int redundant_pic_cnt_present; ///< redundant_pic_cnt_present_flag
228  int transform_8x8_mode; ///< transform_8x8_mode_flag
231  uint8_t chroma_qp_table[2][QP_MAX_NUM+1]; ///< pre-scaled (with chroma_qp_index_offset) version of qp_table
233 } PPS;
234 
235 /**
236  * Memory management control operation opcode.
237  */
238 typedef enum MMCOOpcode {
239  MMCO_END = 0,
246 } MMCOOpcode;
247 
248 /**
249  * Memory management control operation.
250  */
251 typedef struct MMCO {
253  int short_pic_num; ///< pic_num without wrapping (pic_num & max_pic_num)
254  int long_arg; ///< index, pic_num, or num long refs depending on opcode
255 } MMCO;
256 
257 /**
258  * H264Context
259  */
260 typedef struct H264Context {
271 
275 
276  int pixel_shift; ///< 0 for 8-bit H264, 1 for high-bit-depth H264
277  int chroma_qp[2]; // QPc
278 
279  int qp_thresh; ///< QP threshold to skip loopfilter
280 
281  /* coded dimensions -- 16 * mb w/h */
282  int width, height;
283  int linesize, uvlinesize;
284  int chroma_x_shift, chroma_y_shift;
285 
286  int qscale;
291 
293  int flags;
295 
298 
299  // prediction stuff
302 
306  int left_mb_xy[LEFT_MBS];
307 
309  int top_type;
311  int left_type[LEFT_MBS];
312 
315 
316  int8_t intra4x4_pred_mode_cache[5 * 8];
317  int8_t(*intra4x4_pred_mode);
320  unsigned int top_samples_available;
323  uint8_t (*top_borders[2])[(16 * 3) * 2];
324 
325  /**
326  * non zero coeff count cache.
327  * is 64 if not available.
328  */
329  DECLARE_ALIGNED(8, uint8_t, non_zero_count_cache)[15 * 8];
330 
331  uint8_t (*non_zero_count)[48];
332 
333  /**
334  * Motion vector cache.
335  */
336  DECLARE_ALIGNED(16, int16_t, mv_cache)[2][5 * 8][2];
337  DECLARE_ALIGNED(8, int8_t, ref_cache)[2][5 * 8];
338 #define LIST_NOT_USED -1 // FIXME rename?
339 #define PART_NOT_AVAILABLE -2
340 
341  /**
342  * number of neighbors (top and/or left) that used 8x8 dct
343  */
345 
346  /**
347  * block_offset[ 0..23] for frame macroblocks
348  * block_offset[24..47] for field macroblocks
349  */
350  int block_offset[2 * (16 * 3)];
351 
352  uint32_t *mb2b_xy; // FIXME are these 4 a good idea?
353  uint32_t *mb2br_xy;
354  int b_stride; // FIXME use s->b4_stride
355 
356  int mb_linesize; ///< may be equal to s->linesize or s->linesize * 2, for mbaff
358 
359  unsigned current_sps_id; ///< id of the current SPS
360  SPS sps; ///< current sps
361 
362  /**
363  * current pps
364  */
365  PPS pps; // FIXME move to Picture perhaps? (->no) do we need that?
366 
367  uint32_t dequant4_buffer[6][QP_MAX_NUM + 1][16]; // FIXME should these be moved down?
368  uint32_t dequant8_buffer[6][QP_MAX_NUM + 1][64];
369  uint32_t(*dequant4_coeff[6])[16];
370  uint32_t(*dequant8_coeff[6])[64];
371 
373  uint16_t *slice_table; ///< slice_table_base + 2*mb_stride + 1
375  int slice_type_nos; ///< S free slice type (SI/SP are remapped to I/P)
377 
378  // interlacing specific flags
381  int mb_mbaff; ///< mb_aff_frame && mb_field_decoding_flag
384 
385  DECLARE_ALIGNED(8, uint16_t, sub_mb_type)[4];
386 
387  // Weighted pred stuff
392  // The following 2 can be changed to int8_t but that causes 10cpu cycles speedloss
393  int luma_weight[48][2][2];
394  int chroma_weight[48][2][2][2];
395  int implicit_weight[48][48][2];
396 
400  int dist_scale_factor[32];
401  int dist_scale_factor_field[2][32];
402  int map_col_to_list0[2][16 + 32];
403  int map_col_to_list0_field[2][2][16 + 32];
404 
405  /**
406  * num_ref_idx_l0/1_active_minus1 + 1
407  */
408  unsigned int ref_count[2]; ///< counts frames or fields, depending on current mb mode
409  unsigned int list_count;
410  uint8_t *list_counts; ///< Array of list_count per MB specifying the slice type
411  Picture ref_list[2][48]; /**< 0..15: frame refs, 16..47: mbaff field refs.
412  * Reordered version of default_ref_list
413  * according to picture reordering in slice header */
414  int ref2frm[MAX_SLICES][2][64]; ///< reference to frame number lists, used in the loop filter, the first 2 are for -2,-1
415 
416  // data partitioning
421 
423  DECLARE_ALIGNED(16, int16_t, mb)[16 * 48 * 2]; ///< as a dct coeffecient is int32_t in high depth, we need to reserve twice the space.
424  DECLARE_ALIGNED(16, int16_t, mb_luma_dc)[3][16 * 2];
425  int16_t mb_padding[256 * 2]; ///< as mb is addressed by scantable[i] and scantable is uint8_t we can either check that i is not too large or ensure that there is some unused stuff after mb
426 
427  /**
428  * Cabac
429  */
431  uint8_t cabac_state[1024];
432 
433  /* 0x100 -> non null luma_dc, 0x80/0x40 -> non null chroma_dc (cb/cr), 0x?0 -> chroma_cbp(0, 1, 2), 0x0? luma_cbp */
434  uint16_t *cbp_table;
435  int cbp;
436  int top_cbp;
437  int left_cbp;
438  /* chroma_pred_mode for i4x4 or i16x16, else 0 */
441  uint8_t (*mvd_table[2])[2];
442  DECLARE_ALIGNED(16, uint8_t, mvd_cache)[2][5 * 8][2];
444  uint8_t direct_cache[5 * 8];
445 
447  uint8_t zigzag_scan8x8[64];
452  uint8_t zigzag_scan_q0[16];
453  uint8_t zigzag_scan8x8_q0[64];
454  uint8_t zigzag_scan8x8_cavlc_q0[64];
455  uint8_t field_scan_q0[16];
456  uint8_t field_scan8x8_q0[64];
457  uint8_t field_scan8x8_cavlc_q0[64];
458 
460 
461  int mb_x, mb_y;
467  int mb_num;
468  int mb_xy;
469 
471 
472  // deblock
473  int deblocking_filter; ///< disable_deblocking_filter_idc with 1 <-> 0
476 
477  // =============================================================
478  // Things below are not used in the MB or more inner code
479 
482  uint8_t *rbsp_buffer[2];
483  unsigned int rbsp_buffer_size[2];
484 
485  /**
486  * Used to parse AVC variant of h264
487  */
488  int is_avc; ///< this flag is != 0 if codec is avc1
489  int nal_length_size; ///< Number of bytes used for nal length (1, 2 or 4)
490  int got_first; ///< this flag is != 0 if we've parsed a frame
491 
492  int bit_depth_luma; ///< luma bit depth from sps to detect changes
493  int chroma_format_idc; ///< chroma format from sps to detect changes
494 
495  SPS *sps_buffers[MAX_SPS_COUNT];
496  PPS *pps_buffers[MAX_PPS_COUNT];
497 
498  int dequant_coeff_pps; ///< reinit tables when pps changes
499 
500  uint16_t *slice_table_base;
501 
502  // POC stuff
503  int poc_lsb;
504  int poc_msb;
506  int delta_poc[2];
508  int prev_poc_msb; ///< poc_msb of the last reference pic for POC type 0
509  int prev_poc_lsb; ///< poc_lsb of the last reference pic for POC type 0
510  int frame_num_offset; ///< for POC type 2
511  int prev_frame_num_offset; ///< for POC type 2
512  int prev_frame_num; ///< frame_num of the last pic for POC type 1/2
513 
514  /**
515  * frame_num for frames or 2 * frame_num + 1 for field pics.
516  */
518 
519  /**
520  * max_frame_num or 2 * max_frame_num for field pics.
521  */
523 
525 
526  Picture default_ref_list[2][32]; ///< base reference list for all slices of a coded picture
527  Picture *short_ref[32];
528  Picture *long_ref[32];
529  Picture *delayed_pic[MAX_DELAYED_PIC_COUNT + 2]; // FIXME size?
530  int last_pocs[MAX_DELAYED_PIC_COUNT];
534 
535  /**
536  * memory management control operations buffer.
537  */
541 
542  int long_ref_count; ///< number of actual long term references
543  int short_ref_count; ///< number of actual short term references
544 
546 
547  /**
548  * @name Members for slice based multithreading
549  * @{
550  */
552 
553  /**
554  * current slice number, used to initialize slice_num of each thread/context
555  */
557 
558  /**
559  * Max number of threads / contexts.
560  * This is equal to AVCodecContext.thread_count unless
561  * multithreaded decoding is impossible, in which case it is
562  * reduced to 1.
563  */
565 
567 
568  /**
569  * 1 if the single thread fallback warning has already been
570  * displayed, 0 otherwise.
571  */
573 
575 
577  unsigned int last_ref_count[2];
578  /** @} */
579 
580  /**
581  * pic_struct in picture timing SEI message
582  */
584 
585  /**
586  * Complement sei_pic_struct
587  * SEI_PIC_STRUCT_TOP_BOTTOM and SEI_PIC_STRUCT_BOTTOM_TOP indicate interlaced frames.
588  * However, soft telecined frames may have these values.
589  * This is used in an attempt to flag soft telecine progressive.
590  */
592 
593  /**
594  * Bit set of clock types for fields/frames in picture timing SEI message.
595  * For each found ct_type, appropriate bit is set (e.g., bit 1 for
596  * interlaced).
597  */
599 
600  /**
601  * dpb_output_delay in picture timing SEI message, see H.264 C.2.2
602  */
604 
605  /**
606  * cpb_removal_delay in picture timing SEI message, see H.264 C.1.2
607  */
609 
610  /**
611  * recovery_frame_cnt from SEI message
612  *
613  * Set to -1 if no recovery point SEI message found or to number of frames
614  * before playback synchronizes. Frames having recovery point are key
615  * frames.
616  */
618  /**
619  * recovery_frame is the frame_num at which the next frame should
620  * be fully constructed.
621  *
622  * Set to -1 when not expecting a recovery point.
623  */
625 
626  /**
627  * Are the SEI recovery points looking valid.
628  */
630 
631  int luma_weight_flag[2]; ///< 7.4.3.2 luma_weight_lX_flag
632  int chroma_weight_flag[2]; ///< 7.4.3.2 chroma_weight_lX_flag
633 
634  // Timestamp stuff
635  int sei_buffering_period_present; ///< Buffering period SEI flag
636  int initial_cpb_removal_delay[32]; ///< Initial timestamps for CPBs
637 
640 
641  int16_t slice_row[MAX_SLICES]; ///< to detect when MAX_SLICES is too low
642 
643  int sync; ///< did we had a keyframe or recovery point
644 
649  int16_t *dc_val_base;
650 
651  uint8_t *visualization_buffer[3]; ///< temporary buffer vor MV visualization
652 
657 } H264Context;
658 
659 extern const uint8_t ff_h264_chroma_qp[7][QP_MAX_NUM + 1]; ///< One chroma qp table for each possible bit depth (8-14).
660 extern const uint16_t ff_h264_mb_sizes[4];
661 
662 /**
663  * Decode SEI
664  */
666 
667 /**
668  * Decode SPS
669  */
671 
672 /**
673  * compute profile from sps
674  */
676 
677 /**
678  * Decode PPS
679  */
680 int ff_h264_decode_picture_parameter_set(H264Context *h, int bit_length);
681 
682 /**
683  * Decode a network abstraction layer unit.
684  * @param consumed is the number of bytes used as input
685  * @param length is the length of the array
686  * @param dst_length is the number of decoded bytes FIXME here
687  * or a decode rbsp tailing?
688  * @return decoded bytes, might be src+1 if no escapes
689  */
691  int *dst_length, int *consumed, int length);
692 
693 /**
694  * Free any data that may have been allocated in the H264 context
695  * like SPS, PPS etc.
696  */
698 
699 /**
700  * Reconstruct bitstream slice_type.
701  */
702 int ff_h264_get_slice_type(const H264Context *h);
703 
704 /**
705  * Allocate tables.
706  * needs width/height
707  */
709 
710 /**
711  * Fill the default_ref_list.
712  */
714 
718 
719 /**
720  * Execute the reference picture marking (memory management control operations).
721  */
722 int ff_h264_execute_ref_pic_marking(H264Context *h, MMCO *mmco, int mmco_count);
723 
725  int first_slice);
726 
727 int ff_generate_sliding_window_mmcos(H264Context *h, int first_slice);
728 
729 /**
730  * Check if the top & left blocks are available if needed & change the
731  * dc mode so it only uses the available blocks.
732  */
734 
735 /**
736  * Check if the top & left blocks are available if needed & change the
737  * dc mode so it only uses the available blocks.
738  */
739 int ff_h264_check_intra_pred_mode(H264Context *h, int mode, int is_chroma);
740 
744 void ff_h264_decode_init_vlc(void);
745 
746 /**
747  * Decode a macroblock
748  * @return 0 if OK, ER_AC_ERROR / ER_DC_ERROR / ER_MV_ERROR on error
749  */
751 
752 /**
753  * Decode a CABAC coded macroblock
754  * @return 0 if OK, ER_AC_ERROR / ER_DC_ERROR / ER_MV_ERROR on error
755  */
757 
759 
762 void ff_h264_pred_direct_motion(H264Context *const h, int *mb_type);
763 
764 void ff_h264_filter_mb_fast(H264Context *h, int mb_x, int mb_y,
765  uint8_t *img_y, uint8_t *img_cb, uint8_t *img_cr,
766  unsigned int linesize, unsigned int uvlinesize);
767 void ff_h264_filter_mb(H264Context *h, int mb_x, int mb_y,
768  uint8_t *img_y, uint8_t *img_cb, uint8_t *img_cr,
769  unsigned int linesize, unsigned int uvlinesize);
770 
771 /**
772  * Reset SEI values at the beginning of the frame.
773  *
774  * @param h H.264 context.
775  */
777 
778 /*
779  * o-o o-o
780  * / / /
781  * o-o o-o
782  * ,---'
783  * o-o o-o
784  * / / /
785  * o-o o-o
786  */
787 
788 /* Scan8 organization:
789  * 0 1 2 3 4 5 6 7
790  * 0 DY y y y y y
791  * 1 y Y Y Y Y
792  * 2 y Y Y Y Y
793  * 3 y Y Y Y Y
794  * 4 y Y Y Y Y
795  * 5 DU u u u u u
796  * 6 u U U U U
797  * 7 u U U U U
798  * 8 u U U U U
799  * 9 u U U U U
800  * 10 DV v v v v v
801  * 11 v V V V V
802  * 12 v V V V V
803  * 13 v V V V V
804  * 14 v V V V V
805  * DY/DU/DV are for luma/chroma DC.
806  */
807 
808 #define LUMA_DC_BLOCK_INDEX 48
809 #define CHROMA_DC_BLOCK_INDEX 49
810 
811 // This table must be here because scan8[constant] must be known at compiletime
812 static const uint8_t scan8[16 * 3 + 3] = {
813  4 + 1 * 8, 5 + 1 * 8, 4 + 2 * 8, 5 + 2 * 8,
814  6 + 1 * 8, 7 + 1 * 8, 6 + 2 * 8, 7 + 2 * 8,
815  4 + 3 * 8, 5 + 3 * 8, 4 + 4 * 8, 5 + 4 * 8,
816  6 + 3 * 8, 7 + 3 * 8, 6 + 4 * 8, 7 + 4 * 8,
817  4 + 6 * 8, 5 + 6 * 8, 4 + 7 * 8, 5 + 7 * 8,
818  6 + 6 * 8, 7 + 6 * 8, 6 + 7 * 8, 7 + 7 * 8,
819  4 + 8 * 8, 5 + 8 * 8, 4 + 9 * 8, 5 + 9 * 8,
820  6 + 8 * 8, 7 + 8 * 8, 6 + 9 * 8, 7 + 9 * 8,
821  4 + 11 * 8, 5 + 11 * 8, 4 + 12 * 8, 5 + 12 * 8,
822  6 + 11 * 8, 7 + 11 * 8, 6 + 12 * 8, 7 + 12 * 8,
823  4 + 13 * 8, 5 + 13 * 8, 4 + 14 * 8, 5 + 14 * 8,
824  6 + 13 * 8, 7 + 13 * 8, 6 + 14 * 8, 7 + 14 * 8,
825  0 + 0 * 8, 0 + 5 * 8, 0 + 10 * 8
826 };
827 
828 static av_always_inline uint32_t pack16to32(int a, int b)
829 {
830 #if HAVE_BIGENDIAN
831  return (b & 0xFFFF) + (a << 16);
832 #else
833  return (a & 0xFFFF) + (b << 16);
834 #endif
835 }
836 
837 static av_always_inline uint16_t pack8to16(int a, int b)
838 {
839 #if HAVE_BIGENDIAN
840  return (b & 0xFF) + (a << 8);
841 #else
842  return (a & 0xFF) + (b << 8);
843 #endif
844 }
845 
846 /**
847  * Get the chroma qp.
848  */
850 {
851  return h->pps.chroma_qp_table[t][qscale];
852 }
853 
854 /**
855  * Get the predicted intra4x4 prediction mode.
856  */
858 {
859  const int index8 = scan8[n];
860  const int left = h->intra4x4_pred_mode_cache[index8 - 1];
861  const int top = h->intra4x4_pred_mode_cache[index8 - 8];
862  const int min = FFMIN(left, top);
863 
864  tprintf(h->avctx, "mode:%d %d min:%d\n", left, top, min);
865 
866  if (min < 0)
867  return DC_PRED;
868  else
869  return min;
870 }
871 
873 {
874  int8_t *i4x4 = h->intra4x4_pred_mode + h->mb2br_xy[h->mb_xy];
875  int8_t *i4x4_cache = h->intra4x4_pred_mode_cache;
876 
877  AV_COPY32(i4x4, i4x4_cache + 4 + 8 * 4);
878  i4x4[4] = i4x4_cache[7 + 8 * 3];
879  i4x4[5] = i4x4_cache[7 + 8 * 2];
880  i4x4[6] = i4x4_cache[7 + 8 * 1];
881 }
882 
884 {
885  const int mb_xy = h->mb_xy;
886  uint8_t *nnz = h->non_zero_count[mb_xy];
887  uint8_t *nnz_cache = h->non_zero_count_cache;
888 
889  AV_COPY32(&nnz[ 0], &nnz_cache[4 + 8 * 1]);
890  AV_COPY32(&nnz[ 4], &nnz_cache[4 + 8 * 2]);
891  AV_COPY32(&nnz[ 8], &nnz_cache[4 + 8 * 3]);
892  AV_COPY32(&nnz[12], &nnz_cache[4 + 8 * 4]);
893  AV_COPY32(&nnz[16], &nnz_cache[4 + 8 * 6]);
894  AV_COPY32(&nnz[20], &nnz_cache[4 + 8 * 7]);
895  AV_COPY32(&nnz[32], &nnz_cache[4 + 8 * 11]);
896  AV_COPY32(&nnz[36], &nnz_cache[4 + 8 * 12]);
897 
898  if (!h->chroma_y_shift) {
899  AV_COPY32(&nnz[24], &nnz_cache[4 + 8 * 8]);
900  AV_COPY32(&nnz[28], &nnz_cache[4 + 8 * 9]);
901  AV_COPY32(&nnz[40], &nnz_cache[4 + 8 * 13]);
902  AV_COPY32(&nnz[44], &nnz_cache[4 + 8 * 14]);
903  }
904 }
905 
907  int b_stride,
908  int b_xy, int b8_xy,
909  int mb_type, int list)
910 {
911  int16_t(*mv_dst)[2] = &h->cur_pic.motion_val[list][b_xy];
912  int16_t(*mv_src)[2] = &h->mv_cache[list][scan8[0]];
913  AV_COPY128(mv_dst + 0 * b_stride, mv_src + 8 * 0);
914  AV_COPY128(mv_dst + 1 * b_stride, mv_src + 8 * 1);
915  AV_COPY128(mv_dst + 2 * b_stride, mv_src + 8 * 2);
916  AV_COPY128(mv_dst + 3 * b_stride, mv_src + 8 * 3);
917  if (CABAC(h)) {
918  uint8_t (*mvd_dst)[2] = &h->mvd_table[list][FMO ? 8 * h->mb_xy
919  : h->mb2br_xy[h->mb_xy]];
920  uint8_t(*mvd_src)[2] = &h->mvd_cache[list][scan8[0]];
921  if (IS_SKIP(mb_type)) {
922  AV_ZERO128(mvd_dst);
923  } else {
924  AV_COPY64(mvd_dst, mvd_src + 8 * 3);
925  AV_COPY16(mvd_dst + 3 + 3, mvd_src + 3 + 8 * 0);
926  AV_COPY16(mvd_dst + 3 + 2, mvd_src + 3 + 8 * 1);
927  AV_COPY16(mvd_dst + 3 + 1, mvd_src + 3 + 8 * 2);
928  }
929  }
930 
931  {
932  int8_t *ref_index = &h->cur_pic.ref_index[list][b8_xy];
933  int8_t *ref_cache = h->ref_cache[list];
934  ref_index[0 + 0 * 2] = ref_cache[scan8[0]];
935  ref_index[1 + 0 * 2] = ref_cache[scan8[4]];
936  ref_index[0 + 1 * 2] = ref_cache[scan8[8]];
937  ref_index[1 + 1 * 2] = ref_cache[scan8[12]];
938  }
939 }
940 
941 static av_always_inline void write_back_motion(H264Context *h, int mb_type)
942 {
943  const int b_stride = h->b_stride;
944  const int b_xy = 4 * h->mb_x + 4 * h->mb_y * h->b_stride; // try mb2b(8)_xy
945  const int b8_xy = 4 * h->mb_xy;
946 
947  if (USES_LIST(mb_type, 0)) {
948  write_back_motion_list(h, b_stride, b_xy, b8_xy, mb_type, 0);
949  } else {
950  fill_rectangle(&h->cur_pic.ref_index[0][b8_xy],
951  2, 2, 2, (uint8_t)LIST_NOT_USED, 1);
952  }
953  if (USES_LIST(mb_type, 1))
954  write_back_motion_list(h, b_stride, b_xy, b8_xy, mb_type, 1);
955 
956  if (h->slice_type_nos == AV_PICTURE_TYPE_B && CABAC(h)) {
957  if (IS_8X8(mb_type)) {
958  uint8_t *direct_table = &h->direct_table[4 * h->mb_xy];
959  direct_table[1] = h->sub_mb_type[1] >> 1;
960  direct_table[2] = h->sub_mb_type[2] >> 1;
961  direct_table[3] = h->sub_mb_type[3] >> 1;
962  }
963  }
964 }
965 
967 {
969  return !(AV_RN64A(h->sub_mb_type) &
971  0x0001000100010001ULL));
972  else
973  return !(AV_RN64A(h->sub_mb_type) &
975  0x0001000100010001ULL));
976 }
977 
978 void ff_h264_draw_horiz_band(H264Context *h, int y, int height);
979 
980 #endif /* AVCODEC_H264_H */
int chroma_format_idc
Definition: h264.h:154
static av_always_inline uint16_t pack8to16(int a, int b)
Definition: h264.h:837
void ff_h264_direct_dist_scale_factor(H264Context *const h)
Definition: h264_direct.c:51
GetBitContext inter_gb
Definition: h264.h:418
int video_signal_type_present_flag
Definition: h264.h:179
static av_always_inline int get_dct8x8_allowed(H264Context *h)
Definition: h264.h:966
int last_slice_type
Definition: h264.h:576
int ff_h264_decode_mb_cabac(H264Context *h)
Decode a CABAC coded macroblock.
Definition: h264_cabac.c:1875
Memory management control operation.
Definition: h264.h:251
int ff_h264_decode_seq_parameter_set(H264Context *h)
Decode SPS.
Definition: h264_ps.c:328
uint8_t * edge_emu_buffer
Definition: h264.h:648
int8_t * ref_index[2]
Definition: mpegvideo.h:114
int workaround_bugs
Definition: h264.h:294
unsigned int top_samples_available
Definition: h264.h:320
unsigned int topleft_samples_available
Definition: h264.h:319
int single_decode_warning
1 if the single thread fallback warning has already been displayed, 0 otherwise.
Definition: h264.h:572
GetBitContext gb
Definition: h264.h:268
5: top field, bottom field, top field repeated, in that order
Definition: h264.h:142
int sei_cpb_removal_delay
cpb_removal_delay in picture timing SEI message, see H.264 C.1.2
Definition: h264.h:608
int low_delay
Definition: h264.h:290
int mb_num
Definition: h264.h:467
GetBitContext * intra_gb_ptr
Definition: h264.h:419
#define IS_SKIP(a)
Definition: mpegvideo.h:140
int mb_aff_frame
Definition: h264.h:379
int topleft_type
Definition: h264.h:308
int last_qscale_diff
Definition: h264.h:440
#define LEFT_MBS
Definition: h264.h:68
int cbp
Definition: h264.h:435
3: top field, bottom field, in that order
Definition: h264.h:140
int first_field
Definition: h264.h:383
int ff_h264_check_intra4x4_pred_mode(H264Context *h)
Check if the top & left blocks are available if needed & change the dc mode so it only uses the avail...
Definition: h264.c:426
unregistered user data
Definition: h264.h:129
int weighted_bipred_idc
Definition: h264.h:221
int sync
did we had a keyframe or recovery point
Definition: h264.h:643
int ff_h264_get_slice_type(const H264Context *h)
Reconstruct bitstream slice_type.
Definition: h264.c:3894
H264ChromaContext h264chroma
Definition: h264.h:264
uint16_t * cbp_table
Definition: h264.h:434
int scaling_matrix_present
Definition: h264.h:192
int luma_weight_flag[2]
7.4.3.2 luma_weight_lX_flag
Definition: h264.h:631
MMCO mmco[MAX_MMCO_COUNT]
memory management control operations buffer.
Definition: h264.h:538
uint8_t scaling_matrix4[6][16]
Definition: h264.h:193
int topleft_partition
Definition: h264.h:314
7: frame doubling
Definition: h264.h:144
#define MAX_PPS_COUNT
Definition: h264.h:43
Sequence parameter set.
Definition: h264.h:151
int initial_cpb_removal_delay[32]
Initial timestamps for CPBs.
Definition: h264.h:636
int mb_y
Definition: h264.h:461
int coded_picture_number
Definition: h264.h:289
int bitstream_restriction_flag
Definition: h264.h:190
#define FMO
Definition: h264.h:55
AVBufferPool * mb_type_pool
Definition: h264.h:654
int outputed_poc
Definition: h264.h:532
Picture parameter set.
Definition: h264.h:213
#define DECLARE_ALIGNED(n, t, v)
Definition: mem.h:59
int flags
Definition: h264.h:293
int frame_mbs_only_flag
Definition: h264.h:167
int16_t * dc_val_base
Definition: h264.h:649
int is_avc
Used to parse AVC variant of h264.
Definition: h264.h:488
int mmco_index
Definition: h264.h:539
AVBufferPool * ref_index_pool
Definition: h264.h:656
MMCOOpcode
Memory management control operation opcode.
Definition: h264.h:238
DSPContext dsp
Definition: h264.h:269
mpegvideo header.
void ff_h264_decode_init_vlc(void)
Definition: h264_cavlc.c:326
H264Context.
Definition: h264.h:260
int prev_poc_msb
poc_msb of the last reference pic for POC type 0
Definition: h264.h:508
int chroma_qp_diff
Definition: h264.h:232
static av_always_inline void write_back_motion(H264Context *h, int mb_type)
Definition: h264.h:941
uint32_t num_units_in_tick
Definition: h264.h:186
struct H264Context H264Context
H264Context.
4: bottom field, top field, in that order
Definition: h264.h:141
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFilterBuffer 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
int picture_structure
Definition: h264.h:382
int slice_type_nos
S free slice type (SI/SP are remapped to I/P)
Definition: h264.h:375
#define AV_COPY32(d, s)
Definition: intreadwrite.h:578
int profile_idc
Definition: h264.h:152
unsigned current_sps_id
id of the current SPS
Definition: h264.h:359
MMCOOpcode opcode
Definition: h264.h:252
H.264 DSP functions.
static av_always_inline uint32_t pack16to32(int a, int b)
Definition: h264.h:828
int mb_skip_run
Definition: h264.h:464
void ff_h264_init_cabac_states(H264Context *h)
Definition: h264_cabac.c:1260
void ff_h264_free_context(H264Context *h)
Free any data that may have been allocated in the H264 context like SPS, PPS etc. ...
Definition: h264.c:4978
static av_always_inline int pred_intra_mode(H264Context *h, int n)
Get the predicted intra4x4 prediction mode.
Definition: h264.h:857
#define USES_LIST(a, list)
does this mb use listX, note does not work if subMBs
Definition: mpegvideo.h:156
uint8_t * chroma_pred_mode_table
Definition: h264.h:439
int ff_h264_decode_ref_pic_list_reordering(H264Context *h)
Definition: h264_refs.c:205
unsigned int crop_top
frame_cropping_rect_top_offset
Definition: h264.h:175
int resync_mb_y
Definition: h264.h:463
int fixed_frame_rate_flag
Definition: h264.h:188
int parse_history_count
Definition: h264.h:646
int deblocking_filter_parameters_present
deblocking_filter_parameters_present_flag
Definition: h264.h:225
int short_pic_num
pic_num without wrapping (pic_num & max_pic_num)
Definition: h264.h:253
uint8_t
int prev_frame_num_offset
for POC type 2
Definition: h264.h:511
int use_weight
Definition: h264.h:388
int mb_uvlinesize
Definition: h264.h:357
#define mb
int full_range
Definition: h264.h:180
unsigned int crop_left
frame_cropping_rect_left_offset
Definition: h264.h:173
int offset_for_non_ref_pic
Definition: h264.h:160
mode
Definition: f_perms.c:27
void ff_h264_reset_sei(H264Context *h)
Reset SEI values at the beginning of the frame.
Definition: h264_sei.c:40
int gaps_in_frame_num_allowed_flag
Definition: h264.h:164
int data_partitioning
Definition: h264.h:288
int bit_depth_chroma
bit_depth_chroma_minus8 + 8
Definition: h264.h:204
int ff_h264_alloc_tables(H264Context *h)
Allocate tables.
Definition: h264.c:1235
enum AVColorPrimaries color_primaries
Definition: h264.h:182
struct MMCO MMCO
Memory management control operation.
#define b
Definition: input.c:42
Motion estimation context.
Definition: mpegvideo.h:185
int cabac
entropy_coding_mode_flag
Definition: h264.h:215
int mb_xy
Definition: h264.h:468
unsigned int crop_right
frame_cropping_rect_right_offset
Definition: h264.h:174
SEI_PicStructType
pic_struct in picture timing SEI message
Definition: h264.h:136
unsigned int last_ref_count[2]
Definition: h264.h:577
Context for storing H.264 prediction functions.
Definition: h264pred.h:92
void ff_h264_fill_mbaff_ref_list(H264Context *h)
Definition: h264_refs.c:327
int uvlinesize
Definition: h264.h:283
int mb_x
Definition: h264.h:461
int transform_bypass
qpprime_y_zero_transform_bypass_flag
Definition: h264.h:155
int top_mb_xy
Definition: h264.h:304
int redundant_pic_cnt_present
redundant_pic_cnt_present_flag
Definition: h264.h:227
bitstream reader API header.
int chroma_y_shift
Definition: h264.h:284
#define MAX_DELAYED_PIC_COUNT
Definition: h264.h:47
static void fill_rectangle(SDL_Surface *screen, int x, int y, int w, int h, int color, int update)
Definition: ffplay.c:489
int topright_type
Definition: h264.h:310
SEI_Type
SEI message types.
Definition: h264.h:125
Picture * next_output_pic
Definition: h264.h:531
#define AV_COPY64(d, s)
Definition: intreadwrite.h:582
int luma_log2_weight_denom
Definition: h264.h:390
Definition: h264.h:112
int width
Definition: h264.h:282
struct PPS PPS
Picture parameter set.
#define MAX_SLICES
The maximum number of slices supported by the decoder.
Definition: h264.h:61
int frame_num
Definition: h264.h:507
static const uint8_t field_scan8x8_cavlc[64+1]
Definition: h264data.h:134
int got_first
this flag is != 0 if we&#39;ve parsed a frame
Definition: h264.h:490
const uint8_t ff_h264_chroma_qp[7][QP_MAX_NUM+1]
One chroma qp table for each possible bit depth (8-14).
Definition: h264_ps.c:75
enum AVColorTransferCharacteristic color_trc
Definition: h264.h:183
int mb_aff
mb_adaptive_frame_field_flag
Definition: h264.h:168
H264PredContext hpc
Definition: h264.h:318
MotionEstContext me
Definition: h264.h:266
int poc_type
pic_order_cnt_type
Definition: h264.h:157
int context_initialized
Definition: h264.h:292
int top_cbp
Definition: h264.h:436
int constrained_intra_pred
constrained_intra_pred_flag
Definition: h264.h:226
ParseContext parse_context
Definition: h264.h:267
int nal_unit_type
Definition: h264.h:481
int use_weight_chroma
Definition: h264.h:389
int num_reorder_frames
Definition: h264.h:191
void ff_h264_direct_ref_list_init(H264Context *const h)
Definition: h264_direct.c:103
static av_always_inline int get_chroma_qp(H264Context *h, int t, int qscale)
Get the chroma qp.
Definition: h264.h:849
const uint8_t * left_block
Definition: h264.h:313
GetBitContext * inter_gb_ptr
Definition: h264.h:420
int ff_h264_decode_extradata(H264Context *h, const uint8_t *buf, int size)
Definition: h264.c:1398
int time_offset_length
Definition: h264.h:198
int mb_field_decoding_flag
Definition: h264.h:380
int parse_last_mb
Definition: h264.h:647
PPS pps
current pps
Definition: h264.h:365
uint8_t(*[2] mvd_table)[2]
Definition: h264.h:441
int prev_interlaced_frame
Complement sei_pic_struct SEI_PIC_STRUCT_TOP_BOTTOM and SEI_PIC_STRUCT_BOTTOM_TOP indicate interlaced...
Definition: h264.h:591
int direct_spatial_mv_pred
Definition: h264.h:397
0: frame
Definition: h264.h:137
int weighted_pred
weighted_pred_flag
Definition: h264.h:220
H264QpelContext h264qpel
Definition: h264.h:265
ERContext er
Definition: h264.h:270
#define CABAC(h)
Definition: h264.h:87
int ff_h264_decode_mb_cavlc(H264Context *h)
Decode a macroblock.
Definition: h264_cavlc.c:699
int valid_recovery_point
Are the SEI recovery points looking valid.
Definition: h264.h:629
int residual_color_transform_flag
residual_colour_transform_flag
Definition: h264.h:205
static const uint8_t field_scan[16+1]
Definition: h264data.h:62
uint8_t * list_counts
Array of list_count per MB specifying the slice type.
Definition: h264.h:410
int delta_pic_order_always_zero_flag
Definition: h264.h:159
int offset_for_top_to_bottom_field
Definition: h264.h:161
static av_always_inline void write_back_motion_list(H264Context *h, int b_stride, int b_xy, int b8_xy, int mb_type, int list)
Definition: h264.h:906
int size
int col_parity
Definition: h264.h:398
static const uint8_t scan8[16 *3+3]
Definition: h264.h:812
const uint16_t ff_h264_mb_sizes[4]
Definition: h264.c:54
int chroma_pred_mode
Definition: h264.h:300
int crop
frame_cropping_flag
Definition: h264.h:170
int ff_h264_decode_init(AVCodecContext *avctx)
Definition: h264.c:1455
uint8_t * direct_table
Definition: h264.h:443
int nal_length_size
Number of bytes used for nal length (1, 2 or 4)
Definition: h264.h:489
useful rectangle filling function
#define MAX_THREADS
CABACContext cabac
Cabac.
Definition: h264.h:430
void ff_h264_pred_direct_motion(H264Context *const h, int *mb_type)
Definition: h264_direct.c:623
unsigned int left_samples_available
Definition: h264.h:322
#define IS_8X8(a)
Definition: mpegvideo.h:148
int next_mb_skipped
Definition: h264.h:297
Context for storing H.264 DSP functions.
Definition: h264dsp.h:41
int ref_frame_count
num_ref_frames
Definition: h264.h:163
void ff_h264_filter_mb(H264Context *h, int mb_x, int mb_y, uint8_t *img_y, uint8_t *img_cb, uint8_t *img_cr, unsigned int linesize, unsigned int uvlinesize)
int frame_num_offset
for POC type 2
Definition: h264.h:510
#define AV_COPY16(d, s)
Definition: intreadwrite.h:574
int initial_cpb_removal_delay_length
initial_cpb_removal_delay_length_minus1 + 1
Definition: h264.h:200
int x264_build
Definition: h264.h:459
uint32_t * mb2br_xy
Definition: h264.h:353
#define MB_TYPE_DIRECT2
#define FFMIN(a, b)
Definition: common.h:58
uint16_t * slice_table
slice_table_base + 2*mb_stride + 1
Definition: h264.h:373
int poc_cycle_length
num_ref_frames_in_pic_order_cnt_cycle
Definition: h264.h:162
int colour_description_present_flag
Definition: h264.h:181
AVRational sar
Definition: h264.h:178
int redundant_pic_count
Definition: h264.h:524
static const uint8_t field_scan8x8[64+1]
Definition: h264data.h:115
int16_t(*[2] motion_val)[2]
Definition: mpegvideo.h:105
int long_ref_count
number of actual long term references
Definition: h264.h:542
Picture.
Definition: mpegvideo.h:97
int cabac_init_idc
Definition: h264.h:545
t
Definition: genspecsines3.m:6
SPS sps
current sps
Definition: h264.h:360
#define MAX_SPS_COUNT
Definition: h264.h:42
Definition: h264.h:113
uint8_t chroma_qp_table[2][QP_MAX_NUM+1]
pre-scaled (with chroma_qp_index_offset) version of qp_table
Definition: h264.h:231
int ff_h264_decode_picture_parameter_set(H264Context *h, int bit_length)
Decode PPS.
Definition: h264_ps.c:567
int init_qp
pic_init_qp_minus26 + 26
Definition: h264.h:222
int mmco_reset
Definition: h264.h:540
int direct_8x8_inference_flag
Definition: h264.h:169
int8_t intra4x4_pred_mode_cache[5 *8]
Definition: h264.h:316
uint8_t * bipred_scratchpad
Definition: h264.h:639
int poc_lsb
Definition: h264.h:503
int max_pic_num
max_frame_num or 2 * max_frame_num for field pics.
Definition: h264.h:522
int ff_generate_sliding_window_mmcos(H264Context *h, int first_slice)
Definition: h264_refs.c:531
unsigned int topright_samples_available
Definition: h264.h:321
uint8_t scaling_matrix8[6][64]
Definition: h264.h:194
int curr_pic_num
frame_num for frames or 2 * frame_num + 1 for field pics.
Definition: h264.h:517
int slice_type
Definition: h264.h:374
int left_cbp
Definition: h264.h:437
int top_type
Definition: h264.h:309
static av_always_inline void write_back_non_zero_count(H264Context *h)
Definition: h264.h:883
unsigned int list_count
Definition: h264.h:409
int topright_mb_xy
Definition: h264.h:305
GetBitContext intra_gb
Definition: h264.h:417
int dequant_coeff_pps
reinit tables when pps changes
Definition: h264.h:498
int pic_order_present
pic_order_present_flag
Definition: h264.h:216
Picture cur_pic
Definition: h264.h:274
struct H264Context * thread_context[MAX_THREADS]
Definition: h264.h:551
int chroma_log2_weight_denom
Definition: h264.h:391
int bit_depth_luma
luma bit depth from sps to detect changes
Definition: h264.h:492
short offset_for_ref_frame[256]
Definition: h264.h:189
int chroma_format_idc
chroma format from sps to detect changes
Definition: h264.h:493
Definition: h264.h:110
VideoDSPContext vdsp
Definition: h264.h:262
int timing_info_present_flag
Definition: h264.h:185
int ff_h264_execute_ref_pic_marking(H264Context *h, MMCO *mmco, int mmco_count)
Execute the reference picture marking (memory management control operations).
Definition: h264_refs.c:563
int mb_stride
Definition: h264.h:466
int vcl_hrd_parameters_present_flag
Definition: h264.h:196
AVCodecContext * avctx
Definition: h264.h:261
AVS_Value src
Definition: avisynth_c.h:523
#define MB_TYPE_8x16
user data registered by ITU-T Recommendation T.35
Definition: h264.h:128
int slice_alpha_c0_offset
Definition: h264.h:474
1: top field
Definition: h264.h:138
void ff_h264_remove_all_refs(H264Context *h)
Definition: h264_refs.c:463
static const uint8_t zigzag_scan[16+1]
Definition: h264data.h:55
int prev_frame_num
frame_num of the last pic for POC type 1/2
Definition: h264.h:512
int topleft_mb_xy
Definition: h264.h:303
int next_outputed_poc
Definition: h264.h:533
int ff_h264_decode_sei(H264Context *h)
Decode SEI.
Definition: h264_sei.c:200
int poc_msb
Definition: h264.h:504
int recovery_frame
recovery_frame is the frame_num at which the next frame should be fully constructed.
Definition: h264.h:624
int max_contexts
Max number of threads / contexts.
Definition: h264.h:564
main external API structure.
static const uint8_t zigzag_scan8x8_cavlc[64+1]
Definition: h264data.h:96
Definition: h264.h:108
int dpb_output_delay_length
dpb_output_delay_length_minus1 + 1
Definition: h264.h:202
uint8_t * visualization_buffer[3]
temporary buffer vor MV visualization
Definition: h264.h:651
Definition: h264.h:239
int vui_parameters_present_flag
Definition: h264.h:177
2: bottom field
Definition: h264.h:139
#define QP_MAX_NUM
Definition: h264.h:101
AVColorTransferCharacteristic
int resync_mb_x
Definition: h264.h:462
void * buf
Definition: avisynth_c.h:594
int prev_mb_skipped
Definition: h264.h:296
int constraint_set_flags
constraint_set[0-3]_flag
Definition: h264.h:206
SEI_PicStructType sei_pic_struct
pic_struct in picture timing SEI message
Definition: h264.h:583
BYTE int const BYTE int int int height
Definition: avisynth_c.h:713
AVColorPrimaries
int slice_beta_offset
Definition: h264.h:475
int qp_thresh
QP threshold to skip loopfilter.
Definition: h264.h:279
rational number numerator/denominator
Definition: rational.h:43
Definition: h264.h:106
#define MAX_MMCO_COUNT
Definition: h264.h:45
int pixel_shift
0 for 8-bit H264, 1 for high-bit-depth H264
Definition: h264.h:276
int ff_h264_decode_ref_pic_marking(H264Context *h, GetBitContext *gb, int first_slice)
Definition: h264_refs.c:745
AVPictureType
Definition: avutil.h:214
struct SPS SPS
Sequence parameter set.
buffering period (H.264, D.1.1)
Definition: h264.h:126
unsigned int sps_id
Definition: h264.h:214
int log2_max_poc_lsb
log2_max_pic_order_cnt_lsb_minus4
Definition: h264.h:158
6: bottom field, top field, bottom field repeated, in that order
Definition: h264.h:143
int sei_buffering_period_present
Buffering period SEI flag.
Definition: h264.h:635
int16_t slice_row[MAX_SLICES]
to detect when MAX_SLICES is too low
Definition: h264.h:641
uint32_t time_scale
Definition: h264.h:187
int transform_8x8_mode
transform_8x8_mode_flag
Definition: h264.h:228
H.264 / AVC / MPEG4 prediction functions.
int pic_struct_present_flag
Definition: h264.h:197
void ff_h264_filter_mb_fast(H264Context *h, int mb_x, int mb_y, uint8_t *img_y, uint8_t *img_cb, uint8_t *img_cr, unsigned int linesize, unsigned int uvlinesize)
picture timing
Definition: h264.h:127
#define AV_ZERO128(d)
Definition: intreadwrite.h:614
int is_complex
Definition: h264.h:470
AVBufferPool * qscale_table_pool
Definition: h264.h:653
int slice_context_count
Definition: h264.h:566
AVBufferPool * motion_val_pool
Definition: h264.h:655
int mb_height
pic_height_in_map_units_minus1 + 1
Definition: h264.h:166
Picture * DPB
Definition: h264.h:272
int init_qs
pic_init_qs_minus26 + 26
Definition: h264.h:223
int qscale
Definition: h264.h:286
#define tprintf(p,...)
Definition: get_bits.h:628
#define AV_COPY128(d, s)
Definition: intreadwrite.h:586
uint8_t parse_history[4]
Definition: h264.h:645
int nal_hrd_parameters_present_flag
Definition: h264.h:195
const uint8_t * intra_pcm_ptr
Definition: h264.h:422
uint16_t * slice_table_base
Definition: h264.h:500
int log2_max_frame_num
log2_max_frame_num_minus4 + 4
Definition: h264.h:156
#define MB_TYPE_8x8
Bi-dir predicted.
Definition: avutil.h:218
int cur_chroma_format_idc
Definition: h264.h:638
const uint8_t * ff_h264_decode_nal(H264Context *h, const uint8_t *src, int *dst_length, int *consumed, int length)
Decode a network abstraction layer unit.
Definition: h264.c:514
int long_arg
index, pic_num, or num long refs depending on opcode
Definition: h264.h:254
function y
Definition: D.m:1
int sei_ct_type
Bit set of clock types for fields/frames in picture timing SEI message.
Definition: h264.h:598
#define MB_TYPE_16x8
int bit_depth_luma
bit_depth_luma_minus8 + 8
Definition: h264.h:203
static av_always_inline void write_back_intra_pred_mode(H264Context *h)
Definition: h264.h:872
int intra16x16_pred_mode
Definition: h264.h:301
int prev_poc_lsb
poc_lsb of the last reference pic for POC type 0
Definition: h264.h:509
int linesize
Definition: h264.h:283
int col_fieldoff
Definition: h264.h:399
Picture * cur_pic_ptr
Definition: h264.h:273
int mb_width
Definition: h264.h:465
enum AVPictureType pict_type
Definition: h264.h:574
int current_slice
current slice number, used to initialize slice_num of each thread/context
Definition: h264.h:556
int mb_width
pic_width_in_mbs_minus1 + 1
Definition: h264.h:165
int slice_group_count
num_slice_groups_minus1 + 1
Definition: h264.h:217
uint32_t * mb2b_xy
Definition: h264.h:352
int cpb_cnt
See H.264 E.1.2.
Definition: h264.h:199
int slice_type_fixed
Definition: h264.h:376
int delta_poc_bottom
Definition: h264.h:505
int ff_h264_fill_default_ref_list(H264Context *h)
Fill the default_ref_list.
Definition: h264_refs.c:117
H264DSPContext h264dsp
Definition: h264.h:263
int ff_h264_get_profile(SPS *sps)
compute profile from sps
Definition: h264.c:2897
Definition: h264.h:107
AVColorSpace
#define av_always_inline
Definition: attributes.h:41
int chroma_weight_flag[2]
7.4.3.2 chroma_weight_lX_flag
Definition: h264.h:632
int8_t * intra4x4_pred_mode
Definition: h264.h:317
#define DC_PRED
Definition: h264pred.h:40
const char int length
Definition: avisynth_c.h:668
int mb_linesize
may be equal to s->linesize or s->linesize * 2, for mbaff
Definition: h264.h:356
int cpb_removal_delay_length
cpb_removal_delay_length_minus1 + 1
Definition: h264.h:201
8: frame tripling
Definition: h264.h:145
int deblocking_filter
disable_deblocking_filter_idc with 1 <-> 0
Definition: h264.h:473
#define AV_RN64A(p)
Definition: intreadwrite.h:522
#define LIST_NOT_USED
Definition: h264.h:338
uint8_t(* non_zero_count)[48]
Definition: h264.h:331
unsigned int crop_bottom
frame_cropping_rect_bottom_offset
Definition: h264.h:176
float min
Definition: h264.h:111
int ff_h264_check_intra_pred_mode(H264Context *h, int mode, int is_chroma)
Check if the top & left blocks are available if needed & change the dc mode so it only uses the avail...
Definition: h264.c:473
int slice_num
Definition: h264.h:372
int sei_recovery_frame_cnt
recovery_frame_cnt from SEI message
Definition: h264.h:617
int droppable
Definition: h264.h:287
int level_idc
Definition: h264.h:153
int nal_ref_idc
Definition: h264.h:480
void ff_h264_hl_decode_mb(H264Context *h)
Definition: h264.c:2469
void ff_h264_draw_horiz_band(H264Context *h, int y, int height)
Definition: h264.c:147
int b_stride
Definition: h264.h:354
int sei_dpb_output_delay
dpb_output_delay in picture timing SEI message, see H.264 C.2.2
Definition: h264.h:603
recovery point (frame # to decoder sync)
Definition: h264.h:130
Context Adaptive Binary Arithmetic Coder.
DSPContext.
Definition: dsputil.h:127
int neighbor_transform_size
number of neighbors (top and/or left) that used 8x8 dct
Definition: h264.h:344
int mb_mbaff
mb_aff_frame && mb_field_decoding_flag
Definition: h264.h:381
int short_ref_count
number of actual short term references
Definition: h264.h:543
int mb_slice_group_map_type
Definition: h264.h:218
enum AVColorSpace colorspace
Definition: h264.h:184