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

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

?? code_sft.c

?? 這是算術編碼的源程序
?? C
字號:
/* CODE_SFT.C - ARITHMETIC ENCODING/DECODING, USING SHIFT/ADD. */

#include <stdio.h>

#define global extern

#include "code.h"


/* CURRENT STATE OF THE ENCODING/DECODING. */

static code_value low;		/* Start of current coding region, in [0,1) */

static code_value range;	/* Size of region, normally kept in the     */
				/* interval [1/4,1/2]                       */

static code_value value;	/* Currently-seen code value, in [0,1)      */

static int bits_to_follow;	/* Number of opposite bits to output after  */
				/* the next bit                             */

static code_value split_region();


/* LOCAL PROCEDURES. */

static int        find_symbol   (freq_value []);
static void       narrow_region (freq_value [], int);
static code_value split_region  (freq_value, freq_value);
static void       push_out_bits (void);
static void       discard_bits  (void);


/* OUTPUT BIT PLUS FOLLOWING OPPOSITE BITS. */

#define bit_plus_follow(bit) \
do { \
    output_bit(bit);				/* Output the bit.          */\
    while (bits_to_follow>0) {			/* Output bits_to_follow    */\
        output_bit(!(bit));			/* opposite bits. Set       */\
        bits_to_follow -= 1;			/* bits_to_follow to zero.  */\
    } \
} while (0) 


/* START ENCODING A STREAM OF SYMBOLS. */

void start_encoding(void)
{   
    low = Code_half;				/* Use half the code region */
    range = Code_half;				/* (wastes first bit as 1). */
    bits_to_follow = 0;				/* No opposite bits follow. */
}


/* START DECODING A STREAM OF SYMBOLS. */

void start_decoding(void)
{   
    int i;

    value = input_bit();			/* Check that first bit     */
    if (value!=1) {				/* is a 1.                  */
        fprintf(stderr,"Bad input file (1)\n");
        exit(1);
    }

    for (i = 1; i<Code_bits; i++) { 		/* Fill the code value with */
        value += value;				/* input bits.              */
        value += input_bit();
    }

    low = Code_half;				/* Use half the code region */
    range = Code_half;				/* (first bit must be 1).   */
}


/* ENCODE A SYMBOL. */

void encode_symbol(symbol,cum_freq)
    int symbol;			/* Symbol to encode                         */
    freq_value cum_freq[];	/* Cumulative symbol frequencies            */
{
    narrow_region(cum_freq,symbol);		/* Narrow coding region.    */
    push_out_bits();				/* Output determined bits.  */
}


/* ENCODE A BIT. */

void encode_bit(bit,freq0,freq1)
    int bit;			/* Bit to encode (0 or 1)                   */
    freq_value freq0;           /* Frequency for 0 bit                      */
    freq_value freq1;           /* Frequency for 1 bit                      */
{
    code_value split;

    if (freq1>freq0) {				/* Encode bit when most     */
        split = split_region(freq0,freq1);	/* probable symbol is a 1.  */
        if (bit) { low += split; range -= split; }
        else     { range = split;  }
    }

    else {					/* Encode bit when most     */
        split = split_region(freq1,freq0);	/* probable symbol is a 0.  */
        if (bit) { range = split;  }
        else     { low += split; range -= split; }
    }

    push_out_bits();				/* Output determined bits.  */
}


/* DECODE THE NEXT SYMBOL. */

int decode_symbol(cum_freq)
    freq_value cum_freq[];	/* Cumulative symbol frequencies            */
{
    int symbol;			/* Symbol decoded                           */

    symbol = find_symbol(cum_freq);		/* Find decoded symbol.     */
    narrow_region(cum_freq,symbol);		/* Narrow coding region.    */
    discard_bits();				/* Discard output bits.     */

    return symbol;
}


/* DECODE A BIT. */

int decode_bit(freq0,freq1)
    freq_value freq0;           /* Frequency for 0 bit                      */
    freq_value freq1;           /* Frequency for 1 bit                      */
{
    code_value split;
    int bit;

    if (freq1>freq0) {				/* Decode bit when most     */
        split = split_region(freq0,freq1);	/* probable symbol is a 1.  */
        bit = value-low >= split;
        if (bit) { low += split; range -= split; }
        else     { range = split;  }
    }

    else {					/* Decode bit when most     */
        split = split_region(freq1,freq0);	/* probable symbol is a 0.  */
        bit = value-low < split;
        if (bit) { range = split;  }
        else     { low += split; range -= split; }
    }

    discard_bits();				/* Discard output bits.     */

    return bit;
}


/* DETERMINE DECODED SYMBOL FROM INPUT VALUE. */

static int find_symbol(cum_freq)
    freq_value cum_freq[];	/* Cumulative symbol frequencies            */
{
    int symbol;			/* Symbol decoded                           */
    freq_value M, P, Q, B;	/* Temporary values                         */
    div_value F, G;
    code_value A;	
    int i;

    A = range; 					/* Compute the value of     */
    M = cum_freq[0] << (Code_bits-Freq_bits-1); /*   F = range/cum_freq[0]. */
    F = 0;

    if (A>=M) { A -= M; F += 1; }
#   if Code_bits-Freq_bits>2
    A <<= 1; F <<= 1;
    if (A>=M) { A -= M; F += 1; }
#   endif
#   if Code_bits-Freq_bits>3
    A <<= 1; F <<= 1;
    if (A>=M) { A -= M; F += 1; }
#   endif
#   if Code_bits-Freq_bits>4
    A <<= 1; F <<= 1;
    if (A>=M) { A -= M; F += 1; }
#   endif
#   if Code_bits-Freq_bits>5
    A <<= 1; F <<= 1;
    if (A>=M) { A -= M; F += 1; }
#   endif
#   if Code_bits-Freq_bits>6
    for (i = Code_bits-Freq_bits-6; i>0; i--) {
        A <<= 1; F <<= 1;
        if (A>=M) { A -= M; F += 1; }
    }
#   endif
    A <<= 1; F <<= 1;
    if (A>=M) { F += 1; }

    A = value - low;			  	/* Find the symbol that     */
    B = Freq_half;				/* fits the input. To do    */
    G = F << (Freq_bits-1);			/* so compute (value-low)/F */
    P = 0;                                      /* to as many bits as is    */
    Q = cum_freq[0];     			/* necessary.               */
    symbol = 1;

    while (cum_freq[symbol]>P) {
        if (A>=G) {
            A -= G; 
            P = P+B; 
        }
        else {
            Q = P+B;
            while (cum_freq[symbol]>=Q) symbol += 1;
        }
        B >>= 1; G >>= 1;
    }

    return symbol;
}


/* NARROW CODING REGION TO THAT ALLOTTED TO SYMBOL. */

static void narrow_region(cum_freq,symbol)
    freq_value cum_freq[];	/* Cumulative symbol frequencies            */
    int symbol;			/* Symbol decoded                           */
{
    code_value A, Ta, Tb;	/* Temporary values                         */
    freq_value M, Ba, Bb;
    int i;

    A = range; 
    M = cum_freq[0] << (Code_bits-Freq_bits-1);

    if (symbol==1) {				/* Narrow range for symbol  */
                                                /* at the top.              */
        Ba = cum_freq[symbol];
        Ta = 0;                                 /* Compute the value of     */
						/*   Ta = cum_freq[symbol]  */
        if (A>=M) { A -= M; Ta += Ba; }		/*     * (range/cum_freq[0])*/
#       if Code_bits-Freq_bits>2
        A <<= 1; Ta <<= 1;
        if (A>=M) { A -= M; Ta += Ba; }
#       endif
#       if Code_bits-Freq_bits>3
        A <<= 1; Ta <<= 1;
        if (A>=M) { A -= M; Ta += Ba; }
#       endif
#       if Code_bits-Freq_bits>4
        A <<= 1; Ta <<= 1;
        if (A>=M) { A -= M; Ta += Ba; }
#       endif
#       if Code_bits-Freq_bits>5
        A <<= 1; Ta <<= 1;
        if (A>=M) { A -= M; Ta += Ba; }
#       endif
#       if Code_bits-Freq_bits>6
        for (i = Code_bits-Freq_bits-6; i>0; i--) {
            A <<= 1; Ta <<= 1;
            if (A>=M) { A -= M; Ta += Ba; }
        }
#       endif
        A <<= 1; Ta <<= 1;
        if (A>=M) { Ta += Ba; }

        low += Ta;
        range -= Ta;
    }

    else {					/* Narrow range for symbol  */
                                                /* not at the top.          */
        Ba = cum_freq[symbol];
        Bb = cum_freq[symbol-1];	        /* Compute the value of     */
        Ta = Tb = 0;				/*   Ta = cum_freq[symbol]  */
						/*     * (range/cum_freq[0])*/
        if (A>=M) { A -= M; Ta += Ba; Tb += Bb; }/*and of                   */
#       if Code_bits-Freq_bits>2		/*   Tb = cum_freq[symbol-1]*/
        A <<= 1; Ta <<= 1; Tb <<= 1;		/*     * (range/cum_freq[0] */
        if (A>=M) { A -= M; Ta += Ba; Tb += Bb; }
#       endif
#       if Code_bits-Freq_bits>3
        A <<= 1; Ta <<= 1; Tb <<= 1;
        if (A>=M) { A -= M; Ta += Ba; Tb += Bb; }
#       endif
#       if Code_bits-Freq_bits>4
        A <<= 1; Ta <<= 1; Tb <<= 1;
        if (A>=M) { A -= M; Ta += Ba; Tb += Bb; }
#       endif
#       if Code_bits-Freq_bits>5
        A <<= 1; Ta <<= 1; Tb <<= 1;
        if (A>=M) { A -= M; Ta += Ba; Tb += Bb; }
#       endif
#       if Code_bits-Freq_bits>6
        for (i = Code_bits-Freq_bits-6; i>0; i--) {
            A <<= 1; Ta <<= 1; Tb <<= 1;
            if (A>=M) { A -= M; Ta += Ba; Tb += Bb; }
        }
#       endif
        A <<= 1; Ta <<= 1; Tb <<= 1;
        if (A>=M) { Ta += Ba; Tb += Bb; }

        low += Ta;
        range = Tb - Ta;
    }
}


/* FIND BINARY SPLIT FOR CODING REGION. */

static code_value split_region(freq_b,freq_t)
    freq_value freq_b;		/* Frequency for symbol in bottom half      */
    freq_value freq_t;		/* Frequency for symbol in top half         */
{
    code_value A, T;		/* Temporary values                         */
    freq_value M, B;
    int i;

    A = range; 
    M = (freq_b+freq_t) << (Code_bits-Freq_bits-1);
    B = freq_b;
    T = 0;           	                        /* Compute the value of     */
						/* T = freq_b * (range      */
    if (A>=M) { A -= M; T += B; }		/*       / (freq_b+freq_t)) */
#   if Code_bits-Freq_bits>2
    A <<= 1; T <<= 1;
    if (A>=M) { A -= M; T += B; }
#   endif
#   if Code_bits-Freq_bits>3
    A <<= 1; T <<= 1;
    if (A>=M) { A -= M; T += B; }
#   endif
#   if Code_bits-Freq_bits>4
    A <<= 1; T <<= 1;
    if (A>=M) { A -= M; T += B; }
#   endif
#   if Code_bits-Freq_bits>5
    A <<= 1; T <<= 1;
    if (A>=M) { A -= M; T += B; }
#   endif
#   if Code_bits-Freq_bits>6
    for (i = Code_bits-Freq_bits-6; i>0; i--) {
        A <<= 1; T <<= 1;
        if (A>=M) { A -= M; T += B; }
    }
#   endif
    A <<= 1; T <<= 1;
    if (A>=M) { T += B; }

    return T;
}


/* OUTPUT BITS THAT ARE NOW DETERMINED. */

static void push_out_bits(void)
{
    while (range<=Code_quarter) {

        if (low>=Code_half) {			/* Output 1 if in top half.*/
            bit_plus_follow(1);
            low -= Code_half;			/* Subtract offset to top.  */
        }

        else if (low+range<=Code_half) {	/* Output 0 in bottom half. */
            bit_plus_follow(0);		
	} 

        else {			 		/* Output an opposite bit   */
            bits_to_follow += 1;		/* later if in middle half. */
            low -= Code_quarter;		/* Subtract offset to middle*/
        } 

        low += low;				/* Scale up code region.    */
        range += range;
    }
}


/* DISCARD BITS THE ENCODER WOULD HAVE OUTPUT. */

static void discard_bits(void)
{
    while (range<=Code_quarter) {

        if (low>=Code_half) {			/* Expand top half.         */
            low -= Code_half;			/* Subtract offset to top.  */
            value -= Code_half;
        }

        else if (low+range<=Code_half) {	/* Expand bottom half.      */
            /* nothing */
	} 

        else {			 		/* Expand middle half.      */
            low -= Code_quarter;		/* Subtract offset to middle*/
            value -= Code_quarter;
        } 

        low += low;				/* Scale up code region.    */
        range += range;

        value += value;				/* Move in next input bit.  */
        value += input_bit();
    }
}


/* FINISH ENCODING THE STREAM. */

void done_encoding(void)
{   
    for (;;) {

        if (low+(range>>1)>=Code_half) {	/* Output a 1 if mostly in  */
            bit_plus_follow(1);			/* top half.                */
            if (low<Code_half) {
                range -= Code_half-low;
                low = 0;
            }
            else {
                low -= Code_half;
            }
        }

        else {					/* Output a 0 if mostly in  */
            bit_plus_follow(0);			/* bottom half.             */
            if (low+range>Code_half) {
                range = Code_half-low;
            }
        }

        if (range==Code_half) break;		/* Quit when coding region  */
						/* becomes entire interval. */
        low += low;
        range += range;				/* Scale up code region.    */
    }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一二三区精品视频| 日韩欧美的一区| 国产精品一二三在| 精品一区免费av| 国产一区二区三区免费| 国产精品99久久久| 成人动漫精品一区二区| 99久久伊人久久99| 色综合久久久久| 欧美在线小视频| 欧美精品1区2区3区| 91精品免费在线| 日韩女优电影在线观看| 国产喷白浆一区二区三区| 欧美国产一区视频在线观看| 国产精品国产自产拍高清av| 亚洲一区在线电影| 美女任你摸久久| 成人免费毛片app| 91亚洲精品久久久蜜桃| 欧美日韩国产在线观看| 日韩免费一区二区| 中文字幕日韩欧美一区二区三区| 一区二区三区四区不卡视频| 日韩**一区毛片| 国产91高潮流白浆在线麻豆 | 精品久久久久一区| 国产精品欧美一区喷水| 亚洲国产cao| 国产成人综合在线| 欧美调教femdomvk| 久久久精品黄色| 亚洲一区二区三区免费视频| 久久69国产一区二区蜜臀| 91在线视频播放地址| 91精品午夜视频| 亚洲精选在线视频| 国产精品18久久久久久vr| 欧美三级三级三级| 国产色产综合色产在线视频| 午夜激情久久久| 99精品偷自拍| 国产欧美一区二区精品忘忧草 | 亚洲www啪成人一区二区麻豆 | 欧美性做爰猛烈叫床潮| 久久色.com| 图片区小说区国产精品视频| 国产成人激情av| 欧美videossexotv100| 一区二区三区中文字幕电影| 国产精品1区2区3区在线观看| 精品视频全国免费看| 综合欧美亚洲日本| 国产精品88888| 日韩免费观看高清完整版在线观看| 亚洲欧美日韩一区二区| 成人美女视频在线观看18| 精品久久国产字幕高潮| 日韩黄色在线观看| 欧美色图第一页| 亚洲午夜久久久久| 在线观看www91| 亚洲午夜在线视频| 欧美三区在线视频| 一区二区国产视频| 欧洲另类一二三四区| 亚洲欧美韩国综合色| 丁香天五香天堂综合| 久久久三级国产网站| 国产最新精品精品你懂的| 欧美一级高清片在线观看| 日韩国产成人精品| 欧美一级一级性生活免费录像| 亚洲高清视频的网址| 欧美日韩极品在线观看一区| 亚洲444eee在线观看| 这里只有精品电影| 蜜桃视频在线一区| 精品久久久久久久一区二区蜜臀| 麻豆精品在线看| 久久综合九色综合欧美就去吻| 另类中文字幕网| 国产香蕉久久精品综合网| 国产ts人妖一区二区| 国产精品电影院| 欧美亚洲综合一区| 免费在线成人网| 久久婷婷一区二区三区| 成人一级黄色片| 一区二区三区在线免费观看| 欧美精品一卡二卡| 国产乱子轮精品视频| 国产精品福利一区| 欧美美女直播网站| 国产精品亚洲第一区在线暖暖韩国| 欧美国产日韩精品免费观看| 欧洲一区二区三区在线| 日本午夜精品一区二区三区电影| 久久精品视频在线免费观看| 成人免费高清视频| 日韩不卡一二三区| 久久久精品国产免大香伊| 欧美主播一区二区三区| 激情小说亚洲一区| 一区二区三区日韩欧美精品| 日韩一区和二区| av午夜精品一区二区三区| 午夜电影网一区| 久久精品在这里| 欧美日韩视频在线观看一区二区三区| 九九精品视频在线看| 亚洲欧美国产三级| 精品电影一区二区| 欧美午夜精品理论片a级按摩| 精品伊人久久久久7777人| 一区二区理论电影在线观看| 337p粉嫩大胆色噜噜噜噜亚洲| 色哟哟国产精品| 国产精品综合在线视频| 午夜影院在线观看欧美| 国产精品久久久久aaaa樱花| 精品乱人伦一区二区三区| 色狠狠一区二区| 国产凹凸在线观看一区二区| 欧美aaaaaa午夜精品| 一区二区三区在线免费观看| 国产偷国产偷亚洲高清人白洁| 91精品国产色综合久久ai换脸| 91啪在线观看| www.欧美.com| 高清国产一区二区| 国产一区在线不卡| 琪琪一区二区三区| 亚洲一二三区不卡| 亚洲一区二区三区三| 亚洲女爱视频在线| 中文字幕一区免费在线观看| 久久综合久久综合亚洲| 欧美精品一区二区三区在线播放| 91精品国产入口在线| 在线播放日韩导航| 91.com视频| 日韩一级片在线观看| 欧美一区二区视频免费观看| 欧美午夜精品一区二区三区| 在线看国产一区| 欧美日韩一二区| 欧美日韩免费观看一区三区| 欧洲精品一区二区| 欧美日韩一区二区三区高清 | 日韩欧美国产系列| 日韩欧美中文字幕精品| 69p69国产精品| 日韩一级二级三级| 久久亚区不卡日本| 国产视频视频一区| 中文字幕制服丝袜一区二区三区| 国产精品国产三级国产aⅴ入口| 中文字幕乱码一区二区免费| 国产欧美日韩麻豆91| 国产日韩亚洲欧美综合| 国产精品福利一区| 亚洲精品v日韩精品| 亚洲成人动漫精品| 麻豆精品国产传媒mv男同| 久久66热re国产| eeuss鲁一区二区三区| 日本精品视频一区二区三区| 欧美精品自拍偷拍| ww久久中文字幕| 国产精品麻豆视频| 一个色在线综合| 久久99国产精品久久99 | 亚洲欧洲性图库| 一区二区三区高清| 麻豆国产一区二区| 成人一区二区三区在线观看| 色视频一区二区| 日韩一二三区视频| |精品福利一区二区三区| 午夜视频在线观看一区| 国产尤物一区二区在线| 日本乱码高清不卡字幕| 日韩美女一区二区三区| 国产精品卡一卡二卡三| 青青青伊人色综合久久| 成人丝袜高跟foot| 91精品福利在线一区二区三区| 中文在线免费一区三区高中清不卡| 亚洲精品成人在线| 国产一区二区三区免费| 欧美日韩亚洲综合| 国产精品久久久久久久裸模| 日韩电影网1区2区| 97精品视频在线观看自产线路二| 日韩欧美一区中文| 亚洲午夜久久久久中文字幕久| 国产一区二区在线视频| 欧美日韩一区二区三区不卡| 国产亚洲精品资源在线26u|