ReactOS 0.4.17-dev-923-g4c9a150
vmr7.c
Go to the documentation of this file.
1/*
2 * Video Mixing Renderer for DirectDraw 7
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
44{
45 if (IsEqualGUID(&mt->formattype, &FORMAT_VideoInfo))
46 return &((VIDEOINFOHEADER *)mt->pbFormat)->bmiHeader;
47 else
48 return &((VIDEOINFOHEADER2 *)mt->pbFormat)->bmiHeader;
49}
50
51struct vmr7
52{
55
62
65
68
70
77
79
81};
82
84{
85 return get_bitmap_header(&filter->renderer.sink.pin.mt);
86}
87
88static struct vmr7 *impl_from_video_window(struct video_window *iface)
89{
90 return CONTAINING_RECORD(iface, struct vmr7, window);
91}
92
94{
96}
97
99{
100 return CONTAINING_RECORD(iface, struct vmr7, IAMFilterMiscFlags_iface);
101}
102
104{
105 return CONTAINING_RECORD(iface, struct vmr7, IVMRFilterConfig_iface);
106}
107
109{
110 return CONTAINING_RECORD(iface, struct vmr7, IVMRMonitorConfig_iface);
111}
112
114{
116}
117
119{
121}
122
124{
125 return CONTAINING_RECORD(iface, struct vmr7, renderer.filter.IBaseFilter_iface);
126}
127
128static void copy_plane(BYTE **dstp, unsigned int dst_pitch, unsigned int dst_height,
129 const BYTE **srcp, unsigned int src_pitch, int src_height)
130{
131 size_t copy_size = min(src_pitch, dst_pitch);
132 const BYTE *src = *srcp;
133 BYTE *dst = *dstp;
134 unsigned int i;
135
136 if (src_height < 0)
137 {
138 TRACE("Inverting image.\n");
139
140 src_height = -src_height;
141 src += src_height * src_pitch;
142
143 for (i = 0; i < src_height; ++i)
144 {
145 src -= src_pitch;
146 memcpy(dst, src, copy_size);
147 dst += dst_pitch;
148 }
149 }
150 else
151 {
152 for (i = 0; i < src_height; ++i)
153 {
154 memcpy(dst, src, copy_size);
155 dst += dst_pitch;
156 src += src_pitch;
157 }
158 }
159
160 *srcp += src_pitch * src_height;
161 *dstp += dst_pitch * dst_height;
162}
163
165{
166 struct vmr7 *filter = impl_from_IBaseFilter(&iface->filter.IBaseFilter_iface);
167 unsigned int data_size, width, depth, src_pitch;
168 const BITMAPINFOHEADER *bitmap_header;
169 REFERENCE_TIME start_time, end_time;
171 DDSURFACEDESC2 surface_desc;
172 BYTE *data = NULL;
173 HRESULT hr;
174 int height;
175
176 TRACE("filter %p, sample %p.\n", filter, sample);
177
178 if (!filter->allocator || !filter->presenter)
179 {
180 ERR("No presenter.\n");
181 return S_FALSE;
182 }
183
185
186 if (SUCCEEDED(hr = IMediaSample_GetTime(sample, &start_time, &end_time)))
187 info.dwFlags |= VMR9Sample_TimeValid;
188
189 if (IMediaSample_IsDiscontinuity(sample) == S_OK)
191
192 if (IMediaSample_IsPreroll(sample) == S_OK)
193 info.dwFlags |= VMR9Sample_Preroll;
194
195 if (IMediaSample_IsSyncPoint(sample) == S_OK)
196 info.dwFlags |= VMR9Sample_SyncPoint;
197
198 if (FAILED(hr = IMediaSample_GetPointer(sample, &data)))
199 {
200 ERR("Failed to get pointer to sample data, hr %#lx.\n", hr);
201 return hr;
202 }
203 data_size = IMediaSample_GetActualDataLength(sample);
204 TRACE("Sample size %u.\n", data_size);
205
206 bitmap_header = get_filter_bitmap_header(filter);
207 width = bitmap_header->biWidth;
208 height = bitmap_header->biHeight;
209 depth = bitmap_header->biBitCount;
210 if (bitmap_header->biCompression == mmioFOURCC('N','V','1','2')
211 || bitmap_header->biCompression == mmioFOURCC('Y','V','1','2'))
212 src_pitch = (width + 3) & ~3;
213 else /* packed YUV (UYVY or YUY2) or RGB */
214 src_pitch = ((width * depth / 8) + 3) & ~3;
215
216 info.dwFlags = VMRSample_TimeValid;
217 info.rtStart = start_time;
218 info.rtEnd = end_time;
219 info.szAspectRatio.cx = width;
220 info.szAspectRatio.cy = height;
221 info.lpSurf = filter->surfaces[(--filter->surface_index) % filter->surface_count];
222
223 hr = IVMRSurfaceAllocator_PrepareSurface(filter->allocator, filter->cookie, info.lpSurf, 0);
224 if (hr != S_OK)
225 ERR("PrepareSurface() returned %#lx.\n", hr);
226
227 surface_desc.dwSize = sizeof(surface_desc);
228 if (FAILED(hr = IDirectDrawSurface7_Lock(info.lpSurf, NULL,
229 &surface_desc, DDLOCK_DISCARDCONTENTS | DDLOCK_WAIT, NULL)))
230 {
231 ERR("Failed to lock surface, hr %#lx.\n", hr);
232 return hr;
233 }
234
235 if (width > surface_desc.dwWidth || abs(height) > surface_desc.dwHeight)
236 {
237 FIXME("src surface (%ux%u) larger than rendering surface (%lux%lu).\n", width, height,
238 surface_desc.dwWidth, surface_desc.dwHeight);
239 }
240
241 if (bitmap_header->biCompression == mmioFOURCC('N','V','1','2'))
242 {
243 BYTE *dst = surface_desc.lpSurface;
244 const BYTE *src = data;
245
246 copy_plane(&dst, surface_desc.lPitch, surface_desc.dwHeight, &src, src_pitch, height);
247 copy_plane(&dst, surface_desc.lPitch, surface_desc.dwHeight / 2, &src, src_pitch, height / 2);
248 }
249 else if (bitmap_header->biCompression == mmioFOURCC('Y','V','1','2'))
250 {
251 BYTE *dst = surface_desc.lpSurface;
252 const BYTE *src = data;
253
254 copy_plane(&dst, surface_desc.lPitch, surface_desc.dwHeight, &src, src_pitch, height);
255 copy_plane(&dst, surface_desc.lPitch / 2, surface_desc.dwHeight / 2, &src, src_pitch / 2, height / 2);
256 copy_plane(&dst, surface_desc.lPitch / 2, surface_desc.dwHeight / 2, &src, src_pitch / 2, height / 2);
257 }
258 else if (height > 0 && bitmap_header->biCompression == BI_RGB)
259 {
260 BYTE *dst = surface_desc.lpSurface;
261 const BYTE *src = data;
262
263 copy_plane(&dst, surface_desc.lPitch, surface_desc.dwHeight, &src, src_pitch, -height);
264 }
265 else if (surface_desc.lPitch != src_pitch)
266 {
267 BYTE *dst = surface_desc.lpSurface;
268 const BYTE *src = data;
269
270 TRACE("Source pitch %u does not match dest pitch %lu; copying manually.\n",
271 src_pitch, surface_desc.lPitch);
272
273 height = abs(height);
274 copy_plane(&dst, surface_desc.lPitch, surface_desc.dwHeight, &src, src_pitch, height);
275 }
276 else
277 {
278 memcpy(surface_desc.lpSurface, data, data_size);
279 }
280
281 IDirectDrawSurface7_Unlock(info.lpSurf, NULL);
282
283 return IVMRImagePresenter_PresentImage(filter->presenter, filter->cookie, &info);
284}
285
287{
288 if (!IsEqualIID(&mt->majortype, &MEDIATYPE_Video) || !mt->pbFormat)
289 return S_FALSE;
290
291 if (!IsEqualGUID(&mt->formattype, &FORMAT_VideoInfo)
292 && !IsEqualGUID(&mt->formattype, &FORMAT_VideoInfo2))
293 return S_FALSE;
294
295 return S_OK;
296}
297
299{
300 IDirectDrawSurface7 *frontbuffer, *prev;
302 HRESULT hr;
303
304 if (FAILED(hr = IVMRSurfaceAllocator_AllocateSurface(filter->allocator,
305 filter->cookie, info, &count, &frontbuffer)))
306 {
307 WARN("Failed to allocate surface, hr %#lx.\n", hr);
308 return hr;
309 }
310
311 if (filter->mode != VMRMode_Renderless)
312 {
313 IVMRSurfaceAllocator_QueryInterface(filter->allocator, &IID_IVMRWindowlessControl, (void **)&control);
314 IVMRWindowlessControl_SetVideoClippingWindow(control,
315 filter->mode == VMRMode_Windowed ? filter->window.hwnd : filter->clipping_window);
316 IVMRWindowlessControl_Release(control);
317 }
318
319 if (!(filter->surfaces = calloc(count, sizeof(IDirectDrawSurface7 *))))
320 return E_OUTOFMEMORY;
321 filter->surface_count = count;
322 filter->surface_index = 0;
323
324 prev = frontbuffer;
325 for (DWORD i = 0; i < count; ++i)
326 {
327 DDSCAPS2 caps = {.dwCaps = DDSCAPS_FLIP};
328
329 if (FAILED(hr = IDirectDrawSurface7_GetAttachedSurface(prev, &caps, &filter->surfaces[i])))
330 {
331 ERR("Failed to get surface %lu, hr %#lx.\n", i, hr);
332 while (i--)
333 IDirectDrawSurface7_Release(filter->surfaces[i]);
334 IVMRSurfaceAllocator_FreeSurface(filter->allocator, filter->cookie);
335 return hr;
336 }
337 }
338
339 return hr;
340}
341
343{
344 BITMAPINFOHEADER bitmap_header = *get_bitmap_header(mt);
346 HRESULT hr = E_FAIL;
347 DWORD count = 1;
348
349 TRACE("Initializing in mode %u, our window %p, clipping window %p.\n",
350 filter->mode, filter->window.hwnd, filter->clipping_window);
351
352 if (filter->mode == VMRMode_Windowless && !filter->clipping_window)
353 return S_OK;
354
356 info.lpHdr = &bitmap_header;
357 info.dwMinBuffers = info.dwMaxBuffers = count;
358 info.szAspectRatio.cx = info.szNativeSize.cx = bitmap_header.biWidth;
359 info.szAspectRatio.cy = info.szNativeSize.cy = bitmap_header.biHeight;
360
362 free(filter->surfaces);
363 return hr;
364}
365
366static void vmr_init_stream(struct strmbase_renderer *iface)
367{
368 struct vmr7 *filter = impl_from_IBaseFilter(&iface->filter.IBaseFilter_iface);
369
370 if (filter->window.hwnd && filter->window.AutoShow)
371 ShowWindow(filter->window.hwnd, SW_SHOW);
372}
373
374static void vmr_start_stream(struct strmbase_renderer *iface)
375{
376 struct vmr7 *filter = impl_from_IBaseFilter(&iface->filter.IBaseFilter_iface);
377
378 IVMRImagePresenter_StartPresenting(filter->presenter, filter->cookie);
379}
380
381static void vmr_stop_stream(struct strmbase_renderer *iface)
382{
383 struct vmr7 *filter = impl_from_IBaseFilter(&iface->filter.IBaseFilter_iface);
384
385 if (filter->renderer.filter.state == State_Running)
386 IVMRImagePresenter_StopPresenting(filter->presenter, filter->cookie);
387}
388
389static HRESULT vmr_connect(struct strmbase_renderer *iface, const AM_MEDIA_TYPE *mt)
390{
391 struct vmr7 *filter = impl_from_IBaseFilter(&iface->filter.IBaseFilter_iface);
392 const BITMAPINFOHEADER *bitmap_header = get_bitmap_header(mt);
393 HWND window = filter->window.hwnd;
394 HRESULT hr;
395 RECT rect;
396
397 SetRect(&rect, 0, 0, bitmap_header->biWidth, bitmap_header->biHeight);
398 filter->window.src = rect;
399
404 GetClientRect(window, &filter->window.dst);
405
406 if (filter->mode
407 || SUCCEEDED(hr = IVMRFilterConfig_SetRenderingMode(&filter->IVMRFilterConfig_iface, VMRMode_Windowed)))
409
410 return hr;
411}
412
413static void deallocate_surfaces(struct vmr7 *filter)
414{
415 if (filter->mode && filter->allocator && filter->presenter)
416 {
417 for (DWORD i = 0; i < filter->surface_count; ++i)
418 IDirectDrawSurface7_Release(filter->surfaces[i]);
419 free(filter->surfaces);
420
421 IVMRSurfaceAllocator_FreeSurface(filter->allocator, filter->cookie);
422 filter->surface_count = 0;
423 }
424}
425
426static void vmr_disconnect(struct strmbase_renderer *iface)
427{
428 struct vmr7 *filter = impl_from_IBaseFilter(&iface->filter.IBaseFilter_iface);
429
431}
432
433static void vmr_destroy(struct strmbase_renderer *iface)
434{
435 struct vmr7 *filter = impl_from_IBaseFilter(&iface->filter.IBaseFilter_iface);
436
438
439 if (filter->allocator)
440 {
441 if (filter->surface_count)
442 IVMRSurfaceAllocator_FreeSurface(filter->allocator, filter->cookie);
443 IVMRSurfaceAllocator_Release(filter->allocator);
444 }
445 if (filter->presenter)
446 IVMRImagePresenter_Release(filter->presenter);
447
448 filter->surface_count = 0;
449
451 free(filter);
452}
453
454static HRESULT vmr_query_interface(struct strmbase_renderer *iface, REFIID iid, void **out)
455{
456 struct vmr7 *filter = impl_from_IBaseFilter(&iface->filter.IBaseFilter_iface);
457
458 if (IsEqualGUID(iid, &IID_IVideoWindow))
459 *out = &filter->window.IVideoWindow_iface;
460 else if (IsEqualGUID(iid, &IID_IBasicVideo))
461 *out = &filter->window.IBasicVideo_iface;
462 else if (IsEqualGUID(iid, &IID_IAMCertifiedOutputProtection))
463 *out = &filter->IAMCertifiedOutputProtection_iface;
464 else if (IsEqualGUID(iid, &IID_IAMFilterMiscFlags))
465 *out = &filter->IAMFilterMiscFlags_iface;
466 else if (IsEqualGUID(iid, &IID_IVMRFilterConfig))
467 *out = &filter->IVMRFilterConfig_iface;
468 else if (IsEqualGUID(iid, &IID_IVMRMonitorConfig))
469 *out = &filter->IVMRMonitorConfig_iface;
470 else if (IsEqualGUID(iid, &IID_IVMRSurfaceAllocatorNotify) && filter->mode == VMRMode_Renderless)
471 *out = &filter->IVMRSurfaceAllocatorNotify_iface;
472 else if (IsEqualGUID(iid, &IID_IVMRWindowlessControl) && filter->mode == VMRMode_Windowless)
473 *out = &filter->IVMRWindowlessControl_iface;
474 else
475 return E_NOINTERFACE;
476
477 IUnknown_AddRef((IUnknown *)*out);
478 return S_OK;
479}
480
482{
483 struct vmr7 *filter = impl_from_IBaseFilter(&iface->filter.IBaseFilter_iface);
484
485 if (IsEqualGUID(iid, &IID_IAMVideoAccelerator))
486 *out = &filter->IAMVideoAccelerator_iface;
487 else if (IsEqualGUID(iid, &IID_IOverlay))
488 *out = &filter->IOverlay_iface;
489 else
490 return E_NOINTERFACE;
491
492 IUnknown_AddRef((IUnknown *)*out);
493 return S_OK;
494}
495
497{
498 .renderer_query_accept = vmr_query_accept,
499 .renderer_render = vmr_render,
500 .renderer_init_stream = vmr_init_stream,
501 .renderer_start_stream = vmr_start_stream,
502 .renderer_stop_stream = vmr_stop_stream,
503 .renderer_connect = vmr_connect,
504 .renderer_disconnect = vmr_disconnect,
505 .renderer_destroy = vmr_destroy,
506 .renderer_query_interface = vmr_query_interface,
507 .renderer_pin_query_interface = vmr_pin_query_interface,
508};
509
510static void vmr_get_default_rect(struct video_window *iface, RECT *rect)
511{
512 struct vmr7 *filter = impl_from_video_window(iface);
513 const BITMAPINFOHEADER *bitmap_header = get_filter_bitmap_header(filter);
514
515 SetRect(rect, 0, 0, bitmap_header->biWidth, bitmap_header->biHeight);
516}
517
519{
520 FIXME("stub!\n");
521 return E_NOTIMPL;
522}
523
524static const struct video_window_ops window_ops =
525{
526 .get_default_rect = vmr_get_default_rect,
527 .get_current_image = vmr_get_current_image,
528};
529
530static const IVideoWindowVtbl IVideoWindow_VTable =
531{
578};
579
581 IAMCertifiedOutputProtection *iface, REFIID iid, void **out)
582{
584
585 return IUnknown_QueryInterface(filter->renderer.filter.outer_unk, iid, out);
586}
587
589{
591
592 return IUnknown_AddRef(filter->renderer.filter.outer_unk);
593}
594
596{
598
599 return IUnknown_Release(filter->renderer.filter.outer_unk);
600}
601
603 IAMCertifiedOutputProtection *iface, GUID *random, BYTE **certificate, DWORD *size)
604{
605 FIXME("iface %p, random %p, certificate %p, size %p, stub!\n", iface, random, certificate, size);
606 return VFW_E_NO_COPP_HW;
607}
608
611{
612 FIXME("iface %p, signature %p, stub!\n", iface, signature);
613 return VFW_E_NO_COPP_HW;
614}
615
618{
619 FIXME("iface %p, cmd %p, stub!\n", iface, cmd);
620 return VFW_E_NO_COPP_HW;
621}
622
625{
626 FIXME("iface %p, input %p, output %p, stub!\n", iface, input, output);
627 return VFW_E_NO_COPP_HW;
628}
629
630static const IAMCertifiedOutputProtectionVtbl certified_output_protection_vtbl =
631{
639};
640
642{
644
645 return IUnknown_QueryInterface(filter->renderer.filter.outer_unk, iid, out);
646}
647
649{
651
652 return IUnknown_AddRef(filter->renderer.filter.outer_unk);
653}
654
656{
658
659 return IUnknown_Release(filter->renderer.filter.outer_unk);
660}
661
663{
665}
666
667static const IAMFilterMiscFlagsVtbl misc_flags_vtbl =
668{
673};
674
676{
677 struct vmr7 *filter = impl_from_IVMRFilterConfig(iface);
678
679 return IUnknown_QueryInterface(filter->renderer.filter.outer_unk, iid, out);
680}
681
683{
684 struct vmr7 *filter = impl_from_IVMRFilterConfig(iface);
685
686 return IUnknown_AddRef(filter->renderer.filter.outer_unk);
687}
688
690{
691 struct vmr7 *filter = impl_from_IVMRFilterConfig(iface);
692
693 return IUnknown_Release(filter->renderer.filter.outer_unk);
694}
695
697 IVMRFilterConfig *iface, IVMRImageCompositor *compositor)
698{
699 FIXME("iface %p, compositor %p, stub!\n", iface, compositor);
700 return E_NOTIMPL;
701}
702
704{
705 struct vmr7 *filter = impl_from_IVMRFilterConfig(iface);
706
707 FIXME("iface %p, count %lu, stub!\n", iface, count);
708
709 if (!count)
710 {
711 WARN("Application requested zero streams; returning E_INVALIDARG.\n");
712 return E_INVALIDARG;
713 }
714
715 EnterCriticalSection(&filter->renderer.filter.filter_cs);
716
717 if (filter->stream_count)
718 {
719 LeaveCriticalSection(&filter->renderer.filter.filter_cs);
720 WARN("Stream count is already set; returning VFW_E_WRONG_STATE.\n");
721 return VFW_E_WRONG_STATE;
722 }
723
724 filter->stream_count = count;
725
726 LeaveCriticalSection(&filter->renderer.filter.filter_cs);
727 return S_OK;
728}
729
731{
732 FIXME("iface %p, count %p, stub!\n", iface, count);
733 return E_NOTIMPL;
734}
735
737{
738 FIXME("iface %p, flags %#lx, stub!\n", iface, flags);
739 return E_NOTIMPL;
740}
741
743{
744 FIXME("iface %p, flags %p, stub!\n", iface, flags);
745 return E_NOTIMPL;
746}
747
749{
750 struct vmr7 *filter = impl_from_IVMRFilterConfig(iface);
752 HRESULT hr = S_OK;
753
754 TRACE("filter %p, mode %lu.\n", filter, mode);
755
756 EnterCriticalSection(&filter->renderer.filter.filter_cs);
757
758 if (filter->mode)
759 {
760 LeaveCriticalSection(&filter->renderer.filter.filter_cs);
761 return VFW_E_WRONG_STATE;
762 }
763
764 switch (mode)
765 {
766 case VMRMode_Windowed:
769 {
770 ERR("Failed to create default presenter, hr %#lx.\n", hr);
771 LeaveCriticalSection(&filter->renderer.filter.filter_cs);
772 return hr;
773 }
774 IUnknown_QueryInterface(default_presenter, &IID_IVMRSurfaceAllocator, (void **)&filter->allocator);
775 IUnknown_QueryInterface(default_presenter, &IID_IVMRImagePresenter, (void **)&filter->presenter);
776 IUnknown_Release(default_presenter);
777 break;
778
780 break;
781
782 default:
783 LeaveCriticalSection(&filter->renderer.filter.filter_cs);
784 return E_INVALIDARG;
785 }
786
787 if (mode != VMRMode_Windowed)
789
790 filter->mode = mode;
791
792 LeaveCriticalSection(&filter->renderer.filter.filter_cs);
793 return hr;
794}
795
797{
798 struct vmr7 *filter = impl_from_IVMRFilterConfig(iface);
799
800 TRACE("filter %p, mode %p.\n", filter, mode);
801
802 if (!mode)
803 return E_POINTER;
804
805 if (filter->mode)
806 *mode = filter->mode;
807 else
809
810 return S_OK;
811}
812
813static const IVMRFilterConfigVtbl filter_config_vtbl =
814{
825};
826
828{
833};
834
836{
839
840 if (args->info7 || args->info9)
841 {
842
843 if (!args->capacity)
844 return FALSE;
845
846 mi.cbSize = sizeof(mi);
847 if (!GetMonitorInfoW(monitor, (MONITORINFO*)&mi))
848 return TRUE;
849
850 /* fill VMRMONITORINFO struct */
851 if (args->info7)
852 {
853 VMRMONITORINFO *info = args->info7++;
854 memset(info, 0, sizeof(*info));
855
856 if (args->count > 0)
857 {
858 info->guid.pGUID = &info->guid.GUID;
859 info->guid.GUID.Data4[7] = args->count;
860 }
861 else
862 info->guid.pGUID = NULL;
863
864 info->rcMonitor = mi.rcMonitor;
865 info->hMon = monitor;
866 info->dwFlags = mi.dwFlags;
867
868 lstrcpynW(info->szDevice, mi.szDevice, ARRAY_SIZE(info->szDevice));
869
870 /* FIXME: how to get these values? */
871 info->szDescription[0] = 0;
872 }
873
874 /* fill VMR9MonitorInfo struct */
875 if (args->info9)
876 {
877 VMR9MonitorInfo *info = args->info9++;
878 memset(info, 0, sizeof(*info));
879
880 info->uDevID = 0; /* FIXME */
881 info->rcMonitor = mi.rcMonitor;
882 info->hMon = monitor;
883 info->dwFlags = mi.dwFlags;
884
885 lstrcpynW(info->szDevice, mi.szDevice, ARRAY_SIZE(info->szDevice));
886
887 /* FIXME: how to get these values? */
888 info->szDescription[0] = 0;
889 info->dwVendorId = 0;
890 info->dwDeviceId = 0;
891 info->dwSubSysId = 0;
892 info->dwRevision = 0;
893 }
894
895 args->capacity--;
896 }
897
898 args->count++;
899 return TRUE;
900}
901
903{
904 struct vmr7 *filter = impl_from_IVMRMonitorConfig(iface);
905
906 return IUnknown_QueryInterface(filter->renderer.filter.outer_unk, iid, out);
907}
908
910{
911 struct vmr7 *filter = impl_from_IVMRMonitorConfig(iface);
912
913 return IUnknown_AddRef(filter->renderer.filter.outer_unk);
914}
915
917{
918 struct vmr7 *filter = impl_from_IVMRMonitorConfig(iface);
919
920 return IUnknown_Release(filter->renderer.filter.outer_unk);
921}
922
924{
925 FIXME("iface %p, guid %p, stub!\n", iface, guid);
926
927 if (!guid)
928 return E_POINTER;
929
930 return S_OK;
931}
932
934{
935 FIXME("iface %p, guid %p, stub!\n", iface, guid);
936
937 if (!guid)
938 return E_POINTER;
939
940 guid->pGUID = NULL; /* default DirectDraw device */
941 return S_OK;
942}
943
945{
946 FIXME("iface %p, guid %p, stub!\n", iface, guid);
947
948 if (!guid)
949 return E_POINTER;
950
951 return S_OK;
952}
953
955{
956 FIXME("iface %p, guid %p, stub!\n", iface, guid);
957
958 if (!guid)
959 return E_POINTER;
960
961 guid->pGUID = NULL; /* default DirectDraw device */
962 return S_OK;
963}
964
966 VMRMONITORINFO *info, DWORD capacity, DWORD *count)
967{
968 struct vmr7 *filter = impl_from_IVMRMonitorConfig(iface);
970
971 TRACE("filter %p, info %p, capacity %lu, count %p.\n", filter, info, capacity, count);
972
973 if (!count)
974 return E_POINTER;
975
976 if (info && !capacity)
977 return E_INVALIDARG;
978
979 args.info7 = info;
980 args.info9 = NULL;
981 args.capacity = capacity;
982 args.count = 0;
984
985 *count = args.count;
986 return S_OK;
987}
988
989static const IVMRMonitorConfigVtbl monitor_config_vtbl =
990{
999};
1000
1002{
1004
1005 return IUnknown_QueryInterface(filter->renderer.filter.outer_unk, iid, out);
1006}
1007
1009{
1011
1012 return IUnknown_AddRef(filter->renderer.filter.outer_unk);
1013}
1014
1016{
1018
1019 return IUnknown_Release(filter->renderer.filter.outer_unk);
1020}
1021
1023 LONG *width, LONG *height, LONG *aspect_width, LONG *aspect_height)
1024{
1026 const BITMAPINFOHEADER *bitmap_header = get_filter_bitmap_header(filter);
1027
1028 TRACE("filter %p, width %p, height %p, aspect_width %p, aspect_height %p.\n",
1029 filter, width, height, aspect_width, aspect_height);
1030
1031 if (!width || !height)
1032 return E_POINTER;
1033
1034 *width = bitmap_header->biWidth;
1035 *height = bitmap_header->biHeight;
1036 if (aspect_width)
1037 *aspect_width = bitmap_header->biWidth;
1038 if (aspect_height)
1039 *aspect_height = bitmap_header->biHeight;
1040
1041 return S_OK;
1042}
1043
1046{
1047 FIXME("iface %p, width %p, height %p, stub!\n", iface, width, height);
1048 return E_NOTIMPL;
1049}
1050
1053{
1054 FIXME("iface %p, width %p, height %p, stub!\n", iface, width, height);
1055 return E_NOTIMPL;
1056}
1057
1059 IVMRWindowlessControl *iface, const RECT *source, const RECT *dest)
1060{
1062
1063 TRACE("filter %p, source %s, dest %s.\n", filter, wine_dbgstr_rect(source), wine_dbgstr_rect(dest));
1064
1065 EnterCriticalSection(&filter->renderer.filter.filter_cs);
1066
1067 if (source)
1068 filter->window.src = *source;
1069 if (dest)
1070 filter->window.dst = *dest;
1071
1072 LeaveCriticalSection(&filter->renderer.filter.filter_cs);
1073
1074 return S_OK;
1075}
1076
1079{
1081
1082 TRACE("filter %p, source %p, dest %p.\n", filter, source, dest);
1083
1084 if (source)
1085 *source = filter->window.src;
1086
1087 if (dest)
1088 *dest = filter->window.dst;
1089
1090 return S_OK;
1091}
1092
1094{
1095 FIXME("iface %p, mode %p, stub!\n", iface, mode);
1096 return E_NOTIMPL;
1097}
1098
1100{
1101 FIXME("iface %p, mode %#lx, stub!\n", iface, mode);
1102 return E_NOTIMPL;
1103}
1104
1106{
1108 HRESULT hr;
1109
1110 TRACE("filter %p, window %p.\n", filter, window);
1111
1112 if (!IsWindow(window))
1113 {
1114 WARN("Invalid window %p, returning E_INVALIDARG.\n", window);
1115 return E_INVALIDARG;
1116 }
1117
1118 EnterCriticalSection(&filter->renderer.filter.filter_cs);
1119
1120 if (filter->renderer.sink.pin.peer)
1121 {
1122 LeaveCriticalSection(&filter->renderer.filter.filter_cs);
1123 WARN("Attempt to set the clipping window while connected; returning VFW_E_WRONG_STATE.\n");
1124 return VFW_E_WRONG_STATE;
1125 }
1126
1127 filter->clipping_window = window;
1128
1129 hr = IVMRFilterConfig_SetNumberOfStreams(&filter->IVMRFilterConfig_iface, 4);
1130
1131 LeaveCriticalSection(&filter->renderer.filter.filter_cs);
1132 return hr;
1133}
1134
1137{
1138 FIXME("iface %p, window %p, dc %p, stub!\n", iface, window, dc);
1139 return E_NOTIMPL;
1140}
1141
1143{
1144 FIXME("iface %p, stub!\n", iface);
1145 return E_NOTIMPL;
1146}
1147
1149{
1150 FIXME("iface %p, image %p, stub!\n", iface, image);
1151 return E_NOTIMPL;
1152}
1153
1155{
1156 FIXME("iface %p, color %#08lx, stub!\n", iface, color);
1157 return E_NOTIMPL;
1158}
1159
1161{
1162 FIXME("iface %p, color %p, stub!\n", iface, color);
1163 return E_NOTIMPL;
1164}
1165
1167{
1168 FIXME("iface %p, color %#08lx, stub!\n", iface, color);
1169 return E_NOTIMPL;
1170}
1171
1173{
1174 FIXME("iface %p, color %p, stub!\n", iface, color);
1175 return E_NOTIMPL;
1176}
1177
1178static const IVMRWindowlessControlVtbl windowless_control_vtbl =
1179{
1198};
1199
1201 IVMRSurfaceAllocatorNotify *iface, REFIID iid, void **out)
1202{
1204
1205 return IUnknown_QueryInterface(filter->renderer.filter.outer_unk, iid, out);
1206}
1207
1209{
1211
1212 return IUnknown_AddRef(filter->renderer.filter.outer_unk);
1213}
1214
1216{
1218
1219 return IUnknown_Release(filter->renderer.filter.outer_unk);
1220}
1221
1224{
1227
1228 TRACE("filter %p, cookie %#Ix, allocator %p.\n", filter, cookie, allocator);
1229
1230 EnterCriticalSection(&filter->renderer.filter.filter_cs);
1231
1232 filter->cookie = cookie;
1233
1234 if (filter->renderer.sink.pin.peer)
1235 {
1236 LeaveCriticalSection(&filter->renderer.filter.filter_cs);
1237 WARN("Attempt to set allocator while connected; returning VFW_E_WRONG_STATE.\n");
1238 return VFW_E_WRONG_STATE;
1239 }
1240
1241 if (FAILED(IVMRSurfaceAllocator_QueryInterface(allocator, &IID_IVMRImagePresenter, (void **)&presenter)))
1242 {
1243 LeaveCriticalSection(&filter->renderer.filter.filter_cs);
1244 return E_NOINTERFACE;
1245 }
1246
1247 if (filter->allocator)
1248 {
1249 IVMRImagePresenter_Release(filter->presenter);
1250 IVMRSurfaceAllocator_Release(filter->allocator);
1251 }
1252 filter->allocator = allocator;
1253 filter->presenter = presenter;
1254 IVMRSurfaceAllocator_AddRef(allocator);
1255
1256 LeaveCriticalSection(&filter->renderer.filter.filter_cs);
1257 return S_OK;
1258}
1259
1262{
1263 FIXME("iface %p, device %p, monitor %p, stub!\n", iface, device, monitor);
1264 return E_NOTIMPL;
1265}
1266
1269{
1270 FIXME("iface %p, device %p, monitor %p, stub!\n", iface, device, monitor);
1271 return E_NOTIMPL;
1272}
1273
1275{
1276 FIXME("iface %p, stub!\n", iface);
1277 return E_NOTIMPL;
1278}
1279
1281 IVMRSurfaceAllocatorNotify *iface, LONG code, LONG_PTR param1, LONG_PTR param2)
1282{
1283 FIXME("iface %p, code %#lx, param1 %#Ix, param2 %#Ix, stub!\n", iface, code, param1, param2);
1284 return E_NOTIMPL;
1285}
1286
1289{
1290 FIXME("iface %p, color %#08lx, stub!\n", iface, color);
1291 return E_NOTIMPL;
1292}
1293
1294static const IVMRSurfaceAllocatorNotifyVtbl surface_allocator_notify_vtbl =
1295{
1305};
1306
1308{
1309 return CONTAINING_RECORD(iface, struct vmr7, IAMVideoAccelerator_iface);
1310}
1311
1313{
1314 struct vmr7 *filter = impl_from_IAMVideoAccelerator(iface);
1315
1316 return IPin_QueryInterface(&filter->renderer.sink.pin.IPin_iface, iid, out);
1317}
1318
1320{
1321 struct vmr7 *filter = impl_from_IAMVideoAccelerator(iface);
1322
1323 return IPin_AddRef(&filter->renderer.sink.pin.IPin_iface);
1324}
1325
1327{
1328 struct vmr7 *filter = impl_from_IAMVideoAccelerator(iface);
1329
1330 return IPin_Release(&filter->renderer.sink.pin.IPin_iface);
1331}
1332
1334 IAMVideoAccelerator *iface, DWORD *count, GUID *accelerators)
1335{
1336 FIXME("iface %p, count %p, accelerators %p, stub!\n", iface, count, accelerators);
1337 return E_NOTIMPL;
1338}
1339
1341 const GUID *accelerator, DWORD *count, DDPIXELFORMAT *formats)
1342{
1343 FIXME("iface %p, accelerator %s, count %p, formats %p, stub!\n",
1344 iface, debugstr_guid(accelerator), count, formats);
1345 return E_NOTIMPL;
1346}
1347
1349 const GUID *accelerator, const AMVAUncompDataInfo *format_info, AMVAInternalMemInfo *mem_info)
1350{
1351 FIXME("iface %p, accelerator %s, format_info %p, mem_info %p, stub!\n",
1352 iface, debugstr_guid(accelerator), format_info, mem_info);
1353 return E_NOTIMPL;
1354}
1355
1357 const GUID *accelerator, const AMVAUncompDataInfo *uncompressed_info,
1358 DWORD *compressed_info_count, AMVACompBufferInfo *compressed_infos)
1359{
1360 FIXME("iface %p, accelerator %s, uncompressed_info %p, compressed_info_count %p, compressed_infos %p, stub!\n",
1361 iface, debugstr_guid(accelerator), uncompressed_info, compressed_info_count, compressed_infos);
1362 return E_NOTIMPL;
1363}
1364
1367{
1368 FIXME("iface %p, count %p, infos %p, stub!\n", iface, count, infos);
1369 return E_NOTIMPL;
1370}
1371
1373{
1374 FIXME("iface %p, info %p, stub!\n", iface, info);
1375 return E_NOTIMPL;
1376}
1377
1379{
1380 FIXME("iface %p, info %p, stub!\n", iface, info);
1381 return E_NOTIMPL;
1382}
1383
1385 DWORD type_index, DWORD buffer_index, BOOL read_only, void **buffer, LONG *stride)
1386{
1387 FIXME("iface %p, type_index %lu, buffer_index %lu, read_only %d, buffer %p, stride %p, stub!\n",
1388 iface, type_index, buffer_index, read_only, buffer, stride);
1389 return E_NOTIMPL;
1390}
1391
1393 IAMVideoAccelerator *iface, DWORD type_index, DWORD buffer_index)
1394{
1395 FIXME("iface %p, type_index %lu, buffer_index %lu, stub!\n", iface, type_index, buffer_index);
1396 return E_NOTIMPL;
1397}
1398
1400 DWORD function, void *in_data, DWORD in_size, void *out_data,
1402{
1403 FIXME("iface %p, function %#lx, in_data %p, in_size %lu,"
1404 " out_data %p, out_size %lu, buffer_count %lu, buffers %p, stub!\n",
1405 iface, function, in_data, in_size, out_data, out_size, buffer_count, buffers);
1406 return E_NOTIMPL;
1407}
1408
1410 DWORD type_index, DWORD buffer_index, DWORD flags)
1411{
1412 FIXME("iface %p, type_index %lu, buffer_index %lu, flags %#lx, stub!\n",
1413 iface, type_index, buffer_index, flags);
1414 return E_NOTIMPL;
1415}
1416
1419{
1420 FIXME("iface %p, index %lu, sample %p, stub!\n", iface, index, sample);
1421 return E_NOTIMPL;
1422}
1423
1424static const IAMVideoAcceleratorVtbl video_accelerator_vtbl =
1425{
1441};
1442
1443static struct vmr7 *impl_from_IOverlay(IOverlay *iface)
1444{
1445 return CONTAINING_RECORD(iface, struct vmr7, IOverlay_iface);
1446}
1447
1449{
1450 struct vmr7 *filter = impl_from_IOverlay(iface);
1451
1452 return IPin_QueryInterface(&filter->renderer.sink.pin.IPin_iface, iid, out);
1453}
1454
1456{
1457 struct vmr7 *filter = impl_from_IOverlay(iface);
1458
1459 return IPin_AddRef(&filter->renderer.sink.pin.IPin_iface);
1460}
1461
1463{
1464 struct vmr7 *filter = impl_from_IOverlay(iface);
1465
1466 return IPin_Release(&filter->renderer.sink.pin.IPin_iface);
1467}
1468
1470{
1471 FIXME("iface %p, count %p, palette %p, stub!\n", iface, count, palette);
1472 return E_NOTIMPL;
1473}
1474
1476{
1477 FIXME("iface %p, count %lu, palette %p, stub!\n", iface, count, palette);
1478 return E_NOTIMPL;
1479}
1480
1482{
1483 FIXME("iface %p, key %p, stub!\n", iface, key);
1484 return E_NOTIMPL;
1485}
1486
1488{
1489 FIXME("iface %p, key %p, stub!\n", iface, key);
1490 return E_NOTIMPL;
1491}
1492
1494{
1495 FIXME("iface %p, key %p, stub!\n", iface, key);
1496 return E_NOTIMPL;
1497}
1498
1500{
1501 struct vmr7 *filter = impl_from_IOverlay(iface);
1502
1503 TRACE("filter %p, window %p.\n", filter, window);
1504
1505 if (!filter->window.hwnd)
1506 return VFW_E_WRONG_STATE;
1507
1508 *window = filter->window.hwnd;
1509 return S_OK;
1510}
1511
1513{
1514 FIXME("iface %p, source %p, dest %p, region %p, stub!\n", iface, source, dest, region);
1515 return E_NOTIMPL;
1516}
1517
1519{
1520 FIXME("iface %p, source %p, dest %p, stub!\n", iface, source, dest);
1521 return E_NOTIMPL;
1522}
1523
1525{
1526 FIXME("iface %p, sink %p, flags %#lx, stub!\n", iface, sink, flags);
1527 return E_NOTIMPL;
1528}
1529
1531{
1532 FIXME("iface %p, stub!\n", iface);
1533 return E_NOTIMPL;
1534}
1535
1536static const IOverlayVtbl overlay_vtbl =
1537{
1551};
1552
1554{
1555 struct vmr7 *object;
1556 HRESULT hr;
1557
1558 if (!(object = calloc(1, sizeof(*object))))
1559 return E_OUTOFMEMORY;
1560
1561 strmbase_renderer_init(&object->renderer, outer, &CLSID_VideoMixingRenderer, L"VMR Input0", &renderer_ops);
1562 object->IAMCertifiedOutputProtection_iface.lpVtbl = &certified_output_protection_vtbl;
1563 object->IAMFilterMiscFlags_iface.lpVtbl = &misc_flags_vtbl;
1564 object->IVMRFilterConfig_iface.lpVtbl = &filter_config_vtbl;
1565 object->IVMRMonitorConfig_iface.lpVtbl = &monitor_config_vtbl;
1566 object->IVMRSurfaceAllocatorNotify_iface.lpVtbl = &surface_allocator_notify_vtbl;
1567 object->IVMRWindowlessControl_iface.lpVtbl = &windowless_control_vtbl;
1568
1569 object->IAMVideoAccelerator_iface.lpVtbl = &video_accelerator_vtbl;
1570 object->IOverlay_iface.lpVtbl = &overlay_vtbl;
1571
1573 &object->renderer.filter, &object->renderer.sink.pin, &window_ops);
1574
1575 if (FAILED(hr = video_window_create_window(&object->window)))
1576 {
1577 video_window_cleanup(&object->window);
1579 free(object);
1580 return hr;
1581 }
1582
1583 object->mixing_prefs = MixerPref9_NoDecimation | MixerPref9_ARAdjustXorY
1585
1586 TRACE("Created VMR %p.\n", object);
1587 *out = &object->renderer.filter.IUnknown_inner;
1588 return S_OK;
1589}
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
RECT rect
Definition: combotst.c:67
HDC dc
Definition: cylfrac.c:34
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
static struct vmr7 * impl_from_IAMVideoAccelerator(IAMVideoAccelerator *iface)
Definition: vmr7.c:1307
static HRESULT WINAPI windowless_control_GetBorderColor(IVMRWindowlessControl *iface, COLORREF *color)
Definition: vmr7.c:1160
static ULONG WINAPI monitor_config_Release(IVMRMonitorConfig *iface)
Definition: vmr7.c:916
static ULONG WINAPI video_accelerator_AddRef(IAMVideoAccelerator *iface)
Definition: vmr7.c:1319
static HRESULT WINAPI filter_config_SetRenderingMode(IVMRFilterConfig *iface, DWORD mode)
Definition: vmr7.c:748
static ULONG WINAPI certified_output_protection_Release(IAMCertifiedOutputProtection *iface)
Definition: vmr7.c:595
static HRESULT allocate_surfaces(struct vmr7 *filter, const AM_MEDIA_TYPE *mt)
Definition: vmr7.c:342
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: vmr7.c:1399
static HRESULT WINAPI overlay_GetColorKey(IOverlay *iface, COLORKEY *key)
Definition: vmr7.c:1487
static HRESULT WINAPI video_accelerator_GetBuffer(IAMVideoAccelerator *iface, DWORD type_index, DWORD buffer_index, BOOL read_only, void **buffer, LONG *stride)
Definition: vmr7.c:1384
static HRESULT WINAPI monitor_config_SetDefaultMonitor(IVMRMonitorConfig *iface, const VMRGUID *guid)
Definition: vmr7.c:944
static HRESULT vmr_query_accept(struct strmbase_renderer *iface, const AM_MEDIA_TYPE *mt)
Definition: vmr7.c:286
static HRESULT WINAPI filter_config_SetImageCompositor(IVMRFilterConfig *iface, IVMRImageCompositor *compositor)
Definition: vmr7.c:696
static const BITMAPINFOHEADER * get_bitmap_header(const AM_MEDIA_TYPE *mt)
Definition: vmr7.c:43
static HRESULT WINAPI surface_allocator_notify_AdviseSurfaceAllocator(IVMRSurfaceAllocatorNotify *iface, DWORD_PTR cookie, IVMRSurfaceAllocator *allocator)
Definition: vmr7.c:1222
static HRESULT WINAPI video_accelerator_QueryRenderStatus(IAMVideoAccelerator *iface, DWORD type_index, DWORD buffer_index, DWORD flags)
Definition: vmr7.c:1409
static HRESULT WINAPI surface_allocator_notify_SetDDrawDevice(IVMRSurfaceAllocatorNotify *iface, IDirectDraw7 *device, HMONITOR monitor)
Definition: vmr7.c:1260
static void vmr_stop_stream(struct strmbase_renderer *iface)
Definition: vmr7.c:381
static HRESULT WINAPI windowless_control_GetMaxIdealVideoSize(IVMRWindowlessControl *iface, LONG *width, LONG *height)
Definition: vmr7.c:1051
static HRESULT vmr_render(struct strmbase_renderer *iface, IMediaSample *sample)
Definition: vmr7.c:164
static const IAMVideoAcceleratorVtbl video_accelerator_vtbl
Definition: vmr7.c:1424
static void vmr_init_stream(struct strmbase_renderer *iface)
Definition: vmr7.c:366
static ULONG WINAPI filter_config_Release(IVMRFilterConfig *iface)
Definition: vmr7.c:689
static HRESULT WINAPI video_accelerator_GetUncompFormatsSupported(IAMVideoAccelerator *iface, const GUID *accelerator, DWORD *count, DDPIXELFORMAT *formats)
Definition: vmr7.c:1340
static HRESULT WINAPI filter_config_GetNumberOfStreams(IVMRFilterConfig *iface, DWORD *count)
Definition: vmr7.c:730
static HRESULT WINAPI windowless_control_SetVideoClippingWindow(IVMRWindowlessControl *iface, HWND window)
Definition: vmr7.c:1105
static ULONG WINAPI windowless_control_AddRef(IVMRWindowlessControl *iface)
Definition: vmr7.c:1008
static HRESULT WINAPI windowless_control_RepaintVideo(IVMRWindowlessControl *iface, HWND window, HDC dc)
Definition: vmr7.c:1135
static HRESULT WINAPI filter_config_SetNumberOfStreams(IVMRFilterConfig *iface, DWORD count)
Definition: vmr7.c:703
static ULONG WINAPI misc_flags_Release(IAMFilterMiscFlags *iface)
Definition: vmr7.c:655
static HRESULT WINAPI monitor_config_GetAvailableMonitors(IVMRMonitorConfig *iface, VMRMONITORINFO *info, DWORD capacity, DWORD *count)
Definition: vmr7.c:965
static ULONG WINAPI monitor_config_AddRef(IVMRMonitorConfig *iface)
Definition: vmr7.c:909
static const struct video_window_ops window_ops
Definition: vmr7.c:524
static struct vmr7 * impl_from_IBaseFilter(IBaseFilter *iface)
Definition: vmr7.c:123
static HRESULT WINAPI surface_allocator_notify_RestoreDDrawSurfaces(IVMRSurfaceAllocatorNotify *iface)
Definition: vmr7.c:1274
static HRESULT WINAPI filter_config_QueryInterface(IVMRFilterConfig *iface, REFIID iid, void **out)
Definition: vmr7.c:675
static struct vmr7 * impl_from_IVMRMonitorConfig(IVMRMonitorConfig *iface)
Definition: vmr7.c:108
static const struct strmbase_renderer_ops renderer_ops
Definition: vmr7.c:496
static ULONG WINAPI misc_flags_AddRef(IAMFilterMiscFlags *iface)
Definition: vmr7.c:648
static const IAMFilterMiscFlagsVtbl misc_flags_vtbl
Definition: vmr7.c:667
static const IAMCertifiedOutputProtectionVtbl certified_output_protection_vtbl
Definition: vmr7.c:630
static HRESULT WINAPI video_accelerator_DisplayFrame(IAMVideoAccelerator *iface, DWORD index, IMediaSample *sample)
Definition: vmr7.c:1417
static HRESULT WINAPI overlay_GetWindowHandle(IOverlay *iface, HWND *window)
Definition: vmr7.c:1499
static HRESULT WINAPI certified_output_protection_KeyExchange(IAMCertifiedOutputProtection *iface, GUID *random, BYTE **certificate, DWORD *size)
Definition: vmr7.c:602
static struct vmr7 * impl_from_IVMRSurfaceAllocatorNotify(IVMRSurfaceAllocatorNotify *iface)
Definition: vmr7.c:113
static HRESULT WINAPI surface_allocator_notify_ChangeDDrawDevice(IVMRSurfaceAllocatorNotify *iface, IDirectDraw7 *device, HMONITOR monitor)
Definition: vmr7.c:1267
static HRESULT WINAPI filter_config_SetRenderingPrefs(IVMRFilterConfig *iface, DWORD flags)
Definition: vmr7.c:736
static HRESULT WINAPI windowless_control_SetVideoPosition(IVMRWindowlessControl *iface, const RECT *source, const RECT *dest)
Definition: vmr7.c:1058
static HRESULT vmr_query_interface(struct strmbase_renderer *iface, REFIID iid, void **out)
Definition: vmr7.c:454
static HRESULT WINAPI windowless_control_SetBorderColor(IVMRWindowlessControl *iface, COLORREF color)
Definition: vmr7.c:1154
static HRESULT WINAPI certified_output_protection_ProtectionCommand(IAMCertifiedOutputProtection *iface, const AMCOPPCommand *cmd)
Definition: vmr7.c:616
static HRESULT WINAPI surface_allocator_notify_SetBorderColor(IVMRSurfaceAllocatorNotify *iface, COLORREF color)
Definition: vmr7.c:1287
static HRESULT WINAPI windowless_control_GetMinIdealVideoSize(IVMRWindowlessControl *iface, LONG *width, LONG *height)
Definition: vmr7.c:1044
static void vmr_start_stream(struct strmbase_renderer *iface)
Definition: vmr7.c:374
static HRESULT WINAPI windowless_control_SetAspectRatioMode(IVMRWindowlessControl *iface, DWORD mode)
Definition: vmr7.c:1099
static const IVMRMonitorConfigVtbl monitor_config_vtbl
Definition: vmr7.c:989
static const IOverlayVtbl overlay_vtbl
Definition: vmr7.c:1536
static void vmr_disconnect(struct strmbase_renderer *iface)
Definition: vmr7.c:426
static ULONG WINAPI overlay_AddRef(IOverlay *iface)
Definition: vmr7.c:1455
static HRESULT WINAPI overlay_QueryInterface(IOverlay *iface, REFIID iid, void **out)
Definition: vmr7.c:1448
static HRESULT WINAPI surface_allocator_notify_NotifyEvent(IVMRSurfaceAllocatorNotify *iface, LONG code, LONG_PTR param1, LONG_PTR param2)
Definition: vmr7.c:1280
static HRESULT vmr_pin_query_interface(struct strmbase_renderer *iface, REFIID iid, void **out)
Definition: vmr7.c:481
static HRESULT WINAPI certified_output_protection_ProtectionStatus(IAMCertifiedOutputProtection *iface, const AMCOPPStatusInput *input, AMCOPPStatusOutput *output)
Definition: vmr7.c:623
static HRESULT WINAPI video_accelerator_ReleaseBuffer(IAMVideoAccelerator *iface, DWORD type_index, DWORD buffer_index)
Definition: vmr7.c:1392
static ULONG WINAPI surface_allocator_notify_Release(IVMRSurfaceAllocatorNotify *iface)
Definition: vmr7.c:1215
static const IVMRWindowlessControlVtbl windowless_control_vtbl
Definition: vmr7.c:1178
static struct vmr7 * impl_from_IAMFilterMiscFlags(IAMFilterMiscFlags *iface)
Definition: vmr7.c:98
static ULONG WINAPI windowless_control_Release(IVMRWindowlessControl *iface)
Definition: vmr7.c:1015
static ULONG WINAPI certified_output_protection_AddRef(IAMCertifiedOutputProtection *iface)
Definition: vmr7.c:588
static HRESULT WINAPI video_accelerator_GetInternalCompBufferInfo(IAMVideoAccelerator *iface, DWORD *count, AMVACompBufferInfo *infos)
Definition: vmr7.c:1365
static HRESULT WINAPI windowless_control_SetColorKey(IVMRWindowlessControl *iface, COLORREF color)
Definition: vmr7.c:1166
static ULONG WINAPI surface_allocator_notify_AddRef(IVMRSurfaceAllocatorNotify *iface)
Definition: vmr7.c:1208
static HRESULT WINAPI windowless_control_QueryInterface(IVMRWindowlessControl *iface, REFIID iid, void **out)
Definition: vmr7.c:1001
static HRESULT WINAPI filter_config_GetRenderingPrefs(IVMRFilterConfig *iface, DWORD *flags)
Definition: vmr7.c:742
HRESULT vmr7_create(IUnknown *outer, IUnknown **out)
Definition: vmr7.c:1553
static HRESULT WINAPI certified_output_protection_SessionSequenceStart(IAMCertifiedOutputProtection *iface, AMCOPPSignature *signature)
Definition: vmr7.c:609
static const IVideoWindowVtbl IVideoWindow_VTable
Definition: vmr7.c:530
static HRESULT vmr_connect(struct strmbase_renderer *iface, const AM_MEDIA_TYPE *mt)
Definition: vmr7.c:389
static HRESULT WINAPI overlay_SetColorKey(IOverlay *iface, COLORKEY *key)
Definition: vmr7.c:1493
static HRESULT WINAPI monitor_config_GetDefaultMonitor(IVMRMonitorConfig *iface, VMRGUID *guid)
Definition: vmr7.c:954
static HRESULT WINAPI overlay_SetPalette(IOverlay *iface, DWORD count, PALETTEENTRY *palette)
Definition: vmr7.c:1475
static HRESULT WINAPI windowless_control_GetNativeVideoSize(IVMRWindowlessControl *iface, LONG *width, LONG *height, LONG *aspect_width, LONG *aspect_height)
Definition: vmr7.c:1022
static void vmr_destroy(struct strmbase_renderer *iface)
Definition: vmr7.c:433
static HRESULT WINAPI windowless_control_GetAspectRatioMode(IVMRWindowlessControl *iface, DWORD *mode)
Definition: vmr7.c:1093
static const IVMRSurfaceAllocatorNotifyVtbl surface_allocator_notify_vtbl
Definition: vmr7.c:1294
static HRESULT WINAPI overlay_GetVideoPosition(IOverlay *iface, RECT *source, RECT *dest)
Definition: vmr7.c:1518
static HRESULT WINAPI windowless_control_GetVideoPosition(IVMRWindowlessControl *iface, RECT *source, RECT *dest)
Definition: vmr7.c:1077
static HRESULT WINAPI monitor_config_SetMonitor(IVMRMonitorConfig *iface, const VMRGUID *guid)
Definition: vmr7.c:923
static struct vmr7 * impl_from_IVMRWindowlessControl(IVMRWindowlessControl *iface)
Definition: vmr7.c:118
static const IVMRFilterConfigVtbl filter_config_vtbl
Definition: vmr7.c:813
static HRESULT WINAPI surface_allocator_notify_QueryInterface(IVMRSurfaceAllocatorNotify *iface, REFIID iid, void **out)
Definition: vmr7.c:1200
static HRESULT WINAPI video_accelerator_EndFrame(IAMVideoAccelerator *iface, const AMVAEndFrameInfo *info)
Definition: vmr7.c:1378
static struct vmr7 * impl_from_IVMRFilterConfig(IVMRFilterConfig *iface)
Definition: vmr7.c:103
static HRESULT WINAPI windowless_control_DisplayModeChanged(IVMRWindowlessControl *iface)
Definition: vmr7.c:1142
static HRESULT initialize_device(struct vmr7 *filter, VMRALLOCATIONINFO *info, DWORD count)
Definition: vmr7.c:298
static HRESULT WINAPI windowless_control_GetCurrentImage(IVMRWindowlessControl *iface, BYTE **image)
Definition: vmr7.c:1148
static HRESULT WINAPI video_accelerator_BeginFrame(IAMVideoAccelerator *iface, const AMVABeginFrameInfo *info)
Definition: vmr7.c:1372
static ULONG WINAPI misc_flags_GetMiscFlags(IAMFilterMiscFlags *iface)
Definition: vmr7.c:662
static HRESULT WINAPI video_accelerator_QueryInterface(IAMVideoAccelerator *iface, REFIID iid, void **out)
Definition: vmr7.c:1312
static HRESULT WINAPI video_accelerator_GetInternalMemInfo(IAMVideoAccelerator *iface, const GUID *accelerator, const AMVAUncompDataInfo *format_info, AMVAInternalMemInfo *mem_info)
Definition: vmr7.c:1348
static HRESULT WINAPI overlay_GetDefaultColorKey(IOverlay *iface, COLORKEY *key)
Definition: vmr7.c:1481
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: vmr7.c:128
static HRESULT WINAPI monitor_config_QueryInterface(IVMRMonitorConfig *iface, REFIID iid, void **out)
Definition: vmr7.c:902
static HRESULT WINAPI overlay_Advise(IOverlay *iface, IOverlayNotify *sink, DWORD flags)
Definition: vmr7.c:1524
static HRESULT WINAPI overlay_Unadvise(IOverlay *iface)
Definition: vmr7.c:1530
static struct vmr7 * impl_from_IOverlay(IOverlay *iface)
Definition: vmr7.c:1443
static HRESULT vmr_get_current_image(struct video_window *iface, LONG *size, LONG *image)
Definition: vmr7.c:518
static HRESULT WINAPI video_accelerator_GetCompBufferInfo(IAMVideoAccelerator *iface, const GUID *accelerator, const AMVAUncompDataInfo *uncompressed_info, DWORD *compressed_info_count, AMVACompBufferInfo *compressed_infos)
Definition: vmr7.c:1356
static HRESULT WINAPI overlay_GetClipList(IOverlay *iface, RECT *source, RECT *dest, RGNDATA **region)
Definition: vmr7.c:1512
static void vmr_get_default_rect(struct video_window *iface, RECT *rect)
Definition: vmr7.c:510
static HRESULT WINAPI misc_flags_QueryInterface(IAMFilterMiscFlags *iface, REFIID iid, void **out)
Definition: vmr7.c:641
static ULONG WINAPI video_accelerator_Release(IAMVideoAccelerator *iface)
Definition: vmr7.c:1326
static HRESULT WINAPI certified_output_protection_QueryInterface(IAMCertifiedOutputProtection *iface, REFIID iid, void **out)
Definition: vmr7.c:580
static HRESULT WINAPI windowless_control_GetColorKey(IVMRWindowlessControl *iface, COLORREF *color)
Definition: vmr7.c:1172
static HRESULT WINAPI video_accelerator_GetVideoAcceleratorGUIDs(IAMVideoAccelerator *iface, DWORD *count, GUID *accelerators)
Definition: vmr7.c:1333
static HRESULT WINAPI monitor_config_GetMonitor(IVMRMonitorConfig *iface, VMRGUID *guid)
Definition: vmr7.c:933
static struct vmr7 * impl_from_IAMCertifiedOutputProtection(IAMCertifiedOutputProtection *iface)
Definition: vmr7.c:93
static ULONG WINAPI overlay_Release(IOverlay *iface)
Definition: vmr7.c:1462
static HRESULT WINAPI overlay_GetPalette(IOverlay *iface, DWORD *count, PALETTEENTRY **palette)
Definition: vmr7.c:1469
static void deallocate_surfaces(struct vmr7 *filter)
Definition: vmr7.c:413
static BOOL CALLBACK get_available_monitors_proc(HMONITOR monitor, HDC dc, RECT *rect, LPARAM ctx)
Definition: vmr7.c:835
static const BITMAPINFOHEADER * get_filter_bitmap_header(const struct vmr7 *filter)
Definition: vmr7.c:83
static HRESULT WINAPI filter_config_GetRenderingMode(IVMRFilterConfig *iface, DWORD *mode)
Definition: vmr7.c:796
static struct vmr7 * impl_from_video_window(struct video_window *iface)
Definition: vmr7.c:88
static ULONG WINAPI filter_config_AddRef(IVMRFilterConfig *iface)
Definition: vmr7.c:682
#define CALLBACK
Definition: compat.h:35
#define lstrcpynW
Definition: compat.h:738
GUID guid
Definition: version.c:147
LONGLONG REFERENCE_TIME
Definition: dmusicks.h:9
#define L(x)
Definition: resources.c:13
@ AMAP_ALLOW_SYSMEM
Definition: vmrender.idl:53
@ AMAP_DIRECTED_FLIP
Definition: vmrender.idl:55
VMRMode
Definition: vmrender.idl:104
@ VMRMode_Renderless
Definition: vmrender.idl:107
@ VMRMode_Windowless
Definition: vmrender.idl:106
@ VMRMode_Windowed
Definition: vmrender.idl:105
@ VMRSample_TimeValid
Definition: vmrender.idl:45
#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
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLint GLint GLsizei width
Definition: gl.h:1546
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
GLenum GLenum GLenum input
Definition: glext.h:9031
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
#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
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
static HDC
Definition: imagelist.c:88
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
__int3264 LONG_PTR
Definition: mstsclib_h.h:276
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
DWORD IDirectDrawSurface7
Definition: vmrender.idl:20
DWORD IDirectDraw7
Definition: vmrender.idl:21
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)
#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 vmr7_presenter_create(IUnknown *outer, IUnknown **out)
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 random
Definition: rosdhcp.h:94
#define calloc
Definition: rosglue.h:14
#define DDSCAPS_FLIP
Definition: ddraw.h:255
#define DDLOCK_DISCARDCONTENTS
Definition: ddraw.h:630
#define DDLOCK_WAIT
Definition: ddraw.h:624
#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
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 dwCaps
Definition: ddraw.h:734
DWORD dwWidth
Definition: ddraw.h:1157
DWORD dwHeight
Definition: ddraw.h:1156
LPVOID lpSurface
Definition: ddraw.h:1176
DWORD dwSize
Definition: ddraw.h:1154
Definition: match.c:390
Definition: ftp_var.h:139
Definition: inflate.c:139
Definition: dialog.c:52
Definition: cookie.c:34
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
Definition: wave.c:25
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
Definition: vmr7.c:52
DWORD stream_count
Definition: vmr7.c:66
struct video_window window
Definition: vmr7.c:54
IVMRMonitorConfig IVMRMonitorConfig_iface
Definition: vmr7.c:59
VMRMode mode
Definition: vmr7.c:69
IAMCertifiedOutputProtection IAMCertifiedOutputProtection_iface
Definition: vmr7.c:56
VMR9AspectRatioMode aspect_mode
Definition: vmr7.c:80
IVMRWindowlessControl IVMRWindowlessControl_iface
Definition: vmr7.c:61
DWORD surface_count
Definition: vmr7.c:74
IVMRSurfaceAllocator * allocator
Definition: vmr7.c:71
IVMRFilterConfig IVMRFilterConfig_iface
Definition: vmr7.c:58
IAMVideoAccelerator IAMVideoAccelerator_iface
Definition: vmr7.c:63
DWORD_PTR cookie
Definition: vmr7.c:76
DWORD mixing_prefs
Definition: vmr7.c:67
IVMRSurfaceAllocatorNotify IVMRSurfaceAllocatorNotify_iface
Definition: vmr7.c:60
IDirectDrawSurface7 ** surfaces
Definition: vmr7.c:73
struct strmbase_renderer renderer
Definition: vmr7.c:53
HWND clipping_window
Definition: vmr7.c:78
IAMFilterMiscFlags IAMFilterMiscFlags_iface
Definition: vmr7.c:57
IVMRImagePresenter * presenter
Definition: vmr7.c:72
IOverlay IOverlay_iface
Definition: vmr7.c:64
DWORD surface_index
Definition: vmr7.c:75
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_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
@ MixerPref9_NoDecimation
Definition: vmr9.idl:182
@ MixerPref9_RenderTargetRGB
Definition: vmr9.idl:198
@ MixerPref9_BiLinearFiltering
Definition: vmr9.idl:189
@ MixerPref9_ARAdjustXorY
Definition: vmr9.idl:184
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)
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