3 This file is part of the HandBrake source code.
\r
4 Homepage: <http://handbrake.fr>.
\r
5 It may be used under the terms of the GNU General Public License. */
\r
8 using System.Windows.Forms;
\r
10 namespace Handbrake.Controls
\r
12 public partial class AudioPanel : UserControl
\r
16 InitializeComponent();
\r
19 // Audio Track Options
\r
20 private void drp_track1Audio_SelectedIndexChanged(object sender, EventArgs e)
\r
22 if (lv_audioList.Items.Count != 0 && lv_audioList.SelectedIndices.Count != 0)
\r
24 lv_audioList.Items[lv_audioList.SelectedIndices[0]].SubItems[1].Text = drp_track1Audio.Text;
\r
25 lv_audioList.Select();
\r
29 private void drp_audenc_1_SelectedIndexChanged(object sender, EventArgs e)
\r
31 if (drp_audenc_1.Text.Contains("AC3") || drp_audenc_1.Text.Contains("DTS"))
\r
33 drp_audmix_1.Enabled = false;
\r
34 drp_audbit_1.Enabled = false;
\r
35 drp_audsr_1.Enabled = false;
\r
37 drp_audmix_1.SelectedIndex = 0;
\r
38 drp_audbit_1.SelectedIndex = 0;
\r
39 drp_audsr_1.SelectedIndex = 0;
\r
43 drp_audmix_1.Enabled = true;
\r
44 drp_audbit_1.Enabled = true;
\r
45 drp_audsr_1.Enabled = true;
\r
47 drp_audmix_1.Text = "Automatic";
\r
48 drp_audbit_1.Text = "160";
\r
49 drp_audsr_1.Text = "Auto";
\r
52 if (drp_audenc_1.Text.Contains("AAC"))
\r
54 setMixDownAllOptions(drp_audmix_1);
\r
55 setBitrateSelections160(drp_audbit_1);
\r
59 setMixDownNotAAC(drp_audmix_1);
\r
60 setBitrateSelections320(drp_audbit_1);
\r
63 // Update an item in the Audio list if required.
\r
64 if (lv_audioList.Items.Count != 0 && lv_audioList.SelectedIndices.Count != 0)
\r
66 lv_audioList.Items[lv_audioList.SelectedIndices[0]].SubItems[2].Text = drp_audenc_1.Text;
\r
67 lv_audioList.Select();
\r
70 private void drp_audmix_1_SelectedIndexChanged(object sender, EventArgs e)
\r
72 if ((drp_audenc_1.Text.Contains("AAC")) && (drp_audmix_1.Text == "6 Channel Discrete"))
\r
73 setBitrateSelections384(drp_audbit_1);
\r
74 else if ((drp_audenc_1.Text.Contains("AAC")) && (drp_audmix_1.Text != "6 Channel Discrete"))
\r
75 setBitrateSelections160(drp_audbit_1); drp_audbit_1.Text = "160";
\r
77 // Update an item in the Audio list if required.
\r
78 if (lv_audioList.Items.Count != 0 && lv_audioList.SelectedIndices.Count != 0)
\r
80 lv_audioList.Items[lv_audioList.SelectedIndices[0]].SubItems[3].Text = drp_audmix_1.Text;
\r
81 lv_audioList.Select();
\r
84 private void drp_audsr_1_SelectedIndexChanged(object sender, EventArgs e)
\r
86 // Update an item in the Audio list if required.
\r
87 if (lv_audioList.Items.Count != 0 && lv_audioList.SelectedIndices.Count != 0)
\r
89 lv_audioList.Items[lv_audioList.SelectedIndices[0]].SubItems[4].Text = drp_audsr_1.Text;
\r
90 lv_audioList.Select();
\r
93 private void drp_audbit_1_SelectedIndexChanged(object sender, EventArgs e)
\r
95 // Update an item in the Audio list if required.
\r
96 if (lv_audioList.Items.Count != 0 && lv_audioList.SelectedIndices.Count != 0)
\r
98 if (drp_audenc_1.Text.Contains("AC3"))
\r
99 drp_audbit_1.Text = "Auto";
\r
100 lv_audioList.Items[lv_audioList.SelectedIndices[0]].SubItems[5].Text = drp_audbit_1.Text;
\r
101 lv_audioList.Select();
\r
104 private void tb_drc_Scroll(object sender, EventArgs e)
\r
107 if (tb_drc.Value == 0) value = 0;
\r
109 value = ((tb_drc.Value - 1) / 10.0) + 1;
\r
111 lbl_drc.Text = value.ToString();
\r
113 // Update an item in the Audio list if required.
\r
114 if (lv_audioList.Items.Count != 0 && lv_audioList.SelectedIndices.Count != 0)
\r
116 lv_audioList.Items[lv_audioList.SelectedIndices[0]].SubItems[6].Text = lbl_drc.Text;
\r
117 lv_audioList.Select();
\r
122 private void btn_addAudioTrack_Click(object sender, EventArgs e)
\r
124 // Create a new row for the Audio list based on the currently selected items in the dropdown.
\r
125 ListViewItem newTrack = new ListViewItem(getNewID().ToString());
\r
126 newTrack.SubItems.Add(drp_track1Audio.Text);
\r
127 newTrack.SubItems.Add(drp_audenc_1.Text);
\r
128 newTrack.SubItems.Add(drp_audmix_1.Text);
\r
129 newTrack.SubItems.Add(drp_audsr_1.Text);
\r
130 newTrack.SubItems.Add(drp_audbit_1.Text);
\r
131 newTrack.SubItems.Add(lbl_drc.Text);
\r
132 lv_audioList.Items.Add(newTrack);
\r
134 // Select the newly added track and select the control
\r
135 lv_audioList.Items[lv_audioList.Items.Count - 1].Selected = true;
\r
136 lv_audioList.Select();
\r
138 private void btn_RemoveAudioTrack_Click(object sender, EventArgs e)
\r
140 // Remove the Item and reselect the control if the following conditions are met.
\r
141 if (lv_audioList.SelectedItems.Count != 0)
\r
143 // Record the current selected index.
\r
144 int currentPosition = lv_audioList.SelectedIndices[0];
\r
146 lv_audioList.Items.RemoveAt(lv_audioList.SelectedIndices[0]);
\r
148 // Now reslect the correct item and give focus to the audio list.
\r
149 if (lv_audioList.Items.Count != 0)
\r
151 if (currentPosition <= (lv_audioList.Items.Count - 1))
\r
152 lv_audioList.Items[currentPosition].Selected = true;
\r
153 else if (currentPosition > (lv_audioList.Items.Count - 1))
\r
154 lv_audioList.Items[lv_audioList.Items.Count - 1].Selected = true;
\r
156 lv_audioList.Select();
\r
158 // Regenerate the ID numers
\r
159 reGenerateListIDs();
\r
164 private void audioList_moveup_Click(object sender, EventArgs e)
\r
166 if (lv_audioList.SelectedIndices.Count != 0)
\r
168 ListViewItem item = lv_audioList.SelectedItems[0];
\r
169 int index = item.Index;
\r
172 if (lv_audioList.Items.Count > index && index >= 0)
\r
174 lv_audioList.Items.Remove(item);
\r
175 lv_audioList.Items.Insert(index, item);
\r
176 item.Selected = true;
\r
177 lv_audioList.Focus();
\r
181 private void audioList_movedown_Click(object sender, EventArgs e)
\r
183 if (lv_audioList.SelectedIndices.Count != 0)
\r
185 ListViewItem item = lv_audioList.SelectedItems[0];
\r
186 int index = item.Index;
\r
189 if (index < lv_audioList.Items.Count)
\r
191 lv_audioList.Items.Remove(item);
\r
192 lv_audioList.Items.Insert(index, item);
\r
193 item.Selected = true;
\r
194 lv_audioList.Focus();
\r
198 private void audioList_remove_Click(object sender, EventArgs e)
\r
200 removeAudioTrack();
\r
202 private void removeAudioTrack()
\r
204 // Remove the Item and reselect the control if the following conditions are met.
\r
205 if (lv_audioList.SelectedItems.Count != 0)
\r
207 // Record the current selected index.
\r
208 int currentPosition = lv_audioList.SelectedIndices[0];
\r
210 lv_audioList.Items.RemoveAt(lv_audioList.SelectedIndices[0]);
\r
212 // Now reslect the correct item and give focus to the audio list.
\r
213 if (lv_audioList.Items.Count != 0)
\r
215 if (currentPosition <= (lv_audioList.Items.Count - 1))
\r
216 lv_audioList.Items[currentPosition].Selected = true;
\r
217 else if (currentPosition > (lv_audioList.Items.Count - 1))
\r
218 lv_audioList.Items[lv_audioList.Items.Count - 1].Selected = true;
\r
220 lv_audioList.Select();
\r
225 // Public Functions
\r
226 public void setTrackList(Parsing.Title selectedTitle)
\r
228 drp_track1Audio.Items.Clear();
\r
229 drp_track1Audio.Items.Add("Automatic");
\r
230 drp_track1Audio.Items.Add("None");
\r
231 drp_track1Audio.Items.AddRange(selectedTitle.AudioTracks.ToArray());
\r
232 drp_track1Audio.SelectedIndex = 0;
\r
234 public ListView getAudioPanel()
\r
236 return lv_audioList;
\r
238 public void setAudioByContainer(String path)
\r
240 if ((path.Contains("MP4")) || (path.Contains("M4V")))
\r
242 string oldval = drp_audenc_1.Text;
\r
243 drp_audenc_1.Items.Clear();
\r
244 drp_audenc_1.Items.Add("AAC (faac)");
\r
245 drp_audenc_1.Items.Add("AC3 Passthru");
\r
246 if ((oldval != "AAC (faac)") && (oldval != "AC3 Passthru"))
\r
247 drp_audenc_1.SelectedIndex = 0;
\r
250 else if (path.Contains("MKV"))
\r
252 drp_audenc_1.Items.Clear();
\r
253 drp_audenc_1.Items.Add("AAC (faac)");
\r
254 drp_audenc_1.Items.Add("MP3 (lame)");
\r
255 drp_audenc_1.Items.Add("AC3 Passthru");
\r
256 drp_audenc_1.Items.Add("DTS Passthru");
\r
257 drp_audenc_1.Items.Add("Vorbis (vorbis)");
\r
259 if (drp_audenc_1.Text == string.Empty)
\r
260 drp_audenc_1.SelectedIndex = 0;
\r
263 // Make sure the table is updated with new audio codecs
\r
264 foreach (ListViewItem row in lv_audioList.Items)
\r
266 if (!drp_audenc_1.Items.Contains(row.SubItems[2].Text))
\r
267 row.SubItems[2].Text = drp_audenc_1.Items[0].ToString();
\r
270 public void addTrackForPreset(ListViewItem item)
\r
272 lv_audioList.Items.Add(item);
\r
274 public void clearAudioList()
\r
276 lv_audioList.Items.Clear();
\r
278 public int getNewID()
\r
280 return lv_audioList.Items.Count + 1;
\r
283 // Helper Functions
\r
284 private void reGenerateListIDs()
\r
287 foreach (ListViewItem item in lv_audioList.Items)
\r
289 item.SubItems[0].Text = i.ToString();
\r
293 private static void setBitrateSelections384(ComboBox dropDown)
\r
295 dropDown.Items.Clear();
\r
296 dropDown.Items.Add("32");
\r
297 dropDown.Items.Add("40");
\r
298 dropDown.Items.Add("48");
\r
299 dropDown.Items.Add("56");
\r
300 dropDown.Items.Add("64");
\r
301 dropDown.Items.Add("80");
\r
302 dropDown.Items.Add("86");
\r
303 dropDown.Items.Add("112");
\r
304 dropDown.Items.Add("128");
\r
305 dropDown.Items.Add("160");
\r
306 dropDown.Items.Add("192");
\r
307 dropDown.Items.Add("224");
\r
308 dropDown.Items.Add("256");
\r
309 dropDown.Items.Add("320");
\r
310 dropDown.Items.Add("384");
\r
312 private static void setBitrateSelections320(ComboBox dropDown)
\r
314 dropDown.Items.Clear();
\r
315 dropDown.Items.Add("32");
\r
316 dropDown.Items.Add("40");
\r
317 dropDown.Items.Add("48");
\r
318 dropDown.Items.Add("56");
\r
319 dropDown.Items.Add("64");
\r
320 dropDown.Items.Add("80");
\r
321 dropDown.Items.Add("86");
\r
322 dropDown.Items.Add("112");
\r
323 dropDown.Items.Add("128");
\r
324 dropDown.Items.Add("160");
\r
325 dropDown.Items.Add("192");
\r
326 dropDown.Items.Add("224");
\r
327 dropDown.Items.Add("256");
\r
328 dropDown.Items.Add("320");
\r
330 private static void setBitrateSelections160(ComboBox dropDown)
\r
332 dropDown.Items.Clear();
\r
333 dropDown.Items.Add("32");
\r
334 dropDown.Items.Add("40");
\r
335 dropDown.Items.Add("48");
\r
336 dropDown.Items.Add("56");
\r
337 dropDown.Items.Add("64");
\r
338 dropDown.Items.Add("80");
\r
339 dropDown.Items.Add("86");
\r
340 dropDown.Items.Add("112");
\r
341 dropDown.Items.Add("128");
\r
342 dropDown.Items.Add("160");
\r
344 private static void setMixDownAllOptions(ComboBox dropdown)
\r
346 dropdown.Items.Clear();
\r
347 dropdown.Items.Add("Automatic");
\r
348 dropdown.Items.Add("Mono");
\r
349 dropdown.Items.Add("Stereo");
\r
350 dropdown.Items.Add("Dolby Surround");
\r
351 dropdown.Items.Add("Dolby Pro Logic II");
\r
352 dropdown.Items.Add("6 Channel Discrete");
\r
354 private static void setMixDownNotAAC(ComboBox dropdown)
\r
356 dropdown.Items.Clear();
\r
357 dropdown.Items.Add("Automatic");
\r
358 dropdown.Items.Add("Stereo");
\r
359 dropdown.Items.Add("Dolby Surround");
\r
360 dropdown.Items.Add("Dolby Pro Logic II");
\r
362 private void lv_audioList_SelectedIndexChanged(object sender, EventArgs e)
\r
364 // Set the dropdown controls based on the selected item in the Audio List.
\r
365 if (lv_audioList.Items.Count != 0 && lv_audioList.SelectedIndices.Count != 0)
\r
367 drp_track1Audio.Text = lv_audioList.Items[lv_audioList.SelectedIndices[0]].SubItems[1].Text;
\r
368 drp_audenc_1.Text = lv_audioList.Items[lv_audioList.SelectedIndices[0]].SubItems[2].Text;
\r
369 drp_audmix_1.Text = lv_audioList.Items[lv_audioList.SelectedIndices[0]].SubItems[3].Text;
\r
370 drp_audsr_1.Text = lv_audioList.Items[lv_audioList.SelectedIndices[0]].SubItems[4].Text;
\r
371 drp_audbit_1.Text = lv_audioList.Items[lv_audioList.SelectedIndices[0]].SubItems[5].Text;
\r
372 double drcValue; int drcCalculated;
\r
373 double.TryParse(lv_audioList.Items[lv_audioList.SelectedIndices[0]].SubItems[6].Text, out drcValue);
\r
374 if (drcValue == 0) drcCalculated = 0;
\r
376 drcValue = ((drcValue * 10) + 1) - 10;
\r
377 int.TryParse(drcValue.ToString(), out drcCalculated);
\r
378 tb_drc.Value = drcCalculated;
\r
380 AudioTrackGroup.Text = "Selected Track: " + lv_audioList.Items[lv_audioList.SelectedIndices[0]].SubItems[0].Text;
\r
383 AudioTrackGroup.Text = "Selected Track: None (Click \"Add Track\" to add)";
\r