/* dot -Tpng gst-universe.dot -ogst-universe.png
 *
 * other layouts:
 * circo -Tpng gst-universe.dot -ogst-universe.circo.png
 * neato -Tpng gst-universe.dot -ogst-universe.neato.png
 *
 * todo:
 * - add urls to api docs
 * - use color
 */
digraph pipeline {
  node [style="filled", shape="box", fillcolor="#eeeeee", fontsize="9px", fontname="Bitstream Vera Sans", target="_top"];
  edge [labelfontsize="7px", fontsize="7px", labelfontname="Bitstream Vera Sans", fontname="Bitstream Vera Sans"];
  labelloc=t;
  nodesep=0.25;

  /*
  fontname="Bitstream Vera Sans";
  fontsize="10px";
  label="GStreamer Universe";
  */
  
  /* objects */
  application [color=black, fillcolor="#ffdddd"];
  bin [href="GstBin.html", color=black, fillcolor="#ccccff"];
  bus [href="GstBus.html"];
  buffer [href="gstreamer-GstBuffer.html", color=black, fillcolor="#ddffdd"];
  caps [href="gstreamer-GstCaps.html"];
  clock [href="GstClock.html"];
  element [href="GstElement.html", color=black, fillcolor="#ccccff"];
  element_factory [href="GstElementFactory.html", label="element factory"];
  event [href="gstreamer-GstEvent.html", color=black, fillcolor="#ddffdd"];
  message [href="gstreamer-GstMessage.html", color=black, fillcolor="#ddffdd"];
  pad [href="GstPad.html", color=black, fillcolor="#ccccff"];
  pad_template [href="GstPadTemplate.html", label="pad template"];
  pipeline [href="GstPipeline.html", color=black, fillcolor="#ccccff"];
  plugin [href="GstPlugin.html"];
  plugin_feature [href="GstPluginFeature.html", label="plugin feature"];
  query [href="gstreamer-GstQuery.html", color=black, fillcolor="#ddffdd"];
  registry [href="GstRegistry.html"];
  structure [href="gstreamer-GstStructure.html"];
  
  /* relations */
  bin -> element [label="is-a"];
  pipeline -> bin [label="is-a"];
  pipeline -> bus [label="has 1"];
  pipeline -> clock [label="has 1"];
  element -> pad_template [label="has n"];
  element -> pad [label="has n"];
  element -> clock [label="may provide"];
  pad -> caps [label="has n"];
  pad_template -> caps [label="has n"];
  buffer -> caps [label="has n"];
  caps -> structure [label="has n"];
  bin -> element [label="has n"];
    
  pad -> pad_template [label="is created from"];
  element -> element_factory [label="is created from"];
    
  element -> query [label="answers"];
  element -> event [label="send & receive"];
  element -> buffer [label="send & receive"];
  element -> message [label="send"];
  bus -> message [label="receive"];
    
  registry -> plugin [label="has n"];
  plugin -> plugin_feature [label="has n"];
  element_factory -> plugin_feature [label="is-a"];
    
  application -> pipeline [label="has"];
  application -> bus [label="listen on"];
  application -> query [label="send"];
  application -> event [label="send"];
}
