[PATCH 4/5] winegstreamer: Register WMA decoder transform stub.

Giovanni Mascellani gmascellani at codeweavers.com
Fri Jan 21 06:29:36 CST 2022


Signed-off-by: Giovanni Mascellani <gmascellani at codeweavers.com>

Il 20/01/22 11:41, Rémi Bernon ha scritto:
> Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
> ---
>   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;
> +}



More information about the wine-devel mailing list