title: Post-process GStreamer playbin pipeline
body: <p>The <code>playbin</code> pipeline in GStreamer is a wonderful thing in that I don't need to have <em>any</em> real knowledge about the individual elements needed to process the stream.</p>
  
  <p>However, if I wanted to rotate the video 90 degrees (or flip it, or anything else), it appears I have to manually code up the pipeline. At the moment, I'm doing this with:</p>
  
  <pre><code>rtspsrc location=X
      ! rtph264depay
      ! h264parse
      ! decodebin
      ! videoflip method=Y
      ! videoconvert
      ! autovideosink
  </code></pre>
  
  <p>However, because I'm binding the video to a specific Gtk widget, I capture the message asking for the widget ID and provide that back to GStreamer so it can correctly bind.</p>
  
  <p>Unfortunately, according to <code>gst-inspect-1.0</code>, none of those elements in the pipeline above appear to actually provide the <code>GstVideoOverlay</code> interface so that, when I query for one that can receive the widget identifier, I get <code>null</code> followed very quickly by a null pointer error. Or, if I do nothing when the <code>null</code> is returned, no binding occurs and GStreamer opens up a separate window to stream the video.</p>
  
  <p>It turns out that <code>playbin</code> itself provides the required interface.</p>
  
  <p>I also tried replacing <code>autovideosink</code> with <code>ximagesink</code>, and then with <code>xvimagesink</code>, both of which claim to support the interface but, in both cases, no element was found that supported the interface.</p>
  
  <p>So my question s are basically this:</p>
  
  <p>1/ Can I insert something into the above pipeline that will provide the interface? </p>
  
  <p>2/ Failing that, is there a way to use <code>playbin</code> to analyse the stream correctly but then capture its output and pass that through more filters? The sort of thing I'm thinking of is:</p>
  
  <pre><code>playbin location=X
      ! videoflip method=Y
      ! autovideosink
  </code></pre>
  
  <p>In other words, can I use something like the <code>video-sink</code> property of <code>playbin</code> to stop it creating its own sink and instead pass its data through to the <code>videoflip</code>?</p>
  
  <p>I'd prefer something that could be implemented with <code>Gst.Parse.Launch()</code> since I don't really want to have to mess about creating every single pipeline element manually if I can avoid it.</p>