[PATCH v3 1/5] mfplat: Remove fallback media source.

Derek Lesho dlesho at codeweavers.com
Thu Aug 27 13:22:12 CDT 2020


Signed-off-by: Derek Lesho <dlesho at codeweavers.com>
---
v3: 
  - Split up stub media source patch.
  - Add this patch to simply tests.
  - Add newlines to end of files.
---
 dlls/mfplat/main.c         | 207 +------------------------------------
 dlls/mfplat/tests/mfplat.c | 106 +++++++++++--------
 2 files changed, 64 insertions(+), 249 deletions(-)

diff --git a/dlls/mfplat/main.c b/dlls/mfplat/main.c
index 6cd409d63b7..ea1b1770e15 100644
--- a/dlls/mfplat/main.c
+++ b/dlls/mfplat/main.c
@@ -5679,188 +5679,6 @@ HRESULT WINAPI MFGetPluginControl(IMFPluginControl **ret)
     return S_OK;
 }
 
-typedef struct _mfsource
-{
-    IMFMediaSource IMFMediaSource_iface;
-    LONG ref;
-} mfsource;
-
-static inline mfsource *impl_from_IMFMediaSource(IMFMediaSource *iface)
-{
-    return CONTAINING_RECORD(iface, mfsource, IMFMediaSource_iface);
-}
-
-static HRESULT WINAPI mfsource_QueryInterface(IMFMediaSource *iface, REFIID riid, void **out)
-{
-    mfsource *This = impl_from_IMFMediaSource(iface);
-
-    TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), out);
-
-    if (IsEqualIID(riid, &IID_IMFMediaSource) ||
-        IsEqualIID(riid, &IID_IMFMediaEventGenerator) ||
-        IsEqualIID(riid, &IID_IUnknown))
-    {
-        *out = &This->IMFMediaSource_iface;
-    }
-    else
-    {
-        FIXME("(%s, %p)\n", debugstr_guid(riid), out);
-        *out = NULL;
-        return E_NOINTERFACE;
-    }
-
-    IUnknown_AddRef((IUnknown*)*out);
-    return S_OK;
-}
-
-static ULONG WINAPI mfsource_AddRef(IMFMediaSource *iface)
-{
-    mfsource *This = impl_from_IMFMediaSource(iface);
-    ULONG ref = InterlockedIncrement(&This->ref);
-
-    TRACE("(%p) ref=%u\n", This, ref);
-
-    return ref;
-}
-
-static ULONG WINAPI mfsource_Release(IMFMediaSource *iface)
-{
-    mfsource *This = impl_from_IMFMediaSource(iface);
-    ULONG ref = InterlockedDecrement(&This->ref);
-
-    TRACE("(%p) ref=%u\n", This, ref);
-
-    if (!ref)
-    {
-        HeapFree(GetProcessHeap(), 0, This);
-    }
-
-    return ref;
-}
-
-static HRESULT WINAPI mfsource_GetEvent(IMFMediaSource *iface, DWORD flags, IMFMediaEvent **event)
-{
-    mfsource *This = impl_from_IMFMediaSource(iface);
-
-    FIXME("(%p)->(%#x, %p)\n", This, flags, event);
-
-    return E_NOTIMPL;
-}
-
-static HRESULT WINAPI mfsource_BeginGetEvent(IMFMediaSource *iface, IMFAsyncCallback *callback, IUnknown *state)
-{
-    mfsource *This = impl_from_IMFMediaSource(iface);
-
-    FIXME("(%p)->(%p, %p)\n", This, callback, state);
-
-    return E_NOTIMPL;
-}
-
-static HRESULT WINAPI mfsource_EndGetEvent(IMFMediaSource *iface, IMFAsyncResult *result, IMFMediaEvent **event)
-{
-    mfsource *This = impl_from_IMFMediaSource(iface);
-
-    FIXME("(%p)->(%p, %p)\n", This, result, event);
-
-    return E_NOTIMPL;
-}
-
-static HRESULT WINAPI mfsource_QueueEvent(IMFMediaSource *iface, MediaEventType event_type, REFGUID ext_type,
-        HRESULT hr, const PROPVARIANT *value)
-{
-    mfsource *This = impl_from_IMFMediaSource(iface);
-
-    FIXME("(%p)->(%d, %s, %#x, %p)\n", This, event_type, debugstr_guid(ext_type), hr, value);
-
-    return E_NOTIMPL;
-}
-
-static HRESULT WINAPI mfsource_GetCharacteristics(IMFMediaSource *iface, DWORD *characteristics)
-{
-    mfsource *This = impl_from_IMFMediaSource(iface);
-
-    FIXME("(%p)->(%p): stub\n", This, characteristics);
-
-    return E_NOTIMPL;
-}
-
-static HRESULT WINAPI mfsource_CreatePresentationDescriptor(IMFMediaSource *iface, IMFPresentationDescriptor **descriptor)
-{
-    mfsource *This = impl_from_IMFMediaSource(iface);
-    IMFStreamDescriptor *sd;
-    IMFMediaType *mediatype;
-    HRESULT hr;
-
-    FIXME("(%p)->(%p): stub\n", This, descriptor);
-
-    if (FAILED(hr = MFCreateMediaType(&mediatype)))
-        return hr;
-
-    hr = MFCreateStreamDescriptor(0, 1, &mediatype, &sd);
-    IMFMediaType_Release(mediatype);
-    if (FAILED(hr))
-        return hr;
-
-    hr = MFCreatePresentationDescriptor(1, &sd, descriptor);
-    IMFStreamDescriptor_Release(sd);
-
-    return hr;
-}
-
-static HRESULT WINAPI mfsource_Start(IMFMediaSource *iface, IMFPresentationDescriptor *descriptor,
-                                     const GUID *time_format, const PROPVARIANT *start_position)
-{
-    mfsource *This = impl_from_IMFMediaSource(iface);
-
-    FIXME("(%p)->(%p, %p, %p): stub\n", This, descriptor, time_format, start_position);
-
-    return E_NOTIMPL;
-}
-
-static HRESULT WINAPI mfsource_Stop(IMFMediaSource *iface)
-{
-    mfsource *This = impl_from_IMFMediaSource(iface);
-
-    FIXME("(%p): stub\n", This);
-
-    return E_NOTIMPL;
-}
-
-static HRESULT WINAPI mfsource_Pause(IMFMediaSource *iface)
-{
-    mfsource *This = impl_from_IMFMediaSource(iface);
-
-    FIXME("(%p): stub\n", This);
-
-    return E_NOTIMPL;
-}
-
-static HRESULT WINAPI mfsource_Shutdown(IMFMediaSource *iface)
-{
-    mfsource *This = impl_from_IMFMediaSource(iface);
-
-    FIXME("(%p): stub\n", This);
-
-    return S_OK;
-}
-
-static const IMFMediaSourceVtbl mfsourcevtbl =
-{
-    mfsource_QueryInterface,
-    mfsource_AddRef,
-    mfsource_Release,
-    mfsource_GetEvent,
-    mfsource_BeginGetEvent,
-    mfsource_EndGetEvent,
-    mfsource_QueueEvent,
-    mfsource_GetCharacteristics,
-    mfsource_CreatePresentationDescriptor,
-    mfsource_Start,
-    mfsource_Stop,
-    mfsource_Pause,
-    mfsource_Shutdown,
-};
-
 enum resolved_object_origin
 {
     OBJECT_FROM_BYTESTREAM,
@@ -6505,7 +6323,7 @@ static HRESULT WINAPI source_resolver_CreateObjectFromByteStream(IMFSourceResolv
         return E_POINTER;
 
     if (FAILED(hr = resolver_get_bytestream_handler(stream, url, flags, &handler)))
-        goto fallback;
+        return MF_E_UNSUPPORTED_BYTESTREAM_TYPE;
 
     hr = RtwqCreateAsyncResult((IUnknown *)handler, NULL, NULL, &result);
     IMFByteStreamHandler_Release(handler);
@@ -6528,28 +6346,7 @@ static HRESULT WINAPI source_resolver_CreateObjectFromByteStream(IMFSourceResolv
     hr = resolver_end_create_object(resolver, OBJECT_FROM_BYTESTREAM, result, obj_type, object);
     IRtwqAsyncResult_Release(result);
 
-    /* TODO: following stub is left intentionally until real source plugins are implemented.  */
-    if (SUCCEEDED(hr))
-        return hr;
-
-fallback:
-    if (flags & MF_RESOLUTION_MEDIASOURCE)
-    {
-        mfsource *new_object;
-
-        new_object = HeapAlloc( GetProcessHeap(), 0, sizeof(*new_object) );
-        if (!new_object)
-            return E_OUTOFMEMORY;
-
-        new_object->IMFMediaSource_iface.lpVtbl = &mfsourcevtbl;
-        new_object->ref = 1;
-
-        *object = (IUnknown *)&new_object->IMFMediaSource_iface;
-        *obj_type = MF_OBJECT_MEDIASOURCE;
-        return S_OK;
-    }
-
-    return E_NOTIMPL;
+    return hr;
 }
 
 static HRESULT WINAPI source_resolver_BeginCreateObjectFromURL(IMFSourceResolver *iface, const WCHAR *url,
diff --git a/dlls/mfplat/tests/mfplat.c b/dlls/mfplat/tests/mfplat.c
index 01749dd9ef8..fa90f1e4bac 100644
--- a/dlls/mfplat/tests/mfplat.c
+++ b/dlls/mfplat/tests/mfplat.c
@@ -382,12 +382,16 @@ static HRESULT WINAPI test_create_from_file_handler_callback_Invoke(IMFAsyncCall
     handler = (IMFSchemeHandler *)IMFAsyncResult_GetStateNoAddRef(result);
 
     hr = IMFSchemeHandler_EndCreateObject(handler, result, &obj_type, &object);
+todo_wine
     ok(hr == S_OK, "Failed to create an object, hr %#x.\n", hr);
 
-    hr = IMFAsyncResult_GetObject(result, &object2);
-    ok(hr == E_POINTER, "Unexpected hr %#x.\n", hr);
+    if (SUCCEEDED(hr))
+    {
+        hr = IMFAsyncResult_GetObject(result, &object2);
+        ok(hr == E_POINTER, "Unexpected hr %#x.\n", hr);
 
-    IUnknown_Release(object);
+        IUnknown_Release(object);
+    }
 
     SetEvent(callback->event);
 
@@ -502,13 +506,43 @@ static void test_source_resolver(void)
 
     hr = IMFSourceResolver_CreateObjectFromByteStream(resolver, stream, NULL, MF_RESOLUTION_MEDIASOURCE, NULL,
             &obj_type, (IUnknown **)&mediasource);
-    todo_wine ok(hr == MF_E_UNSUPPORTED_BYTESTREAM_TYPE, "got 0x%08x\n", hr);
+    ok(hr == MF_E_UNSUPPORTED_BYTESTREAM_TYPE, "got 0x%08x\n", hr);
     if (hr == S_OK) IMFMediaSource_Release(mediasource);
 
     hr = IMFSourceResolver_CreateObjectFromByteStream(resolver, stream, NULL, MF_RESOLUTION_BYTESTREAM, NULL,
             &obj_type, (IUnknown **)&mediasource);
-    todo_wine ok(hr == MF_E_UNSUPPORTED_BYTESTREAM_TYPE, "got 0x%08x\n", hr);
+    ok(hr == MF_E_UNSUPPORTED_BYTESTREAM_TYPE, "got 0x%08x\n", hr);
+
+    IMFByteStream_Release(stream);
+
+    /* Create from URL. */
+    callback.event = CreateEventA(NULL, FALSE, FALSE, NULL);
+
+    hr = IMFSourceResolver_CreateObjectFromURL(resolver, L"nonexisting.mp4", MF_RESOLUTION_BYTESTREAM, NULL, &obj_type,
+            (IUnknown **)&stream);
+    ok(hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND), "Unexpected hr %#x.\n", hr);
+
+    hr = IMFSourceResolver_CreateObjectFromURL(resolver, filename, MF_RESOLUTION_BYTESTREAM, NULL, &obj_type,
+            (IUnknown **)&stream);
+    ok(hr == S_OK, "Failed to resolve url, hr %#x.\n", hr);
+    IMFByteStream_Release(stream);
+
+    hr = IMFSourceResolver_BeginCreateObjectFromURL(resolver, filename, MF_RESOLUTION_BYTESTREAM, NULL,
+            &cancel_cookie, &callback.IMFAsyncCallback_iface, (IUnknown *)resolver);
+    ok(hr == S_OK, "Create request failed, hr %#x.\n", hr);
+    ok(cancel_cookie != NULL, "Unexpected cancel object.\n");
+    IUnknown_Release(cancel_cookie);
+
+    if (SUCCEEDED(hr))
+        WaitForSingleObject(callback.event, INFINITE);
+
+    /* With explicit scheme. */
+    lstrcpyW(pathW, fileschemeW);
+    lstrcatW(pathW, filename);
 
+    hr = IMFSourceResolver_CreateObjectFromURL(resolver, pathW, MF_RESOLUTION_BYTESTREAM, NULL, &obj_type,
+            (IUnknown **)&stream);
+    ok(hr == S_OK, "Failed to resolve url, hr %#x.\n", hr);
     IMFByteStream_Release(stream);
 
     /* We have to create a new bytestream here, because all following
@@ -522,14 +556,31 @@ static void test_source_resolver(void)
     ok(hr == S_OK, "Failed to set string value, hr %#x.\n", hr);
     IMFAttributes_Release(attributes);
 
+    /* Start of gstreamer dependent tests */
+
     hr = IMFSourceResolver_CreateObjectFromByteStream(resolver, stream, NULL, MF_RESOLUTION_MEDIASOURCE, NULL,
             &obj_type, (IUnknown **)&mediasource);
-    ok(hr == S_OK, "got 0x%08x\n", hr);
+    if (strcmp(winetest_platform, "wine"))
+        ok(hr == S_OK, "got 0x%08x\n", hr);
+    if (FAILED(hr))
+    {
+        IMFByteStream_Release(stream);
+        IMFSourceResolver_Release(resolver);
+
+        hr = MFShutdown();
+        ok(hr == S_OK, "Failed to shut down, hr %#x.\n", hr);
+
+        DeleteFileW(filename);
+        return;
+    }
     ok(mediasource != NULL, "got %p\n", mediasource);
     ok(obj_type == MF_OBJECT_MEDIASOURCE, "got %d\n", obj_type);
 
     hr = IMFMediaSource_CreatePresentationDescriptor(mediasource, &descriptor);
+todo_wine
     ok(hr == S_OK, "Failed to get presentation descriptor, hr %#x.\n", hr);
+    if (FAILED(hr))
+        goto skip_source_tests;
     ok(descriptor != NULL, "got %p\n", descriptor);
 
     hr = IMFPresentationDescriptor_GetStreamDescriptorByIndex(descriptor, 0, &selected, &sd);
@@ -540,10 +591,7 @@ static void test_source_resolver(void)
     IMFStreamDescriptor_Release(sd);
 
     hr = IMFMediaTypeHandler_GetMajorType(handler, &guid);
-todo_wine
     ok(hr == S_OK, "Failed to get stream major type, hr %#x.\n", hr);
-    if (FAILED(hr))
-        goto skip_source_tests;
 
     /* Check major/minor type for the test media. */
     ok(IsEqualGUID(&guid, &MFMediaType_Video), "Unexpected major type %s.\n", debugstr_guid(&guid));
@@ -624,6 +672,7 @@ todo_wine
     get_event((IMFMediaEventGenerator *)mediasource, MEEndOfPresentation, NULL);
 
     IMFMediaTypeHandler_Release(handler);
+    IMFPresentationDescriptor_Release(descriptor);
 
     hr = IMFMediaSource_Shutdown(mediasource);
     ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
@@ -633,42 +682,9 @@ todo_wine
 
 skip_source_tests:
 
-    IMFPresentationDescriptor_Release(descriptor);
     IMFMediaSource_Release(mediasource);
     IMFByteStream_Release(stream);
 
-    /* Create from URL. */
-    callback.event = CreateEventA(NULL, FALSE, FALSE, NULL);
-
-    hr = IMFSourceResolver_CreateObjectFromURL(resolver, L"nonexisting.mp4", MF_RESOLUTION_BYTESTREAM, NULL, &obj_type,
-            (IUnknown **)&stream);
-    ok(hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND), "Unexpected hr %#x.\n", hr);
-
-    hr = IMFSourceResolver_CreateObjectFromURL(resolver, filename, MF_RESOLUTION_BYTESTREAM, NULL, &obj_type,
-            (IUnknown **)&stream);
-    ok(hr == S_OK, "Failed to resolve url, hr %#x.\n", hr);
-    IMFByteStream_Release(stream);
-
-    hr = IMFSourceResolver_BeginCreateObjectFromURL(resolver, filename, MF_RESOLUTION_BYTESTREAM, NULL,
-            &cancel_cookie, &callback.IMFAsyncCallback_iface, (IUnknown *)resolver);
-    ok(hr == S_OK, "Create request failed, hr %#x.\n", hr);
-    ok(cancel_cookie != NULL, "Unexpected cancel object.\n");
-    IUnknown_Release(cancel_cookie);
-
-    if (SUCCEEDED(hr))
-        WaitForSingleObject(callback.event, INFINITE);
-
-    /* With explicit scheme. */
-    lstrcpyW(pathW, fileschemeW);
-    lstrcatW(pathW, filename);
-
-    hr = IMFSourceResolver_CreateObjectFromURL(resolver, pathW, MF_RESOLUTION_BYTESTREAM, NULL, &obj_type,
-            (IUnknown **)&stream);
-    ok(hr == S_OK, "Failed to resolve url, hr %#x.\n", hr);
-    IMFByteStream_Release(stream);
-
-    IMFSourceResolver_Release(resolver);
-
     /* Create directly through scheme handler. */
     hr = CoInitialize(NULL);
     ok(SUCCEEDED(hr), "Failed to initialize, hr %#x.\n", hr);
@@ -693,12 +709,14 @@ skip_source_tests:
     if (do_uninit)
         CoUninitialize();
 
+    CloseHandle(callback.event);
+
+    IMFSourceResolver_Release(resolver);
+
     hr = MFShutdown();
     ok(hr == S_OK, "Failed to shut down, hr %#x.\n", hr);
 
     DeleteFileW(filename);
-
-    CloseHandle(callback.event);
 }
 
 static void init_functions(void)
-- 
2.28.0




More information about the wine-devel mailing list