January 13, 2004

VideoForWindowsは遅いということが判明

Posted at January 13, 2004 04:12 PM in .

 卒研ネタ。
 AVIからフレーム(=DIB)を抜き出す処理を、いままではVideoForWindowsというレガシーなライブラリを使って書いていた。つい先日、先輩氏から同じ処理をDirectShowで書いたコードを頂戴したので、さっそく今までのVideoForWindowsなコードに置き換えた。そして、興味本位で双方の処理速度を計測してみた。

 下に示すのは、VideoForWindowsなコードと、DirectShowなコードの双方に、同じAVIから1000枚のフレームを抜き出す処理をさせた結果。1フレーム目から1000フレーム目までを順番に抜き出していくシーケンシャルなアクセスと、乱数で生成した番号のフレームを抜き出すランダムなアクセスとを試した。
 リソースとして使ったAVIはこのようなもの。
  CODEC : Indeo5
   -quality : 85
   -keyframe : 15フレームごと
   -その他、scalability, transparency等のオプションは使わず
  Size : 640*480
  内容 : サッカーの試合

VideoForWindowsDirectShow
シーケンシャル54953(ms)34734
ランダム5339037812

 双方の間にはおよそ1.5倍もの差が生じている。これだけの差が付くというのは意外だった。DirectShowのほうが遅く作られたライブラリであることから、より洗練された実装がされているということは分かる。だが、もっともCPU時間を喰うであろう、AVIのバイナリをデコードしてDIBを作る部分の処理はIndeo5のCODECがやっているはずで、双方とも同じものを使っているとおもわれる。処理全体としてこれだけの違いが出るのはどうしてだろう。暇なときに調べてみようとおもう。

 卒研で実装中のシステムは、VideoForWindowsなコードは捨てて、DirectShowオンリーで行くことを決定しました。



Trackback

You can ping this entry by using http://windy.ac/MT/mt-tb.cgi/309 .

Comments

まあ、あれですね、あんまり正確な記憶じゃないんですが、VFWは16ビットコードが紛れ込んでたりするのでそのせいじゃないでしょうか。最近のCPUとOSは16ビットコード区間に出入りするときにえらい時間くいますので。

Posted by いぬづか@なにげに初コメ at January 13, 2004 09:10 PM

鋭い御指摘。
調べてみると、VideoForWindowsはWindows3.1の時代からあるライブラリのようで、
http://www.nifty.com/webapp/digitalword/word/017/01724.htm
レガシーな16ビットコードが足を引っ張っている可能性は大だと思います。

Posted by ぶでいぬ(井原) at January 14, 2004 11:33 PM

Post a comment










Remember personal info?