[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