<html>
  <head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <div class="moz-cite-prefix">On 01/29/2015 12:52 PM, Ben Bridgwater
      wrote:<br>
    </div>
    <blockquote
cite="mid:CABH16+my3YLH=5wBkt6Be2K_YGtUTofu9sYqXLYOBivUqcs-5A@mail.gmail.com"
      type="cite">
      <div dir="ltr">
        <div>Thanks, Thiago.</div>
        <div><br>
        </div>
        <div>Yes, in my application (because of the out-of-order buffer
          processing) I do need to explicitly associate buffers with
          caps rather than just rely on the caps event and buffer
          ordering.</div>
      </div>
    </blockquote>
    What is your application exactly? Are you using appsink, fakesink or
    a custom sink? Or is this another type of element?<br>
    <blockquote
cite="mid:CABH16+my3YLH=5wBkt6Be2K_YGtUTofu9sYqXLYOBivUqcs-5A@mail.gmail.com"
      type="cite">
      <div dir="ltr">
        <div><br>
        </div>
        <div>I assume gstreamer pipeline elements can't actually pass
          GstSamples rather than GstBuffers - this is just a convenience
          class for a sink to associate buffers/caps/segments rather
          than a type that would be passed from element to element?</div>
      </div>
    </blockquote>
    Yes, only buffers are passed through pads.<br>
    <blockquote
cite="mid:CABH16+my3YLH=5wBkt6Be2K_YGtUTofu9sYqXLYOBivUqcs-5A@mail.gmail.com"
      type="cite">
      <div dir="ltr">
        <div><br>
        </div>
        <div>It seems another option for me might be to use GstBuffer
          metadata to add the tagging/caps info I need. Would I be right
          in thinking that an element could receive a GstBuffer, add
          some metadata, then pass the GstBuffer with added metadata
          down the pipleline? Would an existing element/plugin care if
          it received a buffer with added metadata that it wasn't
          expecting? Presumably adding metadata involves an additional
          malloc?</div>
        <div><br>
        </div>
        <div>Is there any way to add any metadata (maybe just an integer
          tag) to a GstBuffer without doing an additional alloc? Any
          GstBuffer members than it would be harmless to repurpose as a
          tag, perhaps?</div>
      </div>
    </blockquote>
    There is GstMeta that is a flexible metadata system that can be
    associated with buffers. You need to make sure that other elements
    in the pipeline preserve the meta when passing buffers around
    (specially the ones that create new buffers for outputing, like
    decoders). There are also some flags in GstBuffer itself that might
    be useful for you.<br>
    <br>
    In any case, associating a Caps to a Buffer is a bad idea as it is
    already implicitly associated by the previous caps event.<br>
    <br>
    Perhaps you could provide more details on your use case so we can
    provide better guidance.<br>
    <blockquote
cite="mid:CABH16+my3YLH=5wBkt6Be2K_YGtUTofu9sYqXLYOBivUqcs-5A@mail.gmail.com"
      type="cite">
      <div dir="ltr">
        <div><br>
        </div>
        <div>Thanks,</div>
        <div>Ben</div>
      </div>
      <div class="gmail_extra"><br>
        <div class="gmail_quote">On Thu, Jan 29, 2015 at 10:05 AM,
          Thiago Santos <span dir="ltr"><<a moz-do-not-send="true"
              href="mailto:thiagoss@osg.samsung.com" target="_blank">thiagoss@osg.samsung.com</a>></span>
          wrote:<br>
          <blockquote class="gmail_quote" style="margin:0 0 0
            .8ex;border-left:1px #ccc solid;padding-left:1ex">
            <div text="#000000" bgcolor="#FFFFFF">
              <div>
                <div class="h5">
                  <div>On 01/29/2015 11:53 AM, Ben Bridgwater wrote:<br>
                  </div>
                  <blockquote type="cite">
                    <div dir="ltr">
                      <div>Hi,</div>
                      <div>I'm new to gstreamer development - converting
                        an existing application (interactive
                        spectrogram) from using my own pipeline to use
                        gstreamer instead.</div>
                      <div><br>
                      </div>
                      <div>I gather that in gstreamer 0.1 the caps of a
                        pad sourcing a buffer were also recorded in the
                        buffer itself, but since 1.0 that is no longer
                        the case, and it's up to elements to tracks caps
                        via caps events instead...</div>
                      <div><br>
                      </div>
                      <div>My question is what are the options and best
                        practices with gstreamer 1.x for tracking buffer
                        caps in the case where caps are changing rapidly
                        and buffers may be processed out of order? In my
                        case this requirement comes fromĀ a downstream
                        display buffer where paint events may request
                        arbitrary parts of the display to be updated -
                        corresponding to arbitrary sequences of buffers
                        needing to be processed, and the need to know
                        what the caps (data format) are for each buffer.</div>
                    </div>
                  </blockquote>
                  <br>
                </div>
              </div>
              The GstCaps are not stored on buffers anymore, they are
              only present on GstPads. Instead of calling
              gst_pad_set_caps or pushing a buffer with a caps set, now
              elements should push a caps event before the buffers and
              all buffers following a caps event should have the caps of
              that event. You can use GstPad's API to get the current
              negotiated caps on a pad and all buffers flowing on that
              pad should have that caps until a new event arrives. Check
              <a moz-do-not-send="true"
href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#gst-pad-get-current-caps"
                target="_blank">http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#gst-pad-get-current-caps</a><br>
              <br>
              So, to keep track of buffers and caps, you need to look
              for the caps event. For example, suppose you receive the
              following events and buffers:<br>
              <br>
              CAPS_1 BUF_A BUF_B BUF_C CAPS_2 BUF_D BUF_E<br>
              <br>
              Buffers A B and C will be on format defined by CAPS_1,
              while buffers D and E will be on format CAPS_2.<br>
              <br>
              I hope it makes it clear. If for some reason you need to
              store buffer + caps together you can use the GstSample : <a
                moz-do-not-send="true"
href="https://developer.gnome.org/gstreamer/stable/gstreamer-GstSample.html"
                target="_blank">https://developer.gnome.org/gstreamer/stable/gstreamer-GstSample.html</a><br>
              <br>
              <blockquote type="cite"><span>
                  <div dir="ltr">
                    <div><br>
                    </div>
                    <div>Thanks for any pointers and advice!</div>
                    <div><br>
                    </div>
                    <div>Ben</div>
                    <div><br>
                    </div>
                  </div>
                  <br>
                  <fieldset></fieldset>
                  <br>
                </span>
                <pre>_______________________________________________
gstreamer-devel mailing list
<a moz-do-not-send="true" href="mailto:gstreamer-devel@lists.freedesktop.org" target="_blank">gstreamer-devel@lists.freedesktop.org</a>
<a moz-do-not-send="true" href="http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel" target="_blank">http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel</a><span class="HOEnZb"><font color="#888888">
</font></span></pre>
                <span class="HOEnZb"><font color="#888888"> </font></span></blockquote>
              <span class="HOEnZb"><font color="#888888"> <br>
                  <br>
                  <pre cols="72">-- 
Thiago Sousa Santos
Senior Multimedia Engineer, Open Source Group
Samsung Research America - Silicon Valley</pre>
                </font></span></div>
            <br>
            _______________________________________________<br>
            gstreamer-devel mailing list<br>
            <a moz-do-not-send="true"
              href="mailto:gstreamer-devel@lists.freedesktop.org">gstreamer-devel@lists.freedesktop.org</a><br>
            <a moz-do-not-send="true"
              href="http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel"
              target="_blank">http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel</a><br>
            <br>
          </blockquote>
        </div>
        <br>
      </div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
gstreamer-devel mailing list
<a class="moz-txt-link-abbreviated" href="mailto:gstreamer-devel@lists.freedesktop.org">gstreamer-devel@lists.freedesktop.org</a>
<a class="moz-txt-link-freetext" href="http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel">http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel</a>
</pre>
    </blockquote>
    <br>
    <br>
    <pre class="moz-signature" cols="72">-- 
Thiago Sousa Santos
Senior Multimedia Engineer, Open Source Group
Samsung Research America - Silicon Valley</pre>
  </body>
</html>