X-Git-Url: http://plrg.eecs.uci.edu/git/?p=IRC.git;a=blobdiff_plain;f=Robust%2Fsrc%2FTests%2FssJava%2Fmp3decoder%2FBitstream.java;h=daf25e22b5604417ed423e68f0c7cbc09c42be9e;hp=82c595cd82e6f567eabbb43da73278d33cd2a720;hb=88cc6f37e1158f55870e1b55100e91a09b8d1556;hpb=056c895273f8bd2502eaf74b48c210020ffcc6a6 diff --git a/Robust/src/Tests/ssJava/mp3decoder/Bitstream.java b/Robust/src/Tests/ssJava/mp3decoder/Bitstream.java index 82c595cd..daf25e22 100644 --- a/Robust/src/Tests/ssJava/mp3decoder/Bitstream.java +++ b/Robust/src/Tests/ssJava/mp3decoder/Bitstream.java @@ -139,6 +139,10 @@ public final class Bitstream implements BitstreamErrors { @LOC("FF") private boolean firstframe = true; + private BitReserve br; + private int main_data_begin; + private int frame_start; + /** * Construct a IBitstream that reads data from a given InputStream. * @@ -157,6 +161,9 @@ public final class Bitstream implements BitstreamErrors { closeFrame(); // current_frame_number = -1; // last_frame_number = -1; + + br = new BitReserve(); + } /** @@ -370,6 +377,47 @@ public final class Bitstream implements BitstreamErrors { return get_bits(n); } + public int peek_bits(int number_of_bits) { + + int peekbitindex = bitindex; + int peekPointer = wordpointer; + + int returnvalue = 0; + int sum = peekbitindex + number_of_bits; + + if (peekPointer < 0) { + peekPointer = 0; + } + + if (sum <= 32) { + // all bits contained in *wordpointer + returnvalue = (framebuffer[peekPointer] >>> (32 - sum)) & bitmask[number_of_bits]; + // returnvalue = (wordpointer[0] >> (32 - sum)) & + // bitmask[number_of_bits]; + if ((peekbitindex += number_of_bits) == 32) { + peekbitindex = 0; + peekPointer++; // added by me! + } + return returnvalue; + } + + // E.B : Check that ? + // ((short[])&returnvalue)[0] = ((short[])wordpointer + 1)[0]; + // wordpointer++; // Added by me! + // ((short[])&returnvalue + 1)[0] = ((short[])wordpointer)[0]; + int Right = (framebuffer[peekPointer] & 0x0000FFFF); + peekPointer++; + int Left = (framebuffer[peekPointer] & 0xFFFF0000); + returnvalue = ((Right << 16) & 0xFFFF0000) | ((Left >>> 16) & 0x0000FFFF); + + returnvalue >>>= 48 - sum; // returnvalue >>= 16 - (number_of_bits - (32 + // - bitindex)) + returnvalue &= bitmask[number_of_bits]; + peekbitindex = sum - 32; + return returnvalue; + + } + public int readCheckedBits(int n) { // REVIEW: implement CRC check. return get_bits(n); @@ -505,7 +553,7 @@ public final class Bitstream implements BitstreamErrors { */ @LATTICE("OUT 4096) { + frame_start -= 4096; + br.rewindNbytes(4096); + } + + for (; bytes_to_discard > 0; bytes_to_discard--) + br.hgetbits(8); + + return br; + } }