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

📄 bitbuffer.c

📁 tcpmp.src.0.72RC1 优秀的多媒体播放器TCPMP的源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
		FLAC__ASSERT(k <= 30);		msbs = uval >> k;		bits = 1 + k + msbs;	}	else {		unsigned q, r, d;		d = (1 << (k+1)) - parameter;		q = uval / parameter;		r = uval - (q * parameter);		bits = 1 + q + k;		if(r >= d)			bits++;	}	return bits;}unsigned FLAC__bitbuffer_golomb_bits_unsigned(unsigned uval, unsigned parameter){	unsigned bits, msbs;	unsigned k;	FLAC__ASSERT(parameter > 0);	k = FLAC__bitmath_ilog2(parameter);	if(parameter == 1u<<k) {		FLAC__ASSERT(k <= 30);		msbs = uval >> k;		bits = 1 + k + msbs;	}	else {		unsigned q, r, d;		d = (1 << (k+1)) - parameter;		q = uval / parameter;		r = uval - (q * parameter);		bits = 1 + q + k;		if(r >= d)			bits++;	}	return bits;}#endif /* UNUSED */#ifdef FLAC__SYMMETRIC_RICEFLAC__bool FLAC__bitbuffer_write_symmetric_rice_signed(FLAC__BitBuffer *bb, int val, unsigned parameter){	unsigned total_bits, interesting_bits, msbs;	FLAC__uint32 pattern;	FLAC__ASSERT(0 != bb);	FLAC__ASSERT(0 != bb->buffer);	FLAC__ASSERT(parameter <= 31);	/* init pattern with the unary end bit and the sign bit */	if(val < 0) {		pattern = 3;		val = -val;	}	else		pattern = 2;	msbs = val >> parameter;	interesting_bits = 2 + parameter;	total_bits = interesting_bits + msbs;	pattern <<= parameter;	pattern |= (val & ((1<<parameter)-1)); /* the binary LSBs */	if(total_bits <= 32) {		if(!FLAC__bitbuffer_write_raw_uint32(bb, pattern, total_bits))			return false;	}	else {		/* write the unary MSBs */		if(!FLAC__bitbuffer_write_zeroes(bb, msbs))			return false;		/* write the unary end bit, the sign bit, and binary LSBs */		if(!FLAC__bitbuffer_write_raw_uint32(bb, pattern, interesting_bits))			return false;	}	return true;}#if 0 /* UNUSED */FLAC__bool FLAC__bitbuffer_write_symmetric_rice_signed_guarded(FLAC__BitBuffer *bb, int val, unsigned parameter, unsigned max_bits, FLAC__bool *overflow){	unsigned total_bits, interesting_bits, msbs;	FLAC__uint32 pattern;	FLAC__ASSERT(0 != bb);	FLAC__ASSERT(0 != bb->buffer);	FLAC__ASSERT(parameter <= 31);	*overflow = false;	/* init pattern with the unary end bit and the sign bit */	if(val < 0) {		pattern = 3;		val = -val;	}	else		pattern = 2;	msbs = val >> parameter;	interesting_bits = 2 + parameter;	total_bits = interesting_bits + msbs;	pattern <<= parameter;	pattern |= (val & ((1<<parameter)-1)); /* the binary LSBs */	if(total_bits <= 32) {		if(!FLAC__bitbuffer_write_raw_uint32(bb, pattern, total_bits))			return false;	}	else if(total_bits > max_bits) {		*overflow = true;		return true;	}	else {		/* write the unary MSBs */		if(!FLAC__bitbuffer_write_zeroes(bb, msbs))			return false;		/* write the unary end bit, the sign bit, and binary LSBs */		if(!FLAC__bitbuffer_write_raw_uint32(bb, pattern, interesting_bits))			return false;	}	return true;}#endif /* UNUSED */FLAC__bool FLAC__bitbuffer_write_symmetric_rice_signed_escape(FLAC__BitBuffer *bb, int val, unsigned parameter){	unsigned total_bits, val_bits;	FLAC__uint32 pattern;	FLAC__ASSERT(0 != bb);	FLAC__ASSERT(0 != bb->buffer);	FLAC__ASSERT(parameter <= 31);	val_bits = FLAC__bitmath_silog2(val);	total_bits = 2 + parameter + 5 + val_bits;	if(total_bits <= 32) {		pattern = 3;		pattern <<= (parameter + 5);		pattern |= val_bits;		pattern <<= val_bits;		pattern |= (val & ((1 << val_bits) - 1));		if(!FLAC__bitbuffer_write_raw_uint32(bb, pattern, total_bits))			return false;	}	else {		/* write the '-0' escape code first */		if(!FLAC__bitbuffer_write_raw_uint32(bb, 3u << parameter, 2+parameter))			return false;		/* write the length */		if(!FLAC__bitbuffer_write_raw_uint32(bb, val_bits, 5))			return false;		/* write the value */		if(!FLAC__bitbuffer_write_raw_int32(bb, val, val_bits))			return false;	}	return true;}#endif /* ifdef FLAC__SYMMETRIC_RICE */FLAC__bool FLAC__bitbuffer_write_rice_signed(FLAC__BitBuffer *bb, int val, unsigned parameter){	unsigned total_bits, interesting_bits, msbs, uval;	FLAC__uint32 pattern;	FLAC__ASSERT(0 != bb);	FLAC__ASSERT(0 != bb->buffer);	FLAC__ASSERT(parameter <= 30);	/* fold signed to unsigned */	if(val < 0)		/* equivalent to		 *     (unsigned)(((--val) << 1) - 1);		 * but without the overflow problem at MININT		 */		uval = (unsigned)(((-(++val)) << 1) + 1);	else		uval = (unsigned)(val << 1);	msbs = uval >> parameter;	interesting_bits = 1 + parameter;	total_bits = interesting_bits + msbs;	pattern = 1 << parameter; /* the unary end bit */	pattern |= (uval & ((1<<parameter)-1)); /* the binary LSBs */	if(total_bits <= 32) {		if(!FLAC__bitbuffer_write_raw_uint32(bb, pattern, total_bits))			return false;	}	else {		/* write the unary MSBs */		if(!FLAC__bitbuffer_write_zeroes(bb, msbs))			return false;		/* write the unary end bit and binary LSBs */		if(!FLAC__bitbuffer_write_raw_uint32(bb, pattern, interesting_bits))			return false;	}	return true;}#if 0 /* UNUSED */FLAC__bool FLAC__bitbuffer_write_rice_signed_guarded(FLAC__BitBuffer *bb, int val, unsigned parameter, unsigned max_bits, FLAC__bool *overflow){	unsigned total_bits, interesting_bits, msbs, uval;	FLAC__uint32 pattern;	FLAC__ASSERT(0 != bb);	FLAC__ASSERT(0 != bb->buffer);	FLAC__ASSERT(parameter <= 30);	*overflow = false;	/* fold signed to unsigned */	if(val < 0)		/* equivalent to		 *     (unsigned)(((--val) << 1) - 1);		 * but without the overflow problem at MININT		 */		uval = (unsigned)(((-(++val)) << 1) + 1);	else		uval = (unsigned)(val << 1);	msbs = uval >> parameter;	interesting_bits = 1 + parameter;	total_bits = interesting_bits + msbs;	pattern = 1 << parameter; /* the unary end bit */	pattern |= (uval & ((1<<parameter)-1)); /* the binary LSBs */	if(total_bits <= 32) {		if(!FLAC__bitbuffer_write_raw_uint32(bb, pattern, total_bits))			return false;	}	else if(total_bits > max_bits) {		*overflow = true;		return true;	}	else {		/* write the unary MSBs */		if(!FLAC__bitbuffer_write_zeroes(bb, msbs))			return false;		/* write the unary end bit and binary LSBs */		if(!FLAC__bitbuffer_write_raw_uint32(bb, pattern, interesting_bits))			return false;	}	return true;}#endif /* UNUSED */#if 0 /* UNUSED */FLAC__bool FLAC__bitbuffer_write_golomb_signed(FLAC__BitBuffer *bb, int val, unsigned parameter){	unsigned total_bits, msbs, uval;	unsigned k;	FLAC__ASSERT(0 != bb);	FLAC__ASSERT(0 != bb->buffer);	FLAC__ASSERT(parameter > 0);	/* fold signed to unsigned */	if(val < 0)		/* equivalent to		 *     (unsigned)(((--val) << 1) - 1);		 * but without the overflow problem at MININT		 */		uval = (unsigned)(((-(++val)) << 1) + 1);	else		uval = (unsigned)(val << 1);	k = FLAC__bitmath_ilog2(parameter);	if(parameter == 1u<<k) {		unsigned pattern;		FLAC__ASSERT(k <= 30);		msbs = uval >> k;		total_bits = 1 + k + msbs;		pattern = 1 << k; /* the unary end bit */		pattern |= (uval & ((1u<<k)-1)); /* the binary LSBs */		if(total_bits <= 32) {			if(!FLAC__bitbuffer_write_raw_uint32(bb, pattern, total_bits))				return false;		}		else {			/* write the unary MSBs */			if(!FLAC__bitbuffer_write_zeroes(bb, msbs))				return false;			/* write the unary end bit and binary LSBs */			if(!FLAC__bitbuffer_write_raw_uint32(bb, pattern, k+1))				return false;		}	}	else {		unsigned q, r, d;		d = (1 << (k+1)) - parameter;		q = uval / parameter;		r = uval - (q * parameter);		/* write the unary MSBs */		if(!FLAC__bitbuffer_write_zeroes(bb, q))			return false;		/* write the unary end bit */		if(!FLAC__bitbuffer_write_raw_uint32(bb, 1, 1))			return false;		/* write the binary LSBs */		if(r >= d) {			if(!FLAC__bitbuffer_write_raw_uint32(bb, r+d, k+1))				return false;		}		else {			if(!FLAC__bitbuffer_write_raw_uint32(bb, r, k))				return false;		}	}	return true;}FLAC__bool FLAC__bitbuffer_write_golomb_unsigned(FLAC__BitBuffer *bb, unsigned uval, unsigned parameter){	unsigned total_bits, msbs;	unsigned k;	FLAC__ASSERT(0 != bb);	FLAC__ASSERT(0 != bb->buffer);	FLAC__ASSERT(parameter > 0);	k = FLAC__bitmath_ilog2(parameter);	if(parameter == 1u<<k) {		unsigned pattern;		FLAC__ASSERT(k <= 30);		msbs = uval >> k;		total_bits = 1 + k + msbs;		pattern = 1 << k; /* the unary end bit */		pattern |= (uval & ((1u<<k)-1)); /* the binary LSBs */		if(total_bits <= 32) {			if(!FLAC__bitbuffer_write_raw_uint32(bb, pattern, total_bits))				return false;		}		else {			/* write the unary MSBs */			if(!FLAC__bitbuffer_write_zeroes(bb, msbs))				return false;			/* write the unary end bit and binary LSBs */			if(!FLAC__bitbuffer_write_raw_uint32(bb, pattern, k+1))				return false;		}	}	else {		unsigned q, r, d;		d = (1 << (k+1)) - parameter;		q = uval / parameter;		r = uval - (q * parameter);		/* write the unary MSBs */		if(!FLAC__bitbuffer_write_zeroes(bb, q))			return false;		/* write the unary end bit */		if(!FLAC__bitbuffer_write_raw_uint32(bb, 1, 1))			return false;		/* write the binary LSBs */		if(r >= d) {			if(!FLAC__bitbuffer_write_raw_uint32(bb, r+d, k+1))				return false;		}		else {			if(!FLAC__bitbuffer_write_raw_uint32(bb, r, k))				return false;		}	}	return true;}#endif /* UNUSED */FLAC__bool FLAC__bitbuffer_write_utf8_uint32(FLAC__BitBuffer *bb, FLAC__uint32 val){	FLAC__bool ok = 1;	FLAC__ASSERT(0 != bb);	FLAC__ASSERT(0 != bb->buffer);	FLAC__ASSERT(!(val & 0x80000000)); /* this version only handles 31 bits */	if(val < 0x80) {		return FLAC__bitbuffer_write_raw_uint32(bb, val, 8);	}	else if(val < 0x800) {		ok &= FLAC__bitbuffer_write_raw_uint32(bb, 0xC0 | (val>>6), 8);		ok &= FLAC__bitbuffer_write_raw_uint32(bb, 0x80 | (val&0x3F), 8);	}	else if(val < 0x10000) {		ok &= FLAC__bitbuffer_write_raw_uint32(bb, 0xE0 | (val>>12), 8);		ok &= FLAC__bitbuffer_write_raw_uint32(bb, 0x80 | ((val>>6)&0x3F), 8);		ok &= FLAC__bitbuffer_write_raw_uint32(bb, 0x80 | (val&0x3F), 8);	}	else if(val < 0x200000) {		ok &= FLAC__bitbuffer_write_raw_uint32(bb, 0xF0 | (val>>18), 8);		ok &= FLAC__bitbuffer_write_raw_uint32(bb, 0x80 | ((val>>12)&0x3F), 8);		ok &= FLAC__bitbuffer_write_raw_uint32(bb, 0x80 | ((val>>6)&0x3F), 8);		ok &= FLAC__bitbuffer_write_raw_uint32(bb, 0x80 | (val&0x3F), 8);	}	else if(val < 0x4000000) {		ok &= FLAC__bitbuffer_write_raw_uint32(bb, 0xF8 | (val>>24), 8);		ok &= FLAC__bitbuffer_write_raw_uint32(bb, 0x80 | ((val>>18)&0x3F), 8);		ok &= FLAC__bitbuffer_write_raw_uint32(bb, 0x80 | ((val>>12)&0x3F), 8);		ok &= FLAC__bitbuffer_write_raw_uint32(bb, 0x80 | ((val>>6)&0x3F), 8);		ok &= FLAC__bitbuffer_write_raw_uint32(bb, 0x80 | (val&0x3F), 8);	}	else {		ok &= FLAC__bitbuffer_write_raw_uint32(bb, 0xFC | (val>>30), 8);		ok &= FLAC__bitbuffer_write_raw_uint32(bb, 0x80 | ((val>>24)&0x3F), 8);		ok &= FLAC__bitbuffer_write_raw_uint32(bb, 0x80 | ((val>>18)&0x3F), 8);		ok &= FLAC__bitbuffer_write_raw_uint32(bb, 0x80 | ((val>>12)&0x3F), 8);		ok &= FLAC__bitbuffer_write_raw_uint32(bb, 0x80 | ((val>>6)&0x3F), 8);		ok &= FLAC__bitbuffer_write_raw_uint32(bb, 0x80 | (val&0x3F), 8);	}	return ok;}

⌨️ 快捷键说明

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