org.jcodec.containers.mp4.boxes.ChannelBox Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jcodec Show documentation
Show all versions of jcodec Show documentation
Pure Java implementation of video/audio codecs and formats
package org.jcodec.containers.mp4.boxes;
import org.jcodec.common.model.Label;
import java.nio.ByteBuffer;
/**
* This class is part of JCodec ( www.jcodec.org ) This software is distributed
* under FreeBSD License
*
* @author The JCodec project
*
*/
public class ChannelBox extends FullBox {
private int channelLayout;
private int channelBitmap;
private ChannelDescription[] descriptions;
public static class ChannelDescription {
private int channelLabel;
private int channelFlags;
private float[] coordinates;
public ChannelDescription(int channelLabel, int channelFlags, float[] coordinates) {
this.coordinates = new float[3];
this.channelLabel = channelLabel;
this.channelFlags = channelFlags;
this.coordinates = coordinates;
}
public int getChannelLabel() {
return channelLabel;
}
public int getChannelFlags() {
return channelFlags;
}
public float[] getCoordinates() {
return coordinates;
}
public Label getLabel() {
return Label.getByVal(channelLabel);
}
}
public ChannelBox(Header atom) {
super(atom);
}
public static String fourcc() {
return "chan";
}
public static ChannelBox createChannelBox() {
return new ChannelBox(new Header(fourcc()));
}
public void parse(ByteBuffer input) {
super.parse(input);
channelLayout = input.getInt();
channelBitmap = input.getInt();
int numDescriptions = input.getInt();
descriptions = new ChannelDescription[numDescriptions];
for (int i = 0; i < numDescriptions; i++) {
descriptions[i] = new ChannelDescription(input.getInt(), input.getInt(), new float[] {
Float.intBitsToFloat(input.getInt()), Float.intBitsToFloat(input.getInt()),
Float.intBitsToFloat(input.getInt()) });
}
}
protected void doWrite(ByteBuffer out) {
super.doWrite(out);
out.putInt(channelLayout);
out.putInt(channelBitmap);
out.putInt(descriptions.length);
for (int i = 0; i < descriptions.length; i++) {
ChannelDescription channelDescription = descriptions[i];
out.putInt(channelDescription.getChannelLabel());
out.putInt(channelDescription.getChannelFlags());
out.putFloat(channelDescription.getCoordinates()[0]);
out.putFloat(channelDescription.getCoordinates()[1]);
out.putFloat(channelDescription.getCoordinates()[2]);
}
}
public int getChannelLayout() {
return channelLayout;
}
public int getChannelBitmap() {
return channelBitmap;
}
public ChannelDescription[] getDescriptions() {
return descriptions;
}
public void setChannelLayout(int channelLayout) {
this.channelLayout = channelLayout;
}
public void setDescriptions(ChannelDescription[] descriptions) {
this.descriptions = descriptions;
}
}