common.h
上传用户:hjq518
上传日期:2021-12-09
资源大小:5084k
文件大小:16k
源码类别:

Audio

开发平台:

Visual C++

  1. /*****************************************************************************
  2.  * common.h: h264 encoder
  3.  *****************************************************************************
  4.  * Copyright (C) 2003 Laurent Aimar
  5.  * $Id: common.h,v 1.1 2004/06/03 19:27:06 fenrir Exp $
  6.  *
  7.  * Authors: Laurent Aimar <fenrir@via.ecp.fr>
  8.  *
  9.  * This program is free software; you can redistribute it and/or modify
  10.  * it under the terms of the GNU General Public License as published by
  11.  * the Free Software Foundation; either version 2 of the License, or
  12.  * (at your option) any later version.
  13.  *
  14.  * This program is distributed in the hope that it will be useful,
  15.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17.  * GNU General Public License for more details.
  18.  *
  19.  * You should have received a copy of the GNU General Public License
  20.  * along with this program; if not, write to the Free Software
  21.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
  22.  *****************************************************************************/
  23. #ifndef _COMMON_H
  24. #define _COMMON_H 1
  25. #ifdef HAVE_STDINT_H
  26. #include <stdint.h>
  27. #else
  28. #include <inttypes.h>
  29. #endif
  30. #include <stdarg.h>
  31. #include <stdlib.h>
  32. #ifdef _MSC_VER
  33. #define snprintf _snprintf
  34. #define X264_VERSION "" // no configure script for msvc
  35. #endif
  36. /****************************************************************************
  37.  * Macros
  38.  ****************************************************************************/
  39. #define X264_MIN(a,b) ( (a)<(b) ? (a) : (b) )
  40. #define X264_MAX(a,b) ( (a)>(b) ? (a) : (b) )
  41. #define X264_MIN3(a,b,c) X264_MIN((a),X264_MIN((b),(c)))
  42. #define X264_MAX3(a,b,c) X264_MAX((a),X264_MAX((b),(c)))
  43. #define X264_MIN4(a,b,c,d) X264_MIN((a),X264_MIN3((b),(c),(d)))
  44. #define X264_MAX4(a,b,c,d) X264_MAX((a),X264_MAX3((b),(c),(d)))
  45. #define XCHG(type,a,b) { type t = a; a = b; b = t; }
  46. #define FIX8(f) ((int)(f*(1<<8)+.5))
  47. #if defined(__GNUC__) && (__GNUC__ > 3 || __GNUC__ == 3 && __GNUC_MINOR__ > 0)
  48. #define UNUSED __attribute__((unused))
  49. #else
  50. #define UNUSED
  51. #endif
  52. /****************************************************************************
  53.  * Includes
  54.  ****************************************************************************/
  55. #include "x264.h"
  56. #include "bs.h"
  57. #include "set.h"
  58. #include "predict.h"
  59. #include "pixel.h"
  60. #include "mc.h"
  61. #include "frame.h"
  62. #include "dct.h"
  63. #include "cabac.h"
  64. #include "csp.h"
  65. #include "quant.h"
  66. /****************************************************************************
  67.  * Generals functions
  68.  ****************************************************************************/
  69. /* x264_malloc : will do or emulate a memalign
  70.  * XXX you HAVE TO use x264_free for buffer allocated
  71.  * with x264_malloc
  72.  */
  73. void *x264_malloc( int );
  74. void *x264_realloc( void *p, int i_size );
  75. void  x264_free( void * );
  76. /* x264_slurp_file: malloc space for the whole file and read it */
  77. char *x264_slurp_file( const char *filename );
  78. /* mdate: return the current date in microsecond */
  79. int64_t x264_mdate( void );
  80. /* x264_param2string: return a (malloced) string containing most of
  81.  * the encoding options */
  82. char *x264_param2string( x264_param_t *p, int b_res );
  83. /* log */
  84. void x264_log( x264_t *h, int i_level, const char *psz_fmt, ... );
  85. static inline int x264_clip3( int v, int i_min, int i_max )
  86. {
  87.     return ( (v < i_min) ? i_min : (v > i_max) ? i_max : v );
  88. }
  89. static inline float x264_clip3f( float v, float f_min, float f_max )
  90. {
  91.     return ( (v < f_min) ? f_min : (v > f_max) ? f_max : v );
  92. }
  93. static inline int x264_median( int a, int b, int c )
  94. {
  95.     int min = a, max =a;
  96.     if( b < min )
  97.         min = b;
  98.     else
  99.         max = b;    /* no need to do 'b > max' (more consuming than always doing affectation) */
  100.     if( c < min )
  101.         min = c;
  102.     else if( c > max )
  103.         max = c;
  104.     return a + b + c - min - max;
  105. }
  106. /****************************************************************************
  107.  *
  108.  ****************************************************************************/
  109. enum slice_type_e
  110. {
  111.     SLICE_TYPE_P  = 0,
  112.     SLICE_TYPE_B  = 1,
  113.     SLICE_TYPE_I  = 2,
  114.     SLICE_TYPE_SP = 3,
  115.     SLICE_TYPE_SI = 4
  116. };
  117. static const char slice_type_to_char[] = { 'P', 'B', 'I', 'S', 'S' };
  118. typedef struct
  119. {
  120.     x264_sps_t *sps;
  121.     x264_pps_t *pps;
  122.     int i_type;
  123.     int i_first_mb;
  124.     int i_last_mb;
  125.     int i_pps_id;
  126.     int i_frame_num;
  127.     int b_field_pic;
  128.     int b_bottom_field;
  129.     int i_idr_pic_id;   /* -1 if nal_type != 5 */
  130.     int i_poc_lsb;
  131.     int i_delta_poc_bottom;
  132.     int i_delta_poc[2];
  133.     int i_redundant_pic_cnt;
  134.     int b_direct_spatial_mv_pred;
  135.     int b_num_ref_idx_override;
  136.     int i_num_ref_idx_l0_active;
  137.     int i_num_ref_idx_l1_active;
  138.     int b_ref_pic_list_reordering_l0;
  139.     int b_ref_pic_list_reordering_l1;
  140.     struct {
  141.         int idc;
  142.         int arg;
  143.     } ref_pic_list_order[2][16];
  144.     int i_cabac_init_idc;
  145.     int i_qp;
  146.     int i_qp_delta;
  147.     int b_sp_for_swidth;
  148.     int i_qs_delta;
  149.     /* deblocking filter */
  150.     int i_disable_deblocking_filter_idc;
  151.     int i_alpha_c0_offset;
  152.     int i_beta_offset;
  153. } x264_slice_header_t;
  154. /* From ffmpeg
  155.  */
  156. #define X264_SCAN8_SIZE (6*8)
  157. #define X264_SCAN8_0 (4+1*8)
  158. static const int x264_scan8[16+2*4] =
  159. {
  160.     /* Luma */
  161.     4+1*8, 5+1*8, 4+2*8, 5+2*8,
  162.     6+1*8, 7+1*8, 6+2*8, 7+2*8,
  163.     4+3*8, 5+3*8, 4+4*8, 5+4*8,
  164.     6+3*8, 7+3*8, 6+4*8, 7+4*8,
  165.     /* Cb */
  166.     1+1*8, 2+1*8,
  167.     1+2*8, 2+2*8,
  168.     /* Cr */
  169.     1+4*8, 2+4*8,
  170.     1+5*8, 2+5*8,
  171. };
  172. /*
  173.    0 1 2 3 4 5 6 7
  174.  0
  175.  1   B B   L L L L
  176.  2   B B   L L L L
  177.  3         L L L L
  178.  4   R R   L L L L
  179.  5   R R
  180. */
  181. #define X264_BFRAME_MAX 16
  182. #define X264_SLICE_MAX 4
  183. #define X264_NAL_MAX (4 + X264_SLICE_MAX)
  184. typedef struct x264_ratecontrol_t   x264_ratecontrol_t;
  185. typedef struct x264_vlc_table_t     x264_vlc_table_t;
  186. struct x264_t
  187. {
  188.     /* encoder parameters */
  189.     x264_param_t    param;
  190.     x264_t *thread[X264_SLICE_MAX];
  191.     /* bitstream output */
  192.     struct
  193.     {
  194.         int         i_nal;
  195.         x264_nal_t  nal[X264_NAL_MAX];
  196.         int         i_bitstream;    /* size of p_bitstream */
  197.         uint8_t     *p_bitstream;   /* will hold data for all nal */
  198.         bs_t        bs;
  199.     } out;
  200.     /* frame number/poc */
  201.     int             i_frame;
  202.     int             i_frame_offset; /* decoding only */
  203.     int             i_frame_num;    /* decoding only */
  204.     int             i_poc_msb;      /* decoding only */
  205.     int             i_poc_lsb;      /* decoding only */
  206.     int             i_poc;          /* decoding only */
  207.     int             i_thread_num;   /* threads only */
  208.     int             i_nal_type;     /* threads only */
  209.     int             i_nal_ref_idc;  /* threads only */
  210.     /* We use only one SPS and one PPS */
  211.     x264_sps_t      sps_array[1];
  212.     x264_sps_t      *sps;
  213.     x264_pps_t      pps_array[1];
  214.     x264_pps_t      *pps;
  215.     int             i_idr_pic_id;
  216.     int             dequant4_mf[4][6][4][4];
  217.     int             dequant8_mf[2][6][8][8];
  218.     int             quant4_mf[4][6][4][4];
  219.     int             quant8_mf[2][6][8][8];
  220.     int             unquant4_mf[4][52][16];
  221.     int             unquant8_mf[2][52][64];
  222.     uint32_t        nr_residual_sum[2][64];
  223.     uint32_t        nr_offset[2][64];
  224.     uint32_t        nr_count[2];
  225.     /* Slice header */
  226.     x264_slice_header_t sh;
  227.     /* cabac context */
  228.     x264_cabac_t    cabac;
  229.     struct
  230.     {
  231.         /* Frames to be encoded (whose types have been decided) */
  232.         x264_frame_t *current[X264_BFRAME_MAX+3];
  233.         /* Temporary buffer (frames types not yet decided) */
  234.         x264_frame_t *next[X264_BFRAME_MAX+3];
  235.         /* Unused frames */
  236.         x264_frame_t *unused[X264_BFRAME_MAX+3];
  237.         /* For adaptive B decision */
  238.         x264_frame_t *last_nonb;
  239.         /* frames used for reference +1 for decoding + sentinels */
  240.         x264_frame_t *reference[16+2+1+2];
  241.         int i_last_idr; /* Frame number of the last IDR */
  242.         int i_input;    /* Number of input frames already accepted */
  243.         int i_max_dpb;  /* Number of frames allocated in the decoded picture buffer */
  244.         int i_max_ref0;
  245.         int i_max_ref1;
  246.         int i_delay;    /* Number of frames buffered for B reordering */
  247.         int b_have_lowres;  /* Whether 1/2 resolution luma planes are being used */
  248.     } frames;
  249.     /* current frame being encoded */
  250.     x264_frame_t    *fenc;
  251.     /* frame being reconstructed */
  252.     x264_frame_t    *fdec;
  253.     /* references lists */
  254.     int             i_ref0;
  255.     x264_frame_t    *fref0[16+3];     /* ref list 0 */
  256.     int             i_ref1;
  257.     x264_frame_t    *fref1[16+3];     /* ref list 1 */
  258.     int             b_ref_reorder[2];
  259.     /* Current MB DCT coeffs */
  260.     struct
  261.     {
  262.         DECLARE_ALIGNED( int, luma16x16_dc[16], 16 );
  263.         DECLARE_ALIGNED( int, chroma_dc[2][4], 16 );
  264.         // FIXME merge with union
  265.         DECLARE_ALIGNED( int, luma8x8[4][64], 16 );
  266.         union
  267.         {
  268.             DECLARE_ALIGNED( int, residual_ac[15], 16 );
  269.             DECLARE_ALIGNED( int, luma4x4[16], 16 );
  270.         } block[16+8];
  271.     } dct;
  272.     /* MB table and cache for current frame/mb */
  273.     struct
  274.     {
  275.         int     i_mb_count;                 /* number of mbs in a frame */
  276.         /* Strides */
  277.         int     i_mb_stride;
  278.         int     i_b8_stride;
  279.         int     i_b4_stride;
  280.         /* Current index */
  281.         int     i_mb_x;
  282.         int     i_mb_y;
  283.         int     i_mb_xy;
  284.         int     i_b8_xy;
  285.         int     i_b4_xy;
  286.         
  287.         /* Search parameters */
  288.         int     i_me_method;
  289.         int     i_subpel_refine;
  290.         int     b_chroma_me;
  291.         int     b_trellis;
  292.         int     b_noise_reduction;
  293.         /* Allowed qpel MV range to stay within the picture + emulated edge pixels */
  294.         int     mv_min[2];
  295.         int     mv_max[2];
  296.         /* Subpel MV range for motion search.
  297.          * same mv_min/max but includes levels' i_mv_range. */
  298.         int     mv_min_spel[2];
  299.         int     mv_max_spel[2];
  300.         /* Fullpel MV range for motion search */
  301.         int     mv_min_fpel[2];
  302.         int     mv_max_fpel[2];
  303.         /* neighboring MBs */
  304.         unsigned int i_neighbour;
  305.         unsigned int i_neighbour8[4];       /* neighbours of each 8x8 or 4x4 block that are available */
  306.         unsigned int i_neighbour4[16];      /* at the time the block is coded */
  307.         int     i_mb_type_top; 
  308.         int     i_mb_type_left; 
  309.         int     i_mb_type_topleft; 
  310.         int     i_mb_type_topright; 
  311.         /* mb table */
  312.         int8_t  *type;                      /* mb type */
  313.         int8_t  *qp;                        /* mb qp */
  314.         int16_t *cbp;                       /* mb cbp: 0x0?: luma, 0x?0: chroma, 0x100: luma dc, 0x0200 and 0x0400: chroma dc  (all set for PCM)*/
  315.         int8_t  (*intra4x4_pred_mode)[7];   /* intra4x4 pred mode. for non I4x4 set to I_PRED_4x4_DC(2) */
  316.         uint8_t (*non_zero_count)[16+4+4];  /* nzc. for I_PCM set to 16 */
  317.         int8_t  *chroma_pred_mode;          /* chroma_pred_mode. cabac only. for non intra I_PRED_CHROMA_DC(0) */
  318.         int16_t (*mv[2])[2];                /* mb mv. set to 0 for intra mb */
  319.         int16_t (*mvd[2])[2];               /* mb mv difference with predict. set to 0 if intra. cabac only */
  320.         int8_t   *ref[2];                   /* mb ref. set to -1 if non used (intra or Lx only) */
  321.         int16_t (*mvr[2][16])[2];           /* 16x16 mv for each possible ref */
  322.         int8_t  *skipbp;                    /* block pattern for SKIP or DIRECT (sub)mbs. B-frames + cabac only */
  323.         int8_t  *mb_transform_size;         /* transform_size_8x8_flag of each mb */
  324.         /* current value */
  325.         int     i_type;
  326.         int     i_partition;
  327.         int     i_sub_partition[4];
  328.         int     b_transform_8x8;
  329.         int     i_cbp_luma;
  330.         int     i_cbp_chroma;
  331.         int     i_intra16x16_pred_mode;
  332.         int     i_chroma_pred_mode;
  333.         struct
  334.         {
  335.             /* space for p_fenc and p_fdec */
  336. #define FENC_STRIDE 16
  337. #define FDEC_STRIDE 32
  338.             DECLARE_ALIGNED( uint8_t, fenc_buf[24*FENC_STRIDE], 16 );
  339.             DECLARE_ALIGNED( uint8_t, fdec_buf[27*FDEC_STRIDE], 16 );
  340.             /* pointer over mb of the frame to be compressed */
  341.             uint8_t *p_fenc[3];
  342.             /* pointer over mb of the frame to be reconstrucated  */
  343.             uint8_t *p_fdec[3];
  344.             /* pointer over mb of the references */
  345.             uint8_t *p_fref[2][16][4+2]; /* last: lN, lH, lV, lHV, cU, cV */
  346.             uint16_t *p_integral[2][16];
  347.             /* fref stride */
  348.             int     i_stride[3];
  349.         } pic;
  350.         /* cache */
  351.         struct
  352.         {
  353.             /* real intra4x4_pred_mode if I_4X4 or I_8X8, I_PRED_4x4_DC if mb available, -1 if not */
  354.             int     intra4x4_pred_mode[X264_SCAN8_SIZE];
  355.             /* i_non_zero_count if availble else 0x80 */
  356.             int     non_zero_count[X264_SCAN8_SIZE];
  357.             /* -1 if unused, -2 if unavaible */
  358.             int8_t  ref[2][X264_SCAN8_SIZE];
  359.             /* 0 if non avaible */
  360.             int16_t mv[2][X264_SCAN8_SIZE][2];
  361.             int16_t mvd[2][X264_SCAN8_SIZE][2];
  362.             /* 1 if SKIP or DIRECT. set only for B-frames + CABAC */
  363.             int8_t  skip[X264_SCAN8_SIZE];
  364.             int16_t direct_mv[2][X264_SCAN8_SIZE][2];
  365.             int8_t  direct_ref[2][X264_SCAN8_SIZE];
  366.             /* number of neighbors (top and left) that used 8x8 dct */
  367.             int     i_neighbour_transform_size;
  368.             int     b_transform_8x8_allowed;
  369.         } cache;
  370.         /* */
  371.         int     i_qp;       /* current qp */
  372.         int     i_last_qp;  /* last qp */
  373.         int     i_last_dqp; /* last delta qp */
  374.         int     b_variable_qp; /* whether qp is allowed to vary per macroblock */
  375.         int     b_lossless;
  376.         int     b_direct_auto_read; /* take stats for --direct auto from the 2pass log */
  377.         int     b_direct_auto_write; /* analyse direct modes, to use and/or save */
  378.         /* B_direct and weighted prediction */
  379.         int     dist_scale_factor[16][16];
  380.         int     bipred_weight[16][16];
  381.         /* maps fref1[0]'s ref indices into the current list0 */
  382.         int     map_col_to_list0_buf[2]; // for negative indices
  383.         int     map_col_to_list0[16];
  384.     } mb;
  385.     /* rate control encoding only */
  386.     x264_ratecontrol_t *rc;
  387.     /* stats */
  388.     struct
  389.     {
  390.         /* Current frame stats */
  391.         struct
  392.         {
  393.             /* Headers bits (MV+Ref+MB Block Type */
  394.             int i_hdr_bits;
  395.             /* Texture bits (Intra/Predicted) */
  396.             int i_itex_bits;
  397.             int i_ptex_bits;
  398.             /* ? */
  399.             int i_misc_bits;
  400.             /* MB type counts */
  401.             int i_mb_count[19];
  402.             int i_mb_count_i;
  403.             int i_mb_count_p;
  404.             int i_mb_count_skip;
  405.             int i_mb_count_8x8dct[2];
  406.             int i_mb_count_size[7];
  407.             int i_mb_count_ref[16];
  408.             /* Estimated (SATD) cost as Intra/Predicted frame */
  409.             /* XXX: both omit the cost of MBs coded as P_SKIP */
  410.             int i_intra_cost;
  411.             int i_inter_cost;
  412.             /* Adaptive direct mv pred */
  413.             int i_direct_score[2];
  414.         } frame;
  415.         /* Cummulated stats */
  416.         /* per slice info */
  417.         int     i_slice_count[5];
  418.         int64_t i_slice_size[5];
  419.         int     i_slice_qp[5];
  420.         /* */
  421.         int64_t i_sqe_global[5];
  422.         float   f_psnr_average[5];
  423.         float   f_psnr_mean_y[5];
  424.         float   f_psnr_mean_u[5];
  425.         float   f_psnr_mean_v[5];
  426.         /* */
  427.         int64_t i_mb_count[5][19];
  428.         int64_t i_mb_count_8x8dct[2];
  429.         int64_t i_mb_count_size[2][7];
  430.         int64_t i_mb_count_ref[2][16];
  431.         /* */
  432.         int     i_direct_score[2];
  433.         int     i_direct_frames[2];
  434.     } stat;
  435.     /* CPU functions dependants */
  436.     x264_predict_t      predict_16x16[4+3];
  437.     x264_predict_t      predict_8x8c[4+3];
  438.     x264_predict8x8_t   predict_8x8[9+3];
  439.     x264_predict_t      predict_4x4[9+3];
  440.     x264_pixel_function_t pixf;
  441.     x264_mc_functions_t   mc;
  442.     x264_dct_function_t   dctf;
  443.     x264_csp_function_t   csp;
  444.     x264_quant_function_t quantf;
  445.     x264_deblock_function_t loopf;
  446.     /* vlc table for decoding purpose only */
  447.     x264_vlc_table_t *x264_coeff_token_lookup[5];
  448.     x264_vlc_table_t *x264_level_prefix_lookup;
  449.     x264_vlc_table_t *x264_total_zeros_lookup[15];
  450.     x264_vlc_table_t *x264_total_zeros_dc_lookup[3];
  451.     x264_vlc_table_t *x264_run_before_lookup[7];
  452. #if VISUALIZE
  453.     struct visualize_t *visualize;
  454. #endif
  455. };
  456. // included at the end because it needs x264_t
  457. #include "macroblock.h"
  458. #endif