package org.jcodec.containers.mxf.model; import org.jcodec.common.io.NIOUtils; import java.nio.ByteBuffer; import java.nio.ByteOrder; /** * This class is part of JCodec ( www.jcodec.org ) This software is distributed * under FreeBSD License * * @author The JCodec project * */ public class IndexEntries { private byte[] displayOff; private byte[] flags; private long[] fileOff; private byte[] keyFrameOff; public IndexEntries(byte[] displayOff, byte[] keyFrameOff, byte[] flags, long[] fileOff) { this.displayOff = displayOff; this.keyFrameOff = keyFrameOff; this.flags = flags; this.fileOff = fileOff; } public byte[] getDisplayOff() { return displayOff; } public byte[] getFlags() { return flags; } public long[] getFileOff() { return fileOff; } public byte[] getKeyFrameOff() { return keyFrameOff; } public static IndexEntries read(ByteBuffer bb) { bb.order(ByteOrder.BIG_ENDIAN); int n = bb.getInt(); int len = bb.getInt(); int[] temporalOff = new int[n]; byte[] flags = new byte[n]; long[] fileOff = new long[n]; byte[] keyFrameOff = new byte[n]; for (int i = 0; i < n; i++) { temporalOff[i] = i + bb.get(); keyFrameOff[i] = bb.get(); flags[i] = bb.get(); fileOff[i] = bb.getLong(); NIOUtils.skip(bb, len - 11); } byte[] displayOff = new byte[n]; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (temporalOff[j] == i) { displayOff[i] = (byte) (j - i); break; } } } return new IndexEntries(displayOff, keyFrameOff, flags, fileOff); } }