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

org.jcodec.containers.mps.psi.PSISection Maven / Gradle / Ivy

There is a newer version: 0.2.5
Show newest version
package org.jcodec.containers.mps.psi;
import java.nio.ByteBuffer;

/**
 * This class is part of JCodec ( www.jcodec.org ) This software is distributed
 * under FreeBSD License
 * 
 * Represents a section of PSI payload ( Program Stream Information ) MPEG
 * Transport stream
 * 
 * @author The JCodec project
 * 
 */
public class PSISection {
    protected int tableId;
    protected int specificId;
    protected int versionNumber;
    protected int currentNextIndicator;
    protected int sectionNumber;
    protected int lastSectionNumber;

    public PSISection(int tableId, int specificId, int versionNumber, int currentNextIndicator, int sectionNumber,
            int lastSectionNumber) {
        this.tableId = tableId;
        this.specificId = specificId;
        this.versionNumber = versionNumber;
        this.currentNextIndicator = currentNextIndicator;
        this.sectionNumber = sectionNumber;
        this.lastSectionNumber = lastSectionNumber;
    }

    public static PSISection parsePSI(ByteBuffer data) {
        int tableId = data.get() & 0xff;
        int w0 = data.getShort() & 0xffff;
        if ((w0 & 0xC000) != 0x8000)
            throw new RuntimeException("Invalid section data");

        int sectionLength = w0 & 0xfff;

        data.limit(data.position() + sectionLength);

        int specificId = data.getShort() & 0xffff;
        int b0 = data.get() & 0xff;
        int versionNumber = (b0 >> 1) & 0x1f;
        int currentNextIndicator = b0 & 1;

        int sectionNumber = data.get() & 0xff;
        int lastSectionNumber = data.get() & 0xff;

        return new PSISection(tableId, specificId, versionNumber, currentNextIndicator, sectionNumber,
                lastSectionNumber);
    }

    public int getTableId() {
        return tableId;
    }

    public int getSpecificId() {
        return specificId;
    }

    public int getVersionNumber() {
        return versionNumber;
    }

    public int getCurrentNextIndicator() {
        return currentNextIndicator;
    }

    public int getSectionNumber() {
        return sectionNumber;
    }

    public int getLastSectionNumber() {
        return lastSectionNumber;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy