4 using System.Windows.Forms;
\r
5 using System.Collections;
\r
6 using Handbrake.Functions;
\r
8 namespace Handbrake.Presets
\r
12 public QueryParser importMacPreset(string filename)
\r
14 if (!File.Exists(filename))
\r
17 StreamReader sr = File.OpenText(filename);
\r
18 string fromfile = string.Empty;
\r
20 while ((fileChar = sr.Read()) != -1)
\r
21 fromfile += Convert.ToChar(fileChar);
\r
23 XmlDocument doc = new XmlDocument();
\r
24 doc.LoadXml(fromfile);
\r
27 if (!root.HasChildNodes)
\r
30 "The Preset file you selected appears to be invlaid or from an older version of HandBrake", "Error",
\r
31 MessageBoxButtons.OK, MessageBoxIcon.Error);
\r
35 // We'll query a query parser object and use it's public var structures to store all the data.
\r
36 // This will allow the preset loader logic to be used instead of writing custom logic just for this file.
\r
37 QueryParser queryParsed = new QueryParser();
\r
39 /***** Get the Audio Tracks *****/
\r
40 XmlNode audioListDict = root.ChildNodes[2].ChildNodes[0].FirstChild.ChildNodes[1];
\r
41 ArrayList AudioInfo = new ArrayList();
\r
42 for (int i = 0; i < audioListDict.ChildNodes.Count; i++)
\r
44 XmlNode audioChannel = audioListDict.ChildNodes[i];
\r
45 AudioTrack track = new AudioTrack();
\r
47 for (int subi = 0; subi < audioChannel.ChildNodes.Count; subi += 2)
\r
49 // Audio Channel Information is here.
\r
50 string key = audioChannel.ChildNodes[subi].InnerText;
\r
51 string value = audioChannel.ChildNodes[subi + 1].InnerText;
\r
54 case "AudioBitrate":
\r
55 track.Bitrate = value;
\r
57 case "AudioEncoder":
\r
58 track.Encoder = value.Replace("AAC (CoreAudio)", "AAC (faac)");
\r
60 case "AudioMixdown":
\r
61 track.MixDown = value;
\r
63 case "AudioSamplerate":
\r
64 track.SampleRate = value;
\r
67 track.Track = value;
\r
69 case "AudioTrackDRCSlider":
\r
74 AudioInfo.Add(track);
\r
76 queryParsed.AudioInformation = AudioInfo;
\r
78 /***** Get the rest of the settings. *****/
\r
79 XmlNode presetSettings = root.ChildNodes[2].ChildNodes[0].FirstChild;
\r
80 for (int i = 2; i < presetSettings.ChildNodes.Count; i += 2) // Start from 2 to avoid the audio settings which we don't need.
\r
82 string key = presetSettings.ChildNodes[i].InnerText;
\r
83 string value = presetSettings.ChildNodes[i + 1].InnerText;
\r
89 queryParsed.Format = value;
\r
91 case "Mp4HttpOptimize":
\r
92 queryParsed.OptimizeMP4 = value == "1";
\r
94 case "Mp4LargeFile":
\r
95 queryParsed.LargeMP4 = value == "1";
\r
97 case "Mp4iPodCompatible":
\r
98 queryParsed.IpodAtom = value == "1";
\r
101 // Picture Settings
\r
102 case "PictureAutoCrop":
\r
104 case "PictureTopCrop":
\r
105 queryParsed.CropTop = value;
\r
107 case "PictureBottomCrop":
\r
108 queryParsed.CropBottom = value;
\r
110 case "PictureLeftCrop":
\r
111 queryParsed.CropLeft = value;
\r
113 case "PictureRightCrop":
\r
114 queryParsed.CropRight = value;
\r
116 case "PictureHeight":
\r
117 queryParsed.Height = int.Parse(value);
\r
119 case "PictureWidth":
\r
120 queryParsed.Width = int.Parse(value);
\r
122 case "PictureKeepRatio":
\r
123 queryParsed.keepDisplayAsect = value == "1";
\r
126 queryParsed.AnamorphicMode = int.Parse(value);
\r
131 case "PictureDeblock":
\r
132 queryParsed.DeBlock = int.Parse(value);
\r
134 case "PictureDecomb":
\r
135 queryParsed.Decomb = "Off";
\r
136 if (value == "2") queryParsed.Decomb = "Default";
\r
138 case "PictureDecombCustom":
\r
140 queryParsed.Decomb = value;
\r
142 case "PictureDecombDeinterlace":
\r
145 case "PictureDeinterlace":
\r
149 queryParsed.DeInterlace = "Off";
\r
152 queryParsed.DeInterlace = "Fast";
\r
155 queryParsed.DeInterlace = "Slow";
\r
158 queryParsed.DeInterlace = "Slowest";
\r
162 case "PictureDeinterlaceCustom":
\r
164 queryParsed.DeInterlace = value;
\r
166 case "PictureDenoise":
\r
170 queryParsed.DeNoise = "Off";
\r
173 queryParsed.DeNoise = "Weak";
\r
176 queryParsed.DeNoise = "Medium";
\r
179 queryParsed.DeNoise = "Strong";
\r
184 case "PictureDenoiseCustom":
\r
186 queryParsed.DeNoise = value;
\r
188 case "PictureDetelecine":
\r
189 queryParsed.DeTelecine = "Off";
\r
190 if (value == "1") queryParsed.DeTelecine = "Default";
\r
192 case "PictureDetelecineCustom":
\r
194 queryParsed.DeTelecine = value;
\r
198 case "VideoAvgBitrate":
\r
199 queryParsed.Width = int.Parse(value);
\r
201 case "VideoEncoder":
\r
202 queryParsed.VideoEncoder = value;
\r
204 case "VideoFramerate":
\r
205 queryParsed.VideoFramerate = value;
\r
207 case "VideoGrayScale":
\r
208 queryParsed.Grayscale = value == "1";
\r
210 case "VideoQualitySlider":
\r
211 queryParsed.VideoQuality = float.Parse(value);
\r
213 case "VideoQualityType":
\r
215 case "VideoTargetSize":
\r
216 queryParsed.VideoTargetSize = value;
\r
218 case "VideoTurboTwoPass":
\r
219 queryParsed.TurboFirstPass = value == "1";
\r
221 case "VideoTwoPass":
\r
222 queryParsed.TwoPass = value == "1";
\r
225 // Chapter Markers Tab
\r
226 case "ChapterMarkers":
\r
227 queryParsed.ChapterMarkers = value == "1";
\r
230 // Advanced x264 tab
\r
232 queryParsed.H264Query = value;
\r
235 // Preset Information
\r
236 case "PresetBuildNumber":
\r
237 queryParsed.PresetBuildNumber = int.Parse(value);
\r
239 case "PresetDescription":
\r
240 queryParsed.PresetDescription = value;
\r
243 queryParsed.PresetName = value;
\r
246 queryParsed.Type = value;
\r
248 case "UsesMaxPictureSettings":
\r
249 queryParsed.UsesMaxPictureSettings = value == "1";
\r
251 case "UsesPictureFilters":
\r
252 queryParsed.UsesPictureFilters = value == "1";
\r
254 case "UsesPictureSettings":
\r
255 queryParsed.UsesPictureSettings = value == "1";
\r
259 return queryParsed;
\r
262 // --- It's the end of the road
\r