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

📄 bitstream.h

📁 网络MPEG4IP流媒体开发源代码
💻 H
字号:
#ifndef BITSTREAM_H#define BITSTREAM_H#include <systems.h>//                                    next bit in forward direction//                                  next bit in reverse direction |//                                                              v v// | | | | | | | | | | | | | | | | | | | | | | | | | | |1|1|1|1|1|1| *///                                                     ^         ^//                                                     |         bit_number = 1//                                                     bfr_size = 6typedef struct{	uint32_t bfr;  /* bfr = buffer for bits */	int bit_number;   /* position of pointer in bfr */	int bfr_size;    /* number of bits in bfr.  Should always be a multiple of 8 *//* If the input ptr is true, data is read from it instead of the demuxer. */	unsigned char *input_ptr;  unsigned char *orig_ptr;  long buflen;} mpeg3_bits_t;/* ======================================================================== *//*                                 Entry Points *//* ======================================================================== */mpeg3_bits_t *mpeg3bits_new_stream(void);static __inline int mpeg3bits_error (mpeg3_bits_t *stream){  return 0;}static __inline int mpeg3bits_eof (mpeg3_bits_t *stream){  long diff = stream->input_ptr - stream->orig_ptr;  return (diff >= stream->buflen);}/* Read bytes backward from the file until the reverse_bits is full. */static __inline void mpeg3bits_fill_reverse_bits(mpeg3_bits_t* stream, int bits){// Right justify	while(stream->bit_number > 7)	{		stream->bfr >>= 8;		stream->bfr_size -= 8;		stream->bit_number -= 8;	}// Insert bytes before bfr_size	while(stream->bfr_size - stream->bit_number < bits)	{	    stream->bfr |= (unsigned int)(*--stream->input_ptr) << stream->bfr_size;	    if (stream->input_ptr < stream->orig_ptr) {	      printf("fill reverse past begin\n");	    }		stream->bfr_size += 8;	}}/* Read bytes forward from the file until the forward_bits is full. */static __inline void mpeg3bits_fill_bits(mpeg3_bits_t* stream, int bits){	while(stream->bit_number < bits)	{		stream->bfr <<= 8;		stream->bfr |= *stream->input_ptr++;		stream->bit_number += 8;		stream->bfr_size += 8;		if(stream->bfr_size > 32) stream->bfr_size = 32;	}}/* Return 8 bits, advancing the file position. */static __inline unsigned int mpeg3bits_getbyte_noptr(mpeg3_bits_t* stream){	if(stream->bit_number < 8)	{		stream->bfr <<= 8;		stream->bfr |= *stream->input_ptr++;		stream->bfr_size += 8;		if(stream->bfr_size > 32) stream->bfr_size = 32;		return (stream->bfr >> stream->bit_number) & 0xff;	}	return (stream->bfr >> (stream->bit_number -= 8)) & 0xff;}static __inline unsigned int mpeg3bits_getbit_noptr(mpeg3_bits_t* stream){	if(!stream->bit_number)	{		stream->bfr <<= 8;		stream->bfr |= *stream->input_ptr++;		stream->bfr_size += 8;		if(stream->bfr_size > 32) stream->bfr_size = 32;		stream->bit_number = 7;		return (stream->bfr >> 7) & 0x1;	}	return (stream->bfr >> (--stream->bit_number)) & (0x1);}/* Return n number of bits, advancing the file position. *//* Use in place of flushbits */static __inline unsigned int mpeg3bits_getbits(mpeg3_bits_t* stream, int bits){	if(bits <= 0) return 0;	mpeg3bits_fill_bits(stream, bits);	return (stream->bfr >> (stream->bit_number -= bits)) & (0xffffffff >> (32 - bits));}static __inline unsigned int mpeg3bits_showbits24_noptr(mpeg3_bits_t* stream){	while(stream->bit_number < 24)	{		stream->bfr <<= 8;		stream->bfr |= *stream->input_ptr++;		stream->bit_number += 8;		stream->bfr_size += 8;		if(stream->bfr_size > 32) stream->bfr_size = 32;	}	return (stream->bfr >> (stream->bit_number - 24)) & 0xffffff;}static __inline unsigned int mpeg3bits_showbits32_noptr(mpeg3_bits_t* stream){	while(stream->bit_number < 32)	{		stream->bfr <<= 8;		stream->bfr |= *stream->input_ptr++;		stream->bit_number += 8;		stream->bfr_size += 8;		if(stream->bfr_size > 32) stream->bfr_size = 32;	}	return stream->bfr;}static __inline unsigned int mpeg3bits_showbits(mpeg3_bits_t* stream, int bits){	mpeg3bits_fill_bits(stream, bits);	return (stream->bfr >> (stream->bit_number - bits)) & (0xffffffff >> (32 - bits));}#if 0static __inline unsigned int mpeg3bits_getbits_reverse(mpeg3_bits_t* stream, int bits){	unsigned int result;	mpeg3bits_fill_reverse_bits(stream, bits);	result = (stream->bfr >> stream->bit_number) & (0xffffffff >> (32 - bits));	stream->bit_number += bits;	return result;}static __inline unsigned int mpeg3bits_showbits_reverse(mpeg3_bits_t* stream, int bits){	unsigned int result;	mpeg3bits_fill_reverse_bits(stream, bits);	result = (stream->bfr >> stream->bit_number) & (0xffffffff >> (32 - bits));	return result;}#endif#ifdef __cplusplusextern "C" {#endifint mpeg3bits_use_ptr_len(mpeg3_bits_t *stream, unsigned char *buffer,			  long buflen);#ifdef __cplusplus}#endif#endif

⌨️ 快捷键说明

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