Microsoft DirectX 8.0 |
Microsoft® DirectShow® 編集サービス (DES) のタイムラインは、COM コンポーネントである。タイムライン内のオブジェクトも、COM コンポーネントである。ここでは、さまざまなオブジェクトが公開するインターフェイスの概要について説明する。
ここには、次のトピックが含まれている。
タイムラインの詳細については、「タイムライン モデル」を参照すること。DES のコンポーネント一覧については、「DirectShow 編集サービスのコンポーネント」を参照すること。
タイムラインは、IAMTimeline インターフェイスを公開する。このインターフェイスには、タイムライン上のプロパティの設定、タイムラインへのグループの追加、およびグループ、トラック、ソースなどのタイムライン オブジェクトの作成を行うためのメソッドが含まれている。新しいタイムラインを作成するには、次のように標準の CoCreateInstance 関数を呼び出す。
IAMTimeline *pTL = NULL; hr = CoCreateInstance(CLSID_AMTimeline, NULL, CLSCTX_INPROC_SERVER, IID_IAMTimeline, (void**)&pTL);
新しいタイムラインは空である。この時点で、既存のプロジェクト ファイル読み込むか (詳細については「プロジェクトのロードとプレビュー」を参照)、または新しいオブジェクトを作成、挿入してタイムラインを構築できる (詳細については、「タイムラインの構築」を参照すること)。
タイムラインの各タイプのオブジェクト (ソース、トラック、エフェクトなど) は、明確な COM オブジェクトである。しかし、アプリケーションは CoCreateInstance 関数を使ってこれらのオブジェクトを作成せず、IAMTimeline::CreateEmptyNode メソッドを呼び出す。このメソッドは、要求されたタイプのオブジェクトを作成し、初期化する。次に、オブジェクトへのポインタを返す。詳細については、「タイムラインの構築」を参照すること。
各タイムライン オブジェクトは、IAMTimelineObj インターフェイスを公開する。さらに、さまざまなオブジェクト タイプが、次のような特別なインターフェイスをサポートしている。
グループは合成の一種であるので、IAMTimelineComp をサポートするとともに、独自の IAMTimelineGroup インターフェイスをサポートしている。
前に示したインターフェイスに加えて、タイムライン オブジェクトはほかの二次的なインターフェイスを公開する。これらのインターフェイスによって、オブジェクト タイプ間の関係が決定される。
インターフェイス | 意味 | 公開元 |
---|---|---|
IAMTimelineVirtualTrack | このオブジェクトは仮想トラックである。仮想トラックとは、トラックのように機能できる任意のオブジェクトのことである。仮想トラックは、合成内に常駐し、ほかのタイムライン オブジェクトを保持できる。 | 合成、トラック |
IAMTimelineEffectable | このオブジェクトはエフェクトを持つことができる。 | 合成、トラック、ソース |
IAMTimelineTransable | このオブジェクトはトランジションを持つことができる。 | 合成、トラック |
IAMTimelineSplittable | このオブジェクトは、IAMTimelineSplittable::SplitAt メソッドを使って分割できる。 | トラック、ソース、エフェクト、トランジション |
ソース、エフェクト、およびトランジションは、ほかの COM オブジェクトへの内部ポインタを持っている。このポインタは、サブオブジェクトと呼ばれる。サブオブジェクトは、オブジェクトの実際の操作を実行する。ソースのサブオブジェクトは、ビデオ データまたはオーディオ データを作成するコンポーネントである。エフェクトまたはトランジションのサブオブジェクトは、データを変換するコンポーネントである。たとえば、ビデオ エフェクトでは、ビデオ ストリームで視覚的なエフェクトが作成される。
サブオブジェクトのタイプは、次のようにオブジェクトのタイプによって異なる。
グループ、合成、およびトラックは、サブオブジェクトを持たない。
アプリケーションは、サブオブジェクト ポインタを直接設定しない。エフェクトとトランジションの場合、アプリケーションは IAMTimelineObj::SetSubObjectGUID メソッドを呼び出し、サブオブジェクトの GUID を指定する。ソース オブジェクトの場合、アプリケーションは通常 IAMTimelineSrc::SetMediaName を呼び出し、ソース ファイルの名前を指定する。しかし、SetSubObjectGUID メソッドはソース オブジェクトにも使用して、フィルタのクラス識別子 (CLSID) を指定できる。
詳細については、「ソースの操作」および「エフェクトとトランジションの操作」を参照すること。