⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cabac.c

📁 x264/h264 編碼, you can put any dir, No error, No warnning.In vc6 build.
💻 C
📖 第 1 页 / 共 3 页
字号:
    {  69,  85, 100, 116 }, {  73,  89, 105, 122 }, {  77,  94, 111, 128 },    {  81,  99, 117, 135 }, {  85, 104, 123, 142 }, {  90, 110, 130, 150 },    {  95, 116, 137, 158 }, { 100, 122, 144, 166 }, { 105, 128, 152, 175 },    { 111, 135, 160, 185 }, { 116, 142, 169, 195 }, { 123, 150, 178, 205 },    { 128, 158, 187, 216 }, { 128, 167, 197, 227 }, { 128, 176, 208, 240 },    { 128, 176, 208, 240 }, { 128, 167, 197, 227 }, { 128, 158, 187, 216 },    { 123, 150, 178, 205 }, { 116, 142, 169, 195 }, { 111, 135, 160, 185 },    { 105, 128, 152, 175 }, { 100, 122, 144, 166 }, {  95, 116, 137, 158 },    {  90, 110, 130, 150 }, {  85, 104, 123, 142 }, {  81,  99, 117, 135 },    {  77,  94, 111, 128 }, {  73,  89, 105, 122 }, {  69,  85, 100, 116 },    {  66,  80,  95, 110 }, {  62,  76,  90, 104 }, {  59,  72,  86,  99 },    {  56,  69,  81,  94 }, {  53,  65,  77,  89 }, {  51,  62,  73,  85 },    {  48,  59,  69,  80 }, {  46,  56,  66,  76 }, {  43,  53,  63,  72 },    {  41,  50,  59,  69 }, {  39,  48,  56,  65 }, {  37,  45,  54,  62 },    {  35,  43,  51,  59 }, {  33,  41,  48,  56 }, {  32,  39,  46,  53 },    {  30,  37,  43,  50 }, {  29,  35,  41,  48 }, {  27,  33,  39,  45 },    {  26,  31,  37,  43 }, {  24,  30,  35,  41 }, {  23,  28,  33,  39 },    {  22,  27,  32,  37 }, {  21,  26,  30,  35 }, {  20,  24,  29,  33 },    {  19,  23,  27,  31 }, {  18,  22,  26,  30 }, {  17,  21,  25,  28 },    {  16,  20,  23,  27 }, {  15,  19,  22,  25 }, {  14,  18,  21,  24 },    {  14,  17,  20,  23 }, {  13,  16,  19,  22 }, {  12,  15,  18,  21 },    {  12,  14,  17,  20 }, {  11,  14,  16,  19 }, {  11,  13,  15,  18 },    {  10,  12,  15,  17 }, {  10,  12,  14,  16 }, {   9,  11,  13,  15 },    {   9,  11,  12,  14 }, {   8,  10,  12,  14 }, {   8,   9,  11,  13 },    {   7,   9,  11,  12 }, {   7,   9,  10,  12 }, {   7,   8,  10,  11 },    {   6,   8,   9,  11 }, {   6,   7,   9,  10 }, {   6,   7,   8,   9 },    {   2,   2,   2,   2 },};static const int x264_cabac_transition[2][128] ={{      0,  1,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14,     15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,     31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,     47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,     63, 64, 65, 66, 66, 68, 68, 69, 70, 71, 72, 73, 73, 75, 75, 76,     77, 77, 79, 79, 80, 80, 82, 82, 83, 83, 85, 85, 86, 86, 87, 88,     88, 89, 90, 90, 91, 91, 92, 93, 93, 94, 94, 94, 95, 96, 96, 97,     97, 97, 98, 98, 99, 99, 99,100,100,100,101,101,101,102,102,127,},{      0, 25, 25, 26, 26, 26, 27, 27, 27, 28, 28, 28, 29, 29, 30, 30,     30, 31, 31, 32, 33, 33, 33, 34, 34, 35, 36, 36, 37, 37, 38, 39,     39, 40, 41, 41, 42, 42, 44, 44, 45, 45, 47, 47, 48, 48, 50, 50,     51, 52, 52, 54, 54, 55, 56, 57, 58, 59, 59, 61, 61, 62, 63, 64,     65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,     81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,     97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111,112,    113,114,115,116,117,118,119,120,121,122,123,124,125,126,126,127,}};static const int x264_cabac_probability[128] ={    FIX8(0.9812), FIX8(0.9802), FIX8(0.9792), FIX8(0.9781),    FIX8(0.9769), FIX8(0.9757), FIX8(0.9744), FIX8(0.9730),    FIX8(0.9716), FIX8(0.9700), FIX8(0.9684), FIX8(0.9667),    FIX8(0.9650), FIX8(0.9631), FIX8(0.9611), FIX8(0.9590),    FIX8(0.9568), FIX8(0.9545), FIX8(0.9521), FIX8(0.9495),    FIX8(0.9468), FIX8(0.9440), FIX8(0.9410), FIX8(0.9378),    FIX8(0.9345), FIX8(0.9310), FIX8(0.9273), FIX8(0.9234),    FIX8(0.9193), FIX8(0.9150), FIX8(0.9105), FIX8(0.9057),    FIX8(0.9006), FIX8(0.8953), FIX8(0.8897), FIX8(0.8838),    FIX8(0.8776), FIX8(0.8710), FIX8(0.8641), FIX8(0.8569),    FIX8(0.8492), FIX8(0.8411), FIX8(0.8326), FIX8(0.8237),    FIX8(0.8143), FIX8(0.8043), FIX8(0.7938), FIX8(0.7828),    FIX8(0.7712), FIX8(0.7590), FIX8(0.7461), FIX8(0.7325),    FIX8(0.7182), FIX8(0.7031), FIX8(0.6872), FIX8(0.6705),    FIX8(0.6528), FIX8(0.6343), FIX8(0.6147), FIX8(0.5941),    FIX8(0.5724), FIX8(0.5495), FIX8(0.5254), FIX8(0.5000),    FIX8(0.5000), FIX8(0.4746), FIX8(0.4505), FIX8(0.4276),    FIX8(0.4059), FIX8(0.3853), FIX8(0.3657), FIX8(0.3472),    FIX8(0.3295), FIX8(0.3128), FIX8(0.2969), FIX8(0.2818),    FIX8(0.2675), FIX8(0.2539), FIX8(0.2410), FIX8(0.2288),    FIX8(0.2172), FIX8(0.2062), FIX8(0.1957), FIX8(0.1857),    FIX8(0.1763), FIX8(0.1674), FIX8(0.1589), FIX8(0.1508),    FIX8(0.1431), FIX8(0.1359), FIX8(0.1290), FIX8(0.1224),    FIX8(0.1162), FIX8(0.1103), FIX8(0.1047), FIX8(0.0994),    FIX8(0.0943), FIX8(0.0895), FIX8(0.0850), FIX8(0.0807),    FIX8(0.0766), FIX8(0.0727), FIX8(0.0690), FIX8(0.0655),    FIX8(0.0622), FIX8(0.0590), FIX8(0.0560), FIX8(0.0532),    FIX8(0.0505), FIX8(0.0479), FIX8(0.0455), FIX8(0.0432),    FIX8(0.0410), FIX8(0.0389), FIX8(0.0369), FIX8(0.0350),    FIX8(0.0333), FIX8(0.0316), FIX8(0.0300), FIX8(0.0284),    FIX8(0.0270), FIX8(0.0256), FIX8(0.0243), FIX8(0.0231),    FIX8(0.0219), FIX8(0.0208), FIX8(0.0198), FIX8(0.0187)};/* -ln2(probability) */static const int x264_cabac_entropy[128] ={    FIX8(0.0273), FIX8(0.0288), FIX8(0.0303), FIX8(0.0320),    FIX8(0.0337), FIX8(0.0355), FIX8(0.0375), FIX8(0.0395),    FIX8(0.0416), FIX8(0.0439), FIX8(0.0463), FIX8(0.0488),    FIX8(0.0515), FIX8(0.0543), FIX8(0.0572), FIX8(0.0604),    FIX8(0.0637), FIX8(0.0671), FIX8(0.0708), FIX8(0.0747),    FIX8(0.0788), FIX8(0.0832), FIX8(0.0878), FIX8(0.0926),    FIX8(0.0977), FIX8(0.1032), FIX8(0.1089), FIX8(0.1149),    FIX8(0.1214), FIX8(0.1282), FIX8(0.1353), FIX8(0.1429),    FIX8(0.1510), FIX8(0.1596), FIX8(0.1686), FIX8(0.1782),    FIX8(0.1884), FIX8(0.1992), FIX8(0.2107), FIX8(0.2229),    FIX8(0.2358), FIX8(0.2496), FIX8(0.2642), FIX8(0.2798),    FIX8(0.2964), FIX8(0.3142), FIX8(0.3331), FIX8(0.3532),    FIX8(0.3748), FIX8(0.3979), FIX8(0.4226), FIX8(0.4491),    FIX8(0.4776), FIX8(0.5082), FIX8(0.5412), FIX8(0.5768),    FIX8(0.6152), FIX8(0.6568), FIX8(0.7020), FIX8(0.7513),    FIX8(0.8050), FIX8(0.8638), FIX8(0.9285), FIX8(1.0000),    FIX8(1.0000), FIX8(1.0752), FIX8(1.1504), FIX8(1.2256),    FIX8(1.3008), FIX8(1.3759), FIX8(1.4511), FIX8(1.5263),    FIX8(1.6015), FIX8(1.6767), FIX8(1.7519), FIX8(1.8271),    FIX8(1.9023), FIX8(1.9775), FIX8(2.0527), FIX8(2.1278),    FIX8(2.2030), FIX8(2.2782), FIX8(2.3534), FIX8(2.4286),    FIX8(2.5038), FIX8(2.5790), FIX8(2.6542), FIX8(2.7294),    FIX8(2.8046), FIX8(2.8797), FIX8(2.9549), FIX8(3.0301),    FIX8(3.1053), FIX8(3.1805), FIX8(3.2557), FIX8(3.3309),    FIX8(3.4061), FIX8(3.4813), FIX8(3.5565), FIX8(3.6316),    FIX8(3.7068), FIX8(3.7820), FIX8(3.8572), FIX8(3.9324),    FIX8(4.0076), FIX8(4.0828), FIX8(4.1580), FIX8(4.2332),    FIX8(4.3083), FIX8(4.3836), FIX8(4.4588), FIX8(4.5339),    FIX8(4.6091), FIX8(4.6843), FIX8(4.7595), FIX8(4.8347),    FIX8(4.9099), FIX8(4.9851), FIX8(5.0602), FIX8(5.1354),    FIX8(5.2106), FIX8(5.2859), FIX8(5.3610), FIX8(5.4362),    FIX8(5.5114), FIX8(5.5866), FIX8(5.6618), FIX8(5.7370)};/***************************************************************************** * *****************************************************************************/void x264_cabac_context_init( x264_cabac_t *cb, int i_slice_type, int i_qp, int i_model ){    const int (*cabac_context_init)[460][2];    int i;    if( i_slice_type == SLICE_TYPE_I )    {        cabac_context_init = &x264_cabac_context_init_I;    }    else    {        cabac_context_init = &x264_cabac_context_init_PB[i_model];    }    for( i = 0; i < 436; i++ )    {        cb->state[i] = x264_clip3( (((*cabac_context_init)[i][0] * i_qp) >> 4) + (*cabac_context_init)[i][1], 1, 126 );    }}/***************************************************************************** * *****************************************************************************/void x264_cabac_decode_init( x264_cabac_t *cb, bs_t *s ){    cb->i_range = 0x01fe;    cb->i_low   = bs_read( s, 9 );    cb->s       = s;}static inline void x264_cabac_decode_renorm( x264_cabac_t *cb ){    while( cb->i_range < 0x0100 )    {        cb->i_range <<= 1;        cb->i_low   = ( cb->i_low << 1 )|bs_read( cb->s, 1 );    }}int  x264_cabac_decode_decision( x264_cabac_t *cb, int i_ctx ){    int i_state = cb->state[i_ctx];    int i_range_lps = x264_cabac_range_lps[i_state][(cb->i_range>>6)&0x03];    int val = (i_state >> 6);    cb->i_range -= i_range_lps;    if( cb->i_low >= cb->i_range )    {        val ^= 1;        cb->i_low -= cb->i_range;        cb->i_range= i_range_lps;    }    cb->state[i_ctx] = x264_cabac_transition[val][i_state];    x264_cabac_decode_renorm( cb );    return val;}int  x264_cabac_decode_bypass( x264_cabac_t *cb ){    cb->i_low = (cb->i_low << 1)|bs_read( cb->s, 1 );    if( cb->i_low >= cb->i_range )    {        cb->i_low -= cb->i_range;        return 1;    }    return 0;}int  x264_cabac_decode_terminal( x264_cabac_t *cb ){    if( cb->i_low >= cb->i_range - 2 )    {        return 1;    }    cb->i_range -= 2;    x264_cabac_decode_renorm( cb );    return 0;}/***************************************************************************** * *****************************************************************************/void x264_cabac_encode_init( x264_cabac_t *cb, bs_t *s ){    cb->i_low   = 0;    cb->i_range = 0x01FE;    cb->i_bits_outstanding = 0;    cb->s = s;    s->i_left++; // the first bit will be shifted away and not written}static inline void x264_cabac_putbit( x264_cabac_t *cb, int b ){    bs_write1( cb->s, b );    if( cb->i_bits_outstanding > 0 )    {        while( cb->i_bits_outstanding > 32 )        {            bs_write1( cb->s, 1-b );            cb->i_bits_outstanding--;        }        bs_write( cb->s, cb->i_bits_outstanding, (1-b)*(~0) );        cb->i_bits_outstanding = 0;    }}static inline void x264_cabac_encode_renorm( x264_cabac_t *cb ){    /* RenormE */    while( cb->i_range < 0x100 )    {        if( cb->i_low < 0x100 )        {            x264_cabac_putbit( cb, 0 );        }        else if( cb->i_low >= 0x200 )        {            cb->i_low -= 0x200;            x264_cabac_putbit( cb, 1 );        }        else        {            cb->i_low -= 0x100;            cb->i_bits_outstanding++;        }        cb->i_range <<= 1;        cb->i_low   <<= 1;    }}void x264_cabac_encode_decision( x264_cabac_t *cb, int i_ctx, int b ){    int i_state = cb->state[i_ctx];    int i_range_lps = x264_cabac_range_lps[i_state][(cb->i_range>>6)&0x03];    cb->i_range -= i_range_lps;    if( b != (i_state >> 6) )    {        cb->i_low += cb->i_range;        cb->i_range = i_range_lps;    }    cb->state[i_ctx] = x264_cabac_transition[b][i_state];    x264_cabac_encode_renorm( cb );}void x264_cabac_encode_bypass( x264_cabac_t *cb, int b ){    cb->i_low <<= 1;    cb->i_low += (((int32_t)b<<31)>>31) & cb->i_range;    if( cb->i_low >= 0x400 || cb->i_low < 0x200 )    {        x264_cabac_putbit( cb, cb->i_low >> 10 );        cb->i_low &= 0x3ff;    }    else    {        cb->i_low -= 0x200;        cb->i_bits_outstanding++;    }}void x264_cabac_encode_terminal( x264_cabac_t *cb, int b ){    cb->i_range -= 2;    if( b )    {        cb->i_low += cb->i_range;        cb->i_range = 2;    }    x264_cabac_encode_renorm( cb );}void x264_cabac_encode_flush( x264_cabac_t *cb ){    x264_cabac_putbit( cb, (cb->i_low >> 9)&0x01 );    bs_write1( cb->s, (cb->i_low >> 8)&0x01 );    /* check that */    bs_write1( cb->s, 0x01 );    bs_align_0( cb->s );}/***************************************************************************** * *****************************************************************************/void x264_cabac_size_decision( x264_cabac_t *cb, int i_ctx, int b ){    int i_state = cb->state[i_ctx];    cb->state[i_ctx] = x264_cabac_transition[b][i_state];    cb->f8_bits_encoded += x264_cabac_entropy[ b ? 127 - i_state : i_state ];}int x264_cabac_size_decision2( uint8_t *state, int b ){    int i_state = *state;    *state = x264_cabac_transition[b][i_state];    return x264_cabac_entropy[ b ? 127 - i_state : i_state ];}int x264_cabac_size_decision_noup( uint8_t *state, int b ){    return x264_cabac_entropy[ b ? 127 - *state : *state ];}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -