ビデオ編集プロジェクトの管理

ここでは、Microsoft® DirectShow® 編集サービスでのプロジェクト管理に役立つヒントを示す。

タイムラインへの変更

  • フィルタ グラフを作成した後にタイムラインを変更する場合は、再度 IRenderEngine::ConnectFrontEnd を呼び出して、フロント エンドを再作成する。通常、この再作成は、グラフの他の部分への影響はない。ただし、レンダリング エンジンがフロント エンドを再作成する前に、グラフ全体を削除しなければならないことがある。たとえば、グループの追加や削除の場合などである。ConnectFrontEnd メソッドは、S_WARN_OUTPUTRESET を返し、グラフを削除したことを通知する。この場合、アプリケーションはグラフのレンダリング部分を再作成しなければならない。
  • タイムラインからすべてのオブジェクトを完全に削除するには、IAMTimeline::ClearAllGroups メソッドを呼び出す。

クリーンアップ

  • レンダリング エンジンの使用を終了したら、IRenderEngine::ScrapIt メソッドを呼び出す。他の COM オブジェクトと同じように、使用を終了したら各インターフェイス ポインタを必ず解放すること。
  • レンダリング エンジンは、タイムライン上に参照カウントを保持しない。使用を終了する前にタイムラインを解放してはならず、必ず最初にレンダリング エンジン上で ScrapIt を呼び出すこと。
  • タイムラインへのすべての参照を解放する際は、たとえタイムライン上に参照カウントを保持していたとしても、タイムラインのいずれのオブジェクトも使ってはならない。

複数のタイムライン インスタンス

  • タイムライン間でタイムライン オブジェクトを移動してはならない。タイムラインのすべてのオブジェクトは、そのタイムラインによって作成される必要がある。タイムラインは、タイムラインが作成するオブジェクトに関する情報を内部キャッシュに保持している。タイムライン オブジェクトを移動すると、このキャッシュを破壊する可能性がある。
  • 複数のタイムラインを持つレンダリング エンジンの同じインスタンスは、決して使ってはならない。レンダリング エンジンは、タイムラインに関する情報をキャッシュに保持している。複数のタイムラインがあると、キャッシュが破壊され、予期しない結果が発生する。2 つのアクティブなタイムラインが必要な場合は、タイムラインごとにレンダリング エンジンの別のインスタンスを作成する。
  • タイムラインは、複数のレンダリング エンジンを使うことができるが、同時に使うことはできない。古いレンダリング エンジンを削除してから、新しいレンダリング エンジンを使う。たとえば、プレビューのために基本レンダリング エンジンを使ってから、ファイルの書き込みのためにスマート レンダリング エンジンに切り替える場合である。

永続性

  • プロジェクトを XML ファイルに保存する際には、フィルタ グラフは永続的ではない。そのため、スマート再圧縮、圧縮フォーマット、圧縮パラメータに関連した情報が失われる。プロジェクトを読み込んだ後にこれらのパラメータを復元するかどうかは、アプリケーションが独自に決定する。