package org.jcodec.containers.mp4.boxes;
import static org.jcodec.containers.mp4.TimeUtil.fromMovTime;
import static org.jcodec.containers.mp4.TimeUtil.toMovTime;
import java.nio.ByteBuffer;
/**
* This class is part of JCodec ( www.jcodec.org ) This software is distributed
* under FreeBSD License
*
* A media header atom
*
* @author The JCodec project
*
*/
public class MediaHeaderBox extends FullBox {
public MediaHeaderBox(Header atom) {
super(atom);
}
private long created;
private long modified;
private int timescale;
private long duration;
private int language;
private int quality;
public static String fourcc() {
return "mdhd";
}
public static MediaHeaderBox createMediaHeaderBox(int timescale, long duration, int language, long created,
long modified, int quality) {
MediaHeaderBox mdhd = new MediaHeaderBox(new Header(fourcc()));
mdhd.timescale = timescale;
mdhd.duration = duration;
mdhd.language = language;
mdhd.created = created;
mdhd.modified = modified;
mdhd.quality = quality;
return mdhd;
}
public int getTimescale() {
return timescale;
}
public long getDuration() {
return duration;
}
public long getCreated() {
return created;
}
public long getModified() {
return modified;
}
public int getLanguage() {
return language;
}
public int getQuality() {
return quality;
}
public void setDuration(long duration) {
this.duration = duration;
}
public void setTimescale(int timescale) {
this.timescale = timescale;
}
public void parse(ByteBuffer input) {
super.parse(input);
if (version == 0) {
created = fromMovTime(input.getInt());
modified = fromMovTime(input.getInt());
timescale = input.getInt();
duration = input.getInt();
} else if (version == 1) {
created = fromMovTime((int) input.getLong());
modified = fromMovTime((int) input.getLong());
timescale = input.getInt();
duration = input.getLong();
} else {
throw new RuntimeException("Unsupported version");
}
}
public void doWrite(ByteBuffer out) {
super.doWrite(out);
out.putInt(toMovTime(created));
out.putInt(toMovTime(modified));
out.putInt(timescale);
out.putInt((int) duration);
out.putShort((short) language);
out.putShort((short) quality);
}
}