1 public class SideInfoBuffer {
4 * The frame buffer that holds the data for the current frame.
7 private final int[] framebuffer = new int[BUFFER_INT_SIZE];
10 * Maximum size of the frame buffer.
12 private static final int BUFFER_INT_SIZE = 433;
15 * Index into <code>framebuffer</code> where the next bits are retrieved.
18 private int wordpointer;
21 * Number (0-31, from MSB to LSB) of next bit for get_bits()
26 private int main_data_begin;
28 public int getMain_data_begin() {
29 return main_data_begin;
32 public void setMain_data_begin(int main_data_begin) {
33 this.main_data_begin = main_data_begin;
36 private static final int bitmask[] = { 0, // dummy
37 0x00000001, 0x00000003, 0x00000007, 0x0000000F, 0x0000001F, 0x0000003F, 0x0000007F, 0x000000FF, 0x000001FF, 0x000003FF, 0x000007FF, 0x00000FFF, 0x00001FFF, 0x00003FFF, 0x00007FFF, 0x0000FFFF, 0x0001FFFF };
39 public int get_bits(int number_of_bits) {
41 int sum = bitindex + number_of_bits;
42 // System.out.println("bitindex=" + bitindex + " wordpointer="
45 // There is a problem here, wordpointer could be -1 ?!
51 // all bits contained in *wordpointer
52 returnvalue = (framebuffer[wordpointer] >>> (32 - sum)) & bitmask[number_of_bits];
53 // returnvalue = (wordpointer[0] >> (32 - sum)) &
54 // bitmask[number_of_bits];
55 if ((bitindex += number_of_bits) == 32) {
57 wordpointer++; // added by me!
63 // ((short[])&returnvalue)[0] = ((short[])wordpointer + 1)[0];
64 // wordpointer++; // Added by me!
65 // ((short[])&returnvalue + 1)[0] = ((short[])wordpointer)[0];
66 int Right = (framebuffer[wordpointer] & 0x0000FFFF);
68 int Left = (framebuffer[wordpointer] & 0xFFFF0000);
69 returnvalue = ((Right << 16) & 0xFFFF0000) | ((Left >>> 16) & 0x0000FFFF);
71 returnvalue >>>= 48 - sum; // returnvalue >>= 16 - (number_of_bits - (32
73 returnvalue &= bitmask[number_of_bits];
78 public void setBuffer(int idx, int value) {
79 framebuffer[idx] = value;