package org.jcodec.containers.mkv.elements; import org.jcodec.containers.mkv.Type; import org.jcodec.containers.mkv.ebml.Element; import org.jcodec.containers.mkv.ebml.MasterElement; import org.jcodec.containers.mkv.ebml.UnsignedIntegerElement; public class TrackEntryElement extends MasterElement { public static enum TrackType { VIDEO, AUDIO, COMPLEX, LOGO, SUBTITLE, BUTTON, CONTROL; } private TrackType type; public TrackEntryElement(byte[] type) { super(type); } @Override public void addChildElement(Element elem) { if (elem == null) return; if (elem.type.equals(Type.TrackType)) { // 0x01 track is a video track // 0x02 track is an audio track // 0x03 track is a complex track, i.e. a combined video and audio track // 0x10 track is a logo track // 0x11 track is a subtitle track // 0x12 track is a button track // 0x20 track is a control track UnsignedIntegerElement trackType = (UnsignedIntegerElement) elem; int val = (int) trackType.get(); switch (val) { case 0x01: type = TrackType.VIDEO; break; case 0x02: type = TrackType.AUDIO; break; case 0x03: type = TrackType.COMPLEX; break; case 0x10: type = TrackType.LOGO; break; case 0x11: type = TrackType.SUBTITLE; break; case 0x12: type = TrackType.BUTTON; break; case 0x20: type = TrackType.CONTROL; break; } } else if (elem.type.equals(Type.ContentCompAlgo)) { // 0 zlib // 1 bzlib // 2 lzo1x // 3 header striping UnsignedIntegerElement trackType = (UnsignedIntegerElement) elem; int val = (int) trackType.get(); String[] algs = {"zlib", "bzlib", "lzo1x", "headerstripping"}; System.err.println("Track content compression algorithm: "+ ((0 <= val && val <= 3) ? algs[val] : "")); } super.addChildElement(elem); } }