Giovanni Mascellani : mf/session: Fix computing fastest and slowest presentation rates.

Alexandre Julliard julliard at winehq.org
Tue Jun 8 16:34:26 CDT 2021


Module: wine
Branch: master
Commit: bcd2b99d959f4a630cac9d3167a6785f2e039cc0
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=bcd2b99d959f4a630cac9d3167a6785f2e039cc0

Author: Giovanni Mascellani <gmascellani at 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 at codeweavers.com>
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at 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;
 }
 




More information about the wine-cvs mailing list