From: Rémi Bernon rbernon@codeweavers.com
--- dlls/quartz/main.c | 36 ++++++++++++++++++++ dlls/quartz/parser.c | 6 ++++ dlls/quartz/quartz_private.h | 1 + dlls/quartz/quartz_strmif.idl | 7 ++++ dlls/winegstreamer/main.c | 32 ++--------------- dlls/winegstreamer/winegstreamer_classes.idl | 5 ++- 6 files changed, 54 insertions(+), 33 deletions(-)
diff --git a/dlls/quartz/main.c b/dlls/quartz/main.c index 747c80378e9..57b60445d6d 100644 --- a/dlls/quartz/main.c +++ b/dlls/quartz/main.c @@ -79,6 +79,7 @@ static const struct object_creation_info object_creation[] = { &CLSID_VideoMixingRenderer, vmr7_create }, { &CLSID_VideoMixingRenderer9, vmr9_create }, { &CLSID_VideoRendererDefault, video_renderer_default_create }, + { &CLSID_WAVEParser, wave_parser_create }, };
static HRESULT WINAPI DSCF_QueryInterface(IClassFactory *iface, REFIID riid, void **ppobj) @@ -393,6 +394,36 @@ HRESULT WINAPI DllRegisterServer(void) .rgPins2 = avi_splitter_pins, };
+ static const REGPINTYPES wave_parser_inputs[] = + { + {&MEDIATYPE_Stream, &MEDIASUBTYPE_WAVE}, + {&MEDIATYPE_Stream, &MEDIASUBTYPE_AU}, + {&MEDIATYPE_Stream, &MEDIASUBTYPE_AIFF}, + }; + static const REGPINTYPES wave_parser_outputs[] = + { + {&MEDIATYPE_Audio, &GUID_NULL}, + }; + static const REGFILTERPINS2 wave_parser_pins[] = + { + { + .nMediaTypes = ARRAY_SIZE(wave_parser_inputs), + .lpMediaType = wave_parser_inputs, + }, + { + .dwFlags = REG_PINFLAG_B_OUTPUT, + .nMediaTypes = ARRAY_SIZE(wave_parser_outputs), + .lpMediaType = wave_parser_outputs, + }, + }; + static const REGFILTER2 wave_parser_reg = + { + .dwVersion = 2, + .dwMerit = MERIT_UNLIKELY, + .cPins2 = ARRAY_SIZE(wave_parser_pins), + .rgPins2 = wave_parser_pins, + }; + IFilterMapper2 *mapper; HRESULT hr;
@@ -429,6 +460,9 @@ HRESULT WINAPI DllRegisterServer(void) if (FAILED(hr = IFilterMapper2_RegisterFilter(mapper, &CLSID_MPEG1Splitter, L"MPEG-I Stream Splitter", NULL, NULL, NULL, &mpeg_splitter_reg))) goto done; + if (FAILED(hr = IFilterMapper2_RegisterFilter(mapper, &CLSID_WAVEParser, L"Wave Parser", NULL, + NULL, NULL, &wave_parser_reg))) + goto done;
done: IFilterMapper2_Release(mapper); @@ -468,6 +502,8 @@ HRESULT WINAPI DllUnregisterServer(void) goto done; if (FAILED(hr = IFilterMapper2_UnregisterFilter(mapper, NULL, NULL, &CLSID_MPEG1Splitter))) goto done; + if (FAILED(hr = IFilterMapper2_UnregisterFilter(mapper, NULL, NULL, &CLSID_WAVEParser))) + goto done;
done: IFilterMapper2_Release(mapper); diff --git a/dlls/quartz/parser.c b/dlls/quartz/parser.c index 32ba5d0041a..aa325f5e656 100644 --- a/dlls/quartz/parser.c +++ b/dlls/quartz/parser.c @@ -29,3 +29,9 @@ HRESULT mpeg1_splitter_create(IUnknown *outer, IUnknown **out) static const GUID CLSID_wg_mpeg1_splitter = {0xa8edbf98,0x2442,0x42c5,{0x85,0xa1,0xab,0x05,0xa5,0x80,0xdf,0x53}}; return CoCreateInstance(&CLSID_wg_mpeg1_splitter, outer, CLSCTX_INPROC_SERVER, &IID_IUnknown, (void **)out); } + +HRESULT wave_parser_create(IUnknown *outer, IUnknown **out) +{ + static const GUID CLSID_wg_wave_parser = {0x3f839ec7,0x5ea6,0x49e1,{0x80,0xc2,0x1e,0xa3,0x00,0xf8,0xb0,0xe0}}; + return CoCreateInstance(&CLSID_wg_wave_parser, outer, CLSCTX_INPROC_SERVER, &IID_IUnknown, (void **)out); +} diff --git a/dlls/quartz/quartz_private.h b/dlls/quartz/quartz_private.h index 449db400131..5925fc80620 100644 --- a/dlls/quartz/quartz_private.h +++ b/dlls/quartz/quartz_private.h @@ -65,6 +65,7 @@ HRESULT video_renderer_default_create(IUnknown *outer, IUnknown **out); HRESULT vmr7_presenter_create(IUnknown *outer, IUnknown **out); HRESULT vmr7_create(IUnknown *outer, IUnknown **out); HRESULT vmr9_create(IUnknown *outer, IUnknown **out); +HRESULT wave_parser_create(IUnknown *outer, IUnknown **out);
extern const char * qzdebugstr_guid(const GUID * id); extern void video_unregister_windowclass(void); diff --git a/dlls/quartz/quartz_strmif.idl b/dlls/quartz/quartz_strmif.idl index 74158a7fe90..4ea198c5ea0 100644 --- a/dlls/quartz/quartz_strmif.idl +++ b/dlls/quartz/quartz_strmif.idl @@ -159,3 +159,10 @@ coclass MPEG1Splitter {} uuid(1b544c20-fd0b-11ce-8c63-00aa0044b51e) ] coclass AviSplitter {} + +[ + helpstring("Wave Parser"), + threading(both), + uuid(d51bd5a1-7548-11cf-a520-0080c77ef58a) +] +coclass WAVEParser {} diff --git a/dlls/winegstreamer/main.c b/dlls/winegstreamer/main.c index c95927cefb4..33cd3439f62 100644 --- a/dlls/winegstreamer/main.c +++ b/dlls/winegstreamer/main.c @@ -999,6 +999,7 @@ HRESULT WINAPI DllGetClassObject(REFCLSID clsid, REFIID iid, void **out) static const GUID CLSID_wg_wma_decoder = {0x5b4d4e54,0x0620,0x4cf9,{0x94,0xae,0x78,0x23,0x96,0x5c,0x28,0xb6}}; static const GUID CLSID_wg_wmv_decoder = {0x62ee5ddb,0x4f52,0x48e2,{0x89,0x28,0x78,0x7b,0x02,0x53,0xa0,0xbc}}; static const GUID CLSID_wg_mpeg1_splitter = {0xa8edbf98,0x2442,0x42c5,{0x85,0xa1,0xab,0x05,0xa5,0x80,0xdf,0x53}}; + static const GUID CLSID_wg_wave_parser = {0x3f839ec7,0x5ea6,0x49e1,{0x80,0xc2,0x1e,0xa3,0x00,0xf8,0xb0,0xe0}}; struct class_factory *factory; HRESULT hr;
@@ -1022,7 +1023,7 @@ HRESULT WINAPI DllGetClassObject(REFCLSID clsid, REFIID iid, void **out) factory = &mpeg_layer3_decoder_cf; else if (IsEqualGUID(clsid, &CLSID_wg_mpeg1_splitter)) factory = &mpeg_splitter_cf; - else if (IsEqualGUID(clsid, &CLSID_WAVEParser)) + else if (IsEqualGUID(clsid, &CLSID_wg_wave_parser)) factory = &wave_parser_cf; else if (IsEqualGUID(clsid, &CLSID_wg_wma_decoder)) factory = &wma_decoder_cf; @@ -1177,33 +1178,6 @@ static const REGFILTER2 reg_mpeg_layer3_decoder = .u.s2.rgPins2 = reg_mpeg_layer3_decoder_pins, };
-static const REGPINTYPES reg_wave_parser_sink_mts[3] = -{ - {&MEDIATYPE_Stream, &MEDIASUBTYPE_WAVE}, - {&MEDIATYPE_Stream, &MEDIASUBTYPE_AU}, - {&MEDIATYPE_Stream, &MEDIASUBTYPE_AIFF}, -}; - -static const REGFILTERPINS2 reg_wave_parser_pins[2] = -{ - { - .nMediaTypes = 3, - .lpMediaType = reg_wave_parser_sink_mts, - }, - { - .dwFlags = REG_PINFLAG_B_OUTPUT, - .nMediaTypes = 1, - .lpMediaType = ®_audio_mt, - }, -}; - -static const REGFILTER2 reg_wave_parser = -{ - .dwVersion = 2, - .dwMerit = MERIT_UNLIKELY, - .u.s2.cPins2 = 2, - .u.s2.rgPins2 = reg_wave_parser_pins, -};
static const REGFILTERPINS2 reg_decodebin_parser_pins[3] = { @@ -1253,7 +1227,6 @@ HRESULT WINAPI DllRegisterServer(void) L"MPEG Video Decoder", NULL, NULL, NULL, ®_mpeg_video_codec); IFilterMapper2_RegisterFilter(mapper, &CLSID_mpeg_layer3_decoder, L"MPEG Layer-3 Decoder", NULL, NULL, NULL, ®_mpeg_layer3_decoder); - IFilterMapper2_RegisterFilter(mapper, &CLSID_WAVEParser, L"Wave Parser", NULL, NULL, NULL, ®_wave_parser);
IFilterMapper2_Release(mapper);
@@ -1278,7 +1251,6 @@ HRESULT WINAPI DllUnregisterServer(void) IFilterMapper2_UnregisterFilter(mapper, NULL, NULL, &CLSID_CMpegAudioCodec); IFilterMapper2_UnregisterFilter(mapper, NULL, NULL, &CLSID_CMpegVideoCodec); IFilterMapper2_UnregisterFilter(mapper, NULL, NULL, &CLSID_mpeg_layer3_decoder); - IFilterMapper2_UnregisterFilter(mapper, NULL, NULL, &CLSID_WAVEParser);
IFilterMapper2_Release(mapper);
diff --git a/dlls/winegstreamer/winegstreamer_classes.idl b/dlls/winegstreamer/winegstreamer_classes.idl index 665cb9826c4..f34cf998288 100644 --- a/dlls/winegstreamer/winegstreamer_classes.idl +++ b/dlls/winegstreamer/winegstreamer_classes.idl @@ -55,11 +55,10 @@ coclass mpeg_layer3_decoder {} coclass wg_mpeg1_splitter {}
[ - helpstring("Wave Parser"), threading(both), - uuid(d51bd5a1-7548-11cf-a520-0080c77ef58a) + uuid(3f839ec7-5ea6-49e1-80c2-1ea300f8b0e0) ] -coclass WAVEParser {} +coclass wg_wave_parser {}
[ helpstring("GStreamer parser using decodebin"),