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;
import org.jcodec.common.tools.ToJSON;
/**
* This class is part of JCodec ( www.jcodec.org ) This software is distributed
* under FreeBSD License
*
* A media header atom
*
* @author Jay Codec
*
*/
public class MediaHeaderBox extends FullBox {
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 MediaHeaderBox(int timescale, long duration, int language, long created, long modified, int quality) {
super(new Header(fourcc()));
this.timescale = timescale;
this.duration = duration;
this.language = language;
this.created = created;
this.modified = modified;
this.quality = quality;
}
public MediaHeaderBox() {
super(new Header(fourcc()));
}
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 int getTimescale() {
return timescale;
}
public long getDuration() {
return duration;
}
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);
}
public void setDuration(long duration) {
this.duration = duration;
}
public void setTimescale(int timescale) {
this.timescale = timescale;
}
@Override
public void dump(StringBuilder sb) {
super.dump(sb);
sb.append(": ");
ToJSON.toJSON(this, sb, "created", "modified", "timescale", "duration", "language", "quality");
}
}