3.2. パッド

パッド (pad) はエレメントの入力と出力で、この部分でエレメントにほかのエレメントを接続することができます。パッドは、GStreamer においてエレメント間のリンクとデータフローのネゴシエーションを行うのに使われます。パッドは、エレメント上にあって、ほかのエレメントとの間でリンクを作成するために使用できる"プラグ""ポート"のようなものと考えることができます。データは、このパッドを経由してエレメント間を移動することができます。パッドには特定のデータ処理ケイパビリティが備わっており、パッドを経由して流れるデータの種類を限定することができます。2つのパッド間でリンクを作成できるのは、これらのパッドで許可されているデータの種類に互換性がある場合だけです。データの種類は、ケイパビリティネゴシエーション (caps negotiation) と呼ばれるプロセスを使って、パッド間でネゴシエーションされます。データの種類は、GstCaps として記述されます。

比喩を使うと、もっとわかりやすくなるでしょう。パッドは、物理デバイス上のプラグやジャックにたとえることができます。例として、アンプ、DVDプレーヤー、(音声のない) ビデオプロジェクタから構成されるホームシアターシステムを考えてみてください。DVD プレーヤーはアンプにつなげることができますが、これはどちらのデバイスもオーディオジャックを持っているからです。また、ビデオプロジェクタは DVD プレーヤーにつなげることができますが、これはどちらのデバイスも互換性のあるビデオジャックを備えているからです。一方、ビデオプロジェクタとアンプをつなげることはできません。なぜなら、ビデオプロジェクタとアンプに備わっているジャックの種類は異なるからです。GStreamer のパッドは、こうしたホームシアターシステムのジャックと同じ目的で使われます。

ほとんどの場合、GStreamer のすべてのデータはエレメント間のリンクに沿って一方向に流れます。データは、あるエレメントから 1 つまたは複数のソースパッド (source pad) を経由して流れ出し、ほかのエレメントは 1 つまたは複数のシンクパッド (sink pad) を経由して入ってくるデータを受け入れます。ソースエレメントとシンクエレメントには、それぞれソースパッドとシンクパッドしかありません。データとは、一般にはバッファ (GstBuffer オブジェクトに説明があります) とイベント (GstEvent オブジェクトに説明があります) を意味します。