Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-cw
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-cw
Commits
1dc4c94e
Commit
1dc4c94e
authored
Jul 05, 2022
by
Rémi Bernon
Committed by
Alexandre Julliard
Jul 27, 2022
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
mf: Check whether node is already in the topology before cloning.
parent
493d60fb
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
20 additions
and
20 deletions
+20
-20
topology_loader.c
dlls/mf/topology_loader.c
+20
-20
No files found.
dlls/mf/topology_loader.c
View file @
1dc4c94e
...
...
@@ -109,33 +109,32 @@ static IMFTopologyNode *topology_loader_get_node_for_marker(struct topoloader_co
}
static
HRESULT
topology_loader_clone_node
(
struct
topoloader_context
*
context
,
IMFTopologyNode
*
node
,
IMFTopologyNode
**
ret
,
unsigned
int
marker
)
IMFTopologyNode
**
clone
,
unsigned
int
marker
)
{
IMFTopologyNode
*
cloned_node
;
MF_TOPOLOGY_TYPE
node_type
;
HRESULT
hr
;
TOPOID
id
;
if
(
ret
)
*
ret
=
NULL
;
if
(
FAILED
(
hr
=
IMFTopologyNode_GetTopoNodeID
(
node
,
&
id
)))
return
hr
;
if
(
SUCCEEDED
(
hr
=
IMFTopology_GetNodeByID
(
context
->
output_topology
,
id
,
clone
)))
return
hr
;
IMFTopologyNode_GetNodeType
(
node
,
&
node_type
);
if
(
FAILED
(
hr
=
MFCreateTopologyNode
(
node_type
,
&
cloned_node
)))
if
(
FAILED
(
hr
=
MFCreateTopologyNode
(
node_type
,
clone
)))
return
hr
;
if
(
SUCCEEDED
(
hr
=
IMFTopologyNode_CloneFrom
(
cloned_nod
e
,
node
)))
hr
=
IMFTopologyNode_SetUINT32
(
cloned_nod
e
,
&
context
->
key
,
marker
);
if
(
SUCCEEDED
(
hr
=
IMFTopologyNode_CloneFrom
(
*
clon
e
,
node
)))
hr
=
IMFTopologyNode_SetUINT32
(
*
clon
e
,
&
context
->
key
,
marker
);
if
(
SUCCEEDED
(
hr
))
hr
=
IMFTopology_AddNode
(
context
->
output_topology
,
cloned_nod
e
);
hr
=
IMFTopology_AddNode
(
context
->
output_topology
,
*
clon
e
);
if
(
SUCCEEDED
(
hr
)
&&
ret
)
if
(
FAILED
(
hr
)
)
{
*
ret
=
cloned_node
;
IMFTopologyNode_AddRef
(
*
ret
)
;
IMFTopologyNode_Release
(
*
clone
)
;
*
clone
=
NULL
;
}
IMFTopologyNode_Release
(
cloned_node
);
return
hr
;
}
...
...
@@ -470,12 +469,9 @@ static HRESULT topology_loader_resolve_branch(struct topoloader_context *context
MF_TOPOLOGY_TYPE
u_type
,
d_type
;
IMFTopologyNode
*
node
;
HRESULT
hr
;
TOPOID
id
;
/* Downstream node might have already been cloned. */
IMFTopologyNode_GetTopoNodeID
(
downstream_node
,
&
id
);
if
(
FAILED
(
IMFTopology_GetNodeByID
(
context
->
output_topology
,
id
,
&
node
)))
topology_loader_clone_node
(
context
,
downstream_node
,
&
node
,
context
->
marker
+
1
);
if
(
FAILED
(
hr
=
topology_loader_clone_node
(
context
,
downstream_node
,
&
node
,
context
->
marker
+
1
)))
return
hr
;
IMFTopologyNode_GetNodeType
(
upstream_node
,
&
u_type
);
IMFTopologyNode_GetNodeType
(
downstream_node
,
&
d_type
);
...
...
@@ -763,8 +759,12 @@ static HRESULT WINAPI topology_loader_Load(IMFTopoLoader *iface, IMFTopology *in
if
(
node_type
==
MF_TOPOLOGY_SOURCESTREAM_NODE
)
{
if
(
FAILED
(
hr
=
topology_loader_clone_node
(
&
context
,
node
,
NULL
,
0
)))
IMFTopologyNode
*
clone
;
if
(
FAILED
(
hr
=
topology_loader_clone_node
(
&
context
,
node
,
&
clone
,
0
)))
WARN
(
"Failed to clone source node, hr %#lx.
\n
"
,
hr
);
else
IMFTopologyNode_Release
(
clone
);
}
IMFTopologyNode_Release
(
node
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment