<div dir="ltr">Because the only way I know to connect to "query-position" is to follow the example I found in ges-pipeline.c<div><br></div><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div><div><font face="monospace, monospace">chain->query_position_id =</font></div></div><div><div><font face="monospace, monospace">    g_signal_connect (ges_track_get_composition (track), "query-position",</font></div></div><div><div><font face="monospace, monospace">    G_CALLBACK (_query_position_cb), self);</font></div></div></blockquote><div><br><div>which led me to write the following:</div><div><br></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div><div><font face="monospace, monospace">//  It is necessary to connect the "query-position" signal to each track</font></div></div><div><div><font face="monospace, monospace">g_signal_connect(</font></div></div><div><div><font face="monospace, monospace">    videoTrack->priv->composition,                      // (GESTrack*)->priv->compositoin</font></div></div><div><div><font face="monospace, monospace">    "query-position",                                   </font></div></div><div><div><font face="monospace, monospace">    G_CALLBACK(CompositionJob::cbQueryPosition),        // my callback method</font></div></div><div><div><font face="monospace, monospace">    m_gstPipeline);                                     // GstPipeline*</font></div></div></blockquote><div><br></div><div>So basically I had to pull in the definition of _GESTrackPrivate to make that work.</div><div><br></div><div>If there is a better way to do it then please let me know.  (I am not usually a glib programmer so perhaps there is something I don't know about.)</div><div><br></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jul 3, 2018 at 4:37 PM, Thibault Saunier <span dir="ltr"><<a href="mailto:tsaunier@gnome.org" target="_blank">tsaunier@gnome.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Why do you think you need to access the composition?<br>
<div class="HOEnZb"><div class="h5">On Tue, Jul 3, 2018 at 7:22 PM David Ing <<a href="mailto:ding@panopto.com">ding@panopto.com</a>> wrote:<br>
><br>
> Thanks Thibault.<br>
><br>
> Unfortunetly I would need a method which is not exposed through the headers:  ges_track_get_composition  ... I will need to pull in code from the *.c files to implement the method on my end ... a dirty deed indeed.<br>
><br>
><br>
> On Mon, Jul 2, 2018 at 10:05 AM, Thibault Saunier <<a href="mailto:tsaunier@gnome.org">tsaunier@gnome.org</a>> wrote:<br>
>><br>
>> Hello David,<br>
>><br>
>> There should be no problem using a GstPipeline as long as you make<br>
>> sure to connect to the query-position signal of each track, I do not<br>
>> think there is any other quirk but I might be misremembering :-)<br>
>><br>
>> With the GESPipeline API I do not see a clean way to do what you want<br>
>> so I believe your best bet is to just use a GstPipeline.<br>
>><br>
>> Regards,<br>
>><br>
>> Thibault<br>
>> On Mon, Jul 2, 2018 at 12:41 PM David Ing <<a href="mailto:ding@panopto.com">ding@panopto.com</a>> wrote:<br>
>> ><br>
>> > I sent the original message on this thread Friday evening (US Pacific Time) ... chances are that most people never saw it, so I'm trying again:<br>
>> ><br>
>> > On a prior email thread, it was suggested that GESTimeline and GstPipeline are not 100% compatible with each other:  <a href="https://lists.freedesktop.org/archives/gstreamer-devel/2018-March/067349.html" rel="noreferrer" target="_blank">https://lists.freedesktop.org/<wbr>archives/gstreamer-devel/2018-<wbr>March/067349.html</a><br>
>> ><br>
>> > >     The GES timeline can indeed be used in a regular gstreamer pipeline, but there<br>
>> > >     are some undocumented quirks, amongst them the "query-position" signal emitted<br>
>> > >     by the NLEComposition wrapped by the GESTrack object, this is why using GESPipeline<br>
>> > >     is the recommended approach.<br>
>> ><br>
>> ><br>
>> > I am now in the position of being forced to use the GstPipeline with the GESTimeline (for reasons described in the first message of this thread).  I wonder if anybody can shed some light on the problems that I might see, and provide a hint about how I might overcome them.  I am working in C / C++ so I have a lot of options, but I would benefit from a little guidance.<br>
>> ><br>
>> ><br>
>> > On Fri, Jun 29, 2018 at 4:24 PM, David Ing <<a href="mailto:ding@panopto.com">ding@panopto.com</a>> wrote:<br>
>> >><br>
>> >> To partially answer my own question:  I think I need to use a GstPipeline rather than a GESPipeline (so I can have full control over the GstElements which do the encoding and writing to files).<br>
>> >><br>
>> >> On another email thread, it was suggested that GESTimeline and GstPipeline are not 100% compatible with each other:  <a href="https://lists.freedesktop.org/archives/gstreamer-devel/2018-March/067349.html" rel="noreferrer" target="_blank">https://lists.freedesktop.org/<wbr>archives/gstreamer-devel/2018-<wbr>March/067349.html</a><br>
>> >><br>
>> >> >     The GES timeline can indeed be used in a regular gstreamer pipeline, but there<br>
>> >> >     are some undocumented quirks, amongst them the "query-position" signal emitted<br>
>> >> >     by the NLEComposition wrapped by the GESTrack object, this is why using GESPipeline<br>
>> >> >     is the recommended approach.<br>
>> >><br>
>> >><br>
>> >> If I use GESTimeline with GstPipeline, what kinds of trouble can I expect?<br>
>> >><br>
>> >> On Fri, Jun 29, 2018 at 1:32 PM, David Ing <<a href="mailto:ding@panopto.com">ding@panopto.com</a>> wrote:<br>
>> >>><br>
>> >>> I am using GES 1.12 and I am trying to build a single GESPipeline with a somewhat complicated set of outputs.  I am coding in C++ (using gstreamer headers and libs).<br>
>> >>><br>
>> >>> Consider a representative example:<br>
>> >>><br>
>> >>> I have built a GESTimeline which sits inside a GESPipeline.<br>
>> >>><br>
>> >>> I want to generate multiple encodings.<br>
>> >>><br>
>> >>> Low quality video AVC (h.264)<br>
>> >>> Mid quality video AVC (h.264)<br>
>> >>> High quality video AVC (h.264)<br>
>> >>> High quality audio AAC<br>
>> >>><br>
>> >>> I want to shunt these encodings into multiple containers.<br>
>> >>><br>
>> >>> HLS folder (all encodings)<br>
>> >>> MP4 high quality (encodings 3 & 4)<br>
>> >>> MP4 mid quality (encodings 2 & 4)<br>
>> >>><br>
>> >>> Presumably, the most efficient approach (computationally) is to use a single pipeline for all of this.  Computational efficiency is of paramount importance to me.<br>
>> >>><br>
>> >>> My question is:  What approach should I take?<br>
>> >>><br>
>> >>> One approach is to manually construct the GstElements I need for encoding and muxing, and connect them together in the appropriate way within the GESPipeline (I guess they would source directly from the sinks on the GESTimeline).  Is that the correct approach?  Or is there another approach that will work better?<br>
>> >>><br>
>> >>> Guidance is appreciated.<br>
>> >><br>
>> >><br>
>> ><br>
>> > ______________________________<wbr>_________________<br>
>> > gstreamer-devel mailing list<br>
>> > <a href="mailto:gstreamer-devel@lists.freedesktop.org">gstreamer-devel@lists.<wbr>freedesktop.org</a><br>
>> > <a href="https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel" rel="noreferrer" target="_blank">https://lists.freedesktop.org/<wbr>mailman/listinfo/gstreamer-<wbr>devel</a><br>
>> ______________________________<wbr>_________________<br>
>> gstreamer-devel mailing list<br>
>> <a href="mailto:gstreamer-devel@lists.freedesktop.org">gstreamer-devel@lists.<wbr>freedesktop.org</a><br>
>> <a href="https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel" rel="noreferrer" target="_blank">https://lists.freedesktop.org/<wbr>mailman/listinfo/gstreamer-<wbr>devel</a><br>
><br>
><br>
> ______________________________<wbr>_________________<br>
> gstreamer-devel mailing list<br>
> <a href="mailto:gstreamer-devel@lists.freedesktop.org">gstreamer-devel@lists.<wbr>freedesktop.org</a><br>
> <a href="https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel" rel="noreferrer" target="_blank">https://lists.freedesktop.org/<wbr>mailman/listinfo/gstreamer-<wbr>devel</a><br>
______________________________<wbr>_________________<br>
gstreamer-devel mailing list<br>
<a href="mailto:gstreamer-devel@lists.freedesktop.org">gstreamer-devel@lists.<wbr>freedesktop.org</a><br>
<a href="https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel" rel="noreferrer" target="_blank">https://lists.freedesktop.org/<wbr>mailman/listinfo/gstreamer-<wbr>devel</a><br>
</div></div></blockquote></div><br></div>