2 using System.Windows.Forms;
\r
3 using System.Threading;
\r
4 using System.Diagnostics;
\r
5 using System.Runtime.InteropServices;
\r
7 using Handbrake.EncodeQueue;
\r
8 using Handbrake.Functions;
\r
14 public partial class frmPreview : Form
\r
17 QueryGenerator hb_common_func = new QueryGenerator();
\r
18 EncodeAndQueueHandler process = new EncodeAndQueueHandler();
\r
19 private delegate void UpdateUIHandler();
\r
20 String currently_playing = "";
\r
21 readonly frmMain mainWindow;
\r
22 private Thread player;
\r
23 private Boolean noQT;
\r
25 public frmPreview(frmMain mw)
\r
29 InitializeComponent();
\r
35 this.mainWindow = mw;
\r
36 cb_preview.SelectedIndex = 0;
\r
37 cb_duration.SelectedIndex = 1;
\r
39 cb_preview.Items.Clear();
\r
40 for (int i = 1; i <= Properties.Settings.Default.previewScanCount; i++)
\r
41 cb_preview.Items.Add(i.ToString());
\r
42 cb_preview.SelectedIndex = 0;
\r
45 #region Encode Sample
\r
46 private void btn_playVLC_Click(object sender, EventArgs e)
\r
48 lbl_status.Visible = true;
\r
54 if (File.Exists(currently_playing))
\r
55 File.Delete(currently_playing);
\r
59 MessageBox.Show(this, "Unable to delete previous preview file. You may need to restart the application.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
\r
62 btn_playQT.Enabled = false;
\r
63 btn_playVLC.Enabled = false;
\r
64 lbl_status.Text = "Encoding Sample for (VLC) ...";
\r
66 int.TryParse(cb_duration.Text, out duration);
\r
67 String query = hb_common_func.GenerateCLIQuery(mainWindow, duration, cb_preview.Text);
\r
68 ThreadPool.QueueUserWorkItem(procMonitor, query);
\r
70 private void btn_playQT_Click(object sender, EventArgs e)
\r
74 MessageBox.Show(this, "It would appear QuickTime 7 is not installed or not accessible. Please (re)install QuickTime.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
\r
77 if (mainWindow.text_destination.Text.Contains(".mkv"))
\r
79 MessageBox.Show(this,
\r
80 "The QuickTime Control does not support MKV files, It is recommended you use VLC option instead.",
\r
81 "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
\r
85 lbl_status.Visible = true;
\r
89 if (File.Exists(currently_playing))
\r
90 File.Delete(currently_playing);
\r
94 MessageBox.Show(this, "Unable to delete previous preview file. You may need to restart the application.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
\r
97 btn_playQT.Enabled = false;
\r
98 btn_playVLC.Enabled = false;
\r
99 lbl_status.Text = "Encoding Sample for (QT) ...";
\r
101 int.TryParse(cb_duration.Text, out duration);
\r
102 String query = hb_common_func.GenerateCLIQuery(mainWindow, duration, cb_preview.Text);
\r
104 ThreadPool.QueueUserWorkItem(procMonitor, query);
\r
107 private void procMonitor(object state)
\r
109 // Make sure we are not already encoding and if we are then display an error.
\r
110 if (process.hbProcess != null)
\r
111 MessageBox.Show(this, "Handbrake is already encoding a video!", "Status", MessageBoxButtons.OK, MessageBoxIcon.Warning);
\r
114 process.RunCli((string)state);
\r
115 if (process.hbProcess != null)
\r
117 process.hbProcess.WaitForExit();
\r
118 process.hbProcess = null;
\r
123 private void encodeCompleted()
\r
127 if (InvokeRequired)
\r
129 BeginInvoke(new UpdateUIHandler(encodeCompleted));
\r
133 btn_playQT.Enabled = true;
\r
134 btn_playVLC.Enabled = true;
\r
136 // Decide which player to use.
\r
137 String playerSelection = lbl_status.Text.Contains("QT") ? "QT" : "VLC";
\r
139 lbl_status.Text = "Loading Clip ...";
\r
141 // Get the sample filename
\r
142 if (mainWindow.text_destination.Text != "")
\r
143 currently_playing = mainWindow.text_destination.Text.Replace(".mp4", "_sample.mp4").Replace(".m4v", "_sample.m4v").Replace(".mkv", "_sample.mkv"); ;
\r
145 // Play back in QT or VLC
\r
146 if (playerSelection == "QT")
\r
151 lbl_status.Text = "";
\r
153 catch (Exception exc)
\r
155 MessageBox.Show(this, "frmPreview.cs encodeCompleted " + exc, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
\r
163 /// Play the video back in the QuickTime control
\r
165 private void play()
\r
167 player = new Thread(OpenMovie) { IsBackground = true };
\r
169 lbl_status.Visible = false;
\r
173 /// Play the video back in an external VLC player
\r
175 private void playVLC()
\r
177 // Launch VLC and play video.
\r
178 if (currently_playing != "")
\r
180 if (File.Exists(currently_playing))
\r
182 // Attempt to find VLC if it doesn't exist in the default set location.
\r
183 if (!File.Exists(Properties.Settings.Default.VLC_Path))
\r
185 if (File.Exists("C:\\Program Files (x86)\\VideoLAN\\VLC\\vlc.exe"))
\r
187 Properties.Settings.Default.VLC_Path = "C:\\Program Files (x86)\\VideoLAN\\VLC\\vlc.exe";
\r
188 Properties.Settings.Default.Save(); // Save this new path if it does
\r
192 MessageBox.Show(this,
\r
193 "Unable to detect VLC Player. \nPlease make sure VLC is installed and the directory specified in HandBrake's options is correct. (See: \"Tools Menu > Options > Picture Tab\") ",
\r
194 "VLC", MessageBoxButtons.OK, MessageBoxIcon.Warning);
\r
198 if (File.Exists(Properties.Settings.Default.VLC_Path))
\r
200 String args = "\"" + currently_playing + "\"";
\r
201 ProcessStartInfo vlc = new ProcessStartInfo(Properties.Settings.Default.VLC_Path, args);
\r
202 Process.Start(vlc);
\r
203 lbl_status.Text = "VLC will now launch.";
\r
208 MessageBox.Show(this, "Unable to find the preview file. Either the file was deleted or the encode failed. Check the activity log for details.", "VLC", MessageBoxButtons.OK, MessageBoxIcon.Warning);
\r
210 lbl_status.Visible = false;
\r
214 /// QT control - Open the file
\r
217 private void OpenMovie()
\r
221 if (InvokeRequired)
\r
223 BeginInvoke(new UpdateUIHandler(OpenMovie));
\r
226 QTControl.URL = currently_playing;
\r
227 QTControl.SetSizing(QTSizingModeEnum.qtControlFitsMovie, true);
\r
228 QTControl.URL = currently_playing;
\r
231 this.ClientSize = QTControl.Size;
\r
234 catch (COMException ex)
\r
236 QTUtils qtu = new QTUtils();
\r
237 MessageBox.Show(this, "Unable to open movie:\n\nError Code: " + ex.ErrorCode.ToString("X") + "\nQT Error code : " + qtu.QTErrorFromErrorCode(ex.ErrorCode), "QT", MessageBoxButtons.OK, MessageBoxIcon.Warning);
\r
239 catch (Exception ex)
\r
241 MessageBox.Show(this, "Unable to open movie:\n\n" + ex, "QT", MessageBoxButtons.OK, MessageBoxIcon.Warning);
\r