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
16 readonly QueryGenerator HbCommonFunc = new QueryGenerator();
\r
17 readonly EncodeAndQueueHandler Process = new EncodeAndQueueHandler();
\r
18 private delegate void UpdateUIHandler();
\r
19 String CurrentlyPlaying = "";
\r
20 readonly frmMain MainWindow;
\r
21 private Thread Player;
\r
22 private readonly Boolean NoQT;
\r
24 public frmPreview(frmMain mw)
\r
28 InitializeComponent();
\r
34 this.MainWindow = mw;
\r
35 cb_preview.SelectedIndex = 0;
\r
36 cb_duration.SelectedIndex = 1;
\r
38 cb_preview.Items.Clear();
\r
39 for (int i = 1; i <= Properties.Settings.Default.previewScanCount; i++)
\r
40 cb_preview.Items.Add(i.ToString());
\r
41 cb_preview.SelectedIndex = 0;
\r
44 #region Encode Sample
\r
45 private void btn_playVLC_Click(object sender, EventArgs e)
\r
47 lbl_status.Visible = true;
\r
53 if (File.Exists(CurrentlyPlaying))
\r
54 File.Delete(CurrentlyPlaying);
\r
58 MessageBox.Show(this, "Unable to delete previous preview file. You may need to restart the application.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
\r
61 btn_playQT.Enabled = false;
\r
62 btn_playVLC.Enabled = false;
\r
63 lbl_status.Text = "Encoding Sample for (VLC) ...";
\r
65 int.TryParse(cb_duration.Text, out duration);
\r
66 String query = HbCommonFunc.GenerateCLIQuery(MainWindow, 3, duration, cb_preview.Text);
\r
67 ThreadPool.QueueUserWorkItem(ProcMonitor, query);
\r
69 private void btn_playQT_Click(object sender, EventArgs e)
\r
73 MessageBox.Show(this, "It would appear QuickTime 7 is not installed or not accessible. Please (re)install QuickTime.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
\r
76 if (MainWindow.text_destination.Text.Contains(".mkv"))
\r
78 MessageBox.Show(this,
\r
79 "The QuickTime Control does not support MKV files, It is recommended you use VLC option instead.",
\r
80 "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
\r
84 lbl_status.Visible = true;
\r
88 if (File.Exists(CurrentlyPlaying))
\r
89 File.Delete(CurrentlyPlaying);
\r
93 MessageBox.Show(this, "Unable to delete previous preview file. You may need to restart the application.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
\r
96 btn_playQT.Enabled = false;
\r
97 btn_playVLC.Enabled = false;
\r
98 lbl_status.Text = "Encoding Sample for (QT) ...";
\r
100 int.TryParse(cb_duration.Text, out duration);
\r
101 String query = HbCommonFunc.GenerateCLIQuery(MainWindow, 3, duration, cb_preview.Text);
\r
103 ThreadPool.QueueUserWorkItem(ProcMonitor, query);
\r
106 private void ProcMonitor(object state)
\r
108 // Make sure we are not already encoding and if we are then display an error.
\r
109 if (Process.hbProcess != null)
\r
110 MessageBox.Show(this, "Handbrake is already encoding a video!", "Status", MessageBoxButtons.OK, MessageBoxIcon.Warning);
\r
113 Process.RunCli((string)state);
\r
114 if (Process.hbProcess != null)
\r
116 Process.hbProcess.WaitForExit();
\r
117 Process.hbProcess = null;
\r
122 private void EncodeCompleted()
\r
126 if (InvokeRequired)
\r
128 BeginInvoke(new UpdateUIHandler(EncodeCompleted));
\r
132 btn_playQT.Enabled = true;
\r
133 btn_playVLC.Enabled = true;
\r
135 // Decide which Player to use.
\r
136 String playerSelection = lbl_status.Text.Contains("QT") ? "QT" : "VLC";
\r
138 lbl_status.Text = "Loading Clip ...";
\r
140 // Get the sample filename
\r
141 if (MainWindow.text_destination.Text != "")
\r
142 CurrentlyPlaying = MainWindow.text_destination.Text.Replace(".mp4", "_sample.mp4").Replace(".m4v", "_sample.m4v").Replace(".mkv", "_sample.mkv"); ;
\r
144 // Play back in QT or VLC
\r
145 if (playerSelection == "QT")
\r
150 lbl_status.Text = "";
\r
152 catch (Exception exc)
\r
154 MessageBox.Show(this, "frmPreview.cs EncodeCompleted " + exc, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
\r
162 /// Play the video back in the QuickTime control
\r
164 private void Play()
\r
166 Player = new Thread(OpenMovie) { IsBackground = true };
\r
168 lbl_status.Visible = false;
\r
172 /// Play the video back in an external VLC Player
\r
174 private void PlayVLC()
\r
176 // Launch VLC and Play video.
\r
177 if (CurrentlyPlaying != "")
\r
179 if (File.Exists(CurrentlyPlaying))
\r
181 // Attempt to find VLC if it doesn't exist in the default set location.
\r
184 if (8 == IntPtr.Size || (!String.IsNullOrEmpty(Environment.GetEnvironmentVariable("PROCESSOR_ARCHITEW6432"))))
\r
185 vlcPath = Environment.GetEnvironmentVariable("ProgramFiles(x86)");
\r
187 vlcPath = Environment.GetEnvironmentVariable("ProgramFiles");
\r
189 vlcPath = vlcPath != null ? vlcPath + @"\VideoLAN\VLC\vlc.exe" : @"C:\Program Files (x86)\VideoLAN\VLC\vlc.exe";
\r
191 if (!File.Exists(Properties.Settings.Default.VLC_Path))
\r
193 if (File.Exists(vlcPath))
\r
195 Properties.Settings.Default.VLC_Path = "C:\\Program Files (x86)\\VideoLAN\\VLC\\vlc.exe";
\r
196 Properties.Settings.Default.Save(); // Save this new path if it does
\r
200 MessageBox.Show(this,
\r
201 "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
202 "VLC", MessageBoxButtons.OK, MessageBoxIcon.Warning);
\r
206 if (File.Exists(Properties.Settings.Default.VLC_Path))
\r
208 String args = "\"" + CurrentlyPlaying + "\"";
\r
209 ProcessStartInfo vlc = new ProcessStartInfo(Properties.Settings.Default.VLC_Path, args);
\r
210 System.Diagnostics.Process.Start(vlc);
\r
211 lbl_status.Text = "VLC will now launch.";
\r
216 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
218 lbl_status.Visible = false;
\r
222 /// QT control - Open the file
\r
225 private void OpenMovie()
\r
229 if (InvokeRequired)
\r
231 BeginInvoke(new UpdateUIHandler(OpenMovie));
\r
234 QTControl.URL = CurrentlyPlaying;
\r
235 QTControl.SetSizing(QTSizingModeEnum.qtControlFitsMovie, true);
\r
236 QTControl.URL = CurrentlyPlaying;
\r
239 this.ClientSize = QTControl.Size;
\r
242 catch (COMException ex)
\r
244 QTUtils qtu = new QTUtils();
\r
245 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
247 catch (Exception ex)
\r
249 MessageBox.Show(this, "Unable to open movie:\n\n" + ex, "QT", MessageBoxButtons.OK, MessageBoxIcon.Warning);
\r