From: Charlotte Pabst cpabst@codeweavers.com
--- dlls/mf/session.c | 9 +++++++-- dlls/mf/tests/mf.c | 1 - 2 files changed, 7 insertions(+), 3 deletions(-)
diff --git a/dlls/mf/session.c b/dlls/mf/session.c index 20401acc4b4..9294d40045d 100644 --- a/dlls/mf/session.c +++ b/dlls/mf/session.c @@ -260,6 +260,8 @@ struct media_session /* Latest SetRate() arguments. */ BOOL thin; float rate; + + BOOL thin_committed; } presentation; struct list topologies; struct list commands; @@ -1541,7 +1543,7 @@ static void session_set_rate(struct media_session *session, BOOL thin, float rat if (SUCCEEDED(hr)) hr = IMFRateControl_GetRate(session->clock_rate_control, NULL, &clock_rate);
- if (SUCCEEDED(hr) && (rate != clock_rate) && SUCCEEDED(hr = session_subscribe_sources(session))) + if (SUCCEEDED(hr) && (rate != clock_rate || thin != session->presentation.thin_committed) && SUCCEEDED(hr = session_subscribe_sources(session))) { LIST_FOR_EACH_ENTRY(source, &session->presentation.sources, struct media_source, entry) { @@ -1554,6 +1556,7 @@ static void session_set_rate(struct media_session *session, BOOL thin, float rat { session->presentation.flags |= SESSION_FLAG_PENDING_RATE_CHANGE; session->presentation.rate = rate; + session->presentation.thin = thin; return; } } @@ -1578,6 +1581,8 @@ static void session_complete_rate_change(struct media_session *session) session->presentation.flags &= ~SESSION_FLAG_PENDING_RATE_CHANGE; session_set_presentation_clock(session);
+ session->presentation.thin_committed = session->presentation.thin; + hr = IMFRateControl_SetRate(session->clock_rate_control, FALSE, session->presentation.rate);
@@ -4744,7 +4749,7 @@ static HRESULT WINAPI session_rate_control_GetRate(IMFRateControl *iface, BOOL * TRACE("%p, %p, %p.\n", iface, thin, rate);
if (thin) - *thin = FALSE; + *thin = session->presentation.thin_committed;
return IMFRateControl_GetRate(session->clock_rate_control, NULL, rate); } diff --git a/dlls/mf/tests/mf.c b/dlls/mf/tests/mf.c index 9e7b5a5bdfe..da26fab33aa 100644 --- a/dlls/mf/tests/mf.c +++ b/dlls/mf/tests/mf.c @@ -7092,7 +7092,6 @@ static void test_media_session_thinning(void)
hr = IMFRateControl_GetRate(rate_control, &thin, &rate); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - todo_wine ok(thin == TRUE, "got thin %d\n", !!thin); ok(rate == 2.0, "got rate %f\n", rate);