Commit 95927941 authored by Nikolay Sivov's avatar Nikolay Sivov Committed by Alexandre Julliard

evr/allocator: Use different buffer implementation for surface buffers.

parent 23a656a0
...@@ -306,27 +306,28 @@ static HRESULT sample_allocator_create_samples(struct sample_allocator *allocato ...@@ -306,27 +306,28 @@ static HRESULT sample_allocator_create_samples(struct sample_allocator *allocato
for (i = 0; i < sample_count; ++i) for (i = 0; i < sample_count; ++i)
{ {
struct queued_sample *queued_sample = heap_alloc(sizeof(*queued_sample)); struct queued_sample *queued_sample = heap_alloc(sizeof(*queued_sample));
IMFMediaBuffer *buffer;
if (service) if (SUCCEEDED(hr = MFCreateVideoSampleFromSurface(NULL, &sample)))
{ {
if (SUCCEEDED(hr = IDirectXVideoProcessorService_CreateSurface(service, width, height, 0, format, if (service)
D3DPOOL_DEFAULT, 0, DXVA2_VideoProcessorRenderTarget, &surface, NULL)))
{ {
hr = MFCreateVideoSampleFromSurface((IUnknown *)surface, &sample); if (SUCCEEDED(hr = IDirectXVideoProcessorService_CreateSurface(service, width, height,
IDirect3DSurface9_Release(surface); 0, format, D3DPOOL_DEFAULT, 0, DXVA2_VideoProcessorRenderTarget, &surface, NULL)))
{
hr = MFCreateDXSurfaceBuffer(&IID_IDirect3DSurface9, (IUnknown *)surface, FALSE, &buffer);
IDirect3DSurface9_Release(surface);
}
}
else
{
hr = MFCreate2DMediaBuffer(width, height, format, FALSE, &buffer);
} }
}
else
{
IMFMediaBuffer *buffer;
if (SUCCEEDED(hr = MFCreateVideoSampleFromSurface(NULL, &sample))) if (SUCCEEDED(hr))
{ {
if (SUCCEEDED(hr = MFCreate2DMediaBuffer(width, height, format, FALSE, &buffer))) hr = IMFSample_AddBuffer(sample, buffer);
{ IMFMediaBuffer_Release(buffer);
hr = IMFSample_AddBuffer(sample, buffer);
IMFMediaBuffer_Release(buffer);
}
} }
} }
......
...@@ -1468,17 +1468,13 @@ todo_wine ...@@ -1468,17 +1468,13 @@ todo_wine
IDirect3DSurface9_Release(surface); IDirect3DSurface9_Release(surface);
hr = IMFMediaBuffer_QueryInterface(buffer, &IID_IMF2DBuffer, (void **)&unk); hr = IMFMediaBuffer_QueryInterface(buffer, &IID_IMF2DBuffer, (void **)&unk);
todo_wine
ok(hr == S_OK, "Unexpected hr %#x.\n", hr); ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
if (SUCCEEDED(hr)) IUnknown_Release(unk);
IUnknown_Release(unk);
hr = IMFMediaBuffer_Lock(buffer, &data, NULL, NULL); hr = IMFMediaBuffer_Lock(buffer, &data, NULL, NULL);
todo_wine
ok(hr == S_OK, "Unexpected hr %#x.\n", hr); ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
hr = IMFMediaBuffer_Unlock(buffer); hr = IMFMediaBuffer_Unlock(buffer);
todo_wine
ok(hr == S_OK, "Unexpected hr %#x.\n", hr); ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
IMFSample_Release(sample); IMFSample_Release(sample);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment