IC Imaging Control 3.x C++クラスライブラリからの移行
このセクションでは、IC Imaging Control 3.x C++クラスライブラリのユーザーの視点からIC Imaging Control 4 C++ライブラリに関する情報を記載しています。
主な違い
IC Imaging Control 4 C++クラスライブラリは、IC Imaging Control 3.xクラスライブラリの精神的後継ですが、ソースコードの互換性はありません。ビデオフォーマットや固定フレームレートといった、多くのDirectShow特有の概念のサポートは廃止されました。フレームフィルタやデベイヤー設定といった、あまり使用されない機能も削除されました。
IC Imaging Control 4 C++クラスライブラリは、WindowsおよびLinuxの複数のプラットフォームで利用可能です。
IC Imaging Control 3.x C++クラスライブラリはDirectShowデバイスをサポートしていましたが、IC Imaging Control 4 C++クラスライブラリはマシンビジョン標準であるGenICam GenTLをドライバインターフェースとして使用します。これにより、非同期デバイスイベントやチャンクデータといった高度なカメラ機能を使用できます。
移行のヒント
引き継がれた概念
Grabber
バージョン3.xのGrabberクラスと同様に、ic4::Grabberクラスは、開かれたビデオキャプチャデバイスと、有効化される可能性のあるそのデータストリームを表します。
変更された概念
Device Enumeration(デバイス列挙)
IC Imaging Control 4 C++クラスライブラリは、デバイス名のフラットなリストを提供する代わりに、デバイスエニュメレータクラス(ic4::DeviceEnum)を提供します。
デバイスエニュメレータを使用することで、ビデオキャプチャデバイスを列挙し、ic4::DeviceInfoを通じてデバイス情報を公開できます。また、GigE VisionやUSB3 Visionデバイスが接続されているネットワークアダプターやUSBコントローラーに関する情報など、システムトポロジーに関する情報も提供します。
デバイスプロパティ
VCDPropertyインターフェースは、新しいオブジェクト指向APIに置き換えられました(デバイスプロパティへのアクセスを参照)。デバイスドライバはGenICamを介してプロパティインターフェースを記述するため、新しいプロパティAPIは説明、表示名、単位など、プロパティに関する豊富な情報を提供できます。
さらに、プロパティは値や利用可能性といった側面が変化した際に、プログラムに通知するコールバックメカニズムを提供します。
ビデオフォーマット、ビデオ規格、フレームレート
ビデオフォーマットやフレームレートを列挙するためのAPI関数は廃止されました。代わりに、画像サイズとフレームレートはWidth、Height、AcquisitionFrameRateデバイスプロパティを使用して設定されます。
ビデオファイル
ビデオエンコーディング機能はGrabberから分離されました。代わりに、ic4::Sinkを使用してキャプチャされた画像を保存するには、ic4::VideoWriterオブジェクトを作成してください。
Display
バージョン3.xでは、DisplayはGrabberの暗黙的な一部でした。IC 4.0では、ic4::Displayを作成し、ic4::Grabber::streamSetup()の呼び出し時にデータストリームへアタッチする必要があります。Displayは、選択されたic4::ImageBufferオブジェクトの手動表示にも使用できます。
名称変更された概念
ライブモード
3.xでライブモードに関連していたGrabberの関数は、2段階の初期化(まずデータストリームを確立し、次に画像取得を開始する)からなるGenICam GenTLの命名規則に合わせて改名されました。
Grabber::prepareLiveはおおむね ic4::Grabber::streamSetup() に相当します。Grabber::startLiveはおおむね ic4::Grabber::acquisitionStart() に相当します。Grabber::suspendLiveは ic4::Grabber::acquisitionStop() に相当します。Grabber::stopLiveは ic4::Grabber::streamStop() に相当します。Grabber::isLiveは ic4::Grabber::isAcquisitionActive() に相当します。
データ型
FrameTypeInfoは ic4::ImageType に置き換えられました。IFrame/FrameQueueBufferの役割は ic4::ImageBuffer オブジェクトが担います。以前のFrameTypeInfoの一部の側面(例えばバッファサイズ)は、現在ではImageBuffer自体の一部になっています(ic4::ImageBuffer::bufferSize())。VideoCaptureDeviceItemは ic4::DeviceInfo に置き換えられました。FrameQueueSinkは ic4::QueueSink に置き換えられ、動作が若干変更されています。FrameSnapSinkは ic4::SnapSink に置き換えられ、動作が若干変更されています。
プロパティAPI
IVCDPropertyItemsは ic4::PropertyMap に置き換えられました。IVCDRangePropertyは ic4::PropInteger に置き換えられました。IVCDAbsValPropertyは ic4::PropFloat に置き換えられました。IVCDMapStringsPropertyは ic4::PropEnumeration に置き換えられました。IVCDSwitchPropertyは ic4::PropBoolean に置き換えられました。


