最近、本業やら何やら忙しくて、久しぶりの更新です。
何やら大げさなタイトルですが、CameraLinkの画像データの取扱いで、
RGB10bit(計30bit)の場合の内訳が判らずに苦労した、というお話。
今回、初めてAVALDATAという会社のボードを使いました。 www.avaldata.co.jp
APX-3323というCameraLinkボードです。
http://www.avaldata.co.jp/products/z2_imaging/apx3323/apx3323.html
SDKは"SDK-Acaplib2" というやつで、下記よりダウンロード可能。
http://www.avaldata.co.jp/download/download/dlmrc.php?shurui=software#image
RGB 10bit用の設定ファイルを作る
Acaplib2をインストールすると、インストールフォルダ下位の"IniFile"フォルダ内に
各カメラメーカー毎に設定ファイル(iniファイル)もインストールされます。
今回使いたいカメラのファイルも有ったのですが、RGB8bit用だったので、
それを10bit用に変更します、下記の”AIPTool”を使用しました。
”Camera Data"で、カメラの出力bit数を変更します。
ここが元のRGB8bit用では24だったので、30(RGB10bit)に変更します、
すると”Capture Data”の項目も、自動的に24→32に更新されます。
CaptureDataはボードから出力されるデータのbit数で、Camera Dataを変更すると、
それに合わせて最適な出力bit数を、Toolの方で設定してくれるようです。
ちなみに”shift”はデータの右シフト量(bit数)で、例えば2に設定した場合、
RGB各10bitの上位8bit分だけを出力する(CaptureDataも24のままで済む)
と言った芸当が出来るようですが、今回は使用しないので0のままにしました。
RGBのデータ並びはどうなっている?
カメラ出力24bit(RGB8bit)は、ボード出力もそのまま24bitで簡単なのですが、
カメラ出力30bit(RGB10bit)は、ボード出力が32bitとなります。
この32bitに、どうRGB各10bitが割り振られて出力されるのか?で悩みました、
ボードやSDKのマニュアルなど調べたけど載っていない、うーん困った。
(私が調べ切れていないだけで、どこかに情報有ったのかもしれませんが)
結局、カメラをテストパターン出力状態にして、内作ソフトのBuffer内を
デバッガで確認したところ、どうやら下記の並びになっているようです。
右詰めで下位からBGRの順番に各10bitずつ(最上位の2bitは未使用)
ということで、無事にRGB各データを取り込むことが出来ました。
別のボードメーカーでは、こういうパターンも有るようです。
RGBの並び順が違うのはさておき、まずRGB10bitの各上位8bitが並び、
残りの下位2bitずつ計6bitを、4Byte目に入れています。
これは実データが10bitの場合でも、パソコン画面用には下位の3Byte分だけ読めば
簡単に表示出来ますよ、ということらしいです、さっきのshiftと同様の手法ですね。
ちなみにDalsaのSaperaLTというSDKでは、マニュアルに下記の説明が有ります。
結果的にですが、今回のAVALDATAもDalsaと同じ並びだったことが判りました。
PFNCみたいなことは出来ないのか?
以前GenICamネタでPFNCという規格が出てきました、この規格書を見ていくと、
上記と同じようなデータ並びの説明が出てきます。(以下PFNC規格書から抜粋)
"RGB10p32" というPixelFormat、先ほどのDalsaやAVALDATAと比べると、
RとBの位置が逆ですが、データの並びは同じになっています。
"RGB10g32"、何とこれは、先ほどの二つ目と全く同じでした!
PFNCはカメラのPixelFormatの規格なので、正確には意味合いが違うのですが、
CameraLinkのデータ形式でも、こういう統一した名称みたいなものが有れば、
もっと簡単に色々なボードを利用出来るのになあ、と感じた次第です。