Operator CxpCamera

Operator Library: Hardware Platform

このオペレーターは、CXPカメラとVisualApplets間の画像データインターフェースを表します。このオペレーターは、シングルチャンネル、デュアルチャンネル、またはクアッドチャンネルのCXPインターフェースで使用できます。インターフェースのタイプは、ConnectionCount パラメータによって選択されます。カメラが配信するフォーマットに関係なく、オペレーターは常に未処理の画像データ(raw)を出力します。その後、この画像データをカメラから送信されたフォーマットに変換する必要があります。画像データを変換するには、未処理のバイト値をピクセル値に集約およびキャストするための適切なオペレーターを使用します。稼働中の特定の状況は、後述するようにイベントシステムを介して通知される場合があります。さらに、このオペレーターには、カメラとの接続ステータスを示すさまざまなパラメータがあります。

フレームが、CXP画像ヘッダーでカメラから通知されたサイズよりも大きいか小さいことをオペレーターが検出すすと、安全回路が作動します。その後、オペレーターは超過したピクセルとラインを切り捨てるため、VisualAppletsには常に画像ヘッダーで定義されたフレームサイズが認識されます。フレームの寸法が画像ヘッダーで指定されたものよりも小さい場合、オペレーターは受信したフレームを未定義データで埋めて、画像ヘッダーで定義された指定フレーム寸法を実現します。小さいフレームを埋めると、後続のフレームが失われる原因になることがあります。データの損失はイベントごとにソフトウェアにレポートされ、サイズの不一致もイベントを引き起こします。

ハードウェアプラットフォームで使用可能
imaFlex CXP-12 Penta
imaFlex CXP-12 Quad

VisualAppletsでのインスタンス化

オペレーターは出力 O に画像データを提供します。この出力は常時存在します。この標準出力ポートに加えて、CXPヘッダーのメタデータ用のオプションの MetaDataO 出力を設定できます。オペレーターのインスタンス化時に、次のポップアップダイアログが表示されます。

ここで、オプションのメタデータポートを指定できます。ポートの可用性を「0」(デフォルト)に設定した場合、ポートはオペレーター内に存在しません。ポートの可用性を1に設定すると、オペレーターインターフェースでメタデータポートを利用できるようになります。

オプションの MetaDataO ポート

32ビット出力のフォーマットを次の図に示します。

各CXPフレームには、対応するエラーのない画像ヘッダーが含まれています。画像ヘッダーが正しくない場合、イメージストリームデータはVisualAppletsパイプラインに供給されません。圧縮された画像ヘッダーは6ワードで構成されています。最後のバイトは追加情報用に使用され、内部使用のみを目的としています。特に、HeaderError ビットは、画像ヘッダー自体にエラーが発生したかどうかを通知します。

画像ヘッダー 説明
StreamId CXPストリームのID
Tag 16ビットのソース画像インデックス。転送された画像ごとにインクリメントされ、0xFFFFで0にラップアラウンドします。(マルチタップストリームの場合のように)同じ画像に関連するデータを含む各ストリームには、同じ番号を使用する必要があります。
XSize ピクセル単位の画像幅を表す24ビットの値。
XOff 完全なデバイス画像の左端のピクセルに対する、画像の水平方向のオフセットをピクセル単位で表す24ビットの値。
YSize 画像の高さを表すピクセル単位の 24 ビット値。ラインスキャン画像の場合、この値は 0 に設定されます。CameraScanModeパラメータには、この値から読み取られたカメラの種類が常に表示されます。O.Img Protocolが VALT_LINE1D に設定されている場合、YSize は処理時に無視され、オペレータは入力されたすべてのデータを無限の行ストリームとして出力します。画像プロトコルが VALT_IMAGE2D に設定されている場合も、YSize=0 は無限の行ストリームにつながります。
YOff デバイス全体の画像の最上行を基準とした、画像の垂直方向のオフセットをピクセル単位で表す24ビット値です。この値は、ラインスキャン画像の場合は0に設定されます。
DSizeL 画像ラインあたりのデータワード数を表す24ビット値です。
PixelF Pixel Formatを表す16ビット値です。
TapG タップジオメトリを表す16ビット値です。
Flags イメージフラグです。
x-Mirror (未使用)入力画像がX軸反転されているかどうかを示します。
y-Mirror (未使用)入力画像がY軸反転されているかどうかを示します。
HeaderError

1:画像ヘッダーにエラーがあり、フレームが失われたと判断されました。オペレータ出力データストリームに対応する画像データが存在しません。

0: 画像ヘッダーは正しく、対応する画像データがオペレータ出力データストリームに存在します。

[重要] 画像プロトコル:エリアおよびラインスキャンカメラ

画像プロトコルがカメラオペレーターの出力に与える影響は2種類あります。

  • CXPヘッダーからのYSize値(0=ラインスキャン、>0=エリアスキャン)。

  • オペレータ出力に設定されているプロトコルはO.Imgプロトコル(VALT_LINE1D = ラインスキャン、VALT_IMAGE2D = エリアスキャン)です。

CameraScanModeパラメータには、CXP ヘッダーから読み取ったカメラの種類が常に表示されます。O.Img Protocolが VALT_LINE1D に設定されている場合、YSize は処理時に無視され、オペレータは入力データをすべて無限の行ストリームとして出力します。イメージ プロトコルが VALT_IMAGE2D に設定されている場合、YSize=0 も無限の行ストリームとなり、結果としてO Max Img Height を超える画像が生成されます。画像が大きすぎると、設計内のCxpCameraオペレータに続くオペレータで未定義の動作が発生する可能性があります。これを回避するには、 SplitImageオペレータなどを使用して、入力行ストリームを複数の画像に分割することをお勧めします。

デバイスリソースの使用状況

オペレータは、パラメータConnectionCountの選択に応じて、 CameraPortタイプのリソースを 1 つ以上使用します。イベントシステムでは、 EventPortタイプのリソースが使用されます。ConnectionCountがX4 (クワッド チャンネル) に設定されている場合、リソース ダイアログは次のようになります。

[重要] 画像幅および画像高さの変更

出力リンクの最大画像幅と高さプロパティを使用することで、カメラ固有の設定に合わせて幅と高さを調整できます。ただし、オペレータポートOの最大画像幅は、ポートOの並列度で割り切れる必要があります。したがって、最大画像幅がポートOの並列度で割り切れることを確認してください。

エラーハンドリングとイベントシステム

オペレータが、受信した再構成フレームがCXPイメージヘッダーでカメラによって指定されたサイズよりも大きいか小さいかを検出すると、安全回路が作動します。オペレータは、超過したピクセルとラインを切り捨て、後続の処理パイプラインが常にイメージヘッダーで定義されたフレームサイズを認識するようにします。受信したフレームの寸法がイメージヘッダーで指定された寸法よりも小さい場合、オペレータは、イメージヘッダーで定義された指定されたフレーム寸法になるように、受信したフレームを未定義のデータで埋めます。小さいフレームを埋めると、後続のフレームが失われる可能性があります。その損失は、イベントごとにソフトウェアに報告されます(次の段落を参照)。サイズの不一致もイベントを引き起こします。

For a set of very critical errors, the operator will forward asynchronous events to the host runtime software (Framegrabber SDK). The event name in the Framegrabber API is <hierarchical operator name>\CxpStreamStatus, e.g. Device1\Process0\Camera\CxpStreamStatus. The event payload is provided as four 16-bit data words. The event format is defined as follows:

  • word [0]:

    • bits [0:15]: イベントが発生した CXP イメージタグ。

  • word [1]:

    • ビット[8:15]: イベントが発生したストリームID。

    • bits [0:7]: 予約済み、無視してください。

  • word [2]:

    • bit [0]: CRC エラーが発生しました。

    • ビット[1]:画像ヘッダーでストリームマーカーエラーが検出されました。

    • bit [2]: 修正できなかったイメージヘッダーのエラーが検出されました。

    • bit [3]: フレームサイズエラーが検出されました。つまり、CXP イメージヘッダーで定義された画像サイズが、送信されたパケットからの再構築フレームサイズと一致していません。これは、カメラがイメージヘッダーに1つの情報を記載しつつ、ヘッダーで通知されたデータ量とは異なる量を送信した場合に発生します。

    • bits [4:15]: 予約済み、無視してください。

  • word [3]:

    • bit [0]: イベントタイプ、0 = Corrupted Entity、1 = Lost Entity。

      • 破損したエンティティとは、エラーがフレーム内で発生し、そのフレームが既にソースされていることを意味します。 VisualApplets パイプライン。

      • 「エンティティ消失」とは、フレームが後続のオペレーターに転送される前にエラーが発生し、カメラオペレーターによってフレームが破棄されたことを意味します。

      • 破損したエンティティが検出されると、オペレータはCXPイメージヘッダー定義に従ってフレームを埋め、後続のオペレータが未定義の動作を引き起こさないようにします。この埋め込み中に新しいフレームが到着し、その後失われる可能性があります。カメラがフレームタグに従ってギャップのあるデータを送信した場合にも、エンティティ消失イベントが発生します。

    • bit [1]: Corrupted Entity タイプのイベントロスが発生しました。これは、Corrupted Entity タイプの先行イベントが失われたことを意味します。これは、ランタイムソフトウェアがイベントに応答せず、内部イベントキューが一杯になった場合に発生します。

    • bit [2]: Lost Entity タイプのイベントロスが発生しました。これは、Lost Entity タイプの先行イベントが失われたことを意味します。これは、ランタイムソフトウェアがイベントに応答せず、内部イベントキューが一杯になった場合に発生します。

    • bits [3:15]: 失われた Lost Entity イベントの量。

イベントには、破損したエンティティに関するイベントと、失われたエンティティに関するイベントの2種類があります。word 3 の bit 0 は、発生したイベントの種類を示します。イベントバッファがいっぱいになると、イベントが失われることがあります。破損したエンティティを示すイベントが失われた場合、word 3 の bit 1 が設定されます。失われたエンティティを示すイベントが失われた場合、word 3 の bit 2 が設定され、bit 3 から 15 にはフレームの損失を示す失われたイベントの数が提供されます。bit 2 が設定されているにもかかわらず Counter が 0 の場合は、Counter のオーバーフローが発生したことを意味します。

すべてのイベントによってソフトウェア割り込みが発生します。イベントの数を減らすため、同じフレームタグを持つ複数のイベントが統合される場合があります。その場合、一部のエラーフラグが結合されます。イベントが失われた場合、失われたイベントの前のイベントには失われたイベントに関する情報が含まれており、同じフレームタグを持つ後続のイベントと統合することはできません。

CRC エラーが原因で発生したイベントはフレームタグを報告しますが、これは CRC エラーが発生したフレームと正確には一致しない場合があります。フレームタグは、先行または後続のフレームのものである可能性があります。これは、カメラが 2 つ以上のフレーム間の移行を含む CXP パケットを送信する場合にのみ発生します。CRC の計算はパケットの終了時に終了しますが、ストリームデータはオンザフライで再構築されます。つまり、オペレータによって先行フレームがすでに送信された後に CRC エラーが検出されるという状況が発生する可能性があります。カメラパケットに進行中のフレームの終了部分と次のフレームの開始部分の両方のデータが含まれていない通常の状況では、CRC エラー時のフレームタグは常に正しくなります。完全なフレームストリームデータが最大パケットサイズの 8k 未満であるその他のすべての場合では、1 つのパケット内で 1 つのフレームがオーバーラップするだけです。その場合、ソフトウェアアプリケーションは、フレームタグ - 1 の先行フレームおよびフレームタグ + 1 の後続フレームも破損している可能性があると見なす必要があります。

I/O Property

Property 値
オペレータータイプ M
Output Links O, 画像データ出力
MetaDataO, オプションのメタデータ出力

サポートされているリンクフォーマット

Link Parameter Output Link O 出力リンク MetaDataO
Bit Width 32
Arithmetic unsigned unsigned
Parallelism auto 1
Kernel Columns 1 1
Kernel Rows 1 1
Img Protocol {VALT_IMAGE2D, VALT_LINE1D} (default: VALT_IMAGE2D)1 {VALT_IMAGE2D, VALT_LINE1D, VALT_PIXEL0D} (default: VALT_IMAGE2D)
Color Format VAF_GRAY VAF_GRAY
Color Flavor FL_NONE FL_NONE
Max. Img Width 任意(デフォルト: 1032) 6
Max. Img Height 任意(デフォルト: 1032) 1

1

O.Img Protocol が VALT_LINE1D に設定されている場合、CXP ヘッダーの YSize 値は処理で無視され、オペレータはすべての受信データを終わりのないラインストリームとして出力します。画像プロトコルが VALT_IMAGE2D に設定されている場合、YSize=0(ラインスキャンカメラ)も終わりのないラインストリームにつながり、その結果、O.Max.Img.Height を超える画像が生成されます。

パラメーター

ConnectionCount
タイプ 静的書き込みパラメータ
Default X1
範囲 {X1, X2, X4}

パラメータ ConnectionCount は、CXPリンクに集約されるCXPレーンの数を定義します。使用される接続ポートのインデックスは、CameraPort 型のリソースによって処理されます。ポートリソースの数は接続数と一致します(例: X2: 2つの CameraPort リソースアイテム)。

複数の CxpCamera オペレーターをインスタンス化する場合(デュアルカメラアプレットなど)、同じインデックスを持つ複数のリソースが使用される場合や、消費される CameraPort リソースの数が最大値の4を超える場合に、リソース競合が発生する可能性があります。この場合、デザインルールチェックによってエラーが報告されます。

ResetStatus
タイプ 動的書き込みパラメータ
Default Off
範囲 {Off, On}

パラメータ ResetStatus は、カメラの統計情報、つまりエラーカウンターをリセットします。

UsedConnections
タイプ 動的読み取りパラメータ
Default
範囲 {1,2,4}

パラメータ UsedConnections は、実行時に検出ソフトウェアによって構成されたCXPレーンの量を示します。

PacketTagErrorCount
タイプ 動的読み取りパラメータ
Default
範囲 [0 : 8191]

パラメータ PacketTagErrorCount は、CXP 標準に従って予期されるタグに準拠していないタグを持つ受信パケットの数を示しています。具体的には、この値は、後続のストリームパケットタグ列挙でギャップが観察されたときにカウントアップします。パラメータは 13 ビット幅で、[11:0] ビットが実際の Counter 値を表し、[12] ビットが Counter オーバーフローを表します。オーバーフロービットが設定されている場合、Counter 値は don't care として扱われます。

ImageTagErrorCount
タイプ 動的読み取りパラメータ
Default
範囲 [0 : 8191]

このパラメータは、画像ヘッダータグ、CXP規格で期待されるタグ、および受信したタグの間でいくつの不一致が発生したかをカウントします。このパラメータは13ビット幅であり、ビット [11:0] が実際のCounter値を示し、ビット [12] がCounterのオーバーフローを表します。オーバーフロービットがセットされている場合、Counter値は無視して構いません(don't care)。

StreamIdErrorCount
タイプ 動的読み取りパラメータ
Default
範囲 [0 : 8191]

このパラメータは、ストリームパケット内の受信ストリームID値が画像ヘッダーで指定されたストリームID値と一致しない頻度をカウントします。このパラメータは13ビット幅であり、ビット [11:0] が実際のCounter値を示し、ビット [12] がCounterのオーバーフローを表します。オーバーフロービットがセットされている場合、Counter値は無視して構いません(don't care)。

CorrectedErrorCount
タイプ 動的読み取りパラメータ
Default
範囲 [0 : 8191]

このパラメータは、画像ヘッダーまたはラインマーカーで検出されたエラーのうち、いくつが修正されたかをカウントします。このパラメータは13ビット幅であり、ビット [11:0] が実際のCounter値を示し、ビット [12] がCounterのオーバーフローを表します。オーバーフロービットがセットされている場合、Counter値は無視して構いません(don't care)。

UncorrectedErrorCount
タイプ 動的読み取りパラメータ
Default
範囲 [0 : 8191]

このパラメータは、同じバイト内の複数ビットエラーが原因で、画像ヘッダーまたはラインマーカーで検出されたエラーのうち修正できなかったものをカウントします。このパラメータは13ビット幅であり、ビット [11:0] が実際のCounter値を示し、ビット [12] がCounterのオーバーフローを表します。オーバーフロービットがセットされている場合、Counter値は無視して構いません(don't care)。

PacketBufferOverflowCount
タイプ 動的読み取りパラメータ
Default
範囲 [0 : 8191]

このパラメータは、アグリゲーションモードでのチャンネルボンディングにおいて、パケットバッファオーバーフローがどのくらいの頻度で発生するかをカウントします。このパラメータは、ConnectionCount = X2 または X4 の場合にのみ関連します。このパラメータは13ビット幅であり、ビット [11:0] が実際のCounter値を示し、ビット [12] がCounterのオーバーフローを表します。オーバーフロービットがセットされている場合、Counter値は無視して構いません(don't care)。

PacketBufferOverflowSource
タイプ 動的読み取りパラメータ
Default
範囲 [0x0 : 0xf]

このパラメータは、可能性のある4つのCXPチャンネルのうち、どのチャンネルでパケットバッファオーバーフローが発生したかを照会するためのビットマスクを実装します。パラメータの幅は ConnectionCount パラメータによって異なります。X1 モードではパラメータ幅は1ビット、X2 モードではパラメータ幅は2ビット、X4 モードではパラメータ幅は4ビットです。順序は、LSB = 最低のCXPチャンネル番号、MSB = オペレーターによって割り当てられた最高のCXPチャンネル番号となります。

CameraScanMode
タイプ 動的読み取りパラメータ
Default
範囲 {area,line}

受信した画像ヘッダーには、ストリームがエリアスキャンアプリケーション(YSize > 0)用かラインスキャンアプリケーション(YSize = 0)用かに関する情報が含まれています。このパラメータは、最後に有効な受信ストリーム画像ヘッダー情報を示します。

MarkerErrorCount
タイプ 動的読み取りパラメータ
Default
範囲 [0 : 8191]

このパラメータは、CXPストリームマーカーとヘッダーまたはラインマーカーのシーケンスが不正であった回数をカウントします。このパラメータは13ビット幅であり、ビット[11:0]が実際のCounter値を表し、ビット[12]がCounterのオーバーフローを示します。オーバーフロービットが設定されている場合、Counter値は無視するものとして扱われます。

UnexpectedStartupData
タイプ 動的読み取りパラメータ
Default
範囲 {false, true}

このパラメータは、オペレーターリセット後の最初的数据値が予期しないものであった、つまり事前に画像ヘッダーを受信していなかったというエラー状況を検出します。この状況は、カメラのバグのある実装、フレームグラバーのファームウェア、または検出手順の誤ったソフトウェア制御が原因で発生する可能性があります。また、理論的にはカメラのハードウェアの欠陥によってもこの状況が発生する可能性があります。

FrameLostCount
タイプ 動的読み取りパラメータ
Default
範囲 [0 : 33554431]

このパラメータは、取り込み中に失われ、VisualAppletsパイプラインに送信されなかったフレームをカウントします。画像ヘッダーのエラーが検出された場合や、フレームが別のフレームと重なる場合にフレームが失われます。このパラメータは25ビット幅であり、ビット[23:0]が実際のCounter値を表し、ビット[24]がCounterのオーバーフローを示します。オーバーフロービットが設定されている場合、Counter値は無視するものとして扱われます。

FrameCorruptedCount
タイプ 動的読み取りパラメータ
Default
範囲 [0 : 33554431]

このパラメータは、取り込み中の破損したフレームをカウントします。破損したフレームとは、エラーピクセルが含まれており、VisualAppletsパイプラインに送信されるフレームのことです。このパラメータは25ビット幅であり、ビット[23:0]が実際のCounter値を表し、ビット[24]がCounterのオーバーフローを示します。オーバーフロービットが設定されている場合、Counter値は無視するものとして扱われます。

使用例

オペレータ CxpCamera の使用方法を以下の例に示します。