From 48d153423e73ca835a8588777466df59c37f6483 Mon Sep 17 00:00:00 2001 From: sr55 Date: Sun, 14 Oct 2007 11:48:44 +0000 Subject: [PATCH] WinGUI: - First implementation of a query parser. This takes in a query and returns each item in a human readable form Notes from previous build that were not added rev [1024] - Fixed: deinterlace options passing the incorrect values to the CLI - Change: Turbo First pass can no longer be enabled if 2 pass is not. - Fixed: CRF now set's correctly - Change: CLI now determines the default audio mixdown rather than the GUI git-svn-id: svn://localhost/HandBrake/trunk@1025 b64f7644-9d1e-0410-96f1-a4d463321fa5 --- win/C#/Functions/QueryParser.cs | 516 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 516 insertions(+) create mode 100644 win/C#/Functions/QueryParser.cs diff --git a/win/C#/Functions/QueryParser.cs b/win/C#/Functions/QueryParser.cs new file mode 100644 index 00000000..26f0485c --- /dev/null +++ b/win/C#/Functions/QueryParser.cs @@ -0,0 +1,516 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Text.RegularExpressions; +using System.Windows.Forms; + +namespace Handbrake.Functions +{ + class QueryParser + { + + // All the Main Window GUI options + #region Varibles + + private string q_source; + /// + /// Returns a String + /// Full path of the source. + /// + public string Source + { + get + { + return this.q_source; + } + } + + private string q_destination; + /// + /// Returns a String + /// Full path of the destination. + /// + public string Destination + { + get + { + return this.q_destination; + } + } + + private int q_dvdTitle; + /// + /// Returns an Integer + /// DVD Title number. + /// + public int DVDTitle + { + get + { + return this.q_dvdTitle; + } + } + + private string q_dvdChapters; + /// + /// Returns an String + /// DVD Chapter number or chapter range. + /// + public string DVDChapters + { + get + { + return this.q_dvdChapters; + } + } + + private string q_videoEncoder; + /// + /// Returns an String + /// The Video Encoder used. + /// + public string VideoEncoder + { + get + { + return this.q_videoEncoder; + } + } + + private string q_audioEncoder; + /// + /// Returns an String + /// The Audio Encoder used. + /// + public string AudioEncoder + { + get + { + return this.q_audioEncoder; + } + } + + private int q_videoWidth; + /// + /// Returns an Integer + /// The selected Width for the encoding. + /// + public int Width + { + get + { + return this.q_videoWidth; + } + } + + private int q_videoHeight; + /// + /// Returns an Integer + /// The selected Height for the encoding. + /// + public int Height + { + get + { + return this.q_videoHeight; + } + } + + private string q_cropValues; + /// + /// Returns an String + /// Cropping values. + /// + public string CropValues + { + get + { + return this.q_cropValues; + } + } + + private Boolean q_detelecine; + /// + /// Returns a boolean to indicate wither DeTelecine is on or off + /// + public Boolean DeTelecine + { + get + { + return this.q_detelecine; + } + } + + private Boolean q_deBlock; + /// + /// Returns a boolean to indicate wither DeBlock is on or off. + /// + public Boolean DeBlock + { + get + { + return this.q_deBlock; + } + } + + private string q_deinterlace; + /// + /// Returns a string with the De-Interlace option used. + /// + public string DeInterlace + { + get + { + return this.q_deinterlace; + } + } + + private string q_denoise; + /// + /// Returns a string with the DeNoise option used. + /// + public string DeNoise + { + get + { + return this.q_denoise; + } + } + + private Boolean q_anamorphic; + /// + /// Returns a boolean to indicate wither Anamorphic is on or off. + /// + public Boolean Anamorphic + { + get + { + return this.q_anamorphic; + } + } + + private Boolean q_chapterMarkers; + /// + /// Returns a boolean to indicate wither Chapter Markers is on or off. + /// + public Boolean ChapterMarkers + { + get + { + return this.q_chapterMarkers; + } + } + + private Boolean q_grayscale; + /// + /// Returns a boolean to indicate wither Grayscale is on or off. + /// + public Boolean Grayscale + { + get + { + return this.q_grayscale; + } + } + + private Boolean q_twoPass; + /// + /// Returns a boolean to indicate wither Two Pass Encoding is on or off. + /// + public Boolean TwoPass + { + get + { + return this.q_twoPass; + } + } + + private Boolean q_turboFirst; + /// + /// Returns a boolean to indicate wither Chapter Markers is on or off. + /// + public Boolean TurboFirstPass + { + get + { + return this.q_turboFirst; + } + } + + private Boolean q_largeMp4; + /// + /// Returns a boolean to indicate wither Larger MP4 files is on or off. + /// + public Boolean LargeMP4 + { + get + { + return this.q_largeMp4; + } + } + + private string q_videoFramerate; + /// + /// Returns a string with the video Framerate + /// + public string VideoFramerate + { + get + { + return this.q_videoFramerate; + } + } + + private string q_avgBitrate; + /// + /// Returns a string with the average video bitrate + /// + public string AverageVideoBitrate + { + get + { + return this.q_avgBitrate; + } + } + + private string q_videoTargetSize; + /// + /// Returns a string with the video target size + /// + public string VideoTargetSize + { + get + { + return this.q_videoTargetSize; + } + } + + private int q_videoQuality; + /// + /// Returns a int with the video quality value + /// + public int VideoQuality + { + get + { + return this.q_videoQuality; + } + } + + private Boolean q_crf; + /// + /// Returns a boolean to indicate if CRF is on or off. + /// + public Boolean CRF + { + get + { + return this.q_crf; + } + } + + private string q_audioBitrate; + /// + /// Returns a string with the audio bitrate + /// + public string AudioBitrate + { + get + { + return this.q_audioBitrate; + } + } + + private string q_audioSamplerate; + /// + /// Returns a string with the audio sample rate + /// + public string AudioSampleBitrate + { + get + { + return this.q_audioSamplerate; + } + } + + private string q_audioTrack1; + /// + /// Returns a string with the First selected Audio track + /// + public string AudioTrack1 + { + get + { + return this.q_audioTrack1; + } + } + + private string q_audioTrackMix; + /// + /// Returns a string with the First selected Audio track Mix + /// + public string AudioTrackMix + { + get + { + return this.q_audioTrackMix; + } + } + + private string q_subtitles; + /// + /// Returns a string with the selected subtitle track + /// + public string Subtitles + { + get + { + return this.q_subtitles; + } + } + + private string q_h264; + /// + /// Returns a string with the Advanced H264 query string + /// + public string H264Query + { + get + { + return this.q_h264; + } + } + private Boolean q_verbose; + /// + /// Returns a string with the Advanced H264 query string + /// + public Boolean Verbose + { + get + { + return this.q_verbose; + } + } + #endregion + + // Takes in a query which can be in any order and parses it. All varibles are then set so they can be used elsewhere. + public static QueryParser Parse(String input) + { + QueryParser thisQuery = new QueryParser(); + + // Example Input + // -i "C:\Documents and Settings\Scott\Desktop\Files\DVD\Test Image.iso" + //-t 1 -c 3-5 -o "C:\test.mp4" -e x264 -E faac -w 720 -l 400 --crop 0:0:0:0 + //-s 1 --deinterlace="1:-1:1" -g -m -b 2500 -2 -r 25 -T -4 --deblock --detelecine + //--denoise=7:7:5:5 -x bframes=3:ref=1:subme=5:me=umh:no-fast-pskip=1:trellis=2 -B 160 -R 48 -a 1 -6 stereo -v + //-q 0.45 -Q -S 2134 + + + //Source + Regex r1 = new Regex(@"(-i)(?:\s\"")([a-zA-Z0-9:\\\s\.]+)(?:\"")"); + Match source = r1.Match(input.Replace('"', '\"')); + Match title = Regex.Match(input, @"-t ([0-9]*)"); + Match chapters = Regex.Match(input, @"-c ([0-9-]*)"); + + //Destination + Regex r2 = new Regex(@"(-o)(?:\s\"")([a-zA-Z0-9:\\\s\.]+)(?:\"")"); + Match destination = r2.Match(input.Replace('"', '\"')); + Match width = Regex.Match(input, @"-w ([0-9]*)"); + Match height = Regex.Match(input, @"-l ([0-9]*)"); + Match videoEncoder = Regex.Match(input, @"-e ([a-zA-Z0-9]*)"); + Match audioEncoder = Regex.Match(input, @"-E ([a-zA-Z0-9]*)"); + + //Picture Settings Tab + Match deinterlace = Regex.Match(input, @"--deinterlace=([0-9:-]*)"); // DOES NOT WORK. Needs Fixed + Match denoise = Regex.Match(input, @"--denoise=([0-9:]*)"); + Match deblock = Regex.Match(input, @"--deblock"); + Match detelecine = Regex.Match(input, @"--detelecine"); + Match anamorphic = Regex.Match(input, @"-p"); + Match chapterMarkers = Regex.Match(input, @"-m"); + Match crop = Regex.Match(input, @"--crop ([0-9]):([0-9]):([0-9]):([0-9])"); + + //Video Settings Tab + Match videoFramerate = Regex.Match(input, @"-r ([0-9]*)"); + Match videoBitrate = Regex.Match(input, @"-b ([0-9]*)"); + Match videoQuality = Regex.Match(input, @"-q ([0-9.]*)"); + Match videoFilesize = Regex.Match(input, @"-S ([0-9.]*)"); + Match CRF = Regex.Match(input, @"-Q"); + Match twoPass = Regex.Match(input, @"-2"); + Match turboFirstPass = Regex.Match(input, @"-T"); + Match grayscale = Regex.Match(input, @"-g"); + Match largerMp4 = Regex.Match(input, @"-4"); + + //Audio Settings Tab + Match subtitles = Regex.Match(input, @"-s ([0-9]*)"); + Match audioBitrate = Regex.Match(input, @"-B ([0-9]*)"); + Match audioSampleRate = Regex.Match(input, @"-R ([0-9.]*)"); + Match audioChannelsMix = Regex.Match(input, @"-6 ([a-zA-Z0-9]*)"); + Match audioChannel = Regex.Match(input, @"-a ([0-9]*)"); + + //H264 Tab + Match x264 = Regex.Match(input, @"-x ([a-zA-Z0-9=:-]*)"); + + //Program Options + Match verbose = Regex.Match(input, @"-v"); + + + // ### NOTES ### + // The following code needs alot of error handling added to it at some point. + // May be an idea to add additional options such as CPU etc later. + + try + { + //Source + thisQuery.q_source = source.ToString(); + thisQuery.q_dvdTitle = int.Parse(title.ToString().Replace("-t ", "")); + thisQuery.q_dvdChapters = chapters.ToString(); + + //Destination + thisQuery.q_destination = destination.ToString(); + thisQuery.q_videoEncoder = videoEncoder.ToString(); + thisQuery.q_audioEncoder = audioEncoder.ToString(); + thisQuery.q_videoWidth = int.Parse(width.ToString().Replace("-w ", "")); + thisQuery.q_videoHeight = int.Parse(height.ToString().Replace("-l ", "")); + + //Picture Settings Tab + thisQuery.q_cropValues = crop.ToString(); + thisQuery.q_detelecine = detelecine.Success; + thisQuery.q_deBlock = deblock.Success; + thisQuery.q_deinterlace = deinterlace.ToString(); + thisQuery.q_denoise = denoise.ToString(); + thisQuery.q_anamorphic = anamorphic.Success; + thisQuery.q_chapterMarkers = chapterMarkers.Success; + + //Video Settings Tab + thisQuery.q_grayscale = grayscale.Success; + thisQuery.q_twoPass = twoPass.Success; + thisQuery.q_turboFirst = turboFirstPass.Success; + thisQuery.q_largeMp4 = largerMp4.Success; + thisQuery.q_videoFramerate = videoFramerate.ToString(); + thisQuery.q_avgBitrate = videoBitrate.ToString(); + thisQuery.q_videoTargetSize = videoFilesize.ToString(); + thisQuery.q_videoQuality = int.Parse(videoQuality.ToString()); + thisQuery.q_crf = CRF.Success; + + //Audio Settings Tab + thisQuery.q_audioBitrate = audioBitrate.ToString(); + thisQuery.q_audioSamplerate = audioSampleRate.ToString(); + thisQuery.q_audioTrack1 = audioChannel.ToString(); + thisQuery.q_audioTrackMix = audioChannelsMix.ToString(); + thisQuery.q_subtitles = subtitles.ToString(); + + //H264 Tab + thisQuery.q_h264 = x264.ToString(); + + //Progam Options + thisQuery.q_verbose = verbose.Success; + } + catch (Exception exc) + { + MessageBox.Show(exc.ToString()); + } + + return thisQuery; + } + } +} -- 2.11.0