package net.sourceforge.jaad.aac.syntax; import org.jcodec.common.io.BitReader; import java.nio.ByteBuffer; import net.sourceforge.jaad.aac.AACException; /** * This class is part of JAAD ( jaadec.sourceforge.net ) that is distributed * under the Public Domain license. Code changes provided by the JCodec project * are distributed under FreeBSD license. * * @author in-somnia */ public class NIOBitStream implements IBitStream { private BitReader br; public NIOBitStream(BitReader br) { this.br = br; } @Override public void destroy() { reset(); br = null; } @Override public void setData(byte[] data) { br = BitReader.createBitReader(ByteBuffer.wrap(data)); } @Override public void byteAlign() throws AACException { br.align(); } @Override public void reset() { throw new RuntimeException("todo"); } @Override public int getPosition() { return br.position(); } @Override public int getBitsLeft() { return br.remaining(); } @Override public int readBits(int n) throws AACException { if (br.remaining() >= n) { return br.readNBit(n); } throw AACException.endOfStream(); } @Override public int readBit() throws AACException { if (br.remaining() >= 1) { return br.read1Bit(); } throw AACException.endOfStream(); } @Override public boolean readBool() throws AACException { int read1Bit = readBit(); return read1Bit != 0; } @Override public int peekBits(int n) throws AACException { int checkNBit = br.checkNBit(n); return checkNBit; } @Override public int peekBit() throws AACException { int curBit = br.curBit(); return curBit; } @Override public void skipBits(int n) throws AACException { br.skip(n); } @Override public void skipBit() throws AACException { skipBits(1); } @Override public int maskBits(int n) { int i; if (n == 32) i = -1; else i = (1 << n) - 1; return i; } }