From: Anton Baskanov baskanov@gmail.com
Signed-off-by: Anton Baskanov baskanov@gmail.com --- dlls/quartz/tests/mpeglayer3.c | 52 ++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+)
diff --git a/dlls/quartz/tests/mpeglayer3.c b/dlls/quartz/tests/mpeglayer3.c index be4a1dfa97f..38c81259674 100644 --- a/dlls/quartz/tests/mpeglayer3.c +++ b/dlls/quartz/tests/mpeglayer3.c @@ -827,6 +827,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_layer3_decoder(); @@ -942,6 +992,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);
From: Anton Baskanov baskanov@gmail.com
Signed-off-by: Anton Baskanov baskanov@gmail.com --- dlls/quartz/tests/mpeglayer3.c | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-)
diff --git a/dlls/quartz/tests/mpeglayer3.c b/dlls/quartz/tests/mpeglayer3.c index 38c81259674..a9d2c397093 100644 --- a/dlls/quartz/tests/mpeglayer3.c +++ b/dlls/quartz/tests/mpeglayer3.c @@ -881,13 +881,16 @@ static void test_connect_pin(void) { IBaseFilter *filter = create_mpeg_layer3_decoder(); struct testfilter testsource; + WAVEFORMATEX expect_format; IPin *sink, *source, *peer; + IEnumMediaTypes *enummt; + AM_MEDIA_TYPE expect_mt; WAVEFORMATEX req_format; IMediaControl *control; + AM_MEDIA_TYPE mt, *pmt; IMemInputPin *meminput; AM_MEDIA_TYPE req_mt; IFilterGraph2 *graph; - AM_MEDIA_TYPE mt; HRESULT hr; ULONG ref;
@@ -992,6 +995,29 @@ 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); + + init_pcm_mt(&expect_mt, &expect_format, 1, 32000, 16); + expect_mt.lSampleSize = 2304; + + hr = IEnumMediaTypes_Next(enummt, 1, &pmt, NULL); + todo_wine ok(hr == S_OK, "Got hr %#lx.\n", hr); + if (hr == S_OK) + { + ok(!memcmp(pmt, &expect_mt, offsetof(AM_MEDIA_TYPE, cbFormat)), + "Media types didn't match.\n"); + ok(!memcmp(pmt->pbFormat, &expect_format, sizeof(WAVEFORMATEX)), + "Format blocks didn't match.\n"); + + 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);
From: Anton Baskanov baskanov@gmail.com
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=18773 Signed-off-by: Anton Baskanov baskanov@gmail.com --- dlls/quartz/tests/mpeglayer3.c | 2 +- dlls/winegstreamer/quartz_transform.c | 34 ++++++++++++++++++++++++++- 2 files changed, 34 insertions(+), 2 deletions(-)
diff --git a/dlls/quartz/tests/mpeglayer3.c b/dlls/quartz/tests/mpeglayer3.c index a9d2c397093..11b4f3d59ea 100644 --- a/dlls/quartz/tests/mpeglayer3.c +++ b/dlls/quartz/tests/mpeglayer3.c @@ -1002,7 +1002,7 @@ static void test_connect_pin(void) expect_mt.lSampleSize = 2304;
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) { 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 db2c5f69a5b..05b22c8e754 100644 --- a/dlls/winegstreamer/quartz_transform.c +++ b/dlls/winegstreamer/quartz_transform.c @@ -766,7 +766,39 @@ static HRESULT mpeg_layer3_decoder_source_query_accept(struct transform *filter,
static HRESULT mpeg_layer3_decoder_source_get_media_type(struct transform *filter, unsigned int index, AM_MEDIA_TYPE *mt) { - return VFW_S_NO_MORE_ITEMS; + const MPEGLAYER3WAVEFORMAT *input_format; + WAVEFORMATEX *output_format; + + if (!filter->sink.pin.peer) + return VFW_S_NO_MORE_ITEMS; + + if (index > 0) + return VFW_S_NO_MORE_ITEMS; + + input_format = (const MPEGLAYER3WAVEFORMAT *)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 = 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 = 1152 * output_format->nBlockAlign; + mt->formattype = FORMAT_WaveFormatEx; + mt->cbFormat = sizeof(*output_format); + mt->pbFormat = (BYTE *)output_format; + + return S_OK; }
static HRESULT mpeg_layer3_decoder_source_decide_buffer_size(struct transform *filter, IMemAllocator *allocator, ALLOCATOR_PROPERTIES *props)
From: Anton Baskanov baskanov@gmail.com
Signed-off-by: Anton Baskanov baskanov@gmail.com --- dlls/winegstreamer/quartz_transform.c | 30 +++++++++++++++++++++++++++ 1 file changed, 30 insertions(+)
diff --git a/dlls/winegstreamer/quartz_transform.c b/dlls/winegstreamer/quartz_transform.c index 05b22c8e754..c74938da082 100644 --- a/dlls/winegstreamer/quartz_transform.c +++ b/dlls/winegstreamer/quartz_transform.c @@ -816,9 +816,39 @@ static const struct transform_ops mpeg_layer3_decoder_transform_ops =
HRESULT mpeg_layer3_decoder_create(IUnknown *outer, IUnknown **out) { + static const struct wg_format output_format = + { + .major_type = WG_MAJOR_TYPE_AUDIO, + .u.audio = + { + .format = WG_AUDIO_FORMAT_S16LE, + .channel_mask = 1, + .channels = 1, + .rate = 44100, + }, + }; + static const struct wg_format input_format = + { + .major_type = WG_MAJOR_TYPE_AUDIO_MPEG1, + .u.audio_mpeg1 = + { + .layer = 3, + .channels = 1, + .rate = 44100, + }, + }; + struct wg_transform *transform; struct transform *object; HRESULT hr;
+ transform = wg_transform_create(&input_format, &output_format); + if (!transform) + { + ERR_(winediag)("GStreamer doesn't support MPEG-1 audio decoding, please install appropriate plugins.\n"); + return E_FAIL; + } + wg_transform_destroy(transform); + hr = transform_create(outer, &CLSID_mpeg_layer3_decoder, &mpeg_layer3_decoder_transform_ops, &object); if (FAILED(hr)) return hr;
From: Anton Baskanov baskanov@gmail.com
Signed-off-by: Anton Baskanov baskanov@gmail.com --- dlls/quartz/tests/mpeglayer3.c | 102 ++++++++++++++++++++++++++++++++- 1 file changed, 101 insertions(+), 1 deletion(-)
diff --git a/dlls/quartz/tests/mpeglayer3.c b/dlls/quartz/tests/mpeglayer3.c index 11b4f3d59ea..09267a5a007 100644 --- a/dlls/quartz/tests/mpeglayer3.c +++ b/dlls/quartz/tests/mpeglayer3.c @@ -779,6 +779,7 @@ struct testfilter { struct strmbase_filter filter; struct strmbase_source source; + struct strmbase_sink sink; };
static inline struct testfilter *impl_from_strmbase_filter(struct strmbase_filter *iface) @@ -798,6 +799,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); }
@@ -819,12 +821,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) @@ -877,10 +898,83 @@ 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, &mp3_mt1); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + + init_pcm_mt(&mt, &format, 1, 32000, 16); + mt.lSampleSize = 2222; + 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); + todo_wine ok(props.cBuffers == 8, "Got %ld buffers.\n", props.cBuffers); + todo_wine ok(props.cbBuffer == 8888, "Got size %ld.\n", props.cbBuffer); + todo_wine 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); + + 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); + mt.lSampleSize = 2222; + 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); + todo_wine ok(props.cBuffers == 8, "Got %ld buffers.\n", props.cBuffers); + todo_wine ok(props.cbBuffer == 8888, "Got size %ld.\n", props.cbBuffer); + todo_wine 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_layer3_decoder(); - struct testfilter testsource; + struct testfilter testsource, testsink; WAVEFORMATEX expect_format; IPin *sink, *source, *peer; IEnumMediaTypes *enummt; @@ -897,6 +991,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 layer-3 decoder"); IBaseFilter_FindPin(filter, L"In", &sink); @@ -904,6 +1000,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; @@ -1030,6 +1128,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(mpeglayer3)
From: Anton Baskanov baskanov@gmail.com
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=18773 Signed-off-by: Anton Baskanov baskanov@gmail.com --- dlls/quartz/tests/mpeglayer3.c | 14 +++++++------- dlls/winegstreamer/quartz_transform.c | 8 +++++++- 2 files changed, 14 insertions(+), 8 deletions(-)
diff --git a/dlls/quartz/tests/mpeglayer3.c b/dlls/quartz/tests/mpeglayer3.c index 09267a5a007..d5c6dc7dbc3 100644 --- a/dlls/quartz/tests/mpeglayer3.c +++ b/dlls/quartz/tests/mpeglayer3.c @@ -919,9 +919,9 @@ static void test_source_allocator(IFilterGraph2 *graph, IMediaControl *control, ok(!!testsink->sink.pAllocator, "Expected an allocator.\n"); hr = IMemAllocator_GetProperties(testsink->sink.pAllocator, &props); ok(hr == S_OK, "Got hr %#lx.\n", hr); - todo_wine ok(props.cBuffers == 8, "Got %ld buffers.\n", props.cBuffers); - todo_wine ok(props.cbBuffer == 8888, "Got size %ld.\n", props.cbBuffer); - todo_wine ok(props.cbAlign == 1, "Got alignment %ld.\n", props.cbAlign); + ok(props.cBuffers == 8, "Got %ld buffers.\n", props.cBuffers); + ok(props.cbBuffer == 8888, "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); @@ -931,7 +931,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);
@@ -959,9 +959,9 @@ static void test_source_allocator(IFilterGraph2 *graph, IMediaControl *control, 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); - todo_wine ok(props.cBuffers == 8, "Got %ld buffers.\n", props.cBuffers); - todo_wine ok(props.cbBuffer == 8888, "Got size %ld.\n", props.cbBuffer); - todo_wine ok(props.cbAlign == 1, "Got alignment %ld.\n", props.cbAlign); + ok(props.cBuffers == 8, "Got %ld buffers.\n", props.cBuffers); + ok(props.cbBuffer == 8888, "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); diff --git a/dlls/winegstreamer/quartz_transform.c b/dlls/winegstreamer/quartz_transform.c index c74938da082..6520f697ce4 100644 --- a/dlls/winegstreamer/quartz_transform.c +++ b/dlls/winegstreamer/quartz_transform.c @@ -803,7 +803,13 @@ static HRESULT mpeg_layer3_decoder_source_get_media_type(struct transform *filte
static HRESULT mpeg_layer3_decoder_source_decide_buffer_size(struct transform *filter, IMemAllocator *allocator, ALLOCATOR_PROPERTIES *props) { - return S_OK; + ALLOCATOR_PROPERTIES ret_props; + + props->cBuffers = max(props->cBuffers, 8); + props->cbBuffer = max(props->cbBuffer, filter->source.pin.mt.lSampleSize * 4); + props->cbAlign = max(props->cbAlign, 1); + + return IMemAllocator_SetProperties(allocator, props, &ret_props); }
static const struct transform_ops mpeg_layer3_decoder_transform_ops =
Hi,
It looks like your patch introduced the new failures shown below. Please investigate and fix them before resubmitting your patch. If they are not new, fixing them anyway would help a lot. Otherwise please ask for the known failures list to be updated.
The tests also ran into some preexisting test failures. If you know how to fix them that would be helpful. See the TestBot job for the details:
The full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=125911
Your paranoid android.
=== debian11 (32 bit report) ===
d3d8: device.c:3365: Test failed: Expected message 0x1c for window 0x1, but didn't receive it
d3d9: device.c:3313: Test failed: Failed to create a D3D object.
I don't have access to a real Windows XP machine at the moment, but this fails for me with l3codecx.ax from winetricks:
``` leslie@terabithia:~/git/wine32/dlls/quartz/tests$ make -j8 && WINEDEBUG=-all WINETEST_PLATFORM=windows WINEDLLOVERRIDES=l3codecx.ax=n wine i386-windows/quartz_test.exe mpeglayer3 make[1]: Entering directory '/home/leslie/git/wine32' make[1]: Nothing to be done for 'dlls/quartz/tests/all'. make[1]: Leaving directory '/home/leslie/git/wine32' mpeglayer3.c:922: Test failed: Got 16 buffers. mpeglayer3.c:923: Test failed: Got size 2222. mpeglayer3.c:962: Test failed: Got 16 buffers. mpeglayer3.c:963: Test failed: Got size 2222. 0020:mpeglayer3: 257 tests executed (0 marked as todo, 0 as flaky, 4 failures), 0 skipped. ```