ctbrec/common/src/main/java/org/taktik/mpegts/PSISection.java

90 lines
2.1 KiB
Java

package org.taktik.mpegts;
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 {
private int tableId;
private int specificId;
private int versionNumber;
private int currentNextIndicator;
private int sectionNumber;
private int lastSectionNumber;
/**
* A copy constructor
*
* @param other
*/
public PSISection(PSISection other) {
this(other.tableId, other.specificId, other.versionNumber, other.currentNextIndicator, other.sectionNumber,
other.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 parse(ByteBuffer data) {
int tableId = data.get() & 0xff;
int w0 = data.getShort() & 0xffff;
if ((w0 & 0xC000) != 0x8000) {
return null;
}
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;
}
}