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