package org.jcodec.containers.mxf.model; import java.util.Iterator; import org.jcodec.common.logging.Logger; import org.jcodec.common.model.Rational; 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 * * @author The JCodec project * */ public class GenericPictureEssenceDescriptor extends FileDescriptor { public static enum LayoutType { FullFrame, SeparateFields, OneField, MixedFields, SegmentedFrame } private byte signalStandard; private LayoutType frameLayout; private int storedWidth; private int storedHeight; private int storedF2Offset; private int sampledWidth; private int sampledHeight; private int sampledXOffset; private int sampledYOffset; private int displayHeight; private int displayWidth; private int displayXOffset; private int displayYOffset; private int displayF2Offset; private Rational aspectRatio; private byte activeFormatDescriptor; private int[] videoLineMap; private byte alphaTransparency; private UL transferCharacteristic; private int imageAlignmentOffset; private int imageStartOffset; private int imageEndOffset; private byte fieldDominance; private UL pictureEssenceCoding; private UL codingEquations; private UL colorPrimaries; public GenericPictureEssenceDescriptor(UL ul) { super(ul); } protected void read(Map<Integer, ByteBuffer> tags) { super.read(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 0x3215: signalStandard = _bb.get(); break; case 0x320c: frameLayout = LayoutType.values()[_bb.get()]; break; case 0x3203: storedWidth = _bb.getInt(); break; case 0x3202: storedHeight = _bb.getInt(); break; case 0x3216: storedF2Offset = _bb.getInt(); break; case 0x3205: sampledWidth = _bb.getInt(); break; case 0x3204: sampledHeight = _bb.getInt(); break; case 0x3206: sampledXOffset = _bb.getInt(); break; case 0x3207: sampledYOffset = _bb.getInt(); break; case 0x3208: displayHeight = _bb.getInt(); break; case 0x3209: displayWidth = _bb.getInt(); break; case 0x320a: displayXOffset = _bb.getInt(); break; case 0x320b: displayYOffset = _bb.getInt(); break; case 0x3217: displayF2Offset = _bb.getInt(); break; case 0x320e: aspectRatio = new Rational(_bb.getInt(), _bb.getInt()); break; case 0x3218: activeFormatDescriptor = _bb.get(); break; case 0x320d: videoLineMap = readInt32Batch(_bb); break; case 0x320f: alphaTransparency = _bb.get(); break; case 0x3210: transferCharacteristic = UL.read(_bb); break; case 0x3211: imageAlignmentOffset = _bb.getInt(); break; case 0x3213: imageStartOffset = _bb.getInt(); break; case 0x3214: imageEndOffset = _bb.getInt(); break; case 0x3212: fieldDominance = _bb.get(); break; case 0x3201: pictureEssenceCoding = UL.read(_bb); break; case 0x321a: codingEquations = UL.read(_bb); break; case 0x3219: colorPrimaries = UL.read(_bb); break; default: Logger.warn(String.format("Unknown tag [ " + ul + "]: %04x", entry.getKey())); continue; } it.remove(); } } public byte getSignalStandard() { return signalStandard; } public LayoutType getFrameLayout() { return frameLayout; } public int getStoredWidth() { return storedWidth; } public int getStoredHeight() { return storedHeight; } public int getStoredF2Offset() { return storedF2Offset; } public int getSampledWidth() { return sampledWidth; } public int getSampledHeight() { return sampledHeight; } public int getSampledXOffset() { return sampledXOffset; } public int getSampledYOffset() { return sampledYOffset; } public int getDisplayHeight() { return displayHeight; } public int getDisplayWidth() { return displayWidth; } public int getDisplayXOffset() { return displayXOffset; } public int getDisplayYOffset() { return displayYOffset; } public int getDisplayF2Offset() { return displayF2Offset; } public Rational getAspectRatio() { return aspectRatio; } public byte getActiveFormatDescriptor() { return activeFormatDescriptor; } public int[] getVideoLineMap() { return videoLineMap; } public byte getAlphaTransparency() { return alphaTransparency; } public UL getTransferCharacteristic() { return transferCharacteristic; } public int getImageAlignmentOffset() { return imageAlignmentOffset; } public int getImageStartOffset() { return imageStartOffset; } public int getImageEndOffset() { return imageEndOffset; } public byte getFieldDominance() { return fieldDominance; } public UL getPictureEssenceCoding() { return pictureEssenceCoding; } public UL getCodingEquations() { return codingEquations; } public UL getColorPrimaries() { return colorPrimaries; } }