Signed-off-by: Zebediah Figura zfigura@codeweavers.com --- dlls/quartz/tests/filtergraph.c | 42 +++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+)
diff --git a/dlls/quartz/tests/filtergraph.c b/dlls/quartz/tests/filtergraph.c index 027b2080d7d..6f3a1d427ca 100644 --- a/dlls/quartz/tests/filtergraph.c +++ b/dlls/quartz/tests/filtergraph.c @@ -4438,6 +4438,47 @@ static void test_window_threading(void) ok(ret, "Failed to delete file, error %u.\n", GetLastError()); }
+/* Hyperdevotion Noire needs to be able to Render() from UYVY. */ +static void test_autoplug_uyvy(void) +{ + static const VIDEOINFOHEADER source_format = + { + .bmiHeader.biSize = sizeof(BITMAPINFOHEADER), + .bmiHeader.biWidth = 600, + .bmiHeader.biHeight = 400, + .bmiHeader.biCompression = mmioFOURCC('U','Y','V','Y'), + .bmiHeader.biBitCount = 16, + }; + AM_MEDIA_TYPE source_type = + { + .majortype = MEDIATYPE_Video, + .subtype = MEDIASUBTYPE_UYVY, + .formattype = FORMAT_VideoInfo, + .cbFormat = sizeof(source_format), + .pbFormat = (BYTE *)&source_format, + }; + + IFilterGraph2 *graph = create_graph(); + struct testpin source_pin; + struct testfilter source; + HRESULT hr; + ULONG ref; + + testsource_init(&source_pin, &source_type, 1); + testfilter_init(&source, &source_pin, 1); + source_pin.request_mt = &source_type; + + IFilterGraph2_AddFilter(graph, &source.IBaseFilter_iface, L"source"); + + hr = IFilterGraph2_Render(graph, &source_pin.IPin_iface); + todo_wine ok(hr == S_OK, "Got hr %#x.\n", hr); + + ref = IFilterGraph2_Release(graph); + ok(!ref, "Got outstanding refcount %d.\n", ref); + ok(source.ref == 1, "Got outstanding refcount %d.\n", source.ref); + ok(source_pin.ref == 1, "Got outstanding refcount %d.\n", source_pin.ref); +} + START_TEST(filtergraph) { CoInitializeEx(NULL, COINIT_MULTITHREADED); @@ -4461,6 +4502,7 @@ START_TEST(filtergraph) test_default_sync_source(); test_add_source_filter(); test_window_threading(); + test_autoplug_uyvy();
CoUninitialize(); test_render_with_multithread();
Signed-off-by: Zebediah Figura zfigura@codeweavers.com --- dlls/quartz/avidec.c | 105 +++++++++++++++++++++++++++++++++++-- dlls/quartz/tests/avidec.c | 19 +++++-- 2 files changed, 116 insertions(+), 8 deletions(-)
diff --git a/dlls/quartz/avidec.c b/dlls/quartz/avidec.c index 0837ae2b8da..7645b17558b 100644 --- a/dlls/quartz/avidec.c +++ b/dlls/quartz/avidec.c @@ -362,12 +362,111 @@ static HRESULT avi_decompressor_source_query_accept(struct strmbase_pin *iface, static HRESULT avi_decompressor_source_get_media_type(struct strmbase_pin *iface, unsigned int index, AM_MEDIA_TYPE *mt) { + static const struct + { + const GUID *subtype; + DWORD compression; + WORD bpp; + } + formats[] = + { + {&MEDIASUBTYPE_CLJR, mmioFOURCC('C','L','J','R'), 8}, + {&MEDIASUBTYPE_UYVY, mmioFOURCC('U','Y','V','Y'), 16}, + {&MEDIASUBTYPE_YUY2, mmioFOURCC('Y','U','Y','2'), 16}, + {&MEDIASUBTYPE_RGB32, BI_RGB, 32}, + {&MEDIASUBTYPE_RGB24, BI_RGB, 24}, + {&MEDIASUBTYPE_RGB565, BI_BITFIELDS, 16}, + {&MEDIASUBTYPE_RGB555, BI_RGB, 16}, + {&MEDIASUBTYPE_RGB8, BI_RGB, 8}, + }; + AVIDecImpl *filter = impl_from_strmbase_filter(iface->filter); + const VIDEOINFOHEADER *sink_format; + VIDEOINFO *format;
- if (index) + if (!filter->sink.pin.peer) return VFW_S_NO_MORE_ITEMS; - CopyMediaType(mt, &filter->mt); - return S_OK; + + sink_format = (VIDEOINFOHEADER *)filter->sink.pin.mt.pbFormat; + + memset(mt, 0, sizeof(AM_MEDIA_TYPE)); + + if (index < ARRAY_SIZE(formats)) + { + if (!(format = CoTaskMemAlloc(offsetof(VIDEOINFO, dwBitMasks[3])))) + return E_OUTOFMEMORY; + memset(format, 0, offsetof(VIDEOINFO, dwBitMasks[3])); + + format->rcSource = sink_format->rcSource; + format->rcTarget = sink_format->rcTarget; + format->dwBitRate = sink_format->dwBitRate; + format->dwBitErrorRate = sink_format->dwBitErrorRate; + format->AvgTimePerFrame = sink_format->AvgTimePerFrame; + + format->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); + format->bmiHeader.biWidth = sink_format->bmiHeader.biWidth; + format->bmiHeader.biHeight = sink_format->bmiHeader.biHeight; + format->bmiHeader.biPlanes = sink_format->bmiHeader.biPlanes; + format->bmiHeader.biBitCount = formats[index].bpp; + format->bmiHeader.biCompression = formats[index].compression; + format->bmiHeader.biSizeImage = format->bmiHeader.biWidth + * format->bmiHeader.biHeight * formats[index].bpp / 8; + + if (IsEqualGUID(formats[index].subtype, &MEDIASUBTYPE_RGB565)) + { + format->dwBitMasks[iRED] = 0xf800; + format->dwBitMasks[iGREEN] = 0x07e0; + format->dwBitMasks[iBLUE] = 0x001f; + mt->cbFormat = offsetof(VIDEOINFO, dwBitMasks[3]); + } + else + mt->cbFormat = sizeof(VIDEOINFOHEADER); + + mt->majortype = MEDIATYPE_Video; + mt->subtype = *formats[index].subtype; + mt->bFixedSizeSamples = TRUE; + mt->lSampleSize = format->bmiHeader.biSizeImage; + mt->formattype = FORMAT_VideoInfo; + mt->pbFormat = (BYTE *)format; + + return S_OK; + } + + if (index == ARRAY_SIZE(formats)) + { + size_t size = ICDecompressGetFormatSize(filter->hvid, &sink_format->bmiHeader); + + if (!size) + return VFW_S_NO_MORE_ITEMS; + + mt->cbFormat = offsetof(VIDEOINFOHEADER, bmiHeader) + size; + if (!(format = CoTaskMemAlloc(mt->cbFormat))) + return E_OUTOFMEMORY; + + format->rcSource = sink_format->rcSource; + format->rcTarget = sink_format->rcTarget; + format->dwBitRate = sink_format->dwBitRate; + format->dwBitErrorRate = sink_format->dwBitErrorRate; + format->AvgTimePerFrame = sink_format->AvgTimePerFrame; + + if (ICDecompressGetFormat(filter->hvid, &sink_format->bmiHeader, &format->bmiHeader)) + { + CoTaskMemFree(format); + return VFW_S_NO_MORE_ITEMS; + } + + mt->majortype = MEDIATYPE_Video; + mt->subtype = MEDIATYPE_Video; + mt->subtype.Data1 = format->bmiHeader.biCompression; + mt->bFixedSizeSamples = TRUE; + mt->lSampleSize = format->bmiHeader.biSizeImage; + mt->formattype = FORMAT_VideoInfo; + mt->pbFormat = (BYTE *)format; + + return S_OK; + } + + return VFW_S_NO_MORE_ITEMS; }
static HRESULT WINAPI avi_decompressor_source_DecideBufferSize(struct strmbase_source *iface, diff --git a/dlls/quartz/tests/avidec.c b/dlls/quartz/tests/avidec.c index 725e034ae27..6c29d33df29 100644 --- a/dlls/quartz/tests/avidec.c +++ b/dlls/quartz/tests/avidec.c @@ -584,7 +584,7 @@ static void test_media_types(void) ok(hr == S_OK, "Got hr %#x.\n", hr);
hr = IEnumMediaTypes_Next(enummt, 1, &pmt, NULL); - todo_wine ok(hr == S_FALSE, "Got hr %#x.\n", hr); + ok(hr == S_FALSE, "Got hr %#x.\n", hr);
IEnumMediaTypes_Release(enummt); IPin_Release(pin); @@ -639,7 +639,7 @@ static void test_enum_media_types(void) ok(hr == S_OK, "Got hr %#x.\n", hr);
hr = IEnumMediaTypes_Next(enum1, 1, mts, NULL); - todo_wine ok(hr == S_FALSE, "Got hr %#x.\n", hr); + ok(hr == S_FALSE, "Got hr %#x.\n", hr);
hr = IEnumMediaTypes_Next(enum1, 1, mts, &count); ok(hr == S_FALSE, "Got hr %#x.\n", hr); @@ -649,7 +649,7 @@ static void test_enum_media_types(void) ok(hr == S_OK, "Got hr %#x.\n", hr);
hr = IEnumMediaTypes_Next(enum1, 1, mts, NULL); - todo_wine ok(hr == S_FALSE, "Got hr %#x.\n", hr); + ok(hr == S_FALSE, "Got hr %#x.\n", hr);
hr = IEnumMediaTypes_Clone(enum1, &enum2); ok(hr == S_OK, "Got hr %#x.\n", hr); @@ -970,11 +970,11 @@ static void test_connect_pin(void) ok(compare_media_types(&mt, &req_mt), "Media types didn't match.\n"); ok(compare_media_types(&testsource.source.pin.mt, &req_mt), "Media types didn't match.\n");
+ sink_bih = req_format.bmiHeader; + hr = IPin_EnumMediaTypes(source, &enummt); ok(hr == S_OK, "Got hr %#x.\n", hr);
- sink_bih = req_format.bmiHeader; - for (i = 0; i < 9; ++i) { static const struct @@ -1023,6 +1023,15 @@ static void test_connect_pin(void) "%u: Media types didn't match.\n", i); ok(!memcmp(pmt->pbFormat, &expect_format, sizeof(VIDEOINFOHEADER)), "%u: Format blocks didn't match.\n", i); + if (i == 5) + { + const VIDEOINFO *format = (VIDEOINFO *)pmt->pbFormat; + + ok(pmt->cbFormat == offsetof(VIDEOINFO, dwBitMasks[3]), "Got format size %u.\n", pmt->cbFormat); + ok(format->dwBitMasks[iRED] == 0xf800, "Got red bit mask %#x.\n", format->dwBitMasks[iRED]); + ok(format->dwBitMasks[iGREEN] == 0x07e0, "Got green bit mask %#x.\n", format->dwBitMasks[iGREEN]); + ok(format->dwBitMasks[iBLUE] == 0x001f, "Got blue bit mask %#x.\n", format->dwBitMasks[iBLUE]); + }
hr = IPin_QueryAccept(source, pmt); ok(hr == (i == 8 ? S_OK : S_FALSE), "Got hr %#x.\n", hr);
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=67898
Your paranoid android.
=== build (build log) ===
error: patch failed: dlls/quartz/tests/avidec.c:970 Task: Patch failed to apply
=== debiant (build log) ===
error: patch failed: dlls/quartz/tests/avidec.c:970 Task: Patch failed to apply
=== debiant (build log) ===
error: patch failed: dlls/quartz/tests/avidec.c:970 Task: Patch failed to apply
Signed-off-by: Zebediah Figura zfigura@codeweavers.com --- dlls/quartz/avidec.c | 41 +++++++++++++++----------------------- dlls/quartz/tests/avidec.c | 7 +++++++ 2 files changed, 23 insertions(+), 25 deletions(-)
diff --git a/dlls/quartz/avidec.c b/dlls/quartz/avidec.c index 7645b17558b..7edad0fc04c 100644 --- a/dlls/quartz/avidec.c +++ b/dlls/quartz/avidec.c @@ -47,7 +47,6 @@ typedef struct AVIDecImpl
struct strmbase_sink sink;
- AM_MEDIA_TYPE mt; HIC hvid; BITMAPINFOHEADER* pBihIn; BITMAPINFOHEADER* pBihOut; @@ -238,21 +237,19 @@ static HRESULT avi_decompressor_sink_connect(struct strmbase_sink *iface, IPin * This->hvid = ICLocate(pmt->majortype.Data1, pmt->subtype.Data1, bmi, NULL, ICMODE_DECOMPRESS); if (This->hvid) { - const CLSID* outsubtype; DWORD bih_size; DWORD output_depth = bmi->biBitCount; DWORD result; - FreeMediaType(&This->mt);
switch(bmi->biBitCount) { - case 32: outsubtype = &MEDIASUBTYPE_RGB32; break; - case 24: outsubtype = &MEDIASUBTYPE_RGB24; break; - case 16: outsubtype = &MEDIASUBTYPE_RGB565; break; - case 8: outsubtype = &MEDIASUBTYPE_RGB8; break; + case 32: + case 24: + case 16: + case 8: + break; default: WARN("Non standard input depth %d, forced output depth to 32\n", bmi->biBitCount); - outsubtype = &MEDIASUBTYPE_RGB32; output_depth = 32; break; } @@ -286,17 +283,6 @@ static HRESULT avi_decompressor_sink_connect(struct strmbase_sink *iface, IPin * goto failed; }
- /* Update output media type */ - CopyMediaType(&This->mt, pmt); - This->mt.subtype = *outsubtype; - - if (IsEqualIID(&pmt->formattype, &FORMAT_VideoInfo)) - memcpy(&(((VIDEOINFOHEADER *)This->mt.pbFormat)->bmiHeader), This->pBihOut, This->pBihOut->biSize); - else if (IsEqualIID(&pmt->formattype, &FORMAT_VideoInfo2)) - memcpy(&(((VIDEOINFOHEADER2 *)This->mt.pbFormat)->bmiHeader), This->pBihOut, This->pBihOut->biSize); - else - assert(0); - TRACE("Connection accepted\n"); return S_OK; } @@ -351,12 +337,18 @@ static HRESULT avi_decompressor_source_query_interface(struct strmbase_pin *ifac static HRESULT avi_decompressor_source_query_accept(struct strmbase_pin *iface, const AM_MEDIA_TYPE *mt) { AVIDecImpl *filter = impl_from_strmbase_filter(iface->filter); + VIDEOINFOHEADER *sink_format, *format;
- if (IsEqualGUID(&mt->majortype, &filter->mt.majortype) - && (IsEqualGUID(&mt->subtype, &filter->mt.subtype) - || IsEqualGUID(&filter->mt.subtype, &GUID_NULL))) - return S_OK; - return S_FALSE; + if (!filter->sink.pin.peer || !IsEqualGUID(&mt->formattype, &FORMAT_VideoInfo)) + return S_FALSE; + + sink_format = (VIDEOINFOHEADER *)filter->sink.pin.mt.pbFormat; + format = (VIDEOINFOHEADER *)mt->pbFormat; + + if (ICDecompressQuery(filter->hvid, &sink_format->bmiHeader, &format->bmiHeader)) + return S_FALSE; + + return S_OK; }
static HRESULT avi_decompressor_source_get_media_type(struct strmbase_pin *iface, @@ -584,7 +576,6 @@ static void avi_decompressor_destroy(struct strmbase_filter *iface)
filter->stream_cs.DebugInfo->Spare[0] = 0; DeleteCriticalSection(&filter->stream_cs); - FreeMediaType(&filter->mt); IUnknown_Release(filter->seeking); strmbase_filter_cleanup(&filter->filter); free(filter); diff --git a/dlls/quartz/tests/avidec.c b/dlls/quartz/tests/avidec.c index 6c29d33df29..54d8dafe913 100644 --- a/dlls/quartz/tests/avidec.c +++ b/dlls/quartz/tests/avidec.c @@ -586,6 +586,13 @@ static void test_media_types(void) hr = IEnumMediaTypes_Next(enummt, 1, &pmt, NULL); ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+ mt.subtype = MEDIASUBTYPE_RGB24; + vih.bmiHeader.biCompression = BI_RGB; + vih.bmiHeader.biBitCount = 24; + vih.bmiHeader.biSizeImage= 32 * 24 * 3; + hr = IPin_QueryAccept(pin, &mt); + ok(hr == S_FALSE, "Got hr %#x.\n", hr); + IEnumMediaTypes_Release(enummt); IPin_Release(pin);
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=67899
Your paranoid android.
=== build (build log) ===
error: patch failed: dlls/quartz/tests/avidec.c:970 error: patch failed: dlls/quartz/tests/avidec.c:586 Task: Patch failed to apply
=== debiant (build log) ===
error: patch failed: dlls/quartz/tests/avidec.c:970 error: patch failed: dlls/quartz/tests/avidec.c:586 Task: Patch failed to apply
=== debiant (build log) ===
error: patch failed: dlls/quartz/tests/avidec.c:970 error: patch failed: dlls/quartz/tests/avidec.c:586 Task: Patch failed to apply
Signed-off-by: Zebediah Figura zfigura@codeweavers.com --- dlls/quartz/avidec.c | 60 ++++++++++++-------------------------- dlls/quartz/tests/avidec.c | 4 +-- 2 files changed, 19 insertions(+), 45 deletions(-)
diff --git a/dlls/quartz/avidec.c b/dlls/quartz/avidec.c index 7edad0fc04c..bfe12a243f9 100644 --- a/dlls/quartz/avidec.c +++ b/dlls/quartz/avidec.c @@ -49,7 +49,6 @@ typedef struct AVIDecImpl
HIC hvid; BITMAPINFOHEADER* pBihIn; - BITMAPINFOHEADER* pBihOut; REFERENCE_TIME late; } AVIDecImpl;
@@ -100,6 +99,7 @@ static int AVIDec_DropSample(AVIDecImpl *This, REFERENCE_TIME tStart) { static HRESULT WINAPI avi_decompressor_sink_Receive(struct strmbase_sink *iface, IMediaSample *pSample) { AVIDecImpl *This = impl_from_strmbase_filter(iface->pin.filter); + VIDEOINFOHEADER *source_format; HRESULT hr; DWORD res; IMediaSample* pOutSample = NULL; @@ -120,6 +120,8 @@ static HRESULT WINAPI avi_decompressor_sink_Receive(struct strmbase_sink *iface, return VFW_E_NOT_CONNECTED; }
+ source_format = (VIDEOINFOHEADER *)This->source.pin.mt.pbFormat; + if (This->filter.state == State_Stopped) return VFW_E_WRONG_STATE;
@@ -161,8 +163,9 @@ static HRESULT WINAPI avi_decompressor_sink_Receive(struct strmbase_sink *iface, return hr; } cbDstStream = IMediaSample_GetSize(pOutSample); - if (cbDstStream < This->pBihOut->biSizeImage) { - ERR("Sample size is too small %d < %d\n", cbDstStream, This->pBihOut->biSizeImage); + if (cbDstStream < source_format->bmiHeader.biSizeImage) + { + ERR("Sample size is too small (%u < %u).\n", cbDstStream, source_format->bmiHeader.biSizeImage); IMediaSample_Release(pOutSample); LeaveCriticalSection(&This->stream_cs); return E_FAIL; @@ -176,7 +179,7 @@ static HRESULT WINAPI avi_decompressor_sink_Receive(struct strmbase_sink *iface, if (hr == S_OK && AVIDec_DropSample(This, tStart)) flags |= ICDECOMPRESS_HURRYUP;
- res = ICDecompress(This->hvid, flags, This->pBihIn, pbSrcStream, This->pBihOut, pbDstStream); + res = ICDecompress(This->hvid, flags, This->pBihIn, pbSrcStream, &source_format->bmiHeader, pbDstStream); if (res != ICERR_OK) ERR("Error occurred during the decompression (%x)\n", res);
@@ -187,7 +190,7 @@ static HRESULT WINAPI avi_decompressor_sink_Receive(struct strmbase_sink *iface, return S_OK; }
- IMediaSample_SetActualDataLength(pOutSample, This->pBihOut->biSizeImage); + IMediaSample_SetActualDataLength(pOutSample, source_format->bmiHeader.biSizeImage);
IMediaSample_SetPreroll(pOutSample, (IMediaSample_IsPreroll(pSample) == S_OK)); IMediaSample_SetDiscontinuity(pOutSample, (IMediaSample_IsDiscontinuity(pSample) == S_OK)); @@ -238,22 +241,8 @@ static HRESULT avi_decompressor_sink_connect(struct strmbase_sink *iface, IPin * if (This->hvid) { DWORD bih_size; - DWORD output_depth = bmi->biBitCount; DWORD result;
- switch(bmi->biBitCount) - { - case 32: - case 24: - case 16: - case 8: - break; - default: - WARN("Non standard input depth %d, forced output depth to 32\n", bmi->biBitCount); - output_depth = 32; - break; - } - /* Copy bitmap header from media type to 1 for input and 1 for output */ bih_size = bmi->biSize + bmi->biClrUsed * 4; This->pBihIn = CoTaskMemAlloc(bih_size); @@ -262,25 +251,12 @@ static HRESULT avi_decompressor_sink_connect(struct strmbase_sink *iface, IPin * hr = E_OUTOFMEMORY; goto failed; } - This->pBihOut = CoTaskMemAlloc(bih_size); - if (!This->pBihOut) - { - hr = E_OUTOFMEMORY; - goto failed; - } memcpy(This->pBihIn, bmi, bih_size); - memcpy(This->pBihOut, bmi, bih_size); - - /* Update output format as non compressed bitmap */ - This->pBihOut->biCompression = 0; - This->pBihOut->biBitCount = output_depth; - This->pBihOut->biSizeImage = This->pBihOut->biWidth * This->pBihOut->biHeight * This->pBihOut->biBitCount / 8; - TRACE("Size: %u\n", This->pBihIn->biSize); - result = ICDecompressQuery(This->hvid, This->pBihIn, This->pBihOut); - if (result != ICERR_OK) + + if ((result = ICDecompressQuery(This->hvid, This->pBihIn, NULL))) { - ERR("Unable to found a suitable output format (%d)\n", result); - goto failed; + WARN("No decompressor found, error %d.\n", result); + return VFW_E_TYPE_NOT_ACCEPTED; }
TRACE("Connection accepted\n"); @@ -302,10 +278,8 @@ static void avi_decompressor_sink_disconnect(struct strmbase_sink *iface) if (filter->hvid) ICClose(filter->hvid); CoTaskMemFree(filter->pBihIn); - CoTaskMemFree(filter->pBihOut); filter->hvid = NULL; filter->pBihIn = NULL; - filter->pBihOut = NULL; }
static const struct strmbase_sink_ops sink_ops = @@ -464,14 +438,14 @@ static HRESULT avi_decompressor_source_get_media_type(struct strmbase_pin *iface static HRESULT WINAPI avi_decompressor_source_DecideBufferSize(struct strmbase_source *iface, IMemAllocator *pAlloc, ALLOCATOR_PROPERTIES *ppropInputRequest) { - AVIDecImpl *pAVI = impl_from_strmbase_filter(iface->pin.filter); + const VIDEOINFOHEADER *source_format = (VIDEOINFOHEADER *)iface->pin.mt.pbFormat; ALLOCATOR_PROPERTIES actual;
if (!ppropInputRequest->cbAlign) ppropInputRequest->cbAlign = 1;
- if (ppropInputRequest->cbBuffer < pAVI->pBihOut->biSizeImage) - ppropInputRequest->cbBuffer = pAVI->pBihOut->biSizeImage; + if (ppropInputRequest->cbBuffer < source_format->bmiHeader.biSizeImage) + ppropInputRequest->cbBuffer = source_format->bmiHeader.biSizeImage;
if (!ppropInputRequest->cBuffers) ppropInputRequest->cBuffers = 1; @@ -586,11 +560,13 @@ static void avi_decompressor_destroy(struct strmbase_filter *iface) static HRESULT avi_decompressor_init_stream(struct strmbase_filter *iface) { AVIDecImpl *filter = impl_from_strmbase_filter(iface); + VIDEOINFOHEADER *source_format; LRESULT res;
filter->late = -1;
- if ((res = ICDecompressBegin(filter->hvid, filter->pBihIn, filter->pBihOut))) + source_format = (VIDEOINFOHEADER *)filter->sink.pin.mt.pbFormat; + if ((res = ICDecompressBegin(filter->hvid, filter->pBihIn, &source_format->bmiHeader))) { ERR("ICDecompressBegin() failed, error %ld.\n", res); return E_FAIL; diff --git a/dlls/quartz/tests/avidec.c b/dlls/quartz/tests/avidec.c index 54d8dafe913..da7f5827ed3 100644 --- a/dlls/quartz/tests/avidec.c +++ b/dlls/quartz/tests/avidec.c @@ -963,9 +963,7 @@ static void test_connect_pin(void) req_mt.subtype = test_subtype;
hr = IFilterGraph2_ConnectDirect(graph, &testsource.source.pin.IPin_iface, sink, &req_mt); - todo_wine ok(hr == S_OK, "Got hr %#x.\n", hr); - if (hr != S_OK) - goto out; + ok(hr == S_OK, "Got hr %#x.\n", hr);
hr = IPin_ConnectedTo(sink, &peer); ok(hr == S_OK, "Got hr %#x.\n", hr);
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=67900
Your paranoid android.
=== build (build log) ===
error: patch failed: dlls/quartz/tests/avidec.c:970 error: patch failed: dlls/quartz/tests/avidec.c:586 error: patch failed: dlls/quartz/tests/avidec.c:963 Task: Patch failed to apply
=== debiant (build log) ===
error: patch failed: dlls/quartz/tests/avidec.c:970 error: patch failed: dlls/quartz/tests/avidec.c:586 error: patch failed: dlls/quartz/tests/avidec.c:963 Task: Patch failed to apply
=== debiant (build log) ===
error: patch failed: dlls/quartz/tests/avidec.c:970 error: patch failed: dlls/quartz/tests/avidec.c:586 error: patch failed: dlls/quartz/tests/avidec.c:963 Task: Patch failed to apply
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=67897
Your paranoid android.
=== w1064v1809_he (32 bit report) ===
quartz: filtergraph.c:4020: Test failed: Expected about 1334ms, got d94900. filtergraph.c:4025: Test failed: Expected about 1334ms, got d97010. filtergraph.c:4038: Test failed: Expected about 1334ms, got d81080. filtergraph.c:4043: Test failed: Expected about 1334ms, got d81080.
=== w2008s64 (64 bit report) ===
Report validation errors: quartz:filtergraph crashed (c0000374)
=== w864 (64 bit report) ===
Report validation errors: quartz:filtergraph crashed (c0000374)
=== w1064v1507 (64 bit report) ===
Report validation errors: quartz:filtergraph crashed (c0000374)
=== w1064v1809 (64 bit report) ===
Report validation errors: quartz:filtergraph crashed (c0000374)