Nikolay Sivov : mfplay: Create video output branches.

Alexandre Julliard julliard at winehq.org
Wed Apr 21 15:57:54 CDT 2021


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

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Wed Apr 21 12:29:43 2021 +0300

mfplay: Create video output branches.

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

---

 dlls/mfplay/player.c | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/dlls/mfplay/player.c b/dlls/mfplay/player.c
index 87ddf613288..6a6f3b6cddc 100644
--- a/dlls/mfplay/player.c
+++ b/dlls/mfplay/player.c
@@ -1043,29 +1043,23 @@ static HRESULT media_item_create_sink_node(IUnknown *sink, IMFTopologyNode **nod
 static HRESULT media_item_create_topology(struct media_player *player, struct media_item *item, IMFTopology **out)
 {
     IMFTopologyNode *src_node, *sink_node;
+    BOOL selected, video_added = FALSE;
     IMFStreamDescriptor *sd;
     IMFTopology *topology;
     unsigned int idx;
     IUnknown *sink;
-    BOOL selected;
     HRESULT hr;
     GUID major;
 
     if (FAILED(hr = MFCreateTopology(&topology)))
         return hr;
 
-    /* Use first stream if none selected. */
-    if (player->output_window)
-    {
-        FIXME("Video streams are not handled.\n");
-    }
-
     /* Set up branches for all selected streams. */
 
     idx = 0;
     while (SUCCEEDED(IMFPresentationDescriptor_GetStreamDescriptorByIndex(item->pd, idx++, &selected, &sd)))
     {
-        if (!selected)
+        if (!selected || FAILED(media_item_get_stream_type(sd, &major)))
         {
             IMFStreamDescriptor_Release(sd);
             continue;
@@ -1077,11 +1071,17 @@ static HRESULT media_item_create_topology(struct media_player *player, struct me
         {
             /* User sink is attached as-is. */
         }
-        else if (SUCCEEDED(media_item_get_stream_type(sd, &major)) && IsEqualGUID(&major, &MFMediaType_Audio))
+        else if (IsEqualGUID(&major, &MFMediaType_Audio))
         {
             if (FAILED(hr = MFCreateAudioRendererActivate((IMFActivate **)&sink)))
                 WARN("Failed to create SAR activation object, hr %#x.\n", hr);
         }
+        else if (IsEqualGUID(&major, &MFMediaType_Video) && player->output_window && !video_added)
+        {
+            if (FAILED(hr = MFCreateVideoRendererActivate(player->output_window, (IMFActivate **)&sink)))
+                WARN("Failed to create EVR activation object, hr %#x.\n", hr);
+            video_added = SUCCEEDED(hr);
+        }
 
         if (sink)
         {




More information about the wine-cvs mailing list