package com.coremedia.iso.boxes.apple; | |
import com.coremedia.iso.IsoTypeReader; | |
import com.coremedia.iso.IsoTypeWriter; | |
import com.googlecode.mp4parser.AbstractFullBox; | |
import java.nio.ByteBuffer; | |
/** | |
* | |
*/ | |
public final class AppleLosslessSpecificBox extends AbstractFullBox { | |
public static final String TYPE = "alac"; | |
/* | |
Extradata: 32bit size 32bit tag (=alac) 32bit zero? | |
32bit max sample per frame 8bit ?? (zero?) 8bit sample | |
size 8bit history mult 8bit initial history 8bit kmodifier | |
8bit channels? 16bit ?? 32bit max coded frame size 32bit | |
bitrate? 32bit samplerate | |
*/ | |
private long maxSamplePerFrame; // 32bi | |
private int unknown1; // 8bit | |
private int sampleSize; // 8bit | |
private int historyMult; // 8bit | |
private int initialHistory; // 8bit | |
private int kModifier; // 8bit | |
private int channels; // 8bit | |
private int unknown2; // 16bit | |
private long maxCodedFrameSize; // 32bit | |
private long bitRate; // 32bit | |
private long sampleRate; // 32bit | |
public long getMaxSamplePerFrame() { | |
return maxSamplePerFrame; | |
} | |
public void setMaxSamplePerFrame(int maxSamplePerFrame) { | |
this.maxSamplePerFrame = maxSamplePerFrame; | |
} | |
public int getUnknown1() { | |
return unknown1; | |
} | |
public void setUnknown1(int unknown1) { | |
this.unknown1 = unknown1; | |
} | |
public int getSampleSize() { | |
return sampleSize; | |
} | |
public void setSampleSize(int sampleSize) { | |
this.sampleSize = sampleSize; | |
} | |
public int getHistoryMult() { | |
return historyMult; | |
} | |
public void setHistoryMult(int historyMult) { | |
this.historyMult = historyMult; | |
} | |
public int getInitialHistory() { | |
return initialHistory; | |
} | |
public void setInitialHistory(int initialHistory) { | |
this.initialHistory = initialHistory; | |
} | |
public int getKModifier() { | |
return kModifier; | |
} | |
public void setKModifier(int kModifier) { | |
this.kModifier = kModifier; | |
} | |
public int getChannels() { | |
return channels; | |
} | |
public void setChannels(int channels) { | |
this.channels = channels; | |
} | |
public int getUnknown2() { | |
return unknown2; | |
} | |
public void setUnknown2(int unknown2) { | |
this.unknown2 = unknown2; | |
} | |
public long getMaxCodedFrameSize() { | |
return maxCodedFrameSize; | |
} | |
public void setMaxCodedFrameSize(int maxCodedFrameSize) { | |
this.maxCodedFrameSize = maxCodedFrameSize; | |
} | |
public long getBitRate() { | |
return bitRate; | |
} | |
public void setBitRate(int bitRate) { | |
this.bitRate = bitRate; | |
} | |
public long getSampleRate() { | |
return sampleRate; | |
} | |
public void setSampleRate(int sampleRate) { | |
this.sampleRate = sampleRate; | |
} | |
@Override | |
public void _parseDetails(ByteBuffer content) { | |
parseVersionAndFlags(content); | |
maxSamplePerFrame = IsoTypeReader.readUInt32(content); | |
unknown1 = IsoTypeReader.readUInt8(content); | |
sampleSize = IsoTypeReader.readUInt8(content); | |
historyMult = IsoTypeReader.readUInt8(content); | |
initialHistory = IsoTypeReader.readUInt8(content); | |
kModifier = IsoTypeReader.readUInt8(content); | |
channels = IsoTypeReader.readUInt8(content); | |
unknown2 = IsoTypeReader.readUInt16(content); | |
maxCodedFrameSize = IsoTypeReader.readUInt32(content); | |
bitRate = IsoTypeReader.readUInt32(content); | |
sampleRate = IsoTypeReader.readUInt32(content); | |
} | |
@Override | |
protected void getContent(ByteBuffer byteBuffer) { | |
writeVersionAndFlags(byteBuffer); | |
IsoTypeWriter.writeUInt32(byteBuffer, maxSamplePerFrame); | |
IsoTypeWriter.writeUInt8(byteBuffer, unknown1); | |
IsoTypeWriter.writeUInt8(byteBuffer, sampleSize); | |
IsoTypeWriter.writeUInt8(byteBuffer, historyMult); | |
IsoTypeWriter.writeUInt8(byteBuffer, initialHistory); | |
IsoTypeWriter.writeUInt8(byteBuffer, kModifier); | |
IsoTypeWriter.writeUInt8(byteBuffer, channels); | |
IsoTypeWriter.writeUInt16(byteBuffer, unknown2); | |
IsoTypeWriter.writeUInt32(byteBuffer, maxCodedFrameSize); | |
IsoTypeWriter.writeUInt32(byteBuffer, bitRate); | |
IsoTypeWriter.writeUInt32(byteBuffer, sampleRate); | |
} | |
public AppleLosslessSpecificBox() { | |
super("alac"); | |
} | |
protected long getContentSize() { | |
return 28; | |
} | |
} |