From: Rémi Bernon rbernon@codeweavers.com
--- dlls/winegstreamer/mfplat.c | 9 +++----- dlls/winegstreamer/quartz_parser.c | 35 ++++++++++++++-------------- dlls/winegstreamer/unixlib.h | 37 ++++++++++++++++++++---------- dlls/winegstreamer/wg_format.c | 27 ++++++---------------- 4 files changed, 52 insertions(+), 56 deletions(-)
diff --git a/dlls/winegstreamer/mfplat.c b/dlls/winegstreamer/mfplat.c index 634d3721788..49674c4fce7 100644 --- a/dlls/winegstreamer/mfplat.c +++ b/dlls/winegstreamer/mfplat.c @@ -384,12 +384,9 @@ static const struct } audio_formats[] = { - {&MFAudioFormat_PCM, 8, WG_AUDIO_FORMAT_U8}, - {&MFAudioFormat_PCM, 16, WG_AUDIO_FORMAT_S16LE}, - {&MFAudioFormat_PCM, 24, WG_AUDIO_FORMAT_S24LE}, - {&MFAudioFormat_PCM, 32, WG_AUDIO_FORMAT_S32LE}, - {&MFAudioFormat_Float, 32, WG_AUDIO_FORMAT_F32LE}, - {&MFAudioFormat_Float, 64, WG_AUDIO_FORMAT_F64LE}, +#define X(x, g, d) {&MFAudioFormat_ ## g, d, WG_AUDIO_FORMAT_ ## x}, + FOR_EACH_WG_AUDIO_FORMAT(X) +#undef X };
static inline UINT64 make_uint64(UINT32 high, UINT32 low) diff --git a/dlls/winegstreamer/quartz_parser.c b/dlls/winegstreamer/quartz_parser.c index 3816895387f..3cb08376dc2 100644 --- a/dlls/winegstreamer/quartz_parser.c +++ b/dlls/winegstreamer/quartz_parser.c @@ -106,12 +106,13 @@ static bool wg_audio_format_is_float(enum wg_audio_format format) switch (format) { case WG_AUDIO_FORMAT_UNKNOWN: return false; - case WG_AUDIO_FORMAT_U8: return false; - case WG_AUDIO_FORMAT_S16LE: return false; - case WG_AUDIO_FORMAT_S24LE: return false; - case WG_AUDIO_FORMAT_S32LE: return false; - case WG_AUDIO_FORMAT_F32LE: return true; - case WG_AUDIO_FORMAT_F64LE: return true; +#define X_PCM false +#define X_Float true +#define X(x, g, d) case WG_AUDIO_FORMAT_ ## x: return X_ ## g; + FOR_EACH_WG_AUDIO_FORMAT(X) +#undef X +#undef X_Float +#undef X_PCM }
assert(0); @@ -122,13 +123,10 @@ static WORD wg_audio_format_get_depth(enum wg_audio_format format) { switch (format) { +#define X(x, g, d) case WG_AUDIO_FORMAT_ ## x: return d; + FOR_EACH_WG_AUDIO_FORMAT(X) +#undef X case WG_AUDIO_FORMAT_UNKNOWN: return 0; - case WG_AUDIO_FORMAT_U8: return 8; - case WG_AUDIO_FORMAT_S16LE: return 16; - case WG_AUDIO_FORMAT_S24LE: return 24; - case WG_AUDIO_FORMAT_S32LE: return 32; - case WG_AUDIO_FORMAT_F32LE: return 32; - case WG_AUDIO_FORMAT_F64LE: return 64; }
assert(0); @@ -540,12 +538,13 @@ static bool amt_to_wg_format_audio(const AM_MEDIA_TYPE *mt, struct wg_format *fo } format_map[] = { - {&MEDIASUBTYPE_PCM, 8, WG_AUDIO_FORMAT_U8}, - {&MEDIASUBTYPE_PCM, 16, WG_AUDIO_FORMAT_S16LE}, - {&MEDIASUBTYPE_PCM, 24, WG_AUDIO_FORMAT_S24LE}, - {&MEDIASUBTYPE_PCM, 32, WG_AUDIO_FORMAT_S32LE}, - {&MEDIASUBTYPE_IEEE_FLOAT, 32, WG_AUDIO_FORMAT_F32LE}, - {&MEDIASUBTYPE_IEEE_FLOAT, 64, WG_AUDIO_FORMAT_F64LE}, +#define X_PCM MEDIASUBTYPE_PCM +#define X_Float MEDIASUBTYPE_IEEE_FLOAT +#define X(x, g, d) {&X_ ## g, d, WG_AUDIO_FORMAT_ ## x}, + FOR_EACH_WG_AUDIO_FORMAT(X) +#undef X +#undef X_Float +#undef X_PCM };
const WAVEFORMATEX *audio_format = (const WAVEFORMATEX *)mt->pbFormat; diff --git a/dlls/winegstreamer/unixlib.h b/dlls/winegstreamer/unixlib.h index f91fb986322..a8c94852fc7 100644 --- a/dlls/winegstreamer/unixlib.h +++ b/dlls/winegstreamer/unixlib.h @@ -30,6 +30,30 @@
#include "wine/unixlib.h"
+/* List all supported raw audio formats, with their metadata. + * + * Each element should be X(wg, guid, depth), with: + * wg: suffix of the GStreamer constant, and enum wg_video_format value. + * guid: suffix of the corresponding MEDIASUBTYPE / MFAudioFormat guid. + * depth: the number of bits of each audio sample. + * + */ +#define FOR_EACH_WG_AUDIO_FORMAT(F) \ + F(U8, PCM, 8) \ + F(S16LE, PCM, 16) \ + F(S24LE, PCM, 24) \ + F(S32LE, PCM, 32) \ + F(F32LE, Float, 32) \ + F(F64LE, Float, 64) \ + +enum wg_audio_format +{ + WG_AUDIO_FORMAT_UNKNOWN = 0, +#define X(x, g, d) WG_AUDIO_FORMAT_ ## x, + FOR_EACH_WG_AUDIO_FORMAT(X) +#undef X +}; + /* List all supported raw video formats, with their metadata. * * Each element should be X(wg, guid, depth, type), with: @@ -78,18 +102,7 @@ struct wg_format { struct { - enum wg_audio_format - { - WG_AUDIO_FORMAT_UNKNOWN, - - WG_AUDIO_FORMAT_U8, - WG_AUDIO_FORMAT_S16LE, - WG_AUDIO_FORMAT_S24LE, - WG_AUDIO_FORMAT_S32LE, - WG_AUDIO_FORMAT_F32LE, - WG_AUDIO_FORMAT_F64LE, - } format; - + enum wg_audio_format format; uint32_t channels; uint32_t channel_mask; /* In WinMM format. */ uint32_t rate; diff --git a/dlls/winegstreamer/wg_format.c b/dlls/winegstreamer/wg_format.c index 50c5d1ba256..1b83f7b86a8 100644 --- a/dlls/winegstreamer/wg_format.c +++ b/dlls/winegstreamer/wg_format.c @@ -47,20 +47,10 @@ static enum wg_audio_format wg_audio_format_from_gst(GstAudioFormat format) { switch (format) { - case GST_AUDIO_FORMAT_U8: - return WG_AUDIO_FORMAT_U8; - case GST_AUDIO_FORMAT_S16LE: - return WG_AUDIO_FORMAT_S16LE; - case GST_AUDIO_FORMAT_S24LE: - return WG_AUDIO_FORMAT_S24LE; - case GST_AUDIO_FORMAT_S32LE: - return WG_AUDIO_FORMAT_S32LE; - case GST_AUDIO_FORMAT_F32LE: - return WG_AUDIO_FORMAT_F32LE; - case GST_AUDIO_FORMAT_F64LE: - return WG_AUDIO_FORMAT_F64LE; - default: - return WG_AUDIO_FORMAT_UNKNOWN; +#define X(x, g, d) case GST_AUDIO_FORMAT_ ## x: return WG_AUDIO_FORMAT_ ## x; + FOR_EACH_WG_AUDIO_FORMAT(X) +#undef X + default: return WG_AUDIO_FORMAT_UNKNOWN; } }
@@ -252,12 +242,9 @@ static GstAudioFormat wg_audio_format_to_gst(enum wg_audio_format format) { switch (format) { - case WG_AUDIO_FORMAT_U8: return GST_AUDIO_FORMAT_U8; - case WG_AUDIO_FORMAT_S16LE: return GST_AUDIO_FORMAT_S16LE; - case WG_AUDIO_FORMAT_S24LE: return GST_AUDIO_FORMAT_S24LE; - case WG_AUDIO_FORMAT_S32LE: return GST_AUDIO_FORMAT_S32LE; - case WG_AUDIO_FORMAT_F32LE: return GST_AUDIO_FORMAT_F32LE; - case WG_AUDIO_FORMAT_F64LE: return GST_AUDIO_FORMAT_F64LE; +#define X(x, g, d) case WG_AUDIO_FORMAT_ ## x: return GST_AUDIO_FORMAT_ ## x; + FOR_EACH_WG_AUDIO_FORMAT(X) +#undef X default: return GST_AUDIO_FORMAT_UNKNOWN; } }