- ビデオデータの流れ
Windows Media Player, Adobe Premiere, Ulead MediaStudio Pro 等の製品は、AVI ファイルの解析に DirectShow と呼ばれる Microsoft 製のシステムモジュールを使用しています(DirectShow 以前は、VideoForWindows と呼ばれるモジュールを使用していましたが、以下の説明はどちらにも当てはまります)。
DirectShow モジュールは、ある AVI ファイルを指定されると、そのファイルを開いてヘッダなどの情報を解析し、指定された位置から 1 フレーム分のビデオデータを読み出します。
このビデオデータは、そのデータの解読を担当するモジュール(コーデックドライバ)を指定する部分と、実際に映像として扱われる圧縮データからなっています。DirectShow は、後者の圧縮データをコーデックドライバとして指定されるモジュールに渡します。
カノープス社の製品を使ってキャプチャされたビデオデータは、解読にカノープス製のコーデックドライバを使うよう指定されています(参照ファイルの場合もそうでない場合も同じです)。したがって、DirectShow を使う場合、カノープス側で拡張できるのは、インデックスファイルのビデオデータの内容と、実際の解読を行うコーデックドライバ側のみとなり、ビデオデータを取り出す処理の部分には触れることができません。
対して、AVI ファイルの解読に DirectShow を使用しない場合は、上記とは異なる流れで処理されます。xxEditやxxVideoでは DirectShow を使用しないため、インデックスファイルの読み出しの際にも任意の処理フェーズで独自の拡張を行うことができます。
- 実データファイルを相対パス指定にできない理由
インデックスファイル内の実データへのパスを相対パスにすれば、インデックスファイルと実データファイルの相対関係を保つという条件で、実データファイルを移動可能にできるとお考えの方もいらっしゃるでしょう。ところが、実際にはこれはうまく行きません。
上記のとおり、コーデックドライバに渡されるのは、DirectShow がインデックスファイルから取り出した 1 フレーム分のビデオデータだけであり、コーデックドライバ側では参照元ファイルのファイル名を知ることはできません。このため、インデックスファイル内のパスをインデックスファイルからの相対パスにしてあると、コーデックドライバでは実データファイルのパスが解読できなくなってしまいます。
インデックスファイルからビデオデータを取得する処理は DirectShow が行っているため、インデックスファイルからの取り出し時にフックをすることもできません。