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