package net.sourceforge.jaad.aac.transport;
import net.sourceforge.jaad.aac.AACException;
import net.sourceforge.jaad.aac.syntax.IBitStream;
import net.sourceforge.jaad.aac.syntax.PCE;
/**
* 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 final class ADIFHeader {
private static final long ADIF_ID = 0x41444946; //'ADIF'
private long id;
private boolean copyrightIDPresent;
private byte[] copyrightID;
private boolean originalCopy, home, bitstreamType;
private int bitrate;
private int pceCount;
private int[] adifBufferFullness;
private PCE[] pces;
public static boolean isPresent(IBitStream _in) throws AACException {
return _in.peekBits(32)==ADIF_ID;
}
private ADIFHeader() {
copyrightID = new byte[9];
}
public static ADIFHeader readHeader(IBitStream _in) throws AACException {
final ADIFHeader h = new ADIFHeader();
h.decode(_in);
return h;
}
private void decode(IBitStream _in) throws AACException {
int i;
id = _in.readBits(32); //'ADIF'
copyrightIDPresent = _in.readBool();
if(copyrightIDPresent) {
for(i = 0; i<9; i++) {
copyrightID[i] = (byte) _in.readBits(8);
}
}
originalCopy = _in.readBool();
home = _in.readBool();
bitstreamType = _in.readBool();
bitrate = _in.readBits(23);
pceCount = _in.readBits(4)+1;
pces = new PCE[pceCount];
adifBufferFullness = new int[pceCount];
for(i = 0; i<pceCount; i++) {
if(bitstreamType) adifBufferFullness[i] = -1;
else adifBufferFullness[i] = _in.readBits(20);
pces[i] = new PCE();
pces[i].decode(_in);
}
}
public PCE getFirstPCE() {
return pces[0];
}
}