Giovanni Mascellani : mf/session: Fix computing fastest and slowest presentation rates.
Module: wine Branch: master Commit: bcd2b99d959f4a630cac9d3167a6785f2e039cc0 URL: https://source.winehq.org/git/wine.git/?a=commit;h=bcd2b99d959f4a630cac9d316... Author: Giovanni Mascellani <gmascellani(a)codeweavers.com> Date: Tue Jun 8 13:30:53 2021 +0300 mf/session: Fix computing fastest and slowest presentation rates. Signed-off-by: Giovanni Mascellani <gmascellani(a)codeweavers.com> Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/mf/session.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/dlls/mf/session.c b/dlls/mf/session.c index 41caf02d059..9f233295773 100644 --- a/dlls/mf/session.c +++ b/dlls/mf/session.c @@ -18,6 +18,7 @@ #include <stdarg.h> #include <math.h> +#include <float.h> #define COBJMACROS @@ -3536,8 +3537,9 @@ static HRESULT session_get_presentation_rate(struct media_session *session, MFRA struct media_source *source; struct media_sink *sink; HRESULT hr = E_POINTER; + float rate; - *result = 0.0f; + rate = fastest ? FLT_MAX : 0.0f; EnterCriticalSection(&session->cs); @@ -3545,7 +3547,7 @@ static HRESULT session_get_presentation_rate(struct media_session *session, MFRA { LIST_FOR_EACH_ENTRY(source, &session->presentation.sources, struct media_source, entry) { - if (FAILED(hr = session_presentation_object_get_rate((IUnknown *)source->source, direction, thin, fastest, result))) + if (FAILED(hr = session_presentation_object_get_rate((IUnknown *)source->source, direction, thin, fastest, &rate))) break; } @@ -3553,7 +3555,7 @@ static HRESULT session_get_presentation_rate(struct media_session *session, MFRA { LIST_FOR_EACH_ENTRY(sink, &session->presentation.sinks, struct media_sink, entry) { - if (FAILED(hr = session_presentation_object_get_rate((IUnknown *)sink->sink, direction, thin, fastest, result))) + if (FAILED(hr = session_presentation_object_get_rate((IUnknown *)sink->sink, direction, thin, fastest, &rate))) break; } } @@ -3561,6 +3563,9 @@ static HRESULT session_get_presentation_rate(struct media_session *session, MFRA LeaveCriticalSection(&session->cs); + if (SUCCEEDED(hr)) + *result = direction == MFRATE_FORWARD ? rate : -rate; + return hr; }
participants (1)
-
Alexandre Julliard