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

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

?? bitstr.c

?? mp3解碼源代碼
?? C
字號:
/****************************************************************************//* *	bitstr.c -- BitStream files handling * *	Author  :   St閜hane TAVENARD * *	(C) Copyright 1997-1998 St閜hane TAVENARD *	    All Rights Reserved * *	This program is free software; you can redistribute it and/or modify *	it under the terms of the GNU General Public License as published by *	the Free Software Foundation; either version 2 of the License, or *	(at your option) any later version. *	 *	This program is distributed in the hope that it will be useful, *	but WITHOUT ANY WARRANTY; without even the implied warranty of *	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *	GNU General Public License for more details. *	 *	You should have received a copy of the GNU General Public License *	along with this program; if not, write to the Free Software *	Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. *//****************************************************************************/#include "defs.h"#include <stdio.h>#include <stdlib.h>#include <string.h>#include "bitstr.h"/****************************************************************************//* *	Default file I/O functions. */static long def_open(char *stream_name, long buffer_size, long *stream_size){	FILE *file_ptr;	file_ptr = fopen(stream_name, "rb");	if ((file_ptr) && (buffer_size > 0))		setvbuf(file_ptr, NULL, _IOFBF, buffer_size);	*stream_size = 0;	if (file_ptr) {		if (!fseek(file_ptr, 0, SEEK_END)) {			*stream_size = ftell(file_ptr);			fseek(file_ptr, 0, SEEK_SET);		}	}	return((long) file_ptr);}/****************************************************************************/static void def_close( long handle ){	if (handle)		fclose((FILE *) handle);}/****************************************************************************/static long def_read(long handle, void *buffer, long num_bytes){	long read_size = -1;	if (handle)		read_size = fread(buffer, 1, num_bytes, (FILE *) handle);	return(read_size);}/****************************************************************************/static int def_seek(long handle, long abs_byte_seek_pos){	int err = 0;	if (handle)		err = fseek((FILE *) handle, abs_byte_seek_pos, SEEK_SET);	return(err);}/****************************************************************************//* *	End of default file I/O functions. */void BSTR_close(BITSTREAM *bitstream){	if (bitstream) {		if (bitstream->buffer)			//ffree(bitstream->buffer);			free(bitstream->buffer);		if (bitstream->file_handle) {			if (bitstream->baccess.close)				bitstream->baccess.close(bitstream->file_handle);		}		free(bitstream);	}}/****************************************************************************//* *	Open a BitStream for read *	Inputs: *		bs_access = specify how to access to the bitstream (functions) *		if NULL, use standard file i/o *		filename = name of the bitstream *		buffer_size = # of bytes read for each access */BITSTREAM *BSTR_open(BITSTREAM_ACCESS *bs_access, char *filename, long buffer_size){	BITSTREAM *bs;	bs = (BITSTREAM *) malloc(sizeof(BITSTREAM));	if (!bs)		return NULL;	memset(bs, 0, sizeof(BITSTREAM));	if (bs_access) {		bs->baccess = *bs_access;	} else {		bs->baccess.open = def_open;		bs->baccess.close = def_close;		bs->baccess.read = def_read;		bs->baccess.seek = def_seek;	}	// Buffer size must be 4-bytes aligned	buffer_size &= ~3;		bs->buffer = malloc(buffer_size);	//bs->buffer = fmalloc(buffer_size);	if (!bs->buffer) {		BSTR_close(bs);		return(NULL);	}	bs->buffer_size = buffer_size;	if (!bs->baccess.open) {		BSTR_close(bs);		return(NULL);	}	bs->file_handle = bs->baccess.open(filename, buffer_size, &bs->bitstream_size);	if (!bs->file_handle) {		BSTR_close(bs);		return(NULL);	}	bs->buffer_ptr = bs->buffer; // #10	bs->buffer_len = 0; // #10	bs->buffer_pos = 0; // #10	return(bs);}/****************************************************************************/static int fill_buffer(BITSTREAM *bitstream){#ifdef BSTR_MSBF	bitstream->buffer[0] = 0;#else	bitstream->buffer[1] = bitstream->buffer[2] = bitstream->buffer[3] = 0;#endif	if (bitstream->end_of_stream)		return 1;	if (!bitstream->baccess.read)		return 1;	bitstream->remain_bytes = bitstream->baccess.read(		bitstream->file_handle, bitstream->buffer,		bitstream->buffer_size );	bitstream->buffer_len = bitstream->remain_bytes; // #10	bitstream->buffer_pos += (long)bitstream->buffer_ptr - (long)bitstream->buffer; // #10	bitstream->buffer_ptr = bitstream->buffer;	bitstream->cache_size = 0;	if (bitstream->remain_bytes <= 0) {		bitstream->end_of_stream = 1;		return(1); /* empty */	} else if (bitstream->remain_bytes < 4) {		bitstream->remain_bytes = 4;	}	return(0);}/****************************************************************************/#ifdef BSTR_MSBF#define FILL_CACHE(b) { \	if (b->remain_bytes <= 0) \		fill_buffer(b); \	b->remain_bytes -= 4; \	b->bit_cache = *b->buffer_ptr++; \}#else#define FILL_CACHE(b) { \	if (b->remain_bytes <= 0) \		fill_buffer(b); \	b->remain_bytes -= 4; \	b->bit_cache = (((unsigned long)b->buffer_ptr[0])<<24) | \		(((unsigned long)b->buffer_ptr[1])<<16)| \		(((unsigned long)b->buffer_ptr[2])<<8) | \		((unsigned long)b->buffer_ptr[3]); b->buffer_ptr+=4; \}#endif/****************************************************************************/int BSTR_seek(BITSTREAM *bitstream, long seek_byte_pos){	int err;	// Optimize seek if inside current buffer	long offset_pos = seek_byte_pos - bitstream->buffer_pos;	if (bitstream->buffer_len > 0) {		if ((offset_pos >= 0) && (offset_pos < bitstream->buffer_len)) {			// Use current buffer			long remain = offset_pos & 3; // Remainder			offset_pos &= ~3; // align to 32 bit			bitstream->remain_bytes = bitstream->buffer_len - offset_pos;#ifdef BSTR_MSBF			bitstream->buffer_ptr = bitstream->buffer + (offset_pos>>2);#else			bitstream->buffer_ptr = bitstream->buffer + offset_pos;#endif         		bitstream->cache_size = 0;         		bitstream->bits = 0;         		FILL_CACHE(bitstream);         		bitstream->cache_size = 32;         		// Skip remainder         		while(remain--)				BSTR_read_byte(bitstream);         		return(0);		}	}	if (bitstream->baccess.seek) {		err = bitstream->baccess.seek(bitstream->file_handle, seek_byte_pos);		if (err)			return(err);	}	bitstream->remain_bytes = 0;	bitstream->buffer_ptr = bitstream->buffer;	bitstream->end_of_stream = 0;	bitstream->cache_size = 0;	bitstream->bits = 0;	bitstream->buffer_len = 0; // #10	bitstream->buffer_pos = seek_byte_pos; // #10	return(0);}/****************************************************************************/long BSTR_pos(BITSTREAM *bitstream){	return(bitstream->buffer_pos + (long)bitstream->buffer_ptr -		(long)bitstream->buffer - (bitstream->cache_size >> 3));}/****************************************************************************/unsigned long BSTR_read_byte(BITSTREAM *b){	if (b->cache_size < 8) {		FILL_CACHE(b);		b->cache_size = 32;	}	if (b->cache_size & 7) { // Not aligned		b->bit_cache <<= b->cache_size & 7;		b->cache_size &= ~7;	}	b->bits = b->bit_cache >> 24;	b->bit_cache <<= 8;	b->cache_size -= 8;	return(b->bits);}/****************************************************************************/unsigned int BSTR_read_bytes(BITSTREAM *b, unsigned int count, char *buffer){	if (count == 0)		return 0;	if (b->cache_size & 7) { // Not aligned		b->bit_cache <<= b->cache_size & 7;		b->cache_size &= ~7;	}	while ((b->cache_size > 0) && (count-- > 0 )) {		*buffer++ = b->bit_cache >> 24;		b->bit_cache <<= 8;		b->cache_size -= 8;	}	while (count > 3) {		int to_fill;		if (b->remain_bytes <= 0) {			if (fill_buffer(b))				return 0;		}		to_fill = count & ~3; // Important 4-bytes aligned		// Note: b->remain_bytes is always 4-bytes aligned		if (to_fill > b->remain_bytes)			to_fill = b->remain_bytes;				memcpy(buffer, b->buffer_ptr, to_fill);			count -= to_fill;			buffer += to_fill;			b->remain_bytes -= to_fill;#ifdef BSTR_MSBF			// This is a INT32 pointer here.			b->buffer_ptr += to_fill>>2;#else			b->buffer_ptr += to_fill;#endif		}	// Not 4 bytes aligned -> use cached read	while (count > 0) {		*buffer++ = BSTR_read_byte(b);		count--;	}	b->bits = (unsigned int)*(buffer-1);	return(1);}/****************************************************************************/unsigned long BSTR_read_bit_cache(BITSTREAM *b){	unsigned long bits;	FILL_CACHE(b);	b->cache_size = 31;	bits = (b->bit_cache & 0x80000000) ? 1 : 0;	b->bit_cache <<= 1;	return(bits);}/****************************************************************************/unsigned long BSTR_read_bits_cache(BITSTREAM *b, unsigned int count){	unsigned long bits;	bits = b->bit_cache >> (32 - count);	count -= b->cache_size;	FILL_CACHE(b);	b->cache_size = 32 - count;	bits |= b->bit_cache >> (32 - count);	b->bit_cache <<= count;	return(bits);}/****************************************************************************/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久久久99| 成人激情视频网站| 国产ts人妖一区二区| 在线中文字幕一区| 久久九九久精品国产免费直播| 亚洲一区二区av电影| 国产精品影音先锋| 欧美一区日本一区韩国一区| 国产精品二三区| 国产乱人伦偷精品视频免下载| 欧美老女人第四色| 亚洲美女免费视频| 国产v日产∨综合v精品视频| 日韩欧美精品三级| 午夜av一区二区三区| 成人一二三区视频| 久久人人超碰精品| 国产综合久久久久久鬼色| 欧美日韩国产首页在线观看| 亚洲欧美另类图片小说| 成人动漫视频在线| 国产精品污www在线观看| 精品一区二区三区免费观看 | 亚洲五月六月丁香激情| 成人性生交大片免费看中文网站| 欧美xfplay| 蜜臀精品一区二区三区在线观看 | 精品黑人一区二区三区久久| 亚洲成av人片一区二区三区| 色网综合在线观看| 亚洲欧美日韩中文播放| 91一区一区三区| 亚洲精品免费在线| 色综合欧美在线视频区| 亚洲日本护士毛茸茸| 91视频免费看| 亚洲综合在线电影| 欧美日韩一区在线观看| 亚洲成人免费看| 717成人午夜免费福利电影| 亚洲福利国产精品| 在线播放日韩导航| 秋霞国产午夜精品免费视频| 日韩欧美一区二区在线视频| 精品在线播放免费| 国产日产欧产精品推荐色| 成人亚洲一区二区一| 亚洲男人的天堂网| 精品视频色一区| 久热成人在线视频| 国产色91在线| 一本色道久久综合狠狠躁的推荐 | 麻豆传媒一区二区三区| 精品久久久久久综合日本欧美| 另类小说色综合网站| 亚洲国产精品v| 色综合久久久久综合体桃花网| 亚洲成人av资源| 久久久久国产精品人| 91免费看`日韩一区二区| 亚洲 欧美综合在线网络| 精品成人一区二区| 91亚洲精品久久久蜜桃| 26uuuu精品一区二区| 激情欧美一区二区三区在线观看| 日本一区二区在线不卡| 欧美日韩一区二区三区不卡| 日韩精品国产精品| 欧美激情在线看| 欧美三级在线播放| 成人免费观看视频| 天天综合网 天天综合色| 欧美激情一区不卡| 欧美精品一级二级| 成人激情免费电影网址| 免费成人在线播放| 狂野欧美性猛交blacked| 国产欧美精品一区二区三区四区| 欧美日韩精品一区二区三区| 国产精品 欧美精品| 亚洲一区二区三区四区五区黄| 精品蜜桃在线看| 色婷婷一区二区三区四区| 久久精品理论片| 亚洲一区二区三区四区五区中文 | 粉嫩在线一区二区三区视频| 爽爽淫人综合网网站| 中文字幕一区二区三中文字幕| 欧美成人a视频| 欧美美女网站色| 99国产精品视频免费观看| 国产精品一品视频| 蜜臀精品一区二区三区在线观看 | 色吊一区二区三区| 国产精品亚洲第一| 狠狠色丁香婷综合久久| 日韩高清在线不卡| 一区二区三区中文字幕电影| 国产精品女主播在线观看| 欧美成人午夜电影| 欧美一卡2卡三卡4卡5免费| 色系网站成人免费| 色婷婷综合久久久久中文一区二区| 成人午夜又粗又硬又大| 激情丁香综合五月| 精品在线一区二区| 九九视频精品免费| 美女免费视频一区| 久久精品免费看| 精品一区二区在线视频| 日韩电影一二三区| 日韩精品一卡二卡三卡四卡无卡| 亚洲网友自拍偷拍| 亚洲综合免费观看高清完整版在线| 国产精品不卡在线| 国产精品私人影院| 国产精品蜜臀av| 国产精品成人网| 亚洲免费观看高清完整版在线| 1000部国产精品成人观看| 中文字幕一区二区三区在线播放| 亚洲欧洲日本在线| 亚洲欧美二区三区| 亚洲一区二区精品视频| 亚洲黄色免费网站| 香蕉久久一区二区不卡无毒影院| 亚洲成人综合视频| 青娱乐精品在线视频| 麻豆成人在线观看| 成人一区在线看| 色综合久久综合网| 欧美精品久久久久久久多人混战 | 日韩精品在线一区| 久久久久久一二三区| 国产精品视频一二三区| 亚洲日韩欧美一区二区在线| 亚洲精品免费播放| 喷白浆一区二区| 国产成人啪免费观看软件| 99re成人精品视频| 欧美日韩极品在线观看一区| 日韩欧美色综合| 国产精品久99| 日韩精品免费视频人成| 国产成人在线看| 欧美影院一区二区三区| 精品免费99久久| 亚洲黄色免费网站| 精品一区二区日韩| 91麻豆国产香蕉久久精品| 欧美日韩亚洲国产综合| 久久先锋影音av鲁色资源| 亚洲欧美另类久久久精品| 奇米精品一区二区三区四区| 99久久精品国产观看| 7777精品久久久大香线蕉| 国产精品久久夜| 蜜桃视频在线观看一区| 97久久超碰国产精品| 日韩精品专区在线影院重磅| 亚洲欧美日韩国产一区二区三区 | 国产精品久久夜| 日本午夜精品一区二区三区电影| 成人午夜视频免费看| 欧美一区中文字幕| 亚洲老司机在线| 国产传媒日韩欧美成人| 7777精品伊人久久久大香线蕉完整版 | 中文字幕乱码日本亚洲一区二区| 一区二区三区中文字幕在线观看| 国产麻豆日韩欧美久久| 欧美人狂配大交3d怪物一区| 亚洲日本青草视频在线怡红院| 国内精品久久久久影院一蜜桃| 欧美乱熟臀69xxxxxx| 亚洲人成人一区二区在线观看| 国内精品国产成人国产三级粉色| 欧美日韩另类一区| 亚洲精品综合在线| 国产成人免费在线观看| 日韩精品一区国产麻豆| 午夜精品成人在线视频| 色天使色偷偷av一区二区| 国产精品五月天| 丁香一区二区三区| 精品国产亚洲一区二区三区在线观看| 香蕉久久夜色精品国产使用方法| 99热这里都是精品| 国产日产亚洲精品系列| 国产精品一区2区| 精品国产一区二区亚洲人成毛片| 性久久久久久久| 欧美日韩成人综合天天影院 | 欧美男生操女生| 亚洲成人免费看| 3atv一区二区三区| 免费看欧美女人艹b| 欧美老女人在线| 免费高清在线一区| 91精品国产综合久久精品图片|