<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <p>Hi,</p>
    <p>I completely agree with Nicolas on the recommendation to use
      de-coupled pipelines for separating recording and display.<br>
      I have also worked on a similar project and the clock/time
      handling is a nightmare when all is in the same pipeline.</p>
    <p>However, instead of appsink/appsrc we have opted for using the
      RidgeRun elements interpipesrc/sink, which will take care of some
      things for you automatically (which might be desired or not ;P ).<br>
      At the time we had investigated several different decoupling
      elements: intervideosrc/sink, proxysrc/sink, etc.<br>
      The one for RidgeRun was what fitted our requirements best.<br>
      But it isn't void of bugs either, we ended up in some corners
      cases some times.</p>
    <p><br>
    </p>
    <p>Best Regards</p>
    <p>Marianna<br>
    </p>
    <div class="moz-cite-prefix">On 17.08.2022 20.16,
      <a class="moz-txt-link-abbreviated" href="mailto:gstreamer-devel-request@lists.freedesktop.org">gstreamer-devel-request@lists.freedesktop.org</a> wrote:<br>
    </div>
    <blockquote type="cite"
cite="mid:mailman.2384.1660760167.30246.gstreamer-devel@lists.freedesktop.org">
      <pre class="moz-quote-pre" wrap="">On 17/08/2022 15:34, Nicolas Dufresne via gstreamer-devel wrote:
</pre>
      <blockquote type="cite" style="color: #007cff;">
        <pre class="moz-quote-pre" wrap="">Hi Terry,

Le mercredi 17 ao?t 2022 ? 14:07 +0100, Terry Barnaby via gstreamer-devel a
?crit?:
</pre>
        <blockquote type="cite" style="color: #007cff;">
          <pre class="moz-quote-pre" wrap="">videotestsrc pattern=smpte !
video/x-raw,width=640,height=480,framerate=5/1 ! c.sink_0
appsrc name="appsrc" ! imagefreeze ! videoconvert ! c.sink_1
t. ! queue ! glimagesink name=videoSink
t. ! queue ! fakesink enable-last-sample=true name=picturestream"
t. ! queue ! beamvalve name=recordValve drop=true ! vaapih264enc
name=recordEncoder ! h264parse ! mp4mux fragment-duration=10 ! filesink
append=true location="video.mp4" async=false

This pipeline is created in software and the recordValve is set to drop
or not the video frames to disable/enable recording to the file.
</pre>
        </blockquote>
        <pre class="moz-quote-pre" wrap="">its been my recommendation for a while now, and have worked for my projects
also. For recording purposed, I keep recommending using a separate "offline"
pipeline. End a branch of your live pipeline with appsink, and create the
offline pipeline starting with the appsrc. You can then pass the samples from
you application, which gives you the opportunity to redo or offset the timing if
needed. It also makes the closing of the recording way simpler.

regards,
Nicolas

p.s. don't forget to discard the buffer from you appsink(s) while not recording
</pre>
      </blockquote>
      <pre class="moz-quote-pre" wrap="">Thanks for the reply.

I will have a go at that.

I am trying to keep everything as efficient as possible. We have a 
relatively low resource embedded system, want to use low power, keep CPU 
resources and memory bandwidth available for other things etc. We have 
tuned the pipeline with experimentation as its difficult to know which 
is the most efficient way with various hardware blocks, how well the 
software works with them (kernel and gstreamer), where the memory to 
memory transfers are and how this works with the various hardware blocks 
etc.

I will see how much the appsink/appsrc affects things, but I like the 
idea of the separate pipelines as I am seeing lots of random (well it 
appears random!) issues when I try things with one pipeline.

Cheers

Terry</pre>
    </blockquote>
    <pre class="moz-signature" cols="72">-- 
Best regards / Med venlig hilsen
“Marianna Smidth Buschle”</pre>
  </body>
</html>