![JAR search and dependency download from the Maven repository](/logo.png)
org.jcodec.containers.mps.index.MTSIndex Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jcodec Show documentation
Show all versions of jcodec Show documentation
Pure Java implementation of video/audio codecs and formats
package org.jcodec.containers.mps.index;
import org.jcodec.common.RunLength.Integer;
import org.jcodec.common.io.NIOUtils;
import java.nio.ByteBuffer;
/**
* This class is part of JCodec ( www.jcodec.org ) This software is distributed
* under FreeBSD License
*
* Represents index for MPEG TS stream, enables demuxers to do precise seek
*
* Note: some values inside the MPSIndex are not expressed in bytes anymore, but
* rather in integral MPEG TS packets.
*
* @author The JCodec project
*
*/
public class MTSIndex {
private MTSProgram[] programs;
public static MTSProgram createMTSProgram(MPSIndex mpsIndex, int target) {
MTSProgram m = new MTSProgram(mpsIndex.pesTokens, mpsIndex.pesStreamIds, mpsIndex.streams, target);
return m;
}
public static class MTSProgram extends MPSIndex {
private int targetGuid;
public MTSProgram(long[] pesTokens, Integer pesStreamIds, MPSStreamIndex[] streams, int targetGuid) {
super(pesTokens, pesStreamIds, streams);
this.targetGuid = targetGuid;
}
public int getTargetGuid() {
return targetGuid;
}
@Override
public void serializeTo(ByteBuffer index) {
index.putInt(targetGuid);
super.serializeTo(index);
}
public static MTSProgram parse(ByteBuffer read) {
int targetGuid = read.getInt();
return createMTSProgram(MPSIndex.parseIndex(read), targetGuid);
}
}
public MTSIndex(MTSProgram[] programs) {
this.programs = programs;
}
public MTSProgram[] getPrograms() {
return programs;
}
public static MTSIndex parse(ByteBuffer buf) {
int numPrograms = buf.getInt();
MTSProgram[] programs = new MTSProgram[numPrograms];
for (int i = 0; i < numPrograms; i++) {
int programDataSize = buf.getInt();
programs[i] = MTSProgram.parse(NIOUtils.read(buf, programDataSize));
}
return new MTSIndex(programs);
}
public int estimateSize() {
int totalSize = 64;
for (MTSProgram mtsProgram : programs) {
totalSize += 4 + mtsProgram.estimateSize();
}
return totalSize;
}
public void serializeTo(ByteBuffer buf) {
buf.putInt(programs.length);
for (MTSProgram mtsAnalyser : programs) {
ByteBuffer dup = buf.duplicate();
NIOUtils.skip(buf, 4);
mtsAnalyser.serializeTo(buf);
dup.putInt(buf.position() - dup.position() - 4);
}
}
public ByteBuffer serialize() {
ByteBuffer bb = ByteBuffer.allocate(estimateSize());
serializeTo(bb);
bb.flip();
return bb;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy