From: Rémi Bernon <rbernon@codeweavers.com> --- dlls/mfplat/main.c | 10 +++++----- dlls/mfsrcsnk/factory.c | 4 ++++ dlls/mfsrcsnk/media_source.c | 18 ++++++++++++++++++ dlls/mfsrcsnk/media_source.h | 1 + dlls/mfsrcsnk/mfsrcsnk.idl | 7 +++++++ 5 files changed, 35 insertions(+), 5 deletions(-) diff --git a/dlls/mfplat/main.c b/dlls/mfplat/main.c index 01d9d2ddd89..a0c99c9365c 100644 --- a/dlls/mfplat/main.c +++ b/dlls/mfplat/main.c @@ -6298,10 +6298,10 @@ static HRESULT resolver_get_bytestream_url_hint(IMFByteStream *stream, WCHAR con return S_OK; } -static HRESULT resolver_create_gstreamer_handler(IMFByteStreamHandler **handler) +static HRESULT resolver_create_generic_handler(IMFByteStreamHandler **handler) { - static const GUID CLSID_GStreamerByteStreamHandler = {0x317df618, 0x5e5a, 0x468a, {0x9f, 0x15, 0xd8, 0x27, 0xa9, 0xa0, 0x81, 0x62}}; - return CoCreateInstance(&CLSID_GStreamerByteStreamHandler, NULL, CLSCTX_INPROC_SERVER, &IID_IMFByteStreamHandler, (void **)handler); + static const GUID CLSID_WineByteStreamPlugin = {0x3f6eb6c1,0xea89,0x4312,{0x85,0x04,0x8d,0x82,0x10,0xbb,0xf8,0x8c}}; + return CoCreateInstance(&CLSID_WineByteStreamPlugin, NULL, CLSCTX_INPROC_SERVER, &IID_IMFByteStreamHandler, (void **)handler); } static HRESULT resolver_get_bytestream_handler(IMFByteStream *stream, const WCHAR *url, DWORD flags, @@ -6342,7 +6342,7 @@ static HRESULT resolver_get_bytestream_handler(IMFByteStream *stream, const WCHA hr = resolver_create_bytestream_handler(stream, flags, mimeW, url_ext, handler); if (FAILED(hr)) - hr = resolver_create_gstreamer_handler(handler); + hr = resolver_create_generic_handler(handler); } CoTaskMemFree(mimeW); @@ -6360,7 +6360,7 @@ static HRESULT resolver_get_bytestream_handler(IMFByteStream *stream, const WCHA hr = resolver_create_bytestream_handler(stream, flags, NULL, url_ext, handler); if (FAILED(hr)) - hr = resolver_create_gstreamer_handler(handler); + hr = resolver_create_generic_handler(handler); return hr; } diff --git a/dlls/mfsrcsnk/factory.c b/dlls/mfsrcsnk/factory.c index d8fe4268feb..b653c51a1e0 100644 --- a/dlls/mfsrcsnk/factory.c +++ b/dlls/mfsrcsnk/factory.c @@ -27,6 +27,8 @@ WINE_DEFAULT_DEBUG_CHANNEL(mfplat); */ HRESULT WINAPI DllGetClassObject(REFCLSID clsid, REFIID riid, void **out) { + static const GUID CLSID_WineByteStreamPlugin = {0x3f6eb6c1,0xea89,0x4312,{0x85,0x04,0x8d,0x82,0x10,0xbb,0xf8,0x8c}}; + *out = NULL; if (IsEqualGUID(clsid, &CLSID_AVIByteStreamPlugin)) @@ -35,6 +37,8 @@ HRESULT WINAPI DllGetClassObject(REFCLSID clsid, REFIID riid, void **out) return IClassFactory_QueryInterface(&wav_byte_stream_plugin_factory, riid, out); if (IsEqualGUID(clsid, &CLSID_MP3ByteStreamPlugin)) return IClassFactory_QueryInterface(&mp3_byte_stream_plugin_factory, riid, out); + if (IsEqualGUID(clsid, &CLSID_WineByteStreamPlugin)) + return IClassFactory_QueryInterface(&wine_byte_stream_plugin_factory, riid, out); if (IsEqualGUID(clsid, &CLSID_MFWAVESinkClassFactory)) return IClassFactory_QueryInterface(wave_sink_class_factory, riid, out); diff --git a/dlls/mfsrcsnk/media_source.c b/dlls/mfsrcsnk/media_source.c index 53bb00fb64a..1f506082565 100644 --- a/dlls/mfsrcsnk/media_source.c +++ b/dlls/mfsrcsnk/media_source.c @@ -2190,3 +2190,21 @@ static const IClassFactoryVtbl mp3_byte_stream_plugin_factory_vtbl = }; IClassFactory mp3_byte_stream_plugin_factory = {&mp3_byte_stream_plugin_factory_vtbl}; + +static HRESULT WINAPI wine_byte_stream_plugin_factory_CreateInstance(IClassFactory *iface, + IUnknown *outer, REFIID riid, void **out) +{ + const struct winedmo_demuxer_funcs *funcs = get_winedmo_demuxer_funcs("application/octet-stream"); + return byte_stream_plugin_create(funcs, outer, riid, out); +} + +static const IClassFactoryVtbl wine_byte_stream_plugin_factory_vtbl = +{ + class_factory_QueryInterface, + class_factory_AddRef, + class_factory_Release, + wine_byte_stream_plugin_factory_CreateInstance, + class_factory_LockServer, +}; + +IClassFactory wine_byte_stream_plugin_factory = {&wine_byte_stream_plugin_factory_vtbl}; diff --git a/dlls/mfsrcsnk/media_source.h b/dlls/mfsrcsnk/media_source.h index 7703e7634ec..3712493678c 100644 --- a/dlls/mfsrcsnk/media_source.h +++ b/dlls/mfsrcsnk/media_source.h @@ -25,3 +25,4 @@ extern IClassFactory avi_byte_stream_plugin_factory; extern IClassFactory mpeg4_byte_stream_plugin_factory; extern IClassFactory wav_byte_stream_plugin_factory; extern IClassFactory mp3_byte_stream_plugin_factory; +extern IClassFactory wine_byte_stream_plugin_factory; diff --git a/dlls/mfsrcsnk/mfsrcsnk.idl b/dlls/mfsrcsnk/mfsrcsnk.idl index e6473b355e9..573290b5b9a 100644 --- a/dlls/mfsrcsnk/mfsrcsnk.idl +++ b/dlls/mfsrcsnk/mfsrcsnk.idl @@ -45,3 +45,10 @@ coclass WAVByteStreamPlugin {} uuid(a82e50ba-8e92-41eb-9df2-433f50ec2993) ] coclass MP3ByteStreamPlugin {} + +[ + helpstring("Wine Byte Stream Handler"), + threading(both), + uuid(3f6eb6c1-ea89-4312-8504-8d8210bbf88c) +] +coclass WineByteStreamPlugin {} -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/9913