From: Rémi Bernon rbernon@codeweavers.com
--- dlls/mfreadwrite/reader.c | 64 +++++++++++++++++++-------------------- 1 file changed, 32 insertions(+), 32 deletions(-)
diff --git a/dlls/mfreadwrite/reader.c b/dlls/mfreadwrite/reader.c index b77b5f9c538..6c990a17809 100644 --- a/dlls/mfreadwrite/reader.c +++ b/dlls/mfreadwrite/reader.c @@ -2620,6 +2620,38 @@ static HRESULT create_source_reader_from_source(IMFMediaSource *source, IMFAttri InitializeConditionVariable(&object->state_event); InitializeConditionVariable(&object->stop_event);
+ if (attributes) + { + object->attributes = attributes; + IMFAttributes_AddRef(object->attributes); + + IMFAttributes_GetUnknown(attributes, &MF_SOURCE_READER_ASYNC_CALLBACK, &IID_IMFSourceReaderCallback, + (void **)&object->async_callback); + if (object->async_callback) + TRACE("Using async callback %p.\n", object->async_callback); + + IMFAttributes_GetUnknown(attributes, &MF_SOURCE_READER_D3D_MANAGER, &IID_IUnknown, (void **)&object->device_manager); + if (object->device_manager) + { + IUnknown *unk = NULL; + + if (SUCCEEDED(IUnknown_QueryInterface(object->device_manager, &IID_IMFDXGIDeviceManager, (void **)&unk))) + object->flags |= SOURCE_READER_DXGI_DEVICE_MANAGER; + else if (SUCCEEDED(IUnknown_QueryInterface(object->device_manager, &IID_IDirect3DDeviceManager9, (void **)&unk))) + object->flags |= SOURCE_READER_D3D9_DEVICE_MANAGER; + + if (!(object->flags & (SOURCE_READER_HAS_DEVICE_MANAGER))) + { + WARN("Unknown device manager.\n"); + IUnknown_Release(object->device_manager); + object->device_manager = NULL; + } + + if (unk) + IUnknown_Release(unk); + } + } + if (FAILED(hr = IMFMediaSource_CreatePresentationDescriptor(object->source, &object->descriptor))) goto failed;
@@ -2689,38 +2721,6 @@ static HRESULT create_source_reader_from_source(IMFMediaSource *source, IMFAttri goto failed; }
- if (attributes) - { - object->attributes = attributes; - IMFAttributes_AddRef(object->attributes); - - IMFAttributes_GetUnknown(attributes, &MF_SOURCE_READER_ASYNC_CALLBACK, &IID_IMFSourceReaderCallback, - (void **)&object->async_callback); - if (object->async_callback) - TRACE("Using async callback %p.\n", object->async_callback); - - IMFAttributes_GetUnknown(attributes, &MF_SOURCE_READER_D3D_MANAGER, &IID_IUnknown, (void **)&object->device_manager); - if (object->device_manager) - { - IUnknown *unk = NULL; - - if (SUCCEEDED(IUnknown_QueryInterface(object->device_manager, &IID_IMFDXGIDeviceManager, (void **)&unk))) - object->flags |= SOURCE_READER_DXGI_DEVICE_MANAGER; - else if (SUCCEEDED(IUnknown_QueryInterface(object->device_manager, &IID_IDirect3DDeviceManager9, (void **)&unk))) - object->flags |= SOURCE_READER_D3D9_DEVICE_MANAGER; - - if (!(object->flags & (SOURCE_READER_HAS_DEVICE_MANAGER))) - { - WARN("Unknown device manager.\n"); - IUnknown_Release(object->device_manager); - object->device_manager = NULL; - } - - if (unk) - IUnknown_Release(unk); - } - } - if (FAILED(hr = MFLockSharedWorkQueue(L"", 0, NULL, &object->queue))) WARN("Failed to acquired shared queue, hr %#lx.\n", hr);