Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

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