package org.jcodec.containers.mxf.model; import java.util.Iterator; import org.jcodec.common.logging.Logger; import java.nio.ByteBuffer; import java.util.Map; import java.util.Map.Entry; /** * This class is part of JCodec ( www.jcodec.org ) This software is distributed * under FreeBSD License * * MXF demuxer, Index segment structure. Contains information about frame * offsets. Used for rapid random positioning within the movie. * * @author The JCodec project * */ public class IndexSegment extends MXFInterchangeObject { private IndexEntries ie; private int editUnitByteCount; private DeltaEntries deltaEntries; private int indexSID; private int bodySID; private int indexEditRateNum; private int indexEditRateDen; private long indexStartPosition; private long indexDuration; private UL instanceUID; private int sliceCount; private int posTableCount; public IndexSegment(UL ul) { super(ul); } @Override protected void read(Map<Integer, ByteBuffer> tags) { for (Iterator<Entry<Integer, ByteBuffer>> it = tags.entrySet().iterator(); it.hasNext();) { Entry<Integer, ByteBuffer> entry = it.next(); ByteBuffer _bb = entry.getValue(); switch (entry.getKey()) { case 0x3c0a: instanceUID = UL.read(_bb); break; case 0x3f05: editUnitByteCount = _bb.getInt(); break; case 0x3f06: indexSID = _bb.getInt(); break; case 0x3f07: bodySID = _bb.getInt(); break; case 0x3f08: sliceCount = _bb.get() & 0xff; break; case 0x3f09: deltaEntries = DeltaEntries.read(_bb); break; case 0x3f0a: ie = IndexEntries.read(_bb); break; case 0x3f0b: indexEditRateNum = _bb.getInt(); indexEditRateDen = _bb.getInt(); break; case 0x3f0c: indexStartPosition = _bb.getLong(); break; case 0x3f0d: indexDuration = _bb.getLong(); break; case 0x3f0e: posTableCount = _bb.get() & 0xff; break; default: Logger.warn(String.format("Unknown tag [" + ul + "]: %04x", entry.getKey())); continue; } it.remove(); } } public IndexEntries getIe() { return ie; } public int getEditUnitByteCount() { return editUnitByteCount; } public DeltaEntries getDeltaEntries() { return deltaEntries; } public int getIndexSID() { return indexSID; } public int getBodySID() { return bodySID; } public int getIndexEditRateNum() { return indexEditRateNum; } public int getIndexEditRateDen() { return indexEditRateDen; } public long getIndexStartPosition() { return indexStartPosition; } public long getIndexDuration() { return indexDuration; } public UL getInstanceUID() { return instanceUID; } public int getSliceCount() { return sliceCount; } public int getPosTableCount() { return posTableCount; } }