90 lines
2.1 KiB
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;
|
|
}
|
|
} |