using System.Runtime.InteropServices; namespace SabreTools.Data.Models.DVD { /// [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] public sealed class VideoTitleSetIFO { /// /// "DVDVIDEO-VTS" /// [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 12)] public string Signature = string.Empty; /// /// Last sector of title set (last sector of BUP) /// public uint LastTitleSetSector; /// /// Last sector of IFO /// public uint LastIFOSector; /// /// Version number /// - Byte 0 - Reserved, should be 0 /// - Byte 1, Bits 7-4 - Major version number /// - Byte 1, Bits 3-0 - Minor version number /// public ushort VersionNumber; /// /// VTS category /// /// 0=unspecified, 1=Karaoke public uint VMGCategory; /// /// Number of volumes /// public ushort NumberOfVolumes; /// /// Volume number /// public ushort VolumeNumber; /// /// Side ID /// public byte SideID; /// /// Number of title sets /// public ushort NumberOfTitleSets; /// /// Provider ID /// [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)] public byte[] ProviderID = new byte[32]; /// /// VMG POS /// public ulong VMGPOS; /// /// End byte address of VTS_MAT /// public uint InformationManagementTableEndByteAddress; /// /// Start address of FP_PGC (First Play program chain) /// public uint FirstPlayProgramChainStartAddress; /// /// Start sector of Menu VOB /// public uint MenuVOBStartSector; /// /// Start sector of Title VOB /// public uint TitleVOBStartSector; /// /// Sector pointer to VTS_PTT_SRPT (table of Titles and Chapters) /// public uint TableOfTitlesAndChaptersSectorPointer; /// /// Sector pointer to VTS_PGCI (Title Program Chain table) /// public uint TitleProgramChainTableSectorPointer; /// /// Sector pointer to VTSM_PGCI_UT (Menu Program Chain table) /// public uint MenuProgramChainTableSectorPointer; /// /// Sector pointer to VTS_TMAPTI (time map) /// public uint TimeMapSectorPointer; /// /// Sector pointer to VTSM_C_ADT (menu cell address table) /// public uint MenuCellAddressTableSectorPointer; /// /// Sector pointer to VTSM_VOBU_ADMAP (menu VOBU address map) /// public uint MenuVOBUAddressMapSectorPointer; /// /// Sector pointer to VTS_C_ADT (title set cell address table) /// public uint TitleSetCellAddressTableSectorPointer; /// /// Sector pointer to VTS_VOBU_ADMAP (title set VOBU address map) /// public uint TitleSetVOBUAddressMapSectorPointer; /// /// Video attributes of VTSM_VOBS /// public ushort VideoAttributes; /// /// Number of audio streams in VTSM_VOBS /// public ushort NumberOfAudioStreams; /// /// Audio attributes of VTSM_VOBS /// [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] public ulong[] AudioAttributes = new ulong[8]; /// /// Unknown /// [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] public byte[] Unknown = new byte[16]; /// /// Number of subpicture streams in VTSM_VOBS (0 or 1) /// public ushort NumberOfSubpictureStreams; /// /// Subpicture attributes of VTSM_VOBS /// [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)] public byte[] SubpictureAttributes = new byte[6]; /// /// Reserved /// [MarshalAs(UnmanagedType.ByValArray, SizeConst = 164)] public byte[] Reserved = new byte[164]; } }