ReactOS 0.4.17-dev-923-g4c9a150
vmr9.c
Go to the documentation of this file.
1/*
2 * Video Mixing Renderer for Direct3D 9
3 *
4 * Copyright 2004 Christian Costa
5 * Copyright 2008 Maarten Lankhorst
6 * Copyright 2012 Aric Stewart
7 *
8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public
10 * License as published by the Free Software Foundation; either
11 * version 2.1 of the License, or (at your option) any later version.
12 *
13 * This library 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 GNU
16 * Lesser General Public License for more details.
17 *
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with this library; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
21 */
22
23#include "quartz_private.h"
24
25#include "uuids.h"
26#include "vfwmsgs.h"
27#include "amvideo.h"
28#include "windef.h"
29#include "winbase.h"
30#include "dshow.h"
31#include "evcode.h"
32#include "strmif.h"
33#include "ddraw.h"
34#include "dvdmedia.h"
35#include "d3d9.h"
36#include "videoacc.h"
37#include "vmr9.h"
38
39#include "wine/debug.h"
40
42
43static inline const char *debugstr_normalized_rect(const VMR9NormalizedRect *rect)
44{
45 if (!rect) return "(null)";
46 return wine_dbg_sprintf("(%.8e,%.8e)-(%.8e,%.8e)", rect->left, rect->top, rect->right, rect->bottom);
47}
48
50{
51 if (IsEqualGUID(&mt->formattype, &FORMAT_VideoInfo))
52 return &((VIDEOINFOHEADER *)mt->pbFormat)->bmiHeader;
53 else
54 return &((VIDEOINFOHEADER2 *)mt->pbFormat)->bmiHeader;
55}
56
58{
61
71
72 /* Devil May Cry 3 releases the last IBaseFilter reference while still
73 * holding an IVMRSurfaceAllocatorNotify9 reference, and depends on
74 * IVMRSurfaceAllocator9::TerminateDevice() being called as a result.
75 * Native uses a separate reference count for IVMRSurfaceAllocatorNotify9. */
77
80
83
86
87 /*
88 * The Video Mixing Renderer supports 3 modes, renderless, windowless and windowed
89 * What I do is implement windowless as a special case of renderless, and then
90 * windowed also as a special case of windowless. This is probably the easiest way.
91 */
93
95
96 /* Presentation related members */
102
104
106};
107
109{
110 return get_bitmap_header(&filter->renderer.sink.pin.mt);
111}
112
113static inline struct quartz_vmr *impl_from_video_window(struct video_window *iface)
114{
115 return CONTAINING_RECORD(iface, struct quartz_vmr, window);
116}
117
119{
121}
122
124{
126}
127
129{
131}
132
134{
136}
137
139{
141}
142
144{
146}
147
149{
152
154
156 IDirect3D9 *d3d9_ptr;
160
162
165};
166
168{
170}
171
173{
175}
176
178
179static inline struct quartz_vmr *impl_from_IBaseFilter(IBaseFilter *iface)
180{
181 return CONTAINING_RECORD(iface, struct quartz_vmr, renderer.filter.IBaseFilter_iface);
182}
183
184static void copy_plane(BYTE **dstp, unsigned int dst_pitch, unsigned int dst_height,
185 const BYTE **srcp, unsigned int src_pitch, int src_height)
186{
187 size_t copy_size = min(src_pitch, dst_pitch);
188 const BYTE *src = *srcp;
189 BYTE *dst = *dstp;
190 unsigned int i;
191
192 if (src_height < 0)
193 {
194 TRACE("Inverting image.\n");
195
196 src_height = -src_height;
197 src += src_height * src_pitch;
198
199 for (i = 0; i < src_height; ++i)
200 {
201 src -= src_pitch;
202 memcpy(dst, src, copy_size);
203 dst += dst_pitch;
204 }
205 }
206 else
207 {
208 for (i = 0; i < src_height; ++i)
209 {
210 memcpy(dst, src, copy_size);
211 dst += dst_pitch;
212 src += src_pitch;
213 }
214 }
215
216 *srcp += src_pitch * src_height;
217 *dstp += dst_pitch * dst_height;
218}
219
221{
222 struct quartz_vmr *filter = impl_from_IBaseFilter(&iface->filter.IBaseFilter_iface);
223 unsigned int data_size, width, depth, src_pitch;
224 const BITMAPINFOHEADER *bitmap_header;
225 REFERENCE_TIME start_time, end_time;
226#ifdef __REACTOS__ /* '{}' initializer is C23; MSVC before 19.32 rejects it */
228#else
230#endif
231 D3DLOCKED_RECT locked_rect;
232 D3DSURFACE_DESC dst_desc;
233 BYTE *data = NULL;
234 HRESULT hr;
235 int height;
236
237 TRACE("filter %p, sample %p.\n", filter, sample);
238
239 /* It is possible that there is no device at this point */
240
241 if (!filter->allocator || !filter->presenter)
242 {
243 ERR("NO PRESENTER!!\n");
244 return S_FALSE;
245 }
246
248
249 if (SUCCEEDED(hr = IMediaSample_GetTime(sample, &start_time, &end_time)))
250 info.dwFlags |= VMR9Sample_TimeValid;
251
252 if (IMediaSample_IsDiscontinuity(sample) == S_OK)
254
255 if (IMediaSample_IsPreroll(sample) == S_OK)
256 info.dwFlags |= VMR9Sample_Preroll;
257
258 if (IMediaSample_IsSyncPoint(sample) == S_OK)
259 info.dwFlags |= VMR9Sample_SyncPoint;
260
261 if (FAILED(hr = IMediaSample_GetPointer(sample, &data)))
262 {
263 ERR("Failed to get pointer to sample data, hr %#lx.\n", hr);
264 return hr;
265 }
266 data_size = IMediaSample_GetActualDataLength(sample);
267
268 bitmap_header = get_filter_bitmap_header(filter);
269 width = bitmap_header->biWidth;
270 height = bitmap_header->biHeight;
271 depth = bitmap_header->biBitCount;
272 if (bitmap_header->biCompression == mmioFOURCC('N','V','1','2')
273 || bitmap_header->biCompression == mmioFOURCC('Y','V','1','2'))
274 src_pitch = (width + 3) & ~3;
275 else /* packed YUV (UYVY or YUY2) or RGB */
276 src_pitch = ((width * depth / 8) + 3) & ~3;
277
278 info.rtStart = start_time;
279 info.rtEnd = end_time;
280 info.szAspectRatio.cx = width;
281 info.szAspectRatio.cy = height;
282 info.lpSurf = filter->surfaces[(++filter->cur_surface) % filter->num_surfaces];
283
284 if (FAILED(hr = IDirect3DSurface9_GetDesc(info.lpSurf, &dst_desc)))
285 {
286 ERR("Failed to get rendering surface description.\n");
287 return hr;
288 }
289
290 if (width > dst_desc.Width || abs(height) > dst_desc.Height)
291 FIXME("src surface (%ux%u) larger than rendering surface (%ux%u).\n", width, height,
292 dst_desc.Width, dst_desc.Height);
293
294 if (FAILED(hr = IDirect3DSurface9_LockRect(info.lpSurf, &locked_rect, NULL, D3DLOCK_DISCARD)))
295 {
296 ERR("Failed to lock surface, hr %#lx.\n", hr);
297 return hr;
298 }
299
300 if (bitmap_header->biCompression == mmioFOURCC('N','V','1','2'))
301 {
302 BYTE *dst = locked_rect.pBits;
303 const BYTE *src = data;
304
305 copy_plane(&dst, locked_rect.Pitch, dst_desc.Height, &src, src_pitch, height);
306 copy_plane(&dst, locked_rect.Pitch, dst_desc.Height / 2, &src, src_pitch, height / 2);
307 }
308 else if (bitmap_header->biCompression == mmioFOURCC('Y','V','1','2'))
309 {
310 BYTE *dst = locked_rect.pBits;
311 const BYTE *src = data;
312
313 copy_plane(&dst, locked_rect.Pitch, dst_desc.Height, &src, src_pitch, height);
314 copy_plane(&dst, locked_rect.Pitch / 2, dst_desc.Height / 2, &src, src_pitch / 2, height / 2);
315 copy_plane(&dst, locked_rect.Pitch / 2, dst_desc.Height / 2, &src, src_pitch / 2, height / 2);
316 }
317 else if (height > 0 && bitmap_header->biCompression == BI_RGB)
318 {
319 BYTE *dst = locked_rect.pBits;
320 const BYTE *src = data;
321
322 copy_plane(&dst, locked_rect.Pitch, dst_desc.Height, &src, src_pitch, -height);
323 }
324 else if (locked_rect.Pitch != src_pitch)
325 {
326 BYTE *dst = locked_rect.pBits;
327 const BYTE *src = data;
328
329 TRACE("Source pitch %u does not match dest pitch %u; copying manually.\n",
330 src_pitch, locked_rect.Pitch);
331
332 height = abs(height);
333 copy_plane(&dst, locked_rect.Pitch, dst_desc.Height, &src, src_pitch, height);
334 }
335 else
336 {
337 memcpy(locked_rect.pBits, data, data_size);
338 }
339
341
342 return IVMRImagePresenter9_PresentImage(filter->presenter, filter->cookie, &info);
343}
344
346{
347 if (!IsEqualIID(&mt->majortype, &MEDIATYPE_Video) || !mt->pbFormat)
348 return S_FALSE;
349
350 if (!IsEqualGUID(&mt->formattype, &FORMAT_VideoInfo)
351 && !IsEqualGUID(&mt->formattype, &FORMAT_VideoInfo2))
352 return S_FALSE;
353
354 return S_OK;
355}
356
358{
359 HRESULT hr;
360 DWORD i;
361
362 if (FAILED(hr = IVMRSurfaceAllocator9_InitializeDevice(filter->allocator,
363 filter->cookie, info, &count)))
364 {
365 WARN("Failed to initialize device (flags %#lx), hr %#lx.\n", info->dwFlags, hr);
366 return hr;
367 }
368
369 for (i = 0; i < count; ++i)
370 {
371 if (FAILED(hr = IVMRSurfaceAllocator9_GetSurface(filter->allocator,
372 filter->cookie, i, 0, &filter->surfaces[i])))
373 {
374 ERR("Failed to get surface %lu, hr %#lx.\n", i, hr);
375 while (i--)
377 IVMRSurfaceAllocator9_TerminateDevice(filter->allocator, filter->cookie);
378 return hr;
379 }
380 }
381
382 return hr;
383}
384
386{
387#ifdef __REACTOS__ /* '{}' initializer is C23; MSVC before 19.32 rejects it */
389#else
391#endif
392 HRESULT hr = E_FAIL;
393 DWORD count = 1;
394 unsigned int i;
395 const BITMAPINFOHEADER *bmiheader = get_bitmap_header(mt);
396
397 static const struct
398 {
399 const GUID *subtype;
401 DWORD flags;
402 }
403 formats[] =
404 {
405 {&MEDIASUBTYPE_ARGB1555, D3DFMT_A1R5G5B5, VMR9AllocFlag_TextureSurface},
406 {&MEDIASUBTYPE_ARGB32, D3DFMT_A8R8G8B8, VMR9AllocFlag_TextureSurface},
407 {&MEDIASUBTYPE_ARGB4444, D3DFMT_A4R4G4B4, VMR9AllocFlag_TextureSurface},
408
413
414 {&MEDIASUBTYPE_NV12, MAKEFOURCC('N','V','1','2'), VMR9AllocFlag_OffscreenSurface},
415 {&MEDIASUBTYPE_UYVY, D3DFMT_UYVY, VMR9AllocFlag_OffscreenSurface},
416 {&MEDIASUBTYPE_YUY2, D3DFMT_YUY2, VMR9AllocFlag_OffscreenSurface},
417 {&MEDIASUBTYPE_YV12, MAKEFOURCC('Y','V','1','2'), VMR9AllocFlag_OffscreenSurface},
418 };
419
420 TRACE("Initializing in mode %u, our window %p, clipping window %p.\n",
421 filter->mode, filter->window.hwnd, filter->clipping_window);
422
423 if (filter->mode == VMR9Mode_Windowless && !filter->clipping_window)
424 return S_OK;
425
426 info.Pool = D3DPOOL_DEFAULT;
427 info.MinBuffers = count;
428 info.dwWidth = info.szAspectRatio.cx = info.szNativeSize.cx = bmiheader->biWidth;
429 info.dwHeight = info.szAspectRatio.cy = info.szNativeSize.cy = bmiheader->biHeight;
430
431 if (!(filter->surfaces = calloc(count, sizeof(IDirect3DSurface9 *))))
432 return E_OUTOFMEMORY;
433 filter->num_surfaces = count;
434 filter->cur_surface = 0;
435
436 for (i = 0; i < ARRAY_SIZE(formats); ++i)
437 {
438 if (IsEqualGUID(&mt->subtype, formats[i].subtype))
439 {
440 info.Format = formats[i].format;
441
443 {
446 return hr;
447 }
448
450 {
453 return hr;
454 }
455 }
456 }
457
458 free(filter->surfaces);
460}
461
462static void vmr_init_stream(struct strmbase_renderer *iface)
463{
464 struct quartz_vmr *filter = impl_from_IBaseFilter(&iface->filter.IBaseFilter_iface);
465
466 if (filter->window.hwnd && filter->window.AutoShow)
467 ShowWindow(filter->window.hwnd, SW_SHOW);
468}
469
470static void vmr_start_stream(struct strmbase_renderer *iface)
471{
472 struct quartz_vmr *filter = impl_from_IBaseFilter(&iface->filter.IBaseFilter_iface);
473
474 IVMRImagePresenter9_StartPresenting(filter->presenter, filter->cookie);
475}
476
477static void vmr_stop_stream(struct strmbase_renderer *iface)
478{
479 struct quartz_vmr *This = impl_from_IBaseFilter(&iface->filter.IBaseFilter_iface);
480
481 TRACE("(%p)\n", This);
482
483 if (This->renderer.filter.state == State_Running)
484 IVMRImagePresenter9_StopPresenting(This->presenter, This->cookie);
485}
486
487static HRESULT vmr_connect(struct strmbase_renderer *iface, const AM_MEDIA_TYPE *mt)
488{
489 struct quartz_vmr *filter = impl_from_IBaseFilter(&iface->filter.IBaseFilter_iface);
490 const BITMAPINFOHEADER *bitmap_header = get_bitmap_header(mt);
491 HWND window = filter->window.hwnd;
492 HRESULT hr;
493 RECT rect;
494
495 SetRect(&rect, 0, 0, bitmap_header->biWidth, bitmap_header->biHeight);
496 filter->window.src = rect;
497
502 GetClientRect(window, &filter->window.dst);
503
504 if (filter->mode
505 || SUCCEEDED(hr = IVMRFilterConfig9_SetRenderingMode(&filter->IVMRFilterConfig9_iface, VMR9Mode_Windowed)))
507
508 return hr;
509}
510
512{
513 DWORD i;
514
515 if (filter->mode && filter->allocator && filter->presenter)
516 {
517 for (i = 0; i < filter->num_surfaces; ++i)
519 free(filter->surfaces);
520
521 IVMRSurfaceAllocator9_TerminateDevice(filter->allocator, filter->cookie);
522 filter->num_surfaces = 0;
523 }
524}
525
527{
528 struct quartz_vmr *filter = impl_from_IBaseFilter(&This->filter.IBaseFilter_iface);
530}
531
532static void vmr_destroy(struct strmbase_renderer *iface)
533{
534 struct quartz_vmr *filter = impl_from_IBaseFilter(&iface->filter.IBaseFilter_iface);
535
537
538 /* Devil May Cry 3 releases the IVMRSurfaceAllocatorNotify9 interface from
539 * TerminateDevice(). Artificially increase the reference count so that we
540 * don't free the filter yet. */
541 InterlockedIncrement(&filter->renderer.filter.refcount);
542
543 if (filter->allocator)
544 {
545 IVMRSurfaceAllocator9_TerminateDevice(filter->allocator, filter->cookie);
546 IVMRSurfaceAllocator9_Release(filter->allocator);
547 }
548 if (filter->presenter)
549 IVMRImagePresenter9_Release(filter->presenter);
550
551 filter->num_surfaces = 0;
552 if (filter->allocator_d3d9_dev)
553 {
554 IDirect3DDevice9_Release(filter->allocator_d3d9_dev);
555 filter->allocator_d3d9_dev = NULL;
556 }
557
558 FreeLibrary(filter->hD3d9);
560 if (!filter->IVMRSurfaceAllocatorNotify9_refcount)
561 free(filter);
562}
563
564static HRESULT vmr_query_interface(struct strmbase_renderer *iface, REFIID iid, void **out)
565{
566 struct quartz_vmr *filter = impl_from_IBaseFilter(&iface->filter.IBaseFilter_iface);
567
568 if (IsEqualGUID(iid, &IID_IVideoWindow))
569 *out = &filter->window.IVideoWindow_iface;
570 else if (IsEqualGUID(iid, &IID_IBasicVideo))
571 *out = &filter->window.IBasicVideo_iface;
572 else if (IsEqualGUID(iid, &IID_IAMCertifiedOutputProtection))
573 *out = &filter->IAMCertifiedOutputProtection_iface;
574 else if (IsEqualGUID(iid, &IID_IAMFilterMiscFlags))
575 *out = &filter->IAMFilterMiscFlags_iface;
576 else if (IsEqualGUID(iid, &IID_IVMRAspectRatioControl9))
577 *out = &filter->IVMRAspectRatioControl9_iface;
578 else if (IsEqualGUID(iid, &IID_IVMRFilterConfig9))
579 *out = &filter->IVMRFilterConfig9_iface;
580 else if (IsEqualGUID(iid, &IID_IVMRMixerBitmap9))
581 *out = &filter->IVMRMixerBitmap9_iface;
582 else if (IsEqualGUID(iid, &IID_IVMRMixerControl9) && filter->stream_count)
583 *out = &filter->IVMRMixerControl9_iface;
584 else if (IsEqualGUID(iid, &IID_IVMRMonitorConfig9) && filter->mode != VMR9Mode_Renderless)
585 *out = &filter->IVMRMonitorConfig9_iface;
586 else if (IsEqualGUID(iid, &IID_IVMRSurfaceAllocatorNotify9) && filter->mode == VMR9Mode_Renderless)
587 *out = &filter->IVMRSurfaceAllocatorNotify9_iface;
588 else if (IsEqualGUID(iid, &IID_IVMRWindowlessControl9) && filter->mode == VMR9Mode_Windowless)
589 *out = &filter->IVMRWindowlessControl9_iface;
590 else
591 return E_NOINTERFACE;
592
593 IUnknown_AddRef((IUnknown *)*out);
594 return S_OK;
595}
596
598{
599 struct quartz_vmr *filter = impl_from_IBaseFilter(&iface->filter.IBaseFilter_iface);
600
601 if (IsEqualGUID(iid, &IID_IAMVideoAccelerator))
602 *out = &filter->IAMVideoAccelerator_iface;
603 else if (IsEqualGUID(iid, &IID_IOverlay))
604 *out = &filter->IOverlay_iface;
605 else
606 return E_NOINTERFACE;
607
608 IUnknown_AddRef((IUnknown *)*out);
609 return S_OK;
610}
611
613{
614 .renderer_query_accept = vmr_query_accept,
615 .renderer_render = vmr_render,
616 .renderer_init_stream = vmr_init_stream,
617 .renderer_start_stream = vmr_start_stream,
618 .renderer_stop_stream = vmr_stop_stream,
619 .renderer_connect = vmr_connect,
620 .renderer_disconnect = vmr_disconnect,
621 .renderer_destroy = vmr_destroy,
622 .renderer_query_interface = vmr_query_interface,
623 .renderer_pin_query_interface = vmr_pin_query_interface,
624};
625
626static void vmr_get_default_rect(struct video_window *iface, RECT *rect)
627{
629 const BITMAPINFOHEADER *bitmap_header = get_filter_bitmap_header(filter);
630
631 SetRect(rect, 0, 0, bitmap_header->biWidth, bitmap_header->biHeight);
632}
633
635{
637 IDirect3DSurface9 *rt = NULL, *surface = NULL;
638 D3DLOCKED_RECT locked_rect;
640 unsigned int row_size;
642 LONG i, size_left;
643 char *dst;
644 HRESULT hr;
645
646 EnterCriticalSection(&filter->renderer.filter.stream_cs);
647 device = filter->allocator_d3d9_dev;
648
650 bih.biSizeImage = bih.biWidth * bih.biHeight * bih.biBitCount / 8;
651
652 if (!image)
653 {
654 *size = sizeof(BITMAPINFOHEADER) + bih.biSizeImage;
655 LeaveCriticalSection(&filter->renderer.filter.stream_cs);
656 return S_OK;
657 }
658
660 goto out;
661
664 goto out;
665
667 goto out;
668
669 if (FAILED(hr = IDirect3DSurface9_LockRect(surface, &locked_rect, NULL, D3DLOCK_READONLY)))
670 goto out;
671
672 size_left = *size;
673 memcpy(image, &bih, min(size_left, sizeof(BITMAPINFOHEADER)));
674 size_left -= sizeof(BITMAPINFOHEADER);
675
676 dst = (char *)image + sizeof(BITMAPINFOHEADER);
677 row_size = bih.biWidth * bih.biBitCount / 8;
678
679 for (i = 0; i < bih.biHeight && size_left > 0; ++i)
680 {
681 memcpy(dst, (char *)locked_rect.pBits + (i * locked_rect.Pitch), min(row_size, size_left));
682 dst += row_size;
683 size_left -= row_size;
684 }
685
687
688out:
689 if (surface) IDirect3DSurface9_Release(surface);
690 if (rt) IDirect3DSurface9_Release(rt);
691 LeaveCriticalSection(&filter->renderer.filter.stream_cs);
692 return hr;
693}
694
695static const struct video_window_ops window_ops =
696{
697 .get_default_rect = vmr_get_default_rect,
698 .get_current_image = vmr_get_current_image,
699};
700
701static const IVideoWindowVtbl IVideoWindow_VTable =
702{
749};
750
752 REFIID riid, void **ppv)
753{
755 return IUnknown_QueryInterface(This->renderer.filter.outer_unk, riid, ppv);
756}
757
759{
761 return IUnknown_AddRef(This->renderer.filter.outer_unk);
762}
763
765{
767 return IUnknown_Release(This->renderer.filter.outer_unk);
768}
769
771 GUID* pRandom, BYTE** VarLenCertGH,
772 DWORD* pdwLengthCertGH)
773{
775
776 FIXME("(%p/%p)->(%p, %p, %p) stub\n", iface, This, pRandom, VarLenCertGH, pdwLengthCertGH);
777 return VFW_E_NO_COPP_HW;
778}
779
781 AMCOPPSignature* pSig)
782{
784
785 FIXME("(%p/%p)->(%p) stub\n", iface, This, pSig);
786 return VFW_E_NO_COPP_HW;
787}
788
790 const AMCOPPCommand* cmd)
791{
793
794 FIXME("(%p/%p)->(%p) stub\n", iface, This, cmd);
795 return VFW_E_NO_COPP_HW;
796}
797
799 const AMCOPPStatusInput* pStatusInput,
800 AMCOPPStatusOutput* pStatusOutput)
801{
803
804 FIXME("(%p/%p)->(%p, %p) stub\n", iface, This, pStatusInput, pStatusOutput);
805 return VFW_E_NO_COPP_HW;
806}
807
808static const IAMCertifiedOutputProtectionVtbl IAMCertifiedOutputProtection_Vtbl =
809{
817};
818
821 return IUnknown_QueryInterface(This->renderer.filter.outer_unk, riid, ppv);
822}
823
826 return IUnknown_AddRef(This->renderer.filter.outer_unk);
827}
828
831 return IUnknown_Release(This->renderer.filter.outer_unk);
832}
833
836}
837
838static const IAMFilterMiscFlagsVtbl IAMFilterMiscFlags_Vtbl = {
843};
844
846{
851};
852
854{
857
858 if (args->info7 || args->info9)
859 {
860
861 if (!args->arraysize)
862 return FALSE;
863
864 mi.cbSize = sizeof(mi);
866 return TRUE;
867
868 /* fill VMRMONITORINFO struct */
869 if (args->info7)
870 {
871 VMRMONITORINFO *info = args->info7++;
872 memset(info, 0, sizeof(*info));
873
874 if (args->numdev > 0)
875 {
876 info->guid.pGUID = &info->guid.GUID;
877 info->guid.GUID.Data4[7] = args->numdev;
878 }
879 else
880 info->guid.pGUID = NULL;
881
882 info->rcMonitor = mi.rcMonitor;
883 info->hMon = hmon;
884 info->dwFlags = mi.dwFlags;
885
886 lstrcpynW(info->szDevice, mi.szDevice, ARRAY_SIZE(info->szDevice));
887
888 /* FIXME: how to get these values? */
889 info->szDescription[0] = 0;
890 }
891
892 /* fill VMR9MonitorInfo struct */
893 if (args->info9)
894 {
895 VMR9MonitorInfo *info = args->info9++;
896 memset(info, 0, sizeof(*info));
897
898 info->uDevID = 0; /* FIXME */
899 info->rcMonitor = mi.rcMonitor;
900 info->hMon = hmon;
901 info->dwFlags = mi.dwFlags;
902
903 lstrcpynW(info->szDevice, mi.szDevice, ARRAY_SIZE(info->szDevice));
904
905 /* FIXME: how to get these values? */
906 info->szDescription[0] = 0;
907 info->dwVendorId = 0;
908 info->dwDeviceId = 0;
909 info->dwSubSysId = 0;
910 info->dwRevision = 0;
911 }
912
913 args->arraysize--;
914 }
915
916 args->numdev++;
917 return TRUE;
918}
919
921 LPVOID * ppv)
922{
924 return IUnknown_QueryInterface(This->renderer.filter.outer_unk, riid, ppv);
925}
926
928{
930 return IUnknown_AddRef(This->renderer.filter.outer_unk);
931}
932
934{
936 return IUnknown_Release(This->renderer.filter.outer_unk);
937}
938
940{
942
943 FIXME("(%p/%p)->(%u) stub\n", iface, This, uDev);
944
945 return S_OK;
946}
947
949{
951
952 FIXME("(%p/%p)->(%p) stub\n", iface, This, uDev);
953
954 if (!uDev)
955 return E_POINTER;
956
957 *uDev = 0;
958 return S_OK;
959}
960
962{
964
965 FIXME("(%p/%p)->(%u) stub\n", iface, This, uDev);
966
967 return S_OK;
968}
969
971{
973
974 FIXME("(%p/%p)->(%p) stub\n", iface, This, uDev);
975
976 if (!uDev)
977 return E_POINTER;
978
979 *uDev = 0;
980 return S_OK;
981}
982
984 VMR9MonitorInfo *info, DWORD arraysize,
985 DWORD *numdev)
986{
989
990 TRACE("filter %p, info %p, arraysize %lu, numdev %p.\n", This, info, arraysize, numdev);
991
992 if (!numdev)
993 return E_POINTER;
994
995 if (info && arraysize == 0)
996 return E_INVALIDARG;
997
998 args.info7 = NULL;
999 args.info9 = info;
1000 args.arraysize = arraysize;
1001 args.numdev = 0;
1003
1004 *numdev = args.numdev;
1005 return S_OK;
1006}
1007
1008static const IVMRMonitorConfig9Vtbl VMR9_MonitorConfig_Vtbl =
1009{
1018};
1019
1021{
1023 return IUnknown_QueryInterface(This->renderer.filter.outer_unk, riid, ppv);
1024}
1025
1027{
1029 return IUnknown_AddRef(This->renderer.filter.outer_unk);
1030}
1031
1033{
1035 return IUnknown_Release(This->renderer.filter.outer_unk);
1036}
1037
1039{
1041
1042 FIXME("(%p/%p)->(%p) stub\n", iface, This, compositor);
1043 return E_NOTIMPL;
1044}
1045
1047{
1049
1050 FIXME("iface %p, count %lu, stub!\n", iface, count);
1051
1052 if (!count)
1053 {
1054 WARN("Application requested zero streams; returning E_INVALIDARG.\n");
1055 return E_INVALIDARG;
1056 }
1057
1058 EnterCriticalSection(&filter->renderer.filter.filter_cs);
1059
1060 if (filter->stream_count)
1061 {
1062 LeaveCriticalSection(&filter->renderer.filter.filter_cs);
1063 WARN("Stream count is already set; returning VFW_E_WRONG_STATE.\n");
1064 return VFW_E_WRONG_STATE;
1065 }
1066
1067 filter->stream_count = count;
1068
1069 LeaveCriticalSection(&filter->renderer.filter.filter_cs);
1070 return S_OK;
1071}
1072
1074{
1076
1077 TRACE("filter %p, count %p.\n", filter, count);
1078
1079 EnterCriticalSection(&filter->renderer.filter.filter_cs);
1080
1081 if (!filter->stream_count)
1082 {
1083 LeaveCriticalSection(&filter->renderer.filter.filter_cs);
1085 }
1086
1087 *count = filter->stream_count;
1088
1089 LeaveCriticalSection(&filter->renderer.filter.filter_cs);
1090 return S_OK;
1091}
1092
1094{
1096
1097 TRACE("filter %p, flags %#lx.\n", filter, flags);
1098
1099 return E_NOTIMPL;
1100}
1101
1103{
1105
1106 FIXME("(%p/%p)->(%p) stub\n", iface, This, renderflags);
1107 return E_NOTIMPL;
1108}
1109
1111{
1113 HRESULT hr = S_OK;
1115
1116 TRACE("filter %p, mode %lu.\n", This, mode);
1117
1118 EnterCriticalSection(&This->renderer.filter.filter_cs);
1119 if (This->mode)
1120 {
1121 LeaveCriticalSection(&This->renderer.filter.filter_cs);
1122 return VFW_E_WRONG_STATE;
1123 }
1124
1125 switch (mode)
1126 {
1127 case VMR9Mode_Windowed:
1130 {
1131 ERR("Failed to create default presenter, hr %#lx.\n", hr);
1132 LeaveCriticalSection(&This->renderer.filter.filter_cs);
1133 return hr;
1134 }
1137 IVMRImagePresenter9_AddRef(This->presenter);
1138
1139 IVMRSurfaceAllocator9_AdviseNotify(This->allocator, &This->IVMRSurfaceAllocatorNotify9_iface);
1140 break;
1142 break;
1143 default:
1144 LeaveCriticalSection(&This->renderer.filter.filter_cs);
1145 return E_INVALIDARG;
1146 }
1147
1148 if (mode != VMR9Mode_Windowed)
1149 video_window_cleanup(&This->window);
1150
1151 This->mode = mode;
1152 LeaveCriticalSection(&This->renderer.filter.filter_cs);
1153 return hr;
1154}
1155
1157{
1159
1160 TRACE("(%p/%p)->(%p)\n", iface, This, mode);
1161 if (!mode)
1162 return E_POINTER;
1163
1164 if (This->mode)
1165 *mode = This->mode;
1166 else
1168
1169 return S_OK;
1170}
1171
1172static const IVMRFilterConfig9Vtbl VMR9_FilterConfig_Vtbl =
1173{
1184};
1185
1187{
1189 return IUnknown_QueryInterface(This->renderer.filter.outer_unk, riid, ppv);
1190}
1191
1193{
1195 return IUnknown_AddRef(This->renderer.filter.outer_unk);
1196}
1197
1199{
1201 return IUnknown_Release(This->renderer.filter.outer_unk);
1202}
1203
1205 LONG *width, LONG *height, LONG *aspect_width, LONG *aspect_height)
1206{
1209
1210 TRACE("filter %p, width %p, height %p, aspect_width %p, aspect_height %p.\n",
1211 filter, width, height, aspect_width, aspect_height);
1212
1213 if (!width || !height)
1214 return E_POINTER;
1215
1216 *width = bmiheader->biWidth;
1217 *height = bmiheader->biHeight;
1218 if (aspect_width)
1219 *aspect_width = bmiheader->biWidth;
1220 if (aspect_height)
1221 *aspect_height = bmiheader->biHeight;
1222
1223 return S_OK;
1224}
1225
1227{
1229
1230 FIXME("(%p/%p)->(...) stub\n", iface, This);
1231 return E_NOTIMPL;
1232}
1233
1235{
1237
1238 FIXME("(%p/%p)->(...) stub\n", iface, This);
1239 return E_NOTIMPL;
1240}
1241
1243 const RECT *src, const RECT *dst)
1244{
1246
1247 TRACE("filter %p, src %s, dst %s.\n", filter, wine_dbgstr_rect(src), wine_dbgstr_rect(dst));
1248
1249 EnterCriticalSection(&filter->renderer.filter.filter_cs);
1250
1251 if (src)
1252 filter->window.src = *src;
1253 if (dst)
1254 filter->window.dst = *dst;
1255
1256 LeaveCriticalSection(&filter->renderer.filter.filter_cs);
1257
1258 return S_OK;
1259}
1260
1262{
1264
1265 TRACE("filter %p, src %p, dst %p.\n", filter, src, dst);
1266
1267 if (src)
1268 *src = filter->window.src;
1269
1270 if (dst)
1271 *dst = filter->window.dst;
1272
1273 return S_OK;
1274}
1275
1277{
1279
1280 TRACE("filter %p, mode %p.\n", filter, mode);
1281
1282 EnterCriticalSection(&filter->renderer.filter.filter_cs);
1283 *mode = filter->aspect_mode;
1284 LeaveCriticalSection(&filter->renderer.filter.filter_cs);
1285 return S_OK;
1286}
1287
1289{
1291
1292 TRACE("filter %p, mode %lu.\n", filter, mode);
1293
1294 EnterCriticalSection(&filter->renderer.filter.filter_cs);
1295 filter->aspect_mode = mode;
1296 LeaveCriticalSection(&filter->renderer.filter.filter_cs);
1297 return S_OK;
1298}
1299
1301{
1303 HRESULT hr;
1304
1305 TRACE("filter %p, window %p.\n", filter, window);
1306
1307 if (!IsWindow(window))
1308 {
1309 WARN("Invalid window %p, returning E_INVALIDARG.\n", window);
1310 return E_INVALIDARG;
1311 }
1312
1313 EnterCriticalSection(&filter->renderer.filter.filter_cs);
1314
1315 if (filter->renderer.sink.pin.peer)
1316 {
1317 LeaveCriticalSection(&filter->renderer.filter.filter_cs);
1318 WARN("Attempt to set the clipping window while connected; returning VFW_E_WRONG_STATE.\n");
1319 return VFW_E_WRONG_STATE;
1320 }
1321
1322 filter->clipping_window = window;
1323
1324 hr = IVMRFilterConfig9_SetNumberOfStreams(&filter->IVMRFilterConfig9_iface, 4);
1325
1326 LeaveCriticalSection(&filter->renderer.filter.filter_cs);
1327 return hr;
1328}
1329
1331{
1333 HRESULT hr;
1334
1335 FIXME("(%p/%p)->(...) semi-stub\n", iface, This);
1336
1337 EnterCriticalSection(&This->renderer.filter.filter_cs);
1338 if (hwnd != This->clipping_window)
1339 {
1340 ERR("Not handling changing windows yet!!!\n");
1341 LeaveCriticalSection(&This->renderer.filter.filter_cs);
1342 return S_OK;
1343 }
1344
1345 if (!This->allocator_d3d9_dev)
1346 {
1347 ERR("No d3d9 device!\n");
1348 LeaveCriticalSection(&This->renderer.filter.filter_cs);
1349 return VFW_E_WRONG_STATE;
1350 }
1351
1352 /* Windowless extension */
1353 hr = IDirect3DDevice9_Present(This->allocator_d3d9_dev, NULL, NULL, NULL, NULL);
1354 LeaveCriticalSection(&This->renderer.filter.filter_cs);
1355
1356 return hr;
1357}
1358
1360{
1362
1363 FIXME("(%p/%p)->(...) stub\n", iface, This);
1364 return E_NOTIMPL;
1365}
1366
1368{
1370
1371 FIXME("(%p/%p)->(...) stub\n", iface, This);
1372 return E_NOTIMPL;
1373}
1374
1376{
1378
1379 FIXME("(%p/%p)->(...) stub\n", iface, This);
1380 return E_NOTIMPL;
1381}
1382
1384{
1386
1387 FIXME("(%p/%p)->(...) stub\n", iface, This);
1388 return E_NOTIMPL;
1389}
1390
1391static const IVMRWindowlessControl9Vtbl VMR9_WindowlessControl_Vtbl =
1392{
1409};
1410
1412{
1414 return IUnknown_QueryInterface(This->renderer.filter.outer_unk, riid, ppv);
1415}
1416
1418{
1420 ULONG refcount = InterlockedIncrement(&filter->IVMRSurfaceAllocatorNotify9_refcount);
1421
1422 TRACE("%p increasing refcount to %lu.\n", iface, refcount);
1423
1424 return refcount;
1425}
1426
1428{
1430 ULONG refcount = InterlockedDecrement(&filter->IVMRSurfaceAllocatorNotify9_refcount);
1431
1432 TRACE("%p decreasing refcount to %lu.\n", iface, refcount);
1433
1434 if (!refcount && !filter->renderer.filter.refcount)
1435 free(filter);
1436
1437 return refcount;
1438}
1439
1442{
1445
1446 TRACE("filter %p, cookie %#Ix, allocator %p.\n", filter, cookie, allocator);
1447
1448 EnterCriticalSection(&filter->renderer.filter.filter_cs);
1449
1450 filter->cookie = cookie;
1451
1452 if (filter->renderer.sink.pin.peer)
1453 {
1454 LeaveCriticalSection(&filter->renderer.filter.filter_cs);
1455 WARN("Attempt to set allocator while connected; returning VFW_E_WRONG_STATE.\n");
1456 return VFW_E_WRONG_STATE;
1457 }
1458
1459 if (FAILED(IVMRSurfaceAllocator9_QueryInterface(allocator, &IID_IVMRImagePresenter9, (void **)&presenter)))
1460 {
1461 LeaveCriticalSection(&filter->renderer.filter.filter_cs);
1462 return E_NOINTERFACE;
1463 }
1464
1465 if (filter->allocator)
1466 {
1467 IVMRImagePresenter9_Release(filter->presenter);
1468 IVMRSurfaceAllocator9_Release(filter->allocator);
1469 }
1470 filter->allocator = allocator;
1471 filter->presenter = presenter;
1472 IVMRSurfaceAllocator9_AddRef(allocator);
1473
1474 LeaveCriticalSection(&filter->renderer.filter.filter_cs);
1475 return S_OK;
1476}
1477
1480{
1482
1483 TRACE("filter %p, device %p, monitor %p.\n", filter, device, monitor);
1484
1485 if (filter->allocator_d3d9_dev)
1486 IDirect3DDevice9_Release(filter->allocator_d3d9_dev);
1487 filter->allocator_d3d9_dev = device;
1489
1490 return S_OK;
1491}
1492
1495{
1497
1498 TRACE("(%p/%p)->(...).\n", iface, This);
1499
1500 if (This->allocator_d3d9_dev)
1501 IDirect3DDevice9_Release(This->allocator_d3d9_dev);
1502 This->allocator_d3d9_dev = device;
1503 IDirect3DDevice9_AddRef(This->allocator_d3d9_dev);
1504
1505 if (This->surfaces)
1506 {
1508 allocate_surfaces(This, &This->renderer.sink.pin.mt);
1509 }
1510
1511 return S_OK;
1512}
1513
1515{
1517 DWORD i;
1518 HRESULT hr = S_OK;
1519
1520 TRACE("filter %p, allocinfo %p, numbuffers %p, surface %p.\n", This, numbuffers, allocinfo, surface);
1521
1522 if (!allocinfo || !numbuffers || !surface)
1523 return E_POINTER;
1524
1525 TRACE("Flags %#lx, size %lux%lu, format %u (%#x), pool %u, minimum buffers %lu.\n",
1526 allocinfo->dwFlags, allocinfo->dwWidth, allocinfo->dwHeight,
1527 allocinfo->Format, allocinfo->Format, allocinfo->Pool, allocinfo->MinBuffers);
1528
1529 if ((allocinfo->dwFlags & VMR9AllocFlag_TextureSurface)
1530 && (allocinfo->dwFlags & VMR9AllocFlag_OffscreenSurface))
1531 {
1532 WARN("Invalid flags specified; returning E_INVALIDARG.\n");
1533 return E_INVALIDARG;
1534 }
1535
1536 if (!allocinfo->Format)
1537 {
1538 IDirect3DSurface9 *backbuffer;
1540
1541 IDirect3DDevice9_GetBackBuffer(This->allocator_d3d9_dev, 0, 0,
1542 D3DBACKBUFFER_TYPE_MONO, &backbuffer);
1543 IDirect3DSurface9_GetDesc(backbuffer, &desc);
1544 IDirect3DSurface9_Release(backbuffer);
1545 allocinfo->Format = desc.Format;
1546 }
1547
1548 if (!*numbuffers || *numbuffers < allocinfo->MinBuffers)
1549 {
1550 WARN("%lu surfaces requested (minimum %lu); returning E_INVALIDARG.\n",
1551 *numbuffers, allocinfo->MinBuffers);
1552 return E_INVALIDARG;
1553 }
1554
1555 if (!This->allocator_d3d9_dev)
1556 {
1557 WARN("No Direct3D device; returning VFW_E_WRONG_STATE.\n");
1558 return VFW_E_WRONG_STATE;
1559 }
1560
1561 if (allocinfo->dwFlags == VMR9AllocFlag_OffscreenSurface)
1562 {
1563 for (i = 0; i < *numbuffers; ++i)
1564 {
1565 hr = IDirect3DDevice9_CreateOffscreenPlainSurface(This->allocator_d3d9_dev, allocinfo->dwWidth, allocinfo->dwHeight,
1566 allocinfo->Format, allocinfo->Pool, &surface[i], NULL);
1567 if (FAILED(hr))
1568 break;
1569 }
1570 }
1571 else if (allocinfo->dwFlags == VMR9AllocFlag_TextureSurface)
1572 {
1573 for (i = 0; i < *numbuffers; ++i)
1574 {
1575 IDirect3DTexture9 *texture;
1576
1577 hr = IDirect3DDevice9_CreateTexture(This->allocator_d3d9_dev, allocinfo->dwWidth, allocinfo->dwHeight, 1, D3DUSAGE_DYNAMIC,
1578 allocinfo->Format, allocinfo->Pool, &texture, NULL);
1579 if (FAILED(hr))
1580 break;
1583 }
1584 }
1585 else if (allocinfo->dwFlags == VMR9AllocFlag_3DRenderTarget)
1586 {
1587 for (i = 0; i < *numbuffers; ++i)
1588 {
1589 if (FAILED(hr = IDirect3DDevice9_CreateRenderTarget(This->allocator_d3d9_dev,
1590 allocinfo->dwWidth, allocinfo->dwHeight, allocinfo->Format,
1591 D3DMULTISAMPLE_NONE, 0, FALSE, &surface[i], NULL)))
1592 break;
1593 }
1594 }
1595 else
1596 {
1597 FIXME("Unhandled flags %#lx.\n", allocinfo->dwFlags);
1598 return E_NOTIMPL;
1599 }
1600
1601 if (FAILED(hr))
1602 WARN("%lu/%lu surfaces allocated, hr %#lx.\n", i, *numbuffers, hr);
1603
1604 if (i >= allocinfo->MinBuffers)
1605 {
1606 hr = S_OK;
1607 *numbuffers = i;
1608 }
1609 else
1610 {
1611 for ( ; i > 0; --i) IDirect3DSurface9_Release(surface[i - 1]);
1612 *numbuffers = 0;
1613 }
1614 return hr;
1615}
1616
1618{
1621 HRESULT hr;
1622
1623 TRACE("filter %p, code %#lx, param1 %#Ix, param2 %#Ix.\n", This, code, param1, param2);
1624
1625 hr = IFilterGraph_QueryInterface(This->renderer.filter.graph, &IID_IMediaEventSink, (void **)&sink);
1626 if (FAILED(hr))
1627 return hr;
1628 hr = IMediaEventSink_Notify(sink, code, param1, param2);
1629 IMediaEventSink_Release(sink);
1630 return hr;
1631}
1632
1633static const IVMRSurfaceAllocatorNotify9Vtbl VMR9_SurfaceAllocatorNotify_Vtbl =
1634{
1643};
1644
1646{
1648}
1649
1651{
1653 return IUnknown_QueryInterface(filter->renderer.filter.outer_unk, iid, out);
1654}
1655
1657{
1659 return IUnknown_AddRef(filter->renderer.filter.outer_unk);
1660}
1661
1663{
1665 return IUnknown_Release(filter->renderer.filter.outer_unk);
1666}
1667
1669{
1671
1672 FIXME("filter %p, stream %lu, alpha %.8e, stub!\n", filter, stream, alpha);
1673
1674 return E_NOTIMPL;
1675}
1676
1678{
1680
1681 FIXME("filter %p, stream %lu, alpha %p, stub!\n", filter, stream, alpha);
1682
1683 return E_NOTIMPL;
1684}
1685
1687{
1689
1690 FIXME("filter %p, stream %lu, z %lu, stub!\n", filter, stream, z);
1691
1692 return E_NOTIMPL;
1693}
1694
1696{
1698
1699 FIXME("filter %p, stream %lu, z %p, stub!\n", filter, stream, z);
1700
1701 return E_NOTIMPL;
1702}
1703
1706{
1708
1709 FIXME("filter %p, stream %lu, rect %s, stub!\n", filter, stream, debugstr_normalized_rect(rect));
1710
1711 return E_NOTIMPL;
1712}
1713
1716{
1718
1719 FIXME("filter %p, stream %lu, rect %p, stub!\n", filter, stream, rect);
1720
1721 return E_NOTIMPL;
1722}
1723
1725{
1727
1728 FIXME("filter %p, color #%06lx, stub!\n", filter, color);
1729
1730 return E_NOTIMPL;
1731}
1732
1734{
1736
1737 FIXME("filter %p, color %p, stub!\n", filter, color);
1738
1739 return E_NOTIMPL;
1740}
1741
1743{
1745
1746 FIXME("filter %p, flags %#lx, stub!\n", filter, flags);
1747
1748 EnterCriticalSection(&filter->renderer.filter.filter_cs);
1749 filter->mixing_prefs = flags;
1750 LeaveCriticalSection(&filter->renderer.filter.filter_cs);
1751 return S_OK;
1752}
1753
1755{
1757
1758 FIXME("filter %p, flags %p, stub!\n", filter, flags);
1759
1760 EnterCriticalSection(&filter->renderer.filter.filter_cs);
1761 *flags = filter->mixing_prefs;
1762 LeaveCriticalSection(&filter->renderer.filter.filter_cs);
1763 return S_OK;
1764}
1765
1768{
1770
1771 FIXME("filter %p, settings %p, stub!\n", filter, settings);
1772
1773 return E_NOTIMPL;
1774}
1775
1778{
1780
1781 FIXME("filter %p, settings %p, stub!\n", filter, settings);
1782
1783 return E_NOTIMPL;
1784}
1785
1788{
1790
1791 FIXME("filter %p, settings %p, stub!\n", filter, settings);
1792
1793 return E_NOTIMPL;
1794}
1795
1796static const IVMRMixerControl9Vtbl mixer_control9_vtbl =
1797{
1814};
1815
1817{
1819}
1820
1822{
1824 return IUnknown_QueryInterface(filter->renderer.filter.outer_unk, iid, out);
1825}
1826
1828{
1830 return IUnknown_AddRef(filter->renderer.filter.outer_unk);
1831}
1832
1834{
1836 return IUnknown_Release(filter->renderer.filter.outer_unk);
1837}
1838
1840 const VMR9AlphaBitmap *bitmap)
1841{
1842 FIXME("iface %p, bitmap %p, stub!\n", iface, bitmap);
1843 TRACE("dwFlags %#lx, hdc %p, pDDS %p, rSrc %s, rDest %s, fAlpha %.8e, clrSrcKey #%06lx, dwFilterMode %#lx.\n",
1844 bitmap->dwFlags, bitmap->hdc, bitmap->pDDS, wine_dbgstr_rect(&bitmap->rSrc),
1845 debugstr_normalized_rect(&bitmap->rDest), bitmap->fAlpha, bitmap->clrSrcKey, bitmap->dwFilterMode);
1846 return E_NOTIMPL;
1847}
1848
1850 const VMR9AlphaBitmap *bitmap)
1851{
1852 FIXME("iface %p, bitmap %p, stub!\n", iface, bitmap);
1853 return E_NOTIMPL;
1854}
1855
1858{
1859 FIXME("iface %p, bitmap %p, stub!\n", iface, bitmap);
1860 return E_NOTIMPL;
1861}
1862
1863static const IVMRMixerBitmap9Vtbl mixer_bitmap9_vtbl =
1864{
1871};
1872
1874{
1876}
1877
1879{
1881 return IUnknown_QueryInterface(filter->renderer.filter.outer_unk, iid, out);
1882}
1883
1885{
1887 return IUnknown_AddRef(filter->renderer.filter.outer_unk);
1888}
1889
1891{
1893 return IUnknown_Release(filter->renderer.filter.outer_unk);
1894}
1895
1897{
1899
1900 TRACE("filter %p, mode %p.\n", filter, mode);
1901
1902 EnterCriticalSection(&filter->renderer.filter.filter_cs);
1903 *mode = filter->aspect_mode;
1904 LeaveCriticalSection(&filter->renderer.filter.filter_cs);
1905 return S_OK;
1906}
1907
1909{
1911
1912 TRACE("filter %p, mode %lu.\n", filter, mode);
1913
1914 EnterCriticalSection(&filter->renderer.filter.filter_cs);
1915 filter->aspect_mode = mode;
1916 LeaveCriticalSection(&filter->renderer.filter.filter_cs);
1917 return S_OK;
1918}
1919
1920static const IVMRAspectRatioControl9Vtbl aspect_ratio_control9_vtbl =
1921{
1927};
1928
1930{
1932}
1933
1935{
1937 return IPin_QueryInterface(&filter->renderer.sink.pin.IPin_iface, iid, out);
1938}
1939
1941{
1943 return IPin_AddRef(&filter->renderer.sink.pin.IPin_iface);
1944}
1945
1947{
1949 return IPin_Release(&filter->renderer.sink.pin.IPin_iface);
1950}
1951
1953 IAMVideoAccelerator *iface, DWORD *count, GUID *accelerators)
1954{
1955 FIXME("iface %p, count %p, accelerators %p, stub!\n", iface, count, accelerators);
1956 return E_NOTIMPL;
1957}
1958
1960 const GUID *accelerator, DWORD *count, DDPIXELFORMAT *formats)
1961{
1962 FIXME("iface %p, accelerator %s, count %p, formats %p, stub!\n",
1963 iface, debugstr_guid(accelerator), count, formats);
1964 return E_NOTIMPL;
1965}
1966
1968 const GUID *accelerator, const AMVAUncompDataInfo *format_info, AMVAInternalMemInfo *mem_info)
1969{
1970 FIXME("iface %p, accelerator %s, format_info %p, mem_info %p, stub!\n",
1971 iface, debugstr_guid(accelerator), format_info, mem_info);
1972 return E_NOTIMPL;
1973}
1974
1976 const GUID *accelerator, const AMVAUncompDataInfo *uncompressed_info,
1977 DWORD *compressed_info_count, AMVACompBufferInfo *compressed_infos)
1978{
1979 FIXME("iface %p, accelerator %s, uncompressed_info %p, compressed_info_count %p, compressed_infos %p, stub!\n",
1980 iface, debugstr_guid(accelerator), uncompressed_info, compressed_info_count, compressed_infos);
1981 return E_NOTIMPL;
1982}
1983
1986{
1987 FIXME("iface %p, count %p, infos %p, stub!\n", iface, count, infos);
1988 return E_NOTIMPL;
1989}
1990
1992{
1993 FIXME("iface %p, info %p, stub!\n", iface, info);
1994 return E_NOTIMPL;
1995}
1996
1998{
1999 FIXME("iface %p, info %p, stub!\n", iface, info);
2000 return E_NOTIMPL;
2001}
2002
2004 DWORD type_index, DWORD buffer_index, BOOL read_only, void **buffer, LONG *stride)
2005{
2006 FIXME("iface %p, type_index %lu, buffer_index %lu, read_only %d, buffer %p, stride %p, stub!\n",
2007 iface, type_index, buffer_index, read_only, buffer, stride);
2008 return E_NOTIMPL;
2009}
2010
2012 IAMVideoAccelerator *iface, DWORD type_index, DWORD buffer_index)
2013{
2014 FIXME("iface %p, type_index %lu, buffer_index %lu, stub!\n", iface, type_index, buffer_index);
2015 return E_NOTIMPL;
2016}
2017
2019 DWORD function, void *in_data, DWORD in_size, void *out_data,
2021{
2022 FIXME("iface %p, function %#lx, in_data %p, in_size %lu,"
2023 " out_data %p, out_size %lu, buffer_count %lu, buffers %p, stub!\n",
2024 iface, function, in_data, in_size, out_data, out_size, buffer_count, buffers);
2025 return E_NOTIMPL;
2026}
2027
2029 DWORD type_index, DWORD buffer_index, DWORD flags)
2030{
2031 FIXME("iface %p, type_index %lu, buffer_index %lu, flags %#lx, stub!\n",
2032 iface, type_index, buffer_index, flags);
2033 return E_NOTIMPL;
2034}
2035
2038{
2039 FIXME("iface %p, index %lu, sample %p, stub!\n", iface, index, sample);
2040 return E_NOTIMPL;
2041}
2042
2043static const IAMVideoAcceleratorVtbl video_accelerator_vtbl =
2044{
2060};
2061
2062static inline struct quartz_vmr *impl_from_IOverlay(IOverlay *iface)
2063{
2064 return CONTAINING_RECORD(iface, struct quartz_vmr, IOverlay_iface);
2065}
2066
2068{
2069 struct quartz_vmr *filter = impl_from_IOverlay(iface);
2070 return IPin_QueryInterface(&filter->renderer.sink.pin.IPin_iface, iid, out);
2071}
2072
2074{
2075 struct quartz_vmr *filter = impl_from_IOverlay(iface);
2076 return IPin_AddRef(&filter->renderer.sink.pin.IPin_iface);
2077}
2078
2080{
2081 struct quartz_vmr *filter = impl_from_IOverlay(iface);
2082 return IPin_Release(&filter->renderer.sink.pin.IPin_iface);
2083}
2084
2086{
2087 FIXME("iface %p, count %p, palette %p, stub!\n", iface, count, palette);
2088 return E_NOTIMPL;
2089}
2090
2092{
2093 FIXME("iface %p, count %lu, palette %p, stub!\n", iface, count, palette);
2094 return E_NOTIMPL;
2095}
2096
2098{
2099 FIXME("iface %p, key %p, stub!\n", iface, key);
2100 return E_NOTIMPL;
2101}
2102
2104{
2105 FIXME("iface %p, key %p, stub!\n", iface, key);
2106 return E_NOTIMPL;
2107}
2108
2110{
2111 FIXME("iface %p, key %p, stub!\n", iface, key);
2112 return E_NOTIMPL;
2113}
2114
2116{
2117 struct quartz_vmr *filter = impl_from_IOverlay(iface);
2118
2119 TRACE("filter %p, window %p.\n", filter, window);
2120
2121 if (!filter->window.hwnd)
2122 return VFW_E_WRONG_STATE;
2123
2124 *window = filter->window.hwnd;
2125 return S_OK;
2126}
2127
2129{
2130 FIXME("iface %p, source %p, dest %p, region %p, stub!\n", iface, source, dest, region);
2131 return E_NOTIMPL;
2132}
2133
2135{
2136 FIXME("iface %p, source %p, dest %p, stub!\n", iface, source, dest);
2137 return E_NOTIMPL;
2138}
2139
2141{
2142 FIXME("iface %p, sink %p, flags %#lx, stub!\n", iface, sink, flags);
2143 return E_NOTIMPL;
2144}
2145
2147{
2148 FIXME("iface %p, stub!\n", iface);
2149 return E_NOTIMPL;
2150}
2151
2152static const IOverlayVtbl overlay_vtbl =
2153{
2167};
2168
2170{
2171 struct quartz_vmr *object;
2172 HRESULT hr;
2173
2174 if (!(object = calloc(1, sizeof(*object))))
2175 return E_OUTOFMEMORY;
2176
2177 object->hD3d9 = LoadLibraryA("d3d9.dll");
2178 if (!object->hD3d9)
2179 {
2180 WARN("Could not load d3d9.dll\n");
2181 free(object);
2183 }
2184
2185 strmbase_renderer_init(&object->renderer, outer, &CLSID_VideoMixingRenderer9, L"VMR Input0", &renderer_ops);
2186 object->IAMCertifiedOutputProtection_iface.lpVtbl = &IAMCertifiedOutputProtection_Vtbl;
2187 object->IAMFilterMiscFlags_iface.lpVtbl = &IAMFilterMiscFlags_Vtbl;
2188 object->IVMRAspectRatioControl9_iface.lpVtbl = &aspect_ratio_control9_vtbl;
2189 object->IVMRFilterConfig9_iface.lpVtbl = &VMR9_FilterConfig_Vtbl;
2190 object->IVMRMixerBitmap9_iface.lpVtbl = &mixer_bitmap9_vtbl;
2191 object->IVMRMixerControl9_iface.lpVtbl = &mixer_control9_vtbl;
2192 object->IVMRMonitorConfig9_iface.lpVtbl = &VMR9_MonitorConfig_Vtbl;
2193 object->IVMRSurfaceAllocatorNotify9_iface.lpVtbl = &VMR9_SurfaceAllocatorNotify_Vtbl;
2194 object->IVMRWindowlessControl9_iface.lpVtbl = &VMR9_WindowlessControl_Vtbl;
2195
2196 object->IAMVideoAccelerator_iface.lpVtbl = &video_accelerator_vtbl;
2197 object->IOverlay_iface.lpVtbl = &overlay_vtbl;
2198
2200 &object->renderer.filter, &object->renderer.sink.pin, &window_ops);
2201
2202 if (FAILED(hr = video_window_create_window(&object->window)))
2203 {
2204 video_window_cleanup(&object->window);
2206 FreeLibrary(object->hD3d9);
2207 free(object);
2208 return hr;
2209 }
2210
2211 object->mixing_prefs = MixerPref9_NoDecimation | MixerPref9_ARAdjustXorY
2213
2214 TRACE("Created VMR %p.\n", object);
2215 *out = &object->renderer.filter.IUnknown_inner;
2216 return S_OK;
2217}
2218
2220{
2222
2223 TRACE("(%p/%p)->(%s, %p)\n", This, iface, qzdebugstr_guid(riid), ppv);
2224
2225 *ppv = NULL;
2226
2227 if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IVMRImagePresenter9))
2228 *ppv = &This->IVMRImagePresenter9_iface;
2229 else if (IsEqualIID(riid, &IID_IVMRSurfaceAllocator9))
2230 *ppv = &This->IVMRSurfaceAllocator9_iface;
2231
2232 if (*ppv)
2233 {
2234 IUnknown_AddRef((IUnknown *)(*ppv));
2235 return S_OK;
2236 }
2237
2238 FIXME("No interface for %s\n", debugstr_guid(riid));
2239
2240 return E_NOINTERFACE;
2241}
2242
2244{
2246 ULONG refcount = InterlockedIncrement(&presenter->refCount);
2247
2248 TRACE("%p increasing refcount to %lu.\n", presenter, refcount);
2249
2250 return refcount;
2251}
2252
2254{
2256 ULONG refcount = InterlockedDecrement(&This->refCount);
2257
2258 TRACE("%p decreasing refcount to %lu.\n", This, refcount);
2259
2260 if (!refcount)
2261 {
2262 DWORD i;
2263
2264 IDirect3D9_Release(This->d3d9_ptr);
2265
2266 for (i = 0; i < This->num_surfaces; ++i)
2267 {
2268 IDirect3DSurface9 *surface = This->d3d9_surfaces[i];
2269 if (surface)
2271 }
2272
2273 if (This->d3d9_dev)
2274 IDirect3DDevice9_Release(This->d3d9_dev);
2275 free(This->d3d9_surfaces);
2276 This->d3d9_surfaces = NULL;
2277 This->num_surfaces = 0;
2278 free(This);
2279 return 0;
2280 }
2281 return refcount;
2282}
2283
2285{
2287
2288 TRACE("presenter %p, cookie %#Ix.\n", presenter, cookie);
2289
2290 return S_OK;
2291}
2292
2294{
2296
2297 TRACE("presenter %p, cookie %#Ix.\n", presenter, cookie);
2298
2299 return S_OK;
2300}
2301
2304{
2306 const struct quartz_vmr *filter = presenter->pVMR9;
2307 IDirect3DDevice9 *device = presenter->d3d9_dev;
2308 const RECT src = filter->window.src;
2309 IDirect3DSurface9 *backbuffer;
2310 RECT dst = filter->window.dst;
2311 HRESULT hr;
2312
2313 TRACE("presenter %p, cookie %#Ix, info %p.\n", presenter, cookie, info);
2314
2315 /* This might happen if we don't have active focus (eg on a different virtual desktop) */
2316 if (!device)
2317 return S_OK;
2318
2320 D3DCOLOR_XRGB(0, 0, 0), 1.0f, 0)))
2321 ERR("Failed to clear, hr %#lx.\n", hr);
2322
2324 ERR("Failed to begin scene, hr %#lx.\n", hr);
2325
2327 {
2328 ERR("Failed to get backbuffer, hr %#lx.\n", hr);
2329 return hr;
2330 }
2331
2332 if (FAILED(hr = IDirect3DDevice9_StretchRect(device, info->lpSurf, NULL, backbuffer, NULL, D3DTEXF_POINT)))
2333 ERR("Failed to blit image, hr %#lx.\n", hr);
2334 IDirect3DSurface9_Release(backbuffer);
2335
2337 ERR("Failed to end scene, hr %#lx.\n", hr);
2338
2339 if (filter->aspect_mode == VMR9ARMode_LetterBox)
2340 {
2341 unsigned int src_width = src.right - src.left, src_height = src.bottom - src.top;
2342 unsigned int dst_width = dst.right - dst.left, dst_height = dst.bottom - dst.top;
2343
2344 if (src_width * dst_height > dst_width * src_height)
2345 {
2346 /* src is "wider" than dst. */
2347 unsigned int dst_center = (dst.top + dst.bottom) / 2;
2348 unsigned int scaled_height = src_height * dst_width / src_width;
2349
2350 dst.top = dst_center - scaled_height / 2;
2351 dst.bottom = dst.top + scaled_height;
2352 }
2353 else if (src_width * dst_height < dst_width * src_height)
2354 {
2355 /* src is "taller" than dst. */
2356 unsigned int dst_center = (dst.left + dst.right) / 2;
2357 unsigned int scaled_width = src_width * dst_height / src_height;
2358
2359 dst.left = dst_center - scaled_width / 2;
2360 dst.right = dst.left + scaled_width;
2361 }
2362 }
2363
2365 ERR("Failed to present, hr %#lx.\n", hr);
2366
2367 return S_OK;
2368}
2369
2370static const IVMRImagePresenter9Vtbl VMR9_ImagePresenter =
2371{
2378};
2379
2381{
2383 return IVMRImagePresenter9_QueryInterface(&presenter->IVMRImagePresenter9_iface, iid, out);
2384}
2385
2387{
2389 return IVMRImagePresenter9_AddRef(&presenter->IVMRImagePresenter9_iface);
2390}
2391
2393{
2395 return IVMRImagePresenter9_Release(&presenter->IVMRImagePresenter9_iface);
2396}
2397
2398static void adjust_surface_size(const D3DCAPS9 *caps, VMR9AllocationInfo *allocinfo)
2399{
2400 UINT width, height;
2401
2402 /* There are no restrictions on the size of offscreen surfaces. */
2403 if (!(allocinfo->dwFlags & VMR9AllocFlag_TextureSurface))
2404 return;
2405
2407 {
2408 width = allocinfo->dwWidth;
2409 height = allocinfo->dwHeight;
2410 }
2411 else
2412 {
2413 width = height = 1;
2414 while (width < allocinfo->dwWidth)
2415 width *= 2;
2416
2417 while (height < allocinfo->dwHeight)
2418 height *= 2;
2419 FIXME("NPOW2 support missing, not using proper surfaces!\n");
2420 }
2421
2423 {
2424 if (height > width)
2425 width = height;
2426 else
2427 height = width;
2428 FIXME("Square texture support required..\n");
2429 }
2430
2431 allocinfo->dwHeight = height;
2432 allocinfo->dwWidth = width;
2433}
2434
2435static UINT d3d9_adapter_from_hwnd(IDirect3D9 *d3d9, HWND hwnd, HMONITOR *mon_out)
2436{
2437 UINT d3d9_adapter;
2438 HMONITOR mon;
2439
2440 mon = MonitorFromWindow(hwnd, MONITOR_DEFAULTTONULL);
2441 if (!mon)
2442 d3d9_adapter = 0;
2443 else
2444 {
2445 for (d3d9_adapter = 0; d3d9_adapter < IDirect3D9_GetAdapterCount(d3d9); ++d3d9_adapter)
2446 {
2447 if (mon == IDirect3D9_GetAdapterMonitor(d3d9, d3d9_adapter))
2448 break;
2449 }
2450 if (d3d9_adapter >= IDirect3D9_GetAdapterCount(d3d9))
2451 d3d9_adapter = 0;
2452 }
2453 if (mon_out)
2454 *mon_out = mon;
2455 return d3d9_adapter;
2456}
2457
2460{
2464 DWORD d3d9_adapter;
2465 D3DCAPS9 caps;
2466 HWND window;
2467 HRESULT hr;
2468
2469 TRACE("presenter %p, cookie %#Ix, info %p, numbuffers %p.\n", This, cookie, info, numbuffers);
2470
2471 This->info = *info;
2472
2473 if (This->pVMR9->mode == VMR9Mode_Windowed)
2474 window = This->pVMR9->window.hwnd;
2475 else
2476 window = This->pVMR9->clipping_window;
2477
2478 /* Obtain a monitor and d3d9 device */
2479 d3d9_adapter = d3d9_adapter_from_hwnd(This->d3d9_ptr, window, &This->hMon);
2480
2481 /* Now try to create the d3d9 device */
2482 ZeroMemory(&d3dpp, sizeof(d3dpp));
2483 d3dpp.Windowed = TRUE;
2484 d3dpp.hDeviceWindow = window;
2486 d3dpp.BackBufferWidth = info->dwWidth;
2487 d3dpp.BackBufferHeight = info->dwHeight;
2488
2489 hr = IDirect3D9_CreateDevice(This->d3d9_ptr, d3d9_adapter, D3DDEVTYPE_HAL,
2491 if (FAILED(hr))
2492 {
2493 ERR("Failed to create device, hr %#lx.\n", hr);
2494 return hr;
2495 }
2496
2499 {
2500 WARN("Device does not support blitting from textures.\n");
2503 }
2504
2505 This->d3d9_dev = device;
2506 IVMRSurfaceAllocatorNotify9_SetD3DDevice(This->SurfaceAllocatorNotify, This->d3d9_dev, This->hMon);
2507
2508 if (!(This->d3d9_surfaces = calloc(*numbuffers, sizeof(IDirect3DSurface9 *))))
2509 return E_OUTOFMEMORY;
2510
2511 adjust_surface_size(&caps, info);
2512
2513 hr = IVMRSurfaceAllocatorNotify9_AllocateSurfaceHelper(This->SurfaceAllocatorNotify,
2514 info, numbuffers, This->d3d9_surfaces);
2515 if (FAILED(hr))
2516 {
2517 ERR("Failed to allocate surfaces, hr %#lx.\n", hr);
2518 IVMRSurfaceAllocator9_TerminateDevice(This->pVMR9->allocator, This->pVMR9->cookie);
2519 return hr;
2520 }
2521
2522 This->num_surfaces = *numbuffers;
2523
2524 return S_OK;
2525}
2526
2528{
2529 TRACE("iface %p, cookie %#Ix.\n", iface, cookie);
2530
2531 return S_OK;
2532}
2533
2535 DWORD_PTR cookie, DWORD surfaceindex, DWORD flags, IDirect3DSurface9 **surface)
2536{
2538
2539 /* Update everything first, this is needed because the surface might be destroyed in the reset */
2540 if (!This->d3d9_dev)
2541 {
2542 TRACE("Device has left me!\n");
2543 return E_FAIL;
2544 }
2545
2546 if (surfaceindex >= This->num_surfaces)
2547 {
2548 ERR("surfaceindex is greater than num_surfaces\n");
2549 return E_FAIL;
2550 }
2551 *surface = This->d3d9_surfaces[surfaceindex];
2552 IDirect3DSurface9_AddRef(*surface);
2553
2554 return S_OK;
2555}
2556
2559{
2561
2562 TRACE("presenter %p, notify %p.\n", presenter, notify);
2563
2564 /* No AddRef taken here or the base VMR9 filter would never be destroyed */
2565 presenter->SurfaceAllocatorNotify = notify;
2566 return S_OK;
2567}
2568
2569static const IVMRSurfaceAllocator9Vtbl VMR9_SurfaceAllocator =
2570{
2578};
2579
2580static IDirect3D9 *init_d3d9(HMODULE d3d9_handle)
2581{
2582 IDirect3D9 * (__stdcall * d3d9_create)(UINT SDKVersion);
2583
2584 d3d9_create = (void *)GetProcAddress(d3d9_handle, "Direct3DCreate9");
2585 if (!d3d9_create) return NULL;
2586
2587 return d3d9_create(D3D_SDK_VERSION);
2588}
2589
2591{
2592 struct default_presenter *object;
2593
2594 if (!(object = calloc(1, sizeof(*object))))
2595 return E_OUTOFMEMORY;
2596
2597 object->d3d9_ptr = init_d3d9(parent->hD3d9);
2598 if (!object->d3d9_ptr)
2599 {
2600 WARN("Could not initialize d3d9.dll\n");
2601 free(object);
2603 }
2604
2605 object->IVMRImagePresenter9_iface.lpVtbl = &VMR9_ImagePresenter;
2606 object->IVMRSurfaceAllocator9_iface.lpVtbl = &VMR9_SurfaceAllocator;
2607
2608 object->refCount = 1;
2609 object->pVMR9 = parent;
2610
2611 TRACE("Created default presenter %p.\n", object);
2612 *presenter = object;
2613 return S_OK;
2614}
struct mke2fs_defaults settings[]
@ lparam
Definition: SystemMenu.c:31
#define InterlockedIncrement
Definition: armddk.h:53
#define InterlockedDecrement
Definition: armddk.h:52
static const char * wine_dbgstr_rect(const RECT *prc)
Definition: atltest.h:160
AMCOPPSignature
Definition: axextend.idl:810
@ AM_FILTER_MISC_FLAGS_IS_RENDERER
Definition: axextend.idl:1244
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
#define ARRAY_SIZE(A)
Definition: main.h:20
#define FIXME(fmt,...)
Definition: precomp.h:53
#define WARN(fmt,...)
Definition: precomp.h:61
#define ERR(fmt,...)
Definition: precomp.h:57
const GUID IID_IUnknown
RECT rect
Definition: combotst.c:67
@ D3DTEXF_POINT
Definition: d3d8types.h:871
#define D3DLOCK_DISCARD
Definition: d3d8types.h:72
@ D3DMULTISAMPLE_NONE
Definition: d3d8types.h:672
@ D3DBACKBUFFER_TYPE_MONO
Definition: d3d8types.h:493
@ D3DFMT_A1R5G5B5
Definition: d3d8types.h:608
@ D3DFMT_UYVY
Definition: d3d8types.h:632
@ D3DFMT_YUY2
Definition: d3d8types.h:633
@ D3DFMT_X1R5G5B5
Definition: d3d8types.h:607
@ D3DFMT_R8G8B8
Definition: d3d8types.h:603
@ D3DFMT_A8R8G8B8
Definition: d3d8types.h:604
@ D3DFMT_R5G6B5
Definition: d3d8types.h:606
@ D3DFMT_A4R4G4B4
Definition: d3d8types.h:609
@ D3DFMT_X8R8G8B8
Definition: d3d8types.h:605
#define D3DUSAGE_DYNAMIC
Definition: d3d8types.h:99
@ D3DSWAPEFFECT_COPY
Definition: d3d8types.h:853
@ D3DDEVTYPE_HAL
Definition: d3d8types.h:576
@ D3DPOOL_DEFAULT
Definition: d3d8types.h:709
@ D3DPOOL_SYSTEMMEM
Definition: d3d8types.h:711
enum _D3DFORMAT D3DFORMAT
#define D3DCOLOR_XRGB(r, g, b)
Definition: d3d8types.h:44
#define D3DCLEAR_TARGET
Definition: d3d8types.h:30
#define D3DLOCK_READONLY
Definition: d3d8types.h:69
#define IDirect3DDevice9_EndScene(p)
Definition: d3d9.h:1377
#define IDirect3DDevice9_BeginScene(p)
Definition: d3d9.h:1376
#define IDirect3DDevice9_GetBackBuffer(p, a, b, c, d)
Definition: d3d9.h:1353
#define IDirect3DTexture9_GetSurfaceLevel(p, a, b)
Definition: d3d9.h:861
#define IDirect3DSurface9_LockRect(p, a, b, c)
Definition: d3d9.h:463
#define IDirect3D9_CreateDevice(p, a, b, c, d, e, f)
Definition: d3d9.h:224
#define IDirect3D9_GetAdapterMonitor(p, a)
Definition: d3d9.h:223
#define IDirect3DDevice9_StretchRect(p, a, b, c, d, e)
Definition: d3d9.h:1369
#define IDirect3DDevice9_CreateTexture(p, a, b, c, d, e, f, g, h)
Definition: d3d9.h:1358
#define IDirect3DDevice9_GetRenderTargetData(p, a, b)
Definition: d3d9.h:1367
#define IDirect3DDevice9_Present(p, a, b, c, d)
Definition: d3d9.h:1352
#define IDirect3DDevice9_GetDeviceCaps(p, a)
Definition: d3d9.h:1342
#define IDirect3DSurface9_AddRef(p)
Definition: d3d9.h:449
#define IDirect3D9_Release(p)
Definition: d3d9.h:209
#define IDirect3DSurface9_GetDesc(p, a)
Definition: d3d9.h:462
#define IDirect3DDevice9_Release(p)
Definition: d3d9.h:1336
#define IDirect3DDevice9_Clear(p, a, b, c, d, e, f)
Definition: d3d9.h:1378
#define IDirect3D9_GetAdapterCount(p)
Definition: d3d9.h:212
#define IDirect3DSurface9_UnlockRect(p)
Definition: d3d9.h:464
#define IDirect3DSurface9_Release(p)
Definition: d3d9.h:450
#define IDirect3DTexture9_Release(p)
Definition: d3d9.h:842
#define IDirect3DDevice9_AddRef(p)
Definition: d3d9.h:1335
#define IDirect3DDevice9_CreateRenderTarget(p, a, b, c, d, e, f, g, h)
Definition: d3d9.h:1363
#define IDirect3DDevice9_CreateOffscreenPlainSurface(p, a, b, c, d, e, f)
Definition: d3d9.h:1371
#define IDirect3DDevice9_GetRenderTarget(p, a, b)
Definition: d3d9.h:1373
format_info
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_INVALIDARG
Definition: ddrawi.h:101
#define E_NOTIMPL
Definition: ddrawi.h:99
#define E_FAIL
Definition: ddrawi.h:102
#define free
Definition: debug_ros.c:5
HRESULT hr
Definition: delayimp.cpp:582
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
static const struct pixel_format_desc formats[]
Definition: util.c:31
const char * qzdebugstr_guid(const GUID *id)
Definition: main.c:671
static HRESULT WINAPI VMR9MonitorConfig_GetAvailableMonitors(IVMRMonitorConfig9 *iface, VMR9MonitorInfo *info, DWORD arraysize, DWORD *numdev)
Definition: vmr9.c:983
static ULONG WINAPI mixer_bitmap9_AddRef(IVMRMixerBitmap9 *iface)
Definition: vmr9.c:1827
static struct default_presenter * impl_from_IVMRImagePresenter9(IVMRImagePresenter9 *iface)
Definition: vmr9.c:167
static ULONG WINAPI AMCertifiedOutputProtection_AddRef(IAMCertifiedOutputProtection *iface)
Definition: vmr9.c:758
static HRESULT WINAPI VMR9FilterConfig_SetImageCompositor(IVMRFilterConfig9 *iface, IVMRImageCompositor9 *compositor)
Definition: vmr9.c:1038
static HRESULT WINAPI VMR9WindowlessControl_GetBorderColor(IVMRWindowlessControl9 *iface, COLORREF *color)
Definition: vmr9.c:1383
static ULONG WINAPI video_accelerator_AddRef(IAMVideoAccelerator *iface)
Definition: vmr9.c:1940
static HRESULT WINAPI VMR9_SurfaceAllocator_GetSurface(IVMRSurfaceAllocator9 *iface, DWORD_PTR cookie, DWORD surfaceindex, DWORD flags, IDirect3DSurface9 **surface)
Definition: vmr9.c:2534
static const IVMRMixerBitmap9Vtbl mixer_bitmap9_vtbl
Definition: vmr9.c:1863
static struct quartz_vmr * impl_from_IOverlay(IOverlay *iface)
Definition: vmr9.c:2062
static HRESULT WINAPI VMR9FilterConfig_GetRenderingPrefs(IVMRFilterConfig9 *iface, DWORD *renderflags)
Definition: vmr9.c:1102
static HRESULT WINAPI VMR9MonitorConfig_SetDefaultMonitor(IVMRMonitorConfig9 *iface, UINT uDev)
Definition: vmr9.c:961
static HRESULT initialize_device(struct quartz_vmr *filter, VMR9AllocationInfo *info, DWORD count)
Definition: vmr9.c:357
static HRESULT WINAPI video_accelerator_Execute(IAMVideoAccelerator *iface, DWORD function, void *in_data, DWORD in_size, void *out_data, DWORD out_size, DWORD buffer_count, const AMVABUFFERINFO *buffers)
Definition: vmr9.c:2018
static HRESULT WINAPI overlay_GetColorKey(IOverlay *iface, COLORKEY *key)
Definition: vmr9.c:2103
static const IAMCertifiedOutputProtectionVtbl IAMCertifiedOutputProtection_Vtbl
Definition: vmr9.c:808
static HRESULT WINAPI video_accelerator_GetBuffer(IAMVideoAccelerator *iface, DWORD type_index, DWORD buffer_index, BOOL read_only, void **buffer, LONG *stride)
Definition: vmr9.c:2003
static HRESULT WINAPI VMR9MonitorConfig_QueryInterface(IVMRMonitorConfig9 *iface, REFIID riid, LPVOID *ppv)
Definition: vmr9.c:920
static ULONG WINAPI VMR9FilterConfig_AddRef(IVMRFilterConfig9 *iface)
Definition: vmr9.c:1026
static HRESULT vmr_query_accept(struct strmbase_renderer *iface, const AM_MEDIA_TYPE *mt)
Definition: vmr9.c:345
static ULONG WINAPI mixer_control9_Release(IVMRMixerControl9 *iface)
Definition: vmr9.c:1662
static HRESULT WINAPI AMCertifiedOutputProtection_KeyExchange(IAMCertifiedOutputProtection *iface, GUID *pRandom, BYTE **VarLenCertGH, DWORD *pdwLengthCertGH)
Definition: vmr9.c:770
static const IVMRFilterConfig9Vtbl VMR9_FilterConfig_Vtbl
Definition: vmr9.c:1172
static const BITMAPINFOHEADER * get_bitmap_header(const AM_MEDIA_TYPE *mt)
Definition: vmr9.c:49
static HRESULT WINAPI VMR9FilterConfig_SetNumberOfStreams(IVMRFilterConfig9 *iface, DWORD count)
Definition: vmr9.c:1046
static HRESULT WINAPI video_accelerator_QueryRenderStatus(IAMVideoAccelerator *iface, DWORD type_index, DWORD buffer_index, DWORD flags)
Definition: vmr9.c:2028
static ULONG WINAPI VMR9_SurfaceAllocator_Release(IVMRSurfaceAllocator9 *iface)
Definition: vmr9.c:2392
static ULONG WINAPI mixer_bitmap9_Release(IVMRMixerBitmap9 *iface)
Definition: vmr9.c:1833
static HRESULT WINAPI aspect_ratio_control9_SetAspectRatioMode(IVMRAspectRatioControl9 *iface, DWORD mode)
Definition: vmr9.c:1908
static HRESULT WINAPI VMR9_SurfaceAllocator_TerminateDevice(IVMRSurfaceAllocator9 *iface, DWORD_PTR cookie)
Definition: vmr9.c:2527
static HRESULT WINAPI VMR9MonitorConfig_SetMonitor(IVMRMonitorConfig9 *iface, UINT uDev)
Definition: vmr9.c:939
static HRESULT WINAPI VMR9SurfaceAllocatorNotify_AllocateSurfaceHelper(IVMRSurfaceAllocatorNotify9 *iface, VMR9AllocationInfo *allocinfo, DWORD *numbuffers, IDirect3DSurface9 **surface)
Definition: vmr9.c:1514
static const char * debugstr_normalized_rect(const VMR9NormalizedRect *rect)
Definition: vmr9.c:43
static void vmr_stop_stream(struct strmbase_renderer *iface)
Definition: vmr9.c:477
static HRESULT vmr_render(struct strmbase_renderer *iface, IMediaSample *sample)
Definition: vmr9.c:220
static const IAMVideoAcceleratorVtbl video_accelerator_vtbl
Definition: vmr9.c:2043
static HRESULT WINAPI VMR9_SurfaceAllocator_AdviseNotify(IVMRSurfaceAllocator9 *iface, IVMRSurfaceAllocatorNotify9 *notify)
Definition: vmr9.c:2557
static void vmr_init_stream(struct strmbase_renderer *iface)
Definition: vmr9.c:462
static HRESULT WINAPI VMR9SurfaceAllocatorNotify_SetD3DDevice(IVMRSurfaceAllocatorNotify9 *iface, IDirect3DDevice9 *device, HMONITOR monitor)
Definition: vmr9.c:1478
static HRESULT WINAPI video_accelerator_GetUncompFormatsSupported(IAMVideoAccelerator *iface, const GUID *accelerator, DWORD *count, DDPIXELFORMAT *formats)
Definition: vmr9.c:1959
static struct quartz_vmr * impl_from_IVMRFilterConfig9(IVMRFilterConfig9 *iface)
Definition: vmr9.c:128
static struct quartz_vmr * impl_from_IAMCertifiedOutputProtection(IAMCertifiedOutputProtection *iface)
Definition: vmr9.c:118
static HRESULT WINAPI VMR9SurfaceAllocatorNotify_NotifyEvent(IVMRSurfaceAllocatorNotify9 *iface, LONG code, LONG_PTR param1, LONG_PTR param2)
Definition: vmr9.c:1617
static struct quartz_vmr * impl_from_IVMRWindowlessControl9(IVMRWindowlessControl9 *iface)
Definition: vmr9.c:143
static const struct video_window_ops window_ops
Definition: vmr9.c:695
static HRESULT WINAPI VMR9MonitorConfig_GetDefaultMonitor(IVMRMonitorConfig9 *iface, UINT *uDev)
Definition: vmr9.c:970
static ULONG WINAPI aspect_ratio_control9_Release(IVMRAspectRatioControl9 *iface)
Definition: vmr9.c:1890
static const BITMAPINFOHEADER * get_filter_bitmap_header(const struct quartz_vmr *filter)
Definition: vmr9.c:108
static struct quartz_vmr * impl_from_IVMRAspectRatioControl9(IVMRAspectRatioControl9 *iface)
Definition: vmr9.c:1873
static HRESULT WINAPI VMR9_ImagePresenter_StartPresenting(IVMRImagePresenter9 *iface, DWORD_PTR cookie)
Definition: vmr9.c:2284
static const struct strmbase_renderer_ops renderer_ops
Definition: vmr9.c:612
static HRESULT WINAPI VMR9WindowlessControl_GetMinIdealVideoSize(IVMRWindowlessControl9 *iface, LONG *width, LONG *height)
Definition: vmr9.c:1226
static HRESULT WINAPI video_accelerator_DisplayFrame(IAMVideoAccelerator *iface, DWORD index, IMediaSample *sample)
Definition: vmr9.c:2036
static HRESULT WINAPI mixer_control9_QueryInterface(IVMRMixerControl9 *iface, REFIID iid, void **out)
Definition: vmr9.c:1650
static HRESULT WINAPI overlay_GetWindowHandle(IOverlay *iface, HWND *window)
Definition: vmr9.c:2115
static HRESULT WINAPI VMR9WindowlessControl_GetVideoPosition(IVMRWindowlessControl9 *iface, RECT *src, RECT *dst)
Definition: vmr9.c:1261
static ULONG WINAPI AMCertifiedOutputProtection_Release(IAMCertifiedOutputProtection *iface)
Definition: vmr9.c:764
static HRESULT WINAPI mixer_control9_SetZOrder(IVMRMixerControl9 *iface, DWORD stream, DWORD z)
Definition: vmr9.c:1686
static HRESULT WINAPI VMR9_SurfaceAllocator_QueryInterface(IVMRSurfaceAllocator9 *iface, REFIID iid, void **out)
Definition: vmr9.c:2380
static HRESULT WINAPI VMR9WindowlessControl_QueryInterface(IVMRWindowlessControl9 *iface, REFIID riid, LPVOID *ppv)
Definition: vmr9.c:1186
static ULONG WINAPI AMFilterMiscFlags_Release(IAMFilterMiscFlags *iface)
Definition: vmr9.c:829
static void vmr_disconnect(struct strmbase_renderer *This)
Definition: vmr9.c:526
static HRESULT vmr_query_interface(struct strmbase_renderer *iface, REFIID iid, void **out)
Definition: vmr9.c:564
HRESULT vmr9_create(IUnknown *outer, IUnknown **out)
Definition: vmr9.c:2169
static ULONG WINAPI VMR9FilterConfig_Release(IVMRFilterConfig9 *iface)
Definition: vmr9.c:1032
static HRESULT WINAPI AMCertifiedOutputProtection_SessionSequenceStart(IAMCertifiedOutputProtection *iface, AMCOPPSignature *pSig)
Definition: vmr9.c:780
static void adjust_surface_size(const D3DCAPS9 *caps, VMR9AllocationInfo *allocinfo)
Definition: vmr9.c:2398
static struct quartz_vmr * impl_from_IVMRSurfaceAllocatorNotify9(IVMRSurfaceAllocatorNotify9 *iface)
Definition: vmr9.c:138
static ULONG WINAPI VMR9MonitorConfig_Release(IVMRMonitorConfig9 *iface)
Definition: vmr9.c:933
static void vmr_start_stream(struct strmbase_renderer *iface)
Definition: vmr9.c:470
static const IVMRSurfaceAllocator9Vtbl VMR9_SurfaceAllocator
Definition: vmr9.c:2569
static struct quartz_vmr * impl_from_IVMRMixerBitmap9(IVMRMixerBitmap9 *iface)
Definition: vmr9.c:1816
static BOOL CALLBACK get_available_monitors_proc(HMONITOR hmon, HDC hdc, LPRECT lprc, LPARAM lparam)
Definition: vmr9.c:853
static void deallocate_surfaces(struct quartz_vmr *filter)
Definition: vmr9.c:511
static const IOverlayVtbl overlay_vtbl
Definition: vmr9.c:2152
static HRESULT WINAPI VMR9SurfaceAllocatorNotify_QueryInterface(IVMRSurfaceAllocatorNotify9 *iface, REFIID riid, LPVOID *ppv)
Definition: vmr9.c:1411
static ULONG WINAPI overlay_AddRef(IOverlay *iface)
Definition: vmr9.c:2073
static HRESULT WINAPI mixer_bitmap9_QueryInterface(IVMRMixerBitmap9 *iface, REFIID iid, void **out)
Definition: vmr9.c:1821
static ULONG WINAPI VMR9WindowlessControl_Release(IVMRWindowlessControl9 *iface)
Definition: vmr9.c:1198
static HRESULT default_presenter_create(struct quartz_vmr *parent, struct default_presenter **presenter)
Definition: vmr9.c:2590
static HRESULT WINAPI overlay_QueryInterface(IOverlay *iface, REFIID iid, void **out)
Definition: vmr9.c:2067
static HRESULT WINAPI AMCertifiedOutputProtection_QueryInterface(IAMCertifiedOutputProtection *iface, REFIID riid, void **ppv)
Definition: vmr9.c:751
static HRESULT allocate_surfaces(struct quartz_vmr *filter, const AM_MEDIA_TYPE *mt)
Definition: vmr9.c:385
static HRESULT vmr_pin_query_interface(struct strmbase_renderer *iface, REFIID iid, void **out)
Definition: vmr9.c:597
static const IVMRMonitorConfig9Vtbl VMR9_MonitorConfig_Vtbl
Definition: vmr9.c:1008
static HRESULT WINAPI VMR9SurfaceAllocatorNotify_AdviseSurfaceAllocator(IVMRSurfaceAllocatorNotify9 *iface, DWORD_PTR cookie, IVMRSurfaceAllocator9 *allocator)
Definition: vmr9.c:1440
static HRESULT WINAPI mixer_control9_GetZOrder(IVMRMixerControl9 *iface, DWORD stream, DWORD *z)
Definition: vmr9.c:1695
static struct quartz_vmr * impl_from_IVMRMonitorConfig9(IVMRMonitorConfig9 *iface)
Definition: vmr9.c:133
static HRESULT WINAPI video_accelerator_ReleaseBuffer(IAMVideoAccelerator *iface, DWORD type_index, DWORD buffer_index)
Definition: vmr9.c:2011
static ULONG WINAPI mixer_control9_AddRef(IVMRMixerControl9 *iface)
Definition: vmr9.c:1656
static HRESULT WINAPI mixer_control9_GetAlpha(IVMRMixerControl9 *iface, DWORD stream, float *alpha)
Definition: vmr9.c:1677
static HRESULT WINAPI mixer_control9_SetProcAmpControl(IVMRMixerControl9 *iface, DWORD stream, VMR9ProcAmpControl *settings)
Definition: vmr9.c:1766
static const IVMRAspectRatioControl9Vtbl aspect_ratio_control9_vtbl
Definition: vmr9.c:1920
static HRESULT WINAPI mixer_control9_GetProcAmpControlRange(IVMRMixerControl9 *iface, DWORD stream, VMR9ProcAmpControlRange *settings)
Definition: vmr9.c:1786
static HRESULT WINAPI VMR9WindowlessControl_GetMaxIdealVideoSize(IVMRWindowlessControl9 *iface, LONG *width, LONG *height)
Definition: vmr9.c:1234
static HRESULT WINAPI VMR9_SurfaceAllocator_InitializeDevice(IVMRSurfaceAllocator9 *iface, DWORD_PTR cookie, VMR9AllocationInfo *info, DWORD *numbuffers)
Definition: vmr9.c:2458
static HRESULT WINAPI VMR9WindowlessControl_RepaintVideo(IVMRWindowlessControl9 *iface, HWND hwnd, HDC hdc)
Definition: vmr9.c:1330
static const IVMRWindowlessControl9Vtbl VMR9_WindowlessControl_Vtbl
Definition: vmr9.c:1391
static HRESULT WINAPI mixer_bitmap9_UpdateAlphaBitmapParameters(IVMRMixerBitmap9 *iface, const VMR9AlphaBitmap *bitmap)
Definition: vmr9.c:1849
static HRESULT WINAPI mixer_bitmap9_GetAlphaBitmapParameters(IVMRMixerBitmap9 *iface, VMR9AlphaBitmap *bitmap)
Definition: vmr9.c:1856
static HRESULT WINAPI VMR9WindowlessControl_GetNativeVideoSize(IVMRWindowlessControl9 *iface, LONG *width, LONG *height, LONG *aspect_width, LONG *aspect_height)
Definition: vmr9.c:1204
static struct quartz_vmr * impl_from_IVMRMixerControl9(IVMRMixerControl9 *iface)
Definition: vmr9.c:1645
static HRESULT WINAPI video_accelerator_GetInternalCompBufferInfo(IAMVideoAccelerator *iface, DWORD *count, AMVACompBufferInfo *infos)
Definition: vmr9.c:1984
static HRESULT WINAPI VMR9FilterConfig_GetRenderingMode(IVMRFilterConfig9 *iface, DWORD *mode)
Definition: vmr9.c:1156
static struct quartz_vmr * impl_from_IBaseFilter(IBaseFilter *iface)
Definition: vmr9.c:179
static HRESULT WINAPI mixer_bitmap9_SetAlphaBitmap(IVMRMixerBitmap9 *iface, const VMR9AlphaBitmap *bitmap)
Definition: vmr9.c:1839
static HRESULT WINAPI VMR9_ImagePresenter_QueryInterface(IVMRImagePresenter9 *iface, REFIID riid, void **ppv)
Definition: vmr9.c:2219
static HRESULT WINAPI AMCertifiedOutputProtection_ProtectionStatus(IAMCertifiedOutputProtection *iface, const AMCOPPStatusInput *pStatusInput, AMCOPPStatusOutput *pStatusOutput)
Definition: vmr9.c:798
static HRESULT WINAPI VMR9_ImagePresenter_StopPresenting(IVMRImagePresenter9 *iface, DWORD_PTR cookie)
Definition: vmr9.c:2293
static HRESULT WINAPI mixer_control9_GetBackgroundClr(IVMRMixerControl9 *iface, COLORREF *color)
Definition: vmr9.c:1733
static const IVideoWindowVtbl IVideoWindow_VTable
Definition: vmr9.c:701
static HRESULT vmr_connect(struct strmbase_renderer *iface, const AM_MEDIA_TYPE *mt)
Definition: vmr9.c:487
static HRESULT WINAPI mixer_control9_SetMixingPrefs(IVMRMixerControl9 *iface, DWORD flags)
Definition: vmr9.c:1742
static const IVMRSurfaceAllocatorNotify9Vtbl VMR9_SurfaceAllocatorNotify_Vtbl
Definition: vmr9.c:1633
static struct quartz_vmr * impl_from_IAMFilterMiscFlags(IAMFilterMiscFlags *iface)
Definition: vmr9.c:123
static HRESULT WINAPI overlay_SetColorKey(IOverlay *iface, COLORKEY *key)
Definition: vmr9.c:2109
static HRESULT WINAPI overlay_SetPalette(IOverlay *iface, DWORD count, PALETTEENTRY *palette)
Definition: vmr9.c:2091
static void vmr_destroy(struct strmbase_renderer *iface)
Definition: vmr9.c:532
static ULONG WINAPI VMR9SurfaceAllocatorNotify_AddRef(IVMRSurfaceAllocatorNotify9 *iface)
Definition: vmr9.c:1417
static HRESULT WINAPI VMR9SurfaceAllocatorNotify_ChangeD3DDevice(IVMRSurfaceAllocatorNotify9 *iface, IDirect3DDevice9 *device, HMONITOR monitor)
Definition: vmr9.c:1493
static HRESULT WINAPI VMR9FilterConfig_SetRenderingMode(IVMRFilterConfig9 *iface, DWORD mode)
Definition: vmr9.c:1110
static ULONG WINAPI VMR9_SurfaceAllocator_AddRef(IVMRSurfaceAllocator9 *iface)
Definition: vmr9.c:2386
static HRESULT WINAPI overlay_GetVideoPosition(IOverlay *iface, RECT *source, RECT *dest)
Definition: vmr9.c:2134
static HRESULT WINAPI VMR9FilterConfig_QueryInterface(IVMRFilterConfig9 *iface, REFIID riid, LPVOID *ppv)
Definition: vmr9.c:1020
static const IVMRMixerControl9Vtbl mixer_control9_vtbl
Definition: vmr9.c:1796
static HRESULT WINAPI mixer_control9_SetOutputRect(IVMRMixerControl9 *iface, DWORD stream, const VMR9NormalizedRect *rect)
Definition: vmr9.c:1704
static HRESULT WINAPI aspect_ratio_control9_GetAspectRatioMode(IVMRAspectRatioControl9 *iface, DWORD *mode)
Definition: vmr9.c:1896
static ULONG WINAPI VMR9_ImagePresenter_AddRef(IVMRImagePresenter9 *iface)
Definition: vmr9.c:2243
static struct quartz_vmr * impl_from_video_window(struct video_window *iface)
Definition: vmr9.c:113
static HRESULT WINAPI VMR9FilterConfig_SetRenderingPrefs(IVMRFilterConfig9 *iface, DWORD flags)
Definition: vmr9.c:1093
static HRESULT WINAPI AMFilterMiscFlags_QueryInterface(IAMFilterMiscFlags *iface, REFIID riid, void **ppv)
Definition: vmr9.c:819
static HRESULT WINAPI VMR9MonitorConfig_GetMonitor(IVMRMonitorConfig9 *iface, UINT *uDev)
Definition: vmr9.c:948
static HRESULT WINAPI video_accelerator_EndFrame(IAMVideoAccelerator *iface, const AMVAEndFrameInfo *info)
Definition: vmr9.c:1997
static HRESULT WINAPI VMR9WindowlessControl_SetAspectRatioMode(IVMRWindowlessControl9 *iface, DWORD mode)
Definition: vmr9.c:1288
static HRESULT WINAPI VMR9WindowlessControl_SetVideoClippingWindow(IVMRWindowlessControl9 *iface, HWND window)
Definition: vmr9.c:1300
static HRESULT WINAPI VMR9WindowlessControl_GetCurrentImage(IVMRWindowlessControl9 *iface, BYTE **dib)
Definition: vmr9.c:1367
static ULONG WINAPI VMR9_ImagePresenter_Release(IVMRImagePresenter9 *iface)
Definition: vmr9.c:2253
static HRESULT WINAPI AMCertifiedOutputProtection_ProtectionCommand(IAMCertifiedOutputProtection *iface, const AMCOPPCommand *cmd)
Definition: vmr9.c:789
static const IVMRImagePresenter9Vtbl VMR9_ImagePresenter
Definition: vmr9.c:2370
static HRESULT WINAPI mixer_control9_SetBackgroundClr(IVMRMixerControl9 *iface, COLORREF color)
Definition: vmr9.c:1724
static struct quartz_vmr * impl_from_IAMVideoAccelerator(IAMVideoAccelerator *iface)
Definition: vmr9.c:1929
static HRESULT WINAPI video_accelerator_BeginFrame(IAMVideoAccelerator *iface, const AMVABeginFrameInfo *info)
Definition: vmr9.c:1991
static HRESULT WINAPI video_accelerator_QueryInterface(IAMVideoAccelerator *iface, REFIID iid, void **out)
Definition: vmr9.c:1934
static HRESULT WINAPI video_accelerator_GetInternalMemInfo(IAMVideoAccelerator *iface, const GUID *accelerator, const AMVAUncompDataInfo *format_info, AMVAInternalMemInfo *mem_info)
Definition: vmr9.c:1967
static HRESULT WINAPI VMR9FilterConfig_GetNumberOfStreams(IVMRFilterConfig9 *iface, DWORD *count)
Definition: vmr9.c:1073
static HRESULT WINAPI mixer_control9_GetMixingPrefs(IVMRMixerControl9 *iface, DWORD *flags)
Definition: vmr9.c:1754
static HRESULT WINAPI overlay_GetDefaultColorKey(IOverlay *iface, COLORKEY *key)
Definition: vmr9.c:2097
static void copy_plane(BYTE **dstp, unsigned int dst_pitch, unsigned int dst_height, const BYTE **srcp, unsigned int src_pitch, int src_height)
Definition: vmr9.c:184
static HRESULT WINAPI overlay_Advise(IOverlay *iface, IOverlayNotify *sink, DWORD flags)
Definition: vmr9.c:2140
static HRESULT WINAPI mixer_control9_GetProcAmpControl(IVMRMixerControl9 *iface, DWORD stream, VMR9ProcAmpControl *settings)
Definition: vmr9.c:1776
static HRESULT WINAPI overlay_Unadvise(IOverlay *iface)
Definition: vmr9.c:2146
static const IAMFilterMiscFlagsVtbl IAMFilterMiscFlags_Vtbl
Definition: vmr9.c:838
static UINT d3d9_adapter_from_hwnd(IDirect3D9 *d3d9, HWND hwnd, HMONITOR *mon_out)
Definition: vmr9.c:2435
static HRESULT WINAPI VMR9WindowlessControl_SetVideoPosition(IVMRWindowlessControl9 *iface, const RECT *src, const RECT *dst)
Definition: vmr9.c:1242
static ULONG WINAPI VMR9WindowlessControl_AddRef(IVMRWindowlessControl9 *iface)
Definition: vmr9.c:1192
static HRESULT vmr_get_current_image(struct video_window *iface, LONG *size, LONG *image)
Definition: vmr9.c:634
static ULONG WINAPI aspect_ratio_control9_AddRef(IVMRAspectRatioControl9 *iface)
Definition: vmr9.c:1884
static HRESULT WINAPI video_accelerator_GetCompBufferInfo(IAMVideoAccelerator *iface, const GUID *accelerator, const AMVAUncompDataInfo *uncompressed_info, DWORD *compressed_info_count, AMVACompBufferInfo *compressed_infos)
Definition: vmr9.c:1975
static ULONG WINAPI AMFilterMiscFlags_GetMiscFlags(IAMFilterMiscFlags *iface)
Definition: vmr9.c:834
static HRESULT WINAPI overlay_GetClipList(IOverlay *iface, RECT *source, RECT *dest, RGNDATA **region)
Definition: vmr9.c:2128
static void vmr_get_default_rect(struct video_window *iface, RECT *rect)
Definition: vmr9.c:626
static ULONG WINAPI VMR9MonitorConfig_AddRef(IVMRMonitorConfig9 *iface)
Definition: vmr9.c:927
static ULONG WINAPI video_accelerator_Release(IAMVideoAccelerator *iface)
Definition: vmr9.c:1946
static HRESULT WINAPI mixer_control9_SetAlpha(IVMRMixerControl9 *iface, DWORD stream, float alpha)
Definition: vmr9.c:1668
static ULONG WINAPI VMR9SurfaceAllocatorNotify_Release(IVMRSurfaceAllocatorNotify9 *iface)
Definition: vmr9.c:1427
static ULONG WINAPI AMFilterMiscFlags_AddRef(IAMFilterMiscFlags *iface)
Definition: vmr9.c:824
static HRESULT WINAPI video_accelerator_GetVideoAcceleratorGUIDs(IAMVideoAccelerator *iface, DWORD *count, GUID *accelerators)
Definition: vmr9.c:1952
static ULONG WINAPI overlay_Release(IOverlay *iface)
Definition: vmr9.c:2079
static HRESULT WINAPI overlay_GetPalette(IOverlay *iface, DWORD *count, PALETTEENTRY **palette)
Definition: vmr9.c:2085
static HRESULT WINAPI mixer_control9_GetOutputRect(IVMRMixerControl9 *iface, DWORD stream, VMR9NormalizedRect *rect)
Definition: vmr9.c:1714
static HRESULT WINAPI VMR9WindowlessControl_DisplayModeChanged(IVMRWindowlessControl9 *iface)
Definition: vmr9.c:1359
static IDirect3D9 * init_d3d9(HMODULE d3d9_handle)
Definition: vmr9.c:2580
static HRESULT WINAPI VMR9WindowlessControl_GetAspectRatioMode(IVMRWindowlessControl9 *iface, DWORD *mode)
Definition: vmr9.c:1276
static HRESULT WINAPI VMR9_ImagePresenter_PresentImage(IVMRImagePresenter9 *iface, DWORD_PTR cookie, VMR9PresentationInfo *info)
Definition: vmr9.c:2302
static struct default_presenter * impl_from_IVMRSurfaceAllocator9(IVMRSurfaceAllocator9 *iface)
Definition: vmr9.c:172
static HRESULT WINAPI VMR9WindowlessControl_SetBorderColor(IVMRWindowlessControl9 *iface, COLORREF color)
Definition: vmr9.c:1375
static HRESULT WINAPI aspect_ratio_control9_QueryInterface(IVMRAspectRatioControl9 *iface, REFIID iid, void **out)
Definition: vmr9.c:1878
const char * wine_dbg_sprintf(const char *format,...)
Definition: compat.c:296
#define GetProcAddress(x, y)
Definition: compat.h:753
#define FreeLibrary(x)
Definition: compat.h:748
#define CALLBACK
Definition: compat.h:35
#define lstrcpynW
Definition: compat.h:738
HINSTANCE WINAPI DECLSPEC_HOTPATCH LoadLibraryA(LPCSTR lpLibFileName)
Definition: loader.c:111
#define __stdcall
Definition: corecrt.h:120
#define MAKEFOURCC(ch0, ch1, ch2, ch3)
Definition: ddsformat.c:45
LONGLONG REFERENCE_TIME
Definition: dmusicks.h:9
#define L(x)
Definition: resources.c:13
r parent
Definition: btrfs.c:3010
#define D3DPTEXTURECAPS_SQUAREONLY
Definition: d3d8caps.h:116
#define D3DPTEXTURECAPS_POW2
Definition: d3d8caps.h:114
#define D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES
Definition: d3d9caps.h:205
DWORD IDirect3DSurface9
Definition: dxva2api.idl:23
DWORD IDirect3DDevice9
Definition: dxva2api.idl:22
#define abs(i)
Definition: fconv.c:206
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
GLint GLint GLsizei GLsizei GLsizei depth
Definition: gl.h:1546
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLint GLint GLsizei GLsizei height
Definition: gl.h:1546
GLclampf GLclampf GLclampf alpha
Definition: gl.h:1740
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLint GLint GLsizei width
Definition: gl.h:1546
GLenum GLuint texture
Definition: glext.h:6295
GLsizei stride
Definition: glext.h:5848
GLenum src
Definition: glext.h:6340
GLuint buffer
Definition: glext.h:5915
GLsizeiptr size
Definition: glext.h:5919
GLuint color
Definition: glext.h:6243
GLuint index
Definition: glext.h:6031
GLenum mode
Definition: glext.h:6217
GLenum GLenum dst
Definition: glext.h:6340
GLbitfield flags
Definition: glext.h:7161
GLsizei GLenum GLboolean sink
Definition: glext.h:5672
const GLuint * buffers
Definition: glext.h:5916
GLdouble GLdouble z
Definition: glext.h:5874
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
unsigned int UINT
Definition: sysinfo.c:13
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define FAILED(hr)
Definition: intsafe.h:51
#define debugstr_guid
Definition: kernel32.h:35
if(dx< 0)
Definition: linetemp.h:194
static HANDLE hmon
Definition: localmon.c:41
#define ZeroMemory
Definition: minwinbase.h:31
LONG_PTR LPARAM
Definition: minwindef.h:175
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
#define mmioFOURCC(c0, c1, c2, c3)
Definition: mmsystem.h:38
HDC hdc
Definition: main.c:9
static HDC
Definition: imagelist.c:88
D3D11_SHADER_VARIABLE_DESC desc
Definition: reflection.c:1683
static IHTMLWindow2 * window
Definition: events.c:77
static HANDLE PIO_APC_ROUTINE PVOID PIO_STATUS_BLOCK ULONG PVOID ULONG PVOID ULONG out_size
Definition: file.c:72
static HANDLE PIO_APC_ROUTINE PVOID PIO_STATUS_BLOCK ULONG PVOID ULONG in_size
Definition: file.c:72
static char * dest
Definition: rtl.c:149
static IUnknown * outer
Definition: compobj.c:82
static HPALETTE palette
Definition: clipboard.c:1457
static MONITORINFO mi
Definition: win.c:9400
#define min(a, b)
Definition: monoChain.cc:55
const GUID * subtype
Definition: mpegvideo.c:120
int notify
Definition: msacm.c:1366
__int3264 LONG_PTR
Definition: mstsclib_h.h:276
HMONITOR WINAPI MonitorFromWindow(HWND, DWORD)
long LONG
Definition: pedump.c:60
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
#define REFIID
Definition: guiddef.h:118
BOOL WINAPI IsWindow(_In_opt_ HWND)
#define SWP_NOACTIVATE
Definition: winuser.h:1253
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
BOOL WINAPI SetWindowPos(_In_ HWND, _In_opt_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ UINT)
LONG WINAPI GetWindowLongW(_In_ HWND, _In_ int)
#define SWP_NOMOVE
Definition: winuser.h:1255
BOOL WINAPI AdjustWindowRectEx(_Inout_ LPRECT, _In_ DWORD, _In_ BOOL, _In_ DWORD)
BOOL WINAPI EnumDisplayMonitors(_In_opt_ HDC, _In_opt_ LPCRECT, _In_ MONITORENUMPROC, _In_ LPARAM)
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
_In_ int _Inout_ LPRECT lprc
Definition: winuser.h:4620
#define SW_SHOW
Definition: winuser.h:786
BOOL WINAPI GetMonitorInfoW(_In_ HMONITOR, _Inout_ LPMONITORINFO)
#define SWP_NOZORDER
Definition: winuser.h:1258
#define GWL_STYLE
Definition: winuser.h:863
BOOL WINAPI SetRect(_Out_ LPRECT, _In_ int, _In_ int, _In_ int, _In_ int)
#define GWL_EXSTYLE
Definition: winuser.h:862
ULONG WINAPI BaseControlWindowImpl_AddRef(IVideoWindow *iface)
Definition: window.c:131
ULONG WINAPI BaseControlWindowImpl_Release(IVideoWindow *iface)
Definition: window.c:137
void video_window_init(struct video_window *window, const IVideoWindowVtbl *vtbl, struct strmbase_filter *filter, struct strmbase_pin *pin, const struct video_window_ops *ops)
Definition: window.c:1275
HRESULT WINAPI BaseControlWindowImpl_HideCursor(IVideoWindow *iface, LONG HideCursor)
Definition: window.c:686
HRESULT WINAPI BaseControlWindowImpl_put_Visible(IVideoWindow *iface, LONG Visible)
Definition: window.c:347
HRESULT WINAPI BaseControlWindowImpl_GetTypeInfo(IVideoWindow *iface, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
Definition: window.c:150
HRESULT WINAPI BaseControlWindowImpl_get_FullScreenMode(IVideoWindow *iface, LONG *FullScreenMode)
Definition: window.c:558
HRESULT WINAPI BaseControlWindowImpl_put_WindowState(IVideoWindow *iface, LONG WindowState)
Definition: window.c:299
HRESULT WINAPI BaseControlWindowImpl_get_Top(IVideoWindow *iface, LONG *pTop)
Definition: window.c:442
HRESULT WINAPI BaseControlWindowImpl_put_Height(IVideoWindow *iface, LONG Height)
Definition: window.c:454
HRESULT WINAPI BaseControlWindowImpl_get_Height(IVideoWindow *iface, LONG *pHeight)
Definition: window.c:469
HRESULT video_window_create_window(struct video_window *window)
Definition: window.c:98
HRESULT WINAPI BaseControlWindowImpl_get_Width(IVideoWindow *iface, LONG *pWidth)
Definition: window.c:415
HRESULT WINAPI BaseControlWindowImpl_put_AutoShow(IVideoWindow *iface, LONG AutoShow)
Definition: window.c:274
HRESULT WINAPI BaseControlWindowImpl_Invoke(IVideoWindow *iface, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExepInfo, UINT *puArgErr)
Definition: window.c:174
HRESULT WINAPI BaseControlWindowImpl_QueryInterface(IVideoWindow *iface, REFIID iid, void **out)
Definition: window.c:125
HRESULT WINAPI BaseControlWindowImpl_get_Caption(IVideoWindow *iface, BSTR *strCaption)
Definition: window.c:206
HRESULT WINAPI BaseControlWindowImpl_put_Top(IVideoWindow *iface, LONG Top)
Definition: window.c:427
HRESULT WINAPI BaseControlWindowImpl_put_Owner(IVideoWindow *iface, OAHWND Owner)
Definition: window.c:481
HRESULT WINAPI BaseControlWindowImpl_get_WindowStyle(IVideoWindow *iface, LONG *WindowStyle)
Definition: window.c:243
HRESULT WINAPI BaseControlWindowImpl_GetWindowPosition(IVideoWindow *iface, LONG *pLeft, LONG *pTop, LONG *pWidth, LONG *pHeight)
Definition: window.c:609
HRESULT WINAPI BaseControlWindowImpl_get_WindowState(IVideoWindow *iface, LONG *WindowState)
Definition: window.c:309
HRESULT WINAPI BaseControlWindowImpl_GetMinIdealImageSize(IVideoWindow *iface, LONG *pWidth, LONG *pHeight)
Definition: window.c:651
HRESULT WINAPI BaseControlWindowImpl_put_Width(IVideoWindow *iface, LONG Width)
Definition: window.c:400
HRESULT WINAPI BaseControlWindowImpl_get_Left(IVideoWindow *iface, LONG *pLeft)
Definition: window.c:388
HRESULT WINAPI BaseControlWindowImpl_GetIDsOfNames(IVideoWindow *iface, REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
Definition: window.c:157
HRESULT WINAPI BaseControlWindowImpl_GetMaxIdealImageSize(IVideoWindow *iface, LONG *pWidth, LONG *pHeight)
Definition: window.c:664
HRESULT WINAPI BaseControlWindowImpl_get_WindowStyleEx(IVideoWindow *iface, LONG *WindowStyleEx)
Definition: window.c:264
HRESULT WINAPI BaseControlWindowImpl_put_Left(IVideoWindow *iface, LONG Left)
Definition: window.c:373
HRESULT WINAPI BaseControlWindowImpl_SetWindowPosition(IVideoWindow *iface, LONG Left, LONG Top, LONG Width, LONG Height)
Definition: window.c:594
HRESULT WINAPI BaseControlWindowImpl_put_FullScreenMode(IVideoWindow *iface, LONG FullScreenMode)
Definition: window.c:565
HRESULT WINAPI BaseControlWindowImpl_put_BorderColor(IVideoWindow *iface, LONG Color)
Definition: window.c:549
HRESULT WINAPI BaseControlWindowImpl_get_Visible(IVideoWindow *iface, LONG *pVisible)
Definition: window.c:360
HRESULT WINAPI BaseControlWindowImpl_get_BackgroundPalette(IVideoWindow *iface, LONG *pBackgroundPalette)
Definition: window.c:338
HRESULT WINAPI BaseControlWindowImpl_get_MessageDrain(IVideoWindow *iface, OAHWND *Drain)
Definition: window.c:529
HRESULT WINAPI BaseControlWindowImpl_put_MessageDrain(IVideoWindow *iface, OAHWND Drain)
Definition: window.c:515
HRESULT WINAPI BaseControlWindowImpl_SetWindowForeground(IVideoWindow *iface, LONG Focus)
Definition: window.c:574
void video_window_cleanup(struct video_window *window)
Definition: window.c:1288
HRESULT WINAPI BaseControlWindowImpl_get_AutoShow(IVideoWindow *iface, LONG *AutoShow)
Definition: window.c:288
HRESULT WINAPI BaseControlWindowImpl_GetTypeInfoCount(IVideoWindow *iface, UINT *pctinfo)
Definition: window.c:143
HRESULT WINAPI BaseControlWindowImpl_put_WindowStyle(IVideoWindow *iface, LONG WindowStyle)
Definition: window.c:226
HRESULT WINAPI BaseControlWindowImpl_get_Owner(IVideoWindow *iface, OAHWND *Owner)
Definition: window.c:504
HRESULT WINAPI BaseControlWindowImpl_GetRestorePosition(IVideoWindow *iface, LONG *pLeft, LONG *pTop, LONG *pWidth, LONG *pHeight)
Definition: window.c:677
HRESULT WINAPI BaseControlWindowImpl_NotifyOwnerMessage(IVideoWindow *iface, OAHWND hwnd, LONG uMsg, LONG_PTR wParam, LONG_PTR lParam)
Definition: window.c:625
HRESULT WINAPI BaseControlWindowImpl_put_BackgroundPalette(IVideoWindow *iface, LONG BackgroundPalette)
Definition: window.c:329
HRESULT WINAPI BaseControlWindowImpl_IsCursorHidden(IVideoWindow *iface, LONG *CursorHidden)
Definition: window.c:695
HRESULT WINAPI BaseControlWindowImpl_get_BorderColor(IVideoWindow *iface, LONG *Color)
Definition: window.c:540
HRESULT WINAPI BaseControlWindowImpl_put_Caption(IVideoWindow *iface, BSTR strCaption)
Definition: window.c:191
HRESULT WINAPI BaseControlWindowImpl_put_WindowStyleEx(IVideoWindow *iface, LONG WindowStyleEx)
Definition: window.c:253
#define calloc
Definition: rosglue.h:14
#define D3D_SDK_VERSION
Definition: d3d8.h:52
#define D3DCREATE_MIXED_VERTEXPROCESSING
Definition: d3d8.h:42
#define memset(x, y, z)
Definition: compat.h:39
#define TRACE(s)
Definition: solgame.cpp:4
void strmbase_renderer_init(struct strmbase_renderer *filter, IUnknown *outer, const CLSID *clsid, const WCHAR *sink_name, const struct strmbase_renderer_ops *ops)
Definition: renderer.c:584
void strmbase_renderer_cleanup(struct strmbase_renderer *filter)
Definition: renderer.c:568
DWORD biCompression
Definition: amvideo.idl:35
DWORD biSizeImage
Definition: amvideo.idl:36
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
DWORD DevCaps2
Definition: d3d9caps.h:317
DWORD TextureCaps
Definition: d3d9caps.h:279
D3DSWAPEFFECT SwapEffect
Definition: d3d8types.h:1128
D3DFORMAT Format
Definition: vmr9.idl:99
Definition: match.c:390
Definition: uimain.c:89
Definition: ftp_var.h:139
Definition: inflate.c:139
Definition: cookie.c:34
DWORD num_surfaces
Definition: vmr9.c:159
struct quartz_vmr * pVMR9
Definition: vmr9.c:163
VMR9AllocationInfo info
Definition: vmr9.c:161
LONG refCount
Definition: vmr9.c:153
IDirect3D9 * d3d9_ptr
Definition: vmr9.c:156
IVMRSurfaceAllocator9 IVMRSurfaceAllocator9_iface
Definition: vmr9.c:151
IVMRSurfaceAllocatorNotify9 * SurfaceAllocatorNotify
Definition: vmr9.c:164
IDirect3DSurface9 ** d3d9_surfaces
Definition: vmr9.c:157
IDirect3DDevice9 * d3d9_dev
Definition: vmr9.c:155
IVMRImagePresenter9 IVMRImagePresenter9_iface
Definition: vmr9.c:150
HMONITOR hMon
Definition: vmr9.c:158
Definition: devices.h:37
Definition: filter.c:165
IBaseFilter * filter
Definition: filtergraph.c:75
VMRMONITORINFO * info7
Definition: vmr7.c:829
VMR9MonitorInfo * info9
Definition: vmr7.c:830
Definition: image.c:84
Definition: copy.c:22
IVMRImagePresenter9 IVMRImagePresenter9_iface
Definition: vmr9.c:2932
IVMRSurfaceAllocator9 * allocator
Definition: vmr9.c:81
IVMRImagePresenter9 * presenter
Definition: vmr9.c:82
IDirect3DDevice9 * allocator_d3d9_dev
Definition: vmr9.c:97
LONG IVMRSurfaceAllocatorNotify9_refcount
Definition: vmr9.c:76
struct strmbase_renderer renderer
Definition: vmr9.c:59
IAMCertifiedOutputProtection IAMCertifiedOutputProtection_iface
Definition: vmr9.c:62
IDirect3DSurface9 ** surfaces
Definition: vmr9.c:98
DWORD cur_surface
Definition: vmr9.c:100
IVMRMixerControl9 IVMRMixerControl9_iface
Definition: vmr9.c:67
IVMRAspectRatioControl9 IVMRAspectRatioControl9_iface
Definition: vmr9.c:64
IVMRWindowlessControl9 IVMRWindowlessControl9_iface
Definition: vmr9.c:70
struct video_window window
Definition: vmr9.c:60
VMR9Mode mode
Definition: vmr9.c:92
DWORD mixing_prefs
Definition: vmr9.c:85
IOverlay IOverlay_iface
Definition: vmr9.c:79
IAMVideoAccelerator IAMVideoAccelerator_iface
Definition: vmr9.c:78
IVMRFilterConfig9 IVMRFilterConfig9_iface
Definition: vmr9.c:65
HMODULE hD3d9
Definition: vmr9.c:94
DWORD stream_count
Definition: vmr9.c:84
IVMRSurfaceAllocatorNotify9 IVMRSurfaceAllocatorNotify9_iface
Definition: vmr9.c:69
IVMRMonitorConfig9 IVMRMonitorConfig9_iface
Definition: vmr9.c:68
VMR9AspectRatioMode aspect_mode
Definition: vmr9.c:105
HWND clipping_window
Definition: vmr9.c:103
DWORD num_surfaces
Definition: vmr9.c:99
DWORD_PTR cookie
Definition: vmr9.c:101
IAMFilterMiscFlags IAMFilterMiscFlags_iface
Definition: vmr9.c:63
IVMRMixerBitmap9 IVMRMixerBitmap9_iface
Definition: vmr9.c:66
Definition: wave.c:25
Definition: parse.h:23
struct strmbase_filter filter
Definition: strmbase.h:260
RECT rcMonitor
Definition: winuser.h:3893
DWORD dwFlags
Definition: winuser.h:3895
DWORD cbSize
Definition: winuser.h:3892
uint32_t DWORD_PTR
Definition: typedefs.h:65
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260
uint32_t ULONG
Definition: typedefs.h:59
#define BI_RGB
Definition: uefivid.c:46
#define VFW_E_VMR_NOT_IN_MIXER_MODE
Definition: vfwmsgs.h:155
#define VFW_E_TYPE_NOT_ACCEPTED
Definition: vfwmsgs.h:81
#define VFW_E_DDRAW_CAPS_NOT_SUITABLE
Definition: vfwmsgs.h:124
#define VFW_E_WRONG_STATE
Definition: vfwmsgs.h:78
#define VFW_E_NO_COPP_HW
Definition: vfwmsgs.h:160
@ VMR9Sample_TimeValid
Definition: vmr9.idl:52
@ VMR9Sample_Preroll
Definition: vmr9.idl:50
@ VMR9Sample_Discontinuity
Definition: vmr9.idl:51
@ VMR9Sample_SyncPoint
Definition: vmr9.idl:49
@ VMR9Sample_SrcDstRectsValid
Definition: vmr9.idl:53
enum _VMR9AspectRatioMode VMR9AspectRatioMode
@ VMR9AllocFlag_3DRenderTarget
Definition: vmr9.idl:85
@ VMR9AllocFlag_TextureSurface
Definition: vmr9.idl:87
@ VMR9AllocFlag_OffscreenSurface
Definition: vmr9.idl:88
@ MixerPref9_NoDecimation
Definition: vmr9.idl:182
@ MixerPref9_RenderTargetRGB
Definition: vmr9.idl:198
@ MixerPref9_BiLinearFiltering
Definition: vmr9.idl:189
@ MixerPref9_ARAdjustXorY
Definition: vmr9.idl:184
@ VMR9ARMode_LetterBox
Definition: vmr9.idl:152
@ VMR9Mode_Renderless
Definition: vmr9.idl:356
@ VMR9Mode_Windowless
Definition: vmr9.idl:355
@ VMR9Mode_Windowed
Definition: vmr9.idl:354
enum _VMR9Mode VMR9Mode
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
Definition: wcsftime.cpp:383
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
DWORD COLORREF
Definition: windef.h:100
#define WINAPI
Definition: msvc.h:6
#define S_FALSE
Definition: winerror.h:3451
#define E_NOINTERFACE
Definition: winerror.h:3479
#define E_POINTER
Definition: winerror.h:3480
size_t const buffer_count
Definition: xtoa.cpp:36
unsigned char BYTE
Definition: xxhash.c:193