<div dir="ltr"><div>According to the documentation, I am supposed to be able to set the 'zorder' property of a GESVideoSource:</div><div><br></div><a href="https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-editing-services/html/GESVideoSource.html">https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-editing-services/html/GESVideoSource.html</a><br><div><br></div><div>Well I am able to set some of its other properties (posx, posy, width, height), but I get a WARN message when I attempt to set 'zorder' ... it tells me that this proprety does not exist (so I cannot set it).</div><div><br></div><div>0:00:23.128239884  3376 000001FAD2B640F0 WARN  ges ges-timeline-element.c:1379:ges_timeline_element_set_child_property:<GESVideoUriSource@000001FAD3111460> <b>The zorder property doesn't exist</b><br></div><div><br></div><div>I am trying to render a small video in the corner of a larger video (where the smaller video is in front of the larger one).  Presumably I need 'zorder' for that to work, right?  Or is there some other way that I can do it?</div><div><br></div><div>Either the documentation is wrong about zorder, or I am doing something wrong.  Here is what I am doing:</div><div><br></div><div>

<span style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">//----------------------------</span>

<br></div><div>// My code is below.</div><div>//----------------------------</div><div><div>GList* videoElements = ges_clip_find_track_elements((GESClip*)gesUriClip, gesVideoTrack,</div><div>        GESTrackType::GES_TRACK_TYPE_VIDEO, G_TYPE_NONE);</div><div>GESVideoSource* videoSource = (GESVideoSource*)videoElements->data;</div><div>GESTrackElement* trackElement = reinterpret_cast<GESTrackElement*>(videoSource);</div><div>setInt(trackElement, "posx", destPosition.x.value, "Unable to set %s property of video source.");</div><div>setInt(trackElement, "posy", destPosition.y.value, "Unable to set %s property of video source.");</div><div>setInt(trackElement, "width", destPosition.width.value, "Unable to set %s property of video source.");</div><div>setInt(trackElement, "height", destPosition.height.value, "Unable to set %s property of video source.");</div><div><b>// FIXME ... why doesn't this work?</b></div><div>setUint(trackElement, "zorder", (uint32_t)(iLayer), "Unable to set %s property of video source.");</div><div><br></div><div>void setInt(GESTrackElement* trackElement, const char* name, int32_t value, const char* errorMessage)</div><div>{</div><div>    GValue val = G_VALUE_INIT;</div><div>    g_value_init(&val, G_TYPE_INT);</div><div>    g_value_set_int(&val, value);</div><div>    if (!ges_track_element_set_child_property(trackElement, name, &val))</div><div>        throw std::runtime_error(formstr(errorMessage, name));</div><div>}</div><div>void setUint(GESTrackElement* trackElement, const char* name, uint32_t value, const char* errorMessage)</div><div>{</div><div>    GValue val = G_VALUE_INIT;</div><div>    g_value_init(&val, G_TYPE_UINT);</div><div>    g_value_set_uint(&val, value);</div><div>    if (!ges_track_element_set_child_property(trackElement, name, &val))</div><div>        throw std::runtime_error(formstr(errorMessage, name));</div><div>}</div></div></div>