Signed-off-by: Anton Baskanov baskanov@gmail.com --- dlls/quartz/tests/mpegaudio.c | 52 +++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+)
diff --git a/dlls/quartz/tests/mpegaudio.c b/dlls/quartz/tests/mpegaudio.c index ae098dba355..1983828beb0 100644 --- a/dlls/quartz/tests/mpegaudio.c +++ b/dlls/quartz/tests/mpegaudio.c @@ -880,6 +880,56 @@ static void testfilter_init(struct testfilter *filter) strmbase_source_init(&filter->source, &filter->filter, L"source", &testsource_ops); }
+static void test_sink_allocator(IMemInputPin *input) +{ + IMemAllocator *req_allocator, *ret_allocator; + ALLOCATOR_PROPERTIES props, ret_props; + HRESULT hr; + + hr = IMemInputPin_GetAllocatorRequirements(input, &props); + ok(hr == E_NOTIMPL, "Got hr %#lx.\n", hr); + + hr = IMemInputPin_GetAllocator(input, &ret_allocator); + todo_wine ok(hr == S_OK, "Got hr %#lx.\n", hr); + + if (hr == S_OK) + { + hr = IMemAllocator_GetProperties(ret_allocator, &props); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + ok(!props.cBuffers, "Got %ld buffers.\n", props.cBuffers); + ok(!props.cbBuffer, "Got size %ld.\n", props.cbBuffer); + ok(!props.cbAlign, "Got alignment %ld.\n", props.cbAlign); + ok(!props.cbPrefix, "Got prefix %ld.\n", props.cbPrefix); + + hr = IMemInputPin_NotifyAllocator(input, ret_allocator, TRUE); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + IMemAllocator_Release(ret_allocator); + } + + hr = IMemInputPin_NotifyAllocator(input, NULL, TRUE); + ok(hr == E_POINTER, "Got hr %#lx.\n", hr); + + CoCreateInstance(&CLSID_MemoryAllocator, NULL, CLSCTX_INPROC_SERVER, + &IID_IMemAllocator, (void **)&req_allocator); + + props.cBuffers = 1; + props.cbBuffer = 256; + props.cbAlign = 1; + props.cbPrefix = 0; + hr = IMemAllocator_SetProperties(req_allocator, &props, &ret_props); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + + hr = IMemInputPin_NotifyAllocator(input, req_allocator, TRUE); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + + hr = IMemInputPin_GetAllocator(input, &ret_allocator); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + ok(ret_allocator == req_allocator, "Allocators didn't match.\n"); + + IMemAllocator_Release(req_allocator); + IMemAllocator_Release(ret_allocator); +} + static void test_connect_pin(void) { IBaseFilter *filter = create_mpeg_audio_codec(); @@ -995,6 +1045,8 @@ static void test_connect_pin(void) hr = IMediaControl_Stop(control); ok(hr == S_OK, "Got hr %#lx.\n", hr);
+ test_sink_allocator(meminput); + IMemInputPin_Release(meminput); IPin_Release(sink); IPin_Release(source);
Signed-off-by: Anton Baskanov baskanov@gmail.com --- dlls/quartz/tests/mpegaudio.c | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-)
diff --git a/dlls/quartz/tests/mpegaudio.c b/dlls/quartz/tests/mpegaudio.c index 1983828beb0..aa249c82e84 100644 --- a/dlls/quartz/tests/mpegaudio.c +++ b/dlls/quartz/tests/mpegaudio.c @@ -185,8 +185,10 @@ static void init_pcm_mt(AM_MEDIA_TYPE *mt, WAVEFORMATEX *format, mt->majortype = MEDIATYPE_Audio; mt->subtype = MEDIASUBTYPE_PCM; mt->bFixedSizeSamples = TRUE; + mt->bTemporalCompression = FALSE; mt->lSampleSize = format->nBlockAlign; mt->formattype = FORMAT_WaveFormatEx; + mt->pUnk = NULL; mt->cbFormat = sizeof(WAVEFORMATEX); mt->pbFormat = (BYTE *)format; } @@ -935,12 +937,14 @@ static void test_connect_pin(void) IBaseFilter *filter = create_mpeg_audio_codec(); struct testfilter testsource; IPin *sink, *source, *peer; + IEnumMediaTypes *enummt; WAVEFORMATEX req_format; IMediaControl *control; + AM_MEDIA_TYPE mt, *pmt; IMemInputPin *meminput; AM_MEDIA_TYPE req_mt; IFilterGraph2 *graph; - AM_MEDIA_TYPE mt; + unsigned int i; HRESULT hr; ULONG ref;
@@ -1045,6 +1049,33 @@ static void test_connect_pin(void) hr = IMediaControl_Stop(control); ok(hr == S_OK, "Got hr %#lx.\n", hr);
+ hr = IPin_EnumMediaTypes(source, &enummt); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + + for (i = 0; i < 2; ++i) + { + WAVEFORMATEX expect_format; + AM_MEDIA_TYPE expect_mt; + + init_pcm_mt(&expect_mt, &expect_format, 1, 32000, i ? 8 : 16); + + hr = IEnumMediaTypes_Next(enummt, 1, &pmt, NULL); + todo_wine ok(hr == S_OK, "Got hr %#lx.\n", hr); + if (hr != S_OK) + break; + ok(!memcmp(pmt, &expect_mt, offsetof(AM_MEDIA_TYPE, cbFormat)), + "%u: Media types didn't match.\n", i); + ok(!memcmp(pmt->pbFormat, &expect_format, sizeof(WAVEFORMATEX)), + "%u: Format blocks didn't match.\n", i); + + DeleteMediaType(pmt); + } + + hr = IEnumMediaTypes_Next(enummt, 1, &pmt, NULL); + ok(hr == S_FALSE, "Got hr %#lx.\n", hr); + + IEnumMediaTypes_Release(enummt); + test_sink_allocator(meminput);
IMemInputPin_Release(meminput);
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=113930
Your paranoid android.
=== w1064 (64 bit report) ===
quartz: mpegaudio.c:1066: Test failed: 0: Media types didn't match. mpegaudio.c:1066: Test failed: 1: Media types didn't match.
=== w1064_2qxl (64 bit report) ===
quartz: mpegaudio.c:1066: Test failed: 0: Media types didn't match. mpegaudio.c:1066: Test failed: 1: Media types didn't match.
=== w1064_tsign (64 bit report) ===
quartz: mpegaudio.c:1066: Test failed: 0: Media types didn't match. mpegaudio.c:1066: Test failed: 1: Media types didn't match.
=== w10pro64 (64 bit report) ===
quartz: mpegaudio.c:1066: Test failed: 0: Media types didn't match. mpegaudio.c:1066: Test failed: 1: Media types didn't match.
=== w10pro64_ar (64 bit report) ===
quartz: mpegaudio.c:1066: Test failed: 0: Media types didn't match. mpegaudio.c:1066: Test failed: 1: Media types didn't match.
=== w10pro64_he (64 bit report) ===
quartz: mpegaudio.c:1066: Test failed: 0: Media types didn't match. mpegaudio.c:1066: Test failed: 1: Media types didn't match.
=== w10pro64_ja (64 bit report) ===
quartz: mpegaudio.c:1066: Test failed: 0: Media types didn't match. mpegaudio.c:1066: Test failed: 1: Media types didn't match.
=== w10pro64_zh_CN (64 bit report) ===
quartz: mpegaudio.c:1066: Test failed: 0: Media types didn't match. mpegaudio.c:1066: Test failed: 1: Media types didn't match.
Signed-off-by: Anton Baskanov baskanov@gmail.com --- dlls/quartz/tests/mpegaudio.c | 2 +- dlls/winegstreamer/quartz_transform.c | 47 +++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 1 deletion(-)
diff --git a/dlls/quartz/tests/mpegaudio.c b/dlls/quartz/tests/mpegaudio.c index aa249c82e84..345cb844b27 100644 --- a/dlls/quartz/tests/mpegaudio.c +++ b/dlls/quartz/tests/mpegaudio.c @@ -1060,7 +1060,7 @@ static void test_connect_pin(void) init_pcm_mt(&expect_mt, &expect_format, 1, 32000, i ? 8 : 16);
hr = IEnumMediaTypes_Next(enummt, 1, &pmt, NULL); - todo_wine ok(hr == S_OK, "Got hr %#lx.\n", hr); + ok(hr == S_OK, "Got hr %#lx.\n", hr); if (hr != S_OK) break; ok(!memcmp(pmt, &expect_mt, offsetof(AM_MEDIA_TYPE, cbFormat)), diff --git a/dlls/winegstreamer/quartz_transform.c b/dlls/winegstreamer/quartz_transform.c index 8207d24ca8d..4995177875b 100644 --- a/dlls/winegstreamer/quartz_transform.c +++ b/dlls/winegstreamer/quartz_transform.c @@ -36,6 +36,7 @@ struct transform_ops { HRESULT (*sink_query_accept)(struct transform *filter, const AM_MEDIA_TYPE *mt); HRESULT (*source_query_accept)(struct transform *filter, const AM_MEDIA_TYPE *mt); + HRESULT (*source_get_media_type)(struct transform *filter, unsigned int index, AM_MEDIA_TYPE *mt); };
static inline struct transform *impl_from_strmbase_filter(struct strmbase_filter *iface) @@ -103,9 +104,17 @@ static HRESULT transform_source_query_accept(struct strmbase_pin *pin, const AM_ return filter->ops->source_query_accept(filter, mt); }
+static HRESULT transform_source_get_media_type(struct strmbase_pin *pin, unsigned int index, AM_MEDIA_TYPE *mt) +{ + struct transform *filter = impl_from_strmbase_filter(pin->filter); + + return filter->ops->source_get_media_type(filter, index, mt); +} + static const struct strmbase_source_ops source_ops = { .base.pin_query_accept = transform_source_query_accept, + .base.pin_get_media_type = transform_source_get_media_type, .pfnAttemptConnection = BaseOutputPinImpl_AttemptConnection, .pfnDecideAllocator = BaseOutputPinImpl_DecideAllocator, }; @@ -189,10 +198,48 @@ static HRESULT mpeg_audio_codec_source_query_accept(struct transform *filter, co return S_OK; }
+static HRESULT mpeg_audio_codec_source_get_media_type(struct transform *filter, unsigned int index, AM_MEDIA_TYPE *mt) +{ + const MPEG1WAVEFORMAT *input_format; + WAVEFORMATEX *output_format; + + if (!filter->sink.pin.peer) + return VFW_S_NO_MORE_ITEMS; + + if (index > 1) + return VFW_S_NO_MORE_ITEMS; + + input_format = (const MPEG1WAVEFORMAT *)filter->sink.pin.mt.pbFormat; + + output_format = CoTaskMemAlloc(sizeof(*output_format)); + if (!output_format) + return E_OUTOFMEMORY; + + memset(output_format, 0, sizeof(*output_format)); + output_format->wFormatTag = WAVE_FORMAT_PCM; + output_format->nSamplesPerSec = input_format->wfx.nSamplesPerSec; + output_format->nChannels = input_format->wfx.nChannels; + output_format->wBitsPerSample = index ? 8 : 16; + output_format->nBlockAlign = output_format->nChannels * output_format->wBitsPerSample / 8; + output_format->nAvgBytesPerSec = output_format->nBlockAlign * output_format->nSamplesPerSec; + + memset(mt, 0, sizeof(*mt)); + mt->majortype = MEDIATYPE_Audio; + mt->subtype = MEDIASUBTYPE_PCM; + mt->bFixedSizeSamples = TRUE; + mt->lSampleSize = output_format->nBlockAlign; + mt->formattype = FORMAT_WaveFormatEx; + mt->cbFormat = sizeof(*output_format); + mt->pbFormat = (BYTE *)output_format; + + return S_OK; +} + static const struct transform_ops mpeg_audio_codec_transform_ops = { mpeg_audio_codec_sink_query_accept, mpeg_audio_codec_source_query_accept, + mpeg_audio_codec_source_get_media_type, };
HRESULT mpeg_audio_codec_create(IUnknown *outer, IUnknown **out)
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=113931
Your paranoid android.
=== w1064 (64 bit report) ===
quartz: mpegaudio.c:1066: Test failed: 0: Media types didn't match. mpegaudio.c:1066: Test failed: 1: Media types didn't match.
=== w1064_2qxl (64 bit report) ===
quartz: mpegaudio.c:1066: Test failed: 0: Media types didn't match. mpegaudio.c:1066: Test failed: 1: Media types didn't match.
=== w1064_tsign (64 bit report) ===
quartz: mpegaudio.c:1066: Test failed: 0: Media types didn't match. mpegaudio.c:1066: Test failed: 1: Media types didn't match.
=== w10pro64 (64 bit report) ===
quartz: mpegaudio.c:1066: Test failed: 0: Media types didn't match. mpegaudio.c:1066: Test failed: 1: Media types didn't match.
=== w10pro64_ar (64 bit report) ===
quartz: mpegaudio.c:1066: Test failed: 0: Media types didn't match. mpegaudio.c:1066: Test failed: 1: Media types didn't match.
=== w10pro64_he (64 bit report) ===
quartz: mpegaudio.c:1066: Test failed: 0: Media types didn't match. mpegaudio.c:1066: Test failed: 1: Media types didn't match.
=== w10pro64_ja (64 bit report) ===
quartz: mpegaudio.c:1066: Test failed: 0: Media types didn't match. mpegaudio.c:1066: Test failed: 1: Media types didn't match.
=== w10pro64_zh_CN (64 bit report) ===
quartz: mpegaudio.c:1066: Test failed: 0: Media types didn't match. mpegaudio.c:1066: Test failed: 1: Media types didn't match.
=== debian11 (64 bit WoW report) ===
quartz: mpegaudio.c:1066: Test failed: 0: Media types didn't match. mpegaudio.c:1066: Test failed: 1: Media types didn't match.
Signed-off-by: Anton Baskanov baskanov@gmail.com --- dlls/winegstreamer/quartz_transform.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+)
diff --git a/dlls/winegstreamer/quartz_transform.c b/dlls/winegstreamer/quartz_transform.c index 4995177875b..183fb823d40 100644 --- a/dlls/winegstreamer/quartz_transform.c +++ b/dlls/winegstreamer/quartz_transform.c @@ -37,6 +37,7 @@ struct transform_ops HRESULT (*sink_query_accept)(struct transform *filter, const AM_MEDIA_TYPE *mt); HRESULT (*source_query_accept)(struct transform *filter, const AM_MEDIA_TYPE *mt); HRESULT (*source_get_media_type)(struct transform *filter, unsigned int index, AM_MEDIA_TYPE *mt); + HRESULT (*source_decide_buffer_size)(struct transform *filter, IMemAllocator *allocator, ALLOCATOR_PROPERTIES *props); };
static inline struct transform *impl_from_strmbase_filter(struct strmbase_filter *iface) @@ -111,12 +112,20 @@ static HRESULT transform_source_get_media_type(struct strmbase_pin *pin, unsigne return filter->ops->source_get_media_type(filter, index, mt); }
+static HRESULT WINAPI transform_source_DecideBufferSize(struct strmbase_source *pin, IMemAllocator *allocator, ALLOCATOR_PROPERTIES *props) +{ + struct transform *filter = impl_from_strmbase_filter(pin->pin.filter); + + return filter->ops->source_decide_buffer_size(filter, allocator, props); +} + static const struct strmbase_source_ops source_ops = { .base.pin_query_accept = transform_source_query_accept, .base.pin_get_media_type = transform_source_get_media_type, .pfnAttemptConnection = BaseOutputPinImpl_AttemptConnection, .pfnDecideAllocator = BaseOutputPinImpl_DecideAllocator, + .pfnDecideBufferSize = transform_source_DecideBufferSize, };
static HRESULT transform_create(IUnknown *outer, const CLSID *clsid, const struct transform_ops *ops, struct transform **out) @@ -235,11 +244,27 @@ static HRESULT mpeg_audio_codec_source_get_media_type(struct transform *filter, return S_OK; }
+static HRESULT mpeg_audio_codec_source_decide_buffer_size(struct transform *filter, IMemAllocator *allocator, ALLOCATOR_PROPERTIES *props) +{ + MPEG1WAVEFORMAT *input_format = (MPEG1WAVEFORMAT *)filter->sink.pin.mt.pbFormat; + WAVEFORMATEX *output_format = (WAVEFORMATEX *)filter->source.pin.mt.pbFormat; + LONG frame_samples = (input_format->fwHeadLayer & ACM_MPEG_LAYER2) ? 1152 : 384; + LONG frame_size = frame_samples * output_format->nBlockAlign; + ALLOCATOR_PROPERTIES ret_props; + + props->cBuffers = max(props->cBuffers, 8); + props->cbBuffer = max(props->cbBuffer, frame_size * 4); + props->cbAlign = max(props->cbAlign, 1); + + return IMemAllocator_SetProperties(allocator, props, &ret_props); +} + static const struct transform_ops mpeg_audio_codec_transform_ops = { mpeg_audio_codec_sink_query_accept, mpeg_audio_codec_source_query_accept, mpeg_audio_codec_source_get_media_type, + mpeg_audio_codec_source_decide_buffer_size, };
HRESULT mpeg_audio_codec_create(IUnknown *outer, IUnknown **out)
Signed-off-by: Anton Baskanov baskanov@gmail.com --- dlls/quartz/tests/mpegaudio.c | 136 +++++++++++++++++++++++++++++++++- 1 file changed, 135 insertions(+), 1 deletion(-)
diff --git a/dlls/quartz/tests/mpegaudio.c b/dlls/quartz/tests/mpegaudio.c index 345cb844b27..001fc50e878 100644 --- a/dlls/quartz/tests/mpegaudio.c +++ b/dlls/quartz/tests/mpegaudio.c @@ -833,6 +833,7 @@ struct testfilter { struct strmbase_filter filter; struct strmbase_source source; + struct strmbase_sink sink; const AM_MEDIA_TYPE *mt; };
@@ -853,6 +854,7 @@ static void testfilter_destroy(struct strmbase_filter *iface) { struct testfilter *filter = impl_from_strmbase_filter(iface); strmbase_source_cleanup(&filter->source); + strmbase_sink_cleanup(&filter->sink); strmbase_filter_cleanup(&filter->filter); }
@@ -874,12 +876,31 @@ static const struct strmbase_source_ops testsource_ops = .pfnDecideAllocator = testsource_DecideAllocator, };
+static HRESULT testsink_query_interface(struct strmbase_pin *iface, REFIID iid, void **out) +{ + struct testfilter *filter = impl_from_strmbase_filter(iface->filter); + + if (IsEqualGUID(iid, &IID_IMemInputPin)) + *out = &filter->sink.IMemInputPin_iface; + else + return E_NOINTERFACE; + + IUnknown_AddRef((IUnknown *)*out); + return S_OK; +} + +static const struct strmbase_sink_ops testsink_ops = +{ + .base.pin_query_interface = testsink_query_interface, +}; + static void testfilter_init(struct testfilter *filter) { static const GUID clsid = {0xabacab}; memset(filter, 0, sizeof(*filter)); strmbase_filter_init(&filter->filter, NULL, &clsid, &testfilter_ops); strmbase_source_init(&filter->source, &filter->filter, L"source", &testsource_ops); + strmbase_sink_init(&filter->sink, &filter->filter, L"sink", &testsink_ops, NULL); }
static void test_sink_allocator(IMemInputPin *input) @@ -932,10 +953,117 @@ static void test_sink_allocator(IMemInputPin *input) IMemAllocator_Release(ret_allocator); }
+static void test_source_allocator(IFilterGraph2 *graph, IMediaControl *control, + IPin *sink, IPin *source, struct testfilter *testsource, struct testfilter *testsink) +{ + ALLOCATOR_PROPERTIES props, req_props = {2, 30000, 32, 0}; + IMemAllocator *allocator; + IMediaSample *sample; + WAVEFORMATEX format; + AM_MEDIA_TYPE mt; + HRESULT hr; + + hr = IFilterGraph2_ConnectDirect(graph, &testsource->source.pin.IPin_iface, sink, &mp2_mt); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + + init_pcm_mt(&mt, &format, 1, 32000, 16); + hr = IFilterGraph2_ConnectDirect(graph, source, &testsink->sink.pin.IPin_iface, &mt); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + + ok(!!testsink->sink.pAllocator, "Expected an allocator.\n"); + hr = IMemAllocator_GetProperties(testsink->sink.pAllocator, &props); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + ok(props.cBuffers == 8, "Got %ld buffers.\n", props.cBuffers); + ok(props.cbBuffer == 9216, "Got size %ld.\n", props.cbBuffer); + ok(props.cbAlign == 1, "Got alignment %ld.\n", props.cbAlign); + ok(!props.cbPrefix, "Got prefix %ld.\n", props.cbPrefix); + + hr = IMemAllocator_GetBuffer(testsink->sink.pAllocator, &sample, NULL, NULL, 0); + ok(hr == VFW_E_NOT_COMMITTED, "Got hr %#lx.\n", hr); + + hr = IMediaControl_Pause(control); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + + hr = IMemAllocator_GetBuffer(testsink->sink.pAllocator, &sample, NULL, NULL, 0); + todo_wine ok(hr == S_OK, "Got hr %#lx.\n", hr); + if (hr == S_OK) + IMediaSample_Release(sample); + + hr = IMediaControl_Stop(control); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + + hr = IMemAllocator_GetBuffer(testsink->sink.pAllocator, &sample, NULL, NULL, 0); + ok(hr == VFW_E_NOT_COMMITTED, "Got hr %#lx.\n", hr); + + IFilterGraph2_Disconnect(graph, source); + IFilterGraph2_Disconnect(graph, &testsink->sink.pin.IPin_iface); + + init_pcm_mt(&mt, &format, 1, 32000, 8); + hr = IFilterGraph2_ConnectDirect(graph, source, &testsink->sink.pin.IPin_iface, &mt); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + + ok(!!testsink->sink.pAllocator, "Expected an allocator.\n"); + hr = IMemAllocator_GetProperties(testsink->sink.pAllocator, &props); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + ok(props.cBuffers == 8, "Got %ld buffers.\n", props.cBuffers); + ok(props.cbBuffer == 4608, "Got size %ld.\n", props.cbBuffer); + ok(props.cbAlign == 1, "Got alignment %ld.\n", props.cbAlign); + ok(!props.cbPrefix, "Got prefix %ld.\n", props.cbPrefix); + + IFilterGraph2_Disconnect(graph, source); + IFilterGraph2_Disconnect(graph, &testsink->sink.pin.IPin_iface); + + CoCreateInstance(&CLSID_MemoryAllocator, NULL, CLSCTX_INPROC_SERVER, + &IID_IMemAllocator, (void **)&allocator); + testsink->sink.pAllocator = allocator; + + hr = IMemAllocator_SetProperties(allocator, &req_props, &props); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + + init_pcm_mt(&mt, &format, 1, 32000, 16); + hr = IFilterGraph2_ConnectDirect(graph, source, &testsink->sink.pin.IPin_iface, &mt); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + + ok(testsink->sink.pAllocator == allocator, "Expected an allocator.\n"); + hr = IMemAllocator_GetProperties(testsink->sink.pAllocator, &props); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + ok(props.cBuffers == 8, "Got %ld buffers.\n", props.cBuffers); + ok(props.cbBuffer == 9216, "Got size %ld.\n", props.cbBuffer); + ok(props.cbAlign == 1, "Got alignment %ld.\n", props.cbAlign); + ok(!props.cbPrefix, "Got prefix %ld.\n", props.cbPrefix); + + IFilterGraph2_Disconnect(graph, source); + IFilterGraph2_Disconnect(graph, &testsink->sink.pin.IPin_iface); + + IFilterGraph2_Disconnect(graph, sink); + IFilterGraph2_Disconnect(graph, &testsource->source.pin.IPin_iface); + + hr = IFilterGraph2_ConnectDirect(graph, &testsource->source.pin.IPin_iface, sink, &mp1_mt); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + + init_pcm_mt(&mt, &format, 1, 32000, 16); + hr = IFilterGraph2_ConnectDirect(graph, source, &testsink->sink.pin.IPin_iface, &mt); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + + ok(!!testsink->sink.pAllocator, "Expected an allocator.\n"); + hr = IMemAllocator_GetProperties(testsink->sink.pAllocator, &props); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + ok(props.cBuffers == 8, "Got %ld buffers.\n", props.cBuffers); + ok(props.cbBuffer == 3072, "Got size %ld.\n", props.cbBuffer); + ok(props.cbAlign == 1, "Got alignment %ld.\n", props.cbAlign); + ok(!props.cbPrefix, "Got prefix %ld.\n", props.cbPrefix); + + IFilterGraph2_Disconnect(graph, source); + IFilterGraph2_Disconnect(graph, &testsink->sink.pin.IPin_iface); + + IFilterGraph2_Disconnect(graph, sink); + IFilterGraph2_Disconnect(graph, &testsource->source.pin.IPin_iface); +} + static void test_connect_pin(void) { IBaseFilter *filter = create_mpeg_audio_codec(); - struct testfilter testsource; + struct testfilter testsource, testsink; IPin *sink, *source, *peer; IEnumMediaTypes *enummt; WAVEFORMATEX req_format; @@ -951,6 +1079,8 @@ static void test_connect_pin(void) CoCreateInstance(&CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, &IID_IFilterGraph2, (void **)&graph); testfilter_init(&testsource); + testfilter_init(&testsink); + IFilterGraph2_AddFilter(graph, &testsink.filter.IBaseFilter_iface, L"sink"); IFilterGraph2_AddFilter(graph, &testsource.filter.IBaseFilter_iface, L"source"); IFilterGraph2_AddFilter(graph, filter, L"MPEG audio decoder"); IBaseFilter_FindPin(filter, L"In", &sink); @@ -958,6 +1088,8 @@ static void test_connect_pin(void) IPin_QueryInterface(sink, &IID_IMemInputPin, (void **)&meminput); IFilterGraph2_QueryInterface(graph, &IID_IMediaControl, (void **)&control);
+ test_source_allocator(graph, control, sink, source, &testsource, &testsink); + /* Test sink connection. */
peer = (IPin *)0xdeadbeef; @@ -1088,6 +1220,8 @@ static void test_connect_pin(void) ok(!ref, "Got outstanding refcount %ld.\n", ref); ref = IBaseFilter_Release(&testsource.filter.IBaseFilter_iface); ok(!ref, "Got outstanding refcount %ld.\n", ref); + ref = IBaseFilter_Release(&testsink.filter.IBaseFilter_iface); + ok(!ref, "Got outstanding refcount %ld.\n", ref); }
START_TEST(mpegaudio)
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=113933
Your paranoid android.
=== w1064 (64 bit report) ===
quartz: mpegaudio.c:1198: Test failed: 0: Media types didn't match. mpegaudio.c:1198: Test failed: 1: Media types didn't match.
=== w1064_2qxl (64 bit report) ===
quartz: mpegaudio.c:1198: Test failed: 0: Media types didn't match. mpegaudio.c:1198: Test failed: 1: Media types didn't match.
=== w1064_tsign (64 bit report) ===
quartz: mpegaudio.c:1198: Test failed: 0: Media types didn't match. mpegaudio.c:1198: Test failed: 1: Media types didn't match.
=== w10pro64 (64 bit report) ===
quartz: mpegaudio.c:1198: Test failed: 0: Media types didn't match. mpegaudio.c:1198: Test failed: 1: Media types didn't match.
=== w10pro64_ar (64 bit report) ===
quartz: mpegaudio.c:1198: Test failed: 0: Media types didn't match. mpegaudio.c:1198: Test failed: 1: Media types didn't match.
=== w10pro64_he (64 bit report) ===
quartz: mpegaudio.c:1198: Test failed: 0: Media types didn't match. mpegaudio.c:1198: Test failed: 1: Media types didn't match.
=== w10pro64_ja (64 bit report) ===
quartz: mpegaudio.c:1198: Test failed: 0: Media types didn't match. mpegaudio.c:1198: Test failed: 1: Media types didn't match.
=== w10pro64_zh_CN (64 bit report) ===
quartz: mpegaudio.c:1198: Test failed: 0: Media types didn't match. mpegaudio.c:1198: Test failed: 1: Media types didn't match.
=== debian11 (64 bit WoW report) ===
quartz: mpegaudio.c:1198: Test failed: 0: Media types didn't match. mpegaudio.c:1198: Test failed: 1: Media types didn't match.
Signed-off-by: Anton Baskanov baskanov@gmail.com --- dlls/quartz/tests/mpegaudio.c | 170 +++++++++++++++++++++++++++++++++- 1 file changed, 169 insertions(+), 1 deletion(-)
diff --git a/dlls/quartz/tests/mpegaudio.c b/dlls/quartz/tests/mpegaudio.c index 001fc50e878..b2554d81cc6 100644 --- a/dlls/quartz/tests/mpegaudio.c +++ b/dlls/quartz/tests/mpegaudio.c @@ -889,9 +889,30 @@ static HRESULT testsink_query_interface(struct strmbase_pin *iface, REFIID iid, return S_OK; }
+static HRESULT testsink_get_media_type(struct strmbase_pin *iface, unsigned int index, AM_MEDIA_TYPE *mt) +{ + struct testfilter *filter = impl_from_strmbase_filter(iface->filter); + if (!index && filter->mt) + { + CopyMediaType(mt, filter->mt); + return S_OK; + } + return VFW_S_NO_MORE_ITEMS; +} + +static HRESULT testsink_connect(struct strmbase_sink *iface, IPin *peer, const AM_MEDIA_TYPE *mt) +{ + struct testfilter *filter = impl_from_strmbase_filter(iface->pin.filter); + if (filter->mt && !IsEqualGUID(&mt->majortype, &filter->mt->majortype)) + return VFW_E_TYPE_NOT_ACCEPTED; + return S_OK; +} + static const struct strmbase_sink_ops testsink_ops = { .base.pin_query_interface = testsink_query_interface, + .base.pin_get_media_type = testsink_get_media_type, + .sink_connect = testsink_connect, };
static void testfilter_init(struct testfilter *filter) @@ -1064,11 +1085,12 @@ static void test_connect_pin(void) { IBaseFilter *filter = create_mpeg_audio_codec(); struct testfilter testsource, testsink; + AM_MEDIA_TYPE mt, source_mt, *pmt; + WAVEFORMATEX source_format; IPin *sink, *source, *peer; IEnumMediaTypes *enummt; WAVEFORMATEX req_format; IMediaControl *control; - AM_MEDIA_TYPE mt, *pmt; IMemInputPin *meminput; AM_MEDIA_TYPE req_mt; IFilterGraph2 *graph; @@ -1210,6 +1232,152 @@ static void test_connect_pin(void)
test_sink_allocator(meminput);
+ /* Test source connection. */ + + peer = (IPin *)0xdeadbeef; + hr = IPin_ConnectedTo(source, &peer); + ok(hr == VFW_E_NOT_CONNECTED, "Got hr %#lx.\n", hr); + ok(!peer, "Got peer %p.\n", peer); + + hr = IPin_ConnectionMediaType(source, &mt); + ok(hr == VFW_E_NOT_CONNECTED, "Got hr %#lx.\n", hr); + + /* Exact connection. */ + + hr = IMediaControl_Pause(control); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + init_pcm_mt(&req_mt, &req_format, 1, 32000, 16); + hr = IFilterGraph2_ConnectDirect(graph, source, &testsink.sink.pin.IPin_iface, &req_mt); + ok(hr == VFW_E_NOT_STOPPED, "Got hr %#lx.\n", hr); + hr = IMediaControl_Stop(control); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + + init_pcm_mt(&req_mt, &req_format, 1, 32000, 16); + hr = IFilterGraph2_ConnectDirect(graph, source, &testsink.sink.pin.IPin_iface, &req_mt); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + + hr = IPin_ConnectedTo(source, &peer); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + ok(peer == &testsink.sink.pin.IPin_iface, "Got peer %p.\n", peer); + IPin_Release(peer); + + hr = IPin_ConnectionMediaType(source, &mt); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + ok(compare_media_types(&mt, &req_mt), "Media types didn't match.\n"); + ok(compare_media_types(&testsink.sink.pin.mt, &req_mt), "Media types didn't match.\n"); + FreeMediaType(&mt); + + hr = IMediaControl_Pause(control); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + hr = IFilterGraph2_Disconnect(graph, source); + ok(hr == VFW_E_NOT_STOPPED, "Got hr %#lx.\n", hr); + hr = IMediaControl_Stop(control); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + + hr = IFilterGraph2_Disconnect(graph, source); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + hr = IFilterGraph2_Disconnect(graph, source); + ok(hr == S_FALSE, "Got hr %#lx.\n", hr); + ok(testsink.sink.pin.peer == source, "Got peer %p.\n", testsink.sink.pin.peer); + IFilterGraph2_Disconnect(graph, &testsink.sink.pin.IPin_iface); + + init_pcm_mt(&req_mt, &req_format, 1, 32000, 16); + req_mt.lSampleSize = 999; + req_mt.bTemporalCompression = TRUE; + hr = IFilterGraph2_ConnectDirect(graph, source, &testsink.sink.pin.IPin_iface, &req_mt); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + ok(compare_media_types(&testsink.sink.pin.mt, &req_mt), "Media types didn't match.\n"); + IFilterGraph2_Disconnect(graph, source); + IFilterGraph2_Disconnect(graph, &testsink.sink.pin.IPin_iface); + + init_pcm_mt(&req_mt, &req_format, 1, 32000, 16); + req_mt.formattype = FORMAT_None; + hr = IFilterGraph2_ConnectDirect(graph, source, &testsink.sink.pin.IPin_iface, &req_mt); + ok(hr == VFW_E_TYPE_NOT_ACCEPTED, "Got hr %#lx.\n", hr); + + /* Connection with wildcards. */ + + init_pcm_mt(&source_mt, &source_format, 1, 32000, 16); + + init_pcm_mt(&req_mt, &req_format, 1, 32000, 16); + hr = IFilterGraph2_ConnectDirect(graph, source, &testsink.sink.pin.IPin_iface, NULL); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + ok(compare_media_types(&testsink.sink.pin.mt, &source_mt), "Media types didn't match.\n"); + IFilterGraph2_Disconnect(graph, source); + IFilterGraph2_Disconnect(graph, &testsink.sink.pin.IPin_iface); + + init_pcm_mt(&req_mt, &req_format, 1, 32000, 16); + req_mt.majortype = GUID_NULL; + hr = IFilterGraph2_ConnectDirect(graph, source, &testsink.sink.pin.IPin_iface, &req_mt); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + ok(compare_media_types(&testsink.sink.pin.mt, &source_mt), "Media types didn't match.\n"); + IFilterGraph2_Disconnect(graph, source); + IFilterGraph2_Disconnect(graph, &testsink.sink.pin.IPin_iface); + + init_pcm_mt(&req_mt, &req_format, 1, 32000, 16); + req_mt.majortype = GUID_NULL; + req_mt.subtype = GUID_NULL; + hr = IFilterGraph2_ConnectDirect(graph, source, &testsink.sink.pin.IPin_iface, &req_mt); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + ok(compare_media_types(&testsink.sink.pin.mt, &source_mt), "Media types didn't match.\n"); + IFilterGraph2_Disconnect(graph, source); + IFilterGraph2_Disconnect(graph, &testsink.sink.pin.IPin_iface); + + init_pcm_mt(&req_mt, &req_format, 1, 32000, 16); + req_mt.majortype = GUID_NULL; + req_mt.subtype = GUID_NULL; + req_mt.formattype = FORMAT_None; + hr = IFilterGraph2_ConnectDirect(graph, source, &testsink.sink.pin.IPin_iface, &req_mt); + ok(hr == VFW_E_NO_ACCEPTABLE_TYPES, "Got hr %#lx.\n", hr); + + init_pcm_mt(&req_mt, &req_format, 1, 32000, 16); + req_mt.formattype = GUID_NULL; + hr = IFilterGraph2_ConnectDirect(graph, source, &testsink.sink.pin.IPin_iface, &req_mt); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + ok(compare_media_types(&testsink.sink.pin.mt, &source_mt), "Media types didn't match.\n"); + IFilterGraph2_Disconnect(graph, source); + IFilterGraph2_Disconnect(graph, &testsink.sink.pin.IPin_iface); + + init_pcm_mt(&req_mt, &req_format, 1, 32000, 16); + req_mt.subtype = GUID_NULL; + req_mt.formattype = GUID_NULL; + hr = IFilterGraph2_ConnectDirect(graph, source, &testsink.sink.pin.IPin_iface, &req_mt); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + ok(compare_media_types(&testsink.sink.pin.mt, &source_mt), "Media types didn't match.\n"); + IFilterGraph2_Disconnect(graph, source); + IFilterGraph2_Disconnect(graph, &testsink.sink.pin.IPin_iface); + + init_pcm_mt(&req_mt, &req_format, 1, 32000, 16); + req_mt.majortype = MEDIATYPE_Video; + req_mt.subtype = GUID_NULL; + req_mt.formattype = GUID_NULL; + hr = IFilterGraph2_ConnectDirect(graph, source, &testsink.sink.pin.IPin_iface, &req_mt); + ok(hr == VFW_E_NO_ACCEPTABLE_TYPES, "Got hr %#lx.\n", hr); + + /* Test enumeration of sink media types. */ + + init_pcm_mt(&req_mt, &req_format, 1, 32000, 16); + req_mt.majortype = MEDIATYPE_Video; + req_mt.subtype = GUID_NULL; + req_mt.formattype = GUID_NULL; + testsink.mt = &req_mt; + hr = IFilterGraph2_ConnectDirect(graph, source, &testsink.sink.pin.IPin_iface, NULL); + ok(hr == VFW_E_NO_ACCEPTABLE_TYPES, "Got hr %#lx.\n", hr); + + init_pcm_mt(&req_mt, &req_format, 1, 32000, 16); + req_mt.lSampleSize = 444; + testsink.mt = &req_mt; + hr = IFilterGraph2_ConnectDirect(graph, source, &testsink.sink.pin.IPin_iface, NULL); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + ok(compare_media_types(&testsink.sink.pin.mt, &req_mt), "Media types didn't match.\n"); + + hr = IFilterGraph2_Disconnect(graph, sink); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + hr = IFilterGraph2_Disconnect(graph, sink); + ok(hr == S_FALSE, "Got hr %#lx.\n", hr); + ok(testsource.source.pin.peer == sink, "Got peer %p.\n", testsource.source.pin.peer); + IFilterGraph2_Disconnect(graph, &testsource.source.pin.IPin_iface); + IMemInputPin_Release(meminput); IPin_Release(sink); IPin_Release(source);
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=113934
Your paranoid android.
=== w864 (64 bit report) ===
quartz: mpegaudio.c:1305: Test failed: Media types didn't match. mpegaudio.c:1313: Test failed: Media types didn't match. mpegaudio.c:1322: Test failed: Media types didn't match. mpegaudio.c:1337: Test failed: Media types didn't match. mpegaudio.c:1346: Test failed: Media types didn't match.
=== w1064 (64 bit report) ===
quartz: mpegaudio.c:1220: Test failed: 0: Media types didn't match. mpegaudio.c:1220: Test failed: 1: Media types didn't match. mpegaudio.c:1305: Test failed: Media types didn't match. mpegaudio.c:1313: Test failed: Media types didn't match. mpegaudio.c:1322: Test failed: Media types didn't match. mpegaudio.c:1337: Test failed: Media types didn't match. mpegaudio.c:1346: Test failed: Media types didn't match.
=== w1064_2qxl (64 bit report) ===
quartz: mpegaudio.c:1220: Test failed: 0: Media types didn't match. mpegaudio.c:1220: Test failed: 1: Media types didn't match. mpegaudio.c:1305: Test failed: Media types didn't match. mpegaudio.c:1313: Test failed: Media types didn't match. mpegaudio.c:1322: Test failed: Media types didn't match. mpegaudio.c:1337: Test failed: Media types didn't match. mpegaudio.c:1346: Test failed: Media types didn't match.
=== w1064_tsign (64 bit report) ===
quartz: mpegaudio.c:1220: Test failed: 0: Media types didn't match. mpegaudio.c:1220: Test failed: 1: Media types didn't match. mpegaudio.c:1305: Test failed: Media types didn't match. mpegaudio.c:1313: Test failed: Media types didn't match. mpegaudio.c:1322: Test failed: Media types didn't match. mpegaudio.c:1337: Test failed: Media types didn't match. mpegaudio.c:1346: Test failed: Media types didn't match.
=== w10pro64 (64 bit report) ===
quartz: mpegaudio.c:1220: Test failed: 0: Media types didn't match. mpegaudio.c:1220: Test failed: 1: Media types didn't match. mpegaudio.c:1305: Test failed: Media types didn't match. mpegaudio.c:1313: Test failed: Media types didn't match. mpegaudio.c:1322: Test failed: Media types didn't match. mpegaudio.c:1337: Test failed: Media types didn't match. mpegaudio.c:1346: Test failed: Media types didn't match.
=== w10pro64_ar (64 bit report) ===
quartz: mpegaudio.c:1220: Test failed: 0: Media types didn't match. mpegaudio.c:1220: Test failed: 1: Media types didn't match. mpegaudio.c:1305: Test failed: Media types didn't match. mpegaudio.c:1313: Test failed: Media types didn't match. mpegaudio.c:1322: Test failed: Media types didn't match. mpegaudio.c:1337: Test failed: Media types didn't match. mpegaudio.c:1346: Test failed: Media types didn't match.
=== w10pro64_he (64 bit report) ===
quartz: mpegaudio.c:1220: Test failed: 0: Media types didn't match. mpegaudio.c:1220: Test failed: 1: Media types didn't match. mpegaudio.c:1305: Test failed: Media types didn't match. mpegaudio.c:1313: Test failed: Media types didn't match. mpegaudio.c:1322: Test failed: Media types didn't match. mpegaudio.c:1337: Test failed: Media types didn't match. mpegaudio.c:1346: Test failed: Media types didn't match.
=== w10pro64_ja (64 bit report) ===
quartz: mpegaudio.c:1220: Test failed: 0: Media types didn't match. mpegaudio.c:1220: Test failed: 1: Media types didn't match. mpegaudio.c:1305: Test failed: Media types didn't match. mpegaudio.c:1313: Test failed: Media types didn't match. mpegaudio.c:1322: Test failed: Media types didn't match. mpegaudio.c:1337: Test failed: Media types didn't match. mpegaudio.c:1346: Test failed: Media types didn't match.
=== w10pro64_zh_CN (64 bit report) ===
quartz: mpegaudio.c:1220: Test failed: 0: Media types didn't match. mpegaudio.c:1220: Test failed: 1: Media types didn't match. mpegaudio.c:1305: Test failed: Media types didn't match. mpegaudio.c:1313: Test failed: Media types didn't match. mpegaudio.c:1322: Test failed: Media types didn't match. mpegaudio.c:1337: Test failed: Media types didn't match. mpegaudio.c:1346: Test failed: Media types didn't match.
=== debian11 (64 bit WoW report) ===
quartz: mpegaudio.c:1220: Test failed: 0: Media types didn't match. mpegaudio.c:1220: Test failed: 1: Media types didn't match. mpegaudio.c:1305: Test failed: Media types didn't match. mpegaudio.c:1313: Test failed: Media types didn't match. mpegaudio.c:1322: Test failed: Media types didn't match. mpegaudio.c:1337: Test failed: Media types didn't match. mpegaudio.c:1346: Test failed: Media types didn't match.
Signed-off-by: Anton Baskanov baskanov@gmail.com --- dlls/quartz/tests/mpegaudio.c | 2 +- dlls/winegstreamer/quartz_transform.c | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-)
diff --git a/dlls/quartz/tests/mpegaudio.c b/dlls/quartz/tests/mpegaudio.c index b2554d81cc6..2b2fb9a0832 100644 --- a/dlls/quartz/tests/mpegaudio.c +++ b/dlls/quartz/tests/mpegaudio.c @@ -1006,7 +1006,7 @@ static void test_source_allocator(IFilterGraph2 *graph, IMediaControl *control, ok(hr == S_OK, "Got hr %#lx.\n", hr);
hr = IMemAllocator_GetBuffer(testsink->sink.pAllocator, &sample, NULL, NULL, 0); - todo_wine ok(hr == S_OK, "Got hr %#lx.\n", hr); + ok(hr == S_OK, "Got hr %#lx.\n", hr); if (hr == S_OK) IMediaSample_Release(sample);
diff --git a/dlls/winegstreamer/quartz_transform.c b/dlls/winegstreamer/quartz_transform.c index 183fb823d40..375c549aad5 100644 --- a/dlls/winegstreamer/quartz_transform.c +++ b/dlls/winegstreamer/quartz_transform.c @@ -66,10 +66,37 @@ static void transform_destroy(struct strmbase_filter *iface) free(filter); }
+static HRESULT transform_init_stream(struct strmbase_filter *iface) +{ + struct transform *filter = impl_from_strmbase_filter(iface); + HRESULT hr; + + if (filter->source.pin.peer) + { + hr = IMemAllocator_Commit(filter->source.pAllocator); + if (FAILED(hr)) + ERR("Failed to commit allocator, hr %#lx.\n", hr); + } + + return S_OK; +} + +static HRESULT transform_cleanup_stream(struct strmbase_filter *iface) +{ + struct transform *filter = impl_from_strmbase_filter(iface); + + if (filter->source.pin.peer) + IMemAllocator_Decommit(filter->source.pAllocator); + + return S_OK; +} + static const struct strmbase_filter_ops filter_ops = { .filter_get_pin = transform_get_pin, .filter_destroy = transform_destroy, + .filter_init_stream = transform_init_stream, + .filter_cleanup_stream = transform_cleanup_stream, };
static HRESULT transform_sink_query_accept(struct strmbase_pin *pin, const AM_MEDIA_TYPE *mt)
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=113935
Your paranoid android.
=== w864 (64 bit report) ===
quartz: mpegaudio.c:1220: Test failed: 0: Media types didn't match. mpegaudio.c:1220: Test failed: 1: Media types didn't match. mpegaudio.c:1305: Test failed: Media types didn't match. mpegaudio.c:1313: Test failed: Media types didn't match. mpegaudio.c:1322: Test failed: Media types didn't match. mpegaudio.c:1337: Test failed: Media types didn't match. mpegaudio.c:1346: Test failed: Media types didn't match.
=== w1064 (64 bit report) ===
quartz: mpegaudio.c:1220: Test failed: 0: Media types didn't match. mpegaudio.c:1220: Test failed: 1: Media types didn't match. mpegaudio.c:1305: Test failed: Media types didn't match. mpegaudio.c:1313: Test failed: Media types didn't match. mpegaudio.c:1322: Test failed: Media types didn't match. mpegaudio.c:1337: Test failed: Media types didn't match. mpegaudio.c:1346: Test failed: Media types didn't match.
=== w1064_2qxl (64 bit report) ===
quartz: mpegaudio.c:1220: Test failed: 0: Media types didn't match. mpegaudio.c:1220: Test failed: 1: Media types didn't match. mpegaudio.c:1305: Test failed: Media types didn't match. mpegaudio.c:1313: Test failed: Media types didn't match. mpegaudio.c:1322: Test failed: Media types didn't match. mpegaudio.c:1337: Test failed: Media types didn't match. mpegaudio.c:1346: Test failed: Media types didn't match.
=== w1064_tsign (64 bit report) ===
quartz: mpegaudio.c:1220: Test failed: 0: Media types didn't match. mpegaudio.c:1220: Test failed: 1: Media types didn't match. mpegaudio.c:1305: Test failed: Media types didn't match. mpegaudio.c:1313: Test failed: Media types didn't match. mpegaudio.c:1322: Test failed: Media types didn't match. mpegaudio.c:1337: Test failed: Media types didn't match. mpegaudio.c:1346: Test failed: Media types didn't match.
=== w10pro64 (64 bit report) ===
quartz: mpegaudio.c:1220: Test failed: 0: Media types didn't match. mpegaudio.c:1220: Test failed: 1: Media types didn't match. mpegaudio.c:1305: Test failed: Media types didn't match. mpegaudio.c:1313: Test failed: Media types didn't match. mpegaudio.c:1322: Test failed: Media types didn't match. mpegaudio.c:1337: Test failed: Media types didn't match. mpegaudio.c:1346: Test failed: Media types didn't match.
=== w10pro64_ar (64 bit report) ===
quartz: mpegaudio.c:1220: Test failed: 0: Media types didn't match. mpegaudio.c:1220: Test failed: 1: Media types didn't match. mpegaudio.c:1305: Test failed: Media types didn't match. mpegaudio.c:1313: Test failed: Media types didn't match. mpegaudio.c:1322: Test failed: Media types didn't match. mpegaudio.c:1337: Test failed: Media types didn't match. mpegaudio.c:1346: Test failed: Media types didn't match.
=== w10pro64_he (64 bit report) ===
quartz: mpegaudio.c:1220: Test failed: 0: Media types didn't match. mpegaudio.c:1220: Test failed: 1: Media types didn't match. mpegaudio.c:1305: Test failed: Media types didn't match. mpegaudio.c:1313: Test failed: Media types didn't match. mpegaudio.c:1322: Test failed: Media types didn't match. mpegaudio.c:1337: Test failed: Media types didn't match. mpegaudio.c:1346: Test failed: Media types didn't match.
=== w10pro64_ja (64 bit report) ===
quartz: mpegaudio.c:1220: Test failed: 0: Media types didn't match. mpegaudio.c:1220: Test failed: 1: Media types didn't match. mpegaudio.c:1305: Test failed: Media types didn't match. mpegaudio.c:1313: Test failed: Media types didn't match. mpegaudio.c:1322: Test failed: Media types didn't match. mpegaudio.c:1337: Test failed: Media types didn't match. mpegaudio.c:1346: Test failed: Media types didn't match.
=== w10pro64_zh_CN (64 bit report) ===
quartz: mpegaudio.c:1220: Test failed: 0: Media types didn't match. mpegaudio.c:1220: Test failed: 1: Media types didn't match. mpegaudio.c:1305: Test failed: Media types didn't match. mpegaudio.c:1313: Test failed: Media types didn't match. mpegaudio.c:1322: Test failed: Media types didn't match. mpegaudio.c:1337: Test failed: Media types didn't match. mpegaudio.c:1346: Test failed: Media types didn't match.
=== debian11 (64 bit WoW report) ===
quartz: mpegaudio.c:1220: Test failed: 0: Media types didn't match. mpegaudio.c:1220: Test failed: 1: Media types didn't match. mpegaudio.c:1305: Test failed: Media types didn't match. mpegaudio.c:1313: Test failed: Media types didn't match. mpegaudio.c:1322: Test failed: Media types didn't match. mpegaudio.c:1337: Test failed: Media types didn't match. mpegaudio.c:1346: Test failed: Media types didn't match.