OSDN Git Service

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