[svn] / trunk / xvidcore / vfw / src / driverproc.c Repository:
ViewVC logotype

Annotation of /trunk/xvidcore/vfw/src/driverproc.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1630 - (view) (download)

1 : edgomez 1382 /*****************************************************************************
2 :     *
3 :     * XVID MPEG-4 VFW FRONTEND
4 :     * - driverproc main -
5 :     *
6 :     * Copyright(C) 2001-2003 Peter Ross <pross@xvid.org>
7 :     *
8 :     * This program is free software ; you can redistribute it and/or modify
9 :     * it under the terms of the GNU General Public License as published by
10 :     * the Free Software Foundation ; either version 2 of the License, or
11 :     * (at your option) any later version.
12 :     *
13 :     * This program is distributed in the hope that it will be useful,
14 :     * but WITHOUT ANY WARRANTY ; without even the implied warranty of
15 :     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 :     * GNU General Public License for more details.
17 :     *
18 :     * You should have received a copy of the GNU General Public License
19 :     * along with this program ; if not, write to the Free Software
20 :     * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 :     *
22 : suxen_drol 1630 * $Id: driverproc.c,v 1.8 2005-09-09 11:34:51 suxen_drol Exp $
23 : edgomez 1382 *
24 :     ****************************************************************************/
25 :    
26 :     #include <windows.h>
27 :     #include <vfw.h>
28 :     #include "vfwext.h"
29 :    
30 :     #include "debug.h"
31 :     #include "codec.h"
32 :     #include "config.h"
33 :     #include "status.h"
34 :     #include "resource.h"
35 :    
36 : edgomez 1413 static int clean_dll_bindings(CODEC* codec);
37 : edgomez 1382
38 :     BOOL WINAPI DllMain(
39 :     HANDLE hModule,
40 :     DWORD ul_reason_for_call,
41 :     LPVOID lpReserved)
42 :     {
43 :     g_hInst = (HINSTANCE) hModule;
44 :     return TRUE;
45 :     }
46 :    
47 :     /* __declspec(dllexport) */ LRESULT WINAPI DriverProc(
48 :     DWORD dwDriverId,
49 :     HDRVR hDriver,
50 :     UINT uMsg,
51 :     LPARAM lParam1,
52 :     LPARAM lParam2)
53 :     {
54 :     CODEC * codec = (CODEC *)dwDriverId;
55 :    
56 :     switch(uMsg)
57 :     {
58 :    
59 :     /* driver primitives */
60 :    
61 :     case DRV_LOAD :
62 :     case DRV_FREE :
63 : suxen_drol 1495 return DRVCNF_OK;
64 : edgomez 1382
65 :     case DRV_OPEN :
66 :     DPRINTF("DRV_OPEN");
67 : edgomez 1398
68 : edgomez 1382 {
69 :     ICOPEN * icopen = (ICOPEN *)lParam2;
70 :    
71 :     if (icopen != NULL && icopen->fccType != ICTYPE_VIDEO)
72 :     {
73 : suxen_drol 1495 return DRVCNF_CANCEL;
74 : edgomez 1382 }
75 :    
76 :     codec = malloc(sizeof(CODEC));
77 :    
78 :     if (codec == NULL)
79 :     {
80 :     if (icopen != NULL)
81 :     {
82 :     icopen->dwError = ICERR_MEMORY;
83 :     }
84 :     return 0;
85 :     }
86 :    
87 : edgomez 1398 memset(codec, 0, sizeof(CODEC));
88 : edgomez 1382
89 :     codec->status.hDlg = NULL;
90 :     codec->config.ci_valid = 0;
91 :     codec->ehandle = codec->dhandle = NULL;
92 :     codec->fbase = 25;
93 :     codec->fincr = 1;
94 :     config_reg_get(&codec->config);
95 :    
96 :     #if 0
97 :     /* bad things happen if this piece of code is activated */
98 :     if (lstrcmp(XVID_BUILD, codec->config.build))
99 :     {
100 :     config_reg_default(&codec->config);
101 :     }
102 :     #endif
103 :    
104 :     if (icopen != NULL)
105 :     {
106 :     icopen->dwError = ICERR_OK;
107 :     }
108 :     return (LRESULT)codec;
109 :     }
110 :    
111 :     case DRV_CLOSE :
112 :     DPRINTF("DRV_CLOSE");
113 :     /* compress_end/decompress_end don't always get called */
114 :     compress_end(codec);
115 :     decompress_end(codec);
116 : edgomez 1413 clean_dll_bindings(codec);
117 : edgomez 1382 status_destroy_always(&codec->status);
118 :     free(codec);
119 : suxen_drol 1495 return DRVCNF_OK;
120 : edgomez 1382
121 :     case DRV_DISABLE :
122 :     case DRV_ENABLE :
123 : suxen_drol 1495 return DRVCNF_OK;
124 : edgomez 1382
125 :     case DRV_INSTALL :
126 :     case DRV_REMOVE :
127 : suxen_drol 1495 return DRVCNF_OK;
128 : edgomez 1382
129 :     case DRV_QUERYCONFIGURE :
130 :     case DRV_CONFIGURE :
131 : suxen_drol 1495 return DRVCNF_CANCEL;
132 : edgomez 1382
133 :    
134 :     /* info */
135 :    
136 :     case ICM_GETINFO :
137 :     DPRINTF("ICM_GETINFO");
138 : suxen_drol 1495
139 :     if (lParam1 && lParam2 >= sizeof(ICINFO)) {
140 : edgomez 1382 ICINFO *icinfo = (ICINFO *)lParam1;
141 :    
142 :     icinfo->fccType = ICTYPE_VIDEO;
143 :     icinfo->fccHandler = FOURCC_XVID;
144 :     icinfo->dwFlags =
145 :     VIDCF_FASTTEMPORALC |
146 :     VIDCF_FASTTEMPORALD |
147 :     VIDCF_COMPRESSFRAMES;
148 :    
149 :     icinfo->dwVersion = 0;
150 : suxen_drol 1630 #if !defined(ICVERSION)
151 :     #define ICVERSION 0x0104
152 :     #endif
153 : edgomez 1382 icinfo->dwVersionICM = ICVERSION;
154 :    
155 :     wcscpy(icinfo->szName, XVID_NAME_L);
156 :     wcscpy(icinfo->szDescription, XVID_DESC_L);
157 :    
158 :     return lParam2; /* size of struct */
159 :     }
160 : suxen_drol 1495
161 :     return 0; /* error */
162 : edgomez 1382
163 :     /* state control */
164 :    
165 :     case ICM_ABOUT :
166 :     DPRINTF("ICM_ABOUT");
167 :     DialogBoxParam(g_hInst, MAKEINTRESOURCE(IDD_ABOUT), (HWND)lParam1, about_proc, 0);
168 :     return ICERR_OK;
169 :    
170 :     case ICM_CONFIGURE :
171 :     DPRINTF("ICM_CONFIGURE");
172 :     if (lParam1 != -1)
173 :     {
174 :     CONFIG temp;
175 :    
176 :     codec->config.save = FALSE;
177 :     memcpy(&temp, &codec->config, sizeof(CONFIG));
178 :    
179 :     DialogBoxParam(g_hInst, MAKEINTRESOURCE(IDD_MAIN), (HWND)lParam1, main_proc, (LPARAM)&temp);
180 :    
181 :     if (temp.save)
182 :     {
183 :     memcpy(&codec->config, &temp, sizeof(CONFIG));
184 :     config_reg_set(&codec->config);
185 :     }
186 :     }
187 :     return ICERR_OK;
188 :    
189 :     case ICM_GETSTATE :
190 :     DPRINTF("ICM_GETSTATE");
191 :     if ((void*)lParam1 == NULL)
192 :     {
193 :     return sizeof(CONFIG);
194 :     }
195 :     memcpy((void*)lParam1, &codec->config, sizeof(CONFIG));
196 :     return ICERR_OK;
197 :    
198 :     case ICM_SETSTATE :
199 :     DPRINTF("ICM_SETSTATE");
200 :     if ((void*)lParam1 == NULL)
201 :     {
202 :     DPRINTF("ICM_SETSTATE : DEFAULT");
203 :     config_reg_get(&codec->config);
204 :     return 0;
205 :     }
206 :     memcpy(&codec->config,(void*)lParam1, sizeof(CONFIG));
207 :     return 0; /* sizeof(CONFIG); */
208 :    
209 :     /* not sure the difference, private/public data? */
210 :    
211 :     case ICM_GET :
212 :     case ICM_SET :
213 :     return ICERR_OK;
214 :    
215 :    
216 :     /* older-stype config */
217 :    
218 :     case ICM_GETDEFAULTQUALITY :
219 :     case ICM_GETQUALITY :
220 :     case ICM_SETQUALITY :
221 :     case ICM_GETBUFFERSWANTED :
222 :     case ICM_GETDEFAULTKEYFRAMERATE :
223 :     return ICERR_UNSUPPORTED;
224 :    
225 :    
226 :     /* compressor */
227 :    
228 :     case ICM_COMPRESS_QUERY :
229 :     DPRINTF("ICM_COMPRESS_QUERY");
230 :     return compress_query(codec, (BITMAPINFO *)lParam1, (BITMAPINFO *)lParam2);
231 :    
232 :     case ICM_COMPRESS_GET_FORMAT :
233 :     DPRINTF("ICM_COMPRESS_GET_FORMAT");
234 :     return compress_get_format(codec, (BITMAPINFO *)lParam1, (BITMAPINFO *)lParam2);
235 :    
236 :     case ICM_COMPRESS_GET_SIZE :
237 :     DPRINTF("ICM_COMPRESS_GET_SIZE");
238 :     return compress_get_size(codec, (BITMAPINFO *)lParam1, (BITMAPINFO *)lParam2);
239 :    
240 :     case ICM_COMPRESS_FRAMES_INFO :
241 :     DPRINTF("ICM_COMPRESS_FRAMES_INFO");
242 :     return compress_frames_info(codec, (ICCOMPRESSFRAMES *)lParam1);
243 :    
244 :     case ICM_COMPRESS_BEGIN :
245 :     DPRINTF("ICM_COMPRESS_BEGIN");
246 :     return compress_begin(codec, (BITMAPINFO *)lParam1, (BITMAPINFO *)lParam2);
247 :    
248 :     case ICM_COMPRESS_END :
249 :     DPRINTF("ICM_COMPRESS_END");
250 :     return compress_end(codec);
251 :    
252 :     case ICM_COMPRESS :
253 :     DPRINTF("ICM_COMPRESS");
254 :     return compress(codec, (ICCOMPRESS *)lParam1);
255 :    
256 :     /* decompressor */
257 :    
258 :     case ICM_DECOMPRESS_QUERY :
259 :     DPRINTF("ICM_DECOMPRESS_QUERY");
260 :     return decompress_query(codec, (BITMAPINFO *)lParam1, (BITMAPINFO *)lParam2);
261 :    
262 :     case ICM_DECOMPRESS_GET_FORMAT :
263 :     DPRINTF("ICM_DECOMPRESS_GET_FORMAT");
264 :     return decompress_get_format(codec, (BITMAPINFO *)lParam1, (BITMAPINFO *)lParam2);
265 :    
266 :     case ICM_DECOMPRESS_BEGIN :
267 :     DPRINTF("ICM_DECOMPRESS_BEGIN");
268 :     return decompress_begin(codec, (BITMAPINFO *)lParam1, (BITMAPINFO *)lParam2);
269 :    
270 :     case ICM_DECOMPRESS_END :
271 :     DPRINTF("ICM_DECOMPRESS_END");
272 :     return decompress_end(codec);
273 :    
274 :     case ICM_DECOMPRESS :
275 :     DPRINTF("ICM_DECOMPRESS");
276 :     return decompress(codec, (ICDECOMPRESS *)lParam1);
277 :    
278 :     case ICM_DECOMPRESS_GET_PALETTE :
279 :     case ICM_DECOMPRESS_SET_PALETTE :
280 :     case ICM_DECOMPRESSEX_QUERY:
281 :     case ICM_DECOMPRESSEX_BEGIN:
282 :     case ICM_DECOMPRESSEX_END:
283 :     case ICM_DECOMPRESSEX:
284 :     return ICERR_UNSUPPORTED;
285 :    
286 :     /* VFWEXT entry point */
287 :     case ICM_USER+0x0fff :
288 :     if (lParam1 == VFWEXT_CONFIGURE_INFO) {
289 :     VFWEXT_CONFIGURE_INFO_T * info = (VFWEXT_CONFIGURE_INFO_T*)lParam2;
290 :     DPRINTF("%i %i %i %i %i %i",
291 :     info->ciWidth, info->ciHeight,
292 :     info->ciRate, info->ciScale,
293 :     info->ciActiveFrame, info->ciFrameCount);
294 :    
295 :     codec->config.ci_valid = 1;
296 :     memcpy(&codec->config.ci, (void*)lParam2, sizeof(VFWEXT_CONFIGURE_INFO_T));
297 :     return ICERR_OK;
298 :     }
299 :     return ICERR_UNSUPPORTED;
300 :    
301 :     default:
302 : syskin 1453 if (uMsg < DRV_USER)
303 :     return DefDriverProc(dwDriverId, hDriver, uMsg, lParam1, lParam2);
304 :     else
305 :     return ICERR_UNSUPPORTED;
306 : edgomez 1382 }
307 :     }
308 :    
309 :     void WINAPI Configure(HWND hwnd, HINSTANCE hinst, LPTSTR lpCmdLine, int nCmdShow)
310 :     {
311 :     DWORD dwDriverId;
312 :    
313 :     dwDriverId = DriverProc(0, 0, DRV_OPEN, 0, 0);
314 :     if (dwDriverId != (DWORD)NULL)
315 :     {
316 : suxen_drol 1520 if (lstrcmpi(lpCmdLine, "about")==0) {
317 :     DriverProc(dwDriverId, 0, ICM_ABOUT, (LPARAM)GetDesktopWindow(), 0);
318 :     }else{
319 :     DriverProc(dwDriverId, 0, ICM_CONFIGURE, (LPARAM)GetDesktopWindow(), 0);
320 :     }
321 : edgomez 1382 DriverProc(dwDriverId, 0, DRV_CLOSE, 0, 0);
322 :     }
323 :     }
324 : edgomez 1413
325 :     static int clean_dll_bindings(CODEC* codec)
326 :     {
327 :     if(codec->m_hdll)
328 :     {
329 :     FreeLibrary(codec->m_hdll);
330 :     codec->m_hdll = NULL;
331 :     codec->xvid_global_func = NULL;
332 :     codec->xvid_encore_func = NULL;
333 :     codec->xvid_decore_func = NULL;
334 :     codec->xvid_plugin_single_func = NULL;
335 :     codec->xvid_plugin_2pass1_func = NULL;
336 :     codec->xvid_plugin_2pass2_func = NULL;
337 :     codec->xvid_plugin_lumimasking_func = NULL;
338 :     codec->xvid_plugin_psnr_func = NULL;
339 :     }
340 :     return 0;
341 :     }

No admin address has been configured
ViewVC Help
Powered by ViewVC 1.0.4