Nikolay Sivov : mfreadwrite: Pack stream selection state as flags.

Alexandre Julliard julliard at winehq.org
Tue Mar 31 16:44:24 CDT 2020


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

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Tue Mar 31 15:46:36 2020 +0300

mfreadwrite: Pack stream selection state as flags.

Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/mfreadwrite/reader.c | 24 ++++++++++++++++--------
 1 file changed, 16 insertions(+), 8 deletions(-)

diff --git a/dlls/mfreadwrite/reader.c b/dlls/mfreadwrite/reader.c
index 2fca4c2e1e..e14538c313 100644
--- a/dlls/mfreadwrite/reader.c
+++ b/dlls/mfreadwrite/reader.c
@@ -99,6 +99,8 @@ enum media_source_state
 enum media_stream_flags
 {
     STREAM_FLAG_SAMPLE_REQUESTED = 0x1,
+    STREAM_FLAG_SELECTED = 0x2,
+    STREAM_FLAG_PRESENTED = 0x4,
 };
 
 struct media_stream
@@ -109,9 +111,7 @@ struct media_stream
     DWORD id;
     unsigned int index;
     enum media_stream_state state;
-    BOOL selected;
-    BOOL presented;
-    DWORD flags;
+    unsigned int flags;
     unsigned int requests;
 };
 
@@ -841,18 +841,23 @@ static HRESULT source_reader_get_stream_selection(const struct source_reader *re
 
 static HRESULT source_reader_start_source(struct source_reader *reader)
 {
-    BOOL selection_changed = FALSE;
+    BOOL selected, selection_changed = FALSE;
     PROPVARIANT position;
     HRESULT hr = S_OK;
-    DWORD i;
+    unsigned int i;
 
     if (reader->source_state == SOURCE_STATE_STARTED)
     {
         for (i = 0; i < reader->stream_count; ++i)
         {
-            if (FAILED(hr = source_reader_get_stream_selection(reader, i, &reader->streams[i].selected)))
+            if (FAILED(hr = source_reader_get_stream_selection(reader, i, &selected)))
                 return hr;
-            selection_changed = reader->streams[i].selected ^ reader->streams[i].presented;
+            if (selected)
+                reader->streams[i].flags |= STREAM_FLAG_SELECTED;
+            else
+                reader->streams[i].flags &= ~STREAM_FLAG_SELECTED;
+            selection_changed = !!(reader->streams[i].flags & STREAM_FLAG_SELECTED) ^
+                    !!(reader->streams[i].flags & STREAM_FLAG_PRESENTED);
             if (selection_changed)
                 break;
         }
@@ -867,7 +872,10 @@ static HRESULT source_reader_start_source(struct source_reader *reader)
         if (SUCCEEDED(hr = IMFMediaSource_Start(reader->source, reader->descriptor, &GUID_NULL, &position)))
         {
             for (i = 0; i < reader->stream_count; ++i)
-                reader->streams[i].presented = reader->streams[i].selected;
+            {
+                if (reader->streams[i].flags & STREAM_FLAG_SELECTED)
+                    reader->streams[i].flags |= STREAM_FLAG_PRESENTED;
+            }
         }
     }
 




More information about the wine-cvs mailing list