OSDN Git Service

029ac85d2896cd4a4ab875cd5f6c8117cd94bd54
[handbrake-jp/handbrake-jp-git.git] / win / C# / frmPreview.cs
1 using System;\r
2 using System.Windows.Forms;\r
3 using System.Threading;\r
4 using System.Diagnostics;\r
5 using System.Runtime.InteropServices;\r
6 using QTOLibrary;\r
7 \r
8 namespace Handbrake\r
9 {\r
10     public partial class frmPreview : Form\r
11     {\r
12 \r
13         QueryGenerator hb_common_func = new QueryGenerator();\r
14         Functions.Encode process = new Functions.Encode();\r
15         private delegate void UpdateUIHandler();\r
16         String currently_playing = "";\r
17         frmMain mainWindow;\r
18         private Process hbProc;\r
19         private Thread player;\r
20 \r
21         public frmPreview(frmMain mw)\r
22         {\r
23             InitializeComponent();\r
24             this.mainWindow = mw;\r
25             cb_preview.SelectedIndex = 0;\r
26             cb_duration.SelectedIndex = 1;\r
27         }\r
28 \r
29         private void play()\r
30         {\r
31             player = new Thread(OpenMovie) {IsBackground = true};\r
32             player.Start();\r
33         }\r
34 \r
35         [STAThread]\r
36         private void OpenMovie()\r
37         {\r
38             try\r
39             {\r
40                 if (InvokeRequired)\r
41                 {\r
42                     BeginInvoke(new UpdateUIHandler(OpenMovie));\r
43                     return;\r
44                 }\r
45                 QTControl.URL = currently_playing;\r
46                 QTControl.Width = QTControl.Movie.Width;\r
47                 QTControl.Height = QTControl.Movie.Height;\r
48                 // The initial control size is 64,64. If we do not reload the clip here\r
49                 // it'll scale the video from 64,64. \r
50                 // Unsure why as it correctly resizes the control to the movies actual size.\r
51                 QTControl.URL = currently_playing; \r
52                 QTControl.SetScale(0);\r
53                 QTControl.Show();\r
54 \r
55                 this.Width = QTControl.Width + 5;\r
56                 this.Height = QTControl.Height + 90;\r
57             }\r
58             catch (COMException ex)\r
59             {\r
60                 QTUtils qtu = new QTUtils();\r
61                 MessageBox.Show("Unable to open movie:\n\nError Code: " + ex.ErrorCode.ToString("X") + "\nQT Error code : " + qtu.QTErrorFromErrorCode(ex.ErrorCode));\r
62             }\r
63             catch (Exception ex)\r
64             {\r
65                 MessageBox.Show("Unable to open movie:\n\n" + ex);\r
66             }\r
67         }\r
68  \r
69         #region Encode Sample\r
70         private void btn_encode_Click(object sender, EventArgs e)\r
71         {\r
72             btn_encode.Enabled = false;\r
73             lbl_encode.Text = "Encoding Sample ...";\r
74             String query = hb_common_func.GeneratePreviewQuery(mainWindow, cb_duration.Text, cb_preview.Text);\r
75             ThreadPool.QueueUserWorkItem(procMonitor, query);\r
76         }\r
77         private void procMonitor(object state)\r
78         {\r
79             // Make sure we are not already encoding and if we are then display an error.\r
80             if (hbProc != null)\r
81                 MessageBox.Show("Handbrake is already encoding a video!", "Status", MessageBoxButtons.OK, MessageBoxIcon.Warning);\r
82             else\r
83             {\r
84                 hbProc = process.runCli(this, (string)state);\r
85                 hbProc.WaitForExit();\r
86                 hbProc = null;\r
87                 encodeCompleted();\r
88             }\r
89         }\r
90         private void encodeCompleted()\r
91         {\r
92             try\r
93             {\r
94                 if (InvokeRequired)\r
95                 {\r
96                     BeginInvoke(new UpdateUIHandler(encodeCompleted));\r
97                     return;\r
98                 }\r
99                 btn_encode.Enabled = true;\r
100                 lbl_encode.Text = "Loading Clip ...";\r
101 \r
102                 if (mainWindow.text_destination.Text != "")\r
103                     currently_playing = mainWindow.text_destination.Text.Replace(".m", "_sample.m").Replace(".avi", "_sample.avi").Replace(".ogm", "_sample.ogm");\r
104 \r
105                 play();\r
106                 lbl_encode.Text = "";\r
107             }\r
108             catch (Exception exc)\r
109             {\r
110                 MessageBox.Show("frmPreview.cs encodeCompleted " + exc, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);\r
111             }\r
112         }\r
113         #endregion\r
114 \r
115     }\r
116 }