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
16 if (!File.Exists(filename))
\r
19 StreamReader sr = File.OpenText(filename);
\r
20 string fromfile = string.Empty;
\r
22 while ((fileChar = sr.Read()) != -1)
\r
23 fromfile += Convert.ToChar(fileChar);
\r
25 XmlDocument doc = new XmlDocument();
\r
26 doc.LoadXml(fromfile);
\r
29 if (!root.HasChildNodes)
\r
32 "The Preset file you selected appears to be invlaid or from an older version of HandBrake", "Error",
\r
33 MessageBoxButtons.OK, MessageBoxIcon.Error);
\r
40 "The Preset file you selected appears to be invlaid or from an older version of HandBrake.\n\n Please note, if you are exporting from the MacGui you may need to rebuild your preset so that it uses the current preset plist format.\n The MacGui does not currently update user presets automatically.", "Error",
\r
41 MessageBoxButtons.OK, MessageBoxIcon.Error);
\r
44 // We'll query a query parser object and use it's public var structures to store all the data.
\r
45 // This will allow the preset loader logic to be used instead of writing custom logic just for this file.
\r
46 QueryParser queryParsed = new QueryParser();
\r
48 /***** Get the Audio Tracks *****/
\r
49 XmlNode audioListDict = root.ChildNodes[2].ChildNodes[0].FirstChild.ChildNodes[1];
\r
50 ArrayList AudioInfo = new ArrayList();
\r
51 for (int i = 0; i < audioListDict.ChildNodes.Count; i++)
\r
53 XmlNode audioChannel = audioListDict.ChildNodes[i];
\r
54 AudioTrack track = new AudioTrack();
\r
56 for (int subi = 0; subi < audioChannel.ChildNodes.Count; subi += 2)
\r
58 // Audio Channel Information is here.
\r
59 string key = audioChannel.ChildNodes[subi].InnerText;
\r
60 string value = audioChannel.ChildNodes[subi + 1].InnerText;
\r
63 case "AudioBitrate":
\r
64 track.Bitrate = value;
\r
66 case "AudioEncoder":
\r
67 track.Encoder = value.Replace("AAC (CoreAudio)", "AAC (faac)");
\r
69 case "AudioMixdown":
\r
70 track.MixDown = value;
\r
72 case "AudioSamplerate":
\r
73 track.SampleRate = value;
\r
76 track.Track = value;
\r
78 case "AudioTrackDRCSlider":
\r
83 AudioInfo.Add(track);
\r
85 queryParsed.AudioInformation = AudioInfo;
\r
87 /***** Get the rest of the settings. *****/
\r
88 XmlNode presetSettings = root.ChildNodes[2].ChildNodes[0].FirstChild;
\r
89 for (int i = 2; i < presetSettings.ChildNodes.Count; i += 2) // Start from 2 to avoid the audio settings which we don't need.
\r
91 string key = presetSettings.ChildNodes[i].InnerText;
\r
92 string value = presetSettings.ChildNodes[i + 1].InnerText;
\r
98 queryParsed.Format = value;
\r
100 case "Mp4HttpOptimize":
\r
101 queryParsed.OptimizeMP4 = value == "1";
\r
103 case "Mp4LargeFile":
\r
104 queryParsed.LargeMP4 = value == "1";
\r
106 case "Mp4iPodCompatible":
\r
107 queryParsed.IpodAtom = value == "1";
\r
110 // Picture Settings
\r
111 case "PictureAutoCrop":
\r
113 case "PictureTopCrop":
\r
114 queryParsed.CropTop = value;
\r
116 case "PictureBottomCrop":
\r
117 queryParsed.CropBottom = value;
\r
119 case "PictureLeftCrop":
\r
120 queryParsed.CropLeft = value;
\r
122 case "PictureRightCrop":
\r
123 queryParsed.CropRight = value;
\r
125 case "PictureHeight":
\r
126 queryParsed.Height = int.Parse(value);
\r
128 case "PictureWidth":
\r
129 queryParsed.Width = int.Parse(value);
\r
131 case "PictureKeepRatio":
\r
132 queryParsed.keepDisplayAsect = value == "1";
\r
135 queryParsed.AnamorphicMode = int.Parse(value);
\r
140 case "PictureDeblock":
\r
141 queryParsed.DeBlock = int.Parse(value);
\r
143 case "PictureDecomb":
\r
144 queryParsed.Decomb = "Off";
\r
145 if (value == "2") queryParsed.Decomb = "Default";
\r
147 case "PictureDecombCustom":
\r
149 queryParsed.Decomb = value;
\r
151 case "PictureDecombDeinterlace":
\r
154 case "PictureDeinterlace":
\r
158 queryParsed.DeInterlace = "Off";
\r
161 queryParsed.DeInterlace = "Fast";
\r
164 queryParsed.DeInterlace = "Slow";
\r
167 queryParsed.DeInterlace = "Slowest";
\r
171 case "PictureDeinterlaceCustom":
\r
173 queryParsed.DeInterlace = value;
\r
175 case "PictureDenoise":
\r
179 queryParsed.DeNoise = "Off";
\r
182 queryParsed.DeNoise = "Weak";
\r
185 queryParsed.DeNoise = "Medium";
\r
188 queryParsed.DeNoise = "Strong";
\r
193 case "PictureDenoiseCustom":
\r
195 queryParsed.DeNoise = value;
\r
197 case "PictureDetelecine":
\r
198 queryParsed.DeTelecine = "Off";
\r
199 if (value == "1") queryParsed.DeTelecine = "Default";
\r
201 case "PictureDetelecineCustom":
\r
203 queryParsed.DeTelecine = value;
\r
207 case "VideoAvgBitrate":
\r
208 queryParsed.Width = int.Parse(value);
\r
210 case "VideoEncoder":
\r
211 queryParsed.VideoEncoder = value;
\r
213 case "VideoFramerate":
\r
214 queryParsed.VideoFramerate = value;
\r
216 case "VideoGrayScale":
\r
217 queryParsed.Grayscale = value == "1";
\r
219 case "VideoQualitySlider":
\r
220 queryParsed.VideoQuality = float.Parse(value);
\r
222 case "VideoQualityType":
\r
224 case "VideoTargetSize":
\r
225 queryParsed.VideoTargetSize = value;
\r
227 case "VideoTurboTwoPass":
\r
228 queryParsed.TurboFirstPass = value == "1";
\r
230 case "VideoTwoPass":
\r
231 queryParsed.TwoPass = value == "1";
\r
234 // Chapter Markers Tab
\r
235 case "ChapterMarkers":
\r
236 queryParsed.ChapterMarkers = value == "1";
\r
239 // Advanced x264 tab
\r
241 queryParsed.H264Query = value;
\r
244 // Preset Information
\r
245 case "PresetBuildNumber":
\r
246 queryParsed.PresetBuildNumber = int.Parse(value);
\r
248 case "PresetDescription":
\r
249 queryParsed.PresetDescription = value;
\r
252 queryParsed.PresetName = value;
\r
255 queryParsed.Type = value;
\r
257 case "UsesMaxPictureSettings":
\r
258 queryParsed.UsesMaxPictureSettings = value == "1";
\r
260 case "UsesPictureFilters":
\r
261 queryParsed.UsesPictureFilters = value == "1";
\r
263 case "UsesPictureSettings":
\r
264 queryParsed.UsesPictureSettings = value == "1";
\r
268 return queryParsed;
\r
271 // --- It's the end of the road
\r