5.4. エレメントファクトリの詳細

前のセクションでは、エレメントのインスタンスを作成する手段として、GstElementFactory オブジェクトについて簡単に取り上げました。しかし、エレメントファクトリにはそれ以外にもさまざまな機能があります。エレメントファクトリは、GStreamer レジストリから取得される基本型で、GStreamer が作成できるすべてのプラグインとエレメントを記述したものです。これは、オートプラッガが行うような自動的なエレメントのインスタンス化や、パイプラインエディタアプリケーション (GStreamer Editor など) が行うような、利用可能なエレメントのリスト作成の際に、エレメントファクトリが役立つことを意味します。

5.4.1. ファクトリを使ってエレメントに関する情報を取得する

gst-inspect をはじめとするツール群は、プラグインの作成者、プラグインの説明 (および短い名前)、ランク、カテゴリといったエレメントに関するいくつかの一般的な情報を出力します。カテゴリを使うと、そのエレメントファクトリを使って作成できるエレメントの種類を取得することができます。カテゴリには、Codec/Decoder/Video (動画デコーダ)、Codec/Encoder/Video (動画エンコーダ)、Source/Video (動画生成)、Sink/Video (動画出力) などがあり、音声に関してもこれらに対応するものがあります。また、Codec/DemuxerCodec/Muxer など、その他にもさまざまなカテゴリがあります。gst-inspect を実行すると、すべてのファクトリのリストを取得することができ、gst-inspect <ファクトリ名> を実行すると、上に示した情報やそれ以外のさまざまな情報を取得できます。


#include <gst/gst.h>

int
main (int   argc,
      char *argv[])
{
  GstElementFactory *factory;

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

  /* get factory */
  factory = gst_element_factory_find ("fakesrc");
  if (!factory) {
    g_print ("You don't have the 'fakesrc' element installed!\n");
    return -1;
  }

  /* display information */
  g_print ("The '%s' element is a member of the category %s.\n"
           "Description: %s\n",
           gst_plugin_feature_get_name (GST_PLUGIN_FEATURE (factory)),
           gst_element_factory_get_klass (factory),
           gst_element_factory_get_description (factory));

  return 0;
}
      

gst_registry_pool_feature_list (GST_TYPE_ELEMENT_FACTORY) を使うと、GStreamer にとって既知のすべてのエレメントファクトリのリストを取得できます。

5.4.2. エレメントが持つことのできるパッドを調べる

エレメントファクトリが持つ機能の中でおそらく最も強力な機能は、エレメントが生成できるパッドのすべて、およびこれらのパッドのケイパビリティ (平たく言えば、どのような種類のメディアがこれらのパッドの上を流れることができるかということ) についての完全な記述を格納することができ、しかも実際にこれらのプラグインをメモリに読み込むことなく、それができる点でしょう。この機能を利用すると、エンコーダ用にコーデックの選択リストを用意したり、メディアプレーヤーでオートプラッギングを可能にしたりすることができます。最新の GStreamer ベースのメディアプレーヤーとオートプラッガは、いずれもこの方法で動作しています。こうした機能については、次の章「パッドとケイパビリティ」で GstPadGstCaps を取り上げる際に詳しく説明します。