Add function to determine Mkv element level by ID
Does not cover all element IDs but should be more than sufficient for its purpose.
This commit is contained in:
parent
fdb23e3cd0
commit
618efe3f96
|
@ -315,5 +315,156 @@ const char *matroskaIdName(uint32 matroskaId)
|
|||
}
|
||||
}
|
||||
|
||||
/*!
|
||||
* \brief Returns the level at which elements with the specified \a matroskaId are supposed
|
||||
* to occur in a Matroska file.
|
||||
*/
|
||||
MatroskaElementLevel matroskaIdLevel(uint32 matroskaId)
|
||||
{
|
||||
using namespace EbmlIds;
|
||||
using namespace MatroskaIds;
|
||||
switch(matroskaId) {
|
||||
case Header:
|
||||
case Segment:
|
||||
return MatroskaElementLevel::TopLevel;
|
||||
case SeekHead:
|
||||
case SegmentInfo:
|
||||
case Cluster:
|
||||
case Tracks:
|
||||
case Cues:
|
||||
case Attachments:
|
||||
case Chapters:
|
||||
case Tags:
|
||||
return MatroskaElementLevel::Level1;
|
||||
case Seek:
|
||||
case SegmentUID:
|
||||
case SegmentFileName:
|
||||
case PrevUID:
|
||||
case PrevFileName:
|
||||
case NexUID:
|
||||
case NextFileName:
|
||||
case SegmentFamily:
|
||||
case ChapterTranslate:
|
||||
case TimeCodeScale:
|
||||
case Duration:
|
||||
case DateUTC:
|
||||
case Title:
|
||||
case MuxingApp:
|
||||
case WrittingApp:
|
||||
case Timecode:
|
||||
case SilentTracks:
|
||||
case Position:
|
||||
case PrevSize:
|
||||
case SimpleBlock:
|
||||
case BlockGroup:
|
||||
case EncryptedBlock:
|
||||
case TrackEntry:
|
||||
case CuePoint:
|
||||
case AttachedFile:
|
||||
case EditionEntry:
|
||||
case Tag:
|
||||
return MatroskaElementLevel::Level2;
|
||||
case SeekID:
|
||||
case SeekPosition:
|
||||
case ChapterTranslateEditionUID:
|
||||
case ChapterTranslateCodec:
|
||||
case ChapterTranslateID:
|
||||
case SilentTrackNumber:
|
||||
case BlockVirtual:
|
||||
case BlockAdditions:
|
||||
case BlockDuration:
|
||||
case ReferencePriority:
|
||||
case ReferenceBlock:
|
||||
case ReferenceVirtual:
|
||||
case CodecState:
|
||||
case DiscardPadding:
|
||||
case Slices:
|
||||
case TrackNumber:
|
||||
case TrackUID:
|
||||
case TrackType:
|
||||
case TrackFlagEnabled:
|
||||
case TrackFlagDefault:
|
||||
case TrackFlagForced:
|
||||
case TrackFlagLacing:
|
||||
case MinCache:
|
||||
case MaxCache:
|
||||
case DefaultDuration:
|
||||
case DefaultDecodedFieldDuration:
|
||||
case TrackTimeCodeScale:
|
||||
case TrackOffset:
|
||||
case MaxBlockAdditionId:
|
||||
case TrackName:
|
||||
case TrackLanguage:
|
||||
case CodecID:
|
||||
case CodecPrivate:
|
||||
case CodecName:
|
||||
case AttachmentLink:
|
||||
case CodecSettings:
|
||||
case CodecInfoUrl:
|
||||
case CodecDownloadUrl:
|
||||
case CodecDecodeAll:
|
||||
case TrackOverlay:
|
||||
case CodecDelay:
|
||||
case SeekPreRoll:
|
||||
case TrackTranslate:
|
||||
case TrackVideo:
|
||||
case TrackAudio:
|
||||
case ContentEncodings:
|
||||
case CueTime:
|
||||
case CueTrackPositions:
|
||||
case FileDescription:
|
||||
case FileName:
|
||||
case FileMimeType:
|
||||
case FileData:
|
||||
case FileUID:
|
||||
case FileReferral:
|
||||
case FileUsedStartTime:
|
||||
case FileUsedEndTime:
|
||||
case EditionUID:
|
||||
case EditionFlagHidden:
|
||||
case EditionFlagDefault:
|
||||
case EditionFlagOrdered:
|
||||
case Targets:
|
||||
return MatroskaElementLevel::Level3;
|
||||
case BlockMore:
|
||||
case TimeSlice:
|
||||
case ContentEncoding:
|
||||
case CueTrack:
|
||||
case CueClusterPosition:
|
||||
case CueRelativePosition:
|
||||
case CueDuration:
|
||||
case CueBlockNumber:
|
||||
case CueCodecState:
|
||||
case CueReference:
|
||||
case TargetTypeValue:
|
||||
case TargetType:
|
||||
case TagTrackUID:
|
||||
case TagEditionUID:
|
||||
case TagChapterUID:
|
||||
case TagAttachmentUID:
|
||||
return MatroskaElementLevel::Level4;
|
||||
case BlockAddID:
|
||||
case BlockAdditional:
|
||||
case LaceNumber:
|
||||
case FrameNumber:
|
||||
case BlockAdditionID:
|
||||
case Delay:
|
||||
case SliceDuration:
|
||||
case ReferenceFrame:
|
||||
case ReferenceOffset:
|
||||
case ReferenceTimeCode:
|
||||
case CueRefTime:
|
||||
case CueRefCluster:
|
||||
case CueRefNumber:
|
||||
case CueRefCodecState:
|
||||
return MatroskaElementLevel::Level5;
|
||||
case Void:
|
||||
case Crc32:
|
||||
return MatroskaElementLevel::Global;
|
||||
default:
|
||||
return MatroskaElementLevel::Unknown;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -489,7 +489,51 @@ enum KnownValues {
|
|||
|
||||
}
|
||||
|
||||
enum class MatroskaElementLevel : byte {
|
||||
TopLevel = 0x0,
|
||||
Level1,
|
||||
Level2,
|
||||
Level3,
|
||||
Level4,
|
||||
Level5,
|
||||
Level6,
|
||||
Global = 0xFE,
|
||||
Unknown = 0xFF,
|
||||
};
|
||||
|
||||
constexpr bool operator>(MatroskaElementLevel lhs, MatroskaElementLevel rhs)
|
||||
{
|
||||
return static_cast<byte>(lhs) < static_cast<byte>(MatroskaElementLevel::Global)
|
||||
&& static_cast<byte>(rhs) < static_cast<byte>(MatroskaElementLevel::Global)
|
||||
&& static_cast<byte>(lhs) > static_cast<byte>(rhs);
|
||||
}
|
||||
|
||||
constexpr bool operator>(byte lhs, MatroskaElementLevel rhs)
|
||||
{
|
||||
return lhs < static_cast<byte>(MatroskaElementLevel::Global)
|
||||
&& static_cast<byte>(rhs) < static_cast<byte>(MatroskaElementLevel::Global)
|
||||
&& static_cast<byte>(lhs) > static_cast<byte>(rhs);
|
||||
}
|
||||
|
||||
constexpr bool operator<(MatroskaElementLevel lhs, MatroskaElementLevel rhs)
|
||||
{
|
||||
return static_cast<byte>(lhs) < static_cast<byte>(MatroskaElementLevel::Global)
|
||||
&& static_cast<byte>(rhs) < static_cast<byte>(MatroskaElementLevel::Global)
|
||||
&& static_cast<byte>(lhs) < static_cast<byte>(rhs);
|
||||
}
|
||||
|
||||
constexpr bool operator>=(MatroskaElementLevel lhs, MatroskaElementLevel rhs)
|
||||
{
|
||||
return lhs == rhs || lhs > rhs;
|
||||
}
|
||||
|
||||
constexpr bool operator<=(MatroskaElementLevel lhs, MatroskaElementLevel rhs)
|
||||
{
|
||||
return lhs == rhs || lhs < rhs;
|
||||
}
|
||||
|
||||
TAG_PARSER_EXPORT const char *matroskaIdName(uint32 matroskaId);
|
||||
TAG_PARSER_EXPORT MatroskaElementLevel matroskaIdLevel(uint32 matroskaId);
|
||||
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue