From: Ziqing Hui zhui@codeweavers.com
--- dlls/winegstreamer/quartz_parser.c | 26 +++++++++++++------------- dlls/winegstreamer/quartz_transform.c | 4 ++-- dlls/winegstreamer/unixlib.h | 11 +++++------ dlls/winegstreamer/wg_format.c | 12 ++++++------ dlls/winegstreamer/wg_transform.c | 2 +- 5 files changed, 27 insertions(+), 28 deletions(-)
diff --git a/dlls/winegstreamer/quartz_parser.c b/dlls/winegstreamer/quartz_parser.c index 6c126fa13e2..27429e1aac1 100644 --- a/dlls/winegstreamer/quartz_parser.c +++ b/dlls/winegstreamer/quartz_parser.c @@ -227,7 +227,7 @@ static bool amt_from_wg_format_audio_mpeg1(AM_MEDIA_TYPE *mt, const struct wg_fo mt->majortype = MEDIATYPE_Audio; mt->formattype = FORMAT_WaveFormatEx;
- switch (format->u.audio_mpeg1.layer) + switch (format->u.audio.layer) { case 1: case 2: @@ -242,10 +242,10 @@ static bool amt_from_wg_format_audio_mpeg1(AM_MEDIA_TYPE *mt, const struct wg_fo mt->cbFormat = sizeof(*wave_format); mt->pbFormat = (BYTE *)wave_format; wave_format->wfx.wFormatTag = WAVE_FORMAT_MPEG; - wave_format->wfx.nChannels = format->u.audio_mpeg1.channels; - wave_format->wfx.nSamplesPerSec = format->u.audio_mpeg1.rate; + wave_format->wfx.nChannels = format->u.audio.channels; + wave_format->wfx.nSamplesPerSec = format->u.audio.rate; wave_format->wfx.cbSize = sizeof(*wave_format) - sizeof(WAVEFORMATEX); - wave_format->fwHeadLayer = format->u.audio_mpeg1.layer; + wave_format->fwHeadLayer = format->u.audio.layer; return true; }
@@ -261,8 +261,8 @@ static bool amt_from_wg_format_audio_mpeg1(AM_MEDIA_TYPE *mt, const struct wg_fo mt->cbFormat = sizeof(*wave_format); mt->pbFormat = (BYTE *)wave_format; wave_format->wfx.wFormatTag = WAVE_FORMAT_MPEGLAYER3; - wave_format->wfx.nChannels = format->u.audio_mpeg1.channels; - wave_format->wfx.nSamplesPerSec = format->u.audio_mpeg1.rate; + wave_format->wfx.nChannels = format->u.audio.channels; + wave_format->wfx.nSamplesPerSec = format->u.audio.rate; wave_format->wfx.cbSize = sizeof(*wave_format) - sizeof(WAVEFORMATEX); /* FIXME: We can't get most of the MPEG data from the caps. We may have * to manually parse the header. */ @@ -437,7 +437,7 @@ unsigned int wg_format_get_max_size(const struct wg_format *format) }
case WG_MAJOR_TYPE_AUDIO_MPEG1: - switch (format->u.audio_mpeg1.layer) + switch (format->u.audio.layer) { case 1: return 56000; @@ -834,9 +834,9 @@ static bool amt_to_wg_format_audio_mpeg1(const AM_MEDIA_TYPE *mt, struct wg_form }
format->major_type = WG_MAJOR_TYPE_AUDIO_MPEG1; - format->u.audio_mpeg1.channels = audio_format->wfx.nChannels; - format->u.audio_mpeg1.rate = audio_format->wfx.nSamplesPerSec; - format->u.audio_mpeg1.layer = audio_format->fwHeadLayer; + format->u.audio.channels = audio_format->wfx.nChannels; + format->u.audio.rate = audio_format->wfx.nSamplesPerSec; + format->u.audio.layer = audio_format->fwHeadLayer; return true; }
@@ -856,9 +856,9 @@ static bool amt_to_wg_format_audio_mpeg1_layer3(const AM_MEDIA_TYPE *mt, struct }
format->major_type = WG_MAJOR_TYPE_AUDIO_MPEG1; - format->u.audio_mpeg1.channels = audio_format->wfx.nChannels; - format->u.audio_mpeg1.rate = audio_format->wfx.nSamplesPerSec; - format->u.audio_mpeg1.layer = 3; + format->u.audio.channels = audio_format->wfx.nChannels; + format->u.audio.rate = audio_format->wfx.nSamplesPerSec; + format->u.audio.layer = 3; return true; }
diff --git a/dlls/winegstreamer/quartz_transform.c b/dlls/winegstreamer/quartz_transform.c index 5189c0b22d3..784bf6f9411 100644 --- a/dlls/winegstreamer/quartz_transform.c +++ b/dlls/winegstreamer/quartz_transform.c @@ -758,7 +758,7 @@ HRESULT mpeg_audio_codec_create(IUnknown *outer, IUnknown **out) static const struct wg_format input_format = { .major_type = WG_MAJOR_TYPE_AUDIO_MPEG1, - .u.audio_mpeg1 = + .u.audio = { .layer = 2, .channels = 1, @@ -1036,7 +1036,7 @@ HRESULT mpeg_layer3_decoder_create(IUnknown *outer, IUnknown **out) static const struct wg_format input_format = { .major_type = WG_MAJOR_TYPE_AUDIO_MPEG1, - .u.audio_mpeg1 = + .u.audio = { .layer = 3, .channels = 1, diff --git a/dlls/winegstreamer/unixlib.h b/dlls/winegstreamer/unixlib.h index 5b1b6ffa7ba..41615ccb8c3 100644 --- a/dlls/winegstreamer/unixlib.h +++ b/dlls/winegstreamer/unixlib.h @@ -95,6 +95,10 @@ struct wg_format
union { + /* Valid members for different audio formats: + * + * Uncompressed(PCM): channels, channel_mask, rate. + * MPEG1: channels, rate, layer. */ struct { wg_audio_format format; @@ -102,13 +106,8 @@ struct wg_format uint32_t channels; uint32_t channel_mask; /* In WinMM format. */ uint32_t rate; - } audio; - struct - { uint32_t layer; - uint32_t rate; - uint32_t channels; - } audio_mpeg1; + } audio; struct { uint32_t payload_type; diff --git a/dlls/winegstreamer/wg_format.c b/dlls/winegstreamer/wg_format.c index 6da97685736..a95e75f7fad 100644 --- a/dlls/winegstreamer/wg_format.c +++ b/dlls/winegstreamer/wg_format.c @@ -196,9 +196,9 @@ static void wg_format_from_caps_audio_mpeg1(struct wg_format *format, const GstC }
format->major_type = WG_MAJOR_TYPE_AUDIO_MPEG1; - format->u.audio_mpeg1.layer = layer; - format->u.audio_mpeg1.channels = channels; - format->u.audio_mpeg1.rate = rate; + format->u.audio.layer = layer; + format->u.audio.channels = channels; + format->u.audio.rate = rate; }
static void wg_format_from_caps_audio_wma(struct wg_format *format, const GstCaps *caps) @@ -506,9 +506,9 @@ static GstCaps *wg_format_to_caps_audio_mpeg1(const struct wg_format *format) return NULL;
gst_caps_set_simple(caps, "mpegversion", G_TYPE_INT, 1, NULL); - gst_caps_set_simple(caps, "layer", G_TYPE_INT, format->u.audio_mpeg1.layer, NULL); - gst_caps_set_simple(caps, "rate", G_TYPE_INT, format->u.audio_mpeg1.rate, NULL); - gst_caps_set_simple(caps, "channels", G_TYPE_INT, format->u.audio_mpeg1.channels, NULL); + gst_caps_set_simple(caps, "layer", G_TYPE_INT, format->u.audio.layer, NULL); + gst_caps_set_simple(caps, "rate", G_TYPE_INT, format->u.audio.rate, NULL); + gst_caps_set_simple(caps, "channels", G_TYPE_INT, format->u.audio.channels, NULL); gst_caps_set_simple(caps, "parsed", G_TYPE_BOOLEAN, TRUE, NULL);
return caps; diff --git a/dlls/winegstreamer/wg_transform.c b/dlls/winegstreamer/wg_transform.c index aabe618972d..e5547f1fb50 100644 --- a/dlls/winegstreamer/wg_transform.c +++ b/dlls/winegstreamer/wg_transform.c @@ -343,7 +343,7 @@ static GstCaps *transform_get_parsed_caps(struct wg_format *format, const char * { case WG_MAJOR_TYPE_AUDIO_MPEG1: gst_caps_set_simple(parsed_caps, "parsed", G_TYPE_BOOLEAN, true, "mpegversion", G_TYPE_INT, 1, - "layer", G_TYPE_INT, format->u.audio_mpeg1.layer, NULL); + "layer", G_TYPE_INT, format->u.audio.layer, NULL); break; case WG_MAJOR_TYPE_AUDIO_MPEG4: gst_caps_set_simple(parsed_caps, "framed", G_TYPE_BOOLEAN, true, "mpegversion", G_TYPE_INT, 4, NULL);