ここでは、Microsoft® DirectShow® 編集サービスでのプロジェクト管理に役立つヒントを示す。
タイムラインへの変更
- フィルタ グラフを構築した後にタイムラインを変更する場合は、もう一度 IRenderEngine::ConnectFrontEnd を呼び出して、フロント エンドを再構築する。通常、グラフのほかの部分には影響はない。レンダリング エンジンがフロント エンドを再構築する前には、グラフ全体を削除しなければならないことがある。たとえば、グループの追加や削除の場合などである。ConnectFrontEnd メソッドは、S_WARN_OUTPUTRESET を返し、グラフを削除したことを通知する。この場合、アプリケーションはグラフのレンダリング部分を再構築しなければならない。
- タイムラインからすべてのオブジェクトを完全に削除するには、IAMTimeline::ClearAllGroups メソッドを呼び出す。
クリーン アップ
- レンダリング エンジンの使用を終了したら、IRenderEngine::ScrapIt メソッドを呼び出す。ほかの COM オブジェクトと同じように、使用を終了したら各インターフェイス ポインタを必ず解放する。
- レンダリング エンジンは、タイムライン上に参照カウントを保持しない。使用を終了する前にタイムラインを解放してはならず、必ず最初にレンダリング エンジン上で ScrapIt を呼び出す。
- タイムラインへのすべての参照を解放する際は、たとえタイムライン上に参照カウントを保持していたとしても、タイムラインのいずれのオブジェクトも使ってはならない。
複数のインスタンス
- タイムライン間でタイムライン オブジェクトを移動してはならない。タイムラインのすべてのオブジェクトは、そのタイムラインによって作成される必要がある。タイムラインは、タイムラインが作成するオブジェクトに関する情報を内部キャッシュに保持している。タイムライン オブジェクトを移動すると、このキャッシュを破壊する可能性がある。
- 複数のタイムラインを持つレンダリング エンジンの同じインスタンスは、決して使ってはならない。レンダリング エンジンは、タイムラインに関する情報をキャッシュに保持している。複数のタイムラインがあると、キャッシュが破壊され、予期しない結果が発生する。2 つのアクティブなタイムラインが必要な場合は、タイムラインごとにレンダリング エンジンの別のインスタンスを作成する。
- タイムラインは、複数のレンダリング エンジンを使うことができるが、同時に使うことはできない。古いレンダリング エンジンを削除してから、新しいレンダリング エンジンを使用する。たとえば、プレビューのために基本レンダリング エンジンを使ってから、ファイルの書き込みのためにスマート レンダリング エンジンに切り替える場合である。
永続性
- プロジェクトを XML ファイルに保存する際に、フィルタ グラフは永続的ではない。そのため、スマート再圧縮、圧縮フォーマット、および圧縮パラメータに関連した情報が失われる。プロジェクトを読み込んだ後にこれらのパラメータを復元するかどうかは、アプリケーション独自に決定する。