Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/mfplat/main.c | 8 ++++++++ include/mfidl.idl | 9 +++++++++ 2 files changed, 17 insertions(+)
diff --git a/dlls/mfplat/main.c b/dlls/mfplat/main.c index 5cbf1212f7..30810daa44 100644 --- a/dlls/mfplat/main.c +++ b/dlls/mfplat/main.c @@ -630,6 +630,7 @@ const char *debugstr_attr(const GUID *guid) X(MF_SOURCE_READER_ENABLE_TRANSCODE_ONLY_TRANSFORMS), X(MF_TOPOLOGY_DYNAMIC_CHANGE_NOT_ALLOWED), X(MF_MT_ALPHA_MODE), + X(MF_PMP_SERVER_CONTEXT), X(MF_TOPOLOGY_PLAYBACK_MAX_DIMS), X(MF_LOW_LATENCY), X(MF_READWRITE_ENABLE_HARDWARE_TRANSFORMS), @@ -638,6 +639,7 @@ const char *debugstr_attr(const GUID *guid) X(MF_MT_WRAPPED_TYPE), X(MF_MT_AVG_BITRATE), X(MF_SOURCE_READER_ENABLE_ADVANCED_VIDEO_PROCESSING), + X(MF_SESSION_APPROX_EVENT_OCCURRENCE_TIME), X(MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_MAX_BUFFERS), X(MF_MT_AUDIO_BLOCK_ALIGNMENT), X(MF_PD_PMPHOST_CONTEXT), @@ -693,6 +695,10 @@ const char *debugstr_attr(const GUID *guid) X(MF_SD_LANGUAGE), X(MF_MT_AUDIO_WMADRC_AVGTARGET), X(MF_SD_PROTECTED), + X(MF_SESSION_TOPOLOADER), + X(MF_SESSION_GLOBAL_TIME), + X(MF_SESSION_QUALITY_MANAGER), + X(MF_SESSION_CONTENT_PROTECTION_MANAGER), X(MF_READWRITE_MMCSS_PRIORITY_AUDIO), X(MF_BYTESTREAM_ORIGIN_NAME), X(MF_BYTESTREAM_CONTENT_TYPE), @@ -710,6 +716,7 @@ const char *debugstr_attr(const GUID *guid) X(MF_MT_MAJOR_TYPE), X(MF_EVENT_SOURCE_CHARACTERISTICS), X(MF_EVENT_SOURCE_CHARACTERISTICS_OLD), + X(MF_SESSION_SERVER_CONTEXT), X(MF_MT_VIDEO_3D_FIRST_IS_LEFT), X(MF_PD_ADAPTIVE_STREAMING), X(MFSampleExtension_Timestamp), @@ -781,6 +788,7 @@ const char *debugstr_attr(const GUID *guid) X(MF_EVENT_MFT_CONTEXT), X(MF_MT_FORWARD_CUSTOM_SEI), X(MF_TOPONODE_CONNECT_METHOD), + X(MF_SESSION_REMOTE_SOURCE_MODE), X(MF_MT_DEPTH_VALUE_UNIT), X(MF_MT_AUDIO_NUM_CHANNELS), X(MF_TOPOLOGY_DXVA_MODE), diff --git a/include/mfidl.idl b/include/mfidl.idl index 5f8913384c..f40f16e480 100644 --- a/include/mfidl.idl +++ b/include/mfidl.idl @@ -842,4 +842,13 @@ cpp_quote("EXTERN_GUID(MF_RATE_CONTROL_SERVICE, 0x866fa297, 0xb802, 0x4bf8, 0x9d cpp_quote("EXTERN_GUID(MF_SAMPLEGRABBERSINK_SAMPLE_TIME_OFFSET, 0x62e3d776, 0x8100, 0x4e03, 0xa6, 0xe8, 0xbd, 0x38, 0x57, 0xac, 0x9c, 0x47);") cpp_quote("EXTERN_GUID(MF_SAMPLEGRABBERSINK_IGNORE_CLOCK, 0x0efda2c0, 0x2b69, 0x4e2e, 0xab, 0x8d, 0x46, 0xdc, 0xbf, 0xf7, 0xd2, 0x5d);")
+cpp_quote("EXTERN_GUID(MF_SESSION_TOPOLOADER, 0x1e83d482, 0x1f1c, 0x4571, 0x84, 0x05, 0x88, 0xf4, 0xb2, 0x18, 0x1f, 0x71);") +cpp_quote("EXTERN_GUID(MF_SESSION_GLOBAL_TIME, 0x1e83d482, 0x1f1c, 0x4571, 0x84, 0x05, 0x88, 0xf4, 0xb2, 0x18, 0x1f, 0x72);") +cpp_quote("EXTERN_GUID(MF_SESSION_QUALITY_MANAGER, 0x1e83d482, 0x1f1c, 0x4571, 0x84, 0x05, 0x88, 0xf4, 0xb2, 0x18, 0x1f, 0x73);") +cpp_quote("EXTERN_GUID(MF_SESSION_CONTENT_PROTECTION_MANAGER, 0x1e83d482, 0x1f1c, 0x4571, 0x84, 0x05, 0x88, 0xf4, 0xb2, 0x18, 0x1f, 0x74);") +cpp_quote("EXTERN_GUID(MF_SESSION_SERVER_CONTEXT, 0xafe5b291, 0x50fa, 0x46e8, 0xb9, 0xbe, 0x0c, 0x0c, 0x3c, 0xe4, 0xb3, 0xa5);") +cpp_quote("EXTERN_GUID(MF_SESSION_REMOTE_SOURCE_MODE, 0xf4033ef4, 0x9bb3, 0x4378, 0x94, 0x1f, 0x85, 0xa0, 0x85, 0x6b, 0xc2, 0x44);") +cpp_quote("EXTERN_GUID(MF_SESSION_APPROX_EVENT_OCCURRENCE_TIME, 0x190e852f, 0x6238, 0x42d1, 0xb5, 0xaf, 0x69, 0xea, 0x33, 0x8e, 0xf8, 0x50);") +cpp_quote("EXTERN_GUID(MF_PMP_SERVER_CONTEXT, 0x2f00c910, 0xd2cf, 0x4278, 0x8b, 0x6a, 0xd0, 0x77, 0xfa, 0xc3, 0xa2, 0x5f);") + cpp_quote("EXTERN_GUID(CLSID_VideoProcessorMFT, 0x88753b26, 0x5b24, 0x49bd, 0xb2, 0xe7, 0xc, 0x44, 0x5c, 0x78, 0xc9, 0x82);")
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/mf/mf.spec | 2 +- dlls/mf/session.c | 130 +++++++++++++++++++++++++++++++++++++++++++++ dlls/mf/tests/mf.c | 12 +++++ include/mfidl.idl | 24 +++++++++ 4 files changed, 167 insertions(+), 1 deletion(-)
diff --git a/dlls/mf/mf.spec b/dlls/mf/mf.spec index 6e64404ba6..f13a2451fb 100644 --- a/dlls/mf/mf.spec +++ b/dlls/mf/mf.spec @@ -58,7 +58,7 @@ @ stub MFCreateSequencerSourceRemoteStream @ stub MFCreateSimpleTypeHandler @ stdcall MFCreateSourceResolver(ptr) mfplat.MFCreateSourceResolver -@ stub MFCreateStandardQualityManager +@ stdcall MFCreateStandardQualityManager(ptr) @ stdcall MFCreateTopoLoader(ptr) @ stdcall MFCreateTopology(ptr) @ stdcall MFCreateTopologyNode(long ptr) diff --git a/dlls/mf/session.c b/dlls/mf/session.c index 1276f2ec92..ecee112c3f 100644 --- a/dlls/mf/session.c +++ b/dlls/mf/session.c @@ -133,6 +133,12 @@ struct presentation_clock CRITICAL_SECTION cs; };
+struct quality_manager +{ + IMFQualityManager IMFQualityManager_iface; + LONG refcount; +}; + static inline struct media_session *impl_from_IMFMediaSession(IMFMediaSession *iface) { return CONTAINING_RECORD(iface, struct media_session, IMFMediaSession_iface); @@ -193,6 +199,11 @@ static struct sink_notification *impl_from_IUnknown(IUnknown *iface) return CONTAINING_RECORD(iface, struct sink_notification, IUnknown_iface); }
+static struct quality_manager *impl_from_IMFQualityManager(IMFQualityManager *iface) +{ + return CONTAINING_RECORD(iface, struct quality_manager, IMFQualityManager_iface); +} + static HRESULT WINAPI session_op_QueryInterface(IUnknown *iface, REFIID riid, void **obj) { if (IsEqualIID(riid, &IID_IUnknown)) @@ -1542,3 +1553,122 @@ HRESULT WINAPI MFCreatePresentationClock(IMFPresentationClock **clock)
return S_OK; } + +static HRESULT WINAPI standard_quality_manager_QueryInterface(IMFQualityManager *iface, REFIID riid, void **out) +{ + TRACE("%p, %s, %p.\n", iface, debugstr_guid(riid), out); + + if (IsEqualIID(riid, &IID_IMFQualityManager) || + IsEqualIID(riid, &IID_IUnknown)) + { + *out = iface; + IMFQualityManager_AddRef(iface); + return S_OK; + } + + WARN("Unsupported %s.\n", debugstr_guid(riid)); + *out = NULL; + return E_NOINTERFACE; +} + +static ULONG WINAPI standard_quality_manager_AddRef(IMFQualityManager *iface) +{ + struct quality_manager *manager = impl_from_IMFQualityManager(iface); + ULONG refcount = InterlockedIncrement(&manager->refcount); + + TRACE("%p, refcount %u.\n", iface, refcount); + + return refcount; +} + +static ULONG WINAPI standard_quality_manager_Release(IMFQualityManager *iface) +{ + struct quality_manager *manager = impl_from_IMFQualityManager(iface); + ULONG refcount = InterlockedDecrement(&manager->refcount); + + TRACE("%p, refcount %u.\n", iface, refcount); + + if (!refcount) + { + heap_free(manager); + } + + return refcount; +} + +static HRESULT WINAPI standard_quality_manager_NotifyTopology(IMFQualityManager *iface, IMFTopology *topology) +{ + FIXME("%p, %p stub.\n", iface, topology); + + return E_NOTIMPL; +} + +static HRESULT WINAPI standard_quality_manager_NotifyPresentationClock(IMFQualityManager *iface, + IMFPresentationClock *clock) +{ + FIXME("%p, %p stub.\n", iface, clock); + + return E_NOTIMPL; +} + +static HRESULT WINAPI standard_quality_manager_NotifyProcessInput(IMFQualityManager *iface, IMFTopologyNode *node, + LONG input_index, IMFSample *sample) +{ + FIXME("%p, %p, %d, %p stub.\n", iface, node, input_index, sample); + + return E_NOTIMPL; +} + +static HRESULT WINAPI standard_quality_manager_NotifyProcessOutput(IMFQualityManager *iface, IMFTopologyNode *node, + LONG output_index, IMFSample *sample) +{ + FIXME("%p, %p, %d, %p stub.\n", iface, node, output_index, sample); + + return E_NOTIMPL; +} + +static HRESULT WINAPI standard_quality_manager_NotifyQualityEvent(IMFQualityManager *iface, IUnknown *object, + IMFMediaEvent *event) +{ + FIXME("%p, %p, %p stub.\n", iface, object, event); + + return E_NOTIMPL; +} + +static HRESULT WINAPI standard_quality_manager_Shutdown(IMFQualityManager *iface) +{ + FIXME("%p stub.\n", iface); + + return E_NOTIMPL; +} + +static IMFQualityManagerVtbl standard_quality_manager_vtbl = +{ + standard_quality_manager_QueryInterface, + standard_quality_manager_AddRef, + standard_quality_manager_Release, + standard_quality_manager_NotifyTopology, + standard_quality_manager_NotifyPresentationClock, + standard_quality_manager_NotifyProcessInput, + standard_quality_manager_NotifyProcessOutput, + standard_quality_manager_NotifyQualityEvent, + standard_quality_manager_Shutdown, +}; + +HRESULT WINAPI MFCreateStandardQualityManager(IMFQualityManager **manager) +{ + struct quality_manager *object; + + TRACE("%p.\n", manager); + + object = heap_alloc_zero(sizeof(*object)); + if (!object) + return E_OUTOFMEMORY; + + object->IMFQualityManager_iface.lpVtbl = &standard_quality_manager_vtbl; + object->refcount = 1; + + *manager = &object->IMFQualityManager_iface; + + return S_OK; +} diff --git a/dlls/mf/tests/mf.c b/dlls/mf/tests/mf.c index 0a8a88d6c3..00dc2daed5 100644 --- a/dlls/mf/tests/mf.c +++ b/dlls/mf/tests/mf.c @@ -2398,6 +2398,17 @@ failed: CoUninitialize(); }
+static void test_quality_manager(void) +{ + IMFQualityManager *manager; + HRESULT hr; + + hr = MFCreateStandardQualityManager(&manager); + ok(hr == S_OK, "Failed to create quality manager, hr %#x.\n", hr); + + IMFQualityManager_Release(manager); +} + START_TEST(mf) { test_topology(); @@ -2409,4 +2420,5 @@ START_TEST(mf) test_presentation_clock(); test_sample_grabber(); test_video_processor(); + test_quality_manager(); } diff --git a/include/mfidl.idl b/include/mfidl.idl index f40f16e480..ab6d0d9984 100644 --- a/include/mfidl.idl +++ b/include/mfidl.idl @@ -577,6 +577,7 @@ cpp_quote("HRESULT WINAPI MFCreateSampleGrabberSinkActivate(IMFMediaType *media_ cpp_quote(" IMFSampleGrabberSinkCallback *callback, IMFActivate **activate);") cpp_quote("HRESULT WINAPI MFCreateSequencerSource(IUnknown *reserved, IMFSequencerSource **seq_source);" ) cpp_quote("HRESULT WINAPI MFCreateSourceResolver(IMFSourceResolver **resolver);") +cpp_quote("HRESULT WINAPI MFCreateStandardQualityManager(IMFQualityManager **manager);") cpp_quote("HRESULT WINAPI MFCreateStreamDescriptor(DWORD identifier, DWORD cMediaTypes,") cpp_quote(" IMFMediaType **types, IMFStreamDescriptor **descriptor);") cpp_quote("HRESULT WINAPI MFCreateSystemTimeSource(IMFPresentationTimeSource **time_source);") @@ -738,6 +739,29 @@ interface IMFShutdown : IUnknown HRESULT GetShutdownStatus([out] MFSHUTDOWN_STATUS *status); }
+[ + object, + uuid(8d009d86-5b9f-4115-b1fc-9f80d52ab8ab), + local +] +interface IMFQualityManager : IUnknown +{ + HRESULT NotifyTopology([in] IMFTopology *topology); + HRESULT NotifyPresentationClock([in] IMFPresentationClock *clock); + HRESULT NotifyProcessInput( + [in] IMFTopologyNode *node, + [in] LONG input_index, + [in] IMFSample *sample); + HRESULT NotifyProcessOutput( + [in] IMFTopologyNode *node, + [in] LONG output_index, + [in] IMFSample *sample); + HRESULT NotifyQualityEvent( + [in] IUnknown *object, + [in] IMFMediaEvent *event); + HRESULT Shutdown(); +} + cpp_quote("#define MF_RESOLUTION_MEDIASOURCE 0x00000001") cpp_quote("#define MF_RESOLUTION_BYTESTREAM 0x00000002") cpp_quote("#define MF_RESOLUTION_CONTENT_DOES_NOT_HAVE_TO_MATCH_EXTENSION_OR_MIME_TYPE 0x00000010")
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=56838
Your paranoid android.
=== wvistau64 (32 bit report) ===
mf: mf.c:917: Test failed: Unexpected hr 0xc00d36da. mf.c:921: Test failed: Unexpected hr 0. mf.c:937: Test failed: Unexpected return value 0x102.
=== wvistau64_zh_CN (32 bit report) ===
mf: mf.c:917: Test failed: Unexpected hr 0xc00d36da. mf.c:921: Test failed: Unexpected hr 0. mf.c:937: Test failed: Unexpected return value 0x102.
=== wvistau64_fr (32 bit report) ===
mf: mf.c:917: Test failed: Unexpected hr 0xc00d36da. mf.c:921: Test failed: Unexpected hr 0. mf.c:937: Test failed: Unexpected return value 0x102.
=== wvistau64_he (32 bit report) ===
mf: mf.c:917: Test failed: Unexpected hr 0xc00d36da. mf.c:921: Test failed: Unexpected hr 0. mf.c:937: Test failed: Unexpected return value 0x102.
=== w8 (32 bit report) ===
mf: mf.c:921: Test failed: Unexpected hr 0. mf.c:937: Test failed: Unexpected return value 0x102.
=== w1064v1507 (32 bit report) ===
mf: mf.c:917: Test failed: Unexpected hr 0xc00d36da. mf.c:937: Test failed: Unexpected return value 0x102.
That's some valid failures, but unrelated to new patches.
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/mf/session.c | 20 ++++++++++++++++++++ dlls/mf/tests/mf.c | 14 ++++++++++++++ 2 files changed, 34 insertions(+)
diff --git a/dlls/mf/session.c b/dlls/mf/session.c index ecee112c3f..89128b7b6a 100644 --- a/dlls/mf/session.c +++ b/dlls/mf/session.c @@ -69,6 +69,7 @@ struct media_session IMFMediaEventQueue *event_queue; IMFPresentationClock *clock; IMFRateControl *clock_rate_control; + IMFTopoLoader *topo_loader; struct list topologies; enum session_state state; CRITICAL_SECTION cs; @@ -329,6 +330,8 @@ static ULONG WINAPI mfsession_Release(IMFMediaSession *iface) IMFPresentationClock_Release(session->clock); if (session->clock_rate_control) IMFRateControl_Release(session->clock_rate_control); + if (session->topo_loader) + IMFTopoLoader_Release(session->topo_loader); DeleteCriticalSection(&session->cs); heap_free(session); } @@ -791,6 +794,23 @@ HRESULT WINAPI MFCreateMediaSession(IMFAttributes *config, IMFMediaSession **ses goto failed; }
+ if (config) + { + GUID clsid; + + if (SUCCEEDED(IMFAttributes_GetGUID(config, &MF_SESSION_TOPOLOADER, &clsid))) + { + if (FAILED(hr = CoCreateInstance(&clsid, NULL, CLSCTX_INPROC_SERVER, &IID_IMFTopoLoader, + (void **)&object->topo_loader))) + { + WARN("Failed to create custom topology loader, hr %#x.\n", hr); + } + } + } + + if (!object->topo_loader && FAILED(hr = MFCreateTopoLoader(&object->topo_loader))) + goto failed; + *session = &object->IMFMediaSession_iface;
return S_OK; diff --git a/dlls/mf/tests/mf.c b/dlls/mf/tests/mf.c index 00dc2daed5..64329846cd 100644 --- a/dlls/mf/tests/mf.c +++ b/dlls/mf/tests/mf.c @@ -954,6 +954,7 @@ static void test_media_session(void) IMFRateControl *rate_control, *rate_control2; MFCLOCK_PROPERTIES clock_props; IMFRateSupport *rate_support; + IMFAttributes *attributes; IMFMediaSession *session; IMFGetService *gs; IMFClock *clock; @@ -1043,6 +1044,19 @@ todo_wine
IMFMediaSession_Release(session);
+ /* Custom topology loader, GUID is not registered. */ + hr = MFCreateAttributes(&attributes, 1); + ok(hr == S_OK, "Failed to create attributes, hr %#x.\n", hr); + + hr = IMFAttributes_SetGUID(attributes, &MF_SESSION_TOPOLOADER, &MF_SESSION_TOPOLOADER); + ok(hr == S_OK, "Failed to set attribute, hr %#x.\n", hr); + + hr = MFCreateMediaSession(attributes, &session); + ok(hr == S_OK, "Failed to create media session, hr %#x.\n", hr); + IMFMediaSession_Release(session); + + IMFAttributes_Release(attributes); + hr = MFShutdown(); ok(hr == S_OK, "Shutdown failure, hr %#x.\n", hr); }
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=56839
Your paranoid android.
=== wvistau64 (32 bit report) ===
mf: mf.c:917: Test failed: Unexpected hr 0xc00d36da. mf.c:921: Test failed: Unexpected hr 0. mf.c:937: Test failed: Unexpected return value 0x102.
=== wvistau64_zh_CN (32 bit report) ===
mf: mf.c:917: Test failed: Unexpected hr 0xc00d36da. mf.c:921: Test failed: Unexpected hr 0. mf.c:937: Test failed: Unexpected return value 0x102.
=== wvistau64_he (32 bit report) ===
mf: mf.c:917: Test failed: Unexpected hr 0xc00d36da. mf.c:921: Test failed: Unexpected hr 0. mf.c:937: Test failed: Unexpected return value 0x102.
=== w7u (32 bit report) ===
mf: mf.c:917: Test failed: Unexpected hr 0xc00d36da.
=== w7pro64 (32 bit report) ===
mf: mf.c:917: Test failed: Unexpected hr 0.
=== w1064v1507 (32 bit report) ===
mf: mf.c:917: Test failed: Unexpected hr 0xc00d36da. mf.c:937: Test failed: Unexpected return value 0x102.
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/mf/session.c | 22 ++++++++++++++++++++++ dlls/mf/tests/mf.c | 8 ++++++++ 2 files changed, 30 insertions(+)
diff --git a/dlls/mf/session.c b/dlls/mf/session.c index 89128b7b6a..9042c1288a 100644 --- a/dlls/mf/session.c +++ b/dlls/mf/session.c @@ -70,6 +70,7 @@ struct media_session IMFPresentationClock *clock; IMFRateControl *clock_rate_control; IMFTopoLoader *topo_loader; + IMFQualityManager *quality_manager; struct list topologies; enum session_state state; CRITICAL_SECTION cs; @@ -332,6 +333,8 @@ static ULONG WINAPI mfsession_Release(IMFMediaSession *iface) IMFRateControl_Release(session->clock_rate_control); if (session->topo_loader) IMFTopoLoader_Release(session->topo_loader); + if (session->quality_manager) + IMFQualityManager_Release(session->quality_manager); DeleteCriticalSection(&session->cs); heap_free(session); } @@ -761,6 +764,7 @@ static const IMFRateControlVtbl session_rate_control_vtbl = */ HRESULT WINAPI MFCreateMediaSession(IMFAttributes *config, IMFMediaSession **session) { + BOOL without_quality_manager = FALSE; struct media_session *object; HRESULT hr;
@@ -806,11 +810,29 @@ HRESULT WINAPI MFCreateMediaSession(IMFAttributes *config, IMFMediaSession **ses WARN("Failed to create custom topology loader, hr %#x.\n", hr); } } + + if (SUCCEEDED(IMFAttributes_GetGUID(config, &MF_SESSION_QUALITY_MANAGER, &clsid))) + { + if (!(without_quality_manager = IsEqualGUID(&clsid, &GUID_NULL))) + { + if (FAILED(hr = CoCreateInstance(&clsid, NULL, CLSCTX_INPROC_SERVER, &IID_IMFQualityManager, + (void **)&object->quality_manager))) + { + WARN("Failed to create custom quality manager, hr %#x.\n", hr); + } + } + } }
if (!object->topo_loader && FAILED(hr = MFCreateTopoLoader(&object->topo_loader))) goto failed;
+ if (!object->quality_manager && !without_quality_manager && + FAILED(hr = MFCreateStandardQualityManager(&object->quality_manager))) + { + goto failed; + } + *session = &object->IMFMediaSession_iface;
return S_OK; diff --git a/dlls/mf/tests/mf.c b/dlls/mf/tests/mf.c index 64329846cd..4eba79e120 100644 --- a/dlls/mf/tests/mf.c +++ b/dlls/mf/tests/mf.c @@ -1055,6 +1055,14 @@ todo_wine ok(hr == S_OK, "Failed to create media session, hr %#x.\n", hr); IMFMediaSession_Release(session);
+ /* Disabled quality manager. */ + hr = IMFAttributes_SetGUID(attributes, &MF_SESSION_QUALITY_MANAGER, &GUID_NULL); + ok(hr == S_OK, "Failed to set attribute, hr %#x.\n", hr); + + hr = MFCreateMediaSession(attributes, &session); + ok(hr == S_OK, "Failed to create media session, hr %#x.\n", hr); + IMFMediaSession_Release(session); + IMFAttributes_Release(attributes);
hr = MFShutdown();
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=56840
Your paranoid android.
=== wvistau64_zh_CN (32 bit report) ===
mf: mf.c:917: Test failed: Unexpected hr 0xc00d36da. mf.c:921: Test failed: Unexpected hr 0. mf.c:937: Test failed: Unexpected return value 0x102.
=== wvistau64_fr (32 bit report) ===
mf: mf.c:917: Test failed: Unexpected hr 0xc00d36da. mf.c:921: Test failed: Unexpected hr 0. mf.c:937: Test failed: Unexpected return value 0x102.
=== wvistau64_he (32 bit report) ===
mf: mf.c:917: Test failed: Unexpected hr 0xc00d36da. mf.c:921: Test failed: Unexpected hr 0. mf.c:937: Test failed: Unexpected return value 0x102.
=== w7u (32 bit report) ===
mf: mf.c:917: Test failed: Unexpected hr 0xc00d36da.
=== w8 (32 bit report) ===
mf: mf.c:921: Test failed: Unexpected hr 0. mf.c:937: Test failed: Unexpected return value 0x102.
=== w1064v1507 (32 bit report) ===
mf: mf.c:917: Test failed: Unexpected hr 0xc00d36da. mf.c:937: Test failed: Unexpected return value 0x102.
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/mf/session.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/dlls/mf/session.c b/dlls/mf/session.c index 9042c1288a..6fdf773702 100644 --- a/dlls/mf/session.c +++ b/dlls/mf/session.c @@ -768,10 +768,7 @@ HRESULT WINAPI MFCreateMediaSession(IMFAttributes *config, IMFMediaSession **ses struct media_session *object; HRESULT hr;
- TRACE("(%p, %p)\n", config, session); - - if (config) - FIXME("session configuration ignored\n"); + TRACE("%p, %p.\n", config, session);
object = heap_alloc_zero(sizeof(*object)); if (!object)