[PATCH 3/4] quartz/vmr9: Retrieve a default format if none is given in IVMRSurfaceAllocatorNotify9::AllocateSurfaceHelper().
Zebediah Figura
z.figura12 at gmail.com
Wed Apr 29 20:15:15 CDT 2020
Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
---
dlls/quartz/tests/vmr9.c | 22 ++++++++++++++++++++++
dlls/quartz/vmr9.c | 12 ++++++++++++
2 files changed, 34 insertions(+)
diff --git a/dlls/quartz/tests/vmr9.c b/dlls/quartz/tests/vmr9.c
index e01e9ad5572..dc9aeec834c 100644
--- a/dlls/quartz/tests/vmr9.c
+++ b/dlls/quartz/tests/vmr9.c
@@ -2731,6 +2731,28 @@ static void test_allocate_surface_helper(void)
ok(!surfaces[0], "Surface 0 was allocated.\n");
ok(!surfaces[1], "Surface 1 was allocated.\n");
+ info.Format = 0;
+ info.dwFlags = VMR9AllocFlag_3DRenderTarget;
+ count = 1;
+ hr = IVMRSurfaceAllocatorNotify9_AllocateSurfaceHelper(notify, &info, &count, surfaces);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+ ok(count == 1, "Got count %u.\n", count);
+ ok(!!surfaces[0], "Surface 0 was not allocated.\n");
+ ok(info.Format != 0, "Expected a format.\n");
+
+ hr = IDirect3DSurface9_GetDesc(surfaces[0], &desc);
+ ok(hr == D3D_OK, "Got hr %#x.\n", hr);
+ ok(desc.Format == info.Format, "Expected format %#x, got %#x.\n", info.Format, desc.Format);
+ ok(desc.Type == D3DRTYPE_SURFACE, "Got type %u.\n", desc.Type);
+ ok(desc.Usage == D3DUSAGE_RENDERTARGET, "Got usage %#x.\n", desc.Usage);
+ ok(desc.Pool == D3DPOOL_DEFAULT, "Got pool %u.\n", desc.Pool);
+ ok(desc.MultiSampleType == D3DMULTISAMPLE_NONE, "Got multisample type %u.\n", desc.MultiSampleType);
+ ok(!desc.MultiSampleQuality, "Got multisample quality %u.\n", desc.MultiSampleQuality);
+ ok(desc.Width == 32, "Got width %u.\n", desc.Width);
+ ok(desc.Height == 16, "Got height %u.\n", desc.Height);
+
+ IDirect3DSurface9_Release(surfaces[0]);
+
out:
IVMRSurfaceAllocatorNotify9_Release(notify);
ref = IBaseFilter_Release(filter);
diff --git a/dlls/quartz/vmr9.c b/dlls/quartz/vmr9.c
index 888f9e17510..f4faf2f97a8 100644
--- a/dlls/quartz/vmr9.c
+++ b/dlls/quartz/vmr9.c
@@ -2112,6 +2112,18 @@ static HRESULT WINAPI VMR9SurfaceAllocatorNotify_AllocateSurfaceHelper(IVMRSurfa
if (!allocinfo || !numbuffers || !surface)
return E_POINTER;
+ if (!allocinfo->Format)
+ {
+ IDirect3DSurface9 *backbuffer;
+ D3DSURFACE_DESC desc;
+
+ IDirect3DDevice9_GetBackBuffer(This->allocator_d3d9_dev, 0, 0,
+ D3DBACKBUFFER_TYPE_MONO, &backbuffer);
+ IDirect3DSurface9_GetDesc(backbuffer, &desc);
+ IDirect3DSurface9_Release(backbuffer);
+ allocinfo->Format = desc.Format;
+ }
+
if (!*numbuffers || *numbuffers < allocinfo->MinBuffers)
{
ERR("Invalid number of buffers?\n");
--
2.26.2
More information about the wine-devel
mailing list