SSブログ

Mac用USBデバイス-91 IIDCドライバ [Mac用USBデバイス工作]

昨日まででUSBの標準デスクリプタのおさらいがやっと終わった。これをいちいち手動で書いていたらぜったい頭が禿げる。
それはそうとして、しばらく前に一段落させたFireWire接続のIIDCカメラ用ドライバがちょっとだけバージョンアップ。

煮詰まってしまったコードはしばらく置いてから見直すと、それまで気がつかなかった問題に気がついたりする。

FireWire勉強用のIIDCカメラドライバはいくつか致命的なバグがとれないまま、ほったらかしてあったが、先日久しぶりに見てみた。たった1ヶ月前なのに、中を見てもよくわからないところがある。アイソクロナス転送のI/O Kit関数をまとめた部分なんて今見るとなにやってるのか全然わからない。字面は僕のだけど中身はまったくの他人が書いたみたいなソースに見える。えらいこっちゃ。

それでもいいことはあった。先月は何度見直してもわからなかった、高いフレームレートを設定すると転送されなくなるというバグ、実にしょーもないトリビアルなバグだということに気がついた。

アイソクロナス転送では転送レートはレガシーモード(1394a)で100Mbits/s、200Mbits/s、400Mbits/sの3種類がある。Mac本体側もカメラ側も400Mbits/sをサポートしているのに、100Mbits/sでしか動かなかった。どの転送レートで送るかを設定するレジスタがカメラ側にあるが、その設定をI/O Kit側から100Mbits/sを設定しなおしているコードを書いていた。なんで先月あれだけ見直しても気がつかなかったのだろう。

ほんの2行書き換えるだけでカメラがサポートするフレームレートすべてでデータが送られてくるようになった。また例のごとく、こっそり会社にPowerBook G4を持っていってカメラを繋いで動作確認した。その証拠写真。
0415screenshot0.jpg
わかりにくい絵だけど、前回と同じようにIIDCカメラでPowerBook G4の液晶画面をとったところ。赤枠で引き出したようにFormat1 Mode5、つまり1024×768画素モノクロ8ビットをフレームレート30fpsでとれているところ。これは400Mbits/sで転送できる最大レートになる。ちゃんと動いている。使っているカメラはソニーの最新型のXCD-SX90。このカメラは800Mbit/sまでサポートしているがMac側が400Mbits/sなのでそれで動かしている。

他の小さなメモリリークのバグなんかも見つけて修正したが、新しいバグもわかった。残っているバグを整理すると、
  1. 未実装の機能が残っている
    • YUV、ベイヤ配列→RGB変換
    • 自動ホワイトバランスの設定
    • フィーチャの絶対値(float値)制御
    • フォーマット7のサポート
  2. 動作中にケーブルを抜くとハングする(kIOTerminatedNotificationが通知されない)
  3. 最大フレームレートで転送していると10分ほどでストールする
はじめのふたつは先月のバージョンからそのまま。みっつめは今回400Mbits/sで動作するようになってはじめてわかった。低いフレームレートでは起こらない。フレームデータをスレッド間で受け渡しするところで問題を起こしているらしい。これはちゃんと時間をかけてデバグすれば必ず解決できるはず。でも今のところよくわからない。

それでも今回、それなりに完成度が上げることができたので、このバージョンを0.7Aとしよう。残った大型バグみっつが解決すれば晴れて1.0にできる。

X Codeプロジェクトとソースはこちらから

nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

献立04/15献立04/16 ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。