OSDN Git Service

- New Audio Panel (Query Parser, Query Generator, Preset Loader Functions all updated)
[handbrake-jp/handbrake-jp-git.git] / win / C# / Functions / QueryParser.cs
1 /*  QueryParser.cs $\r
2         \r
3            This file is part of the HandBrake source code.\r
4            Homepage: <http://handbrake.fr>.\r
5            It may be used under the terms of the GNU General Public License. */\r
6 \r
7 using System;\r
8 using System.Collections.Generic;\r
9 using System.Text;\r
10 using System.Text.RegularExpressions;\r
11 using System.Windows.Forms;\r
12 \r
13 namespace Handbrake.Functions\r
14 {\r
15     class QueryParser\r
16     {\r
17 \r
18         // All the Main Window GUI options\r
19         #region Varibles\r
20 \r
21         #region Source\r
22         private string q_source;\r
23         /// <summary>\r
24         /// Returns a String \r
25         /// Full path of the source.\r
26         /// </summary>\r
27         public string Source\r
28         {\r
29             get\r
30             {\r
31                 return this.q_source;\r
32             }\r
33         }\r
34         private int q_dvdTitle;\r
35         /// <summary>\r
36         /// Returns an Integer\r
37         /// DVD Title number.\r
38         /// </summary>\r
39         public int DVDTitle\r
40         {\r
41             get\r
42             {\r
43                 return this.q_dvdTitle;\r
44             }\r
45         }\r
46 \r
47         private int q_chaptersStart;\r
48         /// <summary>\r
49         /// Returns an Int\r
50         /// DVD Chapter number or chapter range.\r
51         /// </summary>\r
52         public int DVDChapterStart\r
53         {\r
54             get\r
55             {\r
56                 return this.q_chaptersStart;\r
57             }\r
58         }\r
59 \r
60         private int q_chaptersFinish;\r
61         /// <summary>\r
62         /// Returns an Int\r
63         /// DVD Chapter number or chapter range.\r
64         /// </summary>\r
65         public int DVDChapterFinish\r
66         {\r
67             get\r
68             {\r
69                 return this.q_chaptersFinish;\r
70             }\r
71         }\r
72 #endregion\r
73 \r
74         #region Destination\r
75 \r
76         private string q_destination;\r
77         /// <summary>\r
78         /// Returns a String \r
79         /// Full path of the destination.\r
80         /// </summary>\r
81         public string Destination\r
82         {\r
83             get\r
84             {\r
85                 return this.q_destination;\r
86             }\r
87         }\r
88 \r
89         private string q_format;\r
90         /// <summary>\r
91         /// Returns a String \r
92         /// Full path of the destination.\r
93         /// </summary>\r
94         public string Format\r
95         {\r
96             get\r
97             {\r
98                 return this.q_format;\r
99             }\r
100         }\r
101 \r
102         private string q_videoEncoder;\r
103         /// <summary>\r
104         /// Returns an String\r
105         /// The Video Encoder used.\r
106         /// </summary>\r
107         public string VideoEncoder\r
108         {\r
109             get\r
110             {\r
111                 return this.q_videoEncoder;\r
112             }\r
113         }\r
114         #endregion\r
115 \r
116         #region Picture Settings\r
117         private int q_videoWidth;\r
118         /// <summary>\r
119         /// Returns an Int\r
120         /// The selected Width for the encoding.\r
121         /// </summary>\r
122         public int Width\r
123         {\r
124             get\r
125             {\r
126                 return this.q_videoWidth;\r
127             }\r
128         }\r
129 \r
130         private int q_videoHeight;\r
131         /// <summary>\r
132         /// Returns an Int\r
133         /// The selected Height for the encoding.\r
134         /// </summary>\r
135         public int Height\r
136         {\r
137             get\r
138             {\r
139                 return this.q_videoHeight;\r
140             }\r
141         }\r
142 \r
143         private string q_cropValues;\r
144         /// <summary>\r
145         /// Returns an String\r
146         /// Cropping values.\r
147         /// </summary>\r
148         public string CropValues\r
149         {\r
150             get\r
151             {\r
152                 return this.q_cropValues;\r
153             }\r
154         }\r
155 \r
156         private string q_croptop;\r
157         /// <summary>\r
158         /// Returns an String\r
159         /// Cropping values.\r
160         /// </summary>\r
161         public string CropTop\r
162         {\r
163             get\r
164             {\r
165                 return this.q_croptop;\r
166             }\r
167         }\r
168 \r
169         private string q_cropbottom;\r
170         /// <summary>\r
171         /// Returns an String\r
172         /// Cropping values.\r
173         /// </summary>\r
174         public string CropBottom\r
175         {\r
176             get\r
177             {\r
178                 return this.q_cropbottom;\r
179             }\r
180         }\r
181 \r
182         private string q_cropLeft;\r
183         /// <summary>\r
184         /// Returns an String\r
185         /// Cropping values.\r
186         /// </summary>\r
187         public string CropLeft\r
188         {\r
189             get\r
190             {\r
191                 return this.q_cropLeft;\r
192             }\r
193         }\r
194 \r
195         private string q_cropRight;\r
196         /// <summary>\r
197         /// Returns an String\r
198         /// Cropping values.\r
199         /// </summary>\r
200         public string CropRight\r
201         {\r
202             get\r
203             {\r
204                 return this.q_cropRight;\r
205             }\r
206         }\r
207 \r
208         private Boolean q_detelecine;\r
209         /// <summary>\r
210         /// Returns a boolean to indicate wither DeTelecine is on or off\r
211         /// </summary>\r
212         public Boolean DeTelecine\r
213         {\r
214             get\r
215             {\r
216                 return this.q_detelecine;\r
217             }\r
218         }\r
219 \r
220         private Boolean q_vfr;\r
221         /// <summary>\r
222         /// Returns a boolean to indicate wither DeTelecine is on or off\r
223         /// </summary>\r
224         public Boolean VFR\r
225         {\r
226             get\r
227             {\r
228                 return this.q_vfr;\r
229             }\r
230         }\r
231 \r
232         private Boolean q_deBlock;\r
233         /// <summary>\r
234         /// Returns a boolean to indicate wither DeBlock is on or off.\r
235         /// </summary>\r
236         public Boolean DeBlock\r
237         {\r
238             get\r
239             {\r
240                 return this.q_deBlock;\r
241             }\r
242         }\r
243 \r
244         private string q_deinterlace;\r
245         /// <summary>\r
246         /// Returns a string with the De-Interlace option used.\r
247         /// </summary>\r
248         public string DeInterlace\r
249         {\r
250             get\r
251             {\r
252                 return this.q_deinterlace;\r
253             }\r
254         }\r
255 \r
256         private string q_denoise;\r
257         /// <summary>\r
258         /// Returns a string with the DeNoise option used.\r
259         /// </summary>\r
260         public string DeNoise\r
261         {\r
262             get\r
263             {\r
264                 return this.q_denoise;\r
265             }\r
266         }\r
267 \r
268         private Boolean q_anamorphic;\r
269         /// <summary>\r
270         /// Returns a boolean to indicate wither Anamorphic is on or off.\r
271         /// </summary>\r
272         public Boolean Anamorphic\r
273         {\r
274             get\r
275             {\r
276                 return this.q_anamorphic;\r
277             }\r
278         }\r
279 \r
280         private Boolean q_looseAnamorphic;\r
281         /// <summary>\r
282         /// Returns a boolean to indicate wither Anamorphic is on or off.\r
283         /// </summary>\r
284         public Boolean LooseAnamorphic\r
285         {\r
286             get\r
287             {\r
288                 return this.q_looseAnamorphic;\r
289             }\r
290         }\r
291 \r
292         private Boolean q_chapterMarkers;\r
293         /// <summary>\r
294         /// Returns a boolean to indicate wither Chapter Markers is on or off.\r
295         /// </summary>\r
296         public Boolean ChapterMarkers\r
297         {\r
298             get\r
299             {\r
300                 return this.q_chapterMarkers;\r
301             }\r
302         }\r
303         #endregion\r
304 \r
305         #region Video Settings\r
306         private Boolean q_grayscale;\r
307         /// <summary>\r
308         /// Returns a boolean to indicate wither Grayscale is on or off.\r
309         /// </summary>\r
310         public Boolean Grayscale\r
311         {\r
312             get\r
313             {\r
314                 return this.q_grayscale;\r
315             }\r
316         }\r
317 \r
318         private Boolean q_twoPass;\r
319         /// <summary>\r
320         /// Returns a boolean to indicate wither Two Pass Encoding is on or off.\r
321         /// </summary>\r
322         public Boolean TwoPass\r
323         {\r
324             get\r
325             {\r
326                 return this.q_twoPass;\r
327             }\r
328         }\r
329 \r
330         private Boolean q_turboFirst;\r
331         /// <summary>\r
332         /// Returns a boolean to indicate wither Chapter Markers is on or off.\r
333         /// </summary>\r
334         public Boolean TurboFirstPass\r
335         {\r
336             get\r
337             {\r
338                 return this.q_turboFirst;\r
339             }\r
340         }\r
341 \r
342         private Boolean q_largeMp4;\r
343         /// <summary>\r
344         /// Returns a boolean to indicate wither Larger MP4 files is on or off.\r
345         /// </summary>\r
346         public Boolean LargeMP4\r
347         {\r
348             get\r
349             {\r
350                 return this.q_largeMp4;\r
351             }\r
352         }\r
353 \r
354         private Boolean q_ipodAtom;\r
355         /// <summary>\r
356         /// Returns a boolean to indicate wither Larger MP4 files is on or off.\r
357         /// </summary>\r
358         public Boolean IpodAtom\r
359         {\r
360             get\r
361             {\r
362                 return this.q_ipodAtom;\r
363             }\r
364         }\r
365 \r
366         private Boolean q_optimizeMp4;\r
367         /// <summary>\r
368         /// Returns a boolean to indicate wither Larger MP4 files is on or off.\r
369         /// </summary>\r
370         public Boolean OptimizeMP4\r
371         {\r
372             get\r
373             {\r
374                 return this.q_optimizeMp4;\r
375             }\r
376         }\r
377 \r
378         private string q_videoFramerate;\r
379         /// <summary>\r
380         /// Returns a string with the video Framerate\r
381         /// </summary>\r
382         public string VideoFramerate\r
383         {\r
384             get\r
385             {\r
386                 return this.q_videoFramerate;\r
387             }\r
388         }\r
389 \r
390         private string q_avgBitrate;\r
391         /// <summary>\r
392         /// Returns a string with the average video bitrate\r
393         /// </summary>\r
394         public string AverageVideoBitrate\r
395         {\r
396             get\r
397             {\r
398                 return this.q_avgBitrate;\r
399             }\r
400         }\r
401 \r
402         private string q_videoTargetSize;\r
403         /// <summary>\r
404         /// Returns a string with the video target size\r
405         /// </summary>\r
406         public string VideoTargetSize\r
407         {\r
408             get\r
409             {\r
410                 return this.q_videoTargetSize;\r
411             }\r
412         }\r
413 \r
414         private int q_videoQuality;\r
415         /// <summary>\r
416         /// Returns a int with the video quality value\r
417         /// </summary>\r
418         public int VideoQuality\r
419         {\r
420             get\r
421             {\r
422                 return this.q_videoQuality;\r
423             }\r
424         }\r
425 \r
426         #endregion\r
427 \r
428         #region Audio Settings\r
429         private string q_audioTrack1;\r
430         /// <summary>\r
431         /// Returns a string with the First selected Audio track\r
432         /// </summary>\r
433         public string AudioTrack1\r
434         {\r
435             get\r
436             {\r
437                 return this.q_audioTrack1;\r
438             }\r
439         }\r
440 \r
441         private string q_audioTrack2;\r
442         /// <summary>\r
443         /// Returns a string with the First selected Audio track\r
444         /// </summary>\r
445         public string AudioTrack2\r
446         {\r
447             get\r
448             {\r
449                 return this.q_audioTrack2;\r
450             }\r
451         }\r
452 \r
453         private string q_audioTrackMix1;\r
454         /// <summary>\r
455         /// Returns a string with the First selected Audio track Mix\r
456         /// </summary>\r
457         public string AudioTrackMix1\r
458         {\r
459             get\r
460             {\r
461                 return this.q_audioTrackMix1;\r
462             }\r
463         }\r
464 \r
465         private string q_audioTrackMix2;\r
466         /// <summary>\r
467         /// Returns a string with the First selected Audio track Mix\r
468         /// </summary>\r
469         public string AudioTrackMix2\r
470         {\r
471             get\r
472             {\r
473                 return this.q_audioTrackMix2;\r
474             }\r
475         }\r
476 \r
477         private string q_audioEncoder1;\r
478         /// <summary>\r
479         /// Returns an String\r
480         /// The Audio Encoder used.\r
481         /// </summary>\r
482         public string AudioEncoder1\r
483         {\r
484             get\r
485             {\r
486                 return this.q_audioEncoder1;\r
487             }\r
488         }\r
489 \r
490         private string q_audioEncoder2;\r
491         /// <summary>\r
492         /// Returns an String\r
493         /// The Audio Encoder used.\r
494         /// </summary>\r
495         public string AudioEncoder2\r
496         {\r
497             get\r
498             {\r
499                 return this.q_audioEncoder2;\r
500             }\r
501         }\r
502 \r
503         private string q_audioBitrate1;\r
504         /// <summary>\r
505         /// Returns a string with the audio bitrate\r
506         /// </summary>\r
507         public string AudioBitrate1\r
508         {\r
509             get\r
510             {\r
511                 return this.q_audioBitrate1;\r
512             }\r
513         }\r
514 \r
515         private string q_audioBitrate2;\r
516         /// <summary>\r
517         /// Returns a string with the audio bitrate\r
518         /// </summary>\r
519         public string AudioBitrate2\r
520         {\r
521             get\r
522             {\r
523                 return this.q_audioBitrate2;\r
524             }\r
525         }\r
526 \r
527         private string q_audioSamplerate1;\r
528         /// <summary>\r
529         /// Returns a string with the audio sample rate\r
530         /// </summary>\r
531         public string AudioSamplerate1\r
532         {\r
533             get\r
534             {\r
535                 return this.q_audioSamplerate1;\r
536             }\r
537         }\r
538 \r
539         private string q_audioSamplerate2;\r
540         /// <summary>\r
541         /// Returns a string with the audio sample rate\r
542         /// </summary>\r
543         public string AudioSamplerate2\r
544         {\r
545             get\r
546             {\r
547                 return this.q_audioSamplerate2;\r
548             }\r
549         }\r
550 \r
551         private double q_drc;\r
552         /// <summary>\r
553         /// Returns a string with the selected subtitle track\r
554         /// </summary>\r
555         public double DRC\r
556         {\r
557             get\r
558             {\r
559                 return this.q_drc;\r
560             }\r
561         }\r
562 \r
563         private string q_subtitles;\r
564         /// <summary>\r
565         /// Returns a string with the selected subtitle track\r
566         /// </summary>\r
567         public string Subtitles\r
568         {\r
569             get\r
570             {\r
571                 return this.q_subtitles;\r
572             }\r
573         }\r
574 \r
575         private Boolean q_forcedSubs;\r
576         /// <summary>\r
577         /// Returns a string with the selected subtitle track\r
578         /// </summary>\r
579         public Boolean ForcedSubtitles\r
580         {\r
581             get\r
582             {\r
583                 return this.q_forcedSubs;\r
584             }\r
585         }\r
586 \r
587         #endregion\r
588 \r
589         #region Other\r
590         private string q_h264;\r
591         /// <summary>\r
592         /// Returns a string with the Advanced H264 query string\r
593         /// </summary>\r
594         public string H264Query\r
595         {\r
596             get\r
597             {\r
598                 return this.q_h264;\r
599             }\r
600         }\r
601         private Boolean q_verbose;\r
602         /// <summary>\r
603         /// Returns a string with the Advanced H264 query string\r
604         /// </summary>\r
605         public Boolean Verbose\r
606         {\r
607             get\r
608             {\r
609                 return this.q_verbose;\r
610             }\r
611         }\r
612         #endregion\r
613 \r
614         #endregion\r
615 \r
616         // Takes in a query which can be in any order and parses it. All varibles are then set so they can be used elsewhere.\r
617         public static QueryParser Parse(String input)\r
618         {\r
619             QueryParser thisQuery = new QueryParser();\r
620 \r
621             #region Regular Expressions\r
622             //Source\r
623             Regex r1 = new Regex(@"(-i)(?:\s\"")([a-zA-Z0-9:\\\s\.]+)(?:\"")");\r
624             Match source = r1.Match(input.Replace('"', '\"'));\r
625             Match title = Regex.Match(input, @"-t ([0-9]*)");\r
626             Match chapters = Regex.Match(input, @"-c ([0-9-]*)");\r
627             Match format = Regex.Match(input, @"-f ([a-z0-9a-z0-9a-z0-9]*)");\r
628 \r
629             //Destination\r
630             Regex r2 = new Regex(@"(-o)(?:\s\"")([a-zA-Z0-9_\-:\\\s\.]+)(?:\"")");\r
631             Match destination = r2.Match(input.Replace('"', '\"'));\r
632             Match videoEncoder = Regex.Match(input, @"-e ([a-zA-Z0-9]*)");\r
633 \r
634             //Picture Settings Tab\r
635             Match width = Regex.Match(input, @"-w ([0-9]*)");\r
636             Match height = Regex.Match(input, @"-l ([0-9]*)");\r
637             Match deinterlace = Regex.Match(input, @"--deinterlace=([a-z]*)");\r
638             Match denoise = Regex.Match(input, @"--denoise=([a-z]*)");\r
639             Match deblock = Regex.Match(input, @"--deblock");\r
640             Match detelecine = Regex.Match(input, @"--detelecine");\r
641             Match anamorphic = Regex.Match(input, @"-p ");\r
642             Match chapterMarkers = Regex.Match(input, @"-m");\r
643             Match crop = Regex.Match(input, @"--crop ([0-9]):([0-9]):([0-9]):([0-9])");\r
644             Match vfr = Regex.Match(input, @"-V");\r
645             Match lanamorphic = Regex.Match(input, @"-P");\r
646 \r
647             //Video Settings Tab\r
648             Match videoFramerate = Regex.Match(input, @"-r ([0-9]*)");\r
649             Match videoBitrate = Regex.Match(input, @"-b ([0-9]*)");\r
650             Match videoQuality = Regex.Match(input, @"-q ([0-9.]*)");\r
651             Match videoFilesize = Regex.Match(input, @"-S ([0-9.]*)");\r
652             Match twoPass = Regex.Match(input, @"-2");\r
653             Match turboFirstPass = Regex.Match(input, @"-T");\r
654             Match grayscale = Regex.Match(input, @"-g");\r
655             Match largerMp4 = Regex.Match(input, @"-4");\r
656             Match ipodAtom = Regex.Match(input, @"-I");\r
657             Match optimizeMP4 = Regex.Match(input, @"-O");\r
658 \r
659             //Audio Settings Tab\r
660             Match audioTrack1 = Regex.Match(input, @"-a ([0-9]*)");\r
661             Match audioTrack2 = Regex.Match(input, @"-a ([0-9]*),([0-9]*)");\r
662             Match audioTrack1Mix = Regex.Match(input, @"-6 ([0-9a-z0-9]*)");  \r
663             Match audioTrack2Mix = Regex.Match(input, @"-6 ([0-9a-z0-9]*),([0-9a-z0-9]*)");  \r
664             Match audioEncoder1 = Regex.Match(input, @"-E ([a-zA-Z0-9+]*)");\r
665             Match audioEncoder2 = Regex.Match(input, @"-E ([a-zA-Z0-9+]*),([a-zA-Z0-9+]*)");\r
666             Match audioBitrate1 = Regex.Match(input, @"-B ([0-9]*)");\r
667             Match audioBitrate2 = Regex.Match(input, @"-B ([0-9]*),([0-9]*)");\r
668             Match audioSampleRate1 = Regex.Match(input, @"-R ([0-9.]*)");\r
669             Match audioSampleRate2 = Regex.Match(input, @"-R ([0-9.]*),([0-9.]*)");\r
670 \r
671             Match drc = Regex.Match(input, @"-D ([0-9.]*)");\r
672             Match subtitles = Regex.Match(input, @"-s ([0-9a-zA-Z]*)");\r
673             Match subScan = Regex.Match(input, @"-U");\r
674             Match forcedSubtitles = Regex.Match(input, @"-F");\r
675 \r
676             //H264 Tab\r
677             Match x264 = Regex.Match(input, @"-x ([,a-zA-Z0-9=:-]*)");\r
678 \r
679             //Program Options\r
680             Match verbose = Regex.Match(input, @"-v");\r
681             #endregion\r
682 \r
683             #region Set Varibles\r
684             try\r
685             {\r
686                 /*\r
687                  * Source\r
688                  */\r
689                 #region Source Tab\r
690 \r
691                 thisQuery.q_source = source.ToString().Replace("-i ", "").Replace("\"", "");\r
692                 if (title.Success != false)\r
693                     thisQuery.q_dvdTitle = int.Parse(title.ToString().Replace("-t ", ""));\r
694 \r
695                 if (chapters.Success != false)\r
696                 {\r
697                     string[] actTitles = new string[2];\r
698                     actTitles = chapters.ToString().Replace("-c ", "").Split('-');\r
699                     thisQuery.q_chaptersStart = int.Parse(actTitles[0]);\r
700                     if (actTitles.Length > 1)\r
701                     {\r
702                         thisQuery.q_chaptersFinish = int.Parse(actTitles[1]);\r
703                     }\r
704 \r
705                     if ((thisQuery.q_chaptersStart == 1) && (thisQuery.q_chaptersFinish == 0))\r
706                         thisQuery.q_chaptersFinish = thisQuery.q_chaptersStart;\r
707                 }\r
708 \r
709                 if (format.Success != false)\r
710                     thisQuery.q_format = format.ToString().Replace("-f ", "");\r
711 \r
712                 #endregion\r
713 \r
714                 /*\r
715                  * Destination\r
716                  */\r
717                 #region Destination\r
718                 thisQuery.q_destination = destination.ToString().Replace("-o ", "").Replace("\"", "");\r
719 \r
720                 string videoEncoderConvertion;\r
721                 string audioEncoderConvertion;\r
722 \r
723                 videoEncoderConvertion = videoEncoder.ToString().Replace("-e ", "");\r
724                 switch (videoEncoderConvertion)\r
725                 {\r
726                     case "ffmpeg":\r
727                         videoEncoderConvertion = "Mpeg 4";\r
728                         break;\r
729                     case "xvid":\r
730                         videoEncoderConvertion = "Xvid";\r
731                         break;\r
732                     case "x264":\r
733                         videoEncoderConvertion = "H.264";\r
734                         break;\r
735                     case "x264b13":\r
736                         videoEncoderConvertion = "H.264 Baseline 1.3";\r
737                         break;\r
738                     case "x264b30":\r
739                         videoEncoderConvertion = "H.264 (iPod)";\r
740                         break;\r
741                     default:\r
742                         videoEncoderConvertion = "Mpeg 4";\r
743                         break;\r
744                 }\r
745                 thisQuery.q_videoEncoder = videoEncoderConvertion;\r
746 \r
747                 #endregion\r
748 \r
749                 /*\r
750                  * Picture Settings Tab\r
751                  */\r
752                 #region Picture Tab\r
753 \r
754                 if (width.Success != false)\r
755                     thisQuery.q_videoWidth = int.Parse(width.ToString().Replace("-w ", ""));\r
756 \r
757                 if (height.Success != false)\r
758                     thisQuery.q_videoHeight = int.Parse(height.ToString().Replace("-l ", ""));\r
759 \r
760 \r
761                 if (crop.Success != false)\r
762                 {\r
763                     thisQuery.q_cropValues = crop.ToString().Replace("--crop ", "");\r
764                     string[] actCropValues = new string[3];\r
765                     actCropValues = thisQuery.q_cropValues.Split(':');\r
766                     thisQuery.q_croptop = actCropValues[0];\r
767                     thisQuery.q_cropbottom = actCropValues[1];\r
768                     thisQuery.q_cropLeft = actCropValues[2];\r
769                     thisQuery.q_cropRight = actCropValues[3];\r
770                 }\r
771 \r
772                 thisQuery.q_detelecine = detelecine.Success;\r
773                 thisQuery.q_deBlock = deblock.Success;\r
774 \r
775                 thisQuery.q_deinterlace = "None";\r
776                 if (deinterlace.Success != false)\r
777                 {\r
778                     switch (deinterlace.ToString().Replace("--deinterlace=", ""))\r
779                     {\r
780                         case "fast":\r
781                             thisQuery.q_deinterlace = "Fast";\r
782                             break;\r
783                         case "slow":\r
784                             thisQuery.q_deinterlace = "Slow";\r
785                             break;\r
786                         case "slower":\r
787                             thisQuery.q_deinterlace = "Slower";\r
788                             break;\r
789                         case "slowest":\r
790                             thisQuery.q_deinterlace = "Slowest";\r
791                             break;\r
792                         default:\r
793                             thisQuery.q_deinterlace = "None";\r
794                             break;\r
795                     }\r
796                 }\r
797 \r
798                 thisQuery.q_denoise = "None";\r
799                 if (denoise.Success != false)\r
800                 {\r
801                     switch (denoise.ToString().Replace("--denoise=", ""))\r
802                     {\r
803                         case "weak":\r
804                             thisQuery.q_denoise = "Weak";\r
805                             break;\r
806                         case "medium":\r
807                             thisQuery.q_denoise = "Medium";\r
808                             break;\r
809                         case "strong":\r
810                             thisQuery.q_denoise = "Strong";\r
811                             break;\r
812                         default:\r
813                             thisQuery.q_denoise = "None";\r
814                             break;\r
815                     }\r
816 \r
817                 }\r
818                 thisQuery.q_anamorphic = anamorphic.Success;\r
819                 thisQuery.q_chapterMarkers = chapterMarkers.Success;\r
820                 thisQuery.q_vfr = vfr.Success;\r
821                 thisQuery.q_looseAnamorphic = lanamorphic.Success;\r
822 \r
823                 #endregion\r
824 \r
825                 /*\r
826                  * Video Settings Tab\r
827                  */\r
828                 #region Video\r
829                 thisQuery.q_grayscale = grayscale.Success;\r
830                 thisQuery.q_twoPass = twoPass.Success;\r
831                 thisQuery.q_turboFirst = turboFirstPass.Success;\r
832                 thisQuery.q_largeMp4 = largerMp4.Success;\r
833                 if (videoFramerate.Success != false)\r
834                     thisQuery.q_videoFramerate = videoFramerate.ToString().Replace("-r ", "");\r
835                 else\r
836                     thisQuery.q_videoFramerate = "Same as source";\r
837 \r
838                 if (videoBitrate.Success != false)\r
839                     thisQuery.q_avgBitrate = videoBitrate.ToString().Replace("-b ", "");\r
840                 if (videoFilesize.Success != false)\r
841                     thisQuery.q_videoTargetSize = videoFilesize.ToString().Replace("-S ", "");\r
842 \r
843                 double qConvert = 0;\r
844                 if (videoQuality.Success != false)\r
845                 {\r
846                     qConvert = double.Parse(videoQuality.ToString().Replace("-q ", ""), Functions.CLI.Culture) * 100;\r
847                     qConvert = System.Math.Ceiling(qConvert);\r
848                     thisQuery.q_videoQuality = int.Parse(qConvert.ToString());\r
849                 }\r
850                 thisQuery.q_ipodAtom = ipodAtom.Success;\r
851                 thisQuery.q_optimizeMp4 = optimizeMP4.Success;\r
852 \r
853                 #endregion\r
854 \r
855                 /*\r
856                  * Audio Settings Tab\r
857                  */\r
858                 #region Audio\r
859                 // Tracks\r
860                 if (audioTrack1.Success != false)\r
861                     thisQuery.q_audioTrack1 = audioTrack1.ToString().Replace("-a ", "");\r
862                 else\r
863                     thisQuery.q_audioTrack1 = "Automatic";\r
864 \r
865                 if (audioTrack2.Success != false)\r
866                 {\r
867                     string[] audioChan = audioTrack2.ToString().Split(',');\r
868                     thisQuery.q_audioTrack2 = audioChan[1];\r
869                 }\r
870                 else\r
871                     thisQuery.q_audioTrack2 = "None";\r
872     \r
873                 // Mixdowns\r
874                 thisQuery.q_audioTrackMix1 = "Automatic";\r
875                 if (audioTrack1Mix.Success != false)\r
876                 {\r
877                     switch (audioTrack1Mix.ToString().Replace("-6 ", "").Replace(" ", ""))\r
878                     {\r
879                         case "mono":\r
880                             thisQuery.q_audioTrackMix1 = "Mono";\r
881                             break;\r
882                         case "stereo":\r
883                             thisQuery.q_audioTrackMix1 = "Stereo";\r
884                             break;\r
885                         case "dpl1":\r
886                             thisQuery.q_audioTrackMix1 = "Dolby Surround";\r
887                             break;\r
888                         case "dpl2":\r
889                             thisQuery.q_audioTrackMix1 = "Dolby Pro Logic II";\r
890                             break;\r
891                         case "6ch":\r
892                             thisQuery.q_audioTrackMix1 = "6 Channel Discrete";\r
893                             break;\r
894                         default:\r
895                             thisQuery.q_audioTrackMix1 = "Automatic";\r
896                             break;\r
897                     }\r
898                 }\r
899 \r
900                 thisQuery.q_audioTrackMix2 = "Automatic";\r
901                 if (audioTrack2Mix.Success != false)\r
902                 {\r
903                     string[] audio2mix = audioTrack2Mix.ToString().Split(',');\r
904                     audio2mix[1] = audio2mix[1].Trim();\r
905                     switch (audio2mix[1])\r
906                     {\r
907                         case "mono":\r
908                             thisQuery.q_audioTrackMix2 = "Mono";\r
909                             break;\r
910                         case "stereo":\r
911                             thisQuery.q_audioTrackMix2 = "Stereo";\r
912                             break;\r
913                         case "dpl1":\r
914                             thisQuery.q_audioTrackMix2 = "Dolby Surround";\r
915                             break;\r
916                         case "dpl2":\r
917                             thisQuery.q_audioTrackMix2 = "Dolby Pro Logic II";\r
918                             break;\r
919                         case "6ch":\r
920                             thisQuery.q_audioTrackMix2 = "6 Channel Discrete";\r
921                             break;\r
922                         default:\r
923                             thisQuery.q_audioTrackMix2 = "Automatic";\r
924                             break;\r
925                     }\r
926                 }\r
927 \r
928                 // Audio Encoders\r
929                 if (audioEncoder1.Success != false)\r
930                 {\r
931                     audioEncoderConvertion = audioEncoder1.ToString().Replace("-E ", "");\r
932                     switch (audioEncoderConvertion)\r
933                     {\r
934                         case "faac":\r
935                             audioEncoderConvertion = "AAC";\r
936                             break;\r
937                         case "lame":\r
938                             audioEncoderConvertion = "MP3";\r
939                             break;\r
940                         case "vorbis":\r
941                             audioEncoderConvertion = "Vorbis";\r
942                             break;\r
943                         case "ac3":\r
944                             audioEncoderConvertion = "AC3";\r
945                             break;\r
946                         case "aac+ac3":\r
947                             audioEncoderConvertion = "AAC + AC3";\r
948                             break;\r
949                         default:\r
950                             audioEncoderConvertion = "AAC";\r
951                             break;\r
952                     }\r
953                     thisQuery.q_audioEncoder1 = audioEncoderConvertion;\r
954                 }\r
955 \r
956                 if (audioEncoder2.Success != false)\r
957                 {\r
958                     audioEncoderConvertion = audioEncoder2.ToString().Replace("-E ", "");\r
959                     string[] audio2enc = audioEncoder2.ToString().Split(',');\r
960                     audio2enc[1] = audio2enc[1].Trim();\r
961                     switch (audio2enc[1])\r
962                     {\r
963                         case "faac":\r
964                             audioEncoderConvertion = "AAC";\r
965                             break;\r
966                         case "lame":\r
967                             audioEncoderConvertion = "MP3";\r
968                             break;\r
969                         case "vorbis":\r
970                             audioEncoderConvertion = "Vorbis";\r
971                             break;\r
972                         case "ac3":\r
973                             audioEncoderConvertion = "AC3";\r
974                             break;\r
975                         case "aac+ac3":\r
976                             audioEncoderConvertion = "AAC + AC3";\r
977                             break;\r
978                         default:\r
979                             audioEncoderConvertion = "AAC";\r
980                             break;\r
981                     }\r
982                     thisQuery.q_audioEncoder2 = audioEncoderConvertion;\r
983                 }\r
984 \r
985 \r
986                 // Audio Bitrate\r
987                 if (audioBitrate1.Success != false)\r
988                     thisQuery.q_audioBitrate1 = audioBitrate1.ToString().Replace("-B ", "").Trim();\r
989                 else\r
990                     thisQuery.q_audioBitrate1 = "";\r
991 \r
992                 if (audioBitrate2.Success != false)\r
993                 {\r
994                     string[] audioBitrateSelect = audioBitrate2.ToString().Split(',');\r
995                     thisQuery.q_audioBitrate2 = audioBitrateSelect[1].Trim();\r
996                 }\r
997                 else\r
998                     thisQuery.q_audioBitrate2 = "";\r
999 \r
1000                 // Audio Sample Rate\r
1001                 if (audioSampleRate1.Success != false)\r
1002                     thisQuery.q_audioSamplerate1 = audioSampleRate1.ToString().Replace("-R ", "").Trim();\r
1003 \r
1004                 if (audioSampleRate2.Success != false)\r
1005                 {\r
1006                     string[] audioSRSelect = audioSampleRate2.ToString().Split(',');\r
1007                     thisQuery.q_audioSamplerate2 = audioSRSelect[1].Trim();\r
1008                 }\r
1009 \r
1010 \r
1011                 if (subtitles.Success != false)\r
1012                     thisQuery.q_subtitles = subtitles.ToString().Replace("-s ", "");\r
1013                 else\r
1014                 {\r
1015                     if (subScan.Success)\r
1016                         thisQuery.q_subtitles = "Autoselect";\r
1017                     else\r
1018                         thisQuery.q_subtitles = "None";\r
1019                 }\r
1020 \r
1021                 if (drc.Success != false)\r
1022                 {\r
1023                     string value = drc.ToString().Replace("-D ", "");\r
1024                     float drcValue = float.Parse(value);\r
1025                     drcValue = drcValue * 10;\r
1026                     thisQuery.q_drc = drcValue;\r
1027                 }\r
1028                 else\r
1029                     thisQuery.q_drc = 0;\r
1030 \r
1031                 thisQuery.q_forcedSubs = forcedSubtitles.Success;\r
1032 \r
1033                 #endregion\r
1034 \r
1035                 //\r
1036                 //H264 tab and other \r
1037                 //\r
1038                 #region h264 and other\r
1039                 //\r
1040                 //H264 Tab\r
1041                 //\r
1042                 if (x264.Success != false)\r
1043                 {\r
1044                     thisQuery.q_h264 = x264.ToString().Replace("-x ", "");\r
1045                 }\r
1046 \r
1047                 //\r
1048                 //Progam Options\r
1049                 //\r
1050                 thisQuery.q_verbose = verbose.Success;\r
1051                 #endregion\r
1052             }\r
1053             catch (Exception exc)\r
1054             {\r
1055                 MessageBox.Show("An error has occured in the Query Parser. Please report this error on the forum in the 'Windows' support section. \n\n" + exc.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);\r
1056             }\r
1057             #endregion\r
1058 \r
1059             return thisQuery;\r
1060         }\r
1061     }\r
1062 }