blob: 781af4960891480d78fab8dad753a0148444833c [file] [log] [blame]
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;
}
}