aboutsummaryrefslogtreecommitdiff
path: root/DvdLib/Ifo/Title.cs
diff options
context:
space:
mode:
Diffstat (limited to 'DvdLib/Ifo/Title.cs')
-rw-r--r--DvdLib/Ifo/Title.cs64
1 files changed, 64 insertions, 0 deletions
diff --git a/DvdLib/Ifo/Title.cs b/DvdLib/Ifo/Title.cs
new file mode 100644
index 000000000..70deb45bf
--- /dev/null
+++ b/DvdLib/Ifo/Title.cs
@@ -0,0 +1,64 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.IO;
+
+namespace DvdLib.Ifo
+{
+ public class Title
+ {
+ public uint TitleNumber { get; private set; }
+ public uint AngleCount { get; private set; }
+ public ushort ChapterCount { get; private set; }
+ public byte VideoTitleSetNumber { get; private set; }
+
+ private ushort _parentalManagementMask;
+ private byte _titleNumberInVTS;
+ private uint _vtsStartSector; // relative to start of entire disk
+
+ public ProgramChain EntryProgramChain { get; private set; }
+ public readonly List<ProgramChain> ProgramChains;
+
+ public readonly List<Chapter> Chapters;
+
+ public Title(uint titleNum)
+ {
+ ProgramChains = new List<ProgramChain>();
+ Chapters = new List<Chapter>();
+ Chapters = new List<Chapter>();
+ TitleNumber = titleNum;
+ }
+
+ public bool IsVTSTitle(uint vtsNum, uint vtsTitleNum)
+ {
+ return (vtsNum == VideoTitleSetNumber && vtsTitleNum == _titleNumberInVTS);
+ }
+
+ internal void ParseTT_SRPT(BinaryReader br)
+ {
+ byte titleType = br.ReadByte();
+ // TODO parse Title Type
+
+ AngleCount = br.ReadByte();
+ ChapterCount = br.ReadUInt16();
+ _parentalManagementMask = br.ReadUInt16();
+ VideoTitleSetNumber = br.ReadByte();
+ _titleNumberInVTS = br.ReadByte();
+ _vtsStartSector = br.ReadUInt32();
+ }
+
+ internal void AddPgc(BinaryReader br, long startByte, bool entryPgc, uint pgcNum)
+ {
+ long curPos = br.BaseStream.Position;
+ br.BaseStream.Seek(startByte, SeekOrigin.Begin);
+
+ ProgramChain pgc = new ProgramChain(pgcNum);
+ pgc.ParseHeader(br);
+ ProgramChains.Add(pgc);
+ if (entryPgc) EntryProgramChain = pgc;
+
+ br.BaseStream.Seek(curPos, SeekOrigin.Begin);
+ }
+ }
+}