Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/mfplat/sample.c | 4 +++- dlls/mfplat/tests/mfplat.c | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/dlls/mfplat/sample.c b/dlls/mfplat/sample.c index 8a0281abf6c..acdc8836cc8 100644 --- a/dlls/mfplat/sample.c +++ b/dlls/mfplat/sample.c @@ -1355,12 +1355,15 @@ static HRESULT sample_allocator_initialize(struct sample_allocator *allocator, u { allocator->attributes = attributes; IMFAttributes_AddRef(allocator->attributes); + + IMFAttributes_GetUINT32(attributes, &MF_SA_BUFFERS_PER_SAMPLE, &allocator->frame_desc.buffer_count); }
allocator->frame_desc.d3d9_format = subtype.Data1; allocator->frame_desc.dxgi_format = MFMapDX9FormatToDXGIFormat(allocator->frame_desc.d3d9_format); allocator->frame_desc.width = frame_size >> 32; allocator->frame_desc.height = frame_size; + allocator->frame_desc.buffer_count = max(1, allocator->frame_desc.buffer_count);
if (FAILED(hr = sample_allocator_get_surface_service(allocator, &service))) return hr; @@ -1673,7 +1676,6 @@ HRESULT WINAPI MFCreateVideoSampleAllocatorEx(REFIID riid, void **obj) object->IMFVideoSampleAllocatorCallback_iface.lpVtbl = &sample_allocator_callback_vtbl; object->tracking_callback.lpVtbl = &sample_allocator_tracking_callback_vtbl; object->refcount = 1; - object->frame_desc.buffer_count = 1; list_init(&object->used_samples); list_init(&object->free_samples); InitializeCriticalSection(&object->cs); diff --git a/dlls/mfplat/tests/mfplat.c b/dlls/mfplat/tests/mfplat.c index ed862ab9bdb..deb9e78efba 100644 --- a/dlls/mfplat/tests/mfplat.c +++ b/dlls/mfplat/tests/mfplat.c @@ -6439,6 +6439,9 @@ todo_wine hr = IMFAttributes_SetUINT32(attributes, &MF_SA_BUFFERS_PER_SAMPLE, 2); ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+ hr = IMFVideoSampleAllocatorEx_AllocateSample(allocatorex, &sample); + ok(hr == MF_E_NOT_INITIALIZED, "Unexpected hr %#x.\n", hr); + EXPECT_REF(attributes, 1); hr = IMFVideoSampleAllocatorEx_InitializeSampleAllocatorEx(allocatorex, 0, 0, attributes, video_type); ok(hr == S_OK, "Unexpected hr %#x.\n", hr); @@ -6454,7 +6457,6 @@ todo_wine
hr = IMFSample_GetBufferCount(sample, &buffer_count); ok(hr == S_OK, "Unexpected hr %#x.\n", hr); -todo_wine ok(buffer_count == 2, "Unexpected buffer count %u.\n", buffer_count);
hr = IMFVideoSampleAllocatorEx_AllocateSample(allocatorex, &sample2);