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

org.red5.io.isobmff.atom.ShortEsdsBox Maven / Gradle / Ivy

There is a newer version: 2.0.15
Show newest version
package org.red5.io.isobmff.atom;

import java.nio.ByteBuffer;
import java.util.ArrayList;

import org.jcodec.codecs.mpeg4.es.DecoderConfig;
import org.jcodec.codecs.mpeg4.es.DecoderSpecific;
import org.jcodec.codecs.mpeg4.es.Descriptor;
import org.jcodec.codecs.mpeg4.es.DescriptorParser;
import org.jcodec.codecs.mpeg4.es.ES;
import org.jcodec.codecs.mpeg4.es.NodeDescriptor;
import org.jcodec.codecs.mpeg4.es.SL;
import org.jcodec.containers.mp4.boxes.FullBox;
import org.jcodec.containers.mp4.boxes.Header;

public class ShortEsdsBox extends FullBox {

    private ByteBuffer streamInfo;

    private int objectType;

    private int bufSize;

    private int maxBitrate;

    private int avgBitrate;

    private int trackId;

    public static String fourcc() {
        return "esds";
    }

    public ShortEsdsBox(Header atom) {
        super(atom);
    }

    @Override
    protected void doWrite(ByteBuffer out) {
        super.doWrite(out);
        if (streamInfo != null && streamInfo.remaining() > 0) {
            ArrayList l = new ArrayList();
            ArrayList l1 = new ArrayList();
            l1.add(new DecoderSpecific(streamInfo));
            l.add(new DecoderConfig(objectType, bufSize, maxBitrate, avgBitrate, l1));
            l.add(new SL());
            new ES(trackId, l).write(out);
        } else {
            ArrayList l = new ArrayList();
            l.add(new DecoderConfig(objectType, bufSize, maxBitrate, avgBitrate, new ArrayList()));
            l.add(new SL());
            new ES(trackId, l).write(out);
        }
    }

    @Override
    public int estimateSize() {
        return 64;
    }

    @Override
    public void parse(ByteBuffer input) {
        super.parse(input);
        ES es = (ES) DescriptorParser.read(input);
        trackId = es.getTrackId();
        DecoderConfig decoderConfig = NodeDescriptor.findByTag(es, DecoderConfig.tag());
        objectType = decoderConfig.getObjectType();
        bufSize = decoderConfig.getBufSize();
        maxBitrate = decoderConfig.getMaxBitrate();
        avgBitrate = decoderConfig.getAvgBitrate();
        DecoderSpecific decoderSpecific = NodeDescriptor.findByTag(decoderConfig, DecoderSpecific.tag());
        if (decoderSpecific != null) {
            streamInfo = decoderSpecific.getData();
        }
    }

    public boolean hasStreamInfo() {
        return streamInfo != null;
    }

    public ByteBuffer getStreamInfo() {
        return streamInfo;
    }

    public int getObjectType() {
        return objectType;
    }

    public int getBufSize() {
        return bufSize;
    }

    public int getMaxBitrate() {
        return maxBitrate;
    }

    public int getAvgBitrate() {
        return avgBitrate;
    }

    public int getTrackId() {
        return trackId;
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy