Microsoft DirectX 8.0

ソースの操作

ソース オブジェクトは、ソース ファイルからの単一のメディア ストリームを表す。ソースは、プロジェクトに未加工の素材を提供する。タイムライン内のそれ以外のものは、構造 (トラック合成、およびグループ) を提供するか、ソースを変更する (エフェクトおよびトランジション) ために存在する。

ここでは、Microsoft® DirectShow® 編集サービス (DES) のソースに関する詳細を説明している。タイムラインにソースを追加する基本的な手順については、「タイムラインの構築」を参照すること。

ここには以下のセクションが含まれる。

ソースのプロパティの設定

新しいソース オブジェクトを作成するときに、設定する必要があるプロパティと、オプションで設定できるプロパティがある。以下のプロパティは設定しなければならない。

ソース オブジェクトは親グループからメディア タイプを継承するので、メディア タイプを指定する必要はない。

オプションのプロパティは次のとおりである。

メディア ディテクタの使い方

メディア ディテクタは、ストリームの個数、タイプ、時間幅など、ファイルに関する情報を取得するためのヘルパー オブジェクトである。メディア ディテクタには、ビデオ ストリームからポスター フレームを取得するメソッドも含まれている。これは、IMediaDet インターフェイスを公開する。

メディア ディテクタが機能するモードは 2 つある。メディア ディテクタのインスタンスを作成した時点では、特定のソース ファイルにはアタッチしていない。このモードでは、複数のソース ファイルからストリーム情報を取得できる。しかし、メディア ディテクタを使ってポスター フレームを取得すると、メディア ディテクタはビットマップ捕捉モードに切り替わる。ビットマップ捕捉モードでは、メディア ディテクタは特定のビデオ ストリームにアタッチされ、ストリーム情報メソッドは機能しなくなる。また、メディア ディテクタを起動時のモードに戻す方法はない。そのため、ストリーム情報の取得はポスター フレームの取得の前に行う必要がある。そうでない場合は、ストリームごとにメディア ディテクタの新しいインスタンスを作成することになる。

ストリーム情報を取得する手順は以下のとおりである。

  1. IMediaDet::put_Filename を呼び出して、ソース ファイルの名前を指定する。
  2. IMediaDet::get_OutputStreams を呼び出して、ソース内のストリームの個数を取得する。
  3. IMediaDet::put_CurrentStream を呼び出して、ストリーム番号を指定する。以下のメソッドを 1 つ以上呼び出す。

ポスター フレームを取得するには、前の手順と同じようにしてストリーム番号を指定する。IMediaDet::GetBitmapBits を呼び出してポスター フレームをバッファにコピーするか、IMediaDet::WriteBitmapBits を呼び出してポスター フレームをファイルに保存する。

メディア ロケータの使い方

メディア ロケータは、ファイル名を検証し、ローカル ディレクトリまたはネットワーク ディレクトリで足りないファイルを検索するヘルパー オブジェクトである。メディア ロケータは、過去の検索でファイルが見つかったディレクトリ パスのキャッシュを維持する。ファイルを見つけるために、メディア ロケータはこのキャッシュ内のディレクトリを検索する。そこで見つからなかった場合、メディア ロケータは [ファイルを開く] ダイアログを表示し、ユーザーが手動でファイルを見つけられるようにする。ユーザーがファイルを見つけた場合、メディア ロケータはその新しいディレクトリをキャッシュに追加する。 メディア ロケータは IMediaLocator インターフェイスを公開する。

通常、アプリケーションでメディア ロケータのインスタンスを直接作成することはない。タイムラインおよびレンダリング エンジンは、メディア ディテクタを使ってファイル名を検証する以下のメソッドを提供している。

どちらのメソッドも、メディア ロケータの動作を制御するフラグをパラメータにとる。たとえば、検索をローカル ディレクトリだけに限定できる。

スティル イメージ

DES は、スティル イメージに関して次のファイル フォーマットをサポートしている。

これらは、スティル イメージとして使うか、またはアニメーションの作成に使用できる。ビットマップ、JPEG、および Targa ファイルに関して、ファイルをスティル イメージとして使用する場合は、IAMTimelineSrc::SetDefaultFPS メソッドを呼び出し、フレーム レートを 0 に設定する。

DIB シーケンス

一連のビットマップ、JPEG、または Targa ファイルに対して、レンダリング エンジンはデバイスに依存しないビットマップ (DIB) のシーケンスを構築できる。DIB シーケンスを作成するには、ファイル名に Image001.bmp、Image002.bmp、Image003.bmp のようなシーケンシャルな数字を付ける。このシーケンスの最初のファイルをソースとして使用し、IAMTimelineSrc::SetDefaultFPS を呼び出して、シーケンスのフレーム レートを設定する。レンダリング エンジンは、指定されたフレーム レートで、シーケンスないのイメージを順に処理する。

指定されたフレーム レートで、シーケンスが時間幅に満たない場合、時間幅の残りはブラックとなる。レンダリング中にエラーは発生しない。

GIF ソース

DES は、GIF89a 仕様の使用により、アニメーション GIF および透過 GIF を含め、GIF ソースをサポートしている。アニメーション GIF の場合は、ほかのファイル タイプとは異なり、フレーム レートを設定する必要はない。GIF ファイルは、アニメーション内の各イメージ間の遅延を指定する。

透過 GIF をサポートするために、DES はイメージ内の透過リージョンを RGB(0,0,0) の RGB トリプレットに変換する。これにより、キー トランジションを使って、RGB(0,0,0) 上のキーにキー トランジションを使用できる。

DES は、RGB(0-7,0-7,0-7) の範囲の黒のリージョンも、透過性インデックスを除いて、RGB(8,8,8) の値に変換する。この変換は、目視では確認できない。

ビデオ カラー ソース

ビデオ カラー ソース オブジェクトは、単色の連続的なビデオ イメージを作成する。このオブジェクトの 1 つの使い方には、トランジション時のレイヤ作成がある。たとえば、このオブジェクトを使えば、ビデオのフェード インやフェード アウトを作成できる。