ReactOS 0.4.17-dev-966-gf06eace
mciqtz.c File Reference
#include <stdarg.h>
#include <stdbool.h>
#include <math.h>
#include "windef.h"
#include "winbase.h"
#include "winuser.h"
#include "mmddk.h"
#include "wine/debug.h"
#include "mciqtz_private.h"
#include "digitalv.h"
#include "wownt32.h"
Include dependency graph for mciqtz.c:

Go to the source code of this file.

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (mciqtz)
 
static DWORD MCIQTZ_mciClose (UINT, DWORD, LPMCI_GENERIC_PARMS)
 
static DWORD MCIQTZ_mciStop (UINT, DWORD, LPMCI_GENERIC_PARMS)
 
BOOL WINAPI DllMain (HINSTANCE hInstDLL, DWORD fdwReason, LPVOID fImpLoad)
 
static WINE_MCIQTZ * MCIQTZ_mciGetOpenDev (UINT wDevID)
 
static void unregister_class (void)
 
static bool register_class (void)
 
static DWORD MCIQTZ_drvOpen (LPCWSTR str, LPMCI_OPEN_DRIVER_PARMSW modp)
 
static DWORD MCIQTZ_drvClose (DWORD dwDevID)
 
static DWORD MCIQTZ_drvConfigure (DWORD dwDevID)
 
static bool create_window (WINE_MCIQTZ *wma, DWORD flags, const MCI_DGV_OPEN_PARMSW *params)
 
static void MCIQTZ_mciNotify (DWORD_PTR hWndCallBack, WINE_MCIQTZ *wma, UINT wStatus)
 
static DWORD MCIQTZ_mciOpen (UINT wDevID, DWORD dwFlags, LPMCI_DGV_OPEN_PARMSW lpOpenParms)
 
static DWORD CALLBACK MCIQTZ_notifyThread (LPVOID parm)
 
static DWORD MCIQTZ_mciPlay (UINT wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParms)
 
static DWORD MCIQTZ_mciSeek (UINT wDevID, DWORD dwFlags, LPMCI_SEEK_PARMS lpParms)
 
static DWORD MCIQTZ_mciPause (UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)
 
static DWORD MCIQTZ_mciResume (UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)
 
static DWORD MCIQTZ_mciGetDevCaps (UINT wDevID, DWORD dwFlags, LPMCI_GETDEVCAPS_PARMS lpParms)
 
static DWORD MCIQTZ_mciSet (UINT wDevID, DWORD dwFlags, LPMCI_DGV_SET_PARMS lpParms)
 
static DWORD MCIQTZ_mciStatus (UINT wDevID, DWORD dwFlags, LPMCI_DGV_STATUS_PARMSW lpParms)
 
static DWORD MCIQTZ_mciWhere (UINT wDevID, DWORD dwFlags, LPMCI_DGV_RECT_PARMS lpParms)
 
static DWORD MCIQTZ_mciWindow (UINT wDevID, DWORD dwFlags, LPMCI_DGV_WINDOW_PARMSW lpParms)
 
static DWORD MCIQTZ_mciPut (UINT wDevID, DWORD dwFlags, MCI_GENERIC_PARMS *lpParms)
 
static DWORD MCIQTZ_mciUpdate (UINT wDevID, DWORD dwFlags, LPMCI_DGV_UPDATE_PARMS lpParms)
 
static DWORD MCIQTZ_mciSetAudio (UINT wDevID, DWORD dwFlags, LPMCI_DGV_SETAUDIO_PARMSW lpParms)
 
LRESULT CALLBACK MCIQTZ_DriverProc (DWORD_PTR dwDevID, HDRVR hDriv, UINT wMsg, LPARAM dwParam1, LPARAM dwParam2)
 

Variables

static const WCHAR mciqtz_class [] = L"MCIQTZ_Window"
 
static HINSTANCE MCIQTZ_hInstance = 0
 

Function Documentation

◆ create_window()

static bool create_window ( WINE_MCIQTZ *  wma,
DWORD  flags,
const MCI_DGV_OPEN_PARMSW *  params 
)
static

Definition at line 167 of file mciqtz.c.

168{
170 LONG width, height, min_width;
171 HWND parent = NULL;
172 HRESULT hr;
173 RECT rc;
174
176 parent = params->hWndParent;
178 style = params->dwStyle;
179
180 hr = IBasicVideo_GetVideoSize(wma->vidbasic, &width, &height);
181 if (hr == E_NOINTERFACE)
182 return true; /* audio file */
183 else if (FAILED(hr))
184 {
185 ERR("Failed to get video size, hr %#lx.\n", hr);
186 return false;
187 }
188
189 /* Native always assumes an overlapped window
190 * when calculating default video window size. */
191 SetRect(&rc, 0, 0, width, height);
193 min_width = GetSystemMetrics(SM_CXMIN);
194 width = max(rc.right - rc.left, min_width);
195 height = rc.bottom - rc.top;
196
197 wma->window = CreateWindowW(mciqtz_class, params->lpstrElementName, style,
199
200 TRACE("device %#x, flags %#lx, style %#lx, parent %p, dimensions %ldx%ld, created window %p.\n",
201 wma->wDevID, flags, style, parent, width, height, wma->window);
202
203 if (!wma->window)
204 {
205 ERR("Failed to create window, error %lu.\n", GetLastError());
206 return false;
207 }
208
209 IVideoWindow_put_AutoShow(wma->vidwin, OAFALSE);
210 IVideoWindow_put_MessageDrain(wma->vidwin, (OAHWND)wma->window);
211 IVideoWindow_put_Owner(wma->vidwin, (OAHWND)wma->window);
212 IVideoWindow_put_WindowStyle(wma->vidwin, WS_CHILD); /* reset window style */
213
214 if (style & (WS_POPUP | WS_CHILD))
215 IBasicVideo_GetVideoSize(wma->vidbasic, &width, &height);
216 else
217 {
218 GetClientRect(wma->window, &rc);
219 width = rc.right;
220 height = rc.bottom;
221 }
222
223 IVideoWindow_SetWindowPosition(wma->vidwin, 0, 0, width, height);
224 IVideoWindow_put_Visible(wma->vidwin, OATRUE);
225 wma->parent = wma->window;
226
227 return true;
228}
#define ERR(fmt,...)
Definition: precomp.h:57
HRESULT hr
Definition: delayimp.cpp:582
#define MCI_DGV_OPEN_PARENT
Definition: digitalv.h:212
#define MCI_DGV_OPEN_WS
Definition: digitalv.h:211
#define NULL
Definition: types.h:112
#define FALSE
Definition: types.h:117
r parent
Definition: btrfs.c:3010
#define OAFALSE
Definition: dshow.h:53
#define OATRUE
Definition: dshow.h:49
unsigned long DWORD
Definition: ntddk_ex.h:95
GLint GLint GLsizei GLsizei height
Definition: gl.h:1546
GLint GLint GLsizei width
Definition: gl.h:1546
GLenum const GLfloat * params
Definition: glext.h:5645
GLbitfield flags
Definition: glext.h:7161
#define FAILED(hr)
Definition: intsafe.h:51
static const WCHAR mciqtz_class[]
Definition: mciqtz.c:35
static HINSTANCE MCIQTZ_hInstance
Definition: mciqtz.c:44
#define WS_CHILD
Definition: pedump.c:617
#define WS_OVERLAPPEDWINDOW
Definition: pedump.c:637
#define WS_MAXIMIZEBOX
Definition: pedump.c:632
#define WS_POPUP
Definition: pedump.c:616
long LONG
Definition: pedump.c:60
#define WS_CLIPCHILDREN
Definition: pedump.c:619
BOOL WINAPI AdjustWindowRect(_Inout_ LPRECT, _In_ DWORD, _In_ BOOL)
#define SM_CXMIN
Definition: winuser.h:1000
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
#define CreateWindowW(a, b, c, d, e, f, g, h, i, j, k)
Definition: winuser.h:4470
#define CW_USEDEFAULT
Definition: winuser.h:225
int WINAPI GetSystemMetrics(_In_ int)
BOOL WINAPI SetRect(_Out_ LPRECT, _In_ int, _In_ int, _In_ int, _In_ int)
#define TRACE(s)
Definition: solgame.cpp:4
Definition: dcommon.idl:28
long bottom
Definition: dcommon.idl:29
long right
Definition: dcommon.idl:29
long left
Definition: dcommon.idl:29
long top
Definition: dcommon.idl:29
MCIDEVICEID wDevID
IBasicVideo * vidbasic
IVideoWindow * vidwin
Definition: style.c:91
#define max(a, b)
Definition: svc.c:63
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
#define E_NOINTERFACE
Definition: winerror.h:3479

◆ DllMain()

BOOL WINAPI DllMain ( HINSTANCE  hInstDLL,
DWORD  fdwReason,
LPVOID  fImpLoad 
)

Definition at line 49 of file mciqtz.c.

50{
51 switch (fdwReason) {
54 MCIQTZ_hInstance = hInstDLL;
55 break;
56 }
57 return TRUE;
58}
static DWORD const fdwReason
#define TRUE
Definition: types.h:120
#define DLL_PROCESS_ATTACH
Definition: compat.h:131
BOOL WINAPI DisableThreadLibraryCalls(IN HMODULE hLibModule)
Definition: loader.c:85

◆ MCIQTZ_DriverProc()

LRESULT CALLBACK MCIQTZ_DriverProc ( DWORD_PTR  dwDevID,
HDRVR  hDriv,
UINT  wMsg,
LPARAM  dwParam1,
LPARAM  dwParam2 
)

Definition at line 1220 of file mciqtz.c.

1222{
1223 TRACE("(%08IX, %p, %08X, %08IX, %08IX)\n",
1224 dwDevID, hDriv, wMsg, dwParam1, dwParam2);
1225
1226 switch (wMsg) {
1227 case DRV_LOAD: return 1;
1228 case DRV_FREE: return 1;
1229 case DRV_OPEN: return MCIQTZ_drvOpen((LPCWSTR)dwParam1, (LPMCI_OPEN_DRIVER_PARMSW)dwParam2);
1230 case DRV_CLOSE: return MCIQTZ_drvClose(dwDevID);
1231 case DRV_ENABLE: return 1;
1232 case DRV_DISABLE: return 1;
1233 case DRV_QUERYCONFIGURE: return 1;
1234 case DRV_CONFIGURE: return MCIQTZ_drvConfigure(dwDevID);
1235 case DRV_INSTALL: return DRVCNF_RESTART;
1236 case DRV_REMOVE: return DRVCNF_RESTART;
1237 }
1238
1239 /* session instance */
1240 if (dwDevID == 0xFFFFFFFF)
1241 return 1;
1242
1243 switch (wMsg) {
1244 case MCI_OPEN_DRIVER: return MCIQTZ_mciOpen (dwDevID, dwParam1, (LPMCI_DGV_OPEN_PARMSW) dwParam2);
1245 case MCI_CLOSE_DRIVER: return MCIQTZ_mciClose (dwDevID, dwParam1, (LPMCI_GENERIC_PARMS) dwParam2);
1246 case MCI_PLAY: return MCIQTZ_mciPlay (dwDevID, dwParam1, (LPMCI_PLAY_PARMS) dwParam2);
1247 case MCI_SEEK: return MCIQTZ_mciSeek (dwDevID, dwParam1, (LPMCI_SEEK_PARMS) dwParam2);
1248 case MCI_STOP: return MCIQTZ_mciStop (dwDevID, dwParam1, (LPMCI_GENERIC_PARMS) dwParam2);
1249 case MCI_PAUSE: return MCIQTZ_mciPause (dwDevID, dwParam1, (LPMCI_GENERIC_PARMS) dwParam2);
1250 case MCI_RESUME: return MCIQTZ_mciResume (dwDevID, dwParam1, (LPMCI_GENERIC_PARMS) dwParam2);
1251 case MCI_GETDEVCAPS: return MCIQTZ_mciGetDevCaps(dwDevID, dwParam1, (LPMCI_GETDEVCAPS_PARMS) dwParam2);
1252 case MCI_SET: return MCIQTZ_mciSet (dwDevID, dwParam1, (LPMCI_DGV_SET_PARMS) dwParam2);
1253 case MCI_STATUS: return MCIQTZ_mciStatus (dwDevID, dwParam1, (LPMCI_DGV_STATUS_PARMSW) dwParam2);
1254 case MCI_WHERE: return MCIQTZ_mciWhere (dwDevID, dwParam1, (LPMCI_DGV_RECT_PARMS) dwParam2);
1255 /* Digital Video specific */
1256 case MCI_SETAUDIO: return MCIQTZ_mciSetAudio (dwDevID, dwParam1, (LPMCI_DGV_SETAUDIO_PARMSW) dwParam2);
1257 case MCI_UPDATE:
1258 return MCIQTZ_mciUpdate(dwDevID, dwParam1, (LPMCI_DGV_UPDATE_PARMS)dwParam2);
1259 case MCI_WINDOW:
1260 return MCIQTZ_mciWindow(dwDevID, dwParam1, (LPMCI_DGV_WINDOW_PARMSW)dwParam2);
1261 case MCI_PUT:
1262 return MCIQTZ_mciPut(dwDevID, dwParam1, (MCI_GENERIC_PARMS*)dwParam2);
1263 case MCI_RECORD:
1264 case MCI_INFO:
1265 case MCI_LOAD:
1266 case MCI_SAVE:
1267 case MCI_FREEZE:
1268 case MCI_REALIZE:
1269 case MCI_UNFREEZE:
1270 case MCI_STEP:
1271 case MCI_COPY:
1272 case MCI_CUT:
1273 case MCI_DELETE:
1274 case MCI_PASTE:
1275 case MCI_CUE:
1276 /* Digital Video specific */
1277 case MCI_CAPTURE:
1278 case MCI_MONITOR:
1279 case MCI_RESERVE:
1280 case MCI_SIGNAL:
1281 case MCI_SETVIDEO:
1282 case MCI_QUALITY:
1283 case MCI_LIST:
1284 case MCI_UNDO:
1285 case MCI_CONFIGURE:
1286 case MCI_RESTORE:
1287 FIXME("Unimplemented command [%08X]\n", wMsg);
1288 break;
1289 case MCI_SPIN:
1290 case MCI_ESCAPE:
1291 WARN("Unsupported command [%08X]\n", wMsg);
1292 break;
1293 case MCI_OPEN:
1294 case MCI_CLOSE:
1295 FIXME("Shouldn't receive a MCI_OPEN or CLOSE message\n");
1296 break;
1297 default:
1298 TRACE("Sending msg [%08X] to default driver proc\n", wMsg);
1299 return DefDriverProc(dwDevID, hDriv, wMsg, dwParam1, dwParam2);
1300 }
1301
1303}
#define FIXME(fmt,...)
Definition: precomp.h:53
#define WARN(fmt,...)
Definition: precomp.h:61
#define MCI_SETAUDIO
Definition: digitalv.h:39
#define MCI_MONITOR
Definition: digitalv.h:37
#define MCI_LIST
Definition: digitalv.h:43
#define MCI_CAPTURE
Definition: digitalv.h:36
#define MCI_RESERVE
Definition: digitalv.h:38
#define MCI_SETVIDEO
Definition: digitalv.h:41
#define MCI_SIGNAL
Definition: digitalv.h:40
#define MCI_QUALITY
Definition: digitalv.h:42
#define MCI_RESTORE
Definition: digitalv.h:46
#define MCI_CONFIGURE
Definition: digitalv.h:45
#define MCI_UNDO
Definition: digitalv.h:44
LRESULT WINAPI DefDriverProc(DWORD_PTR dwDriverIdentifier, HDRVR hDrv, UINT Msg, LPARAM lParam1, LPARAM lParam2)
Definition: driver.c:554
#define DRV_LOAD(x)
static DWORD MCIQTZ_mciWindow(UINT wDevID, DWORD dwFlags, LPMCI_DGV_WINDOW_PARMSW lpParms)
Definition: mciqtz.c:989
static DWORD MCIQTZ_drvConfigure(DWORD dwDevID)
Definition: mciqtz.c:150
static DWORD MCIQTZ_mciPause(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)
Definition: mciqtz.c:617
static DWORD MCIQTZ_mciPut(UINT wDevID, DWORD dwFlags, MCI_GENERIC_PARMS *lpParms)
Definition: mciqtz.c:1047
static DWORD MCIQTZ_mciWhere(UINT wDevID, DWORD dwFlags, LPMCI_DGV_RECT_PARMS lpParms)
Definition: mciqtz.c:918
static DWORD MCIQTZ_mciResume(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)
Definition: mciqtz.c:640
static DWORD MCIQTZ_drvClose(DWORD dwDevID)
Definition: mciqtz.c:124
static DWORD MCIQTZ_mciSetAudio(UINT wDevID, DWORD dwFlags, LPMCI_DGV_SETAUDIO_PARMSW lpParms)
Definition: mciqtz.c:1161
static DWORD MCIQTZ_mciSet(UINT wDevID, DWORD dwFlags, LPMCI_DGV_SET_PARMS lpParms)
Definition: mciqtz.c:762
static DWORD MCIQTZ_mciStop(UINT, DWORD, LPMCI_GENERIC_PARMS)
Definition: mciqtz.c:591
static DWORD MCIQTZ_mciGetDevCaps(UINT wDevID, DWORD dwFlags, LPMCI_GETDEVCAPS_PARMS lpParms)
Definition: mciqtz.c:663
static DWORD MCIQTZ_mciOpen(UINT wDevID, DWORD dwFlags, LPMCI_DGV_OPEN_PARMSW lpOpenParms)
Definition: mciqtz.c:247
static DWORD MCIQTZ_mciPlay(UINT wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParms)
Definition: mciqtz.c:476
static DWORD MCIQTZ_mciUpdate(UINT wDevID, DWORD dwFlags, LPMCI_DGV_UPDATE_PARMS lpParms)
Definition: mciqtz.c:1097
static DWORD MCIQTZ_mciStatus(UINT wDevID, DWORD dwFlags, LPMCI_DGV_STATUS_PARMSW lpParms)
Definition: mciqtz.c:817
static DWORD MCIQTZ_drvOpen(LPCWSTR str, LPMCI_OPEN_DRIVER_PARMSW modp)
Definition: mciqtz.c:95
static DWORD MCIQTZ_mciClose(UINT, DWORD, LPMCI_GENERIC_PARMS)
Definition: mciqtz.c:369
static DWORD MCIQTZ_mciSeek(UINT wDevID, DWORD dwFlags, LPMCI_SEEK_PARMS lpParms)
Definition: mciqtz.c:546
#define MCI_CUT
Definition: mmsystem.h:671
#define MCI_SAVE
Definition: mmsystem.h:661
#define DRV_CLOSE
Definition: mmsystem.h:122
#define DRV_QUERYCONFIGURE
Definition: mmsystem.h:126
#define MCI_GETDEVCAPS
Definition: mmsystem.h:654
#define MCI_RESUME
Definition: mmsystem.h:675
#define MCI_DELETE
Definition: mmsystem.h:676
#define MCI_FREEZE
Definition: mmsystem.h:668
#define DRVCNF_RESTART
Definition: mmsystem.h:135
#define MCI_WINDOW
Definition: mmsystem.h:665
#define MCI_STATUS
Definition: mmsystem.h:662
#define MCI_COPY
Definition: mmsystem.h:672
#define MCI_ESCAPE
Definition: mmsystem.h:648
#define MCIERR_UNRECOGNIZED_COMMAND
Definition: mmsystem.h:571
#define MCI_SET
Definition: mmsystem.h:656
#define MCI_LOAD
Definition: mmsystem.h:670
#define MCI_UPDATE
Definition: mmsystem.h:674
#define DRV_REMOVE
Definition: mmsystem.h:128
#define DRV_ENABLE
Definition: mmsystem.h:120
#define MCI_STOP
Definition: mmsystem.h:651
#define MCI_CLOSE
Definition: mmsystem.h:647
#define MCI_SEEK
Definition: mmsystem.h:650
#define DRV_CONFIGURE
Definition: mmsystem.h:125
#define DRV_OPEN
Definition: mmsystem.h:121
#define MCI_WHERE
Definition: mmsystem.h:667
#define DRV_INSTALL
Definition: mmsystem.h:127
#define MCI_OPEN
Definition: mmsystem.h:646
#define MCI_UNFREEZE
Definition: mmsystem.h:669
#define MCI_PUT
Definition: mmsystem.h:666
#define MCI_SPIN
Definition: mmsystem.h:655
#define MCI_CUE
Definition: mmsystem.h:663
#define MCI_PAUSE
Definition: mmsystem.h:652
#define MCI_INFO
Definition: mmsystem.h:653
#define MCI_PASTE
Definition: mmsystem.h:673
#define DRV_FREE
Definition: mmsystem.h:124
#define MCI_PLAY
Definition: mmsystem.h:649
#define MCI_STEP
Definition: mmsystem.h:657
#define MCI_REALIZE
Definition: mmsystem.h:664
#define MCI_RECORD
Definition: mmsystem.h:658
#define DRV_DISABLE
Definition: mmsystem.h:123
#define MCI_OPEN_DRIVER
Definition: mmddk.h:338
#define MCI_CLOSE_DRIVER
Definition: mmddk.h:339
const uint16_t * LPCWSTR
Definition: typedefs.h:57

◆ MCIQTZ_drvClose()

static DWORD MCIQTZ_drvClose ( DWORD  dwDevID)
static

Definition at line 124 of file mciqtz.c.

125{
126 WINE_MCIQTZ* wma;
127
128 TRACE("(%04lx)\n", dwDevID);
129
130 wma = MCIQTZ_mciGetOpenDev(dwDevID);
131
132 if (wma) {
133 /* finish all outstanding things */
134 MCIQTZ_mciClose(dwDevID, MCI_WAIT, NULL);
135
138 mciSetDriverData(dwDevID, 0);
140 HeapFree(GetProcessHeap(), 0, wma);
141 return 1;
142 }
143
144 return (dwDevID == 0xFFFFFFFF) ? 1 : 0;
145}
#define CloseHandle
Definition: compat.h:739
#define GetProcessHeap()
Definition: compat.h:736
#define HeapFree(x, y, z)
Definition: compat.h:735
BOOL WINAPI mciFreeCommandResource(UINT uTable)
Definition: mci.c:1681
BOOL WINAPI mciSetDriverData(UINT uDeviceID, DWORD dwData)
static void unregister_class(void)
Definition: mciqtz.c:74
static WINE_MCIQTZ * MCIQTZ_mciGetOpenDev(UINT wDevID)
Definition: mciqtz.c:63
#define MCI_WAIT
Definition: mmsystem.h:730
UINT command_table
HANDLE stop_event

Referenced by MCIQTZ_DriverProc().

◆ MCIQTZ_drvConfigure()

static DWORD MCIQTZ_drvConfigure ( DWORD  dwDevID)
static

Definition at line 150 of file mciqtz.c.

151{
152 WINE_MCIQTZ* wma;
153
154 TRACE("(%04lx)\n", dwDevID);
155
156 wma = MCIQTZ_mciGetOpenDev(dwDevID);
157 if (!wma)
158 return 0;
159
160 MCIQTZ_mciStop(dwDevID, MCI_WAIT, NULL);
161
162 MessageBoxA(0, "Sample QTZ Wine Driver !", "MM-Wine Driver", MB_OK);
163
164 return 1;
165}
int WINAPI MessageBoxA(_In_opt_ HWND hWnd, _In_opt_ LPCSTR lpText, _In_opt_ LPCSTR lpCaption, _In_ UINT uType)
#define MB_OK
Definition: winuser.h:801

Referenced by MCIQTZ_DriverProc().

◆ MCIQTZ_drvOpen()

static DWORD MCIQTZ_drvOpen ( LPCWSTR  str,
LPMCI_OPEN_DRIVER_PARMSW  modp 
)
static

Definition at line 95 of file mciqtz.c.

96{
97 WINE_MCIQTZ* wma;
98
99 TRACE("(%s, %p)\n", debugstr_w(str), modp);
100
101 /* session instance */
102 if (!modp)
103 return 0xFFFFFFFF;
104
105 if (!register_class())
106 return 0;
107
109 if (!wma)
110 return 0;
111
114 wma->wDevID = modp->wDeviceID;
117
118 return modp->wDeviceID;
119}
#define HeapAlloc
Definition: compat.h:733
#define HEAP_ZERO_MEMORY
Definition: compat.h:134
UINT WINAPI mciLoadCommandResource(HINSTANCE hInstance, LPCWSTR lpResName, UINT uType)
Definition: mci.c:1641
#define L(x)
Definition: resources.c:13
#define debugstr_w
Definition: kernel32.h:32
static bool register_class(void)
Definition: mciqtz.c:79
#define MCI_DEVTYPE_DIGITAL_VIDEO
Definition: mmsystem.h:687
const WCHAR * str
UINT wCustomCommandTable
Definition: mmddk.h:438
HANDLE WINAPI DECLSPEC_HOTPATCH CreateEventW(IN LPSECURITY_ATTRIBUTES lpEventAttributes OPTIONAL, IN BOOL bManualReset, IN BOOL bInitialState, IN LPCWSTR lpName OPTIONAL)
Definition: synch.c:587
uint32_t DWORD_PTR
Definition: typedefs.h:65

Referenced by MCIQTZ_DriverProc().

◆ MCIQTZ_mciClose()

static DWORD MCIQTZ_mciClose ( UINT  wDevID,
DWORD  dwFlags,
LPMCI_GENERIC_PARMS  lpParms 
)
static

Definition at line 369 of file mciqtz.c.

370{
371 WINE_MCIQTZ* wma;
372
373 TRACE("(%04x, %08lX, %p)\n", wDevID, dwFlags, lpParms);
374
375 wma = MCIQTZ_mciGetOpenDev(wDevID);
376 if (!wma)
378
379 MCIQTZ_mciStop(wDevID, MCI_WAIT, NULL);
380
381 if (wma->opened) {
382 if (wma->window)
383 {
384 IVideoWindow_put_MessageDrain(wma->vidwin, (OAHWND)NULL);
385 IVideoWindow_put_Owner(wma->vidwin, (OAHWND)NULL);
386 DestroyWindow(wma->window);
387 wma->window = NULL;
388 }
389 IVideoWindow_Release(wma->vidwin);
390 IBasicVideo_Release(wma->vidbasic);
391 IBasicAudio_Release(wma->audio);
392 IMediaSeeking_Release(wma->seek);
393 IMediaEvent_Release(wma->mevent);
394 IGraphBuilder_Release(wma->pgraph);
395 IMediaControl_Release(wma->pmctrl);
396 if (wma->uninit)
398 wma->opened = FALSE;
399 }
400
401 return 0;
402}
void WINAPI DECLSPEC_HOTPATCH CoUninitialize(void)
Definition: combase.c:2842
#define MCIERR_INVALID_DEVICE_ID
Definition: mmsystem.h:569
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
Definition: netsh.h:141
BOOL WINAPI DestroyWindow(_In_ HWND)
IMediaEvent * mevent
IMediaSeeking * seek
IGraphBuilder * pgraph
IMediaControl * pmctrl
IBasicAudio * audio

Referenced by MCIQTZ_DriverProc(), and MCIQTZ_drvClose().

◆ MCIQTZ_mciGetDevCaps()

static DWORD MCIQTZ_mciGetDevCaps ( UINT  wDevID,
DWORD  dwFlags,
LPMCI_GETDEVCAPS_PARMS  lpParms 
)
static

Definition at line 663 of file mciqtz.c.

664{
665 WINE_MCIQTZ* wma;
666
667 TRACE("(%04x, %08lX, %p)\n", wDevID, dwFlags, lpParms);
668
669 if(!lpParms)
671
672 wma = MCIQTZ_mciGetOpenDev(wDevID);
673 if (!wma)
675
678
679 switch (lpParms->dwItem) {
682 TRACE("MCI_GETDEVCAPS_CAN_RECORD = %08lx\n", lpParms->dwReturn);
683 break;
686 TRACE("MCI_GETDEVCAPS_HAS_AUDIO = %08lx\n", lpParms->dwReturn);
687 break;
690 TRACE("MCI_GETDEVCAPS_HAS_VIDEO = %08lx\n", lpParms->dwReturn);
691 break;
694 TRACE("MCI_GETDEVCAPS_DEVICE_TYPE = %08lx\n", lpParms->dwReturn);
695 break;
698 TRACE("MCI_GETDEVCAPS_USES_FILES = %08lx\n", lpParms->dwReturn);
699 break;
702 TRACE("MCI_GETDEVCAPS_COMPOUND_DEVICE = %08lx\n", lpParms->dwReturn);
703 break;
706 TRACE("MCI_GETDEVCAPS_EJECT = %08lx\n", lpParms->dwReturn);
707 break;
710 TRACE("MCI_GETDEVCAPS_CAN_PLAY = %08lx\n", lpParms->dwReturn);
711 break;
714 TRACE("MCI_GETDEVCAPS_CAN_SAVE = %08lx\n", lpParms->dwReturn);
715 break;
718 TRACE("MCI_DGV_GETDEVCAPS_CAN_REVERSE = %08lx\n", lpParms->dwReturn);
719 break;
721 lpParms->dwReturn = MAKEMCIRESOURCE(FALSE, MCI_FALSE); /* FIXME */
722 TRACE("MCI_DGV_GETDEVCAPS_CAN_STRETCH = %08lx\n", lpParms->dwReturn);
723 break;
726 TRACE("MCI_DGV_GETDEVCAPS_CAN_LOCK = %08lx\n", lpParms->dwReturn);
727 break;
730 TRACE("MCI_DGV_GETDEVCAPS_CAN_FREEZE = %08lx\n", lpParms->dwReturn);
731 break;
734 TRACE("MCI_DGV_GETDEVCAPS_CAN_STRETCH_INPUT = %08lx\n", lpParms->dwReturn);
735 break;
738 TRACE("MCI_DGV_GETDEVCAPS_HAS_STILL = %08lx\n", lpParms->dwReturn);
739 break;
741 lpParms->dwReturn = MAKEMCIRESOURCE(FALSE, MCI_FALSE); /* FIXME */
742 TRACE("MCI_DGV_GETDEVCAPS_CAN_TEST = %08lx\n", lpParms->dwReturn);
743 break;
745 lpParms->dwReturn = 1;
746 TRACE("MCI_DGV_GETDEVCAPS_MAX_WINDOWS = %lu\n", lpParms->dwReturn);
747 return 0;
748 default:
749 WARN("Unknown capability %08lx\n", lpParms->dwItem);
750 /* Fall through */
751 case MCI_DGV_GETDEVCAPS_MAXIMUM_RATE: /* unknown to w2k */
752 case MCI_DGV_GETDEVCAPS_MINIMUM_RATE: /* unknown to w2k */
754 }
755
757}
#define MCI_DGV_GETDEVCAPS_HAS_STILL
Definition: digitalv.h:121
#define MCI_DGV_GETDEVCAPS_CAN_STRETCH
Definition: digitalv.h:117
#define MCI_DGV_GETDEVCAPS_CAN_LOCK
Definition: digitalv.h:116
#define MCI_DGV_GETDEVCAPS_MAX_WINDOWS
Definition: digitalv.h:119
#define MCI_DGV_GETDEVCAPS_MINIMUM_RATE
Definition: digitalv.h:126
#define MCI_DGV_GETDEVCAPS_CAN_STR_IN
Definition: digitalv.h:123
#define MCI_DGV_GETDEVCAPS_CAN_TEST
Definition: digitalv.h:124
#define MCI_DGV_GETDEVCAPS_CAN_REVERSE
Definition: digitalv.h:120
#define MCI_DGV_GETDEVCAPS_CAN_FREEZE
Definition: digitalv.h:118
#define MCI_DGV_GETDEVCAPS_MAXIMUM_RATE
Definition: digitalv.h:125
#define MAKEMCIRESOURCE(wRet, wRes)
Definition: mmddk.h:388
#define MCI_FALSE
Definition: mmddk.h:340
#define MCI_TRUE
Definition: mmddk.h:341
#define MCI_RESOURCE_RETURNED
Definition: mmddk.h:369
#define MCI_GETDEVCAPS_CAN_SAVE
Definition: mmsystem.h:767
#define MCI_GETDEVCAPS_HAS_VIDEO
Definition: mmsystem.h:761
#define MCI_GETDEVCAPS_CAN_RECORD
Definition: mmsystem.h:759
#define MCI_GETDEVCAPS_DEVICE_TYPE
Definition: mmsystem.h:762
#define MCI_GETDEVCAPS_COMPOUND_DEVICE
Definition: mmsystem.h:764
#define MCI_GETDEVCAPS_USES_FILES
Definition: mmsystem.h:763
#define MCI_GETDEVCAPS_CAN_PLAY
Definition: mmsystem.h:766
#define MCI_GETDEVCAPS_CAN_EJECT
Definition: mmsystem.h:765
#define MCIERR_MISSING_PARAMETER
Definition: mmsystem.h:583
#define MCIERR_NULL_PARAMETER_BLOCK
Definition: mmsystem.h:605
#define MCI_GETDEVCAPS_ITEM
Definition: mmsystem.h:758
#define MCIERR_UNSUPPORTED_FUNCTION
Definition: mmsystem.h:584
#define MCI_GETDEVCAPS_HAS_AUDIO
Definition: mmsystem.h:760

Referenced by MCIQTZ_DriverProc().

◆ MCIQTZ_mciGetOpenDev()

static WINE_MCIQTZ * MCIQTZ_mciGetOpenDev ( UINT  wDevID)
static

Definition at line 63 of file mciqtz.c.

64{
66
67 if (!wma) {
68 WARN("Invalid wDevID=%u\n", wDevID);
69 return NULL;
70 }
71 return wma;
72}
DWORD WINAPI mciGetDriverData(UINT uDeviceID)
Definition: mci.c:2233

Referenced by MCIQTZ_drvClose(), MCIQTZ_drvConfigure(), MCIQTZ_mciClose(), MCIQTZ_mciGetDevCaps(), MCIQTZ_mciOpen(), MCIQTZ_mciPause(), MCIQTZ_mciPlay(), MCIQTZ_mciPut(), MCIQTZ_mciResume(), MCIQTZ_mciSeek(), MCIQTZ_mciSet(), MCIQTZ_mciSetAudio(), MCIQTZ_mciStatus(), MCIQTZ_mciStop(), MCIQTZ_mciUpdate(), MCIQTZ_mciWhere(), and MCIQTZ_mciWindow().

◆ MCIQTZ_mciNotify()

static void MCIQTZ_mciNotify ( DWORD_PTR  hWndCallBack,
WINE_MCIQTZ *  wma,
UINT  wStatus 
)
static

Definition at line 236 of file mciqtz.c.

237{
238 MCIDEVICEID wDevID = wma->notify_devid;
240 if (old) mciDriverNotify(old, wDevID, MCI_NOTIFY_SUPERSEDED);
241 mciDriverNotify(HWND_32(LOWORD(hWndCallBack)), wDevID, wStatus);
242}
BOOL WINAPI mciDriverNotify(HWND hwndCallback, UINT uDeviceID, UINT uStatus)
Definition: mci.c:2223
#define InterlockedExchangePointer(Target, Value)
Definition: dshow.h:45
#define MCI_NOTIFY_SUPERSEDED
Definition: mmsystem.h:726
UINT MCIDEVICEID
Definition: mmsystem.h:961
#define LOWORD(l)
Definition: pedump.c:82
MCIDEVICEID notify_devid
HANDLE callback
#define HWND_32(h16)
Definition: wownt32.h:29

Referenced by MCIQTZ_mciPut(), MCIQTZ_mciSeek(), and MCIQTZ_mciStatus().

◆ MCIQTZ_mciOpen()

static DWORD MCIQTZ_mciOpen ( UINT  wDevID,
DWORD  dwFlags,
LPMCI_DGV_OPEN_PARMSW  lpOpenParms 
)
static

Definition at line 247 of file mciqtz.c.

249{
250 WINE_MCIQTZ* wma;
251 HRESULT hr;
252
253 TRACE("(%04x, %08lX, %p)\n", wDevID, dwFlags, lpOpenParms);
254
255 if(!lpOpenParms)
257
258 wma = MCIQTZ_mciGetOpenDev(wDevID);
259 if (!wma)
261
262 MCIQTZ_mciStop(wDevID, MCI_WAIT, NULL);
263
265 wma->uninit = SUCCEEDED(hr);
266
267 hr = CoCreateInstance(&CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, &IID_IGraphBuilder, (LPVOID*)&wma->pgraph);
268 if (FAILED(hr)) {
269 TRACE("Cannot create filtergraph (hr = %lx)\n", hr);
270 goto err;
271 }
272
273 hr = IGraphBuilder_QueryInterface(wma->pgraph, &IID_IMediaControl, (LPVOID*)&wma->pmctrl);
274 if (FAILED(hr)) {
275 TRACE("Cannot get IMediaControl interface (hr = %lx)\n", hr);
276 goto err;
277 }
278
279 hr = IGraphBuilder_QueryInterface(wma->pgraph, &IID_IMediaSeeking, (void**)&wma->seek);
280 if (FAILED(hr)) {
281 TRACE("Cannot get IMediaSeeking interface (hr = %lx)\n", hr);
282 goto err;
283 }
284
285 hr = IGraphBuilder_QueryInterface(wma->pgraph, &IID_IMediaEvent, (void**)&wma->mevent);
286 if (FAILED(hr)) {
287 TRACE("Cannot get IMediaEvent interface (hr = %lx)\n", hr);
288 goto err;
289 }
290
291 hr = IGraphBuilder_QueryInterface(wma->pgraph, &IID_IVideoWindow, (void**)&wma->vidwin);
292 if (FAILED(hr)) {
293 TRACE("Cannot get IVideoWindow interface (hr = %lx)\n", hr);
294 goto err;
295 }
296
297 hr = IGraphBuilder_QueryInterface(wma->pgraph, &IID_IBasicVideo, (void**)&wma->vidbasic);
298 if (FAILED(hr)) {
299 TRACE("Cannot get IBasicVideo interface (hr = %lx)\n", hr);
300 goto err;
301 }
302
303 hr = IGraphBuilder_QueryInterface(wma->pgraph, &IID_IBasicAudio, (void**)&wma->audio);
304 if (FAILED(hr)) {
305 TRACE("Cannot get IBasicAudio interface (hr = %lx)\n", hr);
306 goto err;
307 }
308
310 TRACE("Wrong dwFlags %lx\n", dwFlags);
311 goto err;
312 }
313
314 if (!lpOpenParms->lpstrElementName || !lpOpenParms->lpstrElementName[0]) {
315 TRACE("Invalid filename specified\n");
316 goto err;
317 }
318
319 TRACE("Open file %s\n", debugstr_w(lpOpenParms->lpstrElementName));
320
321 hr = IGraphBuilder_RenderFile(wma->pgraph, lpOpenParms->lpstrElementName, NULL);
322 if (FAILED(hr)) {
323 TRACE("Cannot render file (hr = %lx)\n", hr);
324 goto err;
325 }
326
327 if (!create_window(wma, dwFlags, lpOpenParms))
328 goto err;
329 wma->opened = TRUE;
330
331 if (dwFlags & MCI_NOTIFY)
333
334 return 0;
335
336err:
337 if (wma->audio)
338 IBasicAudio_Release(wma->audio);
339 wma->audio = NULL;
340 if (wma->vidbasic)
341 IBasicVideo_Release(wma->vidbasic);
342 wma->vidbasic = NULL;
343 if (wma->seek)
344 IMediaSeeking_Release(wma->seek);
345 wma->seek = NULL;
346 if (wma->vidwin)
347 IVideoWindow_Release(wma->vidwin);
348 wma->vidwin = NULL;
349 if (wma->pgraph)
350 IGraphBuilder_Release(wma->pgraph);
351 wma->pgraph = NULL;
352 if (wma->mevent)
353 IMediaEvent_Release(wma->mevent);
354 wma->mevent = NULL;
355 if (wma->pmctrl)
356 IMediaControl_Release(wma->pmctrl);
357 wma->pmctrl = NULL;
358
359 if (wma->uninit)
361 wma->uninit = FALSE;
362
363 return MCIERR_INTERNAL;
364}
HRESULT WINAPI DECLSPEC_HOTPATCH CoInitializeEx(void *reserved, DWORD model)
Definition: combase.c:2803
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, IUnknown *outer, DWORD cls_context, REFIID riid, void **obj)
Definition: combase.c:1685
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define MCI_NOTIFY
Definition: mmsystem.h:729
#define MCI_OPEN_ELEMENT_ID
Definition: mmsystem.h:737
#define MCI_OPEN_ELEMENT
Definition: mmsystem.h:735
#define MCIERR_INTERNAL
Definition: mmsystem.h:587
#define MCI_NOTIFY_SUCCESSFUL
Definition: mmsystem.h:725
static HWND create_window(void)
Definition: imagelist.c:159
@ COINIT_MULTITHREADED
Definition: objbase.h:280
#define err(...)
DWORD_PTR dwCallback
Definition: digitalv.h:604
LPWSTR lpstrElementName
Definition: digitalv.h:607

Referenced by MCIQTZ_DriverProc().

◆ MCIQTZ_mciPause()

static DWORD MCIQTZ_mciPause ( UINT  wDevID,
DWORD  dwFlags,
LPMCI_GENERIC_PARMS  lpParms 
)
static

Definition at line 617 of file mciqtz.c.

618{
619 WINE_MCIQTZ* wma;
620 HRESULT hr;
621
622 TRACE("(%04x, %08lX, %p)\n", wDevID, dwFlags, lpParms);
623
624 wma = MCIQTZ_mciGetOpenDev(wDevID);
625 if (!wma)
627
628 hr = IMediaControl_Pause(wma->pmctrl);
629 if (FAILED(hr)) {
630 TRACE("Cannot pause filtergraph (hr = %lx)\n", hr);
631 return MCIERR_INTERNAL;
632 }
633
634 return 0;
635}

Referenced by MCIQTZ_DriverProc().

◆ MCIQTZ_mciPlay()

static DWORD MCIQTZ_mciPlay ( UINT  wDevID,
DWORD  dwFlags,
LPMCI_PLAY_PARMS  lpParms 
)
static

Definition at line 476 of file mciqtz.c.

477{
478 WINE_MCIQTZ* wma;
479 HRESULT hr;
480 GUID format;
481 DWORD start_flags;
482
483 TRACE("(%04x, %08lX, %p)\n", wDevID, dwFlags, lpParms);
484
485 if(!lpParms)
487
488 wma = MCIQTZ_mciGetOpenDev(wDevID);
489 if (!wma)
491
493 if (dwFlags & MCI_NOTIFY) {
494 HANDLE old;
496 if (old)
498 }
499
500 wma->mci_flags = dwFlags;
501 IMediaSeeking_GetTimeFormat(wma->seek, &format);
502 if (dwFlags & MCI_FROM) {
503 wma->seek_start = lpParms->dwFrom;
504 if (IsEqualGUID(&format, &TIME_FORMAT_MEDIA_TIME))
505 wma->seek_start *= 10000;
506
507 start_flags = AM_SEEKING_AbsolutePositioning;
508 } else {
509 wma->seek_start = 0;
510 start_flags = AM_SEEKING_NoPositioning;
511 }
512 if (dwFlags & MCI_TO) {
513 wma->seek_stop = lpParms->dwTo;
514 if (IsEqualGUID(&format, &TIME_FORMAT_MEDIA_TIME))
515 wma->seek_stop *= 10000;
516 } else {
517 wma->seek_stop = 0;
518 IMediaSeeking_GetDuration(wma->seek, &wma->seek_stop);
519 }
520 IMediaSeeking_SetPositions(wma->seek, &wma->seek_start, start_flags,
522
523 hr = IMediaControl_Run(wma->pmctrl);
524 if (FAILED(hr)) {
525 TRACE("Cannot run filtergraph (hr = %lx)\n", hr);
526 return MCIERR_INTERNAL;
527 }
528
529 if (wma->parent)
531
532 if (!wma->thread)
533 {
534 wma->thread = CreateThread(NULL, 0, MCIQTZ_notifyThread, wma, 0, NULL);
535 if (!wma->thread) {
536 TRACE("Can't create thread\n");
537 return MCIERR_INTERNAL;
538 }
539 }
540 return 0;
541}
@ AM_SEEKING_NoPositioning
Definition: axcore.idl:591
@ AM_SEEKING_AbsolutePositioning
Definition: axcore.idl:592
HANDLE WINAPI DECLSPEC_HOTPATCH CreateThread(IN LPSECURITY_ATTRIBUTES lpThreadAttributes, IN DWORD dwStackSize, IN LPTHREAD_START_ROUTINE lpStartAddress, IN LPVOID lpParameter, IN DWORD dwCreationFlags, OUT LPDWORD lpThreadId)
Definition: thread.c:137
static DWORD CALLBACK MCIQTZ_notifyThread(LPVOID parm)
Definition: mciqtz.c:407
#define MCI_TO
Definition: mmsystem.h:732
#define MCI_NOTIFY_ABORTED
Definition: mmsystem.h:727
#define MCI_FROM
Definition: mmsystem.h:731
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
#define SW_SHOW
Definition: winuser.h:786
REFERENCE_TIME seek_stop
REFERENCE_TIME seek_start
DWORD_PTR dwCallback
Definition: mmsystem.h:1539
BOOL WINAPI DECLSPEC_HOTPATCH ResetEvent(IN HANDLE hEvent)
Definition: synch.c:650

Referenced by MCIQTZ_DriverProc().

◆ MCIQTZ_mciPut()

static DWORD MCIQTZ_mciPut ( UINT  wDevID,
DWORD  dwFlags,
MCI_GENERIC_PARMS *  lpParms 
)
static

Definition at line 1047 of file mciqtz.c.

1048{
1049 WINE_MCIQTZ *wma = MCIQTZ_mciGetOpenDev(wDevID);
1050 MCI_DGV_RECT_PARMS *rectparms;
1051 HRESULT hr;
1052
1053 TRACE("(%04x, %08lX, %p)\n", wDevID, dwFlags, lpParms);
1054
1055 if(!lpParms)
1057
1058 if (!wma)
1060
1061 if (!(dwFlags & MCI_DGV_RECT)) {
1062 FIXME("No support for non-RECT MCI_PUT\n");
1063 return 1;
1064 }
1065
1066 if (dwFlags & MCI_TEST)
1067 return 0;
1068
1069 dwFlags &= ~MCI_DGV_RECT;
1070 rectparms = (MCI_DGV_RECT_PARMS*)lpParms;
1071
1073 hr = IVideoWindow_SetWindowPosition(wma->vidwin,
1074 rectparms->rc.left, rectparms->rc.top,
1075 rectparms->rc.right - rectparms->rc.left,
1076 rectparms->rc.bottom - rectparms->rc.top);
1077 if(FAILED(hr))
1078 WARN("IVideoWindow_SetWindowPosition failed: 0x%lx\n", hr);
1079
1080 dwFlags &= ~MCI_DGV_PUT_DESTINATION;
1081 }
1082
1083 if (dwFlags & MCI_NOTIFY) {
1085 dwFlags &= ~MCI_NOTIFY;
1086 }
1087
1088 if (dwFlags)
1089 FIXME("No support for some flags: 0x%lx\n", dwFlags);
1090
1091 return 0;
1092}
#define MCI_DGV_PUT_DESTINATION
Definition: digitalv.h:234
#define MCI_DGV_RECT
Definition: digitalv.h:232
#define MCI_TEST
Definition: digitalv.h:32
static void MCIQTZ_mciNotify(DWORD_PTR hWndCallBack, WINE_MCIQTZ *wma, UINT wStatus)
Definition: mciqtz.c:236
DWORD_PTR dwCallback
Definition: mmsystem.h:1519

Referenced by MCIQTZ_DriverProc().

◆ MCIQTZ_mciResume()

static DWORD MCIQTZ_mciResume ( UINT  wDevID,
DWORD  dwFlags,
LPMCI_GENERIC_PARMS  lpParms 
)
static

Definition at line 640 of file mciqtz.c.

641{
642 WINE_MCIQTZ* wma;
643 HRESULT hr;
644
645 TRACE("(%04x, %08lX, %p)\n", wDevID, dwFlags, lpParms);
646
647 wma = MCIQTZ_mciGetOpenDev(wDevID);
648 if (!wma)
650
651 hr = IMediaControl_Run(wma->pmctrl);
652 if (FAILED(hr)) {
653 TRACE("Cannot run filtergraph (hr = %lx)\n", hr);
654 return MCIERR_INTERNAL;
655 }
656
657 return 0;
658}

Referenced by MCIQTZ_DriverProc().

◆ MCIQTZ_mciSeek()

static DWORD MCIQTZ_mciSeek ( UINT  wDevID,
DWORD  dwFlags,
LPMCI_SEEK_PARMS  lpParms 
)
static

Definition at line 546 of file mciqtz.c.

547{
548 WINE_MCIQTZ* wma;
549 HRESULT hr;
550 LONGLONG newpos;
551
552 TRACE("(%04x, %08lX, %p)\n", wDevID, dwFlags, lpParms);
553
554 if(!lpParms)
556
557 wma = MCIQTZ_mciGetOpenDev(wDevID);
558 if (!wma)
560
561 MCIQTZ_mciStop(wDevID, MCI_WAIT, NULL);
562
564 newpos = 0;
565 } else if (dwFlags & MCI_SEEK_TO_END) {
566 FIXME("MCI_SEEK_TO_END not implemented yet\n");
567 return MCIERR_INTERNAL;
568 } else if (dwFlags & MCI_TO) {
569 FIXME("MCI_TO not implemented yet\n");
570 return MCIERR_INTERNAL;
571 } else {
572 WARN("dwFlag doesn't tell where to seek to...\n");
574 }
575
576 hr = IMediaSeeking_SetPositions(wma->seek, &newpos, AM_SEEKING_AbsolutePositioning, NULL, AM_SEEKING_NoPositioning);
577 if (FAILED(hr)) {
578 FIXME("Cannot set position (hr = %lx)\n", hr);
579 return MCIERR_INTERNAL;
580 }
581
582 if (dwFlags & MCI_NOTIFY)
584
585 return 0;
586}
#define MCI_SEEK_TO_END
Definition: mmsystem.h:741
#define MCI_SEEK_TO_START
Definition: mmsystem.h:740
DWORD_PTR dwCallback
Definition: mmsystem.h:1545
int64_t LONGLONG
Definition: typedefs.h:68

Referenced by MCIQTZ_DriverProc().

◆ MCIQTZ_mciSet()

static DWORD MCIQTZ_mciSet ( UINT  wDevID,
DWORD  dwFlags,
LPMCI_DGV_SET_PARMS  lpParms 
)
static

Definition at line 762 of file mciqtz.c.

763{
764 WINE_MCIQTZ* wma;
765
766 TRACE("(%04x, %08lX, %p)\n", wDevID, dwFlags, lpParms);
767
768 if(!lpParms)
770
771 wma = MCIQTZ_mciGetOpenDev(wDevID);
772 if (!wma)
774
776 switch (lpParms->dwTimeFormat) {
778 TRACE("MCI_SET_TIME_FORMAT = MCI_FORMAT_MILLISECONDS\n");
780 break;
782 TRACE("MCI_SET_TIME_FORMAT = MCI_FORMAT_FRAMES\n");
784 break;
785 default:
786 WARN("Bad time format %lu\n", lpParms->dwTimeFormat);
788 }
789 }
790
792 FIXME("MCI_SET_DOOR_OPEN not implemented yet\n");
794 FIXME("MCI_SET_DOOR_CLOSED not implemented yet\n");
796 FIXME("MCI_SET_AUDIO not implemented yet\n");
798 FIXME("MCI_SET_VIDEO not implemented yet\n");
799 if (dwFlags & MCI_SET_ON)
800 FIXME("MCI_SET_ON not implemented yet\n");
801 if (dwFlags & MCI_SET_OFF)
802 FIXME("MCI_SET_OFF not implemented yet\n");
804 FIXME("MCI_SET_AUDIO_LEFT not implemented yet\n");
806 FIXME("MCI_SET_AUDIO_RIGHT not implemented yet\n");
807
808 if (dwFlags & ~0x7f03 /* All MCI_SET flags mask */)
809 ERR("Unknown flags %08lx\n", dwFlags & ~0x7f03);
810
811 return 0;
812}
#define MCI_SET_AUDIO
Definition: mmsystem.h:775
#define MCI_FORMAT_MILLISECONDS
Definition: mmsystem.h:701
#define MCI_SET_DOOR_OPEN
Definition: mmsystem.h:772
#define MCI_SET_TIME_FORMAT
Definition: mmsystem.h:774
#define MCI_SET_VIDEO
Definition: mmsystem.h:776
#define MCI_SET_AUDIO_RIGHT
Definition: mmsystem.h:781
#define MCI_SET_DOOR_CLOSED
Definition: mmsystem.h:773
#define MCI_SET_AUDIO_LEFT
Definition: mmsystem.h:780
#define MCI_SET_OFF
Definition: mmsystem.h:778
#define MCIERR_BAD_TIME_FORMAT
Definition: mmsystem.h:601
#define MCI_FORMAT_FRAMES
Definition: mmsystem.h:704
#define MCI_SET_ON
Definition: mmsystem.h:777
DWORD dwTimeFormat
Definition: digitalv.h:733
DWORD time_format

Referenced by MCIQTZ_DriverProc().

◆ MCIQTZ_mciSetAudio()

static DWORD MCIQTZ_mciSetAudio ( UINT  wDevID,
DWORD  dwFlags,
LPMCI_DGV_SETAUDIO_PARMSW  lpParms 
)
static

Definition at line 1161 of file mciqtz.c.

1162{
1163 WINE_MCIQTZ *wma;
1164 DWORD ret = 0;
1165
1166 TRACE("(%04x, %08lx, %p)\n", wDevID, dwFlags, lpParms);
1167
1168 if(!lpParms)
1170
1171 wma = MCIQTZ_mciGetOpenDev(wDevID);
1172 if (!wma)
1174
1175 if (!(dwFlags & MCI_DGV_SETAUDIO_ITEM)) {
1176 FIXME("Unknown flags (%08lx)\n", dwFlags);
1177 return 0;
1178 }
1179
1181 switch (lpParms->dwItem) {
1184 long vol;
1185 HRESULT hr;
1186 if (lpParms->dwValue > 1000) {
1188 break;
1189 }
1190 if (dwFlags & MCI_TEST)
1191 break;
1192 if (lpParms->dwValue != 0)
1193 vol = (long)(2000.0 * (log10(lpParms->dwValue) - 3.0));
1194 else
1195 vol = -10000;
1196 TRACE("Setting volume to %ld\n", vol);
1197 hr = IBasicAudio_put_Volume(wma->audio, vol);
1198 if (FAILED(hr)) {
1199 WARN("Cannot set volume (hr = %lx)\n", hr);
1201 }
1202 }
1203 break;
1204 default:
1205 FIXME("Unknown item %08lx\n", lpParms->dwItem);
1206 break;
1207 }
1208 }
1209
1210 return ret;
1211}
#define MCI_DGV_SETAUDIO_ITEM
Definition: digitalv.h:296
#define MCI_DGV_SETAUDIO_VALUE
Definition: digitalv.h:297
#define MCI_DGV_SETAUDIO_VOLUME
Definition: digitalv.h:305
return ret
Definition: mutex.c:147
double log10(double x)
Definition: freeldr.c:191
#define MCIERR_OUTOFRANGE
Definition: mmsystem.h:592
#define long
Definition: qsort.c:33

Referenced by MCIQTZ_DriverProc().

◆ MCIQTZ_mciStatus()

static DWORD MCIQTZ_mciStatus ( UINT  wDevID,
DWORD  dwFlags,
LPMCI_DGV_STATUS_PARMSW  lpParms 
)
static

Definition at line 817 of file mciqtz.c.

818{
819 WINE_MCIQTZ* wma;
820 HRESULT hr;
822
823 TRACE("(%04x, %08lX, %p)\n", wDevID, dwFlags, lpParms);
824
825 if(!lpParms)
827
828 wma = MCIQTZ_mciGetOpenDev(wDevID);
829 if (!wma)
831
832 if (!(dwFlags & MCI_STATUS_ITEM)) {
833 WARN("No status item specified\n");
835 }
836
837 switch (lpParms->dwItem) {
838 case MCI_STATUS_LENGTH: {
839 LONGLONG duration = -1;
840 GUID format;
841 switch (wma->time_format) {
842 case MCI_FORMAT_MILLISECONDS: format = TIME_FORMAT_MEDIA_TIME; break;
843 case MCI_FORMAT_FRAMES: format = TIME_FORMAT_FRAME; break;
844 default: ERR("Unhandled format %lx\n", wma->time_format); break;
845 }
846 hr = IMediaSeeking_SetTimeFormat(wma->seek, &format);
847 if (FAILED(hr)) {
848 FIXME("Cannot set time format (hr = %lx)\n", hr);
849 lpParms->dwReturn = 0;
850 break;
851 }
852 hr = IMediaSeeking_GetDuration(wma->seek, &duration);
853 if (FAILED(hr) || duration < 0) {
854 FIXME("Cannot read duration (hr = %lx)\n", hr);
855 lpParms->dwReturn = 0;
856 } else if (wma->time_format != MCI_FORMAT_MILLISECONDS)
857 lpParms->dwReturn = duration;
858 else
859 lpParms->dwReturn = duration / 10000;
860 break;
861 }
862 case MCI_STATUS_POSITION: {
863 REFERENCE_TIME curpos;
864
865 hr = IMediaSeeking_GetCurrentPosition(wma->seek, &curpos);
866 if (FAILED(hr)) {
867 FIXME("Cannot get position (hr = %lx)\n", hr);
868 return MCIERR_INTERNAL;
869 }
870 lpParms->dwReturn = curpos / 10000;
871 break;
872 }
874 FIXME("MCI_STATUS_NUMBER_OF_TRACKS not implemented yet\n");
876 case MCI_STATUS_MODE: {
877 LONG state = State_Stopped;
878 IMediaControl_GetState(wma->pmctrl, -1, &state);
879 if (state == State_Stopped)
881 else if (state == State_Running) {
883 if (!wma->thread || WaitForSingleObject(wma->thread, 0) == WAIT_OBJECT_0)
885 } else if (state == State_Paused)
888 break;
889 }
891 FIXME("MCI_STATUS_MEDIA_PRESENT not implemented yet\n");
894 lpParms->dwReturn = MAKEMCIRESOURCE(wma->time_format,
897 break;
898 case MCI_STATUS_READY:
899 FIXME("MCI_STATUS_READY not implemented yet\n");
902 FIXME("MCI_STATUS_CURRENT_TRACK not implemented yet\n");
904 default:
905 FIXME("Unknown command %08lX\n", lpParms->dwItem);
907 }
908
909 if (dwFlags & MCI_NOTIFY)
911
912 return ret;
913}
static int state
Definition: maze.c:121
#define MCI_FORMAT_RETURN_BASE
Definition: mmddk.h:343
#define MCI_INTEGER_RETURNED
Definition: mmddk.h:372
LONGLONG REFERENCE_TIME
Definition: dmusicks.h:9
#define MCI_STATUS_POSITION
Definition: mmsystem.h:745
#define MCI_MODE_PLAY
Definition: mmsystem.h:696
#define MCI_STATUS_CURRENT_TRACK
Definition: mmsystem.h:751
#define MCI_STATUS_NUMBER_OF_TRACKS
Definition: mmsystem.h:746
#define MCI_STATUS_LENGTH
Definition: mmsystem.h:744
#define MCI_STATUS_MODE
Definition: mmsystem.h:747
#define MCI_MODE_STOP
Definition: mmsystem.h:695
#define MCI_STATUS_MEDIA_PRESENT
Definition: mmsystem.h:748
#define MCI_MODE_PAUSE
Definition: mmsystem.h:699
#define MCI_STATUS_TIME_FORMAT
Definition: mmsystem.h:749
#define MCI_STATUS_ITEM
Definition: mmsystem.h:742
#define MCI_STATUS_READY
Definition: mmsystem.h:750
DWORD_PTR dwReturn
Definition: digitalv.h:809
DWORD_PTR dwCallback
Definition: digitalv.h:808
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
Definition: synch.c:82
#define WAIT_OBJECT_0
Definition: winbase.h:383

Referenced by MCIQTZ_DriverProc().

◆ MCIQTZ_mciStop()

static DWORD MCIQTZ_mciStop ( UINT  wDevID,
DWORD  dwFlags,
LPMCI_GENERIC_PARMS  lpParms 
)
static

Definition at line 591 of file mciqtz.c.

592{
593 WINE_MCIQTZ* wma;
594
595 TRACE("(%04x, %08lX, %p)\n", wDevID, dwFlags, lpParms);
596
597 wma = MCIQTZ_mciGetOpenDev(wDevID);
598 if (!wma)
600
601 if (!wma->opened)
602 return 0;
603
604 if (wma->thread) {
605 SetEvent(wma->stop_event);
607 CloseHandle(wma->thread);
608 wma->thread = NULL;
609 }
610
611 return 0;
612}
#define INFINITE
Definition: serial.h:102
BOOL WINAPI DECLSPEC_HOTPATCH SetEvent(IN HANDLE hEvent)
Definition: synch.c:669

Referenced by MCIQTZ_DriverProc(), MCIQTZ_drvConfigure(), MCIQTZ_mciClose(), MCIQTZ_mciOpen(), and MCIQTZ_mciSeek().

◆ MCIQTZ_mciUpdate()

static DWORD MCIQTZ_mciUpdate ( UINT  wDevID,
DWORD  dwFlags,
LPMCI_DGV_UPDATE_PARMS  lpParms 
)
static

Definition at line 1097 of file mciqtz.c.

1098{
1099 WINE_MCIQTZ *wma;
1100 DWORD res = 0;
1101
1102 TRACE("%04x, %08lx, %p\n", wDevID, dwFlags, lpParms);
1103
1104 if(!lpParms)
1106
1107 wma = MCIQTZ_mciGetOpenDev(wDevID);
1108 if (!wma)
1110
1112 LONG state, size;
1113 BYTE *data;
1115 HRESULT hr;
1116 RECT src, dest;
1117 LONG visible = OATRUE;
1118
1120 IMediaControl_GetState(wma->pmctrl, -1, &state);
1121 if (state == State_Running)
1123 /* If in stopped state, nothing has been drawn to screen
1124 * moving to pause, which is needed for the old dib renderer, will result
1125 * in a single frame drawn, so hide the window here */
1126 IVideoWindow_get_Visible(wma->vidwin, &visible);
1127 if (wma->parent)
1128 IVideoWindow_put_Visible(wma->vidwin, OAFALSE);
1129 /* FIXME: Should we check the original state and restore it? */
1130 IMediaControl_Pause(wma->pmctrl);
1131 IMediaControl_GetState(wma->pmctrl, -1, &state);
1132 if (FAILED(hr = IBasicVideo_GetCurrentImage(wma->vidbasic, &size, NULL))) {
1133 WARN("Could not get image size (hr = %lx)\n", hr);
1134 goto out;
1135 }
1137 info = (BITMAPINFO*)data;
1138 IBasicVideo_GetCurrentImage(wma->vidbasic, &size, (LONG*)data);
1139 data += info->bmiHeader.biSize;
1140
1141 IBasicVideo_GetSourcePosition(wma->vidbasic, &src.left, &src.top, &src.right, &src.bottom);
1142 IBasicVideo_GetDestinationPosition(wma->vidbasic, &dest.left, &dest.top, &dest.right, &dest.bottom);
1143 StretchDIBits(lpParms->hDC,
1144 dest.left, dest.top, dest.right + dest.left, dest.bottom + dest.top,
1145 src.left, src.top, src.right + src.left, src.bottom + src.top,
1148 res = 0;
1149out:
1150 if (wma->parent)
1151 IVideoWindow_put_Visible(wma->vidwin, visible);
1152 }
1153 else if (dwFlags)
1154 FIXME("Unhandled flags %lx\n", dwFlags);
1155 return res;
1156}
#define MCI_DGV_UPDATE_HDC
Definition: digitalv.h:439
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLuint res
Definition: glext.h:9613
GLenum src
Definition: glext.h:6340
GLsizeiptr size
Definition: glext.h:5919
static char * dest
Definition: rtl.c:149
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
Definition: wcsftime.cpp:383
#define DIB_RGB_COLORS
Definition: wingdi.h:367
#define SRCCOPY
Definition: wingdi.h:333
int WINAPI StretchDIBits(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int, _In_ int, _In_ int, _In_ int, _In_ int, _In_opt_ const VOID *, _In_ const BITMAPINFO *, _In_ UINT, _In_ DWORD)
unsigned char BYTE
Definition: xxhash.c:193

Referenced by MCIQTZ_DriverProc().

◆ MCIQTZ_mciWhere()

static DWORD MCIQTZ_mciWhere ( UINT  wDevID,
DWORD  dwFlags,
LPMCI_DGV_RECT_PARMS  lpParms 
)
static

Definition at line 918 of file mciqtz.c.

919{
920 WINE_MCIQTZ* wma;
921 HRESULT hr;
922 HWND hWnd;
923 RECT rc;
925
926 TRACE("(%04x, %08lX, %p)\n", wDevID, dwFlags, lpParms);
927
928 if(!lpParms)
930
931 wma = MCIQTZ_mciGetOpenDev(wDevID);
932 if (!wma)
934
935 hr = IVideoWindow_get_Owner(wma->vidwin, (OAHWND*)&hWnd);
936 if (FAILED(hr)) {
937 TRACE("No video stream, returning no window error\n");
938 return MCIERR_NO_WINDOW;
939 }
940
943 FIXME("MCI_DGV_WHERE_SOURCE_MAX stub\n");
944 IBasicVideo_GetSourcePosition(wma->vidbasic, &rc.left, &rc.top, &rc.right, &rc.bottom);
945 TRACE("MCI_DGV_WHERE_SOURCE %s\n", wine_dbgstr_rect(&rc));
946 }
949 FIXME("MCI_DGV_WHERE_DESTINATION_MAX stub\n");
950 IBasicVideo_GetDestinationPosition(wma->vidbasic, &rc.left, &rc.top, &rc.right, &rc.bottom);
951 TRACE("MCI_DGV_WHERE_DESTINATION %s\n", wine_dbgstr_rect(&rc));
952 }
955 FIXME("MCI_DGV_WHERE_FRAME_MAX not supported yet\n");
956 else
957 FIXME("MCI_DGV_WHERE_FRAME not supported yet\n");
958 goto out;
959 }
962 FIXME("MCI_DGV_WHERE_VIDEO_MAX not supported yet\n");
963 else
964 FIXME("MCI_DGV_WHERE_VIDEO not supported yet\n");
965 goto out;
966 }
970 rc.right -= rc.left;
971 rc.bottom -= rc.top;
972 TRACE("MCI_DGV_WHERE_WINDOW_MAX %s\n", wine_dbgstr_rect(&rc));
973 } else {
974 GetWindowRect(wma->parent, &rc);
975 rc.right -= rc.left;
976 rc.bottom -= rc.top;
977 TRACE("MCI_DGV_WHERE_WINDOW %s\n", wine_dbgstr_rect(&rc));
978 }
979 }
980 ret = 0;
981out:
982 lpParms->rc = rc;
983 return ret;
984}
static const char * wine_dbgstr_rect(const RECT *prc)
Definition: atltest.h:160
HWND hWnd
Definition: settings.c:17
#define MCI_DGV_WHERE_WINDOW
Definition: digitalv.h:448
#define MCI_DGV_WHERE_FRAME
Definition: digitalv.h:446
#define MCI_DGV_WHERE_VIDEO
Definition: digitalv.h:447
#define MCI_DGV_WHERE_SOURCE
Definition: digitalv.h:444
#define MCI_DGV_WHERE_MAX
Definition: digitalv.h:449
#define MCI_DGV_WHERE_DESTINATION
Definition: digitalv.h:445
#define MCIERR_NO_WINDOW
Definition: mmsystem.h:639
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)
HWND WINAPI GetDesktopWindow(void)
Definition: window.c:628

Referenced by MCIQTZ_DriverProc().

◆ MCIQTZ_mciWindow()

static DWORD MCIQTZ_mciWindow ( UINT  wDevID,
DWORD  dwFlags,
LPMCI_DGV_WINDOW_PARMSW  lpParms 
)
static

Definition at line 989 of file mciqtz.c.

990{
991 WINE_MCIQTZ *wma = MCIQTZ_mciGetOpenDev(wDevID);
992
993 TRACE("(%04x, %08lX, %p)\n", wDevID, dwFlags, lpParms);
994
995 if(!lpParms)
997
998 if (!wma)
1000 if (dwFlags & MCI_TEST)
1001 return 0;
1002
1004 HWND hwnd;
1005 if (lpParms->hWnd && !IsWindow(lpParms->hWnd))
1006 return MCIERR_NO_WINDOW;
1007 if (!wma->parent)
1008 return MCIERR_INTERNAL;
1009 hwnd = lpParms->hWnd ? lpParms->hWnd : wma->window;
1010 TRACE("Setting parent window to %p.\n", hwnd);
1011 if (wma->parent != hwnd)
1012 {
1013 LONG width, height;
1014
1015 IVideoWindow_put_MessageDrain(wma->vidwin, (OAHWND)hwnd);
1016 IVideoWindow_put_Owner(wma->vidwin, (OAHWND)hwnd);
1017
1018 IBasicVideo_GetVideoSize(wma->vidbasic, &width, &height);
1019 IVideoWindow_SetWindowPosition(wma->vidwin, 0, 0, width, height);
1020
1021 if (wma->parent == wma->window)
1022 ShowWindow(wma->window, SW_HIDE);
1023 else if (hwnd == wma->window)
1024 ShowWindow(wma->window, SW_SHOW);
1025
1026 wma->parent = hwnd;
1027 }
1028 }
1030 if (!wma->parent)
1031 return MCIERR_NO_WINDOW;
1032 TRACE("Setting nCmdShow to %d\n", lpParms->nCmdShow);
1033 ShowWindow(wma->parent, lpParms->nCmdShow);
1034 }
1036 if (!wma->parent)
1037 return MCIERR_NO_WINDOW;
1038 TRACE("Setting caption to %s\n", debugstr_w(lpParms->lpstrText));
1039 SetWindowTextW(wma->parent, lpParms->lpstrText);
1040 }
1041 return 0;
1042}
#define MCI_DGV_WINDOW_STATE
Definition: digitalv.h:454
#define MCI_DGV_WINDOW_TEXT
Definition: digitalv.h:455
#define MCI_DGV_WINDOW_HWND
Definition: digitalv.h:453
BOOL WINAPI IsWindow(_In_opt_ HWND)
#define SW_HIDE
Definition: winuser.h:779
BOOL WINAPI SetWindowTextW(_In_ HWND, _In_opt_ LPCWSTR)
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023

Referenced by MCIQTZ_DriverProc().

◆ MCIQTZ_notifyThread()

static DWORD CALLBACK MCIQTZ_notifyThread ( LPVOID  parm)
static

Definition at line 407 of file mciqtz.c.

408{
409 WINE_MCIQTZ* wma = (WINE_MCIQTZ *)parm;
410 HRESULT hr;
411 HANDLE handle[2];
412 DWORD n = 0, ret = 0;
413
414 handle[n++] = wma->stop_event;
415 IMediaEvent_GetEventHandle(wma->mevent, (OAEVENT *)&handle[n++]);
416
417 for (;;) {
418 DWORD r;
419 HANDLE old;
420
422 if (r == WAIT_OBJECT_0) {
423 TRACE("got stop event\n");
425 if (old)
427 break;
428 }
429 else if (r == WAIT_OBJECT_0+1) {
430 LONG event_code;
431 LONG_PTR p1, p2;
432 do {
433 hr = IMediaEvent_GetEvent(wma->mevent, &event_code, &p1, &p2, 0);
434 if (SUCCEEDED(hr)) {
435 TRACE("got event_code = 0x%02lx\n", event_code);
436 IMediaEvent_FreeEventParams(wma->mevent, event_code, p1, p2);
437 }
438 } while (hr == S_OK && event_code != EC_COMPLETE);
439 if (hr == S_OK && event_code == EC_COMPLETE) {
440 /* Repeat the music by seeking and running again */
441 if (wma->mci_flags & MCI_DGV_PLAY_REPEAT) {
442 TRACE("repeat media as requested\n");
443 IMediaControl_Stop(wma->pmctrl);
444 IMediaSeeking_SetPositions(wma->seek,
445 &wma->seek_start,
447 &wma->seek_stop,
449 IMediaControl_Run(wma->pmctrl);
450 continue;
451 }
453 if (old)
455 break;
456 }
457 }
458 else {
459 TRACE("Unknown error (%d)\n", (int)r);
460 break;
461 }
462 }
463
464 hr = IMediaControl_Stop(wma->pmctrl);
465 if (FAILED(hr)) {
466 TRACE("Cannot stop filtergraph (hr = %lx)\n", hr);
468 }
469
470 return ret;
471}
#define MCI_DGV_PLAY_REPEAT
Definition: digitalv.h:227
#define EC_COMPLETE
Definition: evcode.h:17
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
GLdouble n
Definition: glext.h:7729
#define S_OK
Definition: intsafe.h:52
__int3264 LONG_PTR
Definition: mstsclib_h.h:276
DWORD WINAPI WaitForMultipleObjects(IN DWORD nCount, IN CONST HANDLE *lpHandles, IN BOOL bWaitAll, IN DWORD dwMilliseconds)
Definition: synch.c:151

Referenced by MCIQTZ_mciPlay().

◆ register_class()

static bool register_class ( void  )
static

Definition at line 79 of file mciqtz.c.

80{
81 WNDCLASSW class = {0};
82
84 class.cbWndExtra = sizeof(MCIDEVICEID);
85 class.hInstance = MCIQTZ_hInstance;
86 class.hCursor = LoadCursorW(0, (const WCHAR *)IDC_ARROW);
87 class.lpszClassName = mciqtz_class;
88
90}
short WCHAR
Definition: pedump.c:58
LRESULT WINAPI DefWindowProcW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
ATOM WINAPI RegisterClassW(_In_ CONST WNDCLASSW *)
#define IDC_ARROW
Definition: winuser.h:695
HCURSOR WINAPI LoadCursorW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
Definition: cursoricon.c:2474
WNDPROC lpfnWndProc
Definition: winuser.h:3285
#define ERROR_CLASS_ALREADY_EXISTS
Definition: winerror.h:1236

Referenced by apartment_createwindowifneeded(), do_wait_idle_child(), MCIQTZ_drvOpen(), mdi_register_classes(), register_classes(), register_wmime_keydown_class(), subclass_button(), subclass_combobox(), subclass_edit(), subclass_static(), subtest_hvredraw(), test_desktop_winproc(), test_dialog_messages(), test_EndDialog(), test_InSendMessage(), test_menu_messages(), test_recursive_messages(), and wait_idle_thread().

◆ unregister_class()

static void unregister_class ( void  )
static

Definition at line 74 of file mciqtz.c.

75{
77}
BOOL WINAPI UnregisterClassW(_In_ LPCWSTR, HINSTANCE)

Referenced by MCIQTZ_drvClose().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( mciqtz  )

Variable Documentation

◆ mciqtz_class

const WCHAR mciqtz_class[] = L"MCIQTZ_Window"
static

Definition at line 35 of file mciqtz.c.

Referenced by create_window(), register_class(), and unregister_class().

◆ MCIQTZ_hInstance

HINSTANCE MCIQTZ_hInstance = 0
static

Definition at line 44 of file mciqtz.c.

Referenced by create_window(), DllMain(), MCIQTZ_drvOpen(), register_class(), and unregister_class().