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
40 #region Encode Sample
\r
41 private void btn_playVLC_Click(object sender, EventArgs e)
\r
43 lbl_status.Visible = true;
\r
49 if (File.Exists(currently_playing))
\r
50 File.Delete(currently_playing);
\r
54 MessageBox.Show(this, "Unable to delete previous preview file. You may need to restart the application.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
\r
57 btn_playQT.Enabled = false;
\r
58 btn_playVLC.Enabled = false;
\r
59 lbl_status.Text = "Encoding Sample for (VLC) ...";
\r
61 int.TryParse(cb_duration.Text, out duration);
\r
62 String query = hb_common_func.GenerateCLIQuery(mainWindow, duration, cb_preview.Text);
\r
63 ThreadPool.QueueUserWorkItem(procMonitor, query);
\r
65 private void btn_playQT_Click(object sender, EventArgs e)
\r
69 MessageBox.Show(this, "It would appear QuickTime 7 is not installed or not accessible. Please (re)install QuickTime.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
\r
72 if (mainWindow.text_destination.Text.Contains(".mkv"))
\r
74 MessageBox.Show(this,
\r
75 "The QuickTime Control does not support MKV files, It is recommended you use VLC option instead.",
\r
76 "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
\r
80 lbl_status.Visible = true;
\r
84 if (File.Exists(currently_playing))
\r
85 File.Delete(currently_playing);
\r
89 MessageBox.Show(this, "Unable to delete previous preview file. You may need to restart the application.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
\r
92 btn_playQT.Enabled = false;
\r
93 btn_playVLC.Enabled = false;
\r
94 lbl_status.Text = "Encoding Sample for (QT) ...";
\r
96 int.TryParse(cb_duration.Text, out duration);
\r
97 String query = hb_common_func.GenerateCLIQuery(mainWindow, duration, cb_preview.Text);
\r
99 ThreadPool.QueueUserWorkItem(procMonitor, query);
\r
102 private void procMonitor(object state)
\r
104 // Make sure we are not already encoding and if we are then display an error.
\r
105 if (process.hbProcess != null)
\r
106 MessageBox.Show(this, "Handbrake is already encoding a video!", "Status", MessageBoxButtons.OK, MessageBoxIcon.Warning);
\r
109 process.RunCli((string)state);
\r
110 if (process.hbProcess != null)
\r
112 process.hbProcess.WaitForExit();
\r
113 process.hbProcess = null;
\r
118 private void encodeCompleted()
\r
122 if (InvokeRequired)
\r
124 BeginInvoke(new UpdateUIHandler(encodeCompleted));
\r
128 btn_playQT.Enabled = true;
\r
129 btn_playVLC.Enabled = true;
\r
131 // Decide which player to use.
\r
132 String playerSelection = lbl_status.Text.Contains("QT") ? "QT" : "VLC";
\r
134 lbl_status.Text = "Loading Clip ...";
\r
136 // Get the sample filename
\r
137 if (mainWindow.text_destination.Text != "")
\r
138 currently_playing = mainWindow.text_destination.Text.Replace(".mp4", "_sample.mp4").Replace(".m4v", "_sample.m4v").Replace(".mkv", "_sample.mkv"); ;
\r
140 // Play back in QT or VLC
\r
141 if (playerSelection == "QT")
\r
146 lbl_status.Text = "";
\r
148 catch (Exception exc)
\r
150 MessageBox.Show(this, "frmPreview.cs encodeCompleted " + exc, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
\r
158 /// Play the video back in the QuickTime control
\r
160 private void play()
\r
162 player = new Thread(OpenMovie) { IsBackground = true };
\r
164 lbl_status.Visible = false;
\r
168 /// Play the video back in an external VLC player
\r
170 private void playVLC()
\r
172 // Launch VLC and play video.
\r
173 if (currently_playing != "")
\r
175 if (File.Exists(currently_playing))
\r
177 // Attempt to find VLC if it doesn't exist in the default set location.
\r
178 if (!File.Exists(Properties.Settings.Default.VLC_Path))
\r
180 if (File.Exists("C:\\Program Files (x86)\\VideoLAN\\VLC\\vlc.exe"))
\r
182 Properties.Settings.Default.VLC_Path = "C:\\Program Files (x86)\\VideoLAN\\VLC\\vlc.exe";
\r
183 Properties.Settings.Default.Save(); // Save this new path if it does
\r
187 MessageBox.Show(this,
\r
188 "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
189 "VLC", MessageBoxButtons.OK, MessageBoxIcon.Warning);
\r
193 if (File.Exists(Properties.Settings.Default.VLC_Path))
\r
195 String args = "\"" + currently_playing + "\"";
\r
196 ProcessStartInfo vlc = new ProcessStartInfo(Properties.Settings.Default.VLC_Path, args);
\r
197 Process.Start(vlc);
\r
198 lbl_status.Text = "VLC will now launch.";
\r
203 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
205 lbl_status.Visible = false;
\r
209 /// QT control - Open the file
\r
212 private void OpenMovie()
\r
216 if (InvokeRequired)
\r
218 BeginInvoke(new UpdateUIHandler(OpenMovie));
\r
221 QTControl.URL = currently_playing;
\r
222 QTControl.SetSizing(QTSizingModeEnum.qtControlFitsMovie, true);
\r
223 QTControl.URL = currently_playing;
\r
226 this.ClientSize = QTControl.Size;
\r
229 catch (COMException ex)
\r
231 QTUtils qtu = new QTUtils();
\r
232 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
234 catch (Exception ex)
\r
236 MessageBox.Show(this, "Unable to open movie:\n\n" + ex, "QT", MessageBoxButtons.OK, MessageBoxIcon.Warning);
\r