次の方法で共有


レンダリング エンジンについて

ここでは、Microsoft DirectShow 編集サービス (DES) でどのようにビデオ編集プロジェクトがレンダリングされるかについて説明する。

DES では、プロジェクトはタイムラインとして表される。タイムラインは、ソース クリップの再配置やビデオ エフェクトの追加など、ビデオ編集で最も頻繁に行われるタスクを簡略化するために役立つ。一方、DirectShow ストリームのアーキテクチャでは、フィルタ グラフが必要である。そのため、プロジェクトをレンダリングするためには、タイムラインをフィルタ グラフに変換しなければならない。この操作を行うコンポーネントが、"レンダリング エンジン" と呼ばれる。DirectShow では、次の 2 つのレンダリング エンジンが提供される。

  • "基本" レンダリング エンジン : 非圧縮出力を提供するフィルタ グラフを作成する。
  • "スマート" レンダリング エンジン : 圧縮出力を提供するフィルタ グラフを作成する。

スマート レンダリング エンジンは、スマート再圧縮を使って、パフォーマンスを向上させる。スマート再圧縮では、元のファイル フォーマットが最終的な出力フォーマットと異なる場合にだけ、ソース ファイルが再圧縮される。フォーマットが一致する場合は、ソース ファイルが圧縮解除されることはない。スマート再圧縮は、ビデオ圧縮用にだけサポートされ、オーディオ圧縮用にはサポートされない。

プレビューには、基本レンダリング エンジンを使う。スマート レンダリング エンジンでもプレビューはできるが、圧縮されたストリームを圧縮解除しなければならないので、効率が悪い。ファイルの書き込みには、スマート再圧縮が必要な場合にはスマート レンダリング エンジンを使う。それ以外の場合は、基本レンダリング エンジンを使う。スマート再圧縮を使うと、ファイルの書き込みに必要な時間が格段に減る。

重要 :  スマート レンダリング エンジンは、Windows Media ファイルの読み取りや書き込みに使ってはならない。

重要 :  レンダリング エンジンは両方とも、メッセージを処理する非表示ウィンドウを作成する。レンダリング エンジンを作成するスレッドは、メッセージを送るメッセージ ループを持っていなければならない。また、そのスレッドは、レンダリング エンジンおよびフィルタ グラフ マネージャが解放されるまでは終了してはならない。このようにしないと、アプリケーションがデッドロックに陥ることがある。

フィルタ グラフの作成

フィルタ グラフは、2 段階で作成される。最初の段階では、レンダリング エンジンは "フロント エンド" を作成する。これは、フィルタ グラフの一部である。次の図は、一般的なフロント エンドを示している。

フィルタ グラフのフロント エンド

サブシステムには、さまざまな特殊フィルタが含まれている。これらのフィルタは、レンダリング エンジンが自動的に組み立てる。フロント エンドには、タイムラインの各グループごとに 1 つの出力ピンが含まれている。基本レンダリング エンジンを使う場合、出力ピンは非圧縮データを出力し、スマート レンダリング エンジンを使う場合は圧縮データを出力する。

2 つ目の段階では、出力ピンがレンダリング フィルタに接続される。プレビューでは、レンダリング フィルタはビデオ レンダラおよびオーディオ レンダラとなる。ファイルの書き込みでは、レンダリング フィルタはマルチプレクサ (mux) フィルタおよびファイル ライタ フィルタとなる。

完成したフィルタ グラフ

参照