<Compile Include="frmOptions.Designer.cs">\r
<DependentUpon>frmOptions.cs</DependentUpon>\r
</Compile>\r
- <Compile Include="HB.cs" />\r
+ <Compile Include="Parsing\AudioTrack.cs" />\r
+ <Compile Include="Parsing\Chapter.cs" />\r
+ <Compile Include="Parsing\DVD.cs" />\r
+ <Compile Include="Parsing\Subtitle.cs" />\r
+ <Compile Include="Parsing\Title.cs" />\r
<Compile Include="Program.cs" />\r
<Compile Include="Properties\AssemblyInfo.cs" />\r
<EmbeddedResource Include="frmAbout.resx">\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.IO;\r
+\r
+namespace Handbrake.Parsing\r
+{\r
+ public class AudioTrack\r
+ {\r
+ private int m_trackNumber;\r
+ public int TrackNumber\r
+ {\r
+ get\r
+ {\r
+ return this.m_trackNumber;\r
+ }\r
+ }\r
+\r
+ private string m_language;\r
+ public string Language\r
+ {\r
+ get\r
+ {\r
+ return this.m_language;\r
+ }\r
+ }\r
+\r
+ private string m_format;\r
+ public string Format\r
+ {\r
+ get\r
+ {\r
+ return this.m_format;\r
+ }\r
+ }\r
+\r
+ private string m_subFormat;\r
+ public string SubFormat\r
+ {\r
+ get\r
+ {\r
+ return this.m_subFormat;\r
+ }\r
+ }\r
+\r
+ private int m_frequency;\r
+ public int Frequency\r
+ {\r
+ get\r
+ {\r
+ return this.m_frequency;\r
+ }\r
+ }\r
+\r
+ private int m_bitrate;\r
+ public int Bitrate\r
+ {\r
+ get\r
+ {\r
+ return this.m_bitrate;\r
+ }\r
+ }\r
+\r
+ public static AudioTrack Parse(StreamReader output)\r
+ {\r
+ string curLine = output.ReadLine();\r
+ if (!curLine.Contains(" + subtitle tracks:"))\r
+ {\r
+ AudioTrack thisTrack = new AudioTrack();\r
+ string[] splitter = curLine.Split(new string[] { " + ", ", ", " (", ") (", " ch", "), ", "Hz, ", "bps" }, StringSplitOptions.RemoveEmptyEntries);\r
+ thisTrack.m_trackNumber = int.Parse(splitter[0]);\r
+ thisTrack.m_language = splitter[1];\r
+ thisTrack.m_format = splitter[2];\r
+ thisTrack.m_subFormat = splitter[3];\r
+ thisTrack.m_frequency = int.Parse(splitter[4]);\r
+ thisTrack.m_bitrate = int.Parse(splitter[5]);\r
+ return thisTrack;\r
+ }\r
+ else\r
+ {\r
+ return null;\r
+ }\r
+ }\r
+\r
+ public static AudioTrack[] ParseList(StreamReader output)\r
+ {\r
+ List<AudioTrack> tracks = new List<AudioTrack>();\r
+ while (true) // oh glorious hack, serve me well\r
+ {\r
+ AudioTrack thisTrack = AudioTrack.Parse(output);\r
+ if (thisTrack != null)\r
+ {\r
+ tracks.Add(thisTrack);\r
+ }\r
+ else\r
+ {\r
+ break;\r
+ }\r
+ }\r
+ return tracks.ToArray();\r
+ }\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.IO;\r
+\r
+namespace Handbrake.Parsing\r
+{\r
+ public class Chapter\r
+ {\r
+ private int m_chapterNumber;\r
+ public int ChapterNumber\r
+ {\r
+ get\r
+ {\r
+ return this.m_chapterNumber;\r
+ }\r
+ }\r
+\r
+ private int[] m_cellRange;\r
+ public int[] CellRange\r
+ {\r
+ get\r
+ {\r
+ return this.m_cellRange;\r
+ }\r
+ }\r
+\r
+ private int m_blocks;\r
+ public int BlockCount\r
+ {\r
+ get\r
+ {\r
+ return this.m_blocks;\r
+ }\r
+ }\r
+\r
+ private TimeSpan m_duration;\r
+ public TimeSpan Duration\r
+ {\r
+ get\r
+ {\r
+ return this.m_duration;\r
+ }\r
+ }\r
+\r
+ public static Chapter Parse(StreamReader output)\r
+ {\r
+ string curLine = output.ReadLine();\r
+ if (!curLine.Contains(" + audio tracks:"))\r
+ {\r
+ Chapter thisChapter = new Chapter();\r
+ string[] splitter = curLine.Split(new string[] { " + ", ": cells ", ", ", " blocks, duration ", "->" }, StringSplitOptions.RemoveEmptyEntries);\r
+ thisChapter.m_chapterNumber = int.Parse(splitter[0]);\r
+ thisChapter.m_cellRange = new int[2] { int.Parse(splitter[1]), int.Parse(splitter[2]) };\r
+ thisChapter.m_blocks = int.Parse(splitter[3]);\r
+ thisChapter.m_duration = TimeSpan.Parse(splitter[4]);\r
+ return thisChapter;\r
+ }\r
+ else\r
+ {\r
+ return null;\r
+ }\r
+ }\r
+\r
+ public static Chapter[] ParseList(StreamReader output)\r
+ {\r
+ List<Chapter> chapters = new List<Chapter>();\r
+ string curLine = output.ReadLine();\r
+ while (!curLine.Contains(" + audio tracks:"))\r
+ {\r
+ Chapter thisChapter = Chapter.Parse(output);\r
+ if (thisChapter != null)\r
+ {\r
+ chapters.Add(thisChapter);\r
+ }\r
+ else\r
+ {\r
+ break;\r
+ }\r
+ }\r
+ return chapters.ToArray();\r
+ }\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.IO;\r
+\r
+namespace Handbrake.Parsing\r
+{\r
+ public class DVD\r
+ {\r
+ private List<Title> m_titles;\r
+ public List<Title> Titles\r
+ {\r
+ get\r
+ {\r
+ return this.m_titles;\r
+ }\r
+ }\r
+\r
+ public DVD()\r
+ {\r
+ this.m_titles = new List<Title>();\r
+ }\r
+\r
+ public static DVD Parse(StreamReader output)\r
+ {\r
+ DVD thisDVD = new DVD();\r
+ while (!output.EndOfStream)\r
+ {\r
+ string curLine = output.ReadLine();\r
+ if (curLine.Contains("Scanning title"))\r
+ {\r
+ thisDVD.m_titles.AddRange(Title.ParseList(output));\r
+ }\r
+ }\r
+ return thisDVD;\r
+ }\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.IO;\r
+\r
+namespace Handbrake.Parsing\r
+{\r
+ public class Subtitle\r
+ {\r
+ private int m_trackNumber;\r
+ public int TrackNumber\r
+ {\r
+ get\r
+ {\r
+ return this.m_trackNumber;\r
+ }\r
+ }\r
+\r
+ private string m_language;\r
+ public string Language\r
+ {\r
+ get\r
+ {\r
+ return this.m_language;\r
+ }\r
+ }\r
+\r
+ public static Subtitle Parse(StreamReader output)\r
+ {\r
+ string curLine = output.ReadLine();\r
+ if (!curLine.Contains("HandBrake has exited."))\r
+ {\r
+ Subtitle thisSubtitle = new Subtitle();\r
+ string[] splitter = curLine.Split(new string[] { " + ", ", " }, StringSplitOptions.RemoveEmptyEntries);\r
+ thisSubtitle.m_trackNumber = int.Parse(splitter[0]);\r
+ thisSubtitle.m_language = splitter[1];\r
+ return thisSubtitle;\r
+ }\r
+ else\r
+ {\r
+ return null;\r
+ }\r
+ }\r
+\r
+ public static Subtitle[] ParseList(StreamReader output)\r
+ {\r
+ List<Subtitle> subtitles = new List<Subtitle>();\r
+ while ((char)output.Peek() != '+') // oh glorious hack, serve me well\r
+ {\r
+ Subtitle thisSubtitle = Subtitle.Parse(output);\r
+ if (thisSubtitle != null)\r
+ {\r
+ subtitles.Add(thisSubtitle);\r
+ }\r
+ else\r
+ {\r
+ break;\r
+ }\r
+ }\r
+ return subtitles.ToArray();\r
+ }\r
+ }\r
+}\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Drawing;\r
+using System.IO;\r
+\r
+namespace Handbrake.Parsing\r
+{\r
+ public class Title\r
+ {\r
+ private List<Chapter> m_chapters;\r
+ public List<Chapter> Chapters\r
+ {\r
+ get\r
+ {\r
+ return this.m_chapters;\r
+ }\r
+ }\r
+\r
+ private List<AudioTrack> m_audioTracks;\r
+ public List<AudioTrack> AudioTracks\r
+ {\r
+ get\r
+ {\r
+ return this.m_audioTracks;\r
+ }\r
+ }\r
+\r
+ private List<Subtitle> m_subtitles;\r
+ public List<Subtitle> Subtitles\r
+ {\r
+ get\r
+ {\r
+ return this.m_subtitles;\r
+ }\r
+ }\r
+\r
+ private int m_vts;\r
+ public int Vts\r
+ {\r
+ get\r
+ {\r
+ return this.m_vts;\r
+ }\r
+ }\r
+\r
+ private int m_ttn;\r
+ public int Ttn\r
+ {\r
+ get\r
+ {\r
+ return this.m_ttn;\r
+ }\r
+ }\r
+\r
+ private int[] m_cellRange;\r
+ public int[] CellRange\r
+ {\r
+ get\r
+ {\r
+ return this.m_cellRange;\r
+ }\r
+ }\r
+\r
+ private int m_blockCount;\r
+ public int BlockCount\r
+ {\r
+ get\r
+ {\r
+ return this.m_blockCount;\r
+ }\r
+ }\r
+\r
+ private int m_titleNumber;\r
+ public int TitleNumber\r
+ {\r
+ get\r
+ {\r
+ return this.m_titleNumber;\r
+ }\r
+ }\r
+\r
+ private TimeSpan m_duration;\r
+ public TimeSpan Duration\r
+ {\r
+ get\r
+ {\r
+ return this.m_duration;\r
+ }\r
+ }\r
+\r
+ private Size m_resolution;\r
+ public Size Resolution\r
+ {\r
+ get\r
+ {\r
+ return this.m_resolution;\r
+ }\r
+ }\r
+\r
+ private float m_aspectRatio;\r
+ public float AspectRatio\r
+ {\r
+ get\r
+ {\r
+ return this.m_aspectRatio;\r
+ }\r
+ }\r
+\r
+ private float m_fps;\r
+ public float Fps\r
+ {\r
+ get\r
+ {\r
+ return this.m_fps;\r
+ }\r
+ }\r
+\r
+ private int[] m_autoCrop;\r
+ public int[] AutoCropDimensions\r
+ {\r
+ get\r
+ {\r
+ return this.m_autoCrop;\r
+ }\r
+ }\r
+\r
+ public Title()\r
+ {\r
+ this.m_audioTracks = new List<AudioTrack>();\r
+ this.m_chapters = new List<Chapter>();\r
+ this.m_subtitles = new List<Subtitle>();\r
+ this.m_cellRange = new int[2];\r
+ }\r
+\r
+ public static Title Parse(StreamReader output)\r
+ {\r
+ Title thisTitle = new Title();\r
+\r
+ /*\r
+ * This will be converted to use Regex soon, I promise ;)\r
+ * brianmario - 7/9/07\r
+ */\r
+\r
+ string curLine = output.ReadLine();\r
+ thisTitle.m_titleNumber = int.Parse(curLine.Substring(curLine.Length - 2, 1));\r
+ curLine = output.ReadLine();\r
+ string[] splitter = curLine.Split(',');\r
+ thisTitle.m_vts = int.Parse(splitter[0].Substring(8));\r
+ thisTitle.m_ttn = int.Parse(splitter[1].Substring(5));\r
+ splitter = splitter[2].Trim().Split(' ', '(', ')');\r
+ thisTitle.m_blockCount = int.Parse(splitter[3]);\r
+ splitter = splitter[1].Split('-', '>');\r
+ thisTitle.m_cellRange[0] = int.Parse(splitter[0]);\r
+ thisTitle.m_cellRange[1] = int.Parse(splitter[2]);\r
+ curLine = output.ReadLine();\r
+ splitter = curLine.Split(new string[] { " + duration: " }, StringSplitOptions.RemoveEmptyEntries);\r
+ thisTitle.m_duration = TimeSpan.Parse(splitter[0]);\r
+ curLine = output.ReadLine();\r
+ splitter = curLine.Split(new string[] { " + size: ", "aspect: ", ", ", " fps", "x" }, StringSplitOptions.RemoveEmptyEntries);\r
+ thisTitle.m_resolution = new Size(int.Parse(splitter[0]), int.Parse(splitter[1]));\r
+ thisTitle.m_aspectRatio = float.Parse(splitter[2].ToString());\r
+ thisTitle.m_fps = float.Parse(splitter[3].ToString());\r
+ curLine = output.ReadLine();\r
+ splitter = curLine.Split(new string[] { " + autocrop: ", "/" }, StringSplitOptions.RemoveEmptyEntries);\r
+ thisTitle.m_autoCrop = new int[4] { int.Parse(splitter[0]), int.Parse(splitter[1]), int.Parse(splitter[2]), int.Parse(splitter[3]) };\r
+ thisTitle.m_chapters.AddRange(Chapter.ParseList(output));\r
+ thisTitle.m_audioTracks.AddRange(AudioTrack.ParseList(output));\r
+ thisTitle.m_subtitles.AddRange(Subtitle.ParseList(output));\r
+\r
+ return thisTitle;\r
+ }\r
+\r
+ public static Title[] ParseList(StreamReader output)\r
+ {\r
+ List<Title> titles = new List<Title>();\r
+ while ((char)output.Peek() == '+')\r
+ {\r
+ titles.Add(Title.Parse(output));\r
+ }\r
+ return titles.ToArray();\r
+ }\r
+ }\r
+}\r
[STAThread]\r
static void Main()\r
{\r
- // testing svn: brianmario\r
Application.EnableVisualStyles();\r
Application.SetCompatibleTextRenderingDefault(false);\r
Application.Run(new frmMain());\r
hbProc.StartInfo.UseShellExecute = false;\r
hbProc.Start();\r
System.IO.StreamReader errorReader = new System.IO.StreamReader(new System.IO.BufferedStream(hbProc.StandardError.BaseStream));\r
- //rtf_dvdInfo.AppendText(errorReader.ReadToEnd());\r
hbProc.WaitForExit();\r
hbProc.Close();\r
\r
+ //Parsing.DVD thisDvd = Parsing.DVD.Parse(errorReader);\r
+\r
String DvdData = errorReader.ReadToEnd();\r
DvdData = DvdData + "-- end --";\r
\r