パッドは、エレメントが外の世界からどう見えるかについて非常に重要な役割を果たすので、パッドを経由して流れることができるデータ、あるいはパッドを経由して現在流れているデータに関して、ケイパビリティを使って記述する仕組みが用意されています。ここでは、ケイパビリティとは何か、ケイパビリティをどのように使うのかについて、コンセプトを理解するのに十分な範囲で簡単に説明します。ケイパビリティの詳細と、GStreamer で定義されているすべてのケイパビリティのリストについては、『Plugin Writer's Guide』を参照してください。
ケイパビリティはパッドテンプレートとパッドにアタッチされています。パッドテンプレートの場合、ケイパビリティは、そのテンプレートから作成されたパッドを経由して流れることができるメディアの種類についての記述です。パッドの場合は、パッドが持ち得るケイパビリティのリスト (通常はパッドテンプレートのケイパビリティのコピーです) である場合と、該当するパッドを経由して現在流れているメディアの種類である場合があります。前者の場合には、パッドはまだネゴシエーションされておらず、後者の場合には、パッドはすでにネゴシエーションが済んでいます。
パッドのケイパビリティは、GstCaps オブジェクトで記述されます。内部的には、GstCaps には、それぞれ 1 つのメディアの種類について記述した 1 つ以上の GstStructure が含まれます。ネゴシエーションの済んだパッドは、ただ 1 つ の構造体を含むケイパビリティセットを持ちます。また、この構造体に含まれているのは、固定値だけです。ネゴシエーションの済んでいないパッドやパッドテンプレートに関しては、このような制約はありません。
1 つの例として、"vorbisdec" エレメントのケイパビリティのダンプを以下に示します。gst-inspect vorbisdec を実行すれば、同じ出力を得ることができます。以下の例を見ると、ソースとシンクの 2 つのパッドがあることがわかります。どちらのパッドも常時利用可能なパッドで、どちらも、パッドにアタッチされたケイパビリティを持っています。シンクパッドは、vorbis にエンコードされた音声データを受け取り、その MIME 型は "audio/x-vorbis" です。ソースパッドは、未加工 (raw) の (デコードされた) 音声サンプルを次のエレメントに送出するのに使われます。送出されるデータは、未加工の音声 MIME 型 (この例では "audio/x-raw-int") です。ソースパッドには、音声のサンプルレートとチャンネル数を示すプロパティが含まれています。このほかにもいくつかプロパティがありますが、今はこれらについては考慮する必要はありません。
Pad Templates:
SRC template: 'src'
Availability: Always
Capabilities:
audio/x-raw-float
rate: [ 8000, 50000 ]
channels: [ 1, 2 ]
endianness: 1234
width: 32
buffer-frames: 0
SINK template: 'sink'
Availability: Always
Capabilities:
audio/x-vorbis
プロパティは、ケイパビリティの追加情報を記述するのに使われます。プロパティは、1 つのキー (文字列) と 1 つの値から構成されます。使用できる値の型には、以下のようにさまざまなものがあります。
基本型。Glib に登録されているほぼすべての GType が使用可能です。これらのプロパティは、該当するプロパティが特定の動的でない値を持つことを示します。以下に例を示します。
整数値 (G_TYPE_INT): 該当するプロパティは正確にこの値を持ちます。
ブール値 (G_TYPE_BOOLEAN): 該当するプロパティは TRUE または FALSE のいずれかです。
浮動小数点値 (G_TYPE_FLOAT): 該当するプロパティは正確にこの浮動小数点値を持ちます。
文字列値 (G_TYPE_STRING): 該当するプロパティには UTF-8 文字列が含まれています。
分数値 (GST_TYPE_FRACTION): 整数の分子と分母によって表される分数が含まれています。
範囲型は、GStreamer によって登録された GType で、取り得る値の範囲を示します。範囲型は、可能な音声サンプルレートの値やサポートされる動画サイズを示すのに使われます。次に示すのは、GStreamer で定義されている 3 つの範囲型です。
整数範囲値 (GST_TYPE_INT_RANGE): 該当するプロパティは、取り得る整数値の範囲を下限と上限によって示します。たとえば、"vorbisdec" エレメントの rate プロパティは、8000 から 50000 までの値を取ることができます。
浮動小数点範囲値 (GST_TYPE_FLOAT_RANGE): 該当するプロパティは、取り得る浮動小数点値の範囲を下限と上限によって示します。
分数範囲値 (GST_TYPE_FRACTION_RANGE): 該当するプロパティは、取り得る分数値の範囲を下限と上限によって示します。
リスト値 (GST_TYPE_LIST): 該当するプロパティは、リストに含まれる一連の基本値のうち、任意の値を取ることができます。
例: 44100 Hz のサンプルレートと 48000 Hz のサンプルレートのいずれかがサポートされていることを示すケイパビリティでは、44100 の値を 1 つと 48000 の値を 1 つを持つ整数値のリストを使うことになります。
配列値 (GST_TYPE_ARRAY): 該当するプロパティは、値の配列です。配列内の各値は、それぞれに完全な値でもあります。配列内のすべての値は、基本的な型が同じである必要があります。すなわち 1 つの配列は、整数値、整数値のリスト、整数範囲値の任意の組み合わせを含むことができ、浮動小数点値や文字列値についてもこれと同じような組み合わせを含むことができますが、1 つの配列が浮動小数点値と整数値を同時に含むことはできません。
例: チャンネルが 2 つ以上ある音声の場合には、チャンネルレイアウトを指定する必要があります (1 チャンネルと 2 チャンネルの音声の場合、ケイパビリティで特段の指定がない限り、チャンネルレイアウトは暗黙的に定まります)。この場合、チャンネルレイアウトは整数の enum 値の配列になり、各 enum 値はスピーカーの位置を表します。GST_TYPE_LIST の場合と異なり、配列内の値はそれ全体を 1 つのものとして解釈されます。