8.2. パッドのケイパビリティ

パッドは、エレメントが外の世界からどう見えるかについて非常に重要な役割を果たすので、パッドを経由して流れることができるデータ、あるいはパッドを経由して現在流れているデータに関して、ケイパビリティを使って記述する仕組みが用意されています。ここでは、ケイパビリティとは何か、ケイパビリティをどのように使うのかについて、コンセプトを理解するのに十分な範囲で簡単に説明します。ケイパビリティの詳細と、GStreamer で定義されているすべてのケイパビリティのリストについては、『Plugin Writer's Guide』を参照してください。

ケイパビリティはパッドテンプレートとパッドにアタッチされています。パッドテンプレートの場合、ケイパビリティは、そのテンプレートから作成されたパッドを経由して流れることができるメディアの種類についての記述です。パッドの場合は、パッドが持ち得るケイパビリティのリスト (通常はパッドテンプレートのケイパビリティのコピーです) である場合と、該当するパッドを経由して現在流れているメディアの種類である場合があります。前者の場合には、パッドはまだネゴシエーションされておらず、後者の場合には、パッドはすでにネゴシエーションが済んでいます。

8.2.1. ケイパビリティの分析

パッドのケイパビリティは、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
      

8.2.2. プロパティと値

プロパティは、ケイパビリティの追加情報を記述するのに使われます。プロパティは、1 つのキー (文字列) と 1 つの値から構成されます。使用できる値の型には、以下のようにさまざまなものがあります。