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 XmlNode root = null;
\r
17 if (!File.Exists(filename))
\r
20 StreamReader sr = File.OpenText(filename);
\r
21 string fromfile = string.Empty;
\r
23 while ((fileChar = sr.Read()) != -1)
\r
24 fromfile += Convert.ToChar(fileChar);
\r
26 XmlDocument doc = new XmlDocument();
\r
27 doc.LoadXml(fromfile);
\r
30 if (!root.HasChildNodes)
\r
33 "The Preset file you selected appears to be invlaid or from an older version of HandBrake", "Error",
\r
34 MessageBoxButtons.OK, MessageBoxIcon.Error);
\r
41 "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
42 MessageBoxButtons.OK, MessageBoxIcon.Error);
\r
45 // We'll query a query parser object and use it's public var structures to store all the data.
\r
46 // This will allow the preset loader logic to be used instead of writing custom logic just for this file.
\r
47 QueryParser queryParsed = new QueryParser();
\r
49 /***** Get the Audio Tracks *****/
\r
50 XmlNode audioListDict = root.ChildNodes[2].ChildNodes[0].FirstChild.ChildNodes[1];
\r
51 ArrayList AudioInfo = new ArrayList();
\r
52 for (int i = 0; i < audioListDict.ChildNodes.Count; i++)
\r
54 XmlNode audioChannel = audioListDict.ChildNodes[i];
\r
55 AudioTrack track = new AudioTrack();
\r
57 for (int subi = 0; subi < audioChannel.ChildNodes.Count; subi += 2)
\r
59 // Audio Channel Information is here.
\r
60 string key = audioChannel.ChildNodes[subi].InnerText;
\r
61 string value = audioChannel.ChildNodes[subi + 1].InnerText;
\r
64 case "AudioBitrate":
\r
65 track.Bitrate = value;
\r
67 case "AudioEncoder":
\r
68 track.Encoder = value.Replace("AAC (CoreAudio)", "AAC (faac)");
\r
70 case "AudioMixdown":
\r
71 track.MixDown = value;
\r
73 case "AudioSamplerate":
\r
74 track.SampleRate = value;
\r
77 track.Track = value;
\r
79 case "AudioTrackDRCSlider":
\r
84 AudioInfo.Add(track);
\r
86 queryParsed.AudioInformation = AudioInfo;
\r
88 /***** Get the rest of the settings. *****/
\r
89 XmlNode presetSettings = root.ChildNodes[2].ChildNodes[0].FirstChild;
\r
90 for (int i = 2; i < presetSettings.ChildNodes.Count; i += 2) // Start from 2 to avoid the audio settings which we don't need.
\r
92 string key = presetSettings.ChildNodes[i].InnerText;
\r
93 string value = presetSettings.ChildNodes[i + 1].InnerText;
\r
99 queryParsed.Format = value;
\r
101 case "Mp4HttpOptimize":
\r
102 queryParsed.OptimizeMP4 = value == "1";
\r
104 case "Mp4LargeFile":
\r
105 queryParsed.LargeMP4 = value == "1";
\r
107 case "Mp4iPodCompatible":
\r
108 queryParsed.IpodAtom = value == "1";
\r
111 // Picture Settings
\r
112 case "PictureAutoCrop":
\r
114 case "PictureTopCrop":
\r
115 queryParsed.CropTop = value;
\r
117 case "PictureBottomCrop":
\r
118 queryParsed.CropBottom = value;
\r
120 case "PictureLeftCrop":
\r
121 queryParsed.CropLeft = value;
\r
123 case "PictureRightCrop":
\r
124 queryParsed.CropRight = value;
\r
126 case "PictureHeight":
\r
127 queryParsed.Height = int.Parse(value);
\r
129 case "PictureWidth":
\r
130 queryParsed.Width = int.Parse(value);
\r
132 case "PictureKeepRatio":
\r
133 queryParsed.keepDisplayAsect = value == "1";
\r
136 queryParsed.AnamorphicMode = int.Parse(value);
\r
141 case "PictureDeblock":
\r
142 queryParsed.DeBlock = int.Parse(value);
\r
144 case "PictureDecomb":
\r
145 queryParsed.Decomb = "Off";
\r
146 if (value == "2") queryParsed.Decomb = "Default";
\r
148 case "PictureDecombCustom":
\r
150 queryParsed.Decomb = value;
\r
152 case "PictureDecombDeinterlace":
\r
155 case "PictureDeinterlace":
\r
159 queryParsed.DeInterlace = "Off";
\r
162 queryParsed.DeInterlace = "Fast";
\r
165 queryParsed.DeInterlace = "Slow";
\r
168 queryParsed.DeInterlace = "Slowest";
\r
172 case "PictureDeinterlaceCustom":
\r
174 queryParsed.DeInterlace = value;
\r
176 case "PictureDenoise":
\r
180 queryParsed.DeNoise = "Off";
\r
183 queryParsed.DeNoise = "Weak";
\r
186 queryParsed.DeNoise = "Medium";
\r
189 queryParsed.DeNoise = "Strong";
\r
194 case "PictureDenoiseCustom":
\r
196 queryParsed.DeNoise = value;
\r
198 case "PictureDetelecine":
\r
199 queryParsed.DeTelecine = "Off";
\r
200 if (value == "1") queryParsed.DeTelecine = "Default";
\r
202 case "PictureDetelecineCustom":
\r
204 queryParsed.DeTelecine = value;
\r
208 case "VideoAvgBitrate":
\r
209 queryParsed.Width = int.Parse(value);
\r
211 case "VideoEncoder":
\r
212 queryParsed.VideoEncoder = value;
\r
214 case "VideoFramerate":
\r
215 queryParsed.VideoFramerate = value;
\r
217 case "VideoGrayScale":
\r
218 queryParsed.Grayscale = value == "1";
\r
220 case "VideoQualitySlider":
\r
221 queryParsed.VideoQuality = float.Parse(value);
\r
223 case "VideoQualityType":
\r
225 case "VideoTargetSize":
\r
226 queryParsed.VideoTargetSize = value;
\r
228 case "VideoTurboTwoPass":
\r
229 queryParsed.TurboFirstPass = value == "1";
\r
231 case "VideoTwoPass":
\r
232 queryParsed.TwoPass = value == "1";
\r
235 // Chapter Markers Tab
\r
236 case "ChapterMarkers":
\r
237 queryParsed.ChapterMarkers = value == "1";
\r
240 // Advanced x264 tab
\r
242 queryParsed.H264Query = value;
\r
245 // Preset Information
\r
246 case "PresetBuildNumber":
\r
247 queryParsed.PresetBuildNumber = int.Parse(value);
\r
249 case "PresetDescription":
\r
250 queryParsed.PresetDescription = value;
\r
253 queryParsed.PresetName = value;
\r
256 queryParsed.Type = value;
\r
258 case "UsesMaxPictureSettings":
\r
259 queryParsed.UsesMaxPictureSettings = value == "1";
\r
261 case "UsesPictureFilters":
\r
262 queryParsed.UsesPictureFilters = value == "1";
\r
264 case "UsesPictureSettings":
\r
265 queryParsed.UsesPictureSettings = value == "1";
\r
269 return queryParsed;
\r
272 // --- It's the end of the road
\r