00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00028 #ifndef FFMPEG_H264_H
00029 #define FFMPEG_H264_H
00030
00031 #include "dsputil.h"
00032 #include "cabac.h"
00033 #include "mpegvideo.h"
00034 #include "h264pred.h"
00035
00036 #define interlaced_dct interlaced_dct_is_a_bad_name
00037 #define mb_intra mb_intra_is_not_initialized_see_mb_type
00038
00039 #define LUMA_DC_BLOCK_INDEX 25
00040 #define CHROMA_DC_BLOCK_INDEX 26
00041
00042 #define CHROMA_DC_COEFF_TOKEN_VLC_BITS 8
00043 #define COEFF_TOKEN_VLC_BITS 8
00044 #define TOTAL_ZEROS_VLC_BITS 9
00045 #define CHROMA_DC_TOTAL_ZEROS_VLC_BITS 3
00046 #define RUN_VLC_BITS 3
00047 #define RUN7_VLC_BITS 6
00048
00049 #define MAX_SPS_COUNT 32
00050 #define MAX_PPS_COUNT 256
00051
00052 #define MAX_MMCO_COUNT 66
00053
00054 #define MAX_DELAYED_PIC_COUNT 16
00055
00056
00057
00058 #define ALLOW_INTERLACE
00059
00060 #define ALLOW_NOCHROMA
00061
00062 #ifdef ALLOW_INTERLACE
00063 #define MB_MBAFF h->mb_mbaff
00064 #define MB_FIELD h->mb_field_decoding_flag
00065 #define FRAME_MBAFF h->mb_aff_frame
00066 #define FIELD_PICTURE (s->picture_structure != PICT_FRAME)
00067 #else
00068 #define MB_MBAFF 0
00069 #define MB_FIELD 0
00070 #define FRAME_MBAFF 0
00071 #define FIELD_PICTURE 0
00072 #undef IS_INTERLACED
00073 #define IS_INTERLACED(mb_type) 0
00074 #endif
00075 #define FIELD_OR_MBAFF_PICTURE (FRAME_MBAFF || FIELD_PICTURE)
00076
00077 #ifdef ALLOW_NOCHROMA
00078 #define CHROMA h->sps.chroma_format_idc
00079 #else
00080 #define CHROMA 1
00081 #endif
00082
00083 #ifndef ENABLE_H264_ENCODER
00084 #define ENABLE_H264_ENCODER 0
00085 #endif
00086
00090 typedef struct SPS{
00091
00092 int profile_idc;
00093 int level_idc;
00094 int chroma_format_idc;
00095 int transform_bypass;
00096 int log2_max_frame_num;
00097 int poc_type;
00098 int log2_max_poc_lsb;
00099 int delta_pic_order_always_zero_flag;
00100 int offset_for_non_ref_pic;
00101 int offset_for_top_to_bottom_field;
00102 int poc_cycle_length;
00103 int ref_frame_count;
00104 int gaps_in_frame_num_allowed_flag;
00105 int mb_width;
00106 int mb_height;
00107 int frame_mbs_only_flag;
00108 int mb_aff;
00109 int direct_8x8_inference_flag;
00110 int crop;
00111 int crop_left;
00112 int crop_right;
00113 int crop_top;
00114 int crop_bottom;
00115 int vui_parameters_present_flag;
00116 AVRational sar;
00117 int timing_info_present_flag;
00118 uint32_t num_units_in_tick;
00119 uint32_t time_scale;
00120 int fixed_frame_rate_flag;
00121 short offset_for_ref_frame[256];
00122 int bitstream_restriction_flag;
00123 int num_reorder_frames;
00124 int scaling_matrix_present;
00125 uint8_t scaling_matrix4[6][16];
00126 uint8_t scaling_matrix8[2][64];
00127 }SPS;
00128
00132 typedef struct PPS{
00133 unsigned int sps_id;
00134 int cabac;
00135 int pic_order_present;
00136 int slice_group_count;
00137 int mb_slice_group_map_type;
00138 unsigned int ref_count[2];
00139 int weighted_pred;
00140 int weighted_bipred_idc;
00141 int init_qp;
00142 int init_qs;
00143 int chroma_qp_index_offset[2];
00144 int deblocking_filter_parameters_present;
00145 int constrained_intra_pred;
00146 int redundant_pic_cnt_present;
00147 int transform_8x8_mode;
00148 uint8_t scaling_matrix4[6][16];
00149 uint8_t scaling_matrix8[2][64];
00150 uint8_t chroma_qp_table[2][64];
00151 int chroma_qp_diff;
00152 }PPS;
00153
00157 typedef enum MMCOOpcode{
00158 MMCO_END=0,
00159 MMCO_SHORT2UNUSED,
00160 MMCO_LONG2UNUSED,
00161 MMCO_SHORT2LONG,
00162 MMCO_SET_MAX_LONG,
00163 MMCO_RESET,
00164 MMCO_LONG,
00165 } MMCOOpcode;
00166
00170 typedef struct MMCO{
00171 MMCOOpcode opcode;
00172 int short_pic_num;
00173 int long_arg;
00174 } MMCO;
00175
00179 typedef struct H264Context{
00180 MpegEncContext s;
00181 int nal_ref_idc;
00182 int nal_unit_type;
00183 uint8_t *rbsp_buffer[2];
00184 unsigned int rbsp_buffer_size[2];
00185
00189 int is_avc;
00190 int got_avcC;
00191 int nal_length_size;
00192
00193 int chroma_qp[2];
00194
00195 int prev_mb_skipped;
00196 int next_mb_skipped;
00197
00198
00199 int chroma_pred_mode;
00200 int intra16x16_pred_mode;
00201
00202 int top_mb_xy;
00203 int left_mb_xy[2];
00204
00205 int8_t intra4x4_pred_mode_cache[5*8];
00206 int8_t (*intra4x4_pred_mode)[8];
00207 H264PredContext hpc;
00208 unsigned int topleft_samples_available;
00209 unsigned int top_samples_available;
00210 unsigned int topright_samples_available;
00211 unsigned int left_samples_available;
00212 uint8_t (*top_borders[2])[16+2*8];
00213 uint8_t left_border[2*(17+2*9)];
00214
00219 DECLARE_ALIGNED_8(uint8_t, non_zero_count_cache[6*8]);
00220 uint8_t (*non_zero_count)[16];
00221
00225 DECLARE_ALIGNED_8(int16_t, mv_cache[2][5*8][2]);
00226 DECLARE_ALIGNED_8(int8_t, ref_cache[2][5*8]);
00227 #define LIST_NOT_USED -1 //FIXME rename?
00228 #define PART_NOT_AVAILABLE -2
00229
00233 int mv_cache_clean[2];
00234
00238 int neighbor_transform_size;
00239
00244 int block_offset[2*(16+8)];
00245
00246 uint32_t *mb2b_xy;
00247 uint32_t *mb2b8_xy;
00248 int b_stride;
00249 int b8_stride;
00250
00251 int mb_linesize;
00252 int mb_uvlinesize;
00253
00254 int emu_edge_width;
00255 int emu_edge_height;
00256
00257 int halfpel_flag;
00258 int thirdpel_flag;
00259
00260 int unknown_svq3_flag;
00261 int next_slice_index;
00262
00263 SPS *sps_buffers[MAX_SPS_COUNT];
00264 SPS sps;
00265
00266 PPS *pps_buffers[MAX_PPS_COUNT];
00270 PPS pps;
00271
00272 uint32_t dequant4_buffer[6][52][16];
00273 uint32_t dequant8_buffer[2][52][64];
00274 uint32_t (*dequant4_coeff[6])[16];
00275 uint32_t (*dequant8_coeff[2])[64];
00276 int dequant_coeff_pps;
00277
00278 int slice_num;
00279 uint8_t *slice_table_base;
00280 uint8_t *slice_table;
00281 int slice_type;
00282 int slice_type_nos;
00283 int slice_type_fixed;
00284
00285
00286 int mb_aff_frame;
00287 int mb_field_decoding_flag;
00288 int mb_mbaff;
00289
00290 unsigned int sub_mb_type[4];
00291
00292
00293 int poc_lsb;
00294 int poc_msb;
00295 int delta_poc_bottom;
00296 int delta_poc[2];
00297 int frame_num;
00298 int prev_poc_msb;
00299 int prev_poc_lsb;
00300 int frame_num_offset;
00301 int prev_frame_num_offset;
00302 int prev_frame_num;
00303
00307 int curr_pic_num;
00308
00312 int max_pic_num;
00313
00314
00315 int use_weight;
00316 int use_weight_chroma;
00317 int luma_log2_weight_denom;
00318 int chroma_log2_weight_denom;
00319 int luma_weight[2][48];
00320 int luma_offset[2][48];
00321 int chroma_weight[2][48][2];
00322 int chroma_offset[2][48][2];
00323 int implicit_weight[48][48];
00324
00325
00326 int deblocking_filter;
00327 int slice_alpha_c0_offset;
00328 int slice_beta_offset;
00329
00330 int redundant_pic_count;
00331
00332 int direct_spatial_mv_pred;
00333 int dist_scale_factor[16];
00334 int dist_scale_factor_field[2][32];
00335 int map_col_to_list0[2][16+32];
00336 int map_col_to_list0_field[2][2][16+32];
00337
00341 unsigned int ref_count[2];
00342 unsigned int list_count;
00343 Picture *short_ref[32];
00344 Picture *long_ref[32];
00345 Picture default_ref_list[2][32];
00346 Picture ref_list[2][48];
00349 int ref2frm[16][2][64];
00350 Picture *delayed_pic[MAX_DELAYED_PIC_COUNT+2];
00351 int outputed_poc;
00352
00356 MMCO mmco[MAX_MMCO_COUNT];
00357 int mmco_index;
00358
00359 int long_ref_count;
00360 int short_ref_count;
00361
00362
00363 GetBitContext intra_gb;
00364 GetBitContext inter_gb;
00365 GetBitContext *intra_gb_ptr;
00366 GetBitContext *inter_gb_ptr;
00367
00368 DECLARE_ALIGNED_8(DCTELEM, mb[16*24]);
00369 DCTELEM mb_padding[256];
00370
00374 CABACContext cabac;
00375 uint8_t cabac_state[460];
00376 int cabac_init_idc;
00377
00378
00379 uint16_t *cbp_table;
00380 int cbp;
00381 int top_cbp;
00382 int left_cbp;
00383
00384 uint8_t *chroma_pred_mode_table;
00385 int last_qscale_diff;
00386 int16_t (*mvd_table[2])[2];
00387 DECLARE_ALIGNED_8(int16_t, mvd_cache[2][5*8][2]);
00388 uint8_t *direct_table;
00389 uint8_t direct_cache[5*8];
00390
00391 uint8_t zigzag_scan[16];
00392 uint8_t zigzag_scan8x8[64];
00393 uint8_t zigzag_scan8x8_cavlc[64];
00394 uint8_t field_scan[16];
00395 uint8_t field_scan8x8[64];
00396 uint8_t field_scan8x8_cavlc[64];
00397 const uint8_t *zigzag_scan_q0;
00398 const uint8_t *zigzag_scan8x8_q0;
00399 const uint8_t *zigzag_scan8x8_cavlc_q0;
00400 const uint8_t *field_scan_q0;
00401 const uint8_t *field_scan8x8_q0;
00402 const uint8_t *field_scan8x8_cavlc_q0;
00403
00404 int x264_build;
00405
00410 struct H264Context *thread_context[MAX_THREADS];
00411
00415 int current_slice;
00416
00423 int max_contexts;
00424
00429 int single_decode_warning;
00430
00431 int last_slice_type;
00434 int mb_xy;
00435
00436 }H264Context;
00437
00438 #endif