All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jcodec.containers.mp4.boxes.ChannelBox Maven / Gradle / Ivy

There is a newer version: 0.2.5
Show newest version
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;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy