Signed-off-by: Giovanni Mascellani gmascellani@codeweavers.com --- dlls/mfplat/tests/mfplat.c | 45 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 43 insertions(+), 2 deletions(-)
diff --git a/dlls/mfplat/tests/mfplat.c b/dlls/mfplat/tests/mfplat.c index 65ab72bd57b..605fbc4fe27 100644 --- a/dlls/mfplat/tests/mfplat.c +++ b/dlls/mfplat/tests/mfplat.c @@ -654,12 +654,15 @@ static void test_source_resolver(void) IMFStreamDescriptor *sd; IUnknown *cancel_cookie; IMFByteStream *stream; + IMFGetService *get_service; + IMFRateSupport *rate_support; WCHAR pathW[MAX_PATH]; int i, sample_count; WCHAR *filename; PROPVARIANT var; HRESULT hr; GUID guid; + float rate;
if (!pMFCreateSourceResolver) { @@ -763,8 +766,44 @@ static void test_source_resolver(void) ok(mediasource != NULL, "got %p\n", mediasource); ok(obj_type == MF_OBJECT_MEDIASOURCE, "got %d\n", obj_type);
- check_interface(mediasource, &IID_IMFGetService, TRUE); - check_service_interface(mediasource, &MF_RATE_CONTROL_SERVICE, &IID_IMFRateSupport, TRUE); + hr = IMFMediaSource_QueryInterface(mediasource, &IID_IMFGetService, (void**)&get_service); + ok(hr == S_OK, "Failed to get service interface, hr %#x.\n", hr); + + hr = IMFGetService_GetService(get_service, &MF_RATE_CONTROL_SERVICE, &IID_IMFRateSupport, (void**)&rate_support); + ok(hr == S_OK, "Failed to get rate support interface, hr %#x.\n", hr); + + hr = IMFRateSupport_GetFastestRate(rate_support, MFRATE_FORWARD, FALSE, &rate); + ok(hr == S_OK, "Failed to query fastest rate, hr %#x.\n", hr); +todo_wine + ok(rate == 1e6f, "Unexpected fastest rate %f.\n", rate); + hr = IMFRateSupport_GetFastestRate(rate_support, MFRATE_FORWARD, TRUE, &rate); +todo_wine { + ok(hr == S_OK, "Failed to query fastest rate, hr %#x.\n", hr); + ok(rate == 1e6f, "Unexpected fastest rate %f.\n", rate); + hr = IMFRateSupport_GetFastestRate(rate_support, MFRATE_REVERSE, FALSE, &rate); + ok(hr == S_OK, "Failed to query fastest rate, hr %#x.\n", hr); + ok(rate == -1e6f, "Unexpected fastest rate %f.\n", rate); + hr = IMFRateSupport_GetFastestRate(rate_support, MFRATE_REVERSE, TRUE, &rate); + ok(hr == S_OK, "Failed to query fastest rate, hr %#x.\n", hr); + ok(rate == -1e6f, "Unexpected fastest rate %f.\n", rate); +} + + hr = IMFRateSupport_GetSlowestRate(rate_support, MFRATE_FORWARD, FALSE, &rate); + ok(hr == S_OK, "Failed to query slowest rate, hr %#x.\n", hr); +todo_wine + ok(rate == 0.0f, "Unexpected slowest rate %f.\n", rate); + hr = IMFRateSupport_GetSlowestRate(rate_support, MFRATE_FORWARD, TRUE, &rate); +todo_wine { + ok(hr == S_OK, "Failed to query slowest rate, hr %#x.\n", hr); + ok(rate == 0.0f, "Unexpected slowest rate %f.\n", rate); + hr = IMFRateSupport_GetSlowestRate(rate_support, MFRATE_REVERSE, FALSE, &rate); + ok(hr == S_OK, "Failed to query slowest rate, hr %#x.\n", hr); + ok(rate == 0.0f, "Unexpected slowest rate %f.\n", rate); + hr = IMFRateSupport_GetSlowestRate(rate_support, MFRATE_REVERSE, TRUE, &rate); + ok(hr == S_OK, "Failed to query slowest rate, hr %#x.\n", hr); + ok(rate == 0.0f, "Unexpected slowest rate %f.\n", rate); +} + check_service_interface(mediasource, &MF_RATE_CONTROL_SERVICE, &IID_IMFRateControl, TRUE); hr = IMFMediaSource_CreatePresentationDescriptor(mediasource, &descriptor); ok(hr == S_OK, "Failed to get presentation descriptor, hr %#x.\n", hr); @@ -878,6 +917,8 @@ todo_wine hr = IMFMediaSource_CreatePresentationDescriptor(mediasource, NULL); ok(hr == MF_E_SHUTDOWN, "Unexpected hr %#x.\n", hr);
+ IMFRateSupport_Release(rate_support); + IMFGetService_Release(get_service); IMFMediaSource_Release(mediasource); IMFByteStream_Release(stream);
Signed-off-by: Giovanni Mascellani gmascellani@codeweavers.com --- dlls/mfplat/tests/mfplat.c | 82 ++++++++++++++++++++++++++++---------- 1 file changed, 61 insertions(+), 21 deletions(-)
diff --git a/dlls/mfplat/tests/mfplat.c b/dlls/mfplat/tests/mfplat.c index 605fbc4fe27..6f7771bb79c 100644 --- a/dlls/mfplat/tests/mfplat.c +++ b/dlls/mfplat/tests/mfplat.c @@ -94,26 +94,6 @@ static void check_interface_(unsigned int line, void *iface_ptr, REFIID iid, BOO IUnknown_Release(unk); }
-#define check_service_interface(a, b, c, d) check_service_interface_(__LINE__, a, b, c, d) -static void check_service_interface_(unsigned int line, void *iface_ptr, REFGUID service, REFIID iid, BOOL supported) -{ - IUnknown *iface = iface_ptr; - HRESULT hr, expected_hr; - IMFGetService *gs; - IUnknown *unk; - - expected_hr = supported ? S_OK : E_NOINTERFACE; - - if (SUCCEEDED(hr = IUnknown_QueryInterface(iface, &IID_IMFGetService, (void **)&gs))) - { - hr = IMFGetService_GetService(gs, service, iid, (void **)&unk); - IMFGetService_Release(gs); - } - ok_(__FILE__, line)(hr == expected_hr, "Got hr %#x, expected %#x.\n", hr, expected_hr); - if (SUCCEEDED(hr)) - IUnknown_Release(unk); -} - struct d3d11_resource_readback { ID3D11Resource *resource; @@ -656,6 +636,7 @@ static void test_source_resolver(void) IMFByteStream *stream; IMFGetService *get_service; IMFRateSupport *rate_support; + IMFRateControl *rate_control; WCHAR pathW[MAX_PATH]; int i, sample_count; WCHAR *filename; @@ -663,6 +644,7 @@ static void test_source_resolver(void) HRESULT hr; GUID guid; float rate; + BOOL thinning;
if (!pMFCreateSourceResolver) { @@ -804,7 +786,64 @@ todo_wine { ok(rate == 0.0f, "Unexpected slowest rate %f.\n", rate); }
- check_service_interface(mediasource, &MF_RATE_CONTROL_SERVICE, &IID_IMFRateControl, TRUE); + hr = IMFGetService_GetService(get_service, &MF_RATE_CONTROL_SERVICE, &IID_IMFRateControl, (void**)&rate_control); + ok(hr == S_OK, "Failed to get rate control interface, hr %#x.\n", hr); + + hr = IMFRateControl_GetRate(rate_control, &thinning, &rate); + ok(hr == S_OK, "Failed to get current rate, hr %#x.\n", hr); + ok(!thinning, "Unexpected thinning.\n", thinning); + ok(rate == 1.0f, "Unexpected rate %f.\n", rate); + + /* 1e6f + 0.06f == 1.0f + 1 ulp */ + hr = IMFRateControl_SetRate(rate_control, FALSE, 1e6f + 0.06f); + ok(hr == MF_E_UNSUPPORTED_RATE, "Unexpected hr %#x.\n", hr); + hr = IMFRateControl_GetRate(rate_control, &thinning, &rate); + ok(hr == S_OK, "Failed to get current rate, hr %#x.\n", hr); + ok(!thinning, "Unexpected thinning.\n", thinning); + ok(rate == 1.0f, "Unexpected rate %f.\n", rate); + + hr = IMFRateControl_SetRate(rate_control, FALSE, 1e6f); +todo_wine + ok(hr == S_OK, "Cannot set rate, hr %#x.\n", hr); + if (SUCCEEDED(hr)) + { + get_event((IMFMediaEventGenerator *)mediasource, MESourceRateChanged, &var); + ok(var.vt == VT_R4 && var.fltVal == 1e6f, "Unexpected rate in propvariant.\n"); + } + hr = IMFRateControl_GetRate(rate_control, &thinning, &rate); + ok(hr == S_OK, "Failed to get current rate, hr %#x.\n", hr); + ok(!thinning, "Unexpected thinning.\n", thinning); +todo_wine + ok(rate == 1e6f, "Unexpected rate %f.\n", rate); + + hr = IMFRateControl_SetRate(rate_control, FALSE, 0.0f); +todo_wine + ok(hr == S_OK, "Cannot set rate, hr %#x.\n", hr); + if (SUCCEEDED(hr)) + { + get_event((IMFMediaEventGenerator *)mediasource, MESourceRateChanged, &var); + ok(var.vt == VT_R4 && var.fltVal == 0.0f, "Unexpected rate in propvariant.\n"); + } + hr = IMFRateControl_GetRate(rate_control, &thinning, &rate); + ok(hr == S_OK, "Failed to get current rate, hr %#x.\n", hr); + ok(!thinning, "Unexpected thinning.\n", thinning); +todo_wine + ok(rate == 0.0f, "Unexpected rate %f.\n", rate); + + hr = IMFRateControl_SetRate(rate_control, FALSE, 1e-6f); +todo_wine + ok(hr == S_OK, "Cannot set rate, hr %#x.\n", hr); + if (SUCCEEDED(hr)) + { + get_event((IMFMediaEventGenerator *)mediasource, MESourceRateChanged, &var); + ok(var.vt == VT_R4 && var.fltVal == 1e-6f, "Unexpected rate in propvariant.\n"); + } + hr = IMFRateControl_GetRate(rate_control, &thinning, &rate); + ok(hr == S_OK, "Failed to get current rate, hr %#x.\n", hr); + ok(!thinning, "Unexpected thinning.\n", thinning); +todo_wine + ok(rate == 1e-6f, "Unexpected rate %f.\n", rate); + hr = IMFMediaSource_CreatePresentationDescriptor(mediasource, &descriptor); ok(hr == S_OK, "Failed to get presentation descriptor, hr %#x.\n", hr); ok(descriptor != NULL, "got %p\n", descriptor); @@ -917,6 +956,7 @@ todo_wine hr = IMFMediaSource_CreatePresentationDescriptor(mediasource, NULL); ok(hr == MF_E_SHUTDOWN, "Unexpected hr %#x.\n", hr);
+ IMFRateControl_Release(rate_control); IMFRateSupport_Release(rate_support); IMFGetService_Release(get_service); IMFMediaSource_Release(mediasource);
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=90043
Your paranoid android.
=== w7u_adm (32 bit report) ===
mfplat: 0a28:mfplat: unhandled exception c0000005 at 6D5D7D1C
=== w7u_el (32 bit report) ===
mfplat: 0a50:mfplat: unhandled exception c0000005 at 6D2B7D24
Hi,
Il 07/05/21 12:14, Marvin ha scritto:
=== w7u_adm (32 bit report) ===
mfplat: 0a28:mfplat: unhandled exception c0000005 at 6D5D7D1C
=== w7u_el (32 bit report) ===
mfplat: 0a50:mfplat: unhandled exception c0000005 at 6D2B7D24
I tried to debug this. Unfortunately I am not able to reproduce it on any Win 7 VM I tried. Querying the testbot many times, I could trim down the crashing test to a minimal example that seems to be a completely correct program, but still crashes on the testbot (with probability around 0.5). So I currently believe that:
* As noticed by François, the problem already existed before my patch set, it was just less probable: https://test.winehq.org/data/patterns.html#mfplat:mfplat. So my patch seems to make it more evident, but the problem was already there.
* The crash remains also if I set the rate to 1.0, which is the default. It goes away if I don't set the rate at all. It also goes away if I request less than 10 frames (which means that I don't reach the end of the file). These facts further convince me that the problem is in the Win 7 implementation of MF, not in our test.
In the end, I think that my patches are correct and should be accepted. If that's considered useful, I can disable the SetRate test on Win 7 to avoid triggering a lot of crashes, but please tell me what is the correct way to do that, because I know that just querying the Windows version is not good.
Thanks, Giovanni.
On 5/14/21 12:36 PM, Giovanni Mascellani wrote:
Hi,
Il 07/05/21 12:14, Marvin ha scritto:
=== w7u_adm (32 bit report) ===
mfplat: 0a28:mfplat: unhandled exception c0000005 at 6D5D7D1C
=== w7u_el (32 bit report) ===
mfplat: 0a50:mfplat: unhandled exception c0000005 at 6D2B7D24
I tried to debug this. Unfortunately I am not able to reproduce it on any Win 7 VM I tried. Querying the testbot many times, I could trim down the crashing test to a minimal example that seems to be a completely correct program, but still crashes on the testbot (with probability around 0.5). So I currently believe that:
- As noticed by François, the problem already existed before my patch
set, it was just less probable: https://test.winehq.org/data/patterns.html#mfplat:mfplat. So my patch seems to make it more evident, but the problem was already there.
- The crash remains also if I set the rate to 1.0, which is the
default. It goes away if I don't set the rate at all. It also goes away if I request less than 10 frames (which means that I don't reach the end of the file). These facts further convince me that the problem is in the Win 7 implementation of MF, not in our test.
In the end, I think that my patches are correct and should be accepted. If that's considered useful, I can disable the SetRate test on Win 7 to avoid triggering a lot of crashes, but please tell me what is the correct way to do that, because I know that just querying the Windows version is not good.
Thanks, Giovanni.
Do we need rate control to fix the issue with the games or are rate support changes enough?
Thinned rates are accepted too, though no actual thinning is performed. Since thinning behavior is expected to be implementation-dependent, this doesn't seem inappropriate.
Signed-off-by: Giovanni Mascellani gmascellani@codeweavers.com --- dlls/mfplat/tests/mfplat.c | 6 ------ dlls/winegstreamer/media_source.c | 28 +++++++++++++++++++++------- 2 files changed, 21 insertions(+), 13 deletions(-)
diff --git a/dlls/mfplat/tests/mfplat.c b/dlls/mfplat/tests/mfplat.c index 6f7771bb79c..7201b6d3e4a 100644 --- a/dlls/mfplat/tests/mfplat.c +++ b/dlls/mfplat/tests/mfplat.c @@ -803,7 +803,6 @@ todo_wine { ok(rate == 1.0f, "Unexpected rate %f.\n", rate);
hr = IMFRateControl_SetRate(rate_control, FALSE, 1e6f); -todo_wine ok(hr == S_OK, "Cannot set rate, hr %#x.\n", hr); if (SUCCEEDED(hr)) { @@ -813,11 +812,9 @@ todo_wine hr = IMFRateControl_GetRate(rate_control, &thinning, &rate); ok(hr == S_OK, "Failed to get current rate, hr %#x.\n", hr); ok(!thinning, "Unexpected thinning.\n", thinning); -todo_wine ok(rate == 1e6f, "Unexpected rate %f.\n", rate);
hr = IMFRateControl_SetRate(rate_control, FALSE, 0.0f); -todo_wine ok(hr == S_OK, "Cannot set rate, hr %#x.\n", hr); if (SUCCEEDED(hr)) { @@ -827,11 +824,9 @@ todo_wine hr = IMFRateControl_GetRate(rate_control, &thinning, &rate); ok(hr == S_OK, "Failed to get current rate, hr %#x.\n", hr); ok(!thinning, "Unexpected thinning.\n", thinning); -todo_wine ok(rate == 0.0f, "Unexpected rate %f.\n", rate);
hr = IMFRateControl_SetRate(rate_control, FALSE, 1e-6f); -todo_wine ok(hr == S_OK, "Cannot set rate, hr %#x.\n", hr); if (SUCCEEDED(hr)) { @@ -841,7 +836,6 @@ todo_wine hr = IMFRateControl_GetRate(rate_control, &thinning, &rate); ok(hr == S_OK, "Failed to get current rate, hr %#x.\n", hr); ok(!thinning, "Unexpected thinning.\n", thinning); -todo_wine ok(rate == 1e-6f, "Unexpected rate %f.\n", rate);
hr = IMFMediaSource_CreatePresentationDescriptor(mediasource, &descriptor); diff --git a/dlls/winegstreamer/media_source.c b/dlls/winegstreamer/media_source.c index eb5b9e366ec..f77a8dfe78a 100644 --- a/dlls/winegstreamer/media_source.c +++ b/dlls/winegstreamer/media_source.c @@ -104,6 +104,8 @@ struct media_source
HANDLE read_thread; bool read_thread_shutdown; + float rate; + BOOL thinning; };
static inline struct media_stream *impl_from_IMFMediaStream(IMFMediaStream *iface) @@ -989,28 +991,38 @@ static ULONG WINAPI media_source_rate_control_Release(IMFRateControl *iface)
static HRESULT WINAPI media_source_rate_control_SetRate(IMFRateControl *iface, BOOL thin, float rate) { + struct media_source *source = impl_from_IMFRateControl(iface); + PROPVARIANT pv; + FIXME("%p, %d, %f.\n", iface, thin, rate);
if (rate < 0.0f) return MF_E_REVERSE_UNSUPPORTED; + if (rate > 1e6) + return MF_E_UNSUPPORTED_RATE;
- if (thin) - return MF_E_THINNING_UNSUPPORTED; + source->rate = rate; + source->thinning = thin;
- if (rate != 1.0f) - return MF_E_UNSUPPORTED_RATE; + pv.vt = VT_R4; + pv.fltVal = rate; + IMFMediaEventQueue_QueueEventParamVar(source->event_queue, MESourceRateChanged, &GUID_NULL, S_OK, &pv);
return S_OK; }
static HRESULT WINAPI media_source_rate_control_GetRate(IMFRateControl *iface, BOOL *thin, float *rate) { + struct media_source *source = impl_from_IMFRateControl(iface); + TRACE("%p, %p, %p.\n", iface, thin, rate);
- if (thin) - *thin = FALSE; + if (!rate) + return E_INVALIDARG; + *rate = source->rate;
- *rate = 1.0f; + if (thin) + *thin = source->thinning;
return S_OK; } @@ -1383,6 +1395,8 @@ static HRESULT media_source_constructor(IMFByteStream *bytestream, struct media_ IMFPresentationDescriptor_SetUINT64(object->pres_desc, &MF_PD_DURATION, total_pres_time);
object->state = SOURCE_STOPPED; + object->rate = 1.0f; + object->thinning = FALSE;
*out_media_source = object; return S_OK;
On 5/7/21 11:56 AM, Giovanni Mascellani wrote:
static HRESULT WINAPI media_source_rate_control_SetRate(IMFRateControl *iface, BOOL thin, float rate) {
struct media_source *source = impl_from_IMFRateControl(iface);
PROPVARIANT pv;
FIXME("%p, %d, %f.\n", iface, thin, rate);
if (rate < 0.0f) return MF_E_REVERSE_UNSUPPORTED;
if (rate > 1e6)
return MF_E_UNSUPPORTED_RATE;
- if (thin)
return MF_E_THINNING_UNSUPPORTED;
- source->rate = rate;
- source->thinning = thin;
- if (rate != 1.0f)
return MF_E_UNSUPPORTED_RATE;
pv.vt = VT_R4;
pv.fltVal = rate;
IMFMediaEventQueue_QueueEventParamVar(source->event_queue, MESourceRateChanged, &GUID_NULL, S_OK, &pv);
return S_OK;
}
Does it send MESourceRateChanged even when rate hasn't changed?
Hi,
Il 07/05/21 11:26, Nikolay Sivov ha scritto:
Does it send MESourceRateChanged even when rate hasn't changed?
Yes, it does. Initially I even checked that in the tests, but then it looked too much and I decided to remove it, but I can add it back.
Giovanni.
On 5/7/21 12:35 PM, Giovanni Mascellani wrote:
Hi,
Il 07/05/21 11:26, Nikolay Sivov ha scritto:
Does it send MESourceRateChanged even when rate hasn't changed?
Yes, it does. Initially I even checked that in the tests, but then it looked too much and I decided to remove it, but I can add it back.
Giovanni.
Alright, no, no need to add that back. It already felt too much to test events at all in this case. Especially the ones we don't support during playback.
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=90044
Your paranoid android.
=== w7u_adm (32 bit report) ===
mfplat: 0a48:mfplat: unhandled exception c0000005 at 6D4A7D1C
=== w7u_el (32 bit report) ===
mfplat: 0a48:mfplat: unhandled exception c0000005 at 6D3F7D24
Signed-off-by: Giovanni Mascellani gmascellani@codeweavers.com --- dlls/mfplat/tests/mfplat.c | 12 ++++++++++++ 1 file changed, 12 insertions(+)
diff --git a/dlls/mfplat/tests/mfplat.c b/dlls/mfplat/tests/mfplat.c index 7201b6d3e4a..06560e3a529 100644 --- a/dlls/mfplat/tests/mfplat.c +++ b/dlls/mfplat/tests/mfplat.c @@ -794,6 +794,18 @@ todo_wine { ok(!thinning, "Unexpected thinning.\n", thinning); ok(rate == 1.0f, "Unexpected rate %f.\n", rate);
+ hr = IMFRateControl_GetRate(rate_control, NULL, &rate); + ok(hr == S_OK, "Failed to get current rate, hr %#x.\n", hr); + ok(rate == 1.0f, "Unexpected rate %f.\n", rate); + + thinning = TRUE; + hr = IMFRateControl_GetRate(rate_control, &thinning, NULL); + ok(hr == E_INVALIDARG, "Unexpected hr %#x.\n", hr); + ok(thinning, "Failed call touched thinning.\n", thinning); + + hr = IMFRateControl_GetRate(rate_control, NULL, NULL); + ok(hr == E_INVALIDARG, "Unexpected hr %#x.\n", hr); + /* 1e6f + 0.06f == 1.0f + 1 ulp */ hr = IMFRateControl_SetRate(rate_control, FALSE, 1e6f + 0.06f); ok(hr == MF_E_UNSUPPORTED_RATE, "Unexpected 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=90045
Your paranoid android.
=== w7u_el (32 bit report) ===
mfplat: 0a48:mfplat: unhandled exception c0000005 at 6D3E7D1C
Signed-off-by: Giovanni Mascellani gmascellani@codeweavers.com --- dlls/mfplat/tests/mfplat.c | 8 +++----- dlls/winegstreamer/media_source.c | 10 ++-------- 2 files changed, 5 insertions(+), 13 deletions(-)
diff --git a/dlls/mfplat/tests/mfplat.c b/dlls/mfplat/tests/mfplat.c index 06560e3a529..3c474f77c42 100644 --- a/dlls/mfplat/tests/mfplat.c +++ b/dlls/mfplat/tests/mfplat.c @@ -756,13 +756,12 @@ static void test_source_resolver(void)
hr = IMFRateSupport_GetFastestRate(rate_support, MFRATE_FORWARD, FALSE, &rate); ok(hr == S_OK, "Failed to query fastest rate, hr %#x.\n", hr); -todo_wine ok(rate == 1e6f, "Unexpected fastest rate %f.\n", rate); hr = IMFRateSupport_GetFastestRate(rate_support, MFRATE_FORWARD, TRUE, &rate); -todo_wine { ok(hr == S_OK, "Failed to query fastest rate, hr %#x.\n", hr); ok(rate == 1e6f, "Unexpected fastest rate %f.\n", rate); hr = IMFRateSupport_GetFastestRate(rate_support, MFRATE_REVERSE, FALSE, &rate); +todo_wine { ok(hr == S_OK, "Failed to query fastest rate, hr %#x.\n", hr); ok(rate == -1e6f, "Unexpected fastest rate %f.\n", rate); hr = IMFRateSupport_GetFastestRate(rate_support, MFRATE_REVERSE, TRUE, &rate); @@ -772,19 +771,18 @@ todo_wine {
hr = IMFRateSupport_GetSlowestRate(rate_support, MFRATE_FORWARD, FALSE, &rate); ok(hr == S_OK, "Failed to query slowest rate, hr %#x.\n", hr); -todo_wine ok(rate == 0.0f, "Unexpected slowest rate %f.\n", rate); hr = IMFRateSupport_GetSlowestRate(rate_support, MFRATE_FORWARD, TRUE, &rate); -todo_wine { ok(hr == S_OK, "Failed to query slowest rate, hr %#x.\n", hr); ok(rate == 0.0f, "Unexpected slowest rate %f.\n", rate); hr = IMFRateSupport_GetSlowestRate(rate_support, MFRATE_REVERSE, FALSE, &rate); +todo_wine ok(hr == S_OK, "Failed to query slowest rate, hr %#x.\n", hr); ok(rate == 0.0f, "Unexpected slowest rate %f.\n", rate); hr = IMFRateSupport_GetSlowestRate(rate_support, MFRATE_REVERSE, TRUE, &rate); +todo_wine ok(hr == S_OK, "Failed to query slowest rate, hr %#x.\n", hr); ok(rate == 0.0f, "Unexpected slowest rate %f.\n", rate); -}
hr = IMFGetService_GetService(get_service, &MF_RATE_CONTROL_SERVICE, &IID_IMFRateControl, (void**)&rate_control); ok(hr == S_OK, "Failed to get rate control interface, hr %#x.\n", hr); diff --git a/dlls/winegstreamer/media_source.c b/dlls/winegstreamer/media_source.c index f77a8dfe78a..5ce759e9789 100644 --- a/dlls/winegstreamer/media_source.c +++ b/dlls/winegstreamer/media_source.c @@ -922,10 +922,7 @@ static HRESULT WINAPI media_source_rate_support_GetSlowestRate(IMFRateSupport *i if (direction == MFRATE_REVERSE) return MF_E_REVERSE_UNSUPPORTED;
- if (thin) - return MF_E_THINNING_UNSUPPORTED; - - *rate = 1.0f; + *rate = 0.0f;
return S_OK; } @@ -937,10 +934,7 @@ static HRESULT WINAPI media_source_rate_support_GetFastestRate(IMFRateSupport *i if (direction == MFRATE_REVERSE) return MF_E_REVERSE_UNSUPPORTED;
- if (thin) - return MF_E_THINNING_UNSUPPORTED; - - *rate = 1.0f; + *rate = 1e6f;
return S_OK; }
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=90046
Your paranoid android.
=== w7u_adm (32 bit report) ===
mfplat: 0a2c:mfplat: unhandled exception c0000005 at 6D467D1C
=== w7u_el (32 bit report) ===
mfplat: 0a48:mfplat: unhandled exception c0000005 at 6D3F7D1C
=== debiant2 (32 bit French report) ===
mfplat: mfplat.c:3087: Test failed: Unexpected counter value 0. Unhandled exception: page fault on execute access to 0x00428340 in 32-bit code (0x00428340).