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

Audio

开发平台:

Visual C++

  1. /*****************************************************************************
  2.  * rdo.c: h264 encoder library (rate-distortion optimization)
  3.  *****************************************************************************
  4.  * Copyright (C) 2005-2008 Loren Merritt <lorenm@u.washington.edu>
  5.  *
  6.  * This program is free software; you can redistribute it and/or modify
  7.  * it under the terms of the GNU General Public License as published by
  8.  * the Free Software Foundation; either version 2 of the License, or
  9.  * (at your option) any later version.
  10.  *
  11.  * This program is distributed in the hope that it will be useful,
  12.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14.  * GNU General Public License for more details.
  15.  *
  16.  * You should have received a copy of the GNU General Public License
  17.  * along with this program; if not, write to the Free Software
  18.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111, USA.
  19.  *****************************************************************************/
  20. /* duplicate all the writer functions, just calculating bit cost
  21.  * instead of writing the bitstream.
  22.  * TODO: use these for fast 1st pass too. */
  23. #define RDO_SKIP_BS
  24. static uint8_t cabac_prefix_transition[15][128];
  25. static uint16_t cabac_prefix_size[15][128];
  26. /* CAVLC: produces exactly the same bit count as a normal encode */
  27. /* this probably still leaves some unnecessary computations */
  28. #define bs_write1(s,v)     ((s)->i_bits_encoded += 1)
  29. #define bs_write(s,n,v)    ((s)->i_bits_encoded += (n))
  30. #define bs_write_ue(s,v)   ((s)->i_bits_encoded += bs_size_ue(v))
  31. #define bs_write_se(s,v)   ((s)->i_bits_encoded += bs_size_se(v))
  32. #define bs_write_te(s,v,l) ((s)->i_bits_encoded += bs_size_te(v,l))
  33. #define x264_macroblock_write_cavlc  static x264_macroblock_size_cavlc
  34. #include "cavlc.c"
  35. /* CABAC: not exactly the same. x264_cabac_size_decision() keeps track of
  36.  * fractional bits, but only finite precision. */
  37. #undef  x264_cabac_encode_decision
  38. #define x264_cabac_encode_decision(c,x,v) x264_cabac_size_decision(c,x,v)
  39. #define x264_cabac_encode_terminal(c)     x264_cabac_size_decision(c,276,0)
  40. #define x264_cabac_encode_bypass(c,v)     ((c)->f8_bits_encoded += 256)
  41. #define x264_cabac_encode_ue_bypass(c,e,v) ((c)->f8_bits_encoded += (bs_size_ue_big(v+(1<<e)-1)-e)<<8)
  42. #define x264_cabac_encode_flush(h,c)
  43. #define x264_macroblock_write_cabac  static x264_macroblock_size_cabac
  44. #include "cabac.c"
  45. #define COPY_CABAC h->mc.memcpy_aligned( &cabac_tmp.f8_bits_encoded, &h->cabac.f8_bits_encoded, 
  46.         sizeof(x264_cabac_t) - offsetof(x264_cabac_t,f8_bits_encoded) )
  47. static int ssd_mb( x264_t *h )
  48. {
  49.     return h->pixf.ssd[PIXEL_16x16]( h->mb.pic.p_fenc[0], FENC_STRIDE,
  50.                                      h->mb.pic.p_fdec[0], FDEC_STRIDE )
  51.          + h->pixf.ssd[PIXEL_8x8](   h->mb.pic.p_fenc[1], FENC_STRIDE,
  52.                                      h->mb.pic.p_fdec[1], FDEC_STRIDE )
  53.          + h->pixf.ssd[PIXEL_8x8](   h->mb.pic.p_fenc[2], FENC_STRIDE,
  54.                                      h->mb.pic.p_fdec[2], FDEC_STRIDE );
  55. }
  56. static int ssd_plane( x264_t *h, int size, int p, int x, int y )
  57. {
  58.     return h->pixf.ssd[size]( h->mb.pic.p_fenc[p] + x+y*FENC_STRIDE, FENC_STRIDE,
  59.                               h->mb.pic.p_fdec[p] + x+y*FDEC_STRIDE, FDEC_STRIDE );
  60. }
  61. static int x264_rd_cost_mb( x264_t *h, int i_lambda2 )
  62. {
  63.     int b_transform_bak = h->mb.b_transform_8x8;
  64.     int i_ssd;
  65.     int i_bits;
  66.     x264_macroblock_encode( h );
  67.     i_ssd = ssd_mb( h );
  68.     if( IS_SKIP( h->mb.i_type ) )
  69.     {
  70.         i_bits = (1 * i_lambda2 + 128) >> 8;
  71.     }
  72.     else if( h->param.b_cabac )
  73.     {
  74.         x264_cabac_t cabac_tmp;
  75.         COPY_CABAC;
  76.         x264_macroblock_size_cabac( h, &cabac_tmp );
  77.         i_bits = ( (uint64_t)cabac_tmp.f8_bits_encoded * i_lambda2 + 32768 ) >> 16;
  78.     }
  79.     else
  80.     {
  81.         bs_t bs_tmp = h->out.bs;
  82.         bs_tmp.i_bits_encoded = 0;
  83.         x264_macroblock_size_cavlc( h, &bs_tmp );
  84.         i_bits = ( bs_tmp.i_bits_encoded * i_lambda2 + 128 ) >> 8;
  85.     }
  86.     h->mb.b_transform_8x8 = b_transform_bak;
  87.     return i_ssd + i_bits;
  88. }
  89. /* subpartition RD functions use 8 bits more precision to avoid large rounding errors at low QPs */
  90. uint64_t x264_rd_cost_part( x264_t *h, int i_lambda2, int i8, int i_pixel )
  91. {
  92.     uint64_t i_ssd, i_bits;
  93.     if( i_pixel == PIXEL_16x16 )
  94.     {
  95.         int type_bak = h->mb.i_type;
  96.         int i_cost = x264_rd_cost_mb( h, i_lambda2 );
  97.         h->mb.i_type = type_bak;
  98.         return i_cost;
  99.     }
  100.     x264_macroblock_encode_p8x8( h, i8 );
  101.     if( i_pixel == PIXEL_16x8 )
  102.         x264_macroblock_encode_p8x8( h, i8+1 );
  103.     if( i_pixel == PIXEL_8x16 )
  104.         x264_macroblock_encode_p8x8( h, i8+2 );
  105.     i_ssd = ssd_plane( h, i_pixel,   0, (i8&1)*8, (i8>>1)*8 )
  106.           + ssd_plane( h, i_pixel+3, 1, (i8&1)*4, (i8>>1)*4 )
  107.           + ssd_plane( h, i_pixel+3, 2, (i8&1)*4, (i8>>1)*4 );
  108.     if( h->param.b_cabac )
  109.     {
  110.         x264_cabac_t cabac_tmp;
  111.         COPY_CABAC;
  112.         x264_partition_size_cabac( h, &cabac_tmp, i8, i_pixel );
  113.         i_bits = ( (uint64_t)cabac_tmp.f8_bits_encoded * i_lambda2 + 128 ) >> 8;
  114.     }
  115.     else
  116.     {
  117.         i_bits = x264_partition_size_cavlc( h, i8, i_pixel ) * i_lambda2;
  118.     }
  119.     return (i_ssd<<8) + i_bits;
  120. }
  121. static uint64_t x264_rd_cost_i8x8( x264_t *h, int i_lambda2, int i8, int i_mode )
  122. {
  123.     uint64_t i_ssd, i_bits;
  124.     x264_mb_encode_i8x8( h, i8, h->mb.i_qp );
  125.     i_ssd = ssd_plane( h, PIXEL_8x8, 0, (i8&1)*8, (i8>>1)*8 );
  126.     if( h->param.b_cabac )
  127.     {
  128.         x264_cabac_t cabac_tmp;
  129.         COPY_CABAC;
  130.         x264_partition_i8x8_size_cabac( h, &cabac_tmp, i8, i_mode );
  131.         i_bits = ( (uint64_t)cabac_tmp.f8_bits_encoded * i_lambda2 + 128 ) >> 8;
  132.     }
  133.     else
  134.     {
  135.         i_bits = x264_partition_i8x8_size_cavlc( h, i8, i_mode ) * i_lambda2;
  136.     }
  137.     return (i_ssd<<8) + i_bits;
  138. }
  139. static uint64_t x264_rd_cost_i4x4( x264_t *h, int i_lambda2, int i4, int i_mode )
  140. {
  141.     uint64_t i_ssd, i_bits;
  142.     x264_mb_encode_i4x4( h, i4, h->mb.i_qp );
  143.     i_ssd = ssd_plane( h, PIXEL_4x4, 0, block_idx_x[i4]*4, block_idx_y[i4]*4 );
  144.     if( h->param.b_cabac )
  145.     {
  146.         x264_cabac_t cabac_tmp;
  147.         COPY_CABAC;
  148.         x264_partition_i4x4_size_cabac( h, &cabac_tmp, i4, i_mode );
  149.         i_bits = ( (uint64_t)cabac_tmp.f8_bits_encoded * i_lambda2 + 128 ) >> 8;
  150.     }
  151.     else
  152.     {
  153.         i_bits = x264_partition_i4x4_size_cavlc( h, i4, i_mode ) * i_lambda2;
  154.     }
  155.     return (i_ssd<<8) + i_bits;
  156. }
  157. static uint64_t x264_rd_cost_i8x8_chroma( x264_t *h, int i_lambda2, int i_mode, int b_dct )
  158. {
  159.     uint64_t i_ssd, i_bits;
  160.     if( b_dct )
  161.         x264_mb_encode_8x8_chroma( h, 0, h->mb.i_chroma_qp );
  162.     i_ssd = ssd_plane( h, PIXEL_8x8, 1, 0, 0 ) +
  163.             ssd_plane( h, PIXEL_8x8, 2, 0, 0 );
  164.     h->mb.i_chroma_pred_mode = i_mode;
  165.     if( h->param.b_cabac )
  166.     {
  167.         x264_cabac_t cabac_tmp;
  168.         COPY_CABAC;
  169.         x264_i8x8_chroma_size_cabac( h, &cabac_tmp );
  170.         i_bits = ( (uint64_t)cabac_tmp.f8_bits_encoded * i_lambda2 + 128 ) >> 8;
  171.     }
  172.     else
  173.     {
  174.         i_bits = x264_i8x8_chroma_size_cavlc( h ) * i_lambda2;
  175.     }
  176.     return (i_ssd<<8) + i_bits;
  177. }
  178. /****************************************************************************
  179.  * Trellis RD quantization
  180.  ****************************************************************************/
  181. #define TRELLIS_SCORE_MAX ((uint64_t)1<<50)
  182. #define CABAC_SIZE_BITS 8
  183. #define SSD_WEIGHT_BITS 5
  184. #define LAMBDA_BITS 4
  185. /* precalculate the cost of coding abs_level_m1 */
  186. void x264_rdo_init( void )
  187. {
  188.     int i_prefix;
  189.     int i_ctx;
  190.     for( i_prefix = 0; i_prefix < 15; i_prefix++ )
  191.     {
  192.         for( i_ctx = 0; i_ctx < 128; i_ctx++ )
  193.         {
  194.             int f8_bits = 0;
  195.             uint8_t ctx = i_ctx;
  196.             int i;
  197.             for( i = 1; i < i_prefix; i++ )
  198.                 f8_bits += x264_cabac_size_decision2( &ctx, 1 );
  199.             if( i_prefix > 0 && i_prefix < 14 )
  200.                 f8_bits += x264_cabac_size_decision2( &ctx, 0 );
  201.             f8_bits += 1 << CABAC_SIZE_BITS; //sign
  202.             cabac_prefix_size[i_prefix][i_ctx] = f8_bits;
  203.             cabac_prefix_transition[i_prefix][i_ctx] = ctx;
  204.         }
  205.     }
  206. }
  207. // should the intra and inter lambdas be different?
  208. // I'm just matching the behaviour of deadzone quant.
  209. static const int lambda2_tab[2][52] = {
  210.     // inter lambda = .85 * .85 * 2**(qp/3. + 10 - LAMBDA_BITS)
  211.     {    46,      58,      73,      92,     117,     147,
  212.         185,     233,     294,     370,     466,     587,
  213.         740,     932,    1174,    1480,    1864,    2349,
  214.        2959,    3728,    4697,    5918,    7457,    9395,
  215.       11837,   14914,   18790,   23674,   29828,   37581,
  216.       47349,   59656,   75163,   94699,  119313,  150326,
  217.      189399,  238627,  300652,  378798,  477255,  601304,
  218.      757596,  954511, 1202608, 1515192, 1909022, 2405217,
  219.     3030384, 3818045, 4810435, 6060769 },
  220.     // intra lambda = .65 * .65 * 2**(qp/3. + 10 - LAMBDA_BITS)
  221.     {    27,      34,      43,      54,      68,      86,
  222.         108,     136,     172,     216,     273,     343,
  223.         433,     545,     687,     865,    1090,    1374,
  224.        1731,    2180,    2747,    3461,    4361,    5494,
  225.        6922,    8721,   10988,   13844,   17442,   21976,
  226.       27688,   34885,   43953,   55377,   69771,   87906,
  227.      110755,  139543,  175813,  221511,  279087,  351627,
  228.      443023,  558174,  703255,  886046, 1116348, 1406511,
  229.     1772093, 2232697, 2813022, 3544186 }
  230. };
  231. typedef struct {
  232.     uint64_t score;
  233.     int level_idx; // index into level_tree[]
  234.     uint8_t cabac_state[10]; //just the contexts relevant to coding abs_level_m1
  235. } trellis_node_t;
  236. // TODO:
  237. // support chroma and i16x16 DC
  238. // save cabac state between blocks?
  239. // use trellis' RD score instead of x264_mb_decimate_score?
  240. // code 8x8 sig/last flags forwards with deadzone and save the contexts at
  241. //   each position?
  242. // change weights when using CQMs?
  243. // possible optimizations:
  244. // make scores fit in 32bit
  245. // save quantized coefs during rd, to avoid a duplicate trellis in the final encode
  246. // if trellissing all MBRD modes, finish SSD calculation so we can skip all of
  247. //   the normal dequant/idct/ssd/cabac
  248. // the unquant_mf here is not the same as dequant_mf:
  249. // in normal operation (dct->quant->dequant->idct) the dct and idct are not
  250. // normalized. quant/dequant absorb those scaling factors.
  251. // in this function, we just do (quant->unquant) and want the output to be
  252. // comparable to the input. so unquant is the direct inverse of quant,
  253. // and uses the dct scaling factors, not the idct ones.
  254. static inline void quant_trellis_cabac( x264_t *h, int16_t *dct,
  255.                                  const uint16_t *quant_mf, const int *unquant_mf,
  256.                                  const int *coef_weight, const uint8_t *zigzag,
  257.                                  int i_ctxBlockCat, int i_lambda2, int b_ac, int i_coefs )
  258. {
  259.     int abs_coefs[64], signs[64];
  260.     trellis_node_t nodes[2][8];
  261.     trellis_node_t *nodes_cur = nodes[0];
  262.     trellis_node_t *nodes_prev = nodes[1];
  263.     trellis_node_t *bnode;
  264.     uint8_t cabac_state_sig[64];
  265.     uint8_t cabac_state_last[64];
  266.     const int b_interlaced = h->mb.b_interlaced;
  267.     const int f = 1 << 15; // no deadzone
  268.     int i_last_nnz;
  269.     int i, j;
  270.     // (# of coefs) * (# of ctx) * (# of levels tried) = 1024
  271.     // we don't need to keep all of those: (# of coefs) * (# of ctx) would be enough,
  272.     // but it takes more time to remove dead states than you gain in reduced memory.
  273.     struct {
  274.         uint16_t abs_level;
  275.         uint16_t next;
  276.     } level_tree[64*8*2];
  277.     int i_levels_used = 1;
  278.     /* init coefs */
  279.     for( i = i_coefs-1; i >= b_ac; i-- )
  280.         if( (unsigned)(dct[zigzag[i]] * quant_mf[zigzag[i]] + f-1) >= 2*f )
  281.             break;
  282.     if( i < b_ac )
  283.     {
  284.         memset( dct, 0, i_coefs * sizeof(*dct) );
  285.         return;
  286.     }
  287.     i_last_nnz = i;
  288.     for( ; i >= b_ac; i-- )
  289.     {
  290.         int coef = dct[zigzag[i]];
  291.         abs_coefs[i] = abs(coef);
  292.         signs[i] = coef < 0 ? -1 : 1;
  293.     }
  294.     /* init trellis */
  295.     for( i = 1; i < 8; i++ )
  296.         nodes_cur[i].score = TRELLIS_SCORE_MAX;
  297.     nodes_cur[0].score = 0;
  298.     nodes_cur[0].level_idx = 0;
  299.     level_tree[0].abs_level = 0;
  300.     level_tree[0].next = 0;
  301.     // coefs are processed in reverse order, because that's how the abs value is coded.
  302.     // last_coef and significant_coef flags are normally coded in forward order, but
  303.     // we have to reverse them to match the levels.
  304.     // in 4x4 blocks, last_coef and significant_coef use a separate context for each
  305.     // position, so the order doesn't matter, and we don't even have to update their contexts.
  306.     // in 8x8 blocks, some positions share contexts, so we'll just have to hope that
  307.     // cabac isn't too sensitive.
  308.     if( i_coefs == 64 )
  309.     {
  310.         const uint8_t *ctx_sig  = &h->cabac.state[ significant_coeff_flag_offset[b_interlaced][i_ctxBlockCat] ];
  311.         const uint8_t *ctx_last = &h->cabac.state[ last_coeff_flag_offset[b_interlaced][i_ctxBlockCat] ];
  312.         for( i = 0; i < 63; i++ )
  313.         {
  314.             cabac_state_sig[i]  = ctx_sig[ significant_coeff_flag_offset_8x8[b_interlaced][i] ];
  315.             cabac_state_last[i] = ctx_last[ last_coeff_flag_offset_8x8[i] ];
  316.         }
  317.     }
  318.     else
  319.     {
  320.         memcpy( cabac_state_sig,  &h->cabac.state[ significant_coeff_flag_offset[b_interlaced][i_ctxBlockCat] ], 15 );
  321.         memcpy( cabac_state_last, &h->cabac.state[ last_coeff_flag_offset[b_interlaced][i_ctxBlockCat] ], 15 );
  322.     }
  323.     memcpy( nodes_cur[0].cabac_state, &h->cabac.state[ coeff_abs_level_m1_offset[i_ctxBlockCat] ], 10 );
  324.     for( i = i_last_nnz; i >= b_ac; i-- )
  325.     {
  326.         int i_coef = abs_coefs[i];
  327.         int q = ( f + i_coef * quant_mf[zigzag[i]] ) >> 16;
  328.         int abs_level;
  329.         int cost_sig[2], cost_last[2];
  330.         trellis_node_t n;
  331.         // skip 0s: this doesn't affect the output, but saves some unnecessary computation.
  332.         if( q == 0 )
  333.         {
  334.             // no need to calculate ssd of 0s: it's the same in all nodes.
  335.             // no need to modify level_tree for ctx=0: it starts with an infinite loop of 0s.
  336.             const uint32_t cost_sig0 = x264_cabac_size_decision_noup( &cabac_state_sig[i], 0 )
  337.                                      * (uint64_t)i_lambda2 >> ( CABAC_SIZE_BITS - LAMBDA_BITS );
  338.             for( j = 1; j < 8; j++ )
  339.             {
  340.                 if( nodes_cur[j].score != TRELLIS_SCORE_MAX )
  341.                 {
  342. #define SET_LEVEL(n,l) 
  343.                     level_tree[i_levels_used].abs_level = l; 
  344.                     level_tree[i_levels_used].next = n.level_idx; 
  345.                     n.level_idx = i_levels_used; 
  346.                     i_levels_used++;
  347.                     SET_LEVEL( nodes_cur[j], 0 );
  348.                     nodes_cur[j].score += cost_sig0;
  349.                 }
  350.             }
  351.             continue;
  352.         }
  353.         XCHG( trellis_node_t*, nodes_cur, nodes_prev );
  354.         for( j = 0; j < 8; j++ )
  355.             nodes_cur[j].score = TRELLIS_SCORE_MAX;
  356.         if( i < i_coefs-1 )
  357.         {
  358.             cost_sig[0] = x264_cabac_size_decision_noup( &cabac_state_sig[i], 0 );
  359.             cost_sig[1] = x264_cabac_size_decision_noup( &cabac_state_sig[i], 1 );
  360.             cost_last[0] = x264_cabac_size_decision_noup( &cabac_state_last[i], 0 );
  361.             cost_last[1] = x264_cabac_size_decision_noup( &cabac_state_last[i], 1 );
  362.         }
  363.         else
  364.         {
  365.             cost_sig[0] = cost_sig[1] = 0;
  366.             cost_last[0] = cost_last[1] = 0;
  367.         }
  368.         // there are a few cases where increasing the coeff magnitude helps,
  369.         // but it's only around .003 dB, and skipping them ~doubles the speed of trellis.
  370.         // could also try q-2: that sometimes helps, but also sometimes decimates blocks
  371.         // that are better left coded, especially at QP > 40.
  372.         for( abs_level = q; abs_level >= q-1; abs_level-- )
  373.         {
  374.             int d = i_coef - ((unquant_mf[zigzag[i]] * abs_level + 128) >> 8);
  375.             uint64_t ssd = (int64_t)d*d * coef_weight[i];
  376.             for( j = 0; j < 8; j++ )
  377.             {
  378.                 int node_ctx = j;
  379.                 if( nodes_prev[j].score == TRELLIS_SCORE_MAX )
  380.                     continue;
  381.                 n = nodes_prev[j];
  382.                 /* code the proposed level, and count how much entropy it would take */
  383.                 if( abs_level || node_ctx )
  384.                 {
  385.                     unsigned f8_bits = cost_sig[ abs_level != 0 ];
  386.                     if( abs_level )
  387.                     {
  388.                         const int i_prefix = X264_MIN( abs_level - 1, 14 );
  389.                         f8_bits += cost_last[ node_ctx == 0 ];
  390.                         f8_bits += x264_cabac_size_decision2( &n.cabac_state[coeff_abs_level1_ctx[node_ctx]], i_prefix > 0 );
  391.                         if( i_prefix > 0 )
  392.                         {
  393.                             uint8_t *ctx = &n.cabac_state[coeff_abs_levelgt1_ctx[node_ctx]];
  394.                             f8_bits += cabac_prefix_size[i_prefix][*ctx];
  395.                             *ctx = cabac_prefix_transition[i_prefix][*ctx];
  396.                             if( abs_level >= 15 )
  397.                                 f8_bits += bs_size_ue( abs_level - 15 ) << CABAC_SIZE_BITS;
  398.                             node_ctx = coeff_abs_level_transition[1][node_ctx];
  399.                         }
  400.                         else
  401.                         {
  402.                             f8_bits += 1 << CABAC_SIZE_BITS;
  403.                             node_ctx = coeff_abs_level_transition[0][node_ctx];
  404.                         }
  405.                     }
  406.                     n.score += (uint64_t)f8_bits * i_lambda2 >> ( CABAC_SIZE_BITS - LAMBDA_BITS );
  407.                 }
  408.                 n.score += ssd;
  409.                 /* save the node if it's better than any existing node with the same cabac ctx */
  410.                 if( n.score < nodes_cur[node_ctx].score )
  411.                 {
  412.                     SET_LEVEL( n, abs_level );
  413.                     nodes_cur[node_ctx] = n;
  414.                 }
  415.             }
  416.         }
  417.     }
  418.     /* output levels from the best path through the trellis */
  419.     bnode = &nodes_cur[0];
  420.     for( j = 1; j < 8; j++ )
  421.         if( nodes_cur[j].score < bnode->score )
  422.             bnode = &nodes_cur[j];
  423.     j = bnode->level_idx;
  424.     for( i = b_ac; i < i_coefs; i++ )
  425.     {
  426.         dct[zigzag[i]] = level_tree[j].abs_level * signs[i];
  427.         j = level_tree[j].next;
  428.     }
  429. }
  430. void x264_quant_4x4_trellis( x264_t *h, int16_t dct[4][4], int i_quant_cat,
  431.                              int i_qp, int i_ctxBlockCat, int b_intra )
  432. {
  433.     int b_ac = (i_ctxBlockCat == DCT_LUMA_AC);
  434.     quant_trellis_cabac( h, (int16_t*)dct,
  435.         h->quant4_mf[i_quant_cat][i_qp], h->unquant4_mf[i_quant_cat][i_qp],
  436.         x264_dct4_weight2_zigzag[h->mb.b_interlaced],
  437.         x264_zigzag_scan4[h->mb.b_interlaced],
  438.         i_ctxBlockCat, lambda2_tab[b_intra][i_qp], b_ac, 16 );
  439. }
  440. void x264_quant_8x8_trellis( x264_t *h, int16_t dct[8][8], int i_quant_cat,
  441.                              int i_qp, int b_intra )
  442. {
  443.     quant_trellis_cabac( h, (int16_t*)dct,
  444.         h->quant8_mf[i_quant_cat][i_qp], h->unquant8_mf[i_quant_cat][i_qp],
  445.         x264_dct8_weight2_zigzag[h->mb.b_interlaced],
  446.         x264_zigzag_scan8[h->mb.b_interlaced],
  447.         DCT_LUMA_8x8, lambda2_tab[b_intra][i_qp], 0, 64 );
  448. }