OSDN Git Service

WinGui:
[handbrake-jp/handbrake-jp-git.git] / win / C# / Controls / AudioPanel.cs
1 /*  AudioPanel.cs $\r
2     This file is part of the HandBrake source code.\r
3     Homepage: <http://handbrake.fr>.\r
4     It may be used under the terms of the GNU General Public License. */\r
5 \r
6 namespace Handbrake.Controls\r
7 {\r
8     using System;\r
9     using System.Collections;\r
10     using System.Linq;\r
11     using System.Windows.Forms;\r
12     using Functions;\r
13 \r
14     using HandBrake.ApplicationServices.Parsing;\r
15 \r
16     using Presets;\r
17     using AudioTrack = Model.AudioTrack;\r
18 \r
19     /// <summary>\r
20     /// The AudioPanel Control\r
21     /// </summary>\r
22     public partial class AudioPanel : UserControl\r
23     {\r
24         /// <summary>\r
25         /// Initializes a new instance of the <see cref="AudioPanel"/> class. \r
26         /// Create a new instance of the Audio Panel\r
27         /// </summary>\r
28         public AudioPanel()\r
29         {\r
30             InitializeComponent();\r
31             drp_audioMix.SelectedItem = "Dolby Pro Logic II";\r
32             drp_audioSample.SelectedIndex = 1;\r
33         }\r
34 \r
35         /// <summary>\r
36         /// The audio list has changed\r
37         /// </summary>\r
38         public event EventHandler AudioListChanged;\r
39 \r
40         /// <summary>\r
41         /// Get the audio panel\r
42         /// </summary>\r
43         /// <returns>A listview containing the audio tracks</returns>\r
44         public DataGridView GetAudioPanel()\r
45         {\r
46             return audioList;\r
47         }\r
48 \r
49         /// <summary>\r
50         /// Set the File Container. This funciton is used to limit the available options for each file container.\r
51         /// </summary>\r
52         /// <param name="path">\r
53         /// the file path\r
54         /// </param>\r
55         public void SetContainer(string path)\r
56         {\r
57             string oldval = drp_audioEncoder.Text;\r
58             if ((path.Contains("MP4")) || (path.Contains("M4V")))\r
59             {\r
60                 drp_audioEncoder.Items.Clear();\r
61                 drp_audioEncoder.Items.Add("AAC (faac)");\r
62                 drp_audioEncoder.Items.Add("MP3 (lame)");\r
63                 drp_audioEncoder.Items.Add("AC3 Passthru");\r
64                 if ((oldval != "AAC (faac)") && (oldval != "AC3 Passthru"))\r
65                     drp_audioEncoder.SelectedIndex = 0;\r
66                 else\r
67                     drp_audioEncoder.SelectedItem = oldval;\r
68             }\r
69             else if (path.Contains("MKV"))\r
70             {\r
71                 drp_audioEncoder.Items.Clear();\r
72                 drp_audioEncoder.Items.Add("AAC (faac)");\r
73                 drp_audioEncoder.Items.Add("MP3 (lame)");\r
74                 drp_audioEncoder.Items.Add("AC3 Passthru");\r
75                 drp_audioEncoder.Items.Add("DTS Passthru");\r
76                 drp_audioEncoder.Items.Add("Vorbis (vorbis)");\r
77                 drp_audioEncoder.SelectedItem = oldval;\r
78 \r
79                 if (drp_audioEncoder.Text == string.Empty)\r
80                     drp_audioEncoder.SelectedIndex = 0;\r
81             }\r
82 \r
83             // Make sure the table is updated with new audio codecs\r
84             foreach (DataGridViewRow row in audioList.Rows)\r
85             {\r
86                 if (!drp_audioEncoder.Items.Contains(row.Cells[2].Value))\r
87                     row.Cells[2].Value = drp_audioEncoder.Items[0].ToString();\r
88             }\r
89         }\r
90 \r
91         /// <summary>\r
92         /// Checks if the settings used required the .m4v (rather than .mp4) extension\r
93         /// </summary>\r
94         /// <returns>True if m4v is required</returns>\r
95         public bool RequiresM4V()\r
96         {\r
97             return this.audioList.Rows.Cast<DataGridViewRow>().Any(row => row.Cells[2].Value.ToString().Contains("AC3"));\r
98         }\r
99 \r
100         /// <summary>\r
101         /// Load an arraylist of AudioTrack items into the list.\r
102         /// </summary>\r
103         /// <param name="audioTracks">List of audio tracks</param>\r
104         public void LoadTracks(ArrayList audioTracks)\r
105         {\r
106             ClearAudioList();\r
107 \r
108             if (audioTracks == null)\r
109                 return;\r
110 \r
111             foreach (AudioTrack track in audioTracks)\r
112             {\r
113                 DataGridViewRow newTrack = new DataGridViewRow();\r
114                 newTrack.CreateCells(audioList);\r
115                 newTrack.Cells[0].Value = GetNewID().ToString();\r
116                 newTrack.Cells[1].Value = "Automatic";\r
117                 newTrack.Cells[2].Value = track.Encoder;\r
118                 newTrack.Cells[3].Value = track.MixDown;\r
119                 newTrack.Cells[4].Value = track.SampleRate;\r
120                 newTrack.Cells[5].Value = track.Encoder.Contains("AC3") ? "Auto" : track.Bitrate;\r
121                 newTrack.Cells[6].Value = track.DRC;\r
122                 AddTrackForPreset(newTrack);\r
123             }\r
124         }\r
125 \r
126         /// <summary>\r
127         /// Set the Track list dropdown from the parsed title captured during the scan\r
128         /// </summary>\r
129         /// <param name="selectedTitle">The selected title</param>\r
130         /// <param name="preset">A preset</param>\r
131         public void SetTrackList(Title selectedTitle, Preset preset)\r
132         {\r
133             if (selectedTitle.AudioTracks.Count == 0)\r
134             {\r
135                 audioList.Rows.Clear();\r
136                 drp_audioTrack.Items.Clear();\r
137                 drp_audioTrack.Items.Add("None Found");\r
138                 drp_audioTrack.SelectedIndex = 0;\r
139                 return;\r
140             }\r
141 \r
142             // The Source Information for the title will have changed, so set all the tracks to Automatic.\r
143             foreach (DataGridViewRow row in this.audioList.Rows)\r
144             {\r
145                 row.Cells[1].Value = "Automatic";\r
146             }\r
147 \r
148             // Setup the Audio track source dropdown with the new audio tracks.\r
149             drp_audioTrack.Items.Clear();\r
150             drp_audioTrack.Items.Add("Automatic");\r
151             drp_audioTrack.Items.AddRange(selectedTitle.AudioTracks.ToArray());\r
152 \r
153             // Re-add any audio tracks that the preset has.\r
154             if (audioList.Rows.Count == 0 && preset != null)\r
155             {\r
156                 QueryParser parsed = QueryParser.Parse(preset.Query);\r
157                 foreach (AudioTrack audioTrack in parsed.AudioInformation)\r
158                 {\r
159                     DataGridViewRow newTrack = new DataGridViewRow();\r
160                     newTrack.CreateCells(audioList);\r
161                     newTrack.Cells[0].Value = GetNewID().ToString();\r
162                     newTrack.Cells[1].Value = (audioTrack.Track);\r
163                     newTrack.Cells[2].Value = (audioTrack.Encoder);\r
164                     newTrack.Cells[3].Value = (audioTrack.MixDown);\r
165                     newTrack.Cells[4].Value = (audioTrack.SampleRate);\r
166                     newTrack.Cells[5].Value = (audioTrack.Bitrate);\r
167                     newTrack.Cells[6].Value = (audioTrack.DRC);\r
168                     audioList.Rows.Add(newTrack);\r
169                 }\r
170             }\r
171 \r
172             // Handle Native Language and "Dub Foreign language audio" and "Use Foreign language audio and Subtitles" Options\r
173             if (Properties.Settings.Default.NativeLanguage == "Any")\r
174                 drp_audioTrack.SelectedIndex = drp_audioTrack.Items.Count >= 2 ? 1 : 0;\r
175             else\r
176             {\r
177                 if (Properties.Settings.Default.DubMode > 1) // "Dub Foreign language audio" \r
178                 {\r
179                     int i = 0;\r
180                     foreach (object item in drp_audioTrack.Items)\r
181                     {\r
182                         if (item.ToString().Contains(Properties.Settings.Default.NativeLanguage))\r
183                         {\r
184                             drp_audioTrack.SelectedIndex = i;\r
185                             break;\r
186                         }\r
187 \r
188                         i++;\r
189                     }\r
190 \r
191                     if (drp_audioTrack.SelectedItem != null)\r
192                         foreach (DataGridViewRow item in audioList.Rows)\r
193                             item.Cells[1].Value = drp_audioTrack.SelectedItem.ToString();\r
194                     else\r
195                     {\r
196                         drp_audioTrack.SelectedIndex = 0;\r
197                         if (drp_audioTrack.SelectedItem != null)\r
198                             foreach (DataGridViewRow item in audioList.Rows)\r
199                                 item.Cells[1].Value = drp_audioTrack.SelectedItem.ToString();\r
200                     }\r
201                 }\r
202                 else\r
203                     drp_audioTrack.SelectedIndex = drp_audioTrack.Items.Count >= 3 ? 2 : 0;\r
204                 // "Use Foreign language audio and Subtitles"\r
205             }\r
206         }\r
207 \r
208         // Control and ListView\r
209 \r
210         /// <summary>\r
211         /// one of the controls has changed. Event handler\r
212         /// </summary>\r
213         /// <param name="sender">\r
214         /// The sender.\r
215         /// </param>\r
216         /// <param name="e">\r
217         /// The e.\r
218         /// </param>\r
219         private void controlChanged(object sender, EventArgs e)\r
220         {\r
221             Control ctl = (Control)sender;\r
222 \r
223             switch (ctl.Name)\r
224             {\r
225                 case "drp_audioTrack":\r
226                     if (audioList.Rows.Count != 0 && audioList.SelectedRows.Count != 0)\r
227                     {\r
228                         audioList.SelectedRows[0].Cells[1].Value = drp_audioTrack.Text;\r
229 \r
230                         // If the track isn't AC3, and the encoder is, change it.\r
231                         if (audioList.SelectedRows[0].Cells[2].Value.ToString().Contains("AC3") && !audioList.SelectedRows[0].Cells[1].Value.ToString().Contains("AC3"))\r
232                         {\r
233                             // Switch to AAC\r
234                             drp_audioEncoder.SelectedIndex = 0;\r
235                         }\r
236 \r
237                         // If the track isn't DTS, and the encoder is, change it.\r
238                         if (audioList.SelectedRows[0].Cells[2].Value.ToString().Contains("DTS") && !audioList.SelectedRows[0].Cells[1].Value.ToString().Contains("DTS"))\r
239                         {\r
240                             // Switch to AAC\r
241                             drp_audioEncoder.SelectedIndex = 0;\r
242                         }\r
243                     }\r
244                     break;\r
245                 case "drp_audioEncoder":\r
246                     SetMixDown();\r
247                     SetBitrate();\r
248 \r
249                     // Configure the widgets with values\r
250                     if (drp_audioEncoder.Text.Contains("AC3") || drp_audioEncoder.Text.Contains("DTS"))\r
251                     {\r
252                         drp_audioMix.Enabled =\r
253                             drp_audioBitrate.Enabled = drp_audioSample.Enabled = tb_drc.Enabled = false;\r
254                         lbl_bitrate.Enabled =\r
255                             lbl_drc.Enabled =\r
256                             lbl_drcHeader.Enabled = lbl_mixdown.Enabled = lbl_sampleRate.Enabled = false;\r
257                     }\r
258                     else\r
259                     {\r
260                         drp_audioMix.Enabled =\r
261                             drp_audioBitrate.Enabled = drp_audioSample.Enabled = tb_drc.Enabled = true;\r
262                         lbl_bitrate.Enabled =\r
263                             lbl_drc.Enabled =\r
264                             lbl_drcHeader.Enabled = lbl_mixdown.Enabled = lbl_sampleRate.Enabled = true;\r
265                     }\r
266 \r
267                     // Update an item in the Audio list if required.\r
268                     if (audioList.Rows.Count != 0 && audioList.SelectedRows.Count != 0)\r
269                         audioList.SelectedRows[0].Cells[2].Value = drp_audioEncoder.Text;\r
270                     break;\r
271                 case "drp_audioMix":\r
272                     SetBitrate();\r
273 \r
274                     if (audioList.Rows.Count != 0 && audioList.SelectedRows.Count != 0)\r
275                         audioList.SelectedRows[0].Cells[3].Value = drp_audioMix.Text;\r
276                     break;\r
277                 case "drp_audioSample":\r
278                     if (audioList.Rows.Count != 0 && audioList.SelectedRows.Count != 0)\r
279                         audioList.SelectedRows[0].Cells[4].Value = drp_audioSample.Text;\r
280                     break;\r
281                 case "drp_audioBitrate":\r
282                     // Update an item in the Audio list if required.\r
283                     if (audioList.Rows.Count != 0 && audioList.SelectedRows.Count != 0)\r
284                         audioList.SelectedRows[0].Cells[5].Value = drp_audioBitrate.Text;\r
285                     break;\r
286                 case "tb_drc":\r
287                     double value;\r
288                     if (tb_drc.Value == 0) value = 0;\r
289                     else\r
290                         value = ((tb_drc.Value - 1) / 10.0) + 1;\r
291 \r
292                     lbl_drc.Text = value.ToString();\r
293 \r
294                     // Update an item in the Audio list if required.\r
295                     if (audioList.Rows.Count != 0 && audioList.SelectedRows.Count != 0)\r
296                     {\r
297                         audioList.SelectedRows[0].Cells[6].Value = value.ToString();\r
298                         audioList.Select();\r
299                     }\r
300                     break;\r
301             }\r
302 \r
303             audioList.Select();\r
304         }\r
305 \r
306         /// <summary>\r
307         /// The Audio List selected index changed event handler\r
308         /// </summary>\r
309         /// <param name="sender">\r
310         /// The sender.\r
311         /// </param>\r
312         /// <param name="e">\r
313         /// The e.\r
314         /// </param>\r
315         private void audioList_SelectionChanged(object sender, EventArgs e)\r
316         {\r
317             // Set the dropdown controls based on the selected item in the Audio List.\r
318             if (audioList.Rows.Count != 0 && audioList.SelectedRows.Count != 0)\r
319             {\r
320                 drp_audioTrack.SelectedItem = audioList.SelectedRows[0].Cells[1].Value;\r
321                 drp_audioEncoder.SelectedItem = audioList.SelectedRows[0].Cells[2].Value;\r
322                 drp_audioMix.SelectedItem = audioList.SelectedRows[0].Cells[3].Value;\r
323                 drp_audioSample.SelectedItem = audioList.SelectedRows[0].Cells[4].Value;\r
324                 drp_audioBitrate.SelectedItem = audioList.SelectedRows[0].Cells[5].Value;\r
325                 double drcValue;\r
326                 int drcCalculated;\r
327                 double.TryParse(audioList.SelectedRows[0].Cells[6].Value.ToString(), out drcValue);\r
328                 if (drcValue != 0)\r
329                     drcValue = ((drcValue * 10) + 1) - 10;\r
330                 int.TryParse(drcValue.ToString(), out drcCalculated);\r
331                 tb_drc.Value = drcCalculated;\r
332                 lbl_drc.Text = audioList.SelectedRows[0].Cells[6].Value.ToString();\r
333 \r
334                 AudioTrackGroup.Text = "Selected Track: " + audioList.SelectedRows[0].Cells[0].Value;\r
335             }\r
336             else\r
337                 AudioTrackGroup.Text = "Selected Track: None (Click \"Add Track\" to add)";\r
338         }\r
339 \r
340         // Track Controls\r
341 \r
342         /// <summary>\r
343         /// The Add Audio Track button event handler\r
344         /// </summary>\r
345         /// <param name="sender">\r
346         /// The sender.\r
347         /// </param>\r
348         /// <param name="e">\r
349         /// The e.\r
350         /// </param>\r
351         private void btn_addAudioTrack_Click(object sender, EventArgs e)\r
352         {\r
353             if (drp_audioTrack.Text == "None Found")\r
354             {\r
355                 MessageBox.Show(\r
356                     "Your source appears to have no audio tracks that HandBrake supports.",\r
357                     "Warning",\r
358                     MessageBoxButtons.OK,\r
359                     MessageBoxIcon.Warning);\r
360                 return;\r
361             }\r
362 \r
363             double value = 0;\r
364             if (tb_drc.Value != 0)\r
365                 value = ((tb_drc.Value - 1) / 10.0) + 1;\r
366 \r
367             // Create a new row for the Audio list based on the currently selected items in the dropdown.\r
368             DataGridViewRow newTrack = new DataGridViewRow();\r
369             newTrack.CreateCells(audioList);\r
370             newTrack.Cells[0].Value = GetNewID().ToString();\r
371             newTrack.Cells[1].Value = drp_audioTrack.Text;\r
372             newTrack.Cells[2].Value = drp_audioEncoder.Text;\r
373             newTrack.Cells[3].Value = drp_audioMix.Text;\r
374             newTrack.Cells[4].Value = drp_audioSample.Text;\r
375             newTrack.Cells[5].Value = drp_audioBitrate.Text;\r
376             newTrack.Cells[6].Value = value.ToString();\r
377             audioList.Rows.Add(newTrack);\r
378 \r
379             // The Audio List has changed to raise the event.\r
380             if (this.AudioListChanged != null)\r
381                 this.AudioListChanged(this, new EventArgs());\r
382 \r
383             // Select the newly added track and select the control       \r
384             audioList.ClearSelection();\r
385             audioList.Rows[audioList.Rows.Count - 1].Selected = true;\r
386             audioList.Select();\r
387         }\r
388 \r
389         /// <summary>\r
390         /// The Remove Track button event handler\r
391         /// </summary>\r
392         /// <param name="sender">\r
393         /// The sender.\r
394         /// </param>\r
395         /// <param name="e">\r
396         /// The e.\r
397         /// </param>\r
398         private void btn_RemoveAudioTrack_Click(object sender, EventArgs e)\r
399         {\r
400             RemoveTrack();\r
401         }\r
402 \r
403         // Audio List Menu\r
404 \r
405         /// <summary>\r
406         /// The Audio List Move Up menu item\r
407         /// </summary>\r
408         /// <param name="sender">\r
409         /// The sender.\r
410         /// </param>\r
411         /// <param name="e">\r
412         /// The e.\r
413         /// </param>\r
414         private void audioList_moveup_Click(object sender, EventArgs e)\r
415         {\r
416             MoveTrack(true);\r
417         }\r
418 \r
419         /// <summary>\r
420         /// The audio list move down menu item\r
421         /// </summary>\r
422         /// <param name="sender">\r
423         /// The sender.\r
424         /// </param>\r
425         /// <param name="e">\r
426         /// The e.\r
427         /// </param>\r
428         private void audioList_movedown_Click(object sender, EventArgs e)\r
429         {\r
430             MoveTrack(false);\r
431         }\r
432 \r
433         /// <summary>\r
434         /// The audio list remove menu item\r
435         /// </summary>\r
436         /// <param name="sender">\r
437         /// The sender.\r
438         /// </param>\r
439         /// <param name="e">\r
440         /// The e.\r
441         /// </param>\r
442         private void audioList_remove_Click(object sender, EventArgs e)\r
443         {\r
444             RemoveTrack();\r
445         }\r
446 \r
447         // Private Functions\r
448 \r
449         /// <summary>\r
450         /// Add track for preset\r
451         /// </summary>\r
452         /// <param name="item">\r
453         /// The item.\r
454         /// </param>\r
455         private void AddTrackForPreset(DataGridViewRow item)\r
456         {\r
457             audioList.Rows.Add(item);\r
458             if (this.AudioListChanged != null)\r
459                 this.AudioListChanged(this, new EventArgs());\r
460         }\r
461 \r
462         /// <summary>\r
463         /// Clear the audio list\r
464         /// </summary>\r
465         private void ClearAudioList()\r
466         {\r
467             audioList.Rows.Clear();\r
468             if (this.AudioListChanged != null)\r
469                 this.AudioListChanged(this, new EventArgs());\r
470         }\r
471 \r
472         /// <summary>\r
473         /// Get a new ID for the next audio track\r
474         /// </summary>\r
475         /// <returns>\r
476         /// an int\r
477         /// </returns>\r
478         private int GetNewID()\r
479         {\r
480             return audioList.Rows.Count + 1;\r
481         }\r
482 \r
483         /// <summary>\r
484         /// Remove an audio track from the list\r
485         /// </summary>\r
486         private void RemoveTrack()\r
487         {\r
488             // Remove the Item and reselect the control if the following conditions are met.\r
489             if (audioList.SelectedRows.Count != 0)\r
490             {\r
491                 // The Audio List is about to change so raise the event.\r
492                 if (this.AudioListChanged != null)\r
493                     this.AudioListChanged(this, new EventArgs());\r
494 \r
495                 // Record the current selected index.\r
496                 int currentPosition = audioList.SelectedRows[0].Index;\r
497 \r
498                 audioList.Rows.Remove(audioList.SelectedRows[0]);\r
499 \r
500                 // Now reslect the correct item and give focus to the audio list.\r
501                 if (audioList.Rows.Count != 0)\r
502                 {\r
503                     audioList.ClearSelection();\r
504                     if (currentPosition <= (audioList.Rows.Count - 1))\r
505                         audioList.Rows[currentPosition].Selected = true;\r
506                     else if (currentPosition > (audioList.Rows.Count - 1))\r
507                         audioList.Rows[audioList.Rows.Count - 1].Selected = true;\r
508 \r
509                     audioList.Select();\r
510                 }\r
511                 // Regenerate the ID numers\r
512                 ReGenerateListIDs();\r
513             }\r
514         }\r
515 \r
516         /// <summary>\r
517         /// Move an audio track up or down the audio list\r
518         /// </summary>\r
519         /// <param name="up">\r
520         /// The up.\r
521         /// </param>\r
522         private void MoveTrack(bool up)\r
523         {\r
524             if (audioList.SelectedRows.Count == 0) return;\r
525 \r
526             DataGridViewRow item = audioList.SelectedRows[0];\r
527             int index = item.Index;\r
528 \r
529             if (up) index--;\r
530             else index++;\r
531     \r
532             if (index < audioList.Rows.Count || (audioList.Rows.Count > index && index >= 0))\r
533             {\r
534                 audioList.Rows.Remove(item);\r
535                 audioList.Rows.Insert(index, item);\r
536                 audioList.ClearSelection();\r
537                 item.Selected = true;\r
538             }\r
539         }\r
540 \r
541         /// <summary>\r
542         /// Regenerate all the audio track id's on the audio list\r
543         /// </summary>\r
544         private void ReGenerateListIDs()\r
545         {\r
546             int i = 1;\r
547             foreach (DataGridViewRow item in audioList.Rows)\r
548             {\r
549                 item.Cells[0].Value = i.ToString();\r
550                 i++;\r
551             }\r
552         }\r
553 \r
554         /// <summary>\r
555         /// Set the bitrate dropdown\r
556         /// </summary>\r
557         private void SetBitrate()\r
558         {\r
559             int max = 0;\r
560             drp_audioBitrate.Items.Remove("Auto");\r
561             drp_audioBitrate.Items.Remove("192");\r
562             drp_audioBitrate.Items.Remove("224");\r
563             drp_audioBitrate.Items.Remove("256");\r
564             drp_audioBitrate.Items.Remove("320");\r
565             drp_audioBitrate.Items.Remove("384");\r
566             drp_audioBitrate.Items.Remove("448");\r
567             drp_audioBitrate.Items.Remove("768");\r
568 \r
569             switch (drp_audioEncoder.Text)\r
570             {\r
571                 case "AAC (faac)":\r
572                     max = drp_audioMix.Text.Contains("6 Channel") ? 768 : 320;\r
573                     break;\r
574                 case "MP3 (lame)":\r
575                     max = 320;\r
576                     break;\r
577                 case "Vorbis (vorbis)":\r
578                     max = 384;\r
579                     break;\r
580                 case "AC3 Passthru":\r
581                     drp_audioBitrate.Items.Add("Auto");\r
582                     drp_audioBitrate.SelectedItem = "Auto";\r
583                     drp_audioSample.SelectedItem = "Auto";\r
584                     break;\r
585                 case "DTS Passthru":\r
586                     drp_audioBitrate.Items.Add("Auto");\r
587                     drp_audioBitrate.SelectedItem = "Auto";\r
588                     drp_audioSample.SelectedItem = "Auto";\r
589                     break;\r
590             }\r
591 \r
592             if (max > 160)\r
593             {\r
594                 drp_audioBitrate.Items.Add("192");\r
595                 drp_audioBitrate.Items.Add("224");\r
596                 drp_audioBitrate.Items.Add("256");\r
597                 drp_audioBitrate.Items.Add("320");\r
598             }\r
599 \r
600             if (max > 320)\r
601             {\r
602                 drp_audioBitrate.Items.Add("384");\r
603             }\r
604 \r
605             if (max == 768)\r
606             {\r
607                 drp_audioBitrate.Items.Add("448");\r
608                 drp_audioBitrate.Items.Add("768");\r
609             }\r
610 \r
611             if (drp_audioBitrate.SelectedItem == null)\r
612                 drp_audioBitrate.SelectedIndex = drp_audioBitrate.Items.Count - 1;\r
613         }\r
614 \r
615         /// <summary>\r
616         /// Set the mixdown dropdown\r
617         /// </summary>\r
618         private void SetMixDown()\r
619         {\r
620             drp_audioMix.Items.Clear();\r
621             drp_audioMix.Items.Add("Mono");\r
622             drp_audioMix.Items.Add("Stereo");\r
623             drp_audioMix.Items.Add("Dolby Surround");\r
624             drp_audioMix.Items.Add("Dolby Pro Logic II");\r
625             drp_audioMix.Items.Add("6 Channel Discrete");\r
626             drp_audioMix.Items.Add("AC3 Passthru");\r
627             drp_audioMix.Items.Add("DTS Passthru");\r
628 \r
629             drp_audioMix.SelectedItem = "Dolby Pro Logic II";\r
630 \r
631             switch (drp_audioEncoder.Text)\r
632             {\r
633                 case "AAC (faac)":\r
634                     drp_audioMix.Items.Remove("AC3 Passthru");\r
635                     drp_audioMix.Items.Remove("DTS Passthru");\r
636                     break;\r
637                 case "MP3 (lame)":\r
638                     drp_audioMix.Items.Remove("6 Channel Discrete");\r
639                     drp_audioMix.Items.Remove("AC3 Passthru");\r
640                     drp_audioMix.Items.Remove("DTS Passthru");\r
641                     break;\r
642                 case "Vorbis (vorbis)":\r
643                     drp_audioMix.Items.Remove("AC3 Passthru");\r
644                     drp_audioMix.Items.Remove("DTS Passthru");\r
645                     break;\r
646                 case "AC3 Passthru":\r
647                     drp_audioMix.SelectedItem = "AC3 Passthru";\r
648                     break;\r
649                 case "DTS Passthru":\r
650                     drp_audioMix.SelectedItem = "DTS Passthru";\r
651                     break;\r
652             }\r
653         }\r
654     }\r
655 }