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

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

?? word.c

?? 視頻編碼的碼率控制
?? C
?? 第 1 頁 / 共 2 頁
字號:
/******************************************************************************
File: 		word.c

Authors: 	John Carpinelli   (johnfc@ecr.mu.oz.au)
	 	Wayne Salamonsen  (wbs@mundil.cs.mu.oz.au)

Purpose:	Data compression using a word-based model and revised 
		arithmetic coding method.

Based on: 	A. Moffat, R. Neal, I.H. Witten, "Arithmetic Coding Revisted",
		Proc. IEEE Data Compression Conference, Snowbird, Utah, 
		March 1995.


Copyright 1995 John Carpinelli and Wayne Salamonsen, All Rights Reserved.

These programs are supplied free of charge for research purposes only,
and may not sold or incorporated into any commercial product.  There is
ABSOLUTELY NO WARRANTY of any sort, nor any undertaking that they are
fit for ANY PURPOSE WHATSOEVER.  Use them at your own risk.  If you do
happen to find a bug, or have modifications to suggest, please report
the same to Alistair Moffat, alistair@cs.mu.oz.au.  The copyright
notice above and this statement of conditions must remain an integral
part of each and every copy made of these files.

******************************************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "hashtable.h"
#include "stats.h"
#include "coder.h"
#ifdef SYSV
#include <sys/times.h>
#include <limits.h>
#endif

#define ENCODE          0
#define DECODE          1
#define	WORD		0		/* flag to process a word */
#define NON_WORD	1		/* flag to process a non-word */

#define INIT_CONTEXT	1023		/* initial size of word contexts */
#define CHAR_CONTEXT	256		/* length of character contexts */

#define BUFFER_SIZE	512		/* size of file input buffer */
#define MEGABYTE	(1 << 20)	/* size of one megabyte */

#define DEFAULT_MEM	1		/* default 1 megabyte limit */
#define MIN_MBYTES      1	       	/* minimum allowable memory size */
#define MAX_MBYTES      255		/* maximum no for 8 bit int */
#define MAGICNO         "123w"         	/* Magic Number for files */
#define MAGICNO_LENGTH	4		/* length of magic number */


/* Macro to specify what a word is */
#define ISWORD(c) (((c >= 'A') && (c <= 'Z')) || \
                   ((c >= 'a') && (c <= 'z')) || \
                   ((c >= '0') && (c <= '9')))


/* function prototypes */
void init_word_model(hash_table *tables[], context *words[]);
void purge_word_model(hash_table *tables[], context *words[]);
void init_char_model(context *characters[], context *lengths[]);
void encode_file(unsigned char tempstore[], int templength);
void decode_file();
void read_word(char buffer[], int *buffer_length, int *curr_pos, 
	       string *pWord, int type);
void print_results(int operation);


/* global variables */
int mbytes = DEFAULT_MEM; 	/* stores no. megabytes allowable for mem */
int total_memory;		/* total memory used by all models */
int base_memory;	       	/* memory used by character model */
int verbose = 0;		/* flag set if stats are to be printed */
int purge_counter=0;		/* counts number of memory purges */
unsigned int nWords[2]; 	/* counts number of words */
unsigned int nDistinctWords[2];	/* counts number of distinct words */


/* 
 * parse command line arguments. Decide whether to decode or encode
 * and optional memory size. Also sets filename to stdin if none specified 
 */
int 
main(int argc, char *argv[])
{	
    int i;			/* loop counter */
    int what = ENCODE;		/* flag as to whether to encode or decode */
    unsigned char tempstore[MAGICNO_LENGTH];	/* stores magic no */
    int templength = 0;		/* number of bytes read for magic number */
    int	selected = -1;		/* stores if decode set at command line */
    
    /*
     * parse command line arguments. Sets up whether to decode or encode
     * and optional memory limit. Also replaces stdin with input file 
     */
    for (i = 1; i < argc; ) 
    {
	if (argv[i][0] == '-') 
	{
	    switch(argv[i][1]) 
	    {
	      case 'e':		/* do encode */
		selected = ENCODE;
		i++;
		break;
	      case 'd':		/* do decode */
		selected = DECODE;
		i++;
		break;
	      case 'm':		/* set memory size */
		i++;
		mbytes = atoi(argv[i]);
		i++;
		break;
	      case 'v':		/* set verbose flag to print stats */
		verbose = 1;
		i++;
		break;
	      case 'f':		/* set number of F bits */
		i++;
		f_bits = atoi(argv[i]);
		max_frequency = 1<<f_bits;
		i++;
		break;
	      default:		/* incorrect args */
		fprintf(stderr, 
		   "Usage: %s [-e [-m n] | -d] [-v] [-f n] [file]\n", argv[0]);
		exit(1);
	    }
	}
	else if (freopen(argv[i++], "r", stdin) == (FILE *)NULL) 
	{
	    fprintf(stderr, "%s: cannot read %s\n",
		    argv[0], argv[--i]);
	    exit(1);
	}
    }
    
    /* check if memory limit is within allowable range */ 
    if (mbytes < MIN_MBYTES || mbytes > MAX_MBYTES)
    {
	fprintf(stderr, "memory limit must be between %d and %d\n", 
		MIN_MBYTES, MAX_MBYTES);
	exit(1);
    }
    
    /* check if f_bits is within allowable range */
    if (f_bits < MIN_F_BITS || f_bits > MAX_F_BITS)
    {
	fprintf(stderr, "number of f bits must be between %d and %d\n",
		MIN_F_BITS, MAX_F_BITS);
	exit(1);
    }

    /* Check input file for Magic Number. */
    if (selected != ENCODE)
    {
	templength = fread(tempstore, 1, MAGICNO_LENGTH, stdin);
        bytes_input += templength; 
	if (memcmp(tempstore, MAGICNO, MAGICNO_LENGTH) == 0)
	    what = DECODE;
	else if (selected == DECODE)
	{
	    fprintf(stderr, "Bad Magic Number\n");
	    exit(1);
	}
    }
	
    if (what == ENCODE)					/* do ENCODE */
    {
	/* write magic number to output file */
	fwrite(MAGICNO, 1, MAGICNO_LENGTH, stdout);
	bytes_output += MAGICNO_LENGTH;

	/* store memory limit being used in output */
	putc(mbytes, stdout);
	bytes_output += 1;

	/* store number of f_bits being used in output */
	putc(f_bits, stdout);
	bytes_output += 1;

	encode_file(tempstore, templength);
    }
    else						/* do DECODE */
    {
	/* read memory limit to be used and store in mbytes */
	mbytes = getc(stdin);
        bytes_input += 1;
	
	/* get number of f_bits to be used and store in f_bits */
	f_bits = getc(stdin);
	max_frequency = 1<<f_bits;
        bytes_input++;
	decode_file();
    }
    
    /* statistics section if using verbose flag */
    if (verbose)
	print_results(what);
    return 0;			/* exited cleanly */
}


/*
 *
 * print the results of compressing/decompressing a file
 *
 */
void print_results(int operation)
{
    if (operation == ENCODE)
    {
	fprintf(stderr, 
		"                              words           non-words\n");
	fprintf(stderr, "Words read             : %10u          %10u\n", 
		nWords[0], nWords[1]);
	fprintf(stderr, "Distinct words         : %10u          %10u\n",
		nDistinctWords[0], nDistinctWords[1]);
	fprintf(stderr, "Input file size        : %10u bytes\n", bytes_input);
    }
    fprintf(stderr, "Output file size       : %10u bytes\n", bytes_output);
    if (purge_counter != 0)
	fprintf(stderr, "Memory purges          : %10d times\n", purge_counter);
    if ((operation == ENCODE) && (bytes_input > 0))
	fprintf(stderr, "Compression rate       : %10.3f bpc (%0.2f%%) \n", 
		8.0 * bytes_output / bytes_input, 
		(float)bytes_output/bytes_input*100);

    /* only provide timing details if "times" function is available */
#ifdef 	SYSV
{
    struct tms cpu_usage;
    float cpu_used, comp_rate;

    times(&cpu_usage);    	/* determine the cpu time used */
    cpu_used = ((float) cpu_usage.tms_utime) / sysconf(_SC_CLK_TCK);

    if (cpu_used == 0)
	comp_rate = 0;
    else
    {
        if (operation == ENCODE)
	    comp_rate = ((float) bytes_input) / (1024 * cpu_used);
        else
	    comp_rate = ((float) bytes_output) / (1024 * cpu_used);
    }

    fprintf(stderr, "Compression time       : %10.2f seconds (%0.2f Kb/s)\n",
	    cpu_used, comp_rate);
}
#endif
}

/*
 *
 * call the standard C function realloc after checking that the memory
 * limit isn't exceeded. If limit is exceeded return NULL
 *
 */
void 
*do_realloc(void *ptr, size_t size)
{
    total_memory += size;
    if ((total_memory / MEGABYTE) >= mbytes)
	return NULL;
    else
        return (realloc(ptr, size));
}


/*
 *
 * call the standard C function malloc after checking against the memory
 * limit. If the limit is exceeded return NULL

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品伦理在线| 国产老肥熟一区二区三区| 久久99久久久欧美国产| bt7086福利一区国产| 欧美mv日韩mv亚洲| 亚洲国产一区二区在线播放| 高清不卡在线观看av| 日韩欧美亚洲国产精品字幕久久久| 中文字幕免费在线观看视频一区| 日韩av一级片| 91搞黄在线观看| 国产精品国模大尺度视频| 免费观看成人鲁鲁鲁鲁鲁视频| 91久久精品网| 成人欧美一区二区三区| 国内外成人在线| 日韩免费高清电影| 蜜桃在线一区二区三区| 欧美影院一区二区三区| 亚洲欧美日韩中文播放| 成人免费毛片片v| 久久只精品国产| 久久av中文字幕片| 日韩欧美一区在线| 日本欧美久久久久免费播放网| 欧美在线小视频| 亚洲免费视频成人| 一本色道综合亚洲| 亚洲免费大片在线观看| 色综合久久六月婷婷中文字幕| 国产区在线观看成人精品| 国产精品1区二区.| 久久免费电影网| 国产福利一区二区| 亚洲国产精品传媒在线观看| 国产福利一区在线| 亚洲国产精品成人综合色在线婷婷 | 亚洲精品精品亚洲| 成人国产在线观看| 亚洲欧美综合色| 91丨porny丨首页| 一区二区三区日韩精品| 欧美三级午夜理伦三级中视频| 亚洲综合小说图片| 69久久99精品久久久久婷婷| 男女男精品网站| 2023国产精品| 91在线国产观看| 一区二区三区在线观看动漫| 精品视频免费在线| 日本不卡不码高清免费观看| 精品福利在线导航| 国产成人午夜视频| 亚洲美女区一区| 日韩一区和二区| 国产乱码字幕精品高清av | 国产视频一区二区在线| av电影在线观看一区| 亚洲国产另类精品专区| 欧美美女视频在线观看| 久久99这里只有精品| 国产精品大尺度| 777a∨成人精品桃花网| 国产成人在线免费观看| 亚洲精品自拍动漫在线| 3d动漫精品啪啪一区二区竹菊| 国产精品原创巨作av| 亚洲一二三级电影| 久久综合九色综合欧美98| www.av亚洲| 免费看黄色91| 亚洲欧美自拍偷拍| 精品对白一区国产伦| 91国在线观看| 国产精品一级片| 午夜a成v人精品| 亚洲视频在线观看一区| 91精品国产免费| av网站免费线看精品| 蜜桃av噜噜一区二区三区小说| ...av二区三区久久精品| 日韩欧美中文字幕公布| 欧洲精品视频在线观看| 国产宾馆实践打屁股91| 日韩**一区毛片| 亚洲免费高清视频在线| 国产亚洲精品中文字幕| 91麻豆精品国产自产在线| 不卡的av电影在线观看| 韩国一区二区视频| 丝瓜av网站精品一区二区| 国产精品久久久久影院色老大| 日韩欧美激情四射| 欧美日韩国产一区二区三区地区| www.亚洲人| 国产精品一区二区免费不卡| 丝袜国产日韩另类美女| 亚洲自拍偷拍麻豆| 日韩一区日韩二区| 国产视频一区二区在线观看| 精品国产在天天线2019| 7777精品伊人久久久大香线蕉完整版| 岛国一区二区三区| 国产在线日韩欧美| 免费成人美女在线观看.| 婷婷中文字幕综合| 亚洲一区在线看| 亚洲精选视频在线| 亚洲欧美日韩系列| 国产精品国产自产拍高清av| 国产欧美精品国产国产专区| 久久久精品tv| 久久久久成人黄色影片| 精品伦理精品一区| 日韩免费观看高清完整版 | 成人av电影在线播放| 福利一区福利二区| 成人午夜看片网址| av综合在线播放| 99视频有精品| 色婷婷久久久综合中文字幕| 色综合天天综合网天天狠天天| 91亚洲精华国产精华精华液| 色综合久久综合| 欧美性一二三区| 91精品国产综合久久精品麻豆| 欧美一区二区三区四区久久| 欧美videos大乳护士334| 久久亚洲综合av| 国产精品久久久久9999吃药| 亚洲欧美在线另类| 亚洲成av人**亚洲成av**| 日韩精品一二区| 精品亚洲porn| 粉嫩久久99精品久久久久久夜| a美女胸又www黄视频久久| 在线亚洲人成电影网站色www| 欧美三级电影一区| 欧美xxxxx裸体时装秀| 国产午夜一区二区三区| 亚洲日本中文字幕区| 午夜视频在线观看一区| 紧缚奴在线一区二区三区| 成人app网站| 9191精品国产综合久久久久久| 日韩免费看网站| 亚洲品质自拍视频| 日产国产欧美视频一区精品| 国产精品一卡二| 欧美色综合天天久久综合精品| 日韩精品中文字幕一区| 日韩一区在线播放| 奇米色777欧美一区二区| 不卡电影一区二区三区| 欧美精品日韩精品| 中文字幕欧美日韩一区| 三级成人在线视频| 成人午夜又粗又硬又大| 欧美日韩三级在线| 久久精品人人做人人综合| 亚洲精品高清视频在线观看| 蜜臀av性久久久久蜜臀aⅴ流畅| www.综合网.com| 欧美成人乱码一区二区三区| 一区二区三区自拍| 国产在线播精品第三| 91成人免费在线视频| 久久你懂得1024| 视频在线观看一区二区三区| 99热国产精品| 久久久久久亚洲综合| 石原莉奈一区二区三区在线观看| 不卡在线观看av| 日韩美女主播在线视频一区二区三区| 亚洲视频小说图片| 国产自产2019最新不卡| 欧美精品三级日韩久久| 一区二区在线观看不卡| 成人精品国产福利| 精品国偷自产国产一区| 天堂va蜜桃一区二区三区 | 九九精品一区二区| 欧美日韩国产片| 亚洲欧洲日韩一区二区三区| 激情国产一区二区| 欧美一区二区女人| 日韩二区三区四区| 欧美日韩在线一区二区| 一区二区久久久久久| 91在线你懂得| 中文字幕亚洲欧美在线不卡| 国产在线一区二区综合免费视频| 欧美一区二区免费视频| 日韩影院免费视频| 欧美福利电影网| 婷婷久久综合九色综合绿巨人| 在线观看av一区二区| 亚洲制服欧美中文字幕中文字幕| 91农村精品一区二区在线| 亚洲欧洲日韩在线|