""" Matroska EBML tag definitions. Generated from specdata.xml using the tags_from_xml() function below. """ __all__ = ['MATROSKA_TAG_DATA'] MATROSKA_TAG_DATA = \ [dict(ebml_id=0x0A45DFA3, name='EBML', cls_name='ElementMaster', parent=None, mandatory=True, multiple=True, webm=True, minver=1, maxver=4), dict(ebml_id=0x0286, name='EBMLVersion', cls_name='ElementUnsigned', parent='EBML', mandatory=True, multiple=False, webm=True, minver=1, maxver=4, default=1), dict(ebml_id=0x02F7, name='EBMLReadVersion', cls_name='ElementUnsigned', parent='EBML', mandatory=True, multiple=False, webm=True, minver=1, maxver=4, default=1), dict(ebml_id=0x02F2, name='EBMLMaxIDLength', cls_name='ElementUnsigned', parent='EBML', mandatory=True, multiple=False, webm=True, minver=1, maxver=4, default=4), dict(ebml_id=0x02F3, name='EBMLMaxSizeLength', cls_name='ElementUnsigned', parent='EBML', mandatory=True, multiple=False, webm=True, minver=1, maxver=4, default=8), dict(ebml_id=0x0282, name='DocType', cls_name='ElementString', parent='EBML', mandatory=True, multiple=False, webm=True, minver=1, maxver=4, default='matroska'), dict(ebml_id=0x0287, name='DocTypeVersion', cls_name='ElementUnsigned', parent='EBML', mandatory=True, multiple=False, webm=True, minver=1, maxver=4, default=1), dict(ebml_id=0x0285, name='DocTypeReadVersion', cls_name='ElementUnsigned', parent='EBML', mandatory=True, multiple=False, webm=True, minver=1, maxver=4, default=1), dict(ebml_id=0x6C, name='Void', cls_name='ElementRaw', parent='*', mandatory=False, multiple=False, webm=True, minver=1, maxver=4), dict(ebml_id=0x3F, name='CRC-32', cls_name='ElementRaw', parent='*', mandatory=False, multiple=False, webm=False, minver=1, maxver=4), dict(ebml_id=0x0B538667, name='SignatureSlot', cls_name='ElementMaster', parent='*', mandatory=False, multiple=True, webm=False, minver=1, maxver=4), dict(ebml_id=0x3E8A, name='SignatureAlgo', cls_name='ElementUnsigned', parent='SignatureSlot', mandatory=False, multiple=False, webm=False, minver=1, maxver=4), dict(ebml_id=0x3E9A, name='SignatureHash', cls_name='ElementUnsigned', parent='SignatureSlot', mandatory=False, multiple=False, webm=False, minver=1, maxver=4), dict(ebml_id=0x3EA5, name='SignaturePublicKey', cls_name='ElementRaw', parent='SignatureSlot', mandatory=False, multiple=False, webm=False, minver=1, maxver=4), dict(ebml_id=0x3EB5, name='Signature', cls_name='ElementRaw', parent='SignatureSlot', mandatory=False, multiple=False, webm=False, minver=1, maxver=4), dict(ebml_id=0x3E5B, name='SignatureElements', cls_name='ElementMaster', parent='SignatureSlot', mandatory=False, multiple=False, webm=False, minver=1, maxver=4), dict(ebml_id=0x3E7B, name='SignatureElementList', cls_name='ElementMaster', parent='SignatureElements', mandatory=False, multiple=True, webm=False, minver=1, maxver=4), dict(ebml_id=0x2532, name='SignedElement', cls_name='ElementRaw', parent='SignatureElementList', mandatory=False, multiple=True, webm=False, minver=1, maxver=4), dict(ebml_id=0x08538067, name='Segment', cls_name='ElementMaster', parent=None, mandatory=True, multiple=True, webm=True, minver=1, maxver=4), dict(ebml_id=0x014D9B74, name='SeekHead', cls_name='ElementMaster', parent='Segment', mandatory=False, multiple=True, webm=True, minver=1, maxver=4), dict(ebml_id=0x0DBB, name='Seek', cls_name='ElementMaster', parent='SeekHead', mandatory=True, multiple=True, webm=True, minver=1, maxver=4), dict(ebml_id=0x13AB, name='SeekID', cls_name='ElementRaw', parent='Seek', mandatory=True, multiple=False, webm=True, minver=1, maxver=4), dict(ebml_id=0x13AC, name='SeekPosition', cls_name='ElementUnsigned', parent='Seek', mandatory=True, multiple=False, webm=True, minver=1, maxver=4), dict(ebml_id=0x0549A966, name='Info', cls_name='ElementMaster', parent='Segment', mandatory=True, multiple=True, webm=True, minver=1, maxver=4), dict(ebml_id=0x33A4, name='SegmentUID', cls_name='ElementRaw', parent='Info', mandatory=False, multiple=False, webm=False, minver=1, maxver=4, min_val=1), dict(ebml_id=0x3384, name='SegmentFilename', cls_name='ElementUnicode', parent='Info', mandatory=False, multiple=False, webm=False, minver=1, maxver=4), dict(ebml_id=0x1CB923, name='PrevUID', cls_name='ElementRaw', parent='Info', mandatory=False, multiple=False, webm=False, minver=1, maxver=4), dict(ebml_id=0x1C83AB, name='PrevFilename', cls_name='ElementUnicode', parent='Info', mandatory=False, multiple=False, webm=False, minver=1, maxver=4), dict(ebml_id=0x1EB923, name='NextUID', cls_name='ElementRaw', parent='Info', mandatory=False, multiple=False, webm=False, minver=1, maxver=4), dict(ebml_id=0x1E83BB, name='NextFilename', cls_name='ElementUnicode', parent='Info', mandatory=False, multiple=False, webm=False, minver=1, maxver=4), dict(ebml_id=0x0444, name='SegmentFamily', cls_name='ElementRaw', parent='Info', mandatory=False, multiple=True, webm=False, minver=1, maxver=4), dict(ebml_id=0x2924, name='ChapterTranslate', cls_name='ElementMaster', parent='Info', mandatory=False, multiple=True, webm=False, minver=1, maxver=4), dict(ebml_id=0x29FC, name='ChapterTranslateEditionUID', cls_name='ElementUnsigned', parent='ChapterTranslate', mandatory=False, multiple=True, webm=False, minver=1, maxver=4), dict(ebml_id=0x29BF, name='ChapterTranslateCodec', cls_name='ElementUnsigned', parent='ChapterTranslate', mandatory=True, multiple=False, webm=False, minver=1, maxver=4), dict(ebml_id=0x29A5, name='ChapterTranslateID', cls_name='ElementRaw', parent='ChapterTranslate', mandatory=True, multiple=False, webm=False, minver=1, maxver=4), dict(ebml_id=0x0AD7B1, name='TimecodeScale', cls_name='ElementUnsigned', parent='Info', mandatory=True, multiple=False, webm=True, minver=1, maxver=4, default=1000000), dict(ebml_id=0x0489, name='Duration', cls_name='ElementFloat', parent='Info', mandatory=False, multiple=False, webm=True, minver=1, maxver=4, min_val=0.0), dict(ebml_id=0x0461, name='DateUTC', cls_name='ElementDate', parent='Info', mandatory=False, multiple=False, webm=True, minver=1, maxver=4), dict(ebml_id=0x3BA9, name='Title', cls_name='ElementUnicode', parent='Info', mandatory=False, multiple=False, webm=False, minver=1, maxver=4), dict(ebml_id=0x0D80, name='MuxingApp', cls_name='ElementUnicode', parent='Info', mandatory=True, multiple=False, webm=True, minver=1, maxver=4), dict(ebml_id=0x1741, name='WritingApp', cls_name='ElementUnicode', parent='Info', mandatory=True, multiple=False, webm=True, minver=1, maxver=4), dict(ebml_id=0x0F43B675, name='Cluster', cls_name='ElementMaster', parent='Segment', mandatory=False, multiple=True, webm=True, minver=1, maxver=4), dict(ebml_id=0x67, name='Timecode', cls_name='ElementUnsigned', parent='Cluster', mandatory=True, multiple=False, webm=True, minver=1, maxver=4), dict(ebml_id=0x1854, name='SilentTracks', cls_name='ElementMaster', parent='Cluster', mandatory=False, multiple=False, webm=False, minver=1, maxver=4), dict(ebml_id=0x18D7, name='SilentTrackNumber', cls_name='ElementUnsigned', parent='SilentTracks', mandatory=False, multiple=True, webm=False, minver=1, maxver=4), dict(ebml_id=0x27, name='Position', cls_name='ElementUnsigned', parent='Cluster', mandatory=False, multiple=False, webm=False, minver=1, maxver=4), dict(ebml_id=0x2B, name='PrevSize', cls_name='ElementUnsigned', parent='Cluster', mandatory=False, multiple=False, webm=True, minver=1, maxver=4), dict(ebml_id=0x23, name='SimpleBlock', cls_name='ElementRaw', parent='Cluster', mandatory=False, multiple=True, webm=True, minver=2, maxver=4), dict(ebml_id=0x20, name='BlockGroup', cls_name='ElementMaster', parent='Cluster', mandatory=False, multiple=True, webm=True, minver=1, maxver=4), dict(ebml_id=0x21, name='Block', cls_name='ElementRaw', parent='BlockGroup', mandatory=True, multiple=False, webm=True, minver=1, maxver=4), dict(ebml_id=0x22, name='BlockVirtual', cls_name='ElementRaw', parent='BlockGroup', mandatory=False, multiple=False, webm=False, minver=1, maxver=4), dict(ebml_id=0x35A1, name='BlockAdditions', cls_name='ElementMaster', parent='BlockGroup', mandatory=False, multiple=False, webm=False, minver=1, maxver=4), dict(ebml_id=0x26, name='BlockMore', cls_name='ElementMaster', parent='BlockAdditions', mandatory=True, multiple=True, webm=False, minver=1, maxver=4), dict(ebml_id=0x6E, name='BlockAddID', cls_name='ElementUnsigned', parent='BlockMore', mandatory=True, multiple=False, webm=False, minver=1, maxver=4, min_val=1, default=1), dict(ebml_id=0x25, name='BlockAdditional', cls_name='ElementRaw', parent='BlockMore', mandatory=True, multiple=False, webm=False, minver=1, maxver=4), dict(ebml_id=0x1B, name='BlockDuration', cls_name='ElementUnsigned', parent='BlockGroup', mandatory=False, multiple=False, webm=True, minver=1, maxver=4), dict(ebml_id=0x7A, name='ReferencePriority', cls_name='ElementUnsigned', parent='BlockGroup', mandatory=True, multiple=False, webm=False, minver=1, maxver=4, default=0), dict(ebml_id=0x7B, name='ReferenceBlock', cls_name='ElementSigned', parent='BlockGroup', mandatory=False, multiple=True, webm=True, minver=1, maxver=4), dict(ebml_id=0x7D, name='ReferenceVirtual', cls_name='ElementSigned', parent='BlockGroup', mandatory=False, multiple=False, webm=False, minver=1, maxver=4), dict(ebml_id=0x24, name='CodecState', cls_name='ElementRaw', parent='BlockGroup', mandatory=False, multiple=False, webm=False, minver=2, maxver=4), dict(ebml_id=0x35A2, name='DiscardPadding', cls_name='ElementSigned', parent='BlockGroup', mandatory=False, multiple=False, webm=True, minver=4, maxver=4), dict(ebml_id=0x0E, name='Slices', cls_name='ElementMaster', parent='BlockGroup', mandatory=False, multiple=False, webm=True, minver=1, maxver=4), dict(ebml_id=0x68, name='TimeSlice', cls_name='ElementMaster', parent='Slices', mandatory=False, multiple=True, webm=True, minver=1, maxver=4), dict(ebml_id=0x4C, name='LaceNumber', cls_name='ElementUnsigned', parent='TimeSlice', mandatory=False, multiple=False, webm=True, minver=1, maxver=4, default=0), dict(ebml_id=0x4D, name='FrameNumber', cls_name='ElementUnsigned', parent='TimeSlice', mandatory=False, multiple=False, webm=True, minver=1, maxver=4, default=0), dict(ebml_id=0x4B, name='BlockAdditionID', cls_name='ElementUnsigned', parent='TimeSlice', mandatory=False, multiple=False, webm=True, minver=1, maxver=4, default=0), dict(ebml_id=0x4E, name='Delay', cls_name='ElementUnsigned', parent='TimeSlice', mandatory=False, multiple=False, webm=True, minver=1, maxver=4, default=0), dict(ebml_id=0x4F, name='SliceDuration', cls_name='ElementUnsigned', parent='TimeSlice', mandatory=False, multiple=False, webm=True, minver=1, maxver=4, default=0), dict(ebml_id=0x48, name='ReferenceFrame', cls_name='ElementMaster', parent='BlockGroup', mandatory=False, multiple=False, webm=False, minver=0, maxver=4), dict(ebml_id=0x49, name='ReferenceOffset', cls_name='ElementUnsigned', parent='ReferenceFrame', mandatory=True, multiple=False, webm=False, minver=0, maxver=4), dict(ebml_id=0x4A, name='ReferenceTimeCode', cls_name='ElementUnsigned', parent='ReferenceFrame', mandatory=True, multiple=False, webm=False, minver=0, maxver=4), dict(ebml_id=0x2F, name='EncryptedBlock', cls_name='ElementRaw', parent='Cluster', mandatory=False, multiple=True, webm=False, minver=1, maxver=4), dict(ebml_id=0x0654AE6B, name='Tracks', cls_name='ElementMaster', parent='Segment', mandatory=False, multiple=True, webm=True, minver=1, maxver=4), dict(ebml_id=0x2E, name='TrackEntry', cls_name='ElementMaster', parent='Tracks', mandatory=True, multiple=True, webm=True, minver=1, maxver=4), dict(ebml_id=0x57, name='TrackNumber', cls_name='ElementUnsigned', parent='TrackEntry', mandatory=True, multiple=False, webm=True, minver=1, maxver=4, min_val=1), dict(ebml_id=0x33C5, name='TrackUID', cls_name='ElementUnsigned', parent='TrackEntry', mandatory=True, multiple=False, webm=True, minver=1, maxver=4, min_val=1), dict(ebml_id=0x03, name='TrackType', cls_name='ElementUnsigned', parent='TrackEntry', mandatory=True, multiple=False, webm=True, minver=1, maxver=4, min_val=1, max_val=254), dict(ebml_id=0x39, name='FlagEnabled', cls_name='ElementBoolean', parent='TrackEntry', mandatory=True, multiple=False, webm=True, minver=2, maxver=4, min_val=0, max_val=1, default=True), dict(ebml_id=0x08, name='FlagDefault', cls_name='ElementBoolean', parent='TrackEntry', mandatory=True, multiple=False, webm=True, minver=1, maxver=4, min_val=0, max_val=1, default=True), dict(ebml_id=0x15AA, name='FlagForced', cls_name='ElementBoolean', parent='TrackEntry', mandatory=True, multiple=False, webm=True, minver=1, maxver=4, min_val=0, max_val=1, default=False), dict(ebml_id=0x1C, name='FlagLacing', cls_name='ElementBoolean', parent='TrackEntry', mandatory=True, multiple=False, webm=True, minver=1, maxver=4, min_val=0, max_val=1, default=True), dict(ebml_id=0x2DE7, name='MinCache', cls_name='ElementUnsigned', parent='TrackEntry', mandatory=True, multiple=False, webm=False, minver=1, maxver=4, default=0), dict(ebml_id=0x2DF8, name='MaxCache', cls_name='ElementUnsigned', parent='TrackEntry', mandatory=False, multiple=False, webm=False, minver=1, maxver=4), dict(ebml_id=0x03E383, name='DefaultDuration', cls_name='ElementUnsigned', parent='TrackEntry', mandatory=False, multiple=False, webm=True, minver=1, maxver=4, min_val=1), dict(ebml_id=0x034E7A, name='DefaultDecodedFieldDuration', cls_name='ElementUnsigned', parent='TrackEntry', mandatory=False, multiple=False, webm=True, minver=4, maxver=4, min_val=1), dict(ebml_id=0x03314F, name='TrackTimecodeScale', cls_name='ElementFloat', parent='TrackEntry', mandatory=True, multiple=False, webm=False, minver=1, maxver=3, min_val=0.0, default=1.0), dict(ebml_id=0x137F, name='TrackOffset', cls_name='ElementSigned', parent='TrackEntry', mandatory=False, multiple=False, webm=False, minver=1, maxver=4, default=0), dict(ebml_id=0x15EE, name='MaxBlockAdditionID', cls_name='ElementUnsigned', parent='TrackEntry', mandatory=True, multiple=False, webm=False, minver=1, maxver=4, default=0), dict(ebml_id=0x136E, name='Name', cls_name='ElementUnicode', parent='TrackEntry', mandatory=False, multiple=False, webm=True, minver=1, maxver=4), dict(ebml_id=0x02B59C, name='Language', cls_name='ElementString', parent='TrackEntry', mandatory=False, multiple=False, webm=True, minver=1, maxver=4, default='eng'), dict(ebml_id=0x06, name='CodecID', cls_name='ElementString', parent='TrackEntry', mandatory=True, multiple=False, webm=True, minver=1, maxver=4), dict(ebml_id=0x23A2, name='CodecPrivate', cls_name='ElementRaw', parent='TrackEntry', mandatory=False, multiple=False, webm=True, minver=1, maxver=4), dict(ebml_id=0x058688, name='CodecName', cls_name='ElementUnicode', parent='TrackEntry', mandatory=False, multiple=False, webm=True, minver=1, maxver=4), dict(ebml_id=0x3446, name='AttachmentLink', cls_name='ElementUnsigned', parent='TrackEntry', mandatory=False, multiple=False, webm=False, minver=1, maxver=4, min_val=1), dict(ebml_id=0x1A9697, name='CodecSettings', cls_name='ElementUnicode', parent='TrackEntry', mandatory=False, multiple=False, webm=False, minver=1, maxver=4), dict(ebml_id=0x1B4040, name='CodecInfoURL', cls_name='ElementString', parent='TrackEntry', mandatory=False, multiple=True, webm=False, minver=1, maxver=4), dict(ebml_id=0x06B240, name='CodecDownloadURL', cls_name='ElementString', parent='TrackEntry', mandatory=False, multiple=True, webm=False, minver=1, maxver=4), dict(ebml_id=0x2A, name='CodecDecodeAll', cls_name='ElementBoolean', parent='TrackEntry', mandatory=True, multiple=False, webm=False, minver=2, maxver=4, min_val=0, max_val=1, default=True), dict(ebml_id=0x2FAB, name='TrackOverlay', cls_name='ElementUnsigned', parent='TrackEntry', mandatory=False, multiple=True, webm=False, minver=1, maxver=4), dict(ebml_id=0x16AA, name='CodecDelay', cls_name='ElementUnsigned', parent='TrackEntry', mandatory=False, multiple=False, webm=True, minver=4, maxver=4, default=0), dict(ebml_id=0x16BB, name='SeekPreRoll', cls_name='ElementUnsigned', parent='TrackEntry', mandatory=True, multiple=False, webm=True, minver=4, maxver=4, default=0), dict(ebml_id=0x2624, name='TrackTranslate', cls_name='ElementMaster', parent='TrackEntry', mandatory=False, multiple=True, webm=False, minver=1, maxver=4), dict(ebml_id=0x26FC, name='TrackTranslateEditionUID', cls_name='ElementUnsigned', parent='TrackTranslate', mandatory=False, multiple=True, webm=False, minver=1, maxver=4), dict(ebml_id=0x26BF, name='TrackTranslateCodec', cls_name='ElementUnsigned', parent='TrackTranslate', mandatory=True, multiple=False, webm=False, minver=1, maxver=4), dict(ebml_id=0x26A5, name='TrackTranslateTrackID', cls_name='ElementRaw', parent='TrackTranslate', mandatory=True, multiple=False, webm=False, minver=1, maxver=4), dict(ebml_id=0x60, name='Video', cls_name='ElementMaster', parent='TrackEntry', mandatory=False, multiple=False, webm=True, minver=1, maxver=4), dict(ebml_id=0x1A, name='FlagInterlaced', cls_name='ElementBoolean', parent='Video', mandatory=True, multiple=False, webm=True, minver=2, maxver=4, min_val=0, max_val=1, default=False), dict(ebml_id=0x13B8, name='StereoMode', cls_name='ElementUnsigned', parent='Video', mandatory=False, multiple=False, webm=True, minver=3, maxver=4, default=0), dict(ebml_id=0x13C0, name='AlphaMode', cls_name='ElementUnsigned', parent='Video', mandatory=False, multiple=False, webm=True, minver=3, maxver=4, default=0), dict(ebml_id=0x13B9, name='OldStereoMode', cls_name='ElementUnsigned', parent='Video', mandatory=False, multiple=False, webm=False, minver=1, maxver=0), dict(ebml_id=0x30, name='PixelWidth', cls_name='ElementUnsigned', parent='Video', mandatory=True, multiple=False, webm=True, minver=1, maxver=4, min_val=1), dict(ebml_id=0x3A, name='PixelHeight', cls_name='ElementUnsigned', parent='Video', mandatory=True, multiple=False, webm=True, minver=1, maxver=4, min_val=1), dict(ebml_id=0x14AA, name='PixelCropBottom', cls_name='ElementUnsigned', parent='Video', mandatory=False, multiple=False, webm=True, minver=1, maxver=4, default=0), dict(ebml_id=0x14BB, name='PixelCropTop', cls_name='ElementUnsigned', parent='Video', mandatory=False, multiple=False, webm=True, minver=1, maxver=4, default=0), dict(ebml_id=0x14CC, name='PixelCropLeft', cls_name='ElementUnsigned', parent='Video', mandatory=False, multiple=False, webm=True, minver=1, maxver=4, default=0), dict(ebml_id=0x14DD, name='PixelCropRight', cls_name='ElementUnsigned', parent='Video', mandatory=False, multiple=False, webm=True, minver=1, maxver=4, default=0), dict(ebml_id=0x14B0, name='DisplayWidth', cls_name='ElementUnsigned', parent='Video', mandatory=False, multiple=False, webm=True, minver=1, maxver=4, min_val=1), dict(ebml_id=0x14BA, name='DisplayHeight', cls_name='ElementUnsigned', parent='Video', mandatory=False, multiple=False, webm=True, minver=1, maxver=4, min_val=1), dict(ebml_id=0x14B2, name='DisplayUnit', cls_name='ElementUnsigned', parent='Video', mandatory=False, multiple=False, webm=True, minver=1, maxver=4, default=0), dict(ebml_id=0x14B3, name='AspectRatioType', cls_name='ElementUnsigned', parent='Video', mandatory=False, multiple=False, webm=True, minver=1, maxver=4, default=0), dict(ebml_id=0x0EB524, name='ColourSpace', cls_name='ElementRaw', parent='Video', mandatory=False, multiple=False, webm=False, minver=1, maxver=4), dict(ebml_id=0x0FB523, name='GammaValue', cls_name='ElementFloat', parent='Video', mandatory=False, multiple=False, webm=False, minver=1, maxver=4, min_val=0.0), dict(ebml_id=0x0383E3, name='FrameRate', cls_name='ElementFloat', parent='Video', mandatory=False, multiple=False, webm=True, minver=1, maxver=4, min_val=0.0), dict(ebml_id=0x61, name='Audio', cls_name='ElementMaster', parent='TrackEntry', mandatory=False, multiple=False, webm=True, minver=1, maxver=4), dict(ebml_id=0x35, name='SamplingFrequency', cls_name='ElementFloat', parent='Audio', mandatory=True, multiple=False, webm=True, minver=1, maxver=4, min_val=0.0, default=8000.0), dict(ebml_id=0x38B5, name='OutputSamplingFrequency', cls_name='ElementFloat', parent='Audio', mandatory=False, multiple=False, webm=True, minver=1, maxver=4, min_val=0.0), dict(ebml_id=0x1F, name='Channels', cls_name='ElementUnsigned', parent='Audio', mandatory=True, multiple=False, webm=True, minver=1, maxver=4, min_val=1, default=1), dict(ebml_id=0x3D7B, name='ChannelPositions', cls_name='ElementRaw', parent='Audio', mandatory=False, multiple=False, webm=False, minver=1, maxver=4), dict(ebml_id=0x2264, name='BitDepth', cls_name='ElementUnsigned', parent='Audio', mandatory=False, multiple=False, webm=True, minver=1, maxver=4, min_val=1), dict(ebml_id=0x62, name='TrackOperation', cls_name='ElementMaster', parent='TrackEntry', mandatory=False, multiple=False, webm=False, minver=3, maxver=4), dict(ebml_id=0x63, name='TrackCombinePlanes', cls_name='ElementMaster', parent='TrackOperation', mandatory=False, multiple=False, webm=False, minver=3, maxver=4), dict(ebml_id=0x64, name='TrackPlane', cls_name='ElementMaster', parent='TrackCombinePlanes', mandatory=True, multiple=True, webm=False, minver=3, maxver=4), dict(ebml_id=0x65, name='TrackPlaneUID', cls_name='ElementUnsigned', parent='TrackPlane', mandatory=True, multiple=False, webm=False, minver=3, maxver=4, min_val=1), dict(ebml_id=0x66, name='TrackPlaneType', cls_name='ElementUnsigned', parent='TrackPlane', mandatory=True, multiple=False, webm=False, minver=3, maxver=4), dict(ebml_id=0x69, name='TrackJoinBlocks', cls_name='ElementMaster', parent='TrackOperation', mandatory=False, multiple=False, webm=False, minver=3, maxver=4), dict(ebml_id=0x6D, name='TrackJoinUID', cls_name='ElementUnsigned', parent='TrackJoinBlocks', mandatory=True, multiple=True, webm=False, minver=3, maxver=4, min_val=1), dict(ebml_id=0x40, name='TrickTrackUID', cls_name='ElementUnsigned', parent='TrackEntry', mandatory=False, multiple=False, webm=True, minver=1, maxver=4), dict(ebml_id=0x41, name='TrickTrackSegmentUID', cls_name='ElementRaw', parent='TrackEntry', mandatory=False, multiple=False, webm=True, minver=1, maxver=4), dict(ebml_id=0x46, name='TrickTrackFlag', cls_name='ElementUnsigned', parent='TrackEntry', mandatory=False, multiple=False, webm=True, minver=1, maxver=4, default=0), dict(ebml_id=0x47, name='TrickMasterTrackUID', cls_name='ElementUnsigned', parent='TrackEntry', mandatory=False, multiple=False, webm=True, minver=1, maxver=4), dict(ebml_id=0x44, name='TrickMasterTrackSegmentUID', cls_name='ElementRaw', parent='TrackEntry', mandatory=False, multiple=False, webm=True, minver=1, maxver=4), dict(ebml_id=0x2D80, name='ContentEncodings', cls_name='ElementMaster', parent='TrackEntry', mandatory=False, multiple=False, webm=False, minver=1, maxver=4), dict(ebml_id=0x2240, name='ContentEncoding', cls_name='ElementMaster', parent='ContentEncodings', mandatory=True, multiple=True, webm=False, minver=1, maxver=4), dict(ebml_id=0x1031, name='ContentEncodingOrder', cls_name='ElementUnsigned', parent='ContentEncoding', mandatory=True, multiple=False, webm=False, minver=1, maxver=4, default=0), dict(ebml_id=0x1032, name='ContentEncodingScope', cls_name='ElementUnsigned', parent='ContentEncoding', mandatory=True, multiple=False, webm=False, minver=1, maxver=4, min_val=1, default=1), dict(ebml_id=0x1033, name='ContentEncodingType', cls_name='ElementUnsigned', parent='ContentEncoding', mandatory=True, multiple=False, webm=False, minver=1, maxver=4, default=0), dict(ebml_id=0x1034, name='ContentCompression', cls_name='ElementMaster', parent='ContentEncoding', mandatory=False, multiple=False, webm=False, minver=1, maxver=4), dict(ebml_id=0x0254, name='ContentCompAlgo', cls_name='ElementUnsigned', parent='ContentCompression', mandatory=True, multiple=False, webm=False, minver=1, maxver=4, default=0), dict(ebml_id=0x0255, name='ContentCompSettings', cls_name='ElementRaw', parent='ContentCompression', mandatory=False, multiple=False, webm=False, minver=1, maxver=4), dict(ebml_id=0x1035, name='ContentEncryption', cls_name='ElementMaster', parent='ContentEncoding', mandatory=False, multiple=False, webm=False, minver=1, maxver=4), dict(ebml_id=0x07E1, name='ContentEncAlgo', cls_name='ElementUnsigned', parent='ContentEncryption', mandatory=False, multiple=False, webm=False, minver=1, maxver=4, default=0), dict(ebml_id=0x07E2, name='ContentEncKeyID', cls_name='ElementRaw', parent='ContentEncryption', mandatory=False, multiple=False, webm=False, minver=1, maxver=4), dict(ebml_id=0x07E3, name='ContentSignature', cls_name='ElementRaw', parent='ContentEncryption', mandatory=False, multiple=False, webm=False, minver=1, maxver=4), dict(ebml_id=0x07E4, name='ContentSigKeyID', cls_name='ElementRaw', parent='ContentEncryption', mandatory=False, multiple=False, webm=False, minver=1, maxver=4), dict(ebml_id=0x07E5, name='ContentSigAlgo', cls_name='ElementUnsigned', parent='ContentEncryption', mandatory=False, multiple=False, webm=False, minver=1, maxver=4, default=0), dict(ebml_id=0x07E6, name='ContentSigHashAlgo', cls_name='ElementUnsigned', parent='ContentEncryption', mandatory=False, multiple=False, webm=False, minver=1, maxver=4, default=0), dict(ebml_id=0x0C53BB6B, name='Cues', cls_name='ElementMaster', parent='Segment', mandatory=False, multiple=False, webm=True, minver=1, maxver=4), dict(ebml_id=0x3B, name='CuePoint', cls_name='ElementMaster', parent='Cues', mandatory=True, multiple=True, webm=True, minver=1, maxver=4), dict(ebml_id=0x33, name='CueTime', cls_name='ElementUnsigned', parent='CuePoint', mandatory=True, multiple=False, webm=True, minver=1, maxver=4), dict(ebml_id=0x37, name='CueTrackPositions', cls_name='ElementMaster', parent='CuePoint', mandatory=True, multiple=True, webm=True, minver=1, maxver=4), dict(ebml_id=0x77, name='CueTrack', cls_name='ElementUnsigned', parent='CueTrackPositions', mandatory=True, multiple=False, webm=True, minver=1, maxver=4, min_val=1), dict(ebml_id=0x71, name='CueClusterPosition', cls_name='ElementUnsigned', parent='CueTrackPositions', mandatory=True, multiple=False, webm=True, minver=1, maxver=4), dict(ebml_id=0x70, name='CueRelativePosition', cls_name='ElementUnsigned', parent='CueTrackPositions', mandatory=False, multiple=False, webm=False, minver=4, maxver=4), dict(ebml_id=0x32, name='CueDuration', cls_name='ElementUnsigned', parent='CueTrackPositions', mandatory=False, multiple=False, webm=False, minver=4, maxver=4), dict(ebml_id=0x1378, name='CueBlockNumber', cls_name='ElementUnsigned', parent='CueTrackPositions', mandatory=False, multiple=False, webm=True, minver=1, maxver=4, min_val=1, default=1), dict(ebml_id=0x6A, name='CueCodecState', cls_name='ElementUnsigned', parent='CueTrackPositions', mandatory=False, multiple=False, webm=False, minver=2, maxver=4, default=0), dict(ebml_id=0x5B, name='CueReference', cls_name='ElementMaster', parent='CueTrackPositions', mandatory=False, multiple=True, webm=False, minver=2, maxver=4), dict(ebml_id=0x16, name='CueRefTime', cls_name='ElementUnsigned', parent='CueReference', mandatory=True, multiple=False, webm=False, minver=2, maxver=4), dict(ebml_id=0x17, name='CueRefCluster', cls_name='ElementUnsigned', parent='CueReference', mandatory=True, multiple=False, webm=False, minver=1, maxver=4), dict(ebml_id=0x135F, name='CueRefNumber', cls_name='ElementUnsigned', parent='CueReference', mandatory=False, multiple=False, webm=False, minver=1, maxver=4, min_val=1, default=1), dict(ebml_id=0x6B, name='CueRefCodecState', cls_name='ElementUnsigned', parent='CueReference', mandatory=False, multiple=False, webm=False, minver=1, maxver=4, default=0), dict(ebml_id=0x0941A469, name='Attachments', cls_name='ElementMaster', parent='Segment', mandatory=False, multiple=False, webm=False, minver=1, maxver=4), dict(ebml_id=0x21A7, name='AttachedFile', cls_name='ElementMaster', parent='Attachments', mandatory=True, multiple=True, webm=False, minver=1, maxver=4), dict(ebml_id=0x067E, name='FileDescription', cls_name='ElementUnicode', parent='AttachedFile', mandatory=False, multiple=False, webm=False, minver=1, maxver=4), dict(ebml_id=0x066E, name='FileName', cls_name='ElementUnicode', parent='AttachedFile', mandatory=True, multiple=False, webm=False, minver=1, maxver=4), dict(ebml_id=0x0660, name='FileMimeType', cls_name='ElementString', parent='AttachedFile', mandatory=True, multiple=False, webm=False, minver=1, maxver=4), dict(ebml_id=0x065C, name='FileData', cls_name='ElementRaw', parent='AttachedFile', mandatory=True, multiple=False, webm=False, minver=1, maxver=4), dict(ebml_id=0x06AE, name='FileUID', cls_name='ElementUnsigned', parent='AttachedFile', mandatory=True, multiple=False, webm=False, minver=1, maxver=4, min_val=1), dict(ebml_id=0x0675, name='FileReferral', cls_name='ElementRaw', parent='AttachedFile', mandatory=False, multiple=False, webm=False, minver=1, maxver=4), dict(ebml_id=0x0661, name='FileUsedStartTime', cls_name='ElementUnsigned', parent='AttachedFile', mandatory=False, multiple=False, webm=True, minver=1, maxver=4), dict(ebml_id=0x0662, name='FileUsedEndTime', cls_name='ElementUnsigned', parent='AttachedFile', mandatory=False, multiple=False, webm=True, minver=1, maxver=4), dict(ebml_id=0x43A770, name='Chapters', cls_name='ElementMaster', parent='Segment', mandatory=False, multiple=False, webm=True, minver=1, maxver=4), dict(ebml_id=0x05B9, name='EditionEntry', cls_name='ElementMaster', parent='Chapters', mandatory=True, multiple=True, webm=True, minver=1, maxver=4), dict(ebml_id=0x05BC, name='EditionUID', cls_name='ElementUnsigned', parent='EditionEntry', mandatory=False, multiple=False, webm=False, minver=1, maxver=4, min_val=1), dict(ebml_id=0x05BD, name='EditionFlagHidden', cls_name='ElementBoolean', parent='EditionEntry', mandatory=True, multiple=False, webm=False, minver=1, maxver=4, min_val=0, max_val=1, default=False), dict(ebml_id=0x05DB, name='EditionFlagDefault', cls_name='ElementBoolean', parent='EditionEntry', mandatory=True, multiple=False, webm=False, minver=1, maxver=4, min_val=0, max_val=1, default=False), dict(ebml_id=0x05DD, name='EditionFlagOrdered', cls_name='ElementBoolean', parent='EditionEntry', mandatory=False, multiple=False, webm=False, minver=1, maxver=4, min_val=0, max_val=1, default=False), dict(ebml_id=0x36, name='ChapterAtom', cls_name='ElementMaster', parent='EditionEntry', mandatory=True, multiple=True, webm=True, minver=1, maxver=4, recursive=True), dict(ebml_id=0x33C4, name='ChapterUID', cls_name='ElementUnsigned', parent='ChapterAtom', mandatory=True, multiple=False, webm=True, minver=1, maxver=4, min_val=1), dict(ebml_id=0x1654, name='ChapterStringUID', cls_name='ElementUnicode', parent='ChapterAtom', mandatory=False, multiple=False, webm=True, minver=3, maxver=4), dict(ebml_id=0x11, name='ChapterTimeStart', cls_name='ElementUnsigned', parent='ChapterAtom', mandatory=True, multiple=False, webm=True, minver=1, maxver=4), dict(ebml_id=0x12, name='ChapterTimeEnd', cls_name='ElementUnsigned', parent='ChapterAtom', mandatory=False, multiple=False, webm=False, minver=1, maxver=4), dict(ebml_id=0x18, name='ChapterFlagHidden', cls_name='ElementBoolean', parent='ChapterAtom', mandatory=True, multiple=False, webm=False, minver=1, maxver=4, min_val=0, max_val=1, default=False), dict(ebml_id=0x0598, name='ChapterFlagEnabled', cls_name='ElementBoolean', parent='ChapterAtom', mandatory=True, multiple=False, webm=False, minver=1, maxver=4, min_val=0, max_val=1, default=True), dict(ebml_id=0x2E67, name='ChapterSegmentUID', cls_name='ElementRaw', parent='ChapterAtom', mandatory=False, multiple=False, webm=False, minver=1, maxver=4, min_val=1), dict(ebml_id=0x2EBC, name='ChapterSegmentEditionUID', cls_name='ElementUnsigned', parent='ChapterAtom', mandatory=False, multiple=False, webm=False, minver=1, maxver=4, min_val=1), dict(ebml_id=0x23C3, name='ChapterPhysicalEquiv', cls_name='ElementUnsigned', parent='ChapterAtom', mandatory=False, multiple=False, webm=False, minver=1, maxver=4), dict(ebml_id=0x0F, name='ChapterTrack', cls_name='ElementMaster', parent='ChapterAtom', mandatory=False, multiple=False, webm=False, minver=1, maxver=4), dict(ebml_id=0x09, name='ChapterTrackNumber', cls_name='ElementUnsigned', parent='ChapterTrack', mandatory=True, multiple=True, webm=False, minver=1, maxver=4, min_val=1), dict(ebml_id=0x00, name='ChapterDisplay', cls_name='ElementMaster', parent='ChapterAtom', mandatory=False, multiple=True, webm=True, minver=1, maxver=4), dict(ebml_id=0x05, name='ChapString', cls_name='ElementUnicode', parent='ChapterDisplay', mandatory=True, multiple=False, webm=True, minver=1, maxver=4), dict(ebml_id=0x037C, name='ChapLanguage', cls_name='ElementString', parent='ChapterDisplay', mandatory=True, multiple=True, webm=True, minver=1, maxver=4, default='eng'), dict(ebml_id=0x037E, name='ChapCountry', cls_name='ElementString', parent='ChapterDisplay', mandatory=False, multiple=True, webm=False, minver=1, maxver=4), dict(ebml_id=0x2944, name='ChapProcess', cls_name='ElementMaster', parent='ChapterAtom', mandatory=False, multiple=True, webm=False, minver=1, maxver=4), dict(ebml_id=0x2955, name='ChapProcessCodecID', cls_name='ElementUnsigned', parent='ChapProcess', mandatory=True, multiple=False, webm=False, minver=1, maxver=4, default=0), dict(ebml_id=0x050D, name='ChapProcessPrivate', cls_name='ElementRaw', parent='ChapProcess', mandatory=False, multiple=False, webm=False, minver=1, maxver=4), dict(ebml_id=0x2911, name='ChapProcessCommand', cls_name='ElementMaster', parent='ChapProcess', mandatory=False, multiple=True, webm=False, minver=1, maxver=4), dict(ebml_id=0x2922, name='ChapProcessTime', cls_name='ElementUnsigned', parent='ChapProcessCommand', mandatory=True, multiple=False, webm=False, minver=1, maxver=4), dict(ebml_id=0x2933, name='ChapProcessData', cls_name='ElementRaw', parent='ChapProcessCommand', mandatory=True, multiple=False, webm=False, minver=1, maxver=4), dict(ebml_id=0x0254C367, name='Tags', cls_name='ElementMaster', parent='Segment', mandatory=False, multiple=True, webm=False, minver=1, maxver=4), dict(ebml_id=0x3373, name='Tag', cls_name='ElementMaster', parent='Tags', mandatory=True, multiple=True, webm=False, minver=1, maxver=4), dict(ebml_id=0x23C0, name='Targets', cls_name='ElementMaster', parent='Tag', mandatory=True, multiple=False, webm=False, minver=1, maxver=4), dict(ebml_id=0x28CA, name='TargetTypeValue', cls_name='ElementUnsigned', parent='Targets', mandatory=False, multiple=False, webm=False, minver=1, maxver=4, default=50), dict(ebml_id=0x23CA, name='TargetType', cls_name='ElementString', parent='Targets', mandatory=False, multiple=False, webm=False, minver=1, maxver=4), dict(ebml_id=0x23C5, name='TagTrackUID', cls_name='ElementUnsigned', parent='Targets', mandatory=False, multiple=True, webm=False, minver=1, maxver=4, default=0), dict(ebml_id=0x23C9, name='TagEditionUID', cls_name='ElementUnsigned', parent='Targets', mandatory=False, multiple=True, webm=False, minver=1, maxver=4, default=0), dict(ebml_id=0x23C4, name='TagChapterUID', cls_name='ElementUnsigned', parent='Targets', mandatory=False, multiple=True, webm=False, minver=1, maxver=4, default=0), dict(ebml_id=0x23C6, name='TagAttachmentUID', cls_name='ElementUnsigned', parent='Targets', mandatory=False, multiple=True, webm=False, minver=1, maxver=4, default=0), dict(ebml_id=0x27C8, name='SimpleTag', cls_name='ElementMaster', parent='Tag', mandatory=True, multiple=True, webm=False, minver=1, maxver=4, recursive=True), dict(ebml_id=0x05A3, name='TagName', cls_name='ElementUnicode', parent='SimpleTag', mandatory=True, multiple=False, webm=False, minver=1, maxver=4), dict(ebml_id=0x047A, name='TagLanguage', cls_name='ElementString', parent='SimpleTag', mandatory=True, multiple=False, webm=False, minver=1, maxver=4, default='und'), dict(ebml_id=0x0484, name='TagDefault', cls_name='ElementBoolean', parent='SimpleTag', mandatory=True, multiple=False, webm=False, minver=1, maxver=4, min_val=0, max_val=1, default=True), dict(ebml_id=0x0487, name='TagString', cls_name='ElementUnicode', parent='SimpleTag', mandatory=False, multiple=False, webm=False, minver=1, maxver=4), dict(ebml_id=0x0485, name='TagBinary', cls_name='ElementRaw', parent='SimpleTag', mandatory=False, multiple=False, webm=False, minver=1, maxver=4)] def tags_from_xml(xml): """Generate tag definitions from Matroska's specdata.xml. The actual Tag dictionary MATROSKA_TAGS is modified from this function's output. Args: + xml: A bytes object containing the contents of specdata.xml. Returns: A string of definitions. """ #pylint: disable=too-many-statements,too-many-branches,too-many-locals from . import DecodeError from lxml import etree as ET from textwrap import fill import re tree = ET.fromstring(xml) if tree.tag.lower() != "table": raise DecodeError("Unrecognized specdata.xml format") class_dict = {'master' : 'ElementMaster', 'uinteger' : 'ElementUnsigned', 'integer' : 'ElementSigned', 'string' : 'ElementString', 'utf-8' : 'ElementUnicode', 'float' : 'ElementFloat', 'date' : 'ElementDate', 'binary' : 'ElementRaw', 'boolean' : 'ElementBoolean'} type_dict = {'uinteger' : int, 'integer' : int, 'string' : str, 'utf-8' : str, 'float' : float, 'boolean' : bool, 'binary' : int} # For SegmentUID ancestors = [] ret = "" for element in tree: if element.tag is ET.Comment or element.tag is ET.PI: continue attrib = element.attrib try: tag_id = attrib['id'] tag_type = attrib['type'] tag_name = attrib['name'] tag_level = int(attrib['level']) tag_mandatory = bool(int(attrib.get('mandatory', '0'))) tag_multiple = bool(int(attrib.get('multiple', '0'))) tag_range = attrib.get('range') tag_default = attrib.get('default') tag_minver = int(attrib.get('minver', '1')) tag_maxver = int(attrib.get('maxver', '4')) tag_webm = bool(int(attrib.get('webm', '1'))) tag_recursive = bool(int(attrib.get('recursive', '0'))) except AttributeError: raise DecodeError("Unrecognized specdata.xml entry {!r}" .format(element.tag)) ebml_id = id_from_spec(tag_id) if tag_type.lower() not in class_dict: raise DecodeError("Unrecognized specdata.xml type {} in {!r}" .format(tag_type, element)) # Handle parent if tag_level <= 0: ancestors = [] if tag_level < 0: # global parent = "*" if tag_level <= len(ancestors): ancestors = ancestors[:tag_level] if tag_level > 0: parent = ancestors[-1] elif tag_level == 0: parent = None ancestors.append(tag_name) extra_items = [] # Handle number ranges if tag_range is not None: min_val = None max_val = None strict = True match = re.match(r'>\D*(\d+)', tag_range) if match is not None: min_val = match.group(1) match = re.match(r'(\d+)\D*-\D*(\d+)', tag_range) if match is not None: strict = False min_val = match.group(1) max_val = match.group(2) if tag_range.lower() == 'not 0': min_val = 0 if min_val is not None: min_val = type_dict[tag_type.lower()](min_val) if isinstance(min_val, int) and strict: min_val += 1 extra_items.append("min_val={!r}".format(min_val)) if max_val is not None: max_val = type_dict[tag_type.lower()](max_val) if isinstance(max_val, int) and strict: max_val -= 1 extra_items.append("max_val={!r}".format(max_val)) # Detect booleans if min_val == 0 and max_val == 1: tag_type = 'boolean' if tag_default is not None: tag_default = int(tag_default) if tag_default is not None: try: tag_default = type_dict[tag_type.lower()](tag_default) extra_items.append("default={!r}".format(tag_default)) except ValueError: tag_default = None if tag_recursive: extra_items.append("recursive=True") cls_name = class_dict[tag_type.lower()] items = ['ebml_id={}'.format(ebml_id), 'name={!r}'.format(tag_name), 'cls_name={!r}'.format(cls_name), 'parent={!r}'.format(parent), 'mandatory={!r}'.format(tag_mandatory), 'multiple={!r}'.format(tag_multiple), 'webm={!r}'.format(tag_webm), 'minver={!r}'.format(tag_minver), 'maxver={!r}'.format(tag_maxver)] items += extra_items ret += fill("dict(" + ", ".join(items) + "),", width=80, initial_indent=" "*5, subsequent_indent=" "*10, break_long_words=False, break_on_hyphens=False) + "\n" return ret def id_from_spec(spec): """Translate '0x1A45DFA3' into '0x0A45DFA3'. Args: + spec: A string containing the hex representation of the encoded EBML element ID. Returns: A string containing the hex representation of the decoded EBML element ID. """ from .utility import decode_var_int num = int(spec, 16) size = 0 num2 = num while num2: num2 >>= 8 size += 1 bytestring = num.to_bytes(size, byteorder='big') ret = "{:X}".format(decode_var_int(bytestring)[0]) if len(ret) % 2: ret = "0" + ret return "0x" + ret