/* Erase the buffer with the previous 4 bytes in the file. */ int mpeg3bits_refill_backwards(mpeg3_bits_t* stream) { stream->bit_number = 0; stream->bfr_size = 32; stream->bfr = mpeg3demux_read_prev_char(stream->demuxer); stream->bfr |= (unsigned int)mpeg3demux_read_prev_char(stream->demuxer) << 8; stream->bfr |= (unsigned int)mpeg3demux_read_prev_char(stream->demuxer) << 16; stream->bfr |= (unsigned int)mpeg3demux_read_prev_char(stream->demuxer) << 24; return mpeg3demux_eof(stream->demuxer); }
/* Default is forward operation */ void mpeg3bits_start_reverse(mpeg3_bits_t* stream) { int i; for(i = 0; i < stream->bfr_size; i += 8) if(stream->input_ptr) stream->input_ptr--; else mpeg3demux_read_prev_char(stream->demuxer); }
/* Fill a buffer. Only works if bit_number is on an 8 bit boundary */ int mpeg3bits_read_buffer(mpeg3_bits_t* stream, unsigned char *buffer, int bytes) { int result, i = 0; while(stream->bit_number > 0) { stream->bit_number -= 8; mpeg3demux_read_prev_char(stream->demuxer); } stream->bit_number = 0; stream->bfr_size = 0; stream->bfr = 0; result = mpeg3demux_read_data(stream->demuxer, buffer, bytes); return result; }