a-mizutani
2015年9月9日 17時22分
お世話になっています、ディテクトの水谷と言います
Armadillo-840を使っています
CON8ポート(カメラ)に接続するコネクタを作って、FPGA基板と接続しています
OV772のドライバがデフォルトでついていたので、I2Cのレジスタを偽装して、カメラ信号を生成してやる事で
640x480(or320x240)の画像転送は出来ました
FPGAからの出力は、もう少し大きな画面サイズで出したいと思っています
色々知識が足りないので、次の様な事を考えています
1.他のカメラのデバイスドライバを探し、そちらを偽装する
2.カメラのデータ線をIOポートとみなして、GPIOとしてFPGAと通信する
3.デバイスドライバを自分で作る
4.その他
1.はフレキシビリティが制限んされてしまう
2.は
カラーモノクロや、8bit/12bit等を切り替えるので2のGPIO方式でFPGAからデータを吸い出せれば
その後はいかようにでも出来ると思っているのですが、ピンへのアクセス方法が分かりません
3.はちょっとボリュームが大きすぎる
4.実は汎用的にカメラを制御する方法は、考えなくてももう確立されていたりしないかと願ってます
何か良い知恵は無いでしょうか?
コメント
a-mizutani
at_kojiro.yamada
2015年9月10日 17時24分
試すだけであれば、
OV772のデバイスドライバーに手を加えるのが早いかと思います。
linux-3.4-at/drivers/media/video/ov772x.cを見ると、
737行目、ov772x_select_win()で解像度を決めているのがわかります。
ov772x.cでは、ov772x_win_size 構造体に解像度情報をまとめており、
これのポインタを返すことで関数の呼び出し元に解像度を伝えています。
解像度情報は、507行目から
ov772x_win_qvga
ov772x_win_vga
の2つがグローバル変数として定義されています。
環境がないので試してはいませんが、
1. FPGA側が転送する画像と同じ解像度情報をグローバル変数で追加し、
2. ov772x_select_win()で追加した解像度情報のポインタを返すようにすれば、
その解像度で画像が取り込めるようになるはずです。
後は、ユーザーランド側で画像の解像度を指定して、画像を取得します。
V4L2 APIを直接利用[1]しているのであれば、
ioctl()でVIDIOC_S_FMTを発行する際、解像度を指定すれば良いです。
[1] http://manual.atmark-techno.com/armadillo-810/armadillo-810_product_man…