OSDN Git Service

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