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