RE:D Cherish depends on this.
To demonstrate the difference in behavior, we need a special MPEG program stream that is at least 32kB over in size.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=56485
-- v3: winegstreamer: Seek to the end after MPEG splitter connection. quartz/tests: Test read position after MPEG splitter connection.
From: Akihiro Sagawa sagawa.aki@gmail.com
To demonstrate the difference in behavior, we need a special MPEG program stream that is at least 32kB over in size. --- dlls/quartz/tests/mpegsplit.c | 50 +++++++++++++++++++++++++++++++++- dlls/quartz/tests/rsrc.rc | 4 +++ dlls/quartz/tests/test2.mpg | Bin 0 -> 34816 bytes 3 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 dlls/quartz/tests/test2.mpg
diff --git a/dlls/quartz/tests/mpegsplit.c b/dlls/quartz/tests/mpegsplit.c index 8fd0202c58e..8799c6afb8f 100644 --- a/dlls/quartz/tests/mpegsplit.c +++ b/dlls/quartz/tests/mpegsplit.c @@ -1084,6 +1084,7 @@ struct testfilter HANDLE eos_event; unsigned int sample_count, eos_count, new_segment_count, byte_count; REFERENCE_TIME segment_start, segment_end_min, segment_end_max, seek_start, seek_end; + LONGLONG read_position; };
static inline struct testfilter *impl_from_strmbase_filter(struct strmbase_filter *iface) @@ -1318,7 +1319,9 @@ static HRESULT WINAPI async_reader_SyncReadAligned(IAsyncReader *iface, IMediaSa
static HRESULT WINAPI async_reader_SyncRead(IAsyncReader *iface, LONGLONG position, LONG length, BYTE *buffer) { - return IAsyncReader_SyncRead(impl_from_IAsyncReader(iface)->reader, position, length, buffer); + struct testfilter *filter = impl_from_IAsyncReader(iface); + filter->read_position = position + length; + return IAsyncReader_SyncRead(filter->reader, position, length, buffer); }
static HRESULT WINAPI async_reader_Length(IAsyncReader *iface, LONGLONG *total, LONGLONG *available) @@ -2148,6 +2151,50 @@ static void test_no_acceptable_type(void) DeleteFileW(filename); }
+static void test_video_read_position(void) +{ + IBaseFilter *filter = create_mpeg_splitter(), *reader; + const WCHAR *filename = load_resource(L"test2.mpg"); + struct IFileSourceFilter *filesource; + struct testfilter testsource; + LONGLONG total, avail; + IFilterGraph2 *graph; + IPin *sink, *source; + HRESULT hr; + BOOL ret; + + CoCreateInstance(&CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, + &IID_IFilterGraph2, (void **)&graph); + testfilter_init(&testsource); + IFilterGraph2_AddFilter(graph, &testsource.filter.IBaseFilter_iface, L"source"); + IFilterGraph2_AddFilter(graph, filter, L"splitter"); + hr = IBaseFilter_FindPin(filter, L"Input", &sink); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + + CoCreateInstance(&CLSID_AsyncReader, NULL, CLSCTX_INPROC_SERVER, + &IID_IBaseFilter, (void **)&reader); + IBaseFilter_QueryInterface(reader, &IID_IFileSourceFilter, (void **)&filesource); + IFileSourceFilter_Load(filesource, filename, NULL); + IFileSourceFilter_Release(filesource); + IBaseFilter_FindPin(reader, L"Output", &source); + IPin_QueryInterface(source, &IID_IAsyncReader, (void **)&testsource.reader); + IAsyncReader_Length(testsource.reader, &total, &avail); + IPin_Release(source); + + hr = IFilterGraph2_ConnectDirect(graph, &testsource.source.pin.IPin_iface, sink, NULL); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + todo_wine ok(testsource.read_position == total, "Got 0x%s, expected 0x%s.\n", wine_dbgstr_longlong(testsource.read_position), wine_dbgstr_longlong(total)); + + IAsyncReader_Release(testsource.reader); + IPin_Release(sink); + IFilterGraph2_Release(graph); + IBaseFilter_Release(reader); + IBaseFilter_Release(filter); + IBaseFilter_Release(&testsource.filter.IBaseFilter_iface); + ret = DeleteFileW(filename); + ok(ret, "Failed to delete file, error %lu.\n", GetLastError()); +} + START_TEST(mpegsplit) { IBaseFilter *filter; @@ -2176,6 +2223,7 @@ START_TEST(mpegsplit) test_large_file(); test_video_file(); test_no_acceptable_type(); + test_video_read_position();
CoUninitialize(); } diff --git a/dlls/quartz/tests/rsrc.rc b/dlls/quartz/tests/rsrc.rc index 2cc0d789ff0..a16edacf1d1 100644 --- a/dlls/quartz/tests/rsrc.rc +++ b/dlls/quartz/tests/rsrc.rc @@ -35,3 +35,7 @@ test.mp3 RCDATA "test.mp3" /* ffmpeg -f lavfi -i "sine=frequency=600" -t 0.1 -ar 44100 -f wav -acodec pcm_u8 test.wav */ /* @makedep: test.wav */ test.wav RCDATA "test.wav" + +/* ffmpeg -f lavfi -i smptebars -f lavfi -i "sine=frequency=1000" -t 2.04 -r 25 -f mpeg -vcodec mpeg1video -vf scale=64x48 -acodec mp2 -ar 32k -ab 96k test2.mpg */ +/* @makedep: test2.mpg */ +test2.mpg RCDATA "test2.mpg" diff --git a/dlls/quartz/tests/test2.mpg b/dlls/quartz/tests/test2.mpg new file mode 100644 index 0000000000000000000000000000000000000000..5122b6845a8a1591d8e3d23a9a7002c72ad3a165 GIT binary patch literal 34816 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
literal 0 HcmV?d00001
From: Akihiro Sagawa sagawa.aki@gmail.com
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=56485 --- dlls/quartz/tests/mpegsplit.c | 2 +- dlls/winegstreamer/quartz_parser.c | 20 +++++++++++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-)
diff --git a/dlls/quartz/tests/mpegsplit.c b/dlls/quartz/tests/mpegsplit.c index 8799c6afb8f..3d4ba8b7959 100644 --- a/dlls/quartz/tests/mpegsplit.c +++ b/dlls/quartz/tests/mpegsplit.c @@ -2183,7 +2183,7 @@ static void test_video_read_position(void)
hr = IFilterGraph2_ConnectDirect(graph, &testsource.source.pin.IPin_iface, sink, NULL); ok(hr == S_OK, "Got hr %#lx.\n", hr); - todo_wine ok(testsource.read_position == total, "Got 0x%s, expected 0x%s.\n", wine_dbgstr_longlong(testsource.read_position), wine_dbgstr_longlong(total)); + ok(testsource.read_position == total, "Got 0x%s, expected 0x%s.\n", wine_dbgstr_longlong(testsource.read_position), wine_dbgstr_longlong(total));
IAsyncReader_Release(testsource.reader); IPin_Release(sink); diff --git a/dlls/winegstreamer/quartz_parser.c b/dlls/winegstreamer/quartz_parser.c index 32eb6e1a4a0..2c9fb896b1e 100644 --- a/dlls/winegstreamer/quartz_parser.c +++ b/dlls/winegstreamer/quartz_parser.c @@ -2380,11 +2380,29 @@ static HRESULT mpeg_splitter_sink_get_media_type(struct strmbase_pin *pin, return S_OK; }
+static HRESULT mpeg_splitter_sink_connect(struct strmbase_sink *iface, IPin *peer, const AM_MEDIA_TYPE *pmt) +{ + struct parser *filter = impl_from_strmbase_sink(iface); + HRESULT hr = parser_sink_connect(iface, peer, pmt); + + /* Seek the reader to the end. RE:D Cherish! depends on this. */ + if (SUCCEEDED(hr) + && IsEqualGUID(&pmt->subtype, &MEDIASUBTYPE_MPEG1System) + && IsEqualGUID(&pmt->majortype, &MEDIATYPE_Stream)) + { + LONGLONG file_size, unused; + IAsyncReader_Length(filter->reader, &file_size, &unused); + IAsyncReader_SyncRead(filter->reader, file_size, 0, NULL); + } + + return hr; +} + static const struct strmbase_sink_ops mpeg_splitter_sink_ops = { .base.pin_query_accept = mpeg_splitter_sink_query_accept, .base.pin_get_media_type = mpeg_splitter_sink_get_media_type, - .sink_connect = parser_sink_connect, + .sink_connect = mpeg_splitter_sink_connect, .sink_disconnect = parser_sink_disconnect, };
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=145232
Your paranoid android.
=== w11pro64_amd (64 bit report) ===
quartz: mpegvideo.c:945: Test failed: Got stop time 10973a0, expected 0. mpegvideo.c:945: Test failed: Got stop time 109ca6e, expected 56ce. mpegvideo.c:945: Test failed: Got stop time 10973a0, expected 0. mpegvideo.c:945: Test failed: Got stop time 10973a0, expected 0. mpegvideo.c:945: Test failed: Got stop time 10973a0, expected 0. mpegvideo.c:945: Test failed: Got stop time 109ca6e, expected 56ce. mpegvideo.c:945: Test failed: Got stop time 10973a0, expected 0. mpegvideo.c:945: Test failed: Got stop time 10973a0, expected 0. mpegvideo.c:945: Test failed: Got stop time 10973a0, expected 0. mpegvideo.c:945: Test failed: Got stop time 109ca6e, expected 56ce. mpegvideo.c:945: Test failed: Got stop time 10973a0, expected 0. mpegvideo.c:945: Test failed: Got stop time 10973a0, expected 0. mpegvideo.c:945: Test failed: Got stop time 10973a0, expected 0. mpegvideo.c:945: Test failed: Got stop time 109ca6e, expected 56ce. mpegvideo.c:945: Test failed: Got stop time 10973a0, expected 0. mpegvideo.c:945: Test failed: Got stop time 10973a0, expected 0. mpegvideo.c:945: Test failed: Got stop time 10973a0, expected 0. mpegvideo.c:945: Test failed: Got stop time 109ca6e, expected 56ce. mpegvideo.c:945: Test failed: Got stop time 10973a0, expected 0. mpegvideo.c:945: Test failed: Got stop time 10973a0, expected 0. mpegvideo.c:945: Test failed: Got stop time 10973a0, expected 0. mpegvideo.c:945: Test failed: Got stop time 109ca6e, expected 56ce. mpegvideo.c:945: Test failed: Got stop time 10973a0, expected 0. mpegvideo.c:945: Test failed: Got stop time 10973a0, expected 0. mpegvideo.c:945: Test failed: Got stop time 10973a0, expected 0. mpegvideo.c:945: Test failed: Got stop time 109ca6e, expected 56ce. mpegvideo.c:945: Test failed: Got stop time 10973a0, expected 0. mpegvideo.c:945: Test failed: Got stop time 10973a0, expected 0. mpegvideo.c:945: Test failed: Got stop time 10973a0, expected 0. mpegvideo.c:945: Test failed: Got stop time 109ca6e, expected 56ce. mpegvideo.c:945: Test failed: Got stop time 10973a0, expected 0. mpegvideo.c:945: Test failed: Got stop time 10973a0, expected 0.
On Tue Apr 16 14:47:32 2024 +0000, Akihiro Sagawa wrote:
Got it. I'll take a look.
Fixed by !5529., rebased others.