package com.googlecode.mp4parser.boxes.mp4.objectdescriptors;
import java.nio.ByteBuffer;
public class BitReaderBuffer {
private ByteBuffer buffer;
int initialPos;
int position;
public BitReaderBuffer(ByteBuffer buffer) {
this.buffer = buffer;
initialPos = buffer.position();
}
public int readBits(int i) {
byte b = buffer.get(initialPos + position / 8);
int v = b < 0 ? b + 256 : b;
int left = 8 - position % 8;
int rc;
if (i <= left) {
rc = (v << (position % 8) & 0xFF) >> ((position % 8) + (left - i));
position += i;
} else {
int now = left;
int then = i - left;
rc = readBits(now);
rc = rc << then;
rc += readBits(then);
}
buffer.position(initialPos + (int) Math.ceil((double) position / 8));
return rc;
}
public int getPosition() {
return position;
}
public int byteSync() {
int left = 8 - position % 8;
if (left == 8) {
left = 0;
}
readBits(left);
return left;
}
public int remainingBits() {
return buffer.limit() * 8 - position;
}
}
|