<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <div class="moz-cite-prefix">On 08/09/2012 10:23 PM, Matt Pekar
      wrote:<br>
    </div>
    <blockquote
cite="mid:CANw9OncwkX_Aj=C3XY3so5trCFg3q0Lzo+zJEnFLgZVrOsQrDg@mail.gmail.com"
      type="cite">Something relatively simple that may help is a
      "buffers_received" integer property that keeps track of how many
      buffers have passed through an element.  With that users could see
      which element the stream was halting on.  It could also help
      detect balance issues (say on a tee where one sink is too slow),
      or to see where frames are being dropped.<br>
    </blockquote>
    <br>
    For that you can use gst-tracelib.<br>
    <meta http-equiv="content-type" content="text/html;
      charset=ISO-8859-1">
    <a href="http://cgit.freedesktop.org/%7Eensonic/gst-tracelib/">http://cgit.freedesktop.org/~ensonic/gst-tracelib/</a><br>
    <br>
    Stefan<br>
    <br>
    <blockquote
cite="mid:CANw9OncwkX_Aj=C3XY3so5trCFg3q0Lzo+zJEnFLgZVrOsQrDg@mail.gmail.com"
      type="cite">
      <br>
      <div class="gmail_quote">On Thu, Aug 9, 2012 at 3:02 PM, Stefan
        Sauer <span dir="ltr"><<a moz-do-not-send="true"
            href="mailto:ensonic@hora-obscura.de" target="_blank">ensonic@hora-obscura.de</a>></span>
        wrote:<br>
        <blockquote class="gmail_quote" style="margin:0 0 0
          .8ex;border-left:1px #ccc solid;padding-left:1ex">
          <div bgcolor="#FFFFFF" text="#000000">
            <div class="im">
              <div>On 08/09/2012 08:00 PM, Matt Pekar wrote:<br>
              </div>
              <blockquote type="cite">I run this in response to user
                input:
                <div><br>
                </div>
                <div>
                  <div>void display_pipeline_in_chrome(GstElement
                    *pipeline) {</div>
                  <div><span style="white-space:pre-wrap"> </span>const
                    char* temp_filename = "gst_bin_graph_tmp";</div>
                  <div><br>
                  </div>
                  <div><span style="white-space:pre-wrap"> </span>char
                    dot_command[1024];</div>
                  <div><span style="white-space:pre-wrap"> </span>char
                    chrome_command[1024];</div>
                  <div><br>
                  </div>
                  <div><span style="white-space:pre-wrap"> </span>const
                    char* DIR = getenv("GST_DEBUG_DUMP_DOT_DIR");</div>
                  <div><span style="white-space:pre-wrap"> </span>//GstDebugGraphDetails

                    output_flags =
                    GstDebugGraphDetails(GST_DEBUG_GRAPH_SHOW_MEDIA_TYPE
                    | GST_DEBUG_GRAPH_SHOW_STATES |
                    GST_DEBUG_GRAPH_SHOW_NON_DEFAULT_PARAMS);</div>
                  <div><span style="white-space:pre-wrap"> </span>GstDebugGraphDetails

                    output_flags =
                    GstDebugGraphDetails(GST_DEBUG_GRAPH_SHOW_ALL);</div>
                  <div><span style="white-space:pre-wrap"> </span>GST_DEBUG_BIN_TO_DOT_FILE(GST_BIN(pipeline),

                    output_flags, temp_filename);</div>
                  <div><br>
                  </div>
                  <div><span style="white-space:pre-wrap"> </span>snprintf(dot_command,

                    sizeof(dot_command), "dot -Tpng %s/%s.dot -o
                    %s/%s.png", DIR, temp_filename, DIR, temp_filename);</div>
                  <div> <span style="white-space:pre-wrap"> </span>snprintf(chrome_command,

                    sizeof(chrome_command), "google-chrome %s/%s.png",
                    DIR, temp_filename);</div>
                </div>
              </blockquote>
            </div>
            FYI: you can also use xdg-open to open it with a suitable
            viewer. Also using svg is sometimes better when zooming.
            <div class="im"><br>
              <blockquote type="cite">
                <div>
                  <div><br>
                  </div>
                  <div><span style="white-space:pre-wrap"> </span>system(dot_command);</div>
                  <div><span style="white-space:pre-wrap"> </span>system(chrome_command);</div>
                  <div>}</div>
                  <div><br>
                  </div>
                  <div>It displays the whole pipeline as an image in
                    Chrome, using the Gstreamer debug output from
                    graphviz.</div>
                </div>
              </blockquote>
              <br>
            </div>
            Thing worth looking for in the graph are:<br>
            * disconnected elements (obvious)<br>
            * pads with uppercase 'F' (= flushing) (missing flush stop
            or activation)<br>
            * not negotiated elements (some elements have a long list of
            caps, instead simple caps)<br>
            <br>
            If there are good ideas how, the graphs can be improved to
            highlight more issues, let us know.<span class="HOEnZb"><font
                color="#888888"><br>
                <br>
                Stefan</font></span>
            <div>
              <div class="h5"><br>
                <blockquote type="cite">
                  <div>
                    <div><br>
                    </div>
                    <div>However, that usually isn't enough to tell
                      what's wrong.  For example, I recently had a
                      pipeline along these lines:</div>
                    <div><br>
                    </div>
                    <div>appsrc ! ffmpegcolorspace ! theoraenc !
                      rtptheorapay ! udpsink</div>
                    <div><br>
                    </div>
                    <div>This pipeline looked fine in the graph output,
                      so to debug it I used the GST_DEBUG environment
                      variable on each element in the pipeline, starting
                      at the top:</div>
                    <div><br>
                    </div>
                    <div>GST_DEBUG=appsrc:5</div>
                    <div>--kill and restart</div>
                    <div>GST_DEBUG=ffmpegcolorspace:5</div>
                    <div>--kill and restart</div>
                    <div>GST_DEBUG=theoraenc:5</div>
                    <div>--ahhh theoraenc is dropping buffers...</div>
                    <div><br>
                    </div>
                    <div>Doing this one step at a time let me discover
                      which element was blocking.  It turns out the
                      problem was I wasn't timestamping the appsrc
                      buffers, and therefore theoraenc was just dropping
                      them.</div>
                    <br>
                    <div class="gmail_quote">On Thu, Aug 9, 2012 at
                      12:38 PM, Eric Montellese <span dir="ltr"><<a
                          moz-do-not-send="true"
                          href="mailto:eric.montellese@videon-central.com"
                          target="_blank">eric.montellese@videon-central.com</a>></span>
                      wrote:<br>
                      <blockquote class="gmail_quote" style="margin:0 0
                        0 .8ex;border-left:1px #ccc
                        solid;padding-left:1ex">Folks, in development
                        I've run into various malformed or buggy
                        pipelines that give this output:
                        <div><br>
                        </div>
                        <div>
                          <div>gst-launch  launch ! a ! pipeline</div>
                          <div>Setting pipeline to PAUSED ...</div>
                          <div>Pipeline is PREROLLING ...</div>
                        </div>
                        <div><br>
                        </div>
                        <div>Generally I have debugged these issues
                          through a mixture of brute force and intuition
                          (looking for common sorts of problems, etc).</div>
                        <div><br>
                        </div>
                        <div>But perhaps there is a better way to
                          determine which element has held up the
                          pipeline?  Some swanky debug command I'm
                          totally unaware of that shows the buffers
                          in-flight perhaps?</div>
                        <div><br>
                        </div>
                        <div>Any advice?</div>
                        <div><br>
                        </div>
                        <div>Thanks,</div>
                        <div>Eric</div>
                        <br>
                        _______________________________________________<br>
                        gstreamer-devel mailing list<br>
                        <a moz-do-not-send="true"
                          href="mailto:gstreamer-devel@lists.freedesktop.org"
                          target="_blank">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></fieldset>
                  <br>
                  <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>
</pre>
                </blockquote>
                <br>
              </div>
            </div>
          </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>
      <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>
  </body>
</html>