blob: 7221503cd4c9b075ad96f7a59165c278a5a8c24f (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
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;
}
}
|