OSDN Git Service

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