OSDN Git Service

added new parsing code to parse cli output into objects
authorbrianmario <brianmario@b64f7644-9d1e-0410-96f1-a4d463321fa5>
Mon, 9 Jul 2007 22:26:54 +0000 (22:26 +0000)
committerbrianmario <brianmario@b64f7644-9d1e-0410-96f1-a4d463321fa5>
Mon, 9 Jul 2007 22:26:54 +0000 (22:26 +0000)
git-svn-id: svn://localhost/HandBrake/trunk@667 b64f7644-9d1e-0410-96f1-a4d463321fa5

win/C#/HandBrakeCS.csproj
win/C#/HandBrakeCS.suo
win/C#/Parsing/AudioTrack.cs [new file with mode: 0644]
win/C#/Parsing/Chapter.cs [new file with mode: 0644]
win/C#/Parsing/DVD.cs [new file with mode: 0644]
win/C#/Parsing/Subtitle.cs [new file with mode: 0644]
win/C#/Parsing/Title.cs [new file with mode: 0644]
win/C#/Program.cs
win/C#/frmReadDVD.cs

index 246a491..1cd5a4e 100644 (file)
     <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
index 410d6a7..bc9c1e1 100644 (file)
Binary files a/win/C#/HandBrakeCS.suo and b/win/C#/HandBrakeCS.suo differ
diff --git a/win/C#/Parsing/AudioTrack.cs b/win/C#/Parsing/AudioTrack.cs
new file mode 100644 (file)
index 0000000..6232da2
--- /dev/null
@@ -0,0 +1,103 @@
+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
diff --git a/win/C#/Parsing/Chapter.cs b/win/C#/Parsing/Chapter.cs
new file mode 100644 (file)
index 0000000..630ab09
--- /dev/null
@@ -0,0 +1,84 @@
+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
diff --git a/win/C#/Parsing/DVD.cs b/win/C#/Parsing/DVD.cs
new file mode 100644 (file)
index 0000000..50751cc
--- /dev/null
@@ -0,0 +1,38 @@
+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
diff --git a/win/C#/Parsing/Subtitle.cs b/win/C#/Parsing/Subtitle.cs
new file mode 100644 (file)
index 0000000..a9c169d
--- /dev/null
@@ -0,0 +1,63 @@
+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
diff --git a/win/C#/Parsing/Title.cs b/win/C#/Parsing/Title.cs
new file mode 100644 (file)
index 0000000..5df7a6b
--- /dev/null
@@ -0,0 +1,184 @@
+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
index a45a6e9..0a4e40b 100644 (file)
@@ -12,7 +12,6 @@ namespace Handbrake
         [STAThread]\r
         static void Main()\r
         {\r
-            // testing svn: brianmario\r
             Application.EnableVisualStyles();\r
             Application.SetCompatibleTextRenderingDefault(false);\r
             Application.Run(new frmMain());\r
index 23be024..2c95731 100644 (file)
@@ -30,10 +30,11 @@ namespace Handbrake
             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