Tech と Culture

テクノロジーとカルチャー

motion JPEG再生

とりあえず、1pixelを書き込むデバイスドライバが動いたので、そのままmotion JPEG再生プログラムのYCbCr-RGB変換関数の部分でそのデバイスドライバをコールするように変更して動作させました。

その結果は、、、、、、

あまりに遅い!!!!
1.5fpsです。それになんだか分からないシャギーなノイズがのっている!

いろいろ調べた結果、ノイズはどうやらエンディアンの問題でピクセルデータが2pixel毎に入れ替わっている模様。YCbCr-RGB変換モジュールのFIFOに代入する際のアドレス上下を入れ替えたハードウェアに変更するとノイズはきれいになくなりました。
エンディアンはちゃんと考えたつもりだったんですが。ハードウェアテストパターンをINTELで出力したのが間違いの元だったかもしれません。テストベンチも後で少し修正しないといけません。

しかし、fpsの方はどうにもなりません。1pixel毎にコンテキストスイッチが起きていますので相当遅くなるのではないかと予想していたのですが、ここまでひどいとは!
しかし、ソフトウェアオンリーの方もmmapシステムコールでピクセル毎にポインタアクセスしているのに、、、と不思議に思っていろいろ調べてみましたが、どうやら、mmapというのは、同じ物理アドレスをページ単位で共有したりできるらしい。もしかして、ポインタアクセス時にはコンテキストスイッチが発生しないのかも。。。。 そして、カーネルモードになったときは、データをコピーせずにアドレスのページを指すポインタをすげ替えているだけかも。。。。

いずれにしろ、コンテキストスイッチの重さも良く分からないので、もう少しまとめたピクセル数をドカンとカーネル空間に渡してから、ポインタアクセスでモジュールにデータを送る実験をしたいと思います。