org.jcodec.common.io.VLCBuilder Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jcodec Show documentation
Show all versions of jcodec Show documentation
Pure Java implementation of video/audio codecs and formats
package org.jcodec.common.io;
import org.jcodec.common.IntArrayList;
import org.jcodec.common.IntIntMap;
/**
* This class is part of JCodec ( www.jcodec.org ) This software is distributed
* under FreeBSD License
*
* prefix VLC reader builder
*
* @author The JCodec project
*
*/
public class VLCBuilder {
public static VLCBuilder createVLCBuilder(int[] codes, int[] lens, int[] vals) {
VLCBuilder b = new VLCBuilder();
for (int i = 0; i < codes.length; i++) {
b.setInt(codes[i], lens[i], vals[i]);
}
return b;
}
private IntIntMap forward;
private IntIntMap inverse;
private IntArrayList codes;
private IntArrayList codesSizes;
public VLCBuilder() {
this.forward = new IntIntMap();
this.inverse = new IntIntMap();
this.codes = IntArrayList.createIntArrayList();
this.codesSizes = IntArrayList.createIntArrayList();
}
public VLCBuilder set(int val, String code) {
setInt(Integer.parseInt(code, 2), code.length(), val);
return this;
}
public VLCBuilder setInt(int code, int len, int val) {
codes.add(code << (32 - len));
codesSizes.add(len);
forward.put(val, codes.size() - 1);
inverse.put(codes.size() - 1, val);
return this;
}
public VLC getVLC() {
final VLCBuilder self = this;
return new VLC(codes.toArray(), codesSizes.toArray()) {
public int readVLC(BitReader _in) {
return self.inverse.get(super.readVLC(_in));
}
public int readVLC16(BitReader _in) {
return self.inverse.get(super.readVLC16(_in));
}
public void writeVLC(BitWriter out, int code) {
super.writeVLC(out, self.forward.get(code));
}
};
}
}