8.4. ゴーストパッド

図8-1 は、自身でパッドを持たないビンを示したものです。"ゴーストパッド" が意味を持ってくるのは、このような場合です。

図 8-1. ゴーストパッドを持たない GstBin エレメント

ゴーストパッドは、ビンに含まれる何らかのエレメントから作成されるパッドで、ビンからも直接アクセス可能なものをいいます。ゴーストパッドは、UNIX ファイルシステムのシンボリックリンクにたとえることができます。ビンでゴーストパッドを使うと、ビンもパッドを持つことになり、アプリケーションのほかの部分では、このビンをエレメントとして透過的に使うことができるようになります。

図 8-2. ゴーストパッドを持つ GstBin エレメント

図8-2 は、ゴーストパッドを図示したものです。エレメント 1 のシンクパッドは、同時にビンのパッドにもなります。ゴーストパッドはほかのパッドと同様に見え、同様に動作するので、通常のパッドとまったく同様に、GstBin だけでなく、どんな種類のエレメントにもゴーストパッドを追加することができます。

ゴーストパッドを作成するには、関数 gst_ghost_pad_new () を使用します。


#include <gst/gst.h>

int
main (int   argc,
      char *argv[])
{
  GstElement *bin, *sink;
  GstPad *pad;

  /* init */
  gst_init (&argc, &argv);

  /* create element, add to bin */
  sink = gst_element_factory_make ("fakesink", "sink");
  bin = gst_bin_new ("mybin");
  gst_bin_add (GST_BIN (bin), sink);

  /* add ghostpad */
  pad = gst_element_get_static_pad (sink, "sink");
  gst_element_add_pad (bin, gst_ghost_pad_new ("sink", pad));
  gst_object_unref (GST_OBJECT (pad));

[..]

}
    

上の例では、ビンもパッドを持つことになります。このパッドは、指定されたエレメントの "sink" という名前のパッドです。ゴーストパッドの作成後は、このビンをシンクエレメントの代わりとして使用できます。たとえば、ほかのエレメントをこのビンにリンクすることができます。