/* ** BitsUtils.java ** ** Copyright (c) 2008 Peter McQuillan ** ** All Rights Reserved. ** ** Distributed under the BSD Software License (see license.txt) ** */ package com.wavpack.encoder; class BitsUtils { ////////////////////////// Bitstream functions //////////////////////////////// // Open the specified BitStream using the specified buffer pointers. It is // assumed that enough buffer space has been allocated for all data that will // be written, otherwise an error will be generated. static void bs_open_write(Bitstream bs, int buffer_start, int buffer_end) { bs.error = 0; bs.sr = 0; bs.bc = 0; bs.buf_index = buffer_start; bs.start_index = bs.buf_index; bs.end = (int) buffer_end; bs.active = 1; // indicates that the bitstream is being used } // This function is only called from the putbit() and putbits() when // the buffer is full, which is now flagged as an error. static void bs_wrap(Bitstream bs) { bs.buf_index = bs.start_index; bs.error = 1; } // This function calculates the approximate number of bytes remaining in the // bitstream buffer and can be used as an early-warning of an impending overflow. static long bs_remain_write(Bitstream bs) { long bytes_written; if (bs.error > 0) { return (long) -1; } return bs.end - bs.buf_index; } // This function forces a flushing write of the standard BitStream, and // returns the total number of bytes written into the buffer. static long bs_close_write(WavpackStream wps) { Bitstream bs = wps.wvbits; long bytes_written = 0; if (bs.error != 0) { return (long) -1; } while ((bs.bc != 0) || (((bs.buf_index - bs.start_index) & 1) != 0)) { WordsUtils.putbit_1(wps); } bytes_written = bs.buf_index - bs.start_index; return bytes_written; } // This function forces a flushing write of the correction BitStream, and // returns the total number of bytes written into the buffer. static long bs_close_correction_write(WavpackStream wps) { Bitstream bs = wps.wvcbits; long bytes_written = 0; if (bs.error != 0) { return (long) -1; } while ((bs.bc != 0) || (((bs.buf_index - bs.start_index) & 1) != 0)) { WordsUtils.putbit_correction_1(wps); } bytes_written = bs.buf_index - bs.start_index; return bytes_written; } }