package org.jcodec.common.model; import java.nio.ByteBuffer; import java.util.Comparator; /** * This class is part of JCodec ( www.jcodec.org ) This software is distributed * under FreeBSD License * * Encoded stream packet * * @author The JCodec project * */ public class Packet { private ByteBuffer data; private long pts; private long timescale; private long duration; private long frameNo; private boolean keyFrame; private TapeTimecode tapeTimecode; private int displayOrder; public Packet(ByteBuffer data, long pts, long timescale, long duration, long frameNo, boolean keyFrame, TapeTimecode tapeTimecode) { this(data, pts, timescale, duration, frameNo, keyFrame, tapeTimecode, 0); } public Packet(Packet other) { this(other.data, other.pts, other.timescale, other.duration, other.frameNo, other.keyFrame, other.tapeTimecode); this.displayOrder = other.displayOrder; } public Packet(Packet other, ByteBuffer data) { this(data, other.pts, other.timescale, other.duration, other.frameNo, other.keyFrame, other.tapeTimecode); this.displayOrder = other.displayOrder; } public Packet(Packet other, TapeTimecode timecode) { this(other.data, other.pts, other.timescale, other.duration, other.frameNo, other.keyFrame, timecode); this.displayOrder = other.displayOrder; } public Packet(ByteBuffer data, long pts, long timescale, long duration, long frameNo, boolean keyFrame, TapeTimecode tapeTimecode, int displayOrder) { this.data = data; this.pts = pts; this.timescale = timescale; this.duration = duration; this.frameNo = frameNo; this.keyFrame = keyFrame; this.tapeTimecode = tapeTimecode; this.displayOrder = displayOrder; } public ByteBuffer getData() { return data; } public long getPts() { return pts; } public long getTimescale() { return timescale; } public long getDuration() { return duration; } public long getFrameNo() { return frameNo; } public void setTimescale(int timescale) { this.timescale = timescale; } public TapeTimecode getTapeTimecode() { return tapeTimecode; } public void setTapeTimecode(TapeTimecode tapeTimecode) { this.tapeTimecode = tapeTimecode; } public int getDisplayOrder() { return displayOrder; } public void setDisplayOrder(int displayOrder) { this.displayOrder = displayOrder; } public boolean isKeyFrame() { return keyFrame; } public RationalLarge getPtsR() { return RationalLarge.R(pts, timescale); } public double getPtsD() { return ((double) pts) / timescale; } public double getDurationD() { return ((double) duration) / timescale; } public void setData(ByteBuffer data) { this.data = data; } public static final Comparator<Packet> FRAME_ASC = new Comparator<Packet>() { public int compare(Packet o1, Packet o2) { if (o1 == null && o2 == null) return 0; if (o1 == null) return -1; if (o2 == null) return 1; return o1.frameNo < o2.frameNo ? -1 : (o1.frameNo == o2.frameNo ? 0 : 1); } }; }