On 12/2/20 1:54 PM, Derek Lesho wrote:
Signed-off-by: Derek Lesho dlesho@codeweavers.com
dlls/winegstreamer/gst_private.h | 1 + dlls/winegstreamer/main.c | 3 +- dlls/winegstreamer/mfplat.c | 48 ++++++++++++++++++++++++++++++++ 3 files changed, 51 insertions(+), 1 deletion(-)
diff --git a/dlls/winegstreamer/gst_private.h b/dlls/winegstreamer/gst_private.h index 28e424439d8..9752b242ad6 100644 --- a/dlls/winegstreamer/gst_private.h +++ b/dlls/winegstreamer/gst_private.h @@ -76,6 +76,7 @@ BOOL init_gstreamer(void) DECLSPEC_HIDDEN; void start_dispatch_thread(void) DECLSPEC_HIDDEN;
extern HRESULT mfplat_get_class_object(REFCLSID rclsid, REFIID riid, void **obj) DECLSPEC_HIDDEN; +extern HRESULT mfplat_DllRegisterServer(void) DECLSPEC_HIDDEN;
HRESULT winegstreamer_stream_handler_create(REFIID riid, void **obj) DECLSPEC_HIDDEN; IMFMediaType *mf_media_type_from_caps(const GstCaps *caps) DECLSPEC_HIDDEN; diff --git a/dlls/winegstreamer/main.c b/dlls/winegstreamer/main.c index 4ca371d58bd..385c5550235 100644 --- a/dlls/winegstreamer/main.c +++ b/dlls/winegstreamer/main.c @@ -368,7 +368,8 @@ HRESULT WINAPI DllRegisterServer(void) IFilterMapper2_RegisterFilter(mapper, &CLSID_WAVEParser, wave_parserW, NULL, NULL, NULL, ®_wave_parser);
IFilterMapper2_Release(mapper);
- return S_OK;
- return mfplat_DllRegisterServer();
}
HRESULT WINAPI DllUnregisterServer(void) diff --git a/dlls/winegstreamer/mfplat.c b/dlls/winegstreamer/mfplat.c index c5b133c824e..9d5a7e0427e 100644 --- a/dlls/winegstreamer/mfplat.c +++ b/dlls/winegstreamer/mfplat.c @@ -442,6 +442,54 @@ HRESULT mfplat_get_class_object(REFCLSID rclsid, REFIID riid, void **obj) return CLASS_E_CLASSNOTAVAILABLE; }
+static const struct mft +{
- const GUID *clsid;
- const GUID *category;
- LPWSTR name;
- const UINT32 flags;
- const GUID *major_type;
- const UINT32 input_types_count;
- const GUID **input_types;
- const UINT32 output_types_count;
- const GUID **output_types;
- IMFAttributes *attributes;
+} +mfts[] = {};
I'm not sure if declaring an empty array like this is valid, and I had in mind moving the entire registration to this patch. Note that your patch 3/12 isn't dead code without it, as you're still able to create the object through CoCreateInstance() directly.
+HRESULT mfplat_DllRegisterServer(void) +{
- unsigned int i, j;
- HRESULT hr;
- MFT_REGISTER_TYPE_INFO input_types[1], output_types[1];
- for (i = 0; i < ARRAY_SIZE(mfts); i++)
- {
const struct mft *cur = &mfts[i];
for (j = 0; j < cur->input_types_count; j++)
{
input_types[j].guidMajorType = *(cur->major_type);
input_types[j].guidSubtype = *(cur->input_types[j]);
}
for (j = 0; j < cur->output_types_count; j++)
{
output_types[j].guidMajorType = *(cur->major_type);
output_types[j].guidSubtype = *(cur->output_types[j]);
}
hr = MFTRegister(*(cur->clsid), *(cur->category), cur->name, cur->flags, cur->input_types_count,
input_types, cur->output_types_count, output_types, cur->attributes);
if (FAILED(hr))
{
FIXME("Failed to register MFT, hr %#x\n", hr);
return hr;
}
- }
- return S_OK;
+}
static const struct { const GUID *subtype;