亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? cabac_engine.c

?? 經過開源的H.264壓縮算法代碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
    FIX8(5.5114), FIX8(5.5866), FIX8(5.6618), FIX8(5.7370)
};

#undef FIX8


/*****************************************************************************
 *
 *****************************************************************************/
void T264_cabac_context_init( T264_cabac_t *cb, int i_slice_type, int i_qp, int i_model )
{
    const int (*cabac_context_init)[399][2];
    int i;

    if( i_slice_type == SLICE_I )
    {
        cabac_context_init = &T264_cabac_context_init_I;
    }
    else
    {
        cabac_context_init = &T264_cabac_context_init_PB[i_model];
    }

    for( i = 0; i < 399; i++ )
    {
        int i_pre_state;

        i_pre_state = T264_clip3( (((*cabac_context_init)[i][0] * i_qp) >> 4) + (*cabac_context_init)[i][1], 1, 126 );
        if( i_pre_state <= 63 )
        {
            cb->ctxstate[i].i_state = 63 - i_pre_state;
            cb->ctxstate[i].i_mps = 0;
        }
        else
        {
            cb->ctxstate[i].i_state = i_pre_state - 64;
            cb->ctxstate[i].i_mps = 1;
        }
        cb->ctxstate[i].i_count = 0;
    }
}

/*****************************************************************************
 *
 *****************************************************************************/
void T264_cabac_decode_init( T264_cabac_t *cb, bs_t *s )
{
#ifdef TRACE
	if(fpCABACDec == NULL)
	{
		fpCABACDec = fopen("cabac_dec.dat", "w");
	}
#endif
    cb->i_range = 0x01fe;
    cb->i_low   = BitstreamGetBits( s, 9 );
    cb->s       = s;
}

static __inline void T264_cabac_decode_renorm( T264_cabac_t *cb )
{
    while( cb->i_range < 0x0100 )
    {
        cb->i_range <<= 1;
        cb->i_low   = ( cb->i_low << 1 )| BitstreamGetBits( cb->s, 1 );
    }
}

int  T264_cabac_decode_decision( T264_cabac_t *cb, int i_ctx )
{
    int i_state = cb->ctxstate[i_ctx].i_state;
    int i_mps   = cb->ctxstate[i_ctx].i_mps;

    int i_range_lps = T264_cabac_range_lps[i_state][(cb->i_range>>6)&0x03];

    int val;
#ifdef TRACE
	if(binCount == 64518)
		binCount = binCount;	
#endif
    cb->i_range -= i_range_lps;

    if( cb->i_low >= cb->i_range )
    {
        val = 1 - i_mps;

        cb->i_low -= cb->i_range;
        cb->i_range= i_range_lps;

        if( i_state == 0 )
        {
            cb->ctxstate[i_ctx].i_mps = 1 - i_mps;
        }
        cb->ctxstate[i_ctx].i_state = T264_transition_lps[i_state];
    }
    else
    {
        val = i_mps;

        cb->ctxstate[i_ctx].i_state = T264_transition_mps[i_state];
    }

    T264_cabac_decode_renorm( cb );
#ifdef TRACE
	if(fpCABACDec != NULL && slice_type_cabac == SLICE_B)// && frame_cabac==5)
	{
		fprintf(fpCABACDec, "%5d, 0x%04x %1d %3d %2d %1d (%2d %3d)\n", 
			binCount++, cb->i_range, val, i_ctx, cb->ctxstate[i_ctx].i_state, cb->ctxstate[i_ctx].i_mps, 0, mb_cabac);
	}
	fflush(fpCABACDec);
#endif
    return val;
}
int  T264_cabac_decode_bypass( T264_cabac_t *cb )
{
	int val;
    cb->i_low = (cb->i_low << 1)|BitstreamGetBits( cb->s, 1 );

    if( cb->i_low >= cb->i_range )
    {
        cb->i_low -= cb->i_range;
        val = 1;
    }
	else
		val = 0;
#ifdef TRACE
	if(fpCABACDec != NULL && slice_type_cabac==SLICE_B)// && frame_cabac==5)
	{
		fprintf(fpCABACDec, "%5d, 0x%04x %1d (%2d %3d)\n", binCount++, cb->i_range, val, 0, mb_cabac);
	}
	fflush(fpCABACDec);
#endif
    return val;
}
int  T264_cabac_decode_terminal( T264_cabac_t *cb )
{
    if( cb->i_low >= cb->i_range - 2 )
    {
        return 1;
    }

    cb->i_range -= 2;
    T264_cabac_decode_renorm( cb );
    return 0;
}


/*****************************************************************************
 *
 *****************************************************************************/
void T264_cabac_model_init( T264_cabac_t *cb )
{
    int i;

    for( i = 0; i < 3; i++ )
    {
        cb->slice[i].i_model = 0;
        cb->slice[i].i_cost  = -1;
    }
}

int  T264_cabac_model_get ( T264_cabac_t *cb, int i_slice_type )
{
    return cb->slice[i_slice_type].i_model;
}

void T264_cabac_model_update( T264_cabac_t *cb, int i_slice_type, int i_qp )
{
    int i;

    if( i_slice_type == SLICE_I )
    {
        return;
    }
    cb->slice[i_slice_type].i_cost = -1;

    for( i = 0; i < 3; i++ )
    {
        int i_ctx;
        int i_cost;

        i_cost = 0; /* fix8 */

        for( i_ctx = 0; i_ctx < 399; i_ctx++ )
        {
            int i_weight;
            int i_model_state;
            int i_ctx_state;

            i_weight = T264_MIN( (1<<8), (cb->ctxstate[i_ctx].i_count<<8) / 32 );
            i_model_state = T264_clip3( ((T264_cabac_context_init_PB[i][i_ctx][0] * i_qp)>>4) +
                                          T264_cabac_context_init_PB[i][i_ctx][1], 0, 127 );
            i_ctx_state   = cb->ctxstate[i_ctx].i_mps ? 64 + cb->ctxstate[i_ctx].i_state : 63 - cb->ctxstate[i_ctx].i_state;

            i_cost += (i_weight * (( T264_cabac_probability[      i_ctx_state] * T264_cabac_entropy[      i_model_state] +
                                     T264_cabac_probability[127 - i_ctx_state] * T264_cabac_entropy[127 - i_model_state] ) >> 8))>>8;
        }

        if( cb->slice[i_slice_type].i_cost == -1 || cb->slice[i_slice_type].i_cost > i_cost )
        {
            cb->slice[i_slice_type].i_model= i;
            cb->slice[i_slice_type].i_cost = i_cost;
        }
    }
}

void T264_cabac_encode_init( T264_cabac_t *cb, bs_t *s )
{
#ifdef TRACE
	if(fpCABAC == NULL)
	{
		fpCABAC = fopen("cabac_enc.dat", "w");
	}
#endif
    cb->i_low   = 0;
    cb->i_range = 0x01FE;
    cb->b_first_bit= 1;
    cb->i_bits_outstanding = 0;
    cb->i_sym_cnt = 0;
    cb->s = s;
}

static __inline void T264_cabac_putbit( T264_cabac_t *cb, int b )
{
    if( cb->b_first_bit )
    {
        cb->b_first_bit = 0;
    }
    else
    {
        BitstreamPutBit( cb->s, b );
    }

    while( cb->i_bits_outstanding > 0 )
    {
        BitstreamPutBit( cb->s, 1 - b );
        cb->i_bits_outstanding--;
    }
}

static __inline void T264_cabac_encode_renorm( T264_cabac_t *cb )
{
    /* RenormE */
    while( cb->i_range < 0x0100 )
    {
        if( cb->i_low < 0x100 )
        {
            T264_cabac_putbit( cb, 0 );
        }
        else
        {
            if( cb->i_low >= 0x200 )
            {
                cb->i_low -= 0x200;
                T264_cabac_putbit( cb, 1 );
            }
            else
            {
                cb->i_low -= 0x100;
                cb->i_bits_outstanding++;
            }
        }

        cb->i_range <<= 1;
        cb->i_low   <<= 1;
    }
}

void T264_cabac_encode_decision( T264_cabac_t *cb, int i_ctx, int b )
{
    int i_state = cb->ctxstate[i_ctx].i_state;
    int i_mps   = cb->ctxstate[i_ctx].i_mps;

    int i_range_lps = T264_cabac_range_lps[i_state][(cb->i_range>>6)&0x03];

#ifdef TRACE
	if(binCount == 48227)
		binCount = binCount;
#endif

    cb->i_range -= i_range_lps;

    if( b != i_mps )
    {
        cb->i_low += cb->i_range;
        cb->i_range = i_range_lps;

        if( i_state == 0 )
        {
            cb->ctxstate[i_ctx].i_mps = 1 - i_mps;
        }
        cb->ctxstate[i_ctx].i_state = T264_transition_lps[i_state];
    }
    else
    {
        cb->ctxstate[i_ctx].i_state = T264_transition_mps[i_state];
    }
    cb->ctxstate[i_ctx].i_count++;

    T264_cabac_encode_renorm( cb );

    cb->i_sym_cnt++;
#ifdef TRACE
	
	if(fpCABAC != NULL  && slice_type_cabac==SLICE_B)
	{
		fprintf(fpCABAC, "%5d, 0x%04x %1d %3d %2d %1d (%2d %3d)\n", 
			binCount++, cb->i_range, b, i_ctx, cb->ctxstate[i_ctx].i_state, cb->ctxstate[i_ctx].i_mps, 0, mb_cabac);
	}
#endif
}

void T264_cabac_encode_bypass( T264_cabac_t *cb, int b )
{

    cb->i_low <<= 1;
    if( b )
    {
        cb->i_low += cb->i_range;
    }

    if( cb->i_low >= 0x400 )
    {
        T264_cabac_putbit( cb, 1 );
        cb->i_low -= 0x400;
    }
    else
    {
        if( cb->i_low < 0x200 )
        {
            T264_cabac_putbit( cb, 0 );
        }
        else
        {
            cb->i_low -= 0x200;
            cb->i_bits_outstanding++;
        }
    }
    cb->i_sym_cnt++;
#ifdef TRACE
	if(fpCABAC != NULL && slice_type_cabac==SLICE_B)
	{
		fprintf(fpCABAC, "%5d, 0x%04x %1d (%2d %3d)\n", binCount++, cb->i_range, b, 0, mb_cabac);
	}
#endif
}

void T264_cabac_encode_terminal( T264_cabac_t *cb, int b )
{
    cb->i_range -= 2;
    if( b )
    {
        cb->i_low += cb->i_range;
        cb->i_range = 2;
    }
    T264_cabac_encode_renorm( cb );

    cb->i_sym_cnt++;
}

void T264_cabac_encode_flush( T264_cabac_t *cb )
{
    T264_cabac_putbit( cb, (cb->i_low >> 9)&0x01 );
    BitstreamPutBit( cb->s, (cb->i_low >> 8)&0x01 );

    /* check that */
    BitstreamPutBit( cb->s, 0x01 );
    BitstreamPadZero( cb->s );
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美国产精品专区| 日韩女优制服丝袜电影| 一区免费观看视频| 99久久婷婷国产综合精品电影| 国产精品沙发午睡系列990531| caoporen国产精品视频| 综合自拍亚洲综合图不卡区| 日本高清不卡视频| 五月婷婷欧美视频| 欧美mv日韩mv国产网站app| 国产精品77777| 最新成人av在线| 欧美精品久久一区| 国产在线播放一区三区四| 欧美国产一区在线| 欧美中文字幕一二三区视频| 免费久久99精品国产| 久久精品欧美一区二区三区不卡 | 国产在线一区二区| 国产精品欧美一级免费| 色吧成人激情小说| 久久电影国产免费久久电影| 国产精品久久网站| 欧美精品久久久久久久多人混战 | 亚洲视频一区二区在线观看| 欧美精品少妇一区二区三区| 国产成人av电影在线| 一二三区精品视频| 久久久久久99久久久精品网站| 色婷婷狠狠综合| 狠狠色狠狠色综合| 亚洲综合色视频| 久久久国产精品不卡| 欧美午夜精品久久久久久超碰| 国内一区二区视频| 亚洲成人免费在线观看| 久久人人爽人人爽| 在线不卡中文字幕播放| 成人免费毛片a| 美女视频黄频大全不卡视频在线播放| 国产精品女同一区二区三区| 91精品国产91久久综合桃花| aaa亚洲精品| 国产一区视频导航| 五月开心婷婷久久| 一区二区三区日韩| 国产精品久久影院| 久久精品网站免费观看| 欧美年轻男男videosbes| 91看片淫黄大片一级在线观看| 日本不卡一二三| 五月天国产精品| 亚洲综合成人在线视频| ...av二区三区久久精品| 精品不卡在线视频| 日韩亚洲欧美综合| 欧美日韩在线播放一区| 一本色道亚洲精品aⅴ| 成人午夜视频免费看| 国产一区二区中文字幕| 久久精品国产精品亚洲综合| 亚洲第一在线综合网站| 亚洲欧美偷拍卡通变态| 中文字幕人成不卡一区| 久久色.com| 久久久天堂av| 久久人人爽人人爽| 久久久国产午夜精品| 久久久美女毛片| 久久影院视频免费| 久久综合久久鬼色中文字| 日韩欧美在线不卡| 欧美一区二区三区视频免费| 6080国产精品一区二区| 91麻豆精品国产综合久久久久久| 欧美日韩午夜影院| 欧美精品一卡二卡| 欧美一区二视频| 精品欧美一区二区三区精品久久| 欧美一二三在线| ww久久中文字幕| 国产欧美日韩在线| 中文字幕亚洲区| 亚洲一区二区三区影院| 亚洲va中文字幕| 日韩精品免费视频人成| 免费观看久久久4p| 国产乱淫av一区二区三区| 国产成人99久久亚洲综合精品| www..com久久爱| 欧美丝袜第三区| 精品欧美一区二区三区精品久久| 久久精品一区二区| 日韩理论片在线| 亚洲高清免费在线| 免费国产亚洲视频| 成人亚洲精品久久久久软件| av不卡免费电影| 3d动漫精品啪啪1区2区免费| 欧美mv和日韩mv的网站| 国产精品女同一区二区三区| 一区二区三区四区五区视频在线观看| 午夜精品爽啪视频| 国产福利视频一区二区三区| 99久久777色| 日韩区在线观看| 国产精品久久久久影院色老大| 夜夜嗨av一区二区三区四季av| 日韩不卡手机在线v区| 国产福利精品一区二区| 欧美日韩中文字幕一区| 精品电影一区二区| 亚洲少妇最新在线视频| 蜜臀精品久久久久久蜜臀 | 欧美伦理电影网| 国产香蕉久久精品综合网| 一区二区三区欧美久久| 久久精品免费观看| 91老司机福利 在线| 精品国产乱码久久| 亚洲一区自拍偷拍| 国产精品系列在线观看| 欧美日韩亚州综合| 国产精品盗摄一区二区三区| 日韩成人免费电影| 色欧美片视频在线观看| 国产色综合久久| 麻豆久久一区二区| 欧美亚洲日本一区| 中文字幕欧美国产| 老司机免费视频一区二区三区| 91高清视频在线| 欧美激情在线看| 麻豆精品一区二区av白丝在线| 91成人网在线| 国产精品福利一区| 国产一区二区三区最好精华液| 欧美三级欧美一级| 自拍偷拍欧美精品| 国产成人免费xxxxxxxx| 日韩欧美色电影| 午夜私人影院久久久久| 一本色道久久综合亚洲精品按摩| 久久精品视频在线看| 黑人巨大精品欧美黑白配亚洲| 欧美视频日韩视频在线观看| 国产精品不卡视频| 国产精品资源站在线| 欧美哺乳videos| 麻豆精品视频在线观看免费| 制服.丝袜.亚洲.中文.综合| 亚洲精品国产无天堂网2021| 成人精品在线视频观看| 久久久精品人体av艺术| 国产一区二区三区香蕉| 欧美一区二区三区影视| 日韩精品一级二级 | 欧美成人高清电影在线| 亚洲成a人v欧美综合天堂下载| 一本久久a久久精品亚洲| 最新国产の精品合集bt伙计| av亚洲精华国产精华精| 国产精品久久久久久一区二区三区| 国产一区二区三区观看| 欧美精品一区二区三区在线| 精品一区二区三区av| 欧美大肚乱孕交hd孕妇| 精品夜夜嗨av一区二区三区| 精品三级av在线| 国产成人精品综合在线观看| 国产喂奶挤奶一区二区三区| 国产精品一二三在| 国产精品欧美精品| 91丨porny丨国产入口| 一区二区三区美女视频| 欧美性猛交一区二区三区精品| 亚洲在线视频网站| 欧美日韩一区二区三区不卡| 亚洲成人777| 亚洲精品一区二区三区四区高清| 国内精品伊人久久久久影院对白| 久久久久久久久久久黄色| 高清日韩电视剧大全免费| 日韩一区日韩二区| 欧美色倩网站大全免费| 美女视频黄免费的久久 | 极品少妇xxxx精品少妇偷拍| 久久伊人中文字幕| heyzo一本久久综合| 亚洲高清免费视频| 日韩欧美123| a级精品国产片在线观看| 亚洲午夜电影网| 日韩欧美久久久| 97久久超碰国产精品电影| 日本女人一区二区三区| 中文字幕免费不卡| 欧美人牲a欧美精品| 国产精品99久久不卡二区| 有码一区二区三区|