From: Giovanni Mascellani Subject: Re: [PATCH 4/5] winegstreamer: Register WMA decoder transform stub. Message-Id: <5df6526e-bed2-f02c-8350-ed11cb4dd5a0@codeweavers.com> Date: Fri, 21 Jan 2022 13:29:36 +0100 In-Reply-To: <20220120104152.2236851-4-rbernon@codeweavers.com> References: <20220120104152.2236851-1-rbernon@codeweavers.com> <20220120104152.2236851-4-rbernon@codeweavers.com> Signed-off-by: Giovanni Mascellani Il 20/01/22 11:41, Rémi Bernon ha scritto: > Signed-off-by: Rémi Bernon > --- > dlls/winegstreamer/Makefile.in | 3 +- > dlls/winegstreamer/gst_private.h | 1 + > dlls/winegstreamer/mfplat.c | 29 +++++++++++++++- > dlls/winegstreamer/winegstreamer_classes.idl | 6 ++++ > dlls/winegstreamer/wma_decoder.c | 36 ++++++++++++++++++++ > 5 files changed, 73 insertions(+), 2 deletions(-) > create mode 100644 dlls/winegstreamer/wma_decoder.c > > diff --git a/dlls/winegstreamer/Makefile.in b/dlls/winegstreamer/Makefile.in > index 76e6aeed54d..7eecfb4655e 100644 > --- a/dlls/winegstreamer/Makefile.in > +++ b/dlls/winegstreamer/Makefile.in > @@ -15,7 +15,8 @@ C_SRCS = \ > wg_parser.c \ > wm_asyncreader.c \ > wm_reader.c \ > - wm_syncreader.c > + wm_syncreader.c \ > + wma_decoder.c > > IDL_SRCS = \ > winegstreamer_classes.idl > diff --git a/dlls/winegstreamer/gst_private.h b/dlls/winegstreamer/gst_private.h > index 9e1d67417d4..72b2db3734e 100644 > --- a/dlls/winegstreamer/gst_private.h > +++ b/dlls/winegstreamer/gst_private.h > @@ -116,6 +116,7 @@ void mf_media_type_to_wg_format(IMFMediaType *type, struct wg_format *format) DE > > HRESULT winegstreamer_stream_handler_create(REFIID riid, void **obj) DECLSPEC_HIDDEN; > > +HRESULT wma_decoder_create(REFIID riid, void **ret) DECLSPEC_HIDDEN; > HRESULT audio_converter_create(REFIID riid, void **ret) DECLSPEC_HIDDEN; > > struct wm_stream > diff --git a/dlls/winegstreamer/mfplat.c b/dlls/winegstreamer/mfplat.c > index 5404728ba83..8d1286328e9 100644 > --- a/dlls/winegstreamer/mfplat.c > +++ b/dlls/winegstreamer/mfplat.c > @@ -21,6 +21,7 @@ > > #include "ks.h" > #include "ksmedia.h" > +#include "wmcodecdsp.h" > #include "initguid.h" > #include "mfapi.h" > > @@ -407,6 +408,7 @@ class_objects[] = > { &CLSID_VideoProcessorMFT, &video_processor_create }, > { &CLSID_GStreamerByteStreamHandler, &winegstreamer_stream_handler_create }, > { &CLSID_WINEAudioConverter, &audio_converter_create }, > + { &CLSID_WMADecMediaObject, &wma_decoder_create }, > }; > > HRESULT mfplat_get_class_object(REFCLSID rclsid, REFIID riid, void **obj) > @@ -442,6 +444,20 @@ static const GUID *audio_converter_supported_types[] = > &MFAudioFormat_Float, > }; > > +static WCHAR wma_decoderW[] = L"WMAudio Decoder MFT"; > +static const GUID *wma_decoder_input_types[] = > +{ > + &MEDIASUBTYPE_MSAUDIO1, > + &MFAudioFormat_WMAudioV8, > + &MFAudioFormat_WMAudioV9, > + &MFAudioFormat_WMAudio_Lossless, > +}; > +static const GUID *wma_decoder_output_types[] = > +{ > + &MFAudioFormat_PCM, > + &MFAudioFormat_Float, > +}; > + > static const struct mft > { > const GUID *clsid; > @@ -467,13 +483,24 @@ mfts[] = > ARRAY_SIZE(audio_converter_supported_types), > audio_converter_supported_types, > }, > + { > + &CLSID_WMADecMediaObject, > + &MFT_CATEGORY_AUDIO_DECODER, > + wma_decoderW, > + MFT_ENUM_FLAG_SYNCMFT, > + &MFMediaType_Audio, > + ARRAY_SIZE(wma_decoder_input_types), > + wma_decoder_input_types, > + ARRAY_SIZE(wma_decoder_output_types), > + wma_decoder_output_types, > + }, > }; > > HRESULT mfplat_DllRegisterServer(void) > { > unsigned int i, j; > HRESULT hr; > - MFT_REGISTER_TYPE_INFO input_types[2], output_types[2]; > + MFT_REGISTER_TYPE_INFO input_types[4], output_types[2]; > > for (i = 0; i < ARRAY_SIZE(mfts); i++) > { > diff --git a/dlls/winegstreamer/winegstreamer_classes.idl b/dlls/winegstreamer/winegstreamer_classes.idl > index 072ec90eea4..90dc1dc839b 100644 > --- a/dlls/winegstreamer/winegstreamer_classes.idl > +++ b/dlls/winegstreamer/winegstreamer_classes.idl > @@ -67,3 +67,9 @@ coclass GStreamerByteStreamHandler {} > uuid(6a170414-aad9-4693-b806-3a0c47c570d6) > ] > coclass WINEAudioConverter { } > + > +[ > + threading(both), > + uuid(2eeb4adf-4578-4d10-bca7-bb955f56320a) > +] > +coclass CWMADecMediaObject {}; > diff --git a/dlls/winegstreamer/wma_decoder.c b/dlls/winegstreamer/wma_decoder.c > new file mode 100644 > index 00000000000..1280d7b1efb > --- /dev/null > +++ b/dlls/winegstreamer/wma_decoder.c > @@ -0,0 +1,36 @@ > +/* WMA Decoder Transform > + * > + * Copyright 2022 Rémi Bernon for CodeWeavers > + * > + * This library is free software; you can redistribute it and/or > + * modify it under the terms of the GNU Lesser General Public > + * License as published by the Free Software Foundation; either > + * version 2.1 of the License, or (at your option) any later version. > + * > + * This library is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + * Lesser General Public License for more details. > + * > + * You should have received a copy of the GNU Lesser General Public > + * License along with this library; if not, write to the Free Software > + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA > + */ > + > +#include "gst_private.h" > + > +#include "mfapi.h" > +#include "mferror.h" > +#include "mfobjects.h" > +#include "mftransform.h" > + > +#include "wine/debug.h" > +#include "wine/heap.h" > + > +WINE_DEFAULT_DEBUG_CHANNEL(mfplat); > + > +HRESULT wma_decoder_create(REFIID riid, void **ret) > +{ > + FIXME("riid %s, ret %p stub!\n", debugstr_guid(riid), ret); > + return E_NOTIMPL; > +}