16.2. GStreamer におけるスケジューリング

GStreamer におけるパイプラインのスケジューリングは、各 "グループ" に対して 1 つのスレッドを使うことで実現されています。ここで、グループとは、"キュー" エレメントによって分割されたエレメントの集合を意味します。こうした 1 つのグループ内において、スケジューリングは、特定のエレメントがサポートするモードに応じて、プッシュベースのスケジューリングになるか、プルベースのスケジューリングになるかのいずれかです。ファイルソースのように、エレメントがデータに対するランダムアクセスをサポートしている場合、パイプライン内の下流のエレメントは、そのグループのエントリポイント (すなわち、ほかのエレメントのスケジューリングをコントロールするエレメント) になります。エントリポイントは上流からデータをプルし、下流にデータをプッシュします。これによって、どちらのタイプのエレメントでも、データ処理関数が呼び出されます。

現実には、デコーダ、エンコーダといった GStreamer のほとんどのエレメントは、プッシュベースのスケジューリングだけをサポートしています。換言すれば、GStreamer は実質的にはプッシュベースのスケジューリングモデルを使っているということです。