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