From: Rémi Bernon rbernon@codeweavers.com
--- dlls/wmvcore/tests/wmvcore.c | 147 +++++++++++++++++++++++++++++++++++ 1 file changed, 147 insertions(+)
diff --git a/dlls/wmvcore/tests/wmvcore.c b/dlls/wmvcore/tests/wmvcore.c index 06e1852c8c0..6b5c29caa2b 100644 --- a/dlls/wmvcore/tests/wmvcore.c +++ b/dlls/wmvcore/tests/wmvcore.c @@ -3413,6 +3413,152 @@ static void test_async_reader_file(void) ok(ret, "Failed to delete %s, error %lu.\n", debugstr_w(filename), GetLastError()); }
+static void test_sync_reader_allocator(void) +{ + const WCHAR *filename = load_resource(L"test.wmv"); + IWMReaderAllocatorEx *allocator; + struct teststream stream; + struct callback callback; + IWMSyncReader2 *reader; + HANDLE file; + HRESULT hr; + BOOL ret; + + callback_init(&callback); + + hr = WMCreateSyncReader(NULL, 0, (IWMSyncReader **)&reader); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + + file = CreateFileW(filename, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, 0); + ok(file != INVALID_HANDLE_VALUE, "Failed to open %s, error %lu.\n", debugstr_w(file), GetLastError()); + + teststream_init(&stream, file); + + hr = IWMSyncReader2_OpenStream(reader, &stream.IStream_iface); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + ok(stream.refcount > 1, "Got refcount %ld.\n", stream.refcount); + + + hr = IWMSyncReader2_GetAllocateForOutput(reader, -1, &allocator); + todo_wine + ok(hr == E_INVALIDARG, "Got hr %#lx.\n", hr); + hr = IWMSyncReader2_GetAllocateForStream(reader, 0, &allocator); + todo_wine + ok(hr == E_INVALIDARG, "Got hr %#lx.\n", hr); + hr = IWMSyncReader2_GetAllocateForOutput(reader, 0, NULL); + todo_wine + ok(hr == E_INVALIDARG, "Got hr %#lx.\n", hr); + hr = IWMSyncReader2_GetAllocateForStream(reader, 1, NULL); + todo_wine + ok(hr == E_INVALIDARG, "Got hr %#lx.\n", hr); + hr = IWMSyncReader2_SetAllocateForOutput(reader, -1, &callback.IWMReaderAllocatorEx_iface); + todo_wine + ok(hr == E_INVALIDARG, "Got hr %#lx.\n", hr); + hr = IWMSyncReader2_SetAllocateForStream(reader, 0, &callback.IWMReaderAllocatorEx_iface); + todo_wine + ok(hr == E_INVALIDARG, "Got hr %#lx.\n", hr); + + + allocator = (void *)0xdeadbeef; + hr = IWMSyncReader2_GetAllocateForOutput(reader, 0, &allocator); + todo_wine + ok(hr == S_OK, "Got hr %#lx.\n", hr); + todo_wine + ok(!allocator, "Got allocator %p.\n", allocator); + allocator = (void *)0xdeadbeef; + hr = IWMSyncReader2_GetAllocateForStream(reader, 1, &allocator); + todo_wine + ok(hr == S_OK, "Got hr %#lx.\n", hr); + todo_wine + ok(!allocator, "Got allocator %p.\n", allocator); + + + hr = IWMSyncReader2_SetAllocateForStream(reader, 1, &callback.IWMReaderAllocatorEx_iface); + todo_wine + ok(hr == S_OK, "Got hr %#lx.\n", hr); + allocator = (void *)0xdeadbeef; + hr = IWMSyncReader2_GetAllocateForOutput(reader, 0, &allocator); + todo_wine + ok(hr == S_OK, "Got hr %#lx.\n", hr); + todo_wine + ok(!allocator, "Got allocator %p.\n", allocator); + allocator = (void *)0xdeadbeef; + hr = IWMSyncReader2_GetAllocateForStream(reader, 2, &allocator); + todo_wine + ok(hr == S_OK, "Got hr %#lx.\n", hr); + todo_wine + ok(!allocator, "Got allocator %p.\n", allocator); + hr = IWMSyncReader2_GetAllocateForStream(reader, 1, &allocator); + todo_wine + ok(hr == S_OK, "Got hr %#lx.\n", hr); + todo_wine + ok(allocator == &callback.IWMReaderAllocatorEx_iface, "Got allocator %p.\n", allocator); + + hr = IWMSyncReader2_SetAllocateForStream(reader, 1, NULL); + todo_wine + ok(hr == S_OK, "Got hr %#lx.\n", hr); + allocator = (void *)0xdeadbeef; + hr = IWMSyncReader2_GetAllocateForOutput(reader, 0, &allocator); + todo_wine + ok(hr == S_OK, "Got hr %#lx.\n", hr); + todo_wine + ok(!allocator, "Got allocator %p.\n", allocator); + allocator = (void *)0xdeadbeef; + hr = IWMSyncReader2_GetAllocateForStream(reader, 1, &allocator); + todo_wine + ok(hr == S_OK, "Got hr %#lx.\n", hr); + todo_wine + ok(!allocator, "Got allocator %p.\n", allocator); + + + hr = IWMSyncReader2_SetAllocateForOutput(reader, 0, &callback.IWMReaderAllocatorEx_iface); + todo_wine + ok(hr == S_OK, "Got hr %#lx.\n", hr); + allocator = (void *)0xdeadbeef; + hr = IWMSyncReader2_GetAllocateForOutput(reader, 1, &allocator); + todo_wine + ok(hr == S_OK, "Got hr %#lx.\n", hr); + todo_wine + ok(!allocator, "Got allocator %p.\n", allocator); + allocator = (void *)0xdeadbeef; + hr = IWMSyncReader2_GetAllocateForStream(reader, 1, &allocator); + todo_wine + ok(hr == S_OK, "Got hr %#lx.\n", hr); + todo_wine + ok(!allocator, "Got allocator %p.\n", allocator); + hr = IWMSyncReader2_GetAllocateForOutput(reader, 0, &allocator); + todo_wine + ok(hr == S_OK, "Got hr %#lx.\n", hr); + todo_wine + ok(allocator == &callback.IWMReaderAllocatorEx_iface, "Got allocator %p.\n", allocator); + + hr = IWMSyncReader2_SetAllocateForOutput(reader, 0, NULL); + todo_wine + ok(hr == S_OK, "Got hr %#lx.\n", hr); + allocator = (void *)0xdeadbeef; + hr = IWMSyncReader2_GetAllocateForOutput(reader, 0, &allocator); + todo_wine + ok(hr == S_OK, "Got hr %#lx.\n", hr); + todo_wine + ok(!allocator, "Got allocator %p.\n", allocator); + allocator = (void *)0xdeadbeef; + hr = IWMSyncReader2_GetAllocateForStream(reader, 1, &allocator); + todo_wine + ok(hr == S_OK, "Got hr %#lx.\n", hr); + todo_wine + ok(!allocator, "Got allocator %p.\n", allocator); + + + IWMSyncReader2_Release(reader); + + ok(stream.refcount == 1, "Got outstanding refcount %ld.\n", stream.refcount); + CloseHandle(stream.file); + ret = DeleteFileW(filename); + ok(ret, "Failed to delete %s, error %lu.\n", debugstr_w(filename), GetLastError()); + + callback_cleanup(&callback); +} + START_TEST(wmvcore) { HRESULT hr; @@ -3429,6 +3575,7 @@ START_TEST(wmvcore) test_WMCreateWriterPriv(); test_urlextension(); test_iscontentprotected(); + test_sync_reader_allocator(); test_sync_reader_settings(); test_sync_reader_streaming(); test_sync_reader_types();
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 full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=124289
Your paranoid android.
=== debian11 (32 bit report) ===
Report validation errors: wmvcore:wmvcore prints too much data (34204 bytes)
=== debian11 (32 bit ar:MA report) ===
Report validation errors: wmvcore:wmvcore prints too much data (34204 bytes)
=== debian11 (32 bit de report) ===
Report validation errors: wmvcore:wmvcore prints too much data (34204 bytes)
=== debian11 (32 bit fr report) ===
Report validation errors: wmvcore:wmvcore prints too much data (34204 bytes)
=== debian11 (32 bit he:IL report) ===
Report validation errors: wmvcore:wmvcore prints too much data (34204 bytes)
=== debian11 (32 bit hi:IN report) ===
Report validation errors: wmvcore:wmvcore prints too much data (34204 bytes)
=== debian11 (32 bit ja:JP report) ===
wmvcore: wmvcore.c:1691: Test failed: Stream 0: Got hr 0x8007000e.
Report validation errors: wmvcore:wmvcore prints too much data (34262 bytes)
=== debian11 (32 bit zh:CN report) ===
Report validation errors: wmvcore:wmvcore prints too much data (34204 bytes)
=== debian11 (32 bit WoW report) ===
Report validation errors: wmvcore:wmvcore prints too much data (34204 bytes)
=== debian11 (64 bit WoW report) ===
Report validation errors: wmvcore:wmvcore prints too much data (34300 bytes)
From: Rémi Bernon rbernon@codeweavers.com
--- dlls/wmvcore/tests/wmvcore.c | 133 +++++++++++++++++++++++++++++++++-- 1 file changed, 129 insertions(+), 4 deletions(-)
diff --git a/dlls/wmvcore/tests/wmvcore.c b/dlls/wmvcore/tests/wmvcore.c index 6b5c29caa2b..7bb74029ab4 100644 --- a/dlls/wmvcore/tests/wmvcore.c +++ b/dlls/wmvcore/tests/wmvcore.c @@ -2248,16 +2248,51 @@ static HRESULT WINAPI callback_allocator_AllocateForStreamEx(IWMReaderAllocatorE WORD stream_number, DWORD size, INSSBuffer **sample, DWORD flags, QWORD pts, QWORD duration, void *context) { - ok(0, "Unexpected call.\n"); - return E_NOTIMPL; + struct callback *callback = impl_from_IWMReaderAllocatorEx(iface); + struct buffer *object; + + ok(callback->allocated_samples, "Unexpected call.\n"); + ok(stream_number, "got stream_number %u.\n", stream_number); + ok(!flags, "got flags %#lx.\n", flags); + ok(!pts, "got pts %I64d.\n", pts); + ok(!duration, "got duration %I64d.\n", duration); + ok(!context, "got context %p.\n", context); + + if (!(object = malloc(offsetof(struct buffer, data[size])))) + return E_OUTOFMEMORY; + object->INSSBuffer_iface.lpVtbl = &buffer_vtbl; + object->refcount = 1; + object->capacity = size; + object->size = size; + + *sample = &object->INSSBuffer_iface; + InterlockedIncrement(&outstanding_buffers); + return S_OK; }
static HRESULT WINAPI callback_allocator_AllocateForOutputEx(IWMReaderAllocatorEx *iface, DWORD output, DWORD size, INSSBuffer **sample, DWORD flags, QWORD pts, QWORD duration, void *context) { - ok(0, "Unexpected call.\n"); - return E_NOTIMPL; + struct callback *callback = impl_from_IWMReaderAllocatorEx(iface); + struct buffer *object; + + ok(callback->allocated_samples, "Unexpected call.\n"); + ok(!flags, "got flags %#lx.\n", flags); + ok(!pts, "got pts %I64d.\n", pts); + ok(!duration, "got duration %I64d.\n", duration); + ok(!context, "got context %p.\n", context); + + if (!(object = malloc(offsetof(struct buffer, data[size])))) + return E_OUTOFMEMORY; + object->INSSBuffer_iface.lpVtbl = &buffer_vtbl; + object->refcount = 1; + object->capacity = size; + object->size = size; + + *sample = &object->INSSBuffer_iface; + InterlockedIncrement(&outstanding_buffers); + return S_OK; }
static const IWMReaderAllocatorExVtbl callback_allocator_vtbl = @@ -3419,7 +3454,11 @@ static void test_sync_reader_allocator(void) IWMReaderAllocatorEx *allocator; struct teststream stream; struct callback callback; + DWORD output_num, flags; IWMSyncReader2 *reader; + QWORD pts, duration; + INSSBuffer *sample; + WORD stream_num; HANDLE file; HRESULT hr; BOOL ret; @@ -3549,6 +3588,92 @@ static void test_sync_reader_allocator(void) ok(!allocator, "Got allocator %p.\n", allocator);
+ hr = IWMSyncReader2_GetStreamNumberForOutput(reader, 0, &stream_num); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + hr = IWMSyncReader2_SetAllocateForStream(reader, stream_num, &callback.IWMReaderAllocatorEx_iface); + todo_wine + ok(hr == S_OK, "Got hr %#lx.\n", hr); + hr = IWMSyncReader2_SetReadStreamSamples(reader, stream_num, TRUE); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + hr = IWMSyncReader2_SetAllocateForOutput(reader, 1, &callback.IWMReaderAllocatorEx_iface); + todo_wine + ok(hr == S_OK, "Got hr %#lx.\n", hr); + + callback.allocated_samples = true; + + hr = IWMSyncReader2_GetStreamNumberForOutput(reader, 0, &stream_num); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + hr = IWMSyncReader2_GetNextSample(reader, stream_num, &sample, &pts, &duration, &flags, + &output_num, &stream_num); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + todo_wine + ok(sample->lpVtbl == &buffer_vtbl, "Buffer vtbl didn't match.\n"); + INSSBuffer_Release(sample); + + hr = IWMSyncReader2_GetStreamNumberForOutput(reader, 1, &stream_num); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + hr = IWMSyncReader2_GetNextSample(reader, stream_num, &sample, &pts, &duration, &flags, + &output_num, &stream_num); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + todo_wine + ok(sample->lpVtbl == &buffer_vtbl, "Buffer vtbl didn't match.\n"); + INSSBuffer_Release(sample); + + callback.allocated_samples = false; + + + /* without compressed sample read, allocator isn't used */ + hr = IWMSyncReader2_GetStreamNumberForOutput(reader, 0, &stream_num); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + hr = IWMSyncReader2_SetReadStreamSamples(reader, stream_num, FALSE); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + hr = IWMSyncReader2_GetNextSample(reader, stream_num, &sample, &pts, &duration, &flags, + &output_num, &stream_num); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + ok(sample->lpVtbl != &buffer_vtbl, "Unexpected buffer vtbl.\n"); + INSSBuffer_Release(sample); + + + /* cannot change or remove allocators after they've been used */ + hr = IWMSyncReader2_GetStreamNumberForOutput(reader, 0, &stream_num); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + hr = IWMSyncReader2_SetAllocateForStream(reader, stream_num, NULL); + todo_wine + ok(hr == NS_E_INVALID_REQUEST, "Got hr %#lx.\n", hr); + hr = IWMSyncReader2_SetAllocateForOutput(reader, 0, &callback.IWMReaderAllocatorEx_iface); + todo_wine + ok(hr == NS_E_INVALID_REQUEST, "Got hr %#lx.\n", hr); + hr = IWMSyncReader2_SetAllocateForOutput(reader, 1, NULL); + todo_wine + ok(hr == NS_E_INVALID_REQUEST, "Got hr %#lx.\n", hr); + hr = IWMSyncReader2_GetStreamNumberForOutput(reader, 0, &stream_num); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + hr = IWMSyncReader2_SetReadStreamSamples(reader, stream_num, TRUE); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + + callback.allocated_samples = true; + + hr = IWMSyncReader2_GetStreamNumberForOutput(reader, 1, &stream_num); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + hr = IWMSyncReader2_GetNextSample(reader, stream_num, &sample, &pts, &duration, &flags, + &output_num, &stream_num); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + todo_wine + ok(sample->lpVtbl == &buffer_vtbl, "Buffer vtbl didn't match.\n"); + INSSBuffer_Release(sample); + + hr = IWMSyncReader2_GetStreamNumberForOutput(reader, 0, &stream_num); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + hr = IWMSyncReader2_GetNextSample(reader, stream_num, &sample, &pts, &duration, &flags, + &output_num, &stream_num); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + todo_wine + ok(sample->lpVtbl == &buffer_vtbl, "Unexpected buffer vtbl.\n"); + INSSBuffer_Release(sample); + + callback.allocated_samples = false; + + IWMSyncReader2_Release(reader);
ok(stream.refcount == 1, "Got outstanding refcount %ld.\n", stream.refcount);
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 full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=124290
Your paranoid android.
=== debian11 (32 bit report) ===
Report validation errors: wmvcore:wmvcore prints too much data (34716 bytes)
=== debian11 (32 bit ar:MA report) ===
Report validation errors: wmvcore:wmvcore prints too much data (34716 bytes)
=== debian11 (32 bit de report) ===
Report validation errors: wmvcore:wmvcore prints too much data (34716 bytes)
=== debian11 (32 bit fr report) ===
Report validation errors: wmvcore:wmvcore prints too much data (34716 bytes)
=== debian11 (32 bit he:IL report) ===
Report validation errors: wmvcore:wmvcore prints too much data (34716 bytes)
=== debian11 (32 bit hi:IN report) ===
Report validation errors: wmvcore:wmvcore prints too much data (34716 bytes)
=== debian11 (32 bit ja:JP report) ===
Report validation errors: wmvcore:wmvcore prints too much data (34716 bytes)
=== debian11 (32 bit zh:CN report) ===
Report validation errors: wmvcore:wmvcore prints too much data (34716 bytes)
=== debian11 (32 bit WoW report) ===
Report validation errors: wmvcore:wmvcore prints too much data (34716 bytes)
=== debian11 (64 bit WoW report) ===
Report validation errors: wmvcore:wmvcore prints too much data (34812 bytes)
From: Rémi Bernon rbernon@codeweavers.com
--- dlls/winegstreamer/wm_reader.c | 44 +++++++++++++--------------------- 1 file changed, 16 insertions(+), 28 deletions(-)
diff --git a/dlls/winegstreamer/wm_reader.c b/dlls/winegstreamer/wm_reader.c index 95d6d8e0180..4839ddb8fa3 100644 --- a/dlls/winegstreamer/wm_reader.c +++ b/dlls/winegstreamer/wm_reader.c @@ -1573,9 +1573,10 @@ HRESULT wm_reader_get_stream_sample(struct wm_reader *reader, IWMReaderCallbackA struct wg_parser_stream *wg_stream; struct wg_parser_buffer wg_buffer; struct wm_stream *stream; + struct buffer *object; DWORD size, capacity; INSSBuffer *sample; - HRESULT hr; + HRESULT hr = S_OK; BYTE *data;
for (;;) @@ -1620,36 +1621,16 @@ HRESULT wm_reader_get_stream_sample(struct wm_reader *reader, IWMReaderCallbackA TRACE("Got buffer for '%s' stream %p.\n", get_major_type_string(stream->format.major_type), stream);
if (callback_advanced && stream->read_compressed && stream->allocate_stream) - { - if (FAILED(hr = IWMReaderCallbackAdvanced_AllocateForStream(callback_advanced, - stream->index + 1, wg_buffer.size, &sample, NULL))) - { - ERR("Failed to allocate stream sample of %u bytes, hr %#lx.\n", wg_buffer.size, hr); - wg_parser_stream_release_buffer(wg_stream); - return hr; - } - } + hr = IWMReaderCallbackAdvanced_AllocateForStream(callback_advanced, + stream->index + 1, wg_buffer.size, &sample, NULL); else if (callback_advanced && !stream->read_compressed && stream->allocate_output) - { - if (FAILED(hr = IWMReaderCallbackAdvanced_AllocateForOutput(callback_advanced, - stream->index, wg_buffer.size, &sample, NULL))) - { - ERR("Failed to allocate output sample of %u bytes, hr %#lx.\n", wg_buffer.size, hr); - wg_parser_stream_release_buffer(wg_stream); - return hr; - } - } + hr = IWMReaderCallbackAdvanced_AllocateForOutput(callback_advanced, + stream->index, wg_buffer.size, &sample, NULL); + /* FIXME: Should these be pooled? */ + else if (!(object = calloc(1, offsetof(struct buffer, data[wg_buffer.size])))) + hr = E_OUTOFMEMORY; else { - struct buffer *object; - - /* FIXME: Should these be pooled? */ - if (!(object = calloc(1, offsetof(struct buffer, data[wg_buffer.size])))) - { - wg_parser_stream_release_buffer(wg_stream); - return E_OUTOFMEMORY; - } - object->INSSBuffer_iface.lpVtbl = &buffer_vtbl; object->refcount = 1; object->capacity = wg_buffer.size; @@ -1658,6 +1639,13 @@ HRESULT wm_reader_get_stream_sample(struct wm_reader *reader, IWMReaderCallbackA sample = &object->INSSBuffer_iface; }
+ if (FAILED(hr)) + { + ERR("Failed to allocate sample of %u bytes, hr %#lx.\n", wg_buffer.size, hr); + wg_parser_stream_release_buffer(wg_stream); + return hr; + } + if (FAILED(hr = INSSBuffer_GetBufferAndLength(sample, &data, &size))) ERR("Failed to get data pointer, hr %#lx.\n", hr); if (FAILED(hr = INSSBuffer_GetMaxLength(sample, &capacity)))
From: Rémi Bernon rbernon@codeweavers.com
--- dlls/winegstreamer/gst_private.h | 2 ++ dlls/winegstreamer/wm_reader.c | 30 +++++++++++++++++++++++++----- dlls/wmvcore/tests/wmvcore.c | 5 ----- 3 files changed, 27 insertions(+), 10 deletions(-)
diff --git a/dlls/winegstreamer/gst_private.h b/dlls/winegstreamer/gst_private.h index 178679c38ee..44b526c0044 100644 --- a/dlls/winegstreamer/gst_private.h +++ b/dlls/winegstreamer/gst_private.h @@ -158,6 +158,8 @@ struct wm_stream * compressed samples. Rather, the behaviour of the reader objects differs * in nontrivial ways depending on this field. */ bool read_compressed; + + IWMReaderAllocatorEx *output_allocator; };
struct wm_reader diff --git a/dlls/winegstreamer/wm_reader.c b/dlls/winegstreamer/wm_reader.c index 4839ddb8fa3..916bfb68ea8 100644 --- a/dlls/winegstreamer/wm_reader.c +++ b/dlls/winegstreamer/wm_reader.c @@ -1620,7 +1620,10 @@ HRESULT wm_reader_get_stream_sample(struct wm_reader *reader, IWMReaderCallbackA
TRACE("Got buffer for '%s' stream %p.\n", get_major_type_string(stream->format.major_type), stream);
- if (callback_advanced && stream->read_compressed && stream->allocate_stream) + if (!stream->read_compressed && stream->output_allocator) + hr = IWMReaderAllocatorEx_AllocateForOutputEx(stream->output_allocator, stream->index, + wg_buffer.size, &sample, 0, 0, 0, NULL); + else if (callback_advanced && stream->read_compressed && stream->allocate_stream) hr = IWMReaderCallbackAdvanced_AllocateForStream(callback_advanced, stream->index + 1, wg_buffer.size, &sample, NULL); else if (callback_advanced && !stream->read_compressed && stream->allocate_output) @@ -2417,11 +2420,28 @@ static HRESULT WINAPI reader_SetRangeByFrameEx(IWMSyncReader2 *iface, WORD strea return E_NOTIMPL; }
-static HRESULT WINAPI reader_SetAllocateForOutput(IWMSyncReader2 *iface, DWORD output_num, IWMReaderAllocatorEx *allocator) +static HRESULT WINAPI reader_SetAllocateForOutput(IWMSyncReader2 *iface, DWORD output, IWMReaderAllocatorEx *allocator) { - struct wm_reader *This = impl_from_IWMSyncReader2(iface); - FIXME("(%p)->(%lu %p): stub!\n", This, output_num, allocator); - return E_NOTIMPL; + struct wm_reader *reader = impl_from_IWMSyncReader2(iface); + struct wm_stream *stream; + + TRACE("reader %p, output %lu, allocator %p.\n", reader, output, allocator); + + EnterCriticalSection(&reader->cs); + + if (!(stream = get_stream_by_output_number(reader, output))) + { + LeaveCriticalSection(&reader->cs); + return E_INVALIDARG; + } + + if (stream->output_allocator) + IWMReaderAllocatorEx_Release(stream->output_allocator); + if ((stream->output_allocator = allocator)) + IWMReaderAllocatorEx_AddRef(stream->output_allocator); + + LeaveCriticalSection(&reader->cs); + return S_OK; }
static HRESULT WINAPI reader_GetAllocateForOutput(IWMSyncReader2 *iface, DWORD output_num, IWMReaderAllocatorEx **allocator) diff --git a/dlls/wmvcore/tests/wmvcore.c b/dlls/wmvcore/tests/wmvcore.c index 7bb74029ab4..bbfa2983510 100644 --- a/dlls/wmvcore/tests/wmvcore.c +++ b/dlls/wmvcore/tests/wmvcore.c @@ -3491,7 +3491,6 @@ static void test_sync_reader_allocator(void) todo_wine ok(hr == E_INVALIDARG, "Got hr %#lx.\n", hr); hr = IWMSyncReader2_SetAllocateForOutput(reader, -1, &callback.IWMReaderAllocatorEx_iface); - todo_wine ok(hr == E_INVALIDARG, "Got hr %#lx.\n", hr); hr = IWMSyncReader2_SetAllocateForStream(reader, 0, &callback.IWMReaderAllocatorEx_iface); todo_wine @@ -3551,7 +3550,6 @@ static void test_sync_reader_allocator(void)
hr = IWMSyncReader2_SetAllocateForOutput(reader, 0, &callback.IWMReaderAllocatorEx_iface); - todo_wine ok(hr == S_OK, "Got hr %#lx.\n", hr); allocator = (void *)0xdeadbeef; hr = IWMSyncReader2_GetAllocateForOutput(reader, 1, &allocator); @@ -3572,7 +3570,6 @@ static void test_sync_reader_allocator(void) ok(allocator == &callback.IWMReaderAllocatorEx_iface, "Got allocator %p.\n", allocator);
hr = IWMSyncReader2_SetAllocateForOutput(reader, 0, NULL); - todo_wine ok(hr == S_OK, "Got hr %#lx.\n", hr); allocator = (void *)0xdeadbeef; hr = IWMSyncReader2_GetAllocateForOutput(reader, 0, &allocator); @@ -3596,7 +3593,6 @@ static void test_sync_reader_allocator(void) hr = IWMSyncReader2_SetReadStreamSamples(reader, stream_num, TRUE); ok(hr == S_OK, "Got hr %#lx.\n", hr); hr = IWMSyncReader2_SetAllocateForOutput(reader, 1, &callback.IWMReaderAllocatorEx_iface); - todo_wine ok(hr == S_OK, "Got hr %#lx.\n", hr);
callback.allocated_samples = true; @@ -3615,7 +3611,6 @@ static void test_sync_reader_allocator(void) hr = IWMSyncReader2_GetNextSample(reader, stream_num, &sample, &pts, &duration, &flags, &output_num, &stream_num); ok(hr == S_OK, "Got hr %#lx.\n", hr); - todo_wine ok(sample->lpVtbl == &buffer_vtbl, "Buffer vtbl didn't match.\n"); INSSBuffer_Release(sample);
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 full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=124292
Your paranoid android.
=== debian11 (32 bit report) ===
Report validation errors: wmvcore:wmvcore prints too much data (34421 bytes)
=== debian11 (32 bit ar:MA report) ===
Report validation errors: wmvcore:wmvcore prints too much data (34421 bytes)
=== debian11 (32 bit de report) ===
Report validation errors: wmvcore:wmvcore prints too much data (34421 bytes)
=== debian11 (32 bit fr report) ===
Report validation errors: wmvcore:wmvcore prints too much data (34421 bytes)
=== debian11 (32 bit he:IL report) ===
Report validation errors: wmvcore:wmvcore prints too much data (34421 bytes)
=== debian11 (32 bit hi:IN report) ===
Report validation errors: wmvcore:wmvcore prints too much data (34421 bytes)
=== debian11 (32 bit ja:JP report) ===
Report validation errors: wmvcore:wmvcore prints too much data (34421 bytes)
=== debian11 (32 bit zh:CN report) ===
Report validation errors: wmvcore:wmvcore prints too much data (34421 bytes)
=== debian11 (32 bit WoW report) ===
Report validation errors: wmvcore:wmvcore prints too much data (34421 bytes)
=== debian11 (64 bit WoW report) ===
Report validation errors: wmvcore:wmvcore prints too much data (34517 bytes)
From: Rémi Bernon rbernon@codeweavers.com
--- dlls/winegstreamer/wm_reader.c | 27 +++++++++++++++++++++++---- dlls/wmvcore/tests/wmvcore.c | 14 -------------- 2 files changed, 23 insertions(+), 18 deletions(-)
diff --git a/dlls/winegstreamer/wm_reader.c b/dlls/winegstreamer/wm_reader.c index 916bfb68ea8..01766397aa4 100644 --- a/dlls/winegstreamer/wm_reader.c +++ b/dlls/winegstreamer/wm_reader.c @@ -2444,11 +2444,30 @@ static HRESULT WINAPI reader_SetAllocateForOutput(IWMSyncReader2 *iface, DWORD o return S_OK; }
-static HRESULT WINAPI reader_GetAllocateForOutput(IWMSyncReader2 *iface, DWORD output_num, IWMReaderAllocatorEx **allocator) +static HRESULT WINAPI reader_GetAllocateForOutput(IWMSyncReader2 *iface, DWORD output, IWMReaderAllocatorEx **allocator) { - struct wm_reader *This = impl_from_IWMSyncReader2(iface); - FIXME("(%p)->(%lu %p): stub!\n", This, output_num, allocator); - return E_NOTIMPL; + struct wm_reader *reader = impl_from_IWMSyncReader2(iface); + struct wm_stream *stream; + + TRACE("reader %p, output %lu, allocator %p.\n", reader, output, allocator); + + if (!allocator) + return E_INVALIDARG; + + EnterCriticalSection(&reader->cs); + + if (!(stream = get_stream_by_output_number(reader, output))) + { + LeaveCriticalSection(&reader->cs); + return E_INVALIDARG; + } + + stream = reader->streams + output; + if ((*allocator = stream->output_allocator)) + IWMReaderAllocatorEx_AddRef(*allocator); + + LeaveCriticalSection(&reader->cs); + return S_OK; }
static HRESULT WINAPI reader_SetAllocateForStream(IWMSyncReader2 *iface, DWORD stream_num, IWMReaderAllocatorEx *allocator) diff --git a/dlls/wmvcore/tests/wmvcore.c b/dlls/wmvcore/tests/wmvcore.c index bbfa2983510..991965daa65 100644 --- a/dlls/wmvcore/tests/wmvcore.c +++ b/dlls/wmvcore/tests/wmvcore.c @@ -3479,13 +3479,11 @@ static void test_sync_reader_allocator(void)
hr = IWMSyncReader2_GetAllocateForOutput(reader, -1, &allocator); - todo_wine ok(hr == E_INVALIDARG, "Got hr %#lx.\n", hr); hr = IWMSyncReader2_GetAllocateForStream(reader, 0, &allocator); todo_wine ok(hr == E_INVALIDARG, "Got hr %#lx.\n", hr); hr = IWMSyncReader2_GetAllocateForOutput(reader, 0, NULL); - todo_wine ok(hr == E_INVALIDARG, "Got hr %#lx.\n", hr); hr = IWMSyncReader2_GetAllocateForStream(reader, 1, NULL); todo_wine @@ -3499,9 +3497,7 @@ static void test_sync_reader_allocator(void)
allocator = (void *)0xdeadbeef; hr = IWMSyncReader2_GetAllocateForOutput(reader, 0, &allocator); - todo_wine ok(hr == S_OK, "Got hr %#lx.\n", hr); - todo_wine ok(!allocator, "Got allocator %p.\n", allocator); allocator = (void *)0xdeadbeef; hr = IWMSyncReader2_GetAllocateForStream(reader, 1, &allocator); @@ -3516,9 +3512,7 @@ static void test_sync_reader_allocator(void) ok(hr == S_OK, "Got hr %#lx.\n", hr); allocator = (void *)0xdeadbeef; hr = IWMSyncReader2_GetAllocateForOutput(reader, 0, &allocator); - todo_wine ok(hr == S_OK, "Got hr %#lx.\n", hr); - todo_wine ok(!allocator, "Got allocator %p.\n", allocator); allocator = (void *)0xdeadbeef; hr = IWMSyncReader2_GetAllocateForStream(reader, 2, &allocator); @@ -3537,9 +3531,7 @@ static void test_sync_reader_allocator(void) ok(hr == S_OK, "Got hr %#lx.\n", hr); allocator = (void *)0xdeadbeef; hr = IWMSyncReader2_GetAllocateForOutput(reader, 0, &allocator); - todo_wine ok(hr == S_OK, "Got hr %#lx.\n", hr); - todo_wine ok(!allocator, "Got allocator %p.\n", allocator); allocator = (void *)0xdeadbeef; hr = IWMSyncReader2_GetAllocateForStream(reader, 1, &allocator); @@ -3553,9 +3545,7 @@ static void test_sync_reader_allocator(void) ok(hr == S_OK, "Got hr %#lx.\n", hr); allocator = (void *)0xdeadbeef; hr = IWMSyncReader2_GetAllocateForOutput(reader, 1, &allocator); - todo_wine ok(hr == S_OK, "Got hr %#lx.\n", hr); - todo_wine ok(!allocator, "Got allocator %p.\n", allocator); allocator = (void *)0xdeadbeef; hr = IWMSyncReader2_GetAllocateForStream(reader, 1, &allocator); @@ -3564,18 +3554,14 @@ static void test_sync_reader_allocator(void) todo_wine ok(!allocator, "Got allocator %p.\n", allocator); hr = IWMSyncReader2_GetAllocateForOutput(reader, 0, &allocator); - todo_wine ok(hr == S_OK, "Got hr %#lx.\n", hr); - todo_wine ok(allocator == &callback.IWMReaderAllocatorEx_iface, "Got allocator %p.\n", allocator);
hr = IWMSyncReader2_SetAllocateForOutput(reader, 0, NULL); ok(hr == S_OK, "Got hr %#lx.\n", hr); allocator = (void *)0xdeadbeef; hr = IWMSyncReader2_GetAllocateForOutput(reader, 0, &allocator); - todo_wine ok(hr == S_OK, "Got hr %#lx.\n", hr); - todo_wine ok(!allocator, "Got allocator %p.\n", allocator); allocator = (void *)0xdeadbeef; hr = IWMSyncReader2_GetAllocateForStream(reader, 1, &allocator);
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 full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=124293
Your paranoid android.
=== debian11 (32 bit report) ===
Report validation errors: wmvcore:wmvcore prints too much data (33635 bytes)
=== debian11 (32 bit ar:MA report) ===
Report validation errors: wmvcore:wmvcore prints too much data (33635 bytes)
=== debian11 (32 bit de report) ===
Report validation errors: wmvcore:wmvcore prints too much data (33635 bytes)
=== debian11 (32 bit fr report) ===
Report validation errors: wmvcore:wmvcore prints too much data (33635 bytes)
=== debian11 (32 bit he:IL report) ===
Report validation errors: wmvcore:wmvcore prints too much data (33635 bytes)
=== debian11 (32 bit hi:IN report) ===
Report validation errors: wmvcore:wmvcore prints too much data (33635 bytes)
=== debian11 (32 bit ja:JP report) ===
Report validation errors: wmvcore:wmvcore prints too much data (33635 bytes)
=== debian11 (32 bit zh:CN report) ===
Report validation errors: wmvcore:wmvcore prints too much data (33635 bytes)
=== debian11 (32 bit WoW report) ===
Report validation errors: wmvcore:wmvcore prints too much data (33635 bytes)
=== debian11 (64 bit WoW report) ===
Report validation errors: wmvcore:wmvcore prints too much data (33683 bytes)
From: Rémi Bernon rbernon@codeweavers.com
--- dlls/winegstreamer/gst_private.h | 1 + dlls/winegstreamer/wm_reader.c | 28 ++++++++++++++++++++++++---- dlls/wmvcore/tests/wmvcore.c | 5 ----- 3 files changed, 25 insertions(+), 9 deletions(-)
diff --git a/dlls/winegstreamer/gst_private.h b/dlls/winegstreamer/gst_private.h index 44b526c0044..fa93ce969c7 100644 --- a/dlls/winegstreamer/gst_private.h +++ b/dlls/winegstreamer/gst_private.h @@ -160,6 +160,7 @@ struct wm_stream bool read_compressed;
IWMReaderAllocatorEx *output_allocator; + IWMReaderAllocatorEx *stream_allocator; };
struct wm_reader diff --git a/dlls/winegstreamer/wm_reader.c b/dlls/winegstreamer/wm_reader.c index 01766397aa4..6c9c0514347 100644 --- a/dlls/winegstreamer/wm_reader.c +++ b/dlls/winegstreamer/wm_reader.c @@ -1623,6 +1623,9 @@ HRESULT wm_reader_get_stream_sample(struct wm_reader *reader, IWMReaderCallbackA if (!stream->read_compressed && stream->output_allocator) hr = IWMReaderAllocatorEx_AllocateForOutputEx(stream->output_allocator, stream->index, wg_buffer.size, &sample, 0, 0, 0, NULL); + else if (stream->read_compressed && stream->stream_allocator) + hr = IWMReaderAllocatorEx_AllocateForStreamEx(stream->stream_allocator, stream->index + 1, + wg_buffer.size, &sample, 0, 0, 0, NULL); else if (callback_advanced && stream->read_compressed && stream->allocate_stream) hr = IWMReaderCallbackAdvanced_AllocateForStream(callback_advanced, stream->index + 1, wg_buffer.size, &sample, NULL); @@ -2470,11 +2473,28 @@ static HRESULT WINAPI reader_GetAllocateForOutput(IWMSyncReader2 *iface, DWORD o return S_OK; }
-static HRESULT WINAPI reader_SetAllocateForStream(IWMSyncReader2 *iface, DWORD stream_num, IWMReaderAllocatorEx *allocator) +static HRESULT WINAPI reader_SetAllocateForStream(IWMSyncReader2 *iface, DWORD stream_number, IWMReaderAllocatorEx *allocator) { - struct wm_reader *This = impl_from_IWMSyncReader2(iface); - FIXME("(%p)->(%lu %p): stub!\n", This, stream_num, allocator); - return E_NOTIMPL; + struct wm_reader *reader = impl_from_IWMSyncReader2(iface); + struct wm_stream *stream; + + TRACE("reader %p, stream_number %lu, allocator %p.\n", reader, stream_number, allocator); + + EnterCriticalSection(&reader->cs); + + if (!(stream = wm_reader_get_stream_by_stream_number(reader, stream_number))) + { + LeaveCriticalSection(&reader->cs); + return E_INVALIDARG; + } + + if (stream->stream_allocator) + IWMReaderAllocatorEx_Release(stream->stream_allocator); + if ((stream->stream_allocator = allocator)) + IWMReaderAllocatorEx_AddRef(stream->stream_allocator); + + LeaveCriticalSection(&reader->cs); + return S_OK; }
static HRESULT WINAPI reader_GetAllocateForStream(IWMSyncReader2 *iface, DWORD stream_num, IWMReaderAllocatorEx **allocator) diff --git a/dlls/wmvcore/tests/wmvcore.c b/dlls/wmvcore/tests/wmvcore.c index 991965daa65..2c431b7eb29 100644 --- a/dlls/wmvcore/tests/wmvcore.c +++ b/dlls/wmvcore/tests/wmvcore.c @@ -3491,7 +3491,6 @@ static void test_sync_reader_allocator(void) hr = IWMSyncReader2_SetAllocateForOutput(reader, -1, &callback.IWMReaderAllocatorEx_iface); ok(hr == E_INVALIDARG, "Got hr %#lx.\n", hr); hr = IWMSyncReader2_SetAllocateForStream(reader, 0, &callback.IWMReaderAllocatorEx_iface); - todo_wine ok(hr == E_INVALIDARG, "Got hr %#lx.\n", hr);
@@ -3508,7 +3507,6 @@ static void test_sync_reader_allocator(void)
hr = IWMSyncReader2_SetAllocateForStream(reader, 1, &callback.IWMReaderAllocatorEx_iface); - todo_wine ok(hr == S_OK, "Got hr %#lx.\n", hr); allocator = (void *)0xdeadbeef; hr = IWMSyncReader2_GetAllocateForOutput(reader, 0, &allocator); @@ -3527,7 +3525,6 @@ static void test_sync_reader_allocator(void) ok(allocator == &callback.IWMReaderAllocatorEx_iface, "Got allocator %p.\n", allocator);
hr = IWMSyncReader2_SetAllocateForStream(reader, 1, NULL); - todo_wine ok(hr == S_OK, "Got hr %#lx.\n", hr); allocator = (void *)0xdeadbeef; hr = IWMSyncReader2_GetAllocateForOutput(reader, 0, &allocator); @@ -3574,7 +3571,6 @@ static void test_sync_reader_allocator(void) hr = IWMSyncReader2_GetStreamNumberForOutput(reader, 0, &stream_num); ok(hr == S_OK, "Got hr %#lx.\n", hr); hr = IWMSyncReader2_SetAllocateForStream(reader, stream_num, &callback.IWMReaderAllocatorEx_iface); - todo_wine ok(hr == S_OK, "Got hr %#lx.\n", hr); hr = IWMSyncReader2_SetReadStreamSamples(reader, stream_num, TRUE); ok(hr == S_OK, "Got hr %#lx.\n", hr); @@ -3588,7 +3584,6 @@ static void test_sync_reader_allocator(void) hr = IWMSyncReader2_GetNextSample(reader, stream_num, &sample, &pts, &duration, &flags, &output_num, &stream_num); ok(hr == S_OK, "Got hr %#lx.\n", hr); - todo_wine ok(sample->lpVtbl == &buffer_vtbl, "Buffer vtbl didn't match.\n"); INSSBuffer_Release(sample);
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 full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=124294
Your paranoid android.
=== debian11 (32 bit report) ===
Report validation errors: wmvcore:wmvcore prints too much data (33349 bytes)
=== debian11 (32 bit ar:MA report) ===
Report validation errors: wmvcore:wmvcore prints too much data (33349 bytes)
=== debian11 (32 bit de report) ===
Report validation errors: wmvcore:wmvcore prints too much data (33349 bytes)
=== debian11 (32 bit fr report) ===
Report validation errors: wmvcore:wmvcore prints too much data (33349 bytes)
=== debian11 (32 bit he:IL report) ===
Report validation errors: wmvcore:wmvcore prints too much data (33349 bytes)
=== debian11 (32 bit hi:IN report) ===
wmvcore: wmvcore.c:3009: Test failed: Wait timed out.
Report validation errors: wmvcore:wmvcore prints too much data (33394 bytes)
=== debian11 (32 bit ja:JP report) ===
Report validation errors: wmvcore:wmvcore prints too much data (33349 bytes)
=== debian11 (32 bit zh:CN report) ===
Report validation errors: wmvcore:wmvcore prints too much data (33349 bytes)
=== debian11 (32 bit WoW report) ===
Report validation errors: wmvcore:wmvcore prints too much data (33349 bytes)
=== debian11 (64 bit WoW report) ===
Report validation errors: wmvcore:wmvcore prints too much data (33397 bytes)
From: Rémi Bernon rbernon@codeweavers.com
--- dlls/winegstreamer/wm_reader.c | 26 ++++++++++++++++++++++---- dlls/wmvcore/tests/wmvcore.c | 14 -------------- 2 files changed, 22 insertions(+), 18 deletions(-)
diff --git a/dlls/winegstreamer/wm_reader.c b/dlls/winegstreamer/wm_reader.c index 6c9c0514347..bd6d9064171 100644 --- a/dlls/winegstreamer/wm_reader.c +++ b/dlls/winegstreamer/wm_reader.c @@ -2497,11 +2497,29 @@ static HRESULT WINAPI reader_SetAllocateForStream(IWMSyncReader2 *iface, DWORD s return S_OK; }
-static HRESULT WINAPI reader_GetAllocateForStream(IWMSyncReader2 *iface, DWORD stream_num, IWMReaderAllocatorEx **allocator) +static HRESULT WINAPI reader_GetAllocateForStream(IWMSyncReader2 *iface, DWORD stream_number, IWMReaderAllocatorEx **allocator) { - struct wm_reader *This = impl_from_IWMSyncReader2(iface); - FIXME("(%p)->(%lu %p): stub!\n", This, stream_num, allocator); - return E_NOTIMPL; + struct wm_reader *reader = impl_from_IWMSyncReader2(iface); + struct wm_stream *stream; + + TRACE("reader %p, stream_number %lu, allocator %p.\n", reader, stream_number, allocator); + + if (!allocator) + return E_INVALIDARG; + + EnterCriticalSection(&reader->cs); + + if (!(stream = wm_reader_get_stream_by_stream_number(reader, stream_number))) + { + LeaveCriticalSection(&reader->cs); + return E_INVALIDARG; + } + + if ((*allocator = stream->stream_allocator)) + IWMReaderAllocatorEx_AddRef(*allocator); + + LeaveCriticalSection(&reader->cs); + return S_OK; }
static const IWMSyncReader2Vtbl reader_vtbl = diff --git a/dlls/wmvcore/tests/wmvcore.c b/dlls/wmvcore/tests/wmvcore.c index 2c431b7eb29..680635b4072 100644 --- a/dlls/wmvcore/tests/wmvcore.c +++ b/dlls/wmvcore/tests/wmvcore.c @@ -3481,12 +3481,10 @@ static void test_sync_reader_allocator(void) hr = IWMSyncReader2_GetAllocateForOutput(reader, -1, &allocator); ok(hr == E_INVALIDARG, "Got hr %#lx.\n", hr); hr = IWMSyncReader2_GetAllocateForStream(reader, 0, &allocator); - todo_wine ok(hr == E_INVALIDARG, "Got hr %#lx.\n", hr); hr = IWMSyncReader2_GetAllocateForOutput(reader, 0, NULL); ok(hr == E_INVALIDARG, "Got hr %#lx.\n", hr); hr = IWMSyncReader2_GetAllocateForStream(reader, 1, NULL); - todo_wine ok(hr == E_INVALIDARG, "Got hr %#lx.\n", hr); hr = IWMSyncReader2_SetAllocateForOutput(reader, -1, &callback.IWMReaderAllocatorEx_iface); ok(hr == E_INVALIDARG, "Got hr %#lx.\n", hr); @@ -3500,9 +3498,7 @@ static void test_sync_reader_allocator(void) ok(!allocator, "Got allocator %p.\n", allocator); allocator = (void *)0xdeadbeef; hr = IWMSyncReader2_GetAllocateForStream(reader, 1, &allocator); - todo_wine ok(hr == S_OK, "Got hr %#lx.\n", hr); - todo_wine ok(!allocator, "Got allocator %p.\n", allocator);
@@ -3514,14 +3510,10 @@ static void test_sync_reader_allocator(void) ok(!allocator, "Got allocator %p.\n", allocator); allocator = (void *)0xdeadbeef; hr = IWMSyncReader2_GetAllocateForStream(reader, 2, &allocator); - todo_wine ok(hr == S_OK, "Got hr %#lx.\n", hr); - todo_wine ok(!allocator, "Got allocator %p.\n", allocator); hr = IWMSyncReader2_GetAllocateForStream(reader, 1, &allocator); - todo_wine ok(hr == S_OK, "Got hr %#lx.\n", hr); - todo_wine ok(allocator == &callback.IWMReaderAllocatorEx_iface, "Got allocator %p.\n", allocator);
hr = IWMSyncReader2_SetAllocateForStream(reader, 1, NULL); @@ -3532,9 +3524,7 @@ static void test_sync_reader_allocator(void) ok(!allocator, "Got allocator %p.\n", allocator); allocator = (void *)0xdeadbeef; hr = IWMSyncReader2_GetAllocateForStream(reader, 1, &allocator); - todo_wine ok(hr == S_OK, "Got hr %#lx.\n", hr); - todo_wine ok(!allocator, "Got allocator %p.\n", allocator);
@@ -3546,9 +3536,7 @@ static void test_sync_reader_allocator(void) ok(!allocator, "Got allocator %p.\n", allocator); allocator = (void *)0xdeadbeef; hr = IWMSyncReader2_GetAllocateForStream(reader, 1, &allocator); - todo_wine ok(hr == S_OK, "Got hr %#lx.\n", hr); - todo_wine ok(!allocator, "Got allocator %p.\n", allocator); hr = IWMSyncReader2_GetAllocateForOutput(reader, 0, &allocator); ok(hr == S_OK, "Got hr %#lx.\n", hr); @@ -3562,9 +3550,7 @@ static void test_sync_reader_allocator(void) ok(!allocator, "Got allocator %p.\n", allocator); allocator = (void *)0xdeadbeef; hr = IWMSyncReader2_GetAllocateForStream(reader, 1, &allocator); - todo_wine ok(hr == S_OK, "Got hr %#lx.\n", hr); - todo_wine ok(!allocator, "Got allocator %p.\n", allocator);
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 full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=124295
Your paranoid android.
=== debian11 (32 bit de report) ===
wmvcore: wmvcore.c:1663: Test failed: Stream 0: Format 5: Got hr 0xc00d0041. wmvcore.c:1680: Test failed: Stream 0: Format 5: Media types didn't match.
The output overflow is addressed in https://gitlab.winehq.org/wine/wine/-/merge_requests/953, I think the few other failures are unrelated to the changes, though for some reason they happened more often here than what the testbot history seems to suggest?
This merge request was approved by Zebediah Figura.