v24.9.6861

最初にお読みください


浜松ホトニクス(以下HPK)はこの文書およびサンプルコードの著作権を持っています。この文書は DCAM-SDK に含まれ、DCAM-API を利用するアプリケーションを作成する開発者は参照できます。
この文書とサンプルコードは上記目的のためにのみ公開され、 開発者はこの書類およびサンプルコードに対して、ライセンス/譲渡などの権利を有しません。
この書類に基づいて開発されたソフトウエアを使って発生するいかなる損害は開発者の責任です。
この書類には技術的または記述上の誤りが含まれる可能性がありますが、HPKはそれらに伴う損害を補償しません。
HPKはこの書類に含まれる情報が更新された場合の通知は行いません。
ブランド名ならびに製品名は商標または登録商標です。
HPKの許可無く、本書類の一部または全部の、複製/翻訳/意訳を認めません。

このチャプターの先頭へ戻る


概要


DCAM-API
DCAM-API は浜松ホトニクス社製の科学計測用デジタルカメラ(以下、デバイス)をパソコンの応用ソフトウエアから制御する為の関数群です。 DCAM-API のインストーラは Web サイト www.dcamapi.com からダウンロード可能で、DCAM-APIの核となるカーネルドライバやDCAMモジュールから構成されます。インストーラはそれぞれのインターフェース毎に用意されています。インストール時にはDCAMモジュールを管理するマネージャーもインストールされ、異なるデバイスを透過的に操作する事ができます。

SDK
DCAM-APIソフトウエア開発キット(以下SDK)は応用ソフトウエアの開発者に、DCAM-APIを使用する為に必要な資料を提供します。
SDKはヘッダファイル、ライブラリファイル、DCAM-APIの関数説明書ならびにDCAM-APIを利用するサンプルプログラムのソースコードで構成されます。SDKのユーザは一部を変更して利用したり、全く新しいソフトウエアを作ったり、出来上がったバイナリファイルを公開することができます。しかしながら以下の事は許されていません。1) 浜松ホトニクス株式会社からSDKとして受け取った資料の公開/提供。2) ほとんどDCAM-APIと同じであるwrapperモジュールを外部に提供。

Concept
DCAM-APIのコンセプトは開発自身を簡単にする事です。この為、異なるデバイスの同じ機能の制御方法は共通であり、提供される機能は取り込みやデバイスの制御が中心になっています。つまり画像表示の為のAPIやGUI制御部分は存在しません。これにより、必要となる関数は最小限に押さえられています。また様々な環境で使用できるように呼び出し形式はC言語を採用しています。

このチャプターの先頭へ戻る


全般


ハンドルに関するルール
HDCAM
HDCAM ハンドルは DCAM-API が対象とするデバイスを指定する際に使用します。ほとんどの DCAM-API 関数で使用します。DCAM-APIの初期化後 dcamdev_open() 関数で取得でき、使い終わったら dcamdev_close() 関数で解放します。

HDCAMWAIT
HDCAMWAIT ハンドルはデバイス等から送られるイベントを待つ為のハンドルです。dcamwait_open() 関数で生成され、dcamwait_ で始まる関数群で使用します。

HDCAMREC
HDCAMREC ハンドルは画像を専用形式のファイルへ保存する際に使用するハンドルです。dcamrec_open() 関数で生成され、dcamrec_ で始まる関数群で使用します。


関数に関するルール
関数名
全てのDCAM-APIの関数名は小文字で構成され、dcamで始まります。関数のグループに基づいた接頭子が用意されています。
接頭子一覧表
接頭子 関数名 対象
dcamapi_ init, uninit DCAM-API全体
dcamdev_ open, close, getcapability, getstring, setdata, getdata DCAMのデバイス自身
dcambuf_ alloc, attach, release, lockframe, copyframe, copymetadata 画像取り込みバッファ
dcamcap_ start, stop, status, transferinfo, firetrigger, record 画像取り込み
dcamwait_ open, close, start, abort イベント待機
dcamrec_ open, close, pause, resume, status, lockframe, copyframe, writemetadata, lockmetadata, copymetadata, lockmetadatablock, copymetadatablock レコーディング

関数引数
dcamapi_で始まる関数とopen系の関数を除く全ての関数は、第一引数がハンドルです。 dcamwait_系の関数はHDCAMWAITを、dcamrec_系の関数はHDCAMRECを、それ以外のDCAM関数はHDCAMを第一引数になります。 いくつかの関数は、引数を設定する必要があります。中には引数として構造体のポインタを渡すものもあります。 構造体の場合、メンバ変数のsizeに構造体のサイズを、入力しないメンバ変数には0を入力して初期化をする必要があります。

関数戻り値
すべての関数は成功時を除いてDCAMERR型で定義されるエラー値を返します。 成功すると基本的にDCAMERR_SUCCESSが返りますが、一部の関数は異なる正の値を返します。 それらの値は処理結果を示しており、値が不定のため、DCAMERRで定義されていません。 関数が成功したかどうか確認するには、failed()関数を使用します。 この関数は、引数がエラー値であるときTRUEを返します。


プロパティ
DCAMにおけるプロパティとは?
プロパティはデバイスのパラメータを意味します。ホストソフトウエアは dcamprop_ で始まる関数を使って、パラメータの取得、設定、問い合わせができます。 それぞれのプロパティは個別のIDを持っています。プロパティの値は常にdouble型の値で操作します。 それぞれのプロパティは個別の名前や属性、最小値、最大値、ステップ、デフォルト値を持ちます。 プロパティによっては列挙型の値を持つことがあり、それらには文字列が用意されています。

プロパティ値の型
プロパティの値には3種類(MODE型、LONG型、REAL型)あります。制御時にはdouble型の値を使いますが、LONG型やMODE型は整数値として扱われます。 LONG型やREAL型の場合は数値としての意味がありますが、MODEの場合は数値としての意味はありません。 MODE型の場合、全ての値に対応する文字列が用意されており、ホストソフトウエアはその文字列を表示する事でユーザが用意に選択できるようになります。 LONG型やREAL型は、値に対応する文字列が用意されている物もあります。
プロパティ値の型
プロパティ型 識別子
MODE DCAMPROP_TYPE_MODE
LONG DCAMPROP_TYPE_LONG
REAL DCAMPROP_TYPE_REAL
ホストソフトウエアがプロパティ値の型を確認する場合は、 DCAMPROP_ATTR構造体のattributeメンバの値に対してDCAMPROP_TYPE_MASKでマスクする事で識別できます。 全てのプロパティはいずれかの型を持ちます。しかしプロパティ値の型は将来のDCAM-APIのバージョンによっては変更される可能性があります。 ホストソフトウエアはDCAMPROP_ATTR構造体の値を利用してメンバの型を確認する事が推奨されます。 デフォルト値や値域もDCAMPROP_ATTR構造体を通して取得できます。

プロパティ属性
プロパティには"属性"があります。属性はプロパティの特性を示します。以下の属性はDCAMPROP_ATTR構造体の"attribute"メンバで確認する事ができます。
DCAMPROPATTRIBUTEフラグ
DCAMPROP_ATTR_ 説明
READABLE 値を読み出す事ができます。ほとんどのプロパティがこの属性を持ちますが、"アクション"系はこの属性を持ちません。
WRITABLE 値を書き込む事ができます。情報系のプロパティなどではこの属性を持ちません。
AUTOROUNDING 正確な値を書き込まれなかった場合、値は調整されます。通常指定された次に大きい値が選ばれます。最大値より大きな値の場合は最大値になります。MODE型のプロパティではこのフラグが立つことはありません。
STEPPING_INCONSISTENT "step"値が、設定可能領域の全域で一定ではない事を意味します。
VOLATILE プロパティの値がデバイス側で変更される事があります。温度ステータスはその一つです。
DATASTREAM 値を変えると画像フォーマットに影響します。
ACCESSREADY READYステータス中に値を変更できます。この属性が無い場合、READY中に値を変更する事はできず、DCAMERR_NOTSTABLEのエラーが返ります。
ACCESSBUSY BUSYステータス中に値を変更できます。この属性が無い場合、BUSY中に値を変更する事はできず、DCAMERR_BUSYのエラーが返ります。

Array
プロパティは同一の機能で複数の値を持つ事があります。マルチサブアレイなどが該当します。DCAMではこの種類のプロパティをArrayと呼びます。arrayの要素はそれぞれ違うプロパティIDを持っています。インデックス0の要素が基準のIDになります。 ホストソフトウエアはArrayプロパティのベースIDを列挙でき、アレイの要素についても列挙することができます。DCAMPROP_ATTR構造体の"attribute2"メンバで以下の属性からアレイの情報を確認する事ができます。
DCAMPROPATTRIBUTE2フラグ
DCAMPROP_ATTR_ 説明
ARRAYBASE Arrayとして他にプロパティがある事を示します。Arrayの先頭要素である事を示します。
ARRAYELEMENT Arrayの要素である事を示します。
プロパティの属性は通常デバイスに寄りません。しかしデバイス毎で異なるものもあります。 ホストソフトウエアはプロパティの属性が共通だと想定してはなりません。 例えばDCAM_IDPROP_SENSORTEMPERATURETARGETは設定できるデバイスもあれば、できないデバイスもあります。


コンパイルオプション
_LINK_DCAMAPI_LIB
Microsoft社のVisual Studioを利用する際、dcamapi.hを#includeする前にこの識別子を定義しておくとdcamapi.libファイルのリンクが指定されます。 但し、ライブラリファイルのフォルダを指定していないので、あらかじめライブラリフォルダを指定しておくか、プロジェクトファイルに記載する必要があります。

このチャプターの先頭へ戻る


呼び出し順


初期化と終了処理と HDCAM ハンドル
初期化
DCAM-APIを使用する場合、まず最初に dcamapi_init() 関数を呼びます。 続いて dcamdev_open() 関数で HDCAM ハンドルを入手します。
dcamapi_init() 関数は DCAMAPI_INIT 構造体を引数に指定します。 DCAMAPI_INIT 構造体の中には特殊な初期化オプションを指定することができます。 dcamapi_init() 関数は必要に応じてドライバを初期化し、成功すると、DCAMAPI_INIT 構造体のiDeviceCountメンバに使用可能なデバイスの総数が設定されています。
dcamdev_open() 関数は DCAMDEV_OPEN 構造体を引数に指定します。 DCAMDEV_OPEN 構造体では index メンバで複数接続されているデバイスの中(0~DCAMAPI_INIT::iDeviceCount-1)から一つを指定することができます。 dcamdev_open() 関数はデバイスを初期化し、成功すると、DCAMDEV_OPEN 構造体の hdcam メンバに、対応するデバイスの HDCAM ハンドルが設定されています。

終了処理
dcamdev_close() 関数は HDCAM ハンドルで指定されたデバイスの終了処理を行います。 HDCAM ハンドルは解放されるので、使えなくなります。 再度デバイスを制御する場合には、再び dcamdev_open() を呼んでください。 この時得られる HDCAM ハンドルは以前に獲得したものと異なる場合があります。 dcamapi_uninit() 関数はモジュールを解放し DCAM-API 自身の使用を完了します。

HDCAM ハンドル
DCAM-API のほとんどの関数は、HDCAMハンドルを引数として必要とします。 HDCAM ハンドルは制御対象とするカメラを指定する為に使われ、dcamdev_open() 関数で得られます。

デバイスとDCAM情報の取得
dcamdev_getstring() 関数を使用すると、デバイスの型名やファームウエアのバージョン、DCAM-API のバージョンなどを得る事ができます。 DCAM_IDSTR 一覧表を参照ください。


プロパティ入出力
アクセス方法
DCAMのプロパティはデバイスや関連するハードウエアのパラメータです。 ホストソフトウエアは指定したプロパティIDのプロパティ値を取得、設定することができます。 プロパティIDを得るには二通りの方法があります。 一つは、dcamprop.hで定義済みのプロパティIDを直接使うことです。 このヘッダファイルは多数のDCAMプロパティIDを定義しています。 デバイスによっては、サポートされていないプロパティがあるので注意が必要です。 直接プロパティIDを指定する場合は、事前にデバイスがサポートしているプロパティかどうか確認してください。 もう一つの方法は、"列挙"によりプロパティIDを得る方法です。 DCAM-APIではご使用のデバイスがサポートしているプロパティIDを列挙する方法を用意しています。 プロパティの情報を得るにはdcamprop_getattr()関数も用意しています。 この関数はDCAMPROP_ATTR構造体を引数とし、値の型や範囲、様々な属性を返します。

値の取得、設定、確認
プロパティの値は、dcamprop_getvalue()関数で取得、dcamprop_setvalue()で設定する事ができます。 dcamprop_setgetvalue()関数は、新しい値を設定した後、実際に設定された値を返します。 dcamprop_queryvalue()関数は、設定された値の前の値や次の値を得られます。

列挙、プロパティ名や値の文字列
dcamprop_getnextid()関数は、デバイスでサポートしている次のプロパティIDを返します。 この関数を使うと、デバイスがサポートしている全てのプロパティIDを取得することができます。 また、ある値を設定することで、情報が更新されたプロパティIDのみを取得することもできます。 ただし、Arrayプロパティの要素は取得できません。 Arrayプロパティの要素を取得するためには、先頭要素のアトリビュートの情報を使う必要があります。 Arrayプロパティの先頭要素はdcamprop_getnextid()で取得することができます。 dcamprop_getname()関数はプロパティ名を文字列で返します。 dcamprop_getvaluetext()関数はDCAMPROP_VALUETEXT構造体を使って、指定されたプロパティ値に対応する文字列を返します。


取り込みバッファ制御
準備と解放
画像を取得する為には、ホストソフトウエアはバッファ準備する必要があります。二通りあります。 一つ目の方法はdcambuf_alloc()関数を使います。これはDCAMモジュール内でバッファが確保されます。 デバイスから画像を受け取るには最も効率が良いですが、ホストソフトウエアがデータにアクセスするには、dcambuf_lockframe()関数を呼ぶか、dcambuf_copyframe()関数を呼んで、データをコピーする必要があります。 二つ目の方法はdcambuf_attach()関数を使って、ホストソフトウエアで確保されたメモリを割当てます。 この場合画像はホストソフトウエアのメモリに直接書き込まれます。 この為、ホストソフトウエアはdcambuf_lockframe()関数やdcambuf_copyframe()関数を呼ぶ必要がありません。 但し、デバイスによっては標準的なデータ型がサポートされていない可能性があります。 この場合、DCAMモジュールがデータを変換するので場合によってはdcambuf_alloc()関数を使用する場合よりパフォーマンスが劣る場合があります。 画像を取得する前にホストソフトウエアはdcambuf_alloc()関数かdcambuf_attach()関数のいずれかを呼ぶ必要があります。 画像の取得が終了し、ホストソフトウエアが画像データを必要としなくなったら、ホストソフトウエアはdcambuf_release()関数を呼ぶ事で、dcambuf_alloc()関数で確保された内部バッファを解放し、dcambuf_release()関数で行われた関連付けを解放する事ができます。

lockframeとcopyframe
ホストソフトウエアがdcambuf_alloc()関数を使って画像バッファを確保した場合、 取り込まれた画像データにアクセスする為にはdcambuf_lockframe()関数かdcambuf_copyframe()関数を使います。 dcambuf_lockframe()関数は、画像データのポインタを返し、ホストソフトウエアはそのポインタから画像にアクセスすることができます。 この関数内で、DCAMモジュールは画像を必要な変換を行いながら一次バッファから内部バッファにコピーします。 一次バッファとはハードウエアや低レベルのドライバが直接画像を受け取るバッファの事です。 dcambuf_copyframe()関数はDCAMが管理している一次バッファから、DCAM_FRAME構造体で指定されたホストソフトウエアが管理しているバッファにコピーを行います。

メタデータ
DCAM-APIでは3種類のメタデータをサポートしています。TIMESTAMP、FRAMESTAMPそしてCAMERASTAMPです。 TIMESTAMPは画像毎の取り込みタイミングを意味します。詳細なタイミングはハードウエアによって異なります。 例えば、カメラ自身が画像の読み出し開始タイミングを計測・出力できる場合もありますし、DCAMモジュールが計測する場合もあります。 どのレベルで計測されているかはDCAM_IDPROP_TIMESTAMP_PRODUCERプロパティの値から判断できます。 どのタイミングで計測されているかはDCAM_IDPROP_TIMING_TIMESTAMPプロパティの値から判断できます。 FRAMESTAMPは画像番号を意味します。画像が読み出される度に一つずつ増えます。CAMERASTAMPはホストソフトウエアがカメラに対して設定した識別値です。 これら3つのメタデータはdcambuf_lockframe()関数かdcambuf_copyframe()関数で取得することができます。メタデータは、関数の引数であるDCAMBUF_FRAME構造体に格納されます。ホストソフトウエアはdcambuf_attach()のオプションにDCAMBUF_ATTACHKIND_TIMESTAMPを設定することでもTIMESTAMPを取得することができます。この場合、ユーザが確保したメモリに対して、DCAMモジュールがTIMESTAMPを直接書き込んでいきます。また、dcambuf_copymetadata()でもDCAM_TIMESTAMPBLOCK構造体を使うことで一度に複数のTIMESTAMPを取得することができます。

フレームバンドル時のバッファ格納例
DCAM_IDPROP_FRAMEBUNDLE_MODEを有効にした場合、dcambuf_attach::iKindに設定した値によって、DCAMBUF_ATTACH::bufferの情報へのアクセス方法が異なるケースがあります。 dcambuf_attach::iKind=DCAMBUF_ATTACHKIND_FRAMEを指定した場合、DCAM_IDPROP_FRAMEBUNDLE_NUMBERで指定された数のイメージ情報(バンドルされた画像)が上図のように格納されます。 一方、dcambuf_attach::iKind=DCAMBUF_ATTACHKIND_PRIMARY_TIMESTAMP/FRAMESTAMPを指定した場合、メタデータは下図のように格納されます。 この場合、nNewestFrameIndexを使って各フレームの bufferIndexの先頭アドレスへアクセスするには、nNewestFrameIndex*FRAMEBUNDLE_NUMBERをDCAMBUF_ATTACH::buffercountで割った剰余を使います。


取り込み制御
取り込み開始と停止
ホストソフトウエアがdcamcap_start()関数を呼ぶことで、画像の取り込みが開始されます。例えば、dcambuf_alloc()関数が呼ばれていないような、ドライバが取り込みを開始する準備ができていないときにこの関数を呼ぶとエラーが返ります。dcamcap_start()関数は、DCAMCAP_STARTという引数があり、取り込み方法を制御することができます。 DCAMCAP_START_SEQUENCEの場合、連続取り込みを行います。確保したバッファの最後まで画像が書き込まれたとき、次の画像はバッファの先頭に上書きされます。 DCAMCAP_START_SNAPは、確保したバッファ数の画像を取り込みます。バッファの最後まで書き込まれると取り込みは自動的に止まります。 ホストソフトウエアがdcamcap_stop()関数を呼ぶと画像の取り込みは停止します。

取り込み状態
ホストソフトウエアはdcamcap_status()関数から得られるDCAMCAP_STATUSの値から取り込みの状態を確認できます。dcamcap_transferinfo()関数は取り込んだ画像枚数と最後に取り込んだ画像が書き込まれているバッファのインデックスを返します。これらの関数をポーリングすると役に立ちますが、CPUに対して負荷を与えることになるので、dcamwait関数で新しい画像の通知を待ってから呼ぶことを推奨します。

ソフトウエアトリガ
DCAMモジュールはデバイスがサポートしていれば、ソフトウエアトリガをサポートします。デバイスがサポートしていない場合でもDCAMモジュールがエミュレートすることでソフトウエアトリガをサポートすることがあります。従って、ホストソフトウエアはほとんどのデバイスに対してソフトウエアトリガを使用することができます。ソフトウエアトリガを使うためには、DCAM_IDPROP_TRIGGERSOUCEのプロパティにDCAMPROP_TRIGGERSOURCE__SOFTWARE を設定してから取り込みを開始する必要があります。DCAMモジュールはdcamcap_firetrigger()関数が呼ばれたときにデバイスに対してトリガを入力します。カメラがトリガを受け付ける状態になる前にdcamcap_firetrigger()関数が呼ばれた場合、DCAMモジュールはデバイスがトリガを受け付けられるタイミングまで待ってから、トリガを入力します。ホストソフトウエアがほかのデバイスと同期を取る必要があるならば、ほかのデバイスの準備ができてからdcamcap_firetrigger()関数を呼ぶようにします。

レコーディング
DCAM-APIは画像を取り込んでいる間、同時にディスクへ画像を記録することができます。HDCAMRECハンドルを用意した後、dcamcap_start()関数を呼ぶ前に、dcamcap_record()関数を呼ぶ必要があります。dcamcap_record()関数は1回の取り込みにのみ有効であるため、次の取り込みでも画像を記録したい場合は、再度dcamcap_record()関数を呼ぶ必要があります。


取り込み同期制御
HDCAMWAITハンドルの取得と解放
dcamwait関数を使うためには、HDCAMWAITハンドルが必要になります。HDCAMWAITハンドルはHDCAMハンドルと関連付けられて、dcamwait_open()関数で生成されます。ハンドルが必要なくなったときには、dcamwait_close()関数で解放します。

イベント待機と中断
ホストソフトウエアは、dcamwait_start()関数で指定した画像取り込みやレコーディングのイベントを待つことができます。ホストソフトウエアが待つことができるイベントはいくつか定義されています。画像取り込みのイベントはDCAMWAIT_CAPEVENT_が、レコーディングのイベントはDCAMWAIT_RECEVENT_が接頭辞となっています。タイムアウトはDCAMWAIT_START構造体のメンバであるtimeoutへミリ秒単位で設定することができます。イベントが来るまで待ち続けるときは、timeoutにDCAMWAIT_TIMEOUT_INFINITEを設定してください。キャンセルしたいときは、dcamwait_abort()関数を呼んでください。同じHDCAMWAITハンドルで待機しているdcamwait_start()関数が終了します。


レコーディング制御
レコーディングの準備、開始と停止
ディスク記録機能を使うためには、最初にdcamrec_open()関数でファイルを生成する必要があります。この機能ではHDCAMハンドルは使いません。記録を開始するためには、READYステータスの状態で、dcamcap_record()関数を呼ぶ必要があります。dcamcap_record()関数の後にdcamcap_start()関数を呼ぶことでレコーディングが開始します。dcamrec_close()関数を呼ぶとすべての情報が記録されます。dcamrec_close()関数を呼ばずにホストソフトウエアが終了するとデータの一部が損失する場合があります。

中断、再開、ステータス
ホストソフトウエアがディスク記録を中断したいときは、dcamrec_pause()関数を呼ぶ必要があります。画像取り込み中に記録を再開したい時はdcamrec_resume()関数を呼ぶ必要があります。ただし、再開するまでにファイルの準備をするために時間がかかります。取り込みが終了したり、指定したフレーム数を記録したときは、自動的に記録が停止します。現在のレコーディングの状態を確認するためには、dcamrec_status()関数を使ってください。DCAMREC_STATUS構造体のメンバであるflagがDCAMREC_STATUSFLAG_RECORDINGであれば、レコーディング中になります。

データへのアクセス
セッションのレコーディング中であっても、ホストソフトウエアはdcamrec_lockframe()関数やdcamrec_copyframe()関数を使うことで記録されているフレームにアクセスすることができます。これらの関数はコンピュータに負荷を与えることになるので、レコーディング中には使わないことを推奨します。


記録時のメタデータアクセス
メタデータの種類
DCAMモジュールは3種類のメタデータをサポートしています。一つはタイムスタンプになります。ハードウエア、カーネルドライバ、DCAMモジュールのいずれかによって計測された画像取り込みのタイミングが記録されます。ほかの二つはユーザデータになり、テキストとバイナリがあります。すべてのフレームに対してこれらのメタデータが関連付けされていますが、セッションやファイルに対してもメタデータを用意してあります。

ユーザメタデータの書き込み
ユーザメタデータはdcamrec_writemetadata()関数で書き込むことができます。テキストデータを書き込む場合には、DCAM_USERDATATEXT構造体を引数とし、メンバ変数iKindにDCAM_METADATAKIND_USERDATATEXTを設定してください。バイナリデータを書き込む場合には、DCAM_USERDATABIN構造体を引数とし、メンバ変数iKindにDCAM_METADATAKIND_USERDATABINを設定してください。ファイル、セッション、フレームのどれを書くかは、hdr.optionにDCAMREC_METADATAOPTIONで定義された値を入れてください。

ユーザメタデータの取得
メタデータは、dcamrec_lockmetadata()関数かdcamrec_copymetadata()関数で取得することができます。DCAM_USERDATATEXTとDCAM_USERDATABINを引数とするときは、hdr->iKindとhdr->iOptionを設定する必要があります。dcamrec_lockmetadata()関数は、データにアクセスするためのポインタを返すのに対し、dcamrec_copymetadata()関数は、指定したメモリ空間にデータをコピーします。これらの関数は一つのデータにしかアクセスできません。一度に複数のデータにアクセスするためには、dcamrec_lockmetadatablock()関数かdcamrec_copymetadatablock()関数が有効です。タイムスタンプを取得するために、DCAM_METADATAKIND_TIMESTAMPSが定義されています。 

書き込みサイズ
DCAMに対して同じ設定をしたとしても、カメラ、インターフェース、周辺機器などの違いによって書き込みデータサイズが異なります。 メタデータを除いた書き込みデータサイズは、1フレームあたりを DCAM_IDPROP_RECORDFIXEDBYTES_PERFRAME が、1ファイルならび1セッションあたりを DCAM_IDPROP_RECORDFIXEDBYTES_PERFILE と DCAM_IDPROP_RECORDFIXEDBYTES_PERSESSION で取得できます。 書き込まれるデータサイズの計算方法としては(RECORDFIXEDBYTES_PERFILE + Fileメタデータサイズ)+(RECORDFIXEDBYTES_PERSESSION + Sessionメタデータサイズ)+((RECORDFIXEDBYTES_PERFRAME + Frameメタデータサイズ)* フレーム数)となります。

このチャプターの先頭へ戻る


型宣言



DCAMERR
DCAMERR_BUSY HDCAMのステータスがBUSYである。関数を成功させるにはBUSY以外のステータスにする必要がある。
DCAMERR_NOTREADY HDCAMのSTATUSがBUSYである。関数を成功させるためにはステータスをREADYにする必要がある。
DCAMERR_NOTSTABLE HDCAMのSTAUSがSTABLEではない。関数を成功させるためにはステータスをSTABLEにする必要がある。
DCAMERR_UNSTABLE HDCAMのSTATUSがUNSTABLEである。関数を成功させるためにはステータスをSTABLEにする必要がある。
DCAMERR_NOTBUSY HDCAMのSTATUSがBUSYではない。関数を成功させるためにはステータスをBUSYにする必要がある。
DCAMERR_EXCLUDED リソースが排他的であり、すでに使用されている。
DCAMERR_COOLINGTROUBLE 冷却の問題が発生しています。
DCAMERR_NOTRIGGER 期待している間にトリガが発行されなった。一部のカメラでこのエラーがサポートされています。
DCAMERR_TEMPERATURE_TROUBLE デバイスに温度警告が発生しています。
DCAMERR_TOOFREQUENTTRIGGER 入力されているトリガの周期が速すぎます。一部のカメラでこのエラーがサポートされているます。
DCAMERR_ABORT 処理が中断されました。
DCAMERR_TIMEOUT 処理がタイムアウトしました。
DCAMERR_LOSTFRAME ロストフレームが起きました。
DCAMERR_MISSINGFRAME_TROUBLE 低レベルのドライバでロストフレームが発生しました。
DCAMERR_INVALIDIMAGE 不正なHPKフォーマットのデータを取得しました。
DCAMERR_NORESOURCE 十分なリソースを確保できませんでした。
DCAMERR_NOMEMORY メモリがたりません。
DCAMERR_NOMODULE モジュールが見つかりません。
DCAMERR_NODRIVER ドライバが見つかりません。
DCAMERR_NOCAMERA カメラが見つかりません。
DCAMERR_NOGRABBER レジストリの組み合わせが見つかりません。
DCAMERR_FAILOPEN オープンに失敗しました。
DCAMERR_INVALIDMODULE dcamapi_init()関数が無効なモジュールが見つかりました。
DCAMERR_INVALIDCOMMPORT 無効なシリアルポートです。
DCAMERR_FAILOPENBUS バスかドライバが有効ではありません。
DCAMERR_FAILOPENCAMERA オープン時にデバイスエラーが起きました。
DCAMERR_DEVICEPROBLEM デバイスに問題が発生しています。
DCAMERR_FRAMEGRABBER_NEEDS_FIRMWAREUPDATE フレームグラバのファームウエアをアップデートする必要があります。
DCAMERR_INVALIDCAMERA 無効なデバイスです。
DCAMERR_INVALIDHANDLE 無効なデバイスハンドルです。
DCAMERR_INVALIDPARAM 無効なパラメータです。
DCAMERR_INVALIDVALUE 無効なプロパティ値です。
DCAMERR_OUTOFRANGE 値域外の値です。
DCAMERR_NOTWRITABLE このプロパティは書き込めません。
DCAMERR_NOTREADABLE このプロパティは読み込めません。
DCAMERR_INVALIDPROPERTYID このプロパティIDは無効です。
DCAMERR_NEWAPIREQUIRED 動作させるためには新しいAPIのバージョンを使う必要があります。
DCAMERR_WRONGHANDSHAKE DCAMがデバイスから予期せぬエラーコードを受け取りました。
DCAMERR_NOPROPERTY プロパティがありません。
DCAMERR_INVALIDCHANNEL プロパティIDに無効なチャンネルが指定されました。
DCAMERR_INVALIDVIEW プロパティIDに無効なビューが指定されました。
DCAMERR_INVALIDSUBARRAY サブアレイの値が無効な組み合わせです。例えば、DCAM_IDPROP_SUBARRAYHPOS + DCAM_IDPROP_SUBARRAYHSIZEがセンサの水平ピクセル数より大きい。
DCAMERR_ACCESSDENY このSTATUSの間はアクセスすることができません。
DCAMERR_NOVALUETEXT このプロパティは値に文字列を持っていません。
DCAMERR_WRONGPROPERTYVALUE 少なくとも一つのプロパティの値がおかしいです。
DCAMERR_DISHARMONY 対のデバイスに同じ値が設定されていません。
DCAMERR_FRAMEBUNDLESHOULDBEOFF 現在の設定ではフレームバンドルモードをオフする必要があります。
DCAMERR_INVALIDFRAMEINDEX フレームインデックスが無効な値です。
DCAMERR_INVALIDSESSIONINDEX セッションインデックスが無効な値です。
DCAMERR_NOCORRECTIONDATA ダークもしくはシェーディングの補正データがまだ取得されていません。
DCAMERR_NOTSUPPORT このデバイスは現在の設定で関数もしくはプロパティをサポートしていません。
DCAMERR_CHANNELDEPENDENTVALUE それぞれのチャンネルで自身の値を持っているため、全体の値を返すことができません。
DCAMERR_VIEWDEPENDENTVALUE それぞれのビューで自身の値を持っているため、全体の値を返すことができません。
DCAMERR_NODEVICEBUFFER デバイスバッファを超えるフレーム数です。
DCAMERR_REQUIREDSNAP デバイスメモリ使用時にはSnap取り込みを指定する必要があります。
DCAMERR_INVALIDCALIBSETTING 補正データのサンプリングが行えない設定になっています。
DCAMERR_LESSSYSTEMMEMORY カメラを動かすために必要なメモリがありません。PCのメモリ量が少ないか、WOW64によってメモリが制限されています。
DCAMERR_FAILREADCAMERA シリアルの受信かレジスタの読み込みに失敗しました。
DCAMERR_FAILWRITECAMERA シリアルの送信かレジスタの書き込みに失敗しました。
DCAMERR_CONFLICTCOMMPORT シリアルポートの設定がぶつかっています。
DCAMERR_OPTICS_UNPLUGGED 光学部品が差し込まれていません。
DCAMERR_FAILCALIBRATION 補正に失敗しました。
DCAMERR_MISMATCH_CONFIGURATION カメラの出力(接続)とフレームグラバの仕様が一致していません。
DCAMERR_INVALIDMEMBER_x x番目のメンバ変数に無効な値が設定されています。
DCAMERR_FAILEDOPENRECFILE レコーディングファイルを開くのを失敗しました。
DCAMERR_INVALIDRECHANDLE 無効なレコーディングハンドルです。
DCAMERR_FAILEDWRITEDATA ファイルへの書き込みに失敗しました。
DCAMERR_FAILEDREADDATA ファイルからの読み込みに失敗しました。
DCAMERR_NOWRECORDING レコーディング中です。
DCAMERR_WRITEFULL 書き込む容量がありません。
DCAMERR_ALREADYOCCUPIED レコーディングファイルは別のHDCAMハンドルに関連付けられています。
DCAMERR_TOOLARGEUSERDATASIZE 指定したユーザデータのサイズが大きすぎます。
DCAMERR_INVALIDWAITHANDLE 無効なWAITハンドルです。
DCAMERR_NEWRUNTIMEREQUIRED カメラが要求しているバージョンよりも古いです。
DCAMERR_VERSIONMISMATCH カメラの動作に制限をかけようとしましたが、エラーが返ってきました。
DCAMERR_RUNAS_FACTORYMODE カメラがファクトリーモードして起動しています。カメラのファームウエアを書き直す必要があるかもしれません。
DCAMERR_IMAGE_UNKNOWNSIGNATURE 画像のヘッダにある書名が知らないものか、もしくはデータが壊れています。
DCAMERR_IMAGE_NEWRUNTIMEREQUIRED 画像のヘッダに書かれているバージョンがサポートしているバージョンより新しいです。
DCAMERR_IMAGE_ERRORSTATUSEXIST 画像ヘッダにエラーステータスが立っています。
DCAMERR_IMAGE_HEADERCORRUPTED 画像ヘッダの値がおかしいです。
DCAMERR_IMAGE_BROKENCONTENT 画像ヘッダに対して、画像データがおかしいです。
DCAMERR_UNKNOWNMSGID 知らないメッセージIDです。
DCAMERR_UNKNOWNSTRID 知らないSTRING IDです。
DCAMERR_UNKNOWNPARAMID 知らないパラメータIDです。
DCAMERR_UNKNOWNBITSTYPE 知らないビットマップ出力の形式です。
DCAMERR_UNKNOWNDATATYPE 知らないデータ出力の形式です。
DCAMERR_NONE エラーではありません。
DCAMERR_INSTALLATIONINPROGRESS インストール中です。
DCAMERR_UNREACH 内部エラーです。
DCAMERR_UNLOADED 処理が終了していません。
DCAMERR_NOCONNECTION DCAMハンドルがデバイスとの接続を失いました。
DCAMERR_NOTIMPLEMENT まだ実装されていません。
DCAMERR_DELAYEDFRAME 指定されたフレームはリアルタイムでの転送に失敗し、取り込み停止後に再転送されます。
DCAMERR_FAILRELOADFRAME デバイスバッファモードでハードウエアに保持されている画像の再転送に失敗しました。
DCAMERR_CANCELRELOADFRAME 指定されたフレームはデバイスバッファモードでハードウエアに保持している画像を再転送する予定がキャンセルされました。
DCAMERR_DEVICEINITIALIZING デバイスが初期化処理中です。
DCAMERR_APIINIT_INITOPTIONBYTES DCAMAPI_INIT構造体のメンバ変数initoptionbytesの値がおかしいです。
DCAMERR_APIINIT_INITOPTION DCAMAPI_INIT構造体のメンバ変数initoptionの値がおかしいです。
DCAMERR_INITOPTION_COLLISION_BASE DCAMERR_INITIOPTION_COLLISION_BASEとDCAM_INITOPTION_COLLISION_MAXの間にあるエラーは、DCAMAPI_INIT構造体にメンバ変数initoptionに設定されている値に食い違いがあることを意味します。
DCAMERR_INITOPTION_COLLISION_MAX INITOPTIONの食い違っている場所を指摘するために予約されています。
DCAMERR_MISSPROP_TRIGGERSOURCE デバイスメモリ使用時にはトリガモードに内部同期か外部動機(読み出し同期)を指定する必要があります。
DCAMERR_SUCCESS エラーはありません。一般的な成功値であり、成功であるかは値が正であることを確認する必要があります。


DCAM_IDSTR
DCAM_IDSTR_BUS デバイスが使用しているバスの種類を返します。
DCAM_IDSTR_CAMERAID デバイス識別子。可能であればデバイスの製造番号が返ります。可能でない場合はバス固有の文字列、例えば"COM1"が返ります。この場合、デバイスが "COM1" に接続されている事を示します。
DCAM_IDSTR_VENDOR デバイス製造者を返します。常に "Hamamatsu" です。
DCAM_IDSTR_MODEL デバイスの型名を返します。例えば "C11440-22C" です。オプション付きのデバイスの場合 "with" に続いて、オプションの型名も付きます。
DCAM_IDSTR_CAMERAVERSION デバイスのバージョンを返します。ハードウエア的な違いや内蔵ファームウエアの違いでバージョンは異なります。
DCAM_IDSTR_DRIVERVERSION ドライバのバージョンを返します。ドライバとは、指定されたデバイスを制御する際に DCAM が使用している下位のモジュールを指し、Kernel Driver の他、共有ライブラリであったりします。
DCAM_IDSTR_MODULEVERSION DCAM モジュールのバージョンを返します。
DCAM_IDSTR_DCAMAPIVERSION デバイスがサポートする DCAM-API 規約のバージョンを返します。例えば "4.0" と返した場合、DCAM-API v4.0 の関数仕様をサポートします。
DCAM_IDSTR_CAMERA_SERIESNAME デバイスのシリーズ名、ニックネームを返します。名前がない場合は、エラーが返るかもしくはデバイスの型名が返ります。


DCAM_IDSTR_OPTICALBLOCK
DCAM_IDSTR_OPTICALBLOCK_MODEL 光学ブロックの型名を返します。
DCAM_IDSTR_OPTICALBLOCK_ID 光学ブロックの製番を返します。
DCAM_IDSTR_OPTICALBLOCK_DESCRIPTION 光学ブロックの概要を返します。
DCAM_IDSTR_OPTICALBLOCK_CHANNEL_1 光学ブロックのチャンネル1の概要を返します。
DCAM_IDSTR_OPTICALBLOCK_CHANNEL_2 光学ブロックのチャンネル2の概要を返します。


DCAMAPI_INITOPTION
DCAMAPI_INITOPTION_APIVER__LATEST 最新のDCAMバージョンで初期化します。
DCAMAPI_INITOPTION_APIVER__4_0 DCAMバージョン4.0で初期化します。
DCAMAPI_INITOPTION_MULTIVIEW__DISABLE マルチビューをサポートしている2つのカメラを個別に認識します。
DCAMAPI_INITOPTION_ENDMARK 初期化オプションの配列の最後に設定します。


DCAMCAP_STATUS
DCAMCAP_STATUS_BUSY デバイスが画像を取り込んでします。
DCAMCAP_STATUS_READY デバイスは画像を取り込んでいませんが、取り込み開始する準備はできています。
DCAMCAP_STATUS_STABLE デバイスは取り込みの準備がされていません。
DCAMCAP_STATUS_UNSTABLE デバイスにキャプチャモードが設定されていません。


DCAM_PIXELTYPE
DCAM_PIXELTYPE_MONO8 1Pixelは1Byteになります。値は符号なしの8Bitであり、範囲は0から255になります。
DCAM_PIXELTYPE_MONO12 2Pixelで3Byteになります。値は符号なしの12ibtであり、範囲は0から4095になります。2Pixelがパックされるので、画素配列は水平方向に2Pixelで3Byteになります。ビット配列については次の表を参照してください。
DCAM_PIXELTYPE_MONO12P 2Pixelで3Byteになります。値は符号なしの12ibtであり、範囲は0から4095になります。2Pixelがパックされるので、画素配列は水平方向に2Pixelで3Byteになります。ビット配列については次の表を参照してください。
DCAM_PIXELTYPE_MONO16 1Pixelは2Byteになります。値は符号なしの16Bitであり、範囲は0から65535になります。デバイスからの出力が16Bitデータより小さいことがありますが、画素配列は水平方向に2Byteになります。
DCAM_PIXELTYPE_RGB24 1Pixleは3Byteになります。色の並びは赤、緑、青になり、それぞれの値は符号なしの8Bitになります。
DCAM_PIXELTYPE_RGB48 1Pixelは6Byteになります。色の並びは赤、緑、青になり、それぞれの値は符号なしの16Bitになります。デバイスからの出力が16Bitデータより小さいことがありますが、画素配列は水平方向に2Byteになります。
DCAM_PIXELTYPE_BGR24 1Pixelは3Byteになります。色の並びは青、緑、赤になり、それぞれの値は符号なしの8Bitになります。
DCAM_PIXELTYPE_BGR48 1Pixelは6Byteになります。色の並びは青、緑、赤になり、それぞれの値は符号なしの16Bitになります。デバイスからの出力が16Bitより小さいことがありますが、画素配列は水平方向に2Byteになります。

MONO12 Packed Format
DCAM_PIXELTYPE_MONO12の出力フォーマットです。Pはカメラから送られた画素データとなり、Bはデータを受け取ったバッファのバイトデータになります。
Buffer Pixel Data
B[0] P[0] bits 11 ... 4
B[1] P[1] bits 3 ... 0 | P[0] bits 3 ... 0
B[2] P[1] bits 11 ... 4
... ...
B[m-2] P[n-1] bits 11 ... 4
B[m-1] P[n] bits 3 ... 0 | [n-1] bits 3 ... 0
B[m] P[n] bits 11 ... 4

MONO12P Packed Format
DCAM_PIXELTYPE_MONO12の出力フォーマットです。Pはカメラから送られた画素データとなり、Bはデータを受け取ったバッファのバイトデータになります。
Buffer Pixel Data
B[0] P[0] bits 7 ... 0
B[1] P[1] bits 3 ... 0 | P[0] bits 11 ... 8
B[2] P[1] bits 11 ... 4
... ...
B[m-2] P[n-1] bits 7 ... 0
B[m-1] P[n] bits 3 ... 0 | [n-1] bits 11 ... 8
B[m] P[n] bits 11 ... 4


DCAMDEV_CAPDOMAIN
DCAMDEV_CAPDOMAIN__FUNCTION FUNCTIONのサポートを確認します。
DCAMDEV_CAPDOMAIN__DCAMDATA DCAMDATAのサポートを確認します。
DCAMDEV_CAPDOMAIN__FRAMEOPTION FRAMEOPTIONのサポートを確認します。


DCAMDEV_CAPFLAG
DCAMDEV_CAPFLAG_FRAMESTAMP 画像データにフレームスタンプがあります。
DCAMDEV_CAPFLAG_TIMESTAMP 画像データにタイムスタンプがあります。
DCAMDEV_CAPFLAG_CAMERASTAMP 画像データにカメラスタンプがあります。


DCAMDATA_OPTION
DCAMDATA_OPTION__VIEW_ALL 全てのviewに対してデータの設定、取得を行います。
DCAMDATA_OPTION__VIEW_1 View1に対してデータの設定、取得を行います。
DCAMDATA_OPTION__VIEW_2 View2に対してデータの設定、取得を行います。
DCAMDATA_OPTION__VIEW_3 View3に対してデータの設定、取得を行います。
DCAMDATA_OPTION__VIEW_4 View4に対してデータの設定、取得を行います。


DCAMDATA_KIND
DCAMDATA_KIND__REGION DCAMDATAの種類は領域です。
DCAMDATA_KIND__LUT DCAMDATAの種類はLUTです。


DCAMDATA_REGIONTYPE
DCAMDATA_REGIONTYPE__BYTEMASK 領域を指定するデータ形式はバイトマスクになります。
DCAMDATA_REGIONTYPE__RECT16ARRAY 領域を指定するデータ形式はDCAMDATA_REGIONRECTの配列になります。
DCAMDATA_REGIONTYPE__ACCESSREADY Readyステータス時に領域の設定が可能です。
DCAMDATA_REGIONTYPE__ACCESSBUSY Busyステータス時に領域の設定が可能です。


DCAMDATA_LUTTYPE
DCAMDATA_LUTTYPE__SEGMENTED_LINEAR LUTを指定するデータ形式はDCAMDATA_LINEARLUTの配列になります。
DCAMDATA_LUTTYPE__MONO16 LUTを指定するデータ形式は符号なしのShortの配列になります。
DCAMDATA_LUTTYPE__ACCESSREADY Readyステータス時にLUTの設定が可能です。
DCAMDATA_LUTTYPE__ACCESSBUSY Busyステータス時にLUTの設定が可能です。


DCAMWAIT_EVENT
DCAMWAIT_CAPEVENT_TRANSFERRED DCAMモジュールはデバイスからデータを受け取りましたが、まだアクセスすることはできません。
DCAMWAIT_CAPEVENT_FRAMEREADY ホストソフトウエアから画像データにアクセスできます。
DCAMWAIT_CAPEVENT_CYCLEEND 1サイクルの取り込みが終了しました。1サイクルは準備したバッファの数になります。すべてのバッファが書き込まれるとこのイベントは発行されます。
DCAMWAIT_CAPEVENT_EXPOSUREEND デバイスが露光を終了しました。
DCAMWAIT_CAPEVENT_STOPPED 画像取り込みが停止しました。
DCAMWAIT_CAPEVENT_RELOADFRAME デバイスメモリ使用時にリアルタイムでの転送に失敗した画像の再転送が完了し、画像データにアクセスできます。
DCAMWAIT_RECEVENT_STOPPED レコーディングが終了しました。
DCAMWAIT_RECEVENT_WARNING 書き込み速度が遅く、フレームを落とす可能性があります。
DCAMWAIT_RECEVENT_MISSED フレームを書き損じました。
DCAMWAIT_RECEVENT_DISKFULL 指定したディスクがいっぱいになり、レコーディングを続けることができません。
DCAMWAIT_RECEVENT_WRITEFAULT データの書き込みに失敗しました。
DCAMWAIT_RECEVENT_SKIPPED 画像データが壊れているため、記録されませんでした。


DCAMBUF_ATTACHKIND
DCAMBUF_ATTACHKIND_FRAME 画像データをコピーするユーザバッファのポインタ配列を渡します。
DCAMBUF_ATTACHKIND_TIMESTAMP タイムスタンプデータをコピーするユーザバッファのポインタ配列を渡します。
DCAMBUF_ATTACHKIND_FRAMESTAMP フレームスタンプデータをコピーするユーザバッファのポインタ配列を渡します。
DCAMBUF_ATTACHKIND_PRIMARY_TIMESTAMP タイムスタンプデータをコピーするユーザバッファを渡します。
DCAMBUF_ATTACHKIND_PRIMARY_FRAMESTAMP フレームスタンプデータをコピーするユーザバッファを渡します。


DCAMBUF_FRAME_OPTION
DCAMBUF_FRAME_OPTION__VIEW_ALL すべてのviewの画像データが返ります。
DCAMBUF_FRAME_OPTION__VIEW_1 View1の画像データを返します。
DCAMBUF_FRAME_OPTION__VIEW_2 View2の画像データを返します。
DCAMBUF_FRAME_OPTION__VIEW_3 View3の画像データを返します。
DCAMBUF_FRAME_OPTION__VIEW_4 View4の画像データを返します。
DCAMBUF_FRAME_OPTION__PROC_HIGHCONTRAST High Contrast処理された画像データを返します。


DCAMBUF_METADATAOPTION
DCAMBUF_METADATAOPTION__VIEW_ALL DCAMBUF_FRAMEと同じメタデータを返します。
DCAMBUF_METADATAOPTION__VIEW_1 View1のメタデータを返します。
DCAMBUF_METADATAOPTION__VIEW_2 View2のメタデータを返します。
DCAMBUF_METADATAOPTION__VIEW_3 View3のメタデータを返します。
DCAMBUF_METADATAOPTION__VIEW_4 View4のメタデータを返します。


DCAMBUF_PROCTYPE
DCAMBUF_PROCTYPE__HIGHCONTRASTMODE DCAMDEV_CAPABILTY_FRAMEOPTION内で使われるHigh Contrast処理のフラグです。


DCAMREC_STATUSFLAG
DCAMREC_STATUSFLAG_RECORDING レコーディング中


DCAMREC_FRAME_OPTION
DCAMREC_FRAME_OPTION__VIEW_CURRENT 現在のviewの画像データを返ります。
DCAMREC_FRAME_OPTION__VIEW_1 View1の画像データを返ります。
DCAMREC_FRAME_OPTION__VIEW_2 View2の画像データを返ります。
DCAMREC_FRAME_OPTION__VIEW_3 View3の画像データを返ります。
DCAMREC_FRAME_OPTION__VIEW_4 View4の画像データを返ります。
DCAMREC_FRAME_OPTION__PROC_HIGHCONTRAST High Contrast処理をした画像を返します。


DCAMREC_METADATAOPTION
DCAMREC_METADATAOPTION__LOCATION_FRAME フレームのメタデータ
DCAMREC_METADATAOPTION__LOCATION_SESSION セッションのメタデータ
DCAMREC_METADATAOPTION__LOCATION_FILE ファイルのメタデータ


DCAMBUF_METADATAKIND
DCAMBUF_METADATAKIND_TIMESTAMPS 画像が取り込んだタイミング
DCAMBUF_METADATAKIND_FRAMESTAMPS フレーム番号


DCAMREC_METADATAKIND
DCAMREC_METADATAKIND_USERDATATEXT 読むことが可能なユーザメタデータ。UTF8フォーマットでエンコードするテキストをサポートしています。
DCAMREC_METADATAKIND_USERDATABIN ユーザメタデータの一つで、ホストソフトウエアはユーザ独自のフォーマットを使うことができます。
DCAMREC_METADATAKIND_TIMESTAMPS 画像取り込みタイミング
DCAMREC_METADATAKIND_FRAMESTAMPS フレーム番号


DCAM_CODEPAGE
DCAM_CODEPAGE__SHIFT_JIS Shift JIS
DCAM_CODEPAGE__UTF16_LE UTF-16 (Little Endian)
DCAM_CODEPAGE__UTF16_BE UTF-16 (Big Endian)
DCAM_CODEPAGE__UTF7 UTF-7 translation
DCAM_CODEPAGE__UTF8 UTF-8 translation


DCAMCAP_TRANSFERKIND
DCAMCAP_TRANSFERKIND_FRAME 取得画像の枚数と最新のFrame Indexを返します。


DCAMCAP_START
DCAMCAP_START_SEQUENCE 枚数制限無く、繰り返し取り込みを行います。
DCAMCAP_START_SNAP dcambuf_alloc() 関数又は dcambuf_attach() 関数で用意されたバッファ数を取り込むまで取り込みを行います。

このチャプターの先頭へ戻る


関数


初期化処理/終了処理

dcamapi_init()

Declaration
DCAMERR dcamapi_init(
DCAMAPI_INIT* param
);

Parameter
param
DCAMAPI_INIT 構造体のインスタンスで、初期化時にオプションを指定し、初期化が成功した時に接続されているデバイスの台数を受け取ります

Remarks
dcamapi_init() 関数は、DCAM-API のマネージャー、モジュールおよびドライバを初期化します。 ホストソフトウエアはこの関数を一度だけ呼び出せます。再び呼び出したい場合は、その前に dcamapi_uninit() 関数を呼ぶ必要があります。 サポートするデバイスが一台でも見つかれば、この関数は DCAMERR_SUCCESS を返します。DCAMAPI_INIT::iDeviceCount に見つかったデバイスの総数が入ります。 サポートするデバイスが見つからなかった場合、この関数はエラーコードを返します。

dcamapi_uninit()

Declaration
DCAMERR dcamapi_uninit(void);

Remarks
dcamapi_uninit() 関数は、DCAM-API が使用していたリソースやオブジェクトを解放します。 全ての開かれていたハンドルは強制的に閉じられます。個々のデバイスで使用していたリソースも解放されます。 再び dcamapi_init() 関数を呼ぶまで、新しいハンドルを取得する事はできません。

dcamdev_open()

Declaration
DCAMERR dcamdev_open(
DCAMDEV_OPEN* param
);

Parameter
param
DCAMDEV_OPEN 構造体のインスタンスで、デバイスの番号を指定して、HDCAM ハンドルを受け取ります

Remarks
dcamdev_open() 関数は、番号で指定されたデバイスに対応する HDCAM ハンドルを返します。 ホストソフトウエアはデバイス一台につき一回だけこの関数を呼び出す事ができます。 ホストソフトウエアが HDCAM ハンドルが不要になったら dcamdev_close() 関数で解放してください。 dcamdev_close() 関数を呼ぶと、その後 HDCAM ハンドルは使えなくなりますが、本関数を再度呼び出すと再び HDCAM ハンドルを取得できます。 本関数は成功すると DCAMERR_SUCCESS を返し、DCAMDEV_OPEN::hdcam メンバに HDCAM ハンドルがセットされています。 サポートするデバイスが見つからなかった場合、この関数はエラーコードを返します。

dcamdev_close()

Declaration
DCAMERR dcamdev_close(
HDCAM h
);

Parameter
h
解放する HDCAM ハンドルを指定します

Remarks
dcamdev_close() 関数は HDCAM ハンドルとデバイスを解放します。この関数が呼ばれて成功した場合、指定された HDCAM ハンドルは使えなくなります。再度同じデバイスを使う場合、ホストソフトウエアは dcamdev_open() 関数を呼んで HDCAM ハンドルを取得する必要があります。 dcamdev_close() 関数は、取り込みや待機を終了し、割り当てられていたバッファがあればそれらを解放します。


デバイスデータ

dcamdev_getcapbility()

Declaration
DCAMERR dcamdev_getcapbility(
HDCAM h,
DCAMDEV_CAPABILITY* param
);

Parameter
h
機能情報を取得する対象のデバイスの HDCAM ハンドルを指定します。
param
DCAMDEV_CAPABILITY 構造体のインスタンスで、デバイスの機能情報を取得します。

Remarks
dcamdev_getcapability() 関数は、デバイス機能でプロパティから取得できない情報を DCAMDEV_CAPABILITY 構造に返します。 機能情報は、DCAMDEV_CAPFLAGで返ります。

dcamdev_getstring()

Declaration
DCAMERR dcamdev_getstring(
HDCAM h,
DCAMDEV_STRING* param
);

Parameter
h
情報を取得する対象デバイスの HDCAM ハンドルもしくはカメラのインデックスを指定します
param
DCAMDEV_STRING 構造体のインスタンスで、文字列番号を指定してデバイス情報を文字列で受け取ります

Remarks
dcamdev_getstring() 関数は、文字列番号を指定してデバイス情報もしくはエラー番号を指定してエラー情報を文字列で受け取ります。 dcamapi_init() 関数を呼び出した後は、hパラメータに HDCAM 型にキャストしたデバイス番号を指定できます。 dcamdev_open() 関数を呼び出した後は、hパラメータに HDCAM ハンドルを指定します。 文字列番号をサポートしていない場合、この関数はエラーコードを返します。 デバイス情報よりも与えられたバッファが短い場合、途中までの情報を返します。

dcamdev_setdata()

Declaration
DCAMERR dcamdev_setdata(
HDCAM h,
DCAMDATA_HDR* param
);

Parameter
h
データを設定する対象デバイスの HDCAM ハンドルを指定します。
param
設定するデータの構造体の先頭にあるDCAMDATA_HDR構造体へのポインタ

Remarks
dcamdev_setdata() 関数は、property形式では設定できないような値を設定します。 データの種類によって構造体が用意されており。これらの構造体の先頭はDCAMDATA_HDRになっています。

dcamdev_getdata()

Declaration
DCAMERR dcamdev_getdata(
HDCAM h,
DCAMDATA_HDR* param
);

Parameter
h
データを設定する対象デバイスの HDCAM ハンドルを指定します。
param
取得するデータの構造体の先頭にあるDCAMDATA_HDR構造体へのポインタ

Remarks
dcamdev_getdata() 関数は、property形式では取得できないような情報を取得します。 データの種類によって構造体が用意されており。これらの構造体の先頭はDCAMDATA_HDRになっています。


プロパティ制御

dcamprop_getattr()

Declaration
DCAMERR dcamprop_getattr(
HDCAM h,
DCAMPROP_ATTR* param
);

Parameter
h
プロパティ属性を取得する対象デバイスの HDCAM ハンドルを指定します
param
DCAMPROP_ATTR 構造体のインスタンスで、指定されたプロパティIDの情報を受け取ります

Remarks
dcamprop_getattr() 関数は、プロパティIDで指定されたプロパティの属性を返します。 属性はparamパラメータで指定されたDCAMPROP_ATTRインスタンスに格納されます。 ホストソフトウエアは呼び出し前にDCAMPROP_ATRインスタンスを0クリアしてからiPropメンバを設定してください。 詳細はDCAMPROP_ATTR構造体の解説を参照ください。 指定されたデバイスが指定されたプロパティをサポートしていない場合、この関数はエラーコードを返します。

dcamprop_getvalue()

Declaration
DCAMERR dcamprop_getvalue(
HDCAM h,
int32 iProp,
double* pValue
);

Parameter
h
プロパティの値を取得する対象デバイスの HDCAM ハンドルを指定します
iProp
値を取得する対象プロパティのプロパティIDを指定します
pValue
プロパティIDで指定されるプロパティの現在値を受け取ります

Remarks
dcamprop_getvalue() 関数は、iProp に指定されたプロパティIDの値を pValue ポインタで指定される変数領域に格納します。 指定されたデバイスが指定されたプロパティをサポートしていない場合、この関数はエラーコードを返します。

dcamprop_setvalue()

Declaration
DCAMERR dcamprop_setvalue(
HDCAM h,
int32 iProp,
double fValue
);

Parameter
h
プロパティの値を設定する対象デバイスの HDCAM ハンドルを指定します
iProp
値を設定する対象プロパティのプロパティIDを指定します
fValue
プロパティに設定する値を設定します

Remarks
dcamprop_setvalue() 関数は、iProp で指定されたIDのプロパティに値を設定します。 デバイスが指定されたプロパティをサポートしない場合はDCAMERR_NOTSUPPORTを返します。 プロパティがAUTOROUNDING属性を持たず、指定された値がプロパティにとって有効でない値を設定しようとした場合、DCAMERR_INVALIDPARAMを返します。

dcamprop_setgetvalue()

Declaration
DCAMERR dcamprop_setgetvalue(
HDCAM h,
int32 iProp,
double* pValue,
int32 option
);

Parameter
h
プロパティの値を操作する対象デバイスの HDCAM ハンドルを指定します
iProp
値を操作する対象プロパティのプロパティIDを指定します
pValue
プロパティに設定する値を指定し、成功時には実際に設定された値を受け取ります
option
値を設定する際のオプション指定用に予約されています、0を使ってください

Remarks
dcamprop_setgetvalue() 関数は、iProp で指定されたIDのプロパティに値を設定します。 デバイスが指定されたプロパティをサポートしない場合はDCAMERR_NOTSUPPORTを返します。 pValueが無効な値であればDCAMERR_INVALIDPARAMを返します。 プロパティがAUTOROUNDING属性を持たず、指定された値がプロパティにとって有効でない値を設定しようとした場合、DCAMERR_INVALIDPARAMを返します。

dcamprop_queryvalue()

Declaration
DCAMERR dcamprop_queryvalue(
HDCAM h,
int32 iProp,
double* pValue,
int32 option
);

Parameter
h
プロパティの値を調査する対象デバイスの HDCAM ハンドルを指定します
iProp
値を調査する対象プロパティのプロパティIDを指定します
pValue
プロパティIDで指定されるプロパティに調査したい値を指定し、成功時には実際に設定された場合の値を受け取ります
option
値を調査する際のオプションを指定できます。次のうちのいずれかを使ってください。
DCAMPROP_OPTION_NONE dcamprop_setvalue()で使用した際の値を返します
DCAMPROP_OPTION_PRIOR 一つ前の値を返します
DCAMPROP_OPTION_NEXT 一つ次の値を返します

Remarks
dcamprop_queryvalue() 関数は、ある値を設定した時に設定される値を、実際には設定せずに返します。 optionパラメータにDCAMPROP_OPTION_PRIORまたはDCAMPROP_OPTION_NEXTが指定されている場合、それぞれの値より小さい値あるいは大きい値を返します。 デバイスが指定されたプロパティをサポートしない場合はDCAMERR_NOTSUPPORTを返します。 pValueが無効な値であればDCAMERR_INVALIDPARAMを返します。 プロパティがAUTOROUNDING属性を持たず、指定された値がプロパティにとって有効でない値を設定しようとした場合、DCAMERR_OUTOFVALUEを返します。

dcamprop_getnextid()

Declaration
DCAMERR dcamprop_getnextid(
HDCAM h,
int32* pProp,
int32 option
);

Parameter
h
プロパティIDを調査する対象デバイスの HDCAM ハンドルを指定します
pProp
基準となるプロパティIDを与え、条件に一致して得られるプロパティIDを受け取る為の変数へのポインタ
option
プロパティID値を調査する際のオプションを指定できます。次のいずれかの値を使ってください。
DCAMPROP_OPTION_SUPPORT デバイスがサポートしている次のプロパティIDを返します
DCAMPROP_OPTION_UPDATED 前回確認時から値やモードが更新されているプロパティIDを返します。ホストソフトウエアがIDを得るとリセットされます。
DCAMPROP_OPTION_VOLATILE プロパティの値がソフトウエアの操作によらずに変わるプロパティIDを返します。
DCAMPROP_OPTION_ARRAYELEMENT 配列の次の要素のプロパティIDを返します。もしiPropが範囲外であった場合はDCAMERR_NOPROPERTYを返します。

Remarks
dcamprop_getnextid() 関数を使うとデバイスがサポートしている全てのプロパティIDを取得する事ができます。 まずホストソフトウエアはiPropに0を指定して呼び出します。dcamprop_getnextid() 関数は、次に対応するプロパティIDを返し続け、iPropが0になるまで繰り返すとプロパティIDの一覧を受け取ることができます。 optionパラメータにDCAMPROP_OPTION_UPDATEDを指定すると変更があったプロパティIDのみが、またDCAMPROP_OPTION_VOLATILEを指定すると値が変動するプロパティIDのみを返します。

dcamprop_getname()

Declaration
DCAMERR dcamprop_getname(
HDCAM h,
int32 iProp,
char* text ,
int32 textbytes
);

Parameter
h
プロパティ名を取得する対象デバイスの HDCAM ハンドルを指定します
iProp
対象プロパティのプロパティIDを指定します
text
プロパティの名前を受け取る為のバッファです
textbytes
プロパティ名を受け取る為のバッファのサイズを指定します

Remarks
dcamprop_getname() 関数はiPropで指定されたプロパティの名前を文字列で返します。 もしhパラメータで指定されたデバイスがサポートしないプロパティの場合はDCAMERR_NOTSUPPORTを返します。

dcamprop_getvaluetext()

Declaration
DCAMERR dcamprop_getvaluetext(
HDCAM h,
DCAMPROP_VALUETEXT* param
);

Parameter
h
プロパティ属性を取得する対象デバイスの HDCAM ハンドルを指定します
param
DCAMPROP_VALUETEXT 構造体のインスタンスで、指定されたプロパティIDと値に該当する文字列を受け取ります

Remarks
dcamprop_getvaluetext() 関数はプロパティの値に対応する文字列を返します。 もしiPropメンバで指定されたプロパティが、hパラメータで指定されたデバイスでサポートされない場合はDCAMERR_NOTSUPPORTを返します。 もし指定した値がサポートされていなければDCAMERR_INVALIDVALUEを返します。


バッファ制御

dcambuf_alloc()

Declaration
DCAMERR dcambuf_alloc(
HDCAM h,
int32 framecount
);

Parameter
h
画像取得用のバッファを設定する対象の HDCAM ハンドルを指定します
framecount
DCAM が確保するフレーム数を指定します

Remarks
dcambuf_alloc() 関数は、画像取り込み用の内部バッファを確保します。 この時点では取り込みを開始しないので、取り込みを開始するには dcamcap_start() 関数を呼んでください。 dcambuf_attach() 関数とは同時に使えません。 画像が来ると、dcambuf_lockframe() 関数や dcambuf_copyframe() 関数で、バッファにアクセスできます。 この内部バッファが不要になったら dcambuf_release() 関数で解放してください。

dcambuf_attach()

Declaration
DCAMERR dcambuf_attach(
HDCAM h,
const DCAMBUF_ATTACH* param
);

Parameter
h
ユーザバッファを割り当てる対象の HDCAM ハンドルを指定します
param
ユーザバッファの情報を指定する DCAMBUF_ATTACH 構造体へのポインタ

Remarks
dcambuf_attach() 関数はホストソフトウエアが確保したメモリを取り込み用のバッファとして割り当てます。 DCAM モジュールはデバイスからこれらのバッファに直接転送します。 dcambuf_attach() 関数はユーザが必要とするプロパティを設定した後に呼び出し、dcamcap_start() 関数で取り込みを開始する前に呼び出します。 dcambuf_alloc() 関数とは同時に使えません。 ホストソフトウエアが確保するバッファの一枚あたりのサイズは DCAM_IDPROP_BUFFER_FRAMEBYTES プロパティの値を参照してください。 DCAM はバッファのポインタが正しいかどうか確認しません。その為、誤ったアドレスが入力されるとシステムがハングアップする恐れがあります。 ホストソフトウエアがバッファを取り込みに使わなくなったら、dcambuf_release() 関数でバッファの割当を解放してください。

dcambuf_release()

Declaration
DCAMERR dcambuf_release(
HDCAM h,
int32 iKind
);

Parameter
h
画像取得用のバッファを解放する対象の HDCAM ハンドルを指定します
iKind
解放するバッファの種類を指定します

Remarks
dcambuf_release()関数は、dcambuf_alloc()で確保した、もしくはdcambuf_attached()で割り当てられた取り込み用バッファを解放します。画像取り込み中のとき、dcambuf_release()関数はデバイスがBUSY状態であることを通知するためにDCAMERR_BUSYを返します。

dcambuf_lockframe()

Declaration
DCAMERR dcambuf_lockframe(
HDCAM h,
const DCAMBUF_FRAME* pFrame
);

Parameter
h
画像データを取得する対象の HDCAM ハンドルを指定します
pFrame
ロックされたバッファ情報を受け取るDCAMBUF_FRAME構造体インスタンスへのポインタ

Remarks
dcambuf_lockframe() 関数は、取り込んだ画像をアクセスする為のポインタを返します。 この関数が再び呼ばれると、その前に dcambuf_lockframe() 関数を呼んだときに返される内容は無効になります。 この事態を避ける為に、dcambuf_lockframe() 関数の呼び出しは、ある決まったスレッドから行うのが良いです。 画像データをホストソフトウエア内のバッファにコピーする場合は dcambuf_copyframe() 関数を使うのが良いです。 DCAMBUF_FRAME::iFrame で指定されるフレームの取り込みが完了していない場合、DCAMERR_BUSY エラーが返ります。

dcambuf_copyframe()

Declaration
DCAMERR dcambuf_copyframe(
HDCAM h,
DCAMBUF_FRAME* pFrame
);

Parameter
h
画像データのコピー元となる HDCAM ハンドルを指定します
pFrame
画像データの受け取り先となる DCAMBUF_FRAME 構造体インスタンスへのポインタ

Remarks
dcambuf_copyframe() 関数は取り込みバッファの画像データをホストアプリケーションが指定したバッファにコピーします。 取り込みバッファが dcambuf_alloc() 関数で指定された時のみ有効で、dcambuf_attach() 関数を使用されている場合には使えません。

dcambuf_copymetadata()

Declaration
DCAMERR dcambuf_copymetadata(
HDCAM h,
DCAM_METADATAHDR* hdr
);

Parameter
h
メタデータを取得する対象となる HDCAM ハンドルを指定します
hdr
メタデータの受け取り先を指定するメタデータ構造体へのポインタ

Remarks
dcambuf_copymetadata() 関数はホストアプリケーションが指定したバッファにメタデータをコピーします。 メタデータは DCAM_METADATAKIND で指定され、タイムスタンプとフレームスタンプを指定できます。


取り込み制御

dcamcap_start()

Declaration
DCAMERR dcamcap_start(
HDCAM h,
int32 mode
);

Parameter
h
画像取得を開始する HDCAM ハンドルを指定します
mode
画像取り込みモードを指定します

Remarks
dcamcap_start() 関数は画像撮影を開始します。 dcambuf_alloc() 関数または dcambuf_attach() 関数で取り込みバッファの準備がされている必要があります。 DCAMCAP_START_SEQUENCE を選択すると、連続して画像を取り込みます。dcamcap_stop() 関数で取り込みを終了します。 DCAMCAP_START_SNAP を選択すると、用意されたバッファの分の画像を取り込んで取り込みを終了します。dcamcap_stop() 関数でも取り込みを終了します。

dcamcap_stop()

Declaration
DCAMERR dcamcap_stop(
HDCAM h
);

Parameter
h
画像取得を停止する HDCAM ハンドルを指定します

Remarks
dcamcap_stop() 関数は dcamcap_start() 関数で開始された画像撮影を終了します。 すでに撮影が停止している場合は何もしません。 レコーディングが実施されている場合、それも同時に終了します。

dcamcap_status()

Declaration
DCAMERR dcamcap_status(
HDCAM h,
int32* pStatus
);

Parameter
h
画像取得を開始する HDCAM ハンドルを指定します
pStatus
画像取り込み状態を受け取る為の変数へのポインタを指定します

Remarks
dcamcap_status() 関数は現在の撮影状態を返します。

dcamcap_transferinfo()

Declaration
DCAMERR dcamcap_transferinfo(
HDCAM h,
DCAMCAP_TRANSFERINFO* param
);

Parameter
h
画像取得を開始する HDCAM ハンドルを指定します
param
画像転送状況を受け取る為の DCAMCAP_TRANSFERINFO 構造体のインスタンスへのポインタを指定します

Remarks
dcamcap_transferinfo() 関数は現在の画像転送状況を返します。

dcamcap_firetrigger()

Declaration
DCAMERR dcamcap_firetrigger(
HDCAM h,
int32 iKind
);

Parameter
h
ソフトウエアトリガを発行する対象の HDCAM ハンドルを指定します
iKind
発行するソフトウエアトリガの種類を指定するために予約されている値です、0を設定してください

Remarks
dcamcap_firetrigger() 関数はソフトウエアトリガを発行します。 ソフトウエアトリガモードで取り込み中の時のみ有効です。

dcamcap_record()

Declaration
DCAMERR dcamcap_record(
HDCAM h,
HDCAMREC hrec
);

Parameter
h
ファイルへの記録を行うソースとなる HDCAM ハンドルを指定します
hrec
記録するファイルを指定するHDCAMRECハンドルを指定します

Remarks
dcamcap_record() 関数は画像の取り込み中にストレージへの書き込みを実施する準備を行います。 あらかじめ dcamrec_open() 関数で HDCAMREC ハンドルを取得しておく必要があります。 dcamcap_record() 関数を呼び出した後、dcamcap_start() 関数を呼ぶと、取り込みと記録が同時にスタートします。 dcamrec_pause() 関数を呼ぶとストレージへの書き込みを中断することができます。


イベント待機制御

dcamwait_open()

Declaration
DCAMERR dcamwait_open(
DCAMWAIT_OPEN* param
);

Parameter
param
DCAMWAIT_OPEN構造体のインスタンスで、対象のデバイスをHDCAMハンドル指定して、HDCAMWAITハンドルを受け取ります

Remarks
dcamwait_open() 関数は HDCAMWAIT ハンドルを生成します。 param引数で指定されるDCAMWAIT_OPEN構造体の実体はsizeメンバの初期化と共にhdcamメンバに対象とするデバイスのHDCAMハンドルを設定してください。 関数が成功すれば、hwaitメンバに生成されたHDCAMWAITハンドルが設定され、supporteventメンバに対応しているイベント情報が設定されています。 イベントを待機するにはHDCAMWAITハンドルを使ってdcamwait_start()関数を呼びます。 イベント待機状態を中断する場合はdcamwait_abort()関数を呼びます。 HDCAMWAITハンドルを使用する必要がなくなったら、dcamwait_close()関数でハンドルを解放します。

dcamwait_close()

Declaration
DCAMERR dcamwait_close(
HDCAMWAIT h
);

Parameter
h
解放する HDCAMWAIT ハンドルを指定します

Remarks
dcamwait_close() 関数は HDCAMWAIT ハンドルを解放します。 HDCAMWAITハンドルを使用する必要がなくなったら呼んでください。

dcamwait_start()

Declaration
DCAMERR dcamwait_start(
HDCAMWAIT h,
DCAMWAIT_START* param
);

Parameter
h
中断するイベント待ちを指定する HDCAMWAIT ハンドルを指定します
param
イベント待ちの条件を指定する DCAMWAIT_START 構造体インスタンスへのポインタを指定します

Remarks
dcamwait_start() 関数はイベントを待機します。 待機したいイベントはparam引数で指定される DCAMWAIT_START 構造体の実体の eventmask メンバで指定します。 イベントはビット単位に意味を持つ DCAMWAIT_EVENT 列挙型で定義されており、複数の指定が可能です。 timeoutメンバで最大待機時間をミリ秒単位で指定してください。 イベントが発生するまで待ち続ける場合は DCAMWAIT_TIMEOUT_INFINITE を設定してください。 関数が成功すると発生したイベントに対応する値が eventhappened メンバに設定されます。 指定時間以内にイベントが発生しなかった場合 DCAMERR_TIMEOUT エラーが返されます。 また dcamwait_abort() 関数等で、中断された場合は DCAMERR_ABORT エラーが返されます。

dcamwait_abort()

Declaration
DCAMERR dcamwait_abort(
HDCAMWAIT h
);

Parameter
h
中断するイベント待ちを指定する HDCAMWAIT ハンドルを指定します

Remarks
dcamwait_abort() 関数は、h メンバで指定される HDCAMWAIT ハンドルを使って待機中の dcamwait_start() 関数を中断します。 イベント待機中の dcamwait_start() 関数は、DCAMERR_ABORT エラーを返します。 イベント待機中でなければ何も発生しません。


ファイル記録制御

dcamrec_open()

Declaration
DCAMERR dcamrec_open(
DCAMREC_OPEN* param
);

Parameter
param
DCAMREC_OPEN 構造体のインスタンスで、デバイスの番号を指定して、HDCAMREC ハンドルを受け取ります

Remarks
dcamrec_open() 関数は HDCAMREC ハンドルを生成します。 param引数で指定される DCAMREC_OPEN 構造体の実体は size メンバの初期化と共に保存先となるファイルのパスを path メンバに設定します。 メタデータをファイルに埋め込む場合は、必要となる最大サイズを指定してください。 レコーディングを始める場合は dcamcap_start() 関数を呼び出す前に HDCAMREC ハンドルを使って dcamcap_record() 関数を呼び出してください。

dcamrec_close()

Declaration
DCAMERR dcamrec_close(
HDCAMREC hrec
);

Parameter
hrec
解放する HDCAMREC ハンドルを指定します

Remarks
レコーディングが完了し、HDCAMREC ハンドルが不要になったら呼び出します。 レコーディング中のファイルはメタデータを含めて書き込みを完了します。 HDCAMREC ハンドル解放後にレコーディングしたファイルにアクセスする場合は DCIMGAPI を使用します。

dcamrec_lockframe()

Declaration
DCAMERR dcamrec_lockframe(
HDCAMREC hrec,
DCAMREC_FRAME* pFrame
);

Parameter
hrec
画像データを参照するソースファイルを HDCAMREC ハンドルで指定します
pFrame
ロックされたバッファ情報を受け取る DCAMREC_FRAME 構造体インスタンスへのポインタ

Remarks
dcamrec_lockframe() 関数は、レコーディングされたファイル内の画像にアクセスする為のポインタを返します。 この関数が再び呼ばれると、その前に dcamrec_lockframe() 関数を呼んだときに返される内容は無効になります。 この事態を避ける為に、dcamrec_lockframe() 関数の呼び出しは、ある決まったスレッドから行うのが良いです。 画像データをホストソフトウエア内のバッファにコピーする場合は dcamrec_copyframe() 関数を使うのが良いです。 DCAMREC_FRAME::iFrame で指定されるフレームの取り込みが完了していない場合、DCAMERR_BUSY エラーが返ります。

dcamrec_copyframe()

Declaration
DCAMERR dcamrec_copyframe(
HDCAMREC hrec,
DCAMREC_FRAME* pFrame
);

Parameter
hrec
画像データのコピー元となるファイルを HDCAMREC ハンドルで指定します
pFrame
画像データの受け取り先となる DCAMREC_FRAME 構造体インスタンスへのポインタ

Remarks
dcamrec_copyframe() 関数はレコーディングされたファイル内の画像データをホストアプリケーションが指定したバッファにコピーします。

dcamrec_writemetadata()

Declaration
DCAMERR dcamrec_writemetadata(
HDCAMREC hrec,
const DCAM_METADATAHDR* hdr
);

Parameter
hrec
メタデータの記録先となるファイルを HDCAMREC ハンドルで指定します
hdr
書き込むメタデータを含む DCAMREC_FRAME 構造体インスタンスへのポインタ

Remarks
dcamrec_writemetadata() 関数は、ファイルに画像データ以外の情報(メタデータ)を書き込むことができます。 メタデータはレコーディング済みのフレームや、セッション、ファイル単位に書き込めます。

dcamrec_lockmetadata()

Declaration
DCAMERR dcamrec_lockmetadata(
HDCAMREC hrec,
DCAM_METADATAHDR* hdr
);

Parameter
hrec
メタデータの参照元となるファイルを HDCAMREC ハンドルで指定します
hdr
ロックされたメタデータ情報を受け取る DCAM_METADATAHDR 構造体インスタンスへのポインタ

Remarks
dcamrec_lockmetadata() 関数は、ファイルに書き込まれた画像データ以外の情報(メタデータ)の先頭アドレスを得ます。 メタデータはフレームや、セッション、ファイル単位に扱えます。

dcamrec_copymetadata()

Declaration
DCAMERR dcamrec_copymetadata(
HDCAMREC hrec,
DCAM_METADATAHDR* hdr
);

Parameter
hrec
メタデータのコピー元となるファイルを HDCAMREC ハンドルで指定します
hdr
メタデータの受け取り先となる DCAM_METADATAHDR 構造体インスタンスへのポインタ。

Remarks
dcamrec_copymetadata() 関数は、ファイルに書き込まれた画像データ以外の情報(メタデータ)を指定したバッファにコピーします。 メタデータはフレームや、セッション、ファイル単位に扱えます。

dcamrec_lockmetadatablock()

Declaration
DCAMERR dcamrec_lockmetadatablock(
HDCAMREC hrec,
DCAM_METADATABLOCKHDR* hdr
);

Parameter
hrec
メタデータの参照元となるファイルを HDCAMREC ハンドルで指定します
hdr
複数のロックされたメタデータ情報を受け取る DCAM_METADATABLOCKHDR 構造体インスタンスへのポインタ

Remarks
dcamrec_lockmetadatablock() 関数は、ファイルに書き込まれた画像データ以外の情報(メタデータ)への複数の先頭アドレスを得ます。

dcamrec_copymetadatablock()

Declaration
DCAMERR dcamrec_copymetadatablock(
HDCAMREC hrec,
DCAM_METADATABLOCKHDR* hdr
);

Parameter
hrec
メタデータのコピー元となるファイルを HDCAMREC ハンドルで指定します
hdr
複数のメタデータの受け取り先となる DCAM_METADATABLOCKHDR 構造体インスタンスへのポインタ。

Remarks
dcamrec_copymetadatablock() 関数は、ファイルに書き込まれた画像データ以外の情報(メタデータ)の複数を指定したバッファにコピーします。

dcamrec_pause()

Declaration
DCAMERR dcamrec_pause(
HDCAMREC hrec
);

Parameter
hrec
記録を中断するファイルを HDCAMREC ハンドルで指定します

Remarks
レコーディングを中断します。画像取り込みは継続されます。再開するときには dcamrec_resume() 関数を使います。

dcamrec_resume()

Declaration
DCAMERR dcamrec_resume(
HDCAMREC hrec
);

Parameter
hrec
記録を再開するファイルを HDCAMREC ハンドルで指定します

Remarks
レコーディングを再開します。セッションは新しいセッションになります。

dcamrec_status()

Declaration
DCAMERR dcamrec_status(
HDCAMREC hrec,
DCAMREC_STATUS* pStatus
);

Parameter
hrec
記録状態を取得する対象となるファイルを HDCAMREC ハンドルで指定します
pStatus
記録状態の受け取り先となる DCAMREC_STATUS 構造体インスタンスへのポインタ

Remarks
レコーディングの状態を取得します。

このチャプターの先頭へ戻る


構造体



DCAM_GUID

struct DCAM_GUID {
_ui32 Data1; //
unsigned short Data2; //
unsigned short Data3; //
unsigned char Data4[8]; //
};

Remarks
DCAMAPI_INIT 構造体の guid メンバで使用されている型です。 一般には使用しません。


DCAMAPI_INIT

struct DCAMAPI_INIT {
int32 size; // sizeof(*this)
int32 iDeviceCount; // 認識されたデバイスの数
int32 reserved; // 予約
int32 initoptionbytes; // initoption配列のバイトサイズ
const int32* initoption; // 初期化オプション、DCAMAPI_INITOPTION型配列
const DCAM_GUID* guid; // GUID オプション、通常は NULL
};

size
DCAMAPI_INIT 構造体のバイトサイズを指定します。
iDeviceCount
dcamapi_init() 関数で認識できたデバイスの数が返されます。
reserved
予約されています。0を指定してください。
initoptionbytes
initoptionメンバに指定するDCAMAPI_INITOPTION配列のバイトサイズを指定します。 初期化オプションを指定しない場合は0を指定します。
initoption
DCAMAPI_INITOPTION配列へのポインタを指定します。 初期化オプションを使用しない場合はNULLを指定します。
guid
DCAM_GUIDインスタンスへのポインタを指定します。 通常はNULLを指定します。

Remarks
dcamapi_init() 関数を呼び出す際に引数にポインタで渡します。 DCAM-APIを初期化するためのオプションの指定や認識されたデバイスの数を受け取ります。


DCAMDEV_OPEN

struct DCAMDEV_OPEN {
int32 size; // sizeof(*this)
int32 index; // HDCAMハンドルを取得するデバイスのインデックス
HDCAM hdcam; //
};

size
DCAMDEV_OPEN 構造体のバイトサイズを指定します。
index
HDCAMハンドルを取得するデバイスのインデックスを設定します。インデックスは0からなので0からDCAMAPI_INIT構造体のメンバ変数iDeviceCountの値より小さい値を設定する必要があります。
hdcam
dcamdev_open()を読んだ後、デバイスハンドルが返ります。

DCAMDEV_CAPABILITY

struct DCAMDEV_CAPABILITY {
int32 size; // size of whole structure
int32 domain; // ドメイン
int32 capflag; // サポート機能
int32 kind; // ドメインの詳細
};

size
構造体全体のサイズを指定します。他の構造体に含まれている場合は、その構造体のサイズを指定します。
domain
サポートを確認したい機能のDCAMDEV_CAPDOMAINを設定します。
capflag
domainで指定された機能のサポートフラグを返します。domainによっては、kindでデータの種類を指定する必要があります。
kind
domainで指定された機能のデータの種類を指定します。

DCAMDEV_CAPABILITY_LUT

struct DCAMDEV_CAPABILITY_LUT {
DCAMDEV_CAPABILITY hdr; // size = sizeof(*this), domain = DCAMDEV_CAPDOMAIN__DCAMDATA, kind = DCAMDATA_KIND__LUT
int32 linearpointmax; // 線形LUTの指定個所の最大数
};

hdr
domainにDCAMDEV_CAPDOMAIN__DCAMDATAを、kindにDCAMDATA_KIND__LUTを指定します。サポートしているLUTTYPEがcapflagに返ります。Attributeフラグは他の設定によって変わることがあります。
linearpointmax
線形LUTで指定できる箇所の最大数が返ります。

DCAMDEV_CAPABILITY_REGION

struct DCAMDEV_CAPABILITY_REGION {
DCAMDEV_CAPABILITY hdr; // size = sizeof(*this), domain = DCAMDEV_CAPDOMAIN__DCAMDATA, kind = DCAMDATA_KIND__REGION
int32 horzunit; // 水平方向のステップ
int32 vertunit; // 垂直方向のステップ
};

hdr
domainにDCAMDEV_CAPDOMAIN__DCAMDATAを、kindにDCAMDATA_KIND__REGIONを指定します。サポートしているREGIONTYPEがcapflagに返ります。
horzunit
カメラが切り出しを行える水平方向のステップを返します。設定された領域がステップに合わない時は、DCAMがステップに合うように領域を広げます。
vertunit
カメラが切り出しを行える垂直方向のステップを返します。設定された領域がステップに合わない時は、DCAMがステップに合うように領域を広げます。

DCAMDEV_CAPABILITY_FRAMEOPTION

struct DCAMDEV_CAPABILITY_FRAMEOPTION {
DCAMDEV_CAPABILITY hdr; // size = sizeof(*this), domain = DCAMDEV_CAPDOMAIN__FRAMEOPTION
int32 supportproc; // サポートしているDCAMBUF_PROCTYP
};

hdr
domainにDCAMDEV_CAPDOMAIN__FRAMEOPTIONを指定します。現在の状況で使用可能なDCAMBUF_PROCTYPEがcapflagに返ります。
supportproc
サポートしているDCAMBUF_PROCTYPEを返します。使用条件を持っているものがあるため、現在の設定で使用可能かどうかはhdr.capflgで確認する必要があります。

DCAMDEV_STRING

struct DCAMDEV_STRING {
int32 size; // sizeof(*this)
int32 iString; //
char* text; //
int32 textbytes; //
};

size
DCAMDEV_STRING 構造体のバイトサイズを指定します。
iString
受け取りたい文字列情報に対応する DCAM_IDSTR もしくは DCAMERR の値を指定します。
text
文字列情報受け取る文字列バッファを指定します。
textbytes
文字列情報受け取る文字列バッファのバイトサイズを指定します。

DCAMDATA_HDR

struct DCAMDATA_HDR {
int32 size; // 構造体全体のサイズ、この構造体のサイズではありません
int32 iKind; //
int32 option; // DCAMDATA_OPTION
int32 reserved2; // 予約
};

size
DCAMDATA_HDR構造体を含む、全体の構造体のバイトサイズを指定します。
iKind
設定するデータに対応する DCAMDATA_KIND 値を指定します。
option
DCAMDATA_OPTIONを設定し、Viewの指定を行います。
reserved2
予約されています。0を指定してください。

DCAMDATA_REGION

struct DCAMDATA_REGION {
DCAMDATA_HDR hdr; // メンバ変数sizeにこの構造体のサイズを設定
int32 option; // 予約
int32 type; // DCAMDATA_REGIONTYPE
void* data; // データの先頭ポインタ
int32 datasize; // dataのサイズ
int32 reserved; // 予約
};

hdr
メンバ変数iKindにDCAMDATA_KIND_REGIONを設定
option
予約されています。0を指定してください。
type
設定する領域のデータ構造を指定します。
data
データのポインタを設定します。このデータタイプは設定されたDCAMDATA_REGIONTYPEになります。
datasize
dataのサイズを設定します。
reserved
予約されています。0を指定してください。

DCAMDATA_REGIONRECT

struct DCAMDATA_REGIONRECT {
short left; //
short top; //
short right; //
short bottom; //
};

left
水平方向の左端の座標値を設定します。
top
垂直方向の上端の座標値を設定します。
right
水平方向の右端の座標値を設定します。
bottom
垂直方向の下端の座標値を設定します。

DCAMDATA_LUT

struct DCAMDATA_LUT {
DCAMDATA_HDR hdr; // メンバ変数sizeにこの構造体のサイズを設定
int32 type; // DCAMDATA_LUTTYPE
int32 page; // ページ番号
void* data; // データの先頭ポインタ
int32 datasize; // dataのサイズ
int32 reserved; // 予約
};

hdr
メンバ変数iKindにDCAMDATA_KIND_LUTを設定
type
設定するLUTのデータ構造を指定します。
page
ロードもしくはセーブするページを指定します。
data
データのポインタを設定します。このデータタイプは設定されたDCAMDATA_LUTTYPEになります。
datasize
dataのサイズを設定します。
reserved
予約されています。0を指定してください。

DCAMDATA_LINEARLUT

struct DCAMDATA_LINEARLUT {
int32 lutin; //
int32 lutout; //
};

lutin
基準点の入力データの値を指定します。
lutout
基準点の出力データの値を指定します。

DCAMPROP_ATTR

struct DCAMPROP_ATTR {
int32 cbSize; // sizeof(*this)
int32 iProp; // DCAMIDPROPERTY
int32 option; // 予約
int32 iReserved1; // 予約
int32 attribute; // DCAMPROPATTRIBUTE
int32 iGroup; // 予約
int32 iUnit; // DCAMPROPUNIT
int32 attribute2; // DCAMPROPATTRIBUTE2
double valuemin; // 最小値
double valuemax; // 最大値
double valuestep; // 二つの連続するプロパティ値の最小差
double valuedefault; // デフォルト値
int32 nMaxChannel; // 最大チャンネル数(チャンネルサポート時)
int32 iReserved3; // 予約
int32 nMaxView; // 最大ビュー数(マルチビューサポート時)
int32 iProp_NumberOfElement; // アレイプロパティの要素数を取得できるプロパティID(アレイプロパティ時)
int32 iProp_ArrayBase; // アレイプロパティの先頭プロパティのIDを返します(アレイプロパティの要素時)
int32 iPropStep_Element; // アレイプロパティの要素間のIDのステップ
};

cbSize
DCAMPROP_ATTR 構造体のバイトサイズを指定します。
iProp
受け取りたいプロパティに対応する DCAM_IDPROP 値を指定します。
option
予約されています。0を指定してください。
iReserved1
予約されています。0を指定してください。
attribute
プロパティの属性を返します。DCAMPROPATTRIBUTE 列挙型で定義されるビットごとに意味を持ちます。
iGroup
現在はサポートされていません。値は無視してください。
iUnit
プロパティの値に単位がある場合、それを示す DCAMPROPUNIT 値が設定されます。
attribute2
プロパティの属性を返します。DCAMPROPATTRIBUTE2 列挙型で定義されるビットごとに意味を持ちます。
valuemin
プロパティの取りうる最小値を返します。
valuemax
プロパティの取りうる最小値を返します。
valuestep
二つの連続するプロパティ値の最小差を返します。
valuedefault
プロパティのデフォルト値を返します。この値は初期化時にセットされる場合があります。
nMaxChannel
プロパティがチャンネルによって異なる値を取る場合、その最大チャンネル番号を返します。
nMaxView
プロパティがビュー毎に異なる値を取る場合、その最大ビュー番号を返します。
iProp_NumberOfElement
プロパティが配列の一部である場合、配列の要素数を取得するためのプロパティIDを返します。
iProp_ArrayBase
プロパティが配列の一部である場合、配列の先頭プロパティの ID を返します。
iPropStep_Element
プロパティが配列の一部である場合、次のまたは一つ前のプロパティの ID との差を返します。

DCAMPROP_VALUETEXT

struct DCAMPROP_VALUETEXT {
int32 cbSize; // sizeof(*this)
int32 iProp; // DCAMIDPROP
double value; // プロパティ値
char* text; // プロパティ値の文字列
int32 textbytes; // textのバッファサイズ
};

cbSize
DCAMPROP_VALUETEXT 構造体のバイトサイズを指定します。
iProp
受け取りたいプロパティに対応する DCAM_IDPROP 値を指定します。
value
文字列を受け取りたいプロパティの値を指定します。
text
文字列情報受け取る文字列バッファを指定します。
textbytes
文字列情報受け取る文字列バッファのバイトサイズを指定します。

DCAMBUF_ATTACH

struct DCAMBUF_ATTACH {
int32 size; // sizeof(*this)
int32 iKind; // DCAMBUF_ATTACHKIND
void** buffer; // バッファポインタの配列
int32 buffercount; // bufferで渡したポインタの数
};

size
DCAMBUF_ATTACH 構造体のバイトサイズを指定します。
iKind
バッファの対象を指定します。
buffer
バッファのポインタを指定します。
buffercount
バッファの個数を指定します。

DCAM_TIMESTAMP

struct DCAM_TIMESTAMP {
int32 sec; //
int32 microsec; //
};

sec
1970年1月1日を基準とした秒を意味します。
microsec
1970年1月1日を基準としたマイクロ秒を意味します。

DCAMBUF_FRAME

struct DCAMBUF_FRAME {
int32 size; // sizeof(*this)
int32 iKind; // 予約
int32 option; // 予約
int32 iFrame; // フレーム番号
void* buf; // 画像のポインタ
int32 rowbytes; // 次の行までのバイト数
DCAM_PIXELTYPE type; // 画像データの画素タイプ
int32 width; // 水平方向の画素数
int32 height; // 垂直方向のライン数
int32 left; // 水平方向の先頭画素
int32 top; // 垂直方向の先頭ライン
DCAM_TIMESTAMP timestamp; // タイムスタンプ
int32 framestamp; // フレームスタンプ
int32 camerastamp; // カメラスタンプ
};

size
DCAMBUF_FRAME 構造体のバイトサイズを指定します。
iFrame
画像バッファ内の番号を指定します。-1の場合、最後に取り込まれたバッファを対象とします。
buf
dcambuf_lockframe() 関数は、指定された画像バッファの左上の位置を返します。 dcambuf_copyframe() 関数を使う場合は、コピー先のバッファの先頭アドレスを指定します。
rowbytes
dcambuf_lockframe() 関数は、画像バッファの一ライン分のバイト数を返します。 dcambuf_copyframe() 関数を使う場合は、コピー先のバッファの一ライン分のバイト数を指定します。
type
dcambuf_lockframe() 関数は、画像バッファの画素タイプを返します。 dcambuf_copyframe() 関数を使う場合は、予約されており、0 を設定する必要があります。
width
dcambuf_lockframe() 関数は、画像バッファの水平画素数を返します。 dcambuf_copyframe() 関数を使う場合は、コピーする水平画素数を指定します。
height
dcambuf_lockframe() 関数は、画像バッファの垂直画素数を返します。 dcambuf_copyframe() 関数を使う場合は、コピーする垂直画素数を指定します。
left
dcambuf_lockframe() 関数を使う場合は、予約されており、0 を設定する必要があります。 dcambuf_copyframe() 関数を使う場合は、コピー元の水平開始位置を指定します。
top
dcambuf_lockframe() 関数を使う場合は、予約されており、0 を設定する必要があります。 dcambuf_copyframe() 関数を使う場合は、コピー元の垂直開始位置を指定します。
timestamp
指定された画像のタイムスタンプを返します。
framestamp
指定された画像のフレームスタンプを返します。
camerastamp
指定されたデバイスハンドルに対応するカメラスタンプを返します。

DCAMREC_FRAME

struct DCAMREC_FRAME {
int32 size; // sizeof(*this)
int32 iKind; // 予約
int32 option; // DCAMREC_FRAME_OPTION
int32 iFrame; // フレーム番号
void* buf; // 画像の左上のポインタ
int32 rowbytes; // 次のラインまでのバイト数
DCAM_PIXELTYPE type; // 予約、0を設定してください
int32 width; // 水平方向の画素数
int32 height; // 垂直方向のライン数
int32 left; // 水平方向の先頭画素
int32 top; // 垂直方向の先頭ライン
DCAM_TIMESTAMP timestamp; // タイムスタンプ
int32 framestamp; // フレームスタンプ
int32 camerastamp; // カメラスタンプ
};

size
DCAMREC_FRAME 構造体のバイトサイズを指定します。
iFrame
画像バッファ内の番号を指定します。-1の場合、呼び出した時点で最後に書き込まれたバッファを対象とします。
buf
dcamrec_lockframe() 関数は、指定された画像バッファの左上の位置を返します。 dcamrec_copyframe() 関数を使う場合は、コピー先のバッファの先頭アドレスを指定します。
rowbytes
dcamrec_lockframe() 関数は、画像バッファの一ライン分のバイト数を返します。 dcamrec_copyframe() 関数を使う場合は、コピー先のバッファの一ライン分のバイト数を指定します。
width
dcamrec_lockframe() 関数は、画像バッファの水平画素数を返します。 dcamrec_copyframe() 関数を使う場合は、コピーする水平画素数を指定します。
height
dcamrec_lockframe() 関数は、画像バッファの垂直画素数を返します。 dcamrec_copyframe() 関数を使う場合は、コピーする垂直画素数を指定します。
left
dcamrec_lockframe() 関数を使う場合は、予約されており、0 を設定する必要があります。 dcamrec_copyframe() 関数を使う場合は、コピー元の水平開始位置を指定します。
top
dcamrec_lockframe() 関数を使う場合は、予約されており、0 を設定する必要があります。 dcamrec_copyframe() 関数を使う場合は、コピー元の垂直開始位置を指定します。
timestamp
指定された画像のタイムスタンプを返します。
framestamp
指定された画像のフレームスタンプを返します。
camerastamp
指定されたデバイスハンドルに対応するカメラスタンプを返します。

DCAMWAIT_OPEN

struct DCAMWAIT_OPEN {
int32 size; // sizeof(*this)
int32 supportevent; // サポートされているイベント
HDCAMWAIT hwait; // dcamwait関数用のハンドル
HDCAM hdcam; // デバイスのHDCAMハンドル
};

size
DCAMWAIT_OPEN 構造体のバイトサイズを指定します。
supportevent
サポートされているイベントを返します。
hwait
HDCAMWAIT ハンドルを返します。他の dcamwait 関数で使用します。
hdcam
dcamwait 関数の対象となるデバイスの HDCAM ハンドルを指定します。

DCAMWAIT_START

struct DCAMWAIT_START {
int32 size; // sizeof(*this)
int32 eventhappened; //
int32 eventmask; //
int32 timeout; //
};

size
DCAMWAIT_START 構造体のバイトサイズを指定します。
eventhappened
発生したイベントを返します。
eventmask
待つ対象となるイベントを指定します。
timeout
タイムアウトをミリ秒で指定します。

DCAMCAP_TRANSFERINFO

struct DCAMCAP_TRANSFERINFO {
int32 size; // sizeof(*this)
int32 iKind; // DCAMCAP_TRANSFERKIND
int32 nNewestFrameIndex; // 最新フレームのインデックス
int32 nFrameCount; // 取り込まれたフレーム数
};

size
DCAMCAP_TRANSFERINFO 構造体のバイトサイズを指定します。
nNewestFrameIndex
最後に取り込まれたフレームのインデックスを返します。
nFrameCount
取り込まれたフレーム数を返します。

DCAMREC_OPEN

struct DCAMREC_OPEN {
int32 size; // sizeof(*this)
int32 reserved; //
HDCAMREC hrec; // dcamrec関数用のハンドル
const TCHAR* path; // ファイルパス
const TCHAR* ext; // ファイルの拡張子
int32 maxframepersession; // 1セッションあたりの最大フレーム数
int32 userdatasize; // ユーザデータサイズ
int32 userdatasize_session; // セッション用のユーザデータサイズ
int32 userdatasize_file; // ファイル用のユーザデータサイズ
int32 usertextsize; // ユーザテキストサイズ
int32 usertextsize_session; // セッション用ユーザテキストサイズ
int32 usertextsize_file; // ファイル用ユーザテキストサイズ
};

size
DCAMREC_OPEN 構造体のバイトサイズを指定します。
hrec
HDCAMREC ハンドルを返します。他の dcamrec 関数で使用します。
path
書き込み先となるファイルパスを拡張子無しで指定します。
ext
書き込み先となるファイルの拡張子を指定します。
maxframepersession
1セッションあたりの最大フレーム数を指定します。
userdatasize
1フレームあたりのバイナリメタデータの最大バイト数を指定します。
userdatasize_session
1セッションあたりのバイナリメタデータの最大バイト数を指定します。
userdatasize_file
ファイルへのバイナリメタデータの最大バイト数を指定します。
usertextsize
1フレームあたりのテキストメタデータの最大バイト数を指定します。
usertextsize_session
1セッションあたりのテキストのメタデータの最大バイト数を指定します。
usertextsize_file
ファイルへのテキストのメタデータの最大バイト数を指定します。

DCAM_METADATAHDR

struct DCAM_METADATAHDR {
int32 size; // 構造体全体のサイズ、この構造体のサイズではありません
int32 iKind; // DCAM_METADATAKIND (DCAMBUF_METADATAKIND or DCAMREC_METADATAKIND)
int32 option; // DCAM_METADATAKINDによって値の意味が異なります
int32 iFrame; // フレーム番号
};

size
DCAM_METADATAHDR 構造体を含む、全体の構造体のバイトサイズを指定します。
iKind
メタデータの種類を指定します。
option
オプションを指定します。メタデータの種類によって異なります。
iFrame
対象となるフレーム番号を指定します。対象がフレームの時のみ有効です。

DCAM_METADATABLOCKHDR

struct DCAM_METADATABLOCKHDR {
int32 size; // 構造体全体のサイズ、この構造体のサイズではありません
int32 iKind; // DCAM_METADATAKIND
int32 option; // DCAMBUF_METADATAOPTIONかDCAMREC_METADATAOPTIONかによって値の意味が異なります
int32 iFrame; // 先頭のフレーム番号
int32 in_count; // 取得するメタデータの最大数
int32 outcount; // 取得したメタデータの数
};

size
DCAM_METADATABLOCKHDR 構造体を含む、全体の構造体のバイトサイズを指定します。
iKind
メタデータの種類を指定します。
option
DCAMBUF_METADATAOPTION や DCAMREC_METADATAOPTION の値をオプションとして指定します。メタデータの種類によって異なります。
iFrame
対象となる開始フレーム番号を指定します。
in_count
取得したメタデータのフレーム数を指定します。0 が指定されると現在有効なメタデータの数値となります。
outcount
取得したメタデータのフレーム数を返します。

DCAM_USERDATATEXT

struct DCAM_USERDATATEXT {
DCAM_METADATAHDR hdr; // メンバ変数sizeにこの構造体のサイズを設定
char* text; // テキストメタデータ
int32 text_len; // メタデータのバイトサイズ
int32 codepage; // DCAM_CODEPAGE
};

hdr
メンバ変数iKindにDCAM_METADATAKINF_USERDATATEXTを設定し、 メンバ変数optionにDCAMREC_METADATAOPTIONのどれか1つを設定する必要があります。
text
テキストメタデータを設定します。
text_len
テキストデータのバイトサイズを設定します。
codepage
テキストエンコードIDを設定します。

DCAM_USERDATABIN

struct DCAM_USERDATABIN {
DCAM_METADATAHDR hdr; // メンバ変数sizeにこの構造体のサイズを設定
void* bin; // バイナリメタデータ
int32 bin_len; // バイナリメタデータのバイトサイズ
int32 reserved; // 予約
};

hdr
メンバ変数iKindにDCAM_METADATAKIND_USERDATABINを設定し、 メンバ変数optionにDCAMREC_METADATAOPTIONのどれか1つを設定する必要があります。
bin
バイナリメタデータを設定します。
bin_len
バイナリメタデータのバイトサイズを設定します。

DCAM_TIMESTAMPBLOCK

struct DCAM_TIMESTAMPBLOCK {
DCAM_METADATABLOCKHDR hdr; // メンバ変数sizeにこの構造体のサイズを設定
DCAM_TIMESTAMP* timestamps; // TIMESTAMPブロックのポインタ
int32 timestampsize; // sizeof(DCAM_TIMESTAMP)
int32 timestampvaildsize; // 書き込まれたDCAM_TIMESTAMPのデータサイズを返します
int32 timestampkind; // タイムスタンプの種類(ハードウエア、ドライバ、DCAMなど)を返します
int32 reserved; // 予約
};

hdr
メンバ変数iKindにDCAM_METADATAKIND_TIMESTAMPSを設定し、 メンバ変数optionにDCAMBUF_METADATAOPTIONもしくはDCAMREC_METADATAOPTIONのどれか1つを設定する必要があります。
timestamps
dcamrec_lockmetadatablock() 関数は、タイムスタンプ配列へのポインタを返します。 dcamrec_copymetadatablock() 関数を使う場合は、タイムスタンプ配列のコピー先となるバッファを指定します。
timestampsize
DCAM_TIMESTRAMP 構造体の大きさを指定します。将来の互換性の為に必要です。
timestampvaildsize
一個あたりの DCAM_TIMESTAMP 構造体に書き込まれたバイト数を返します。将来の互換性の為に必要です。
timestampkind
タイムスタンプを生成したデバイスを返します。
reserved
予約されています。

DCAM_FRAMESTAMPBLOCK

struct DCAM_FRAMESTAMPBLOCK {
DCAM_METADATABLOCKHDR hdr; // メンバ変数のsizeにこの構造体のサイズを設定
int32* framestamps; // フレームスタンプブロックのポインタ
int32 reserved; // 予約
};

hdr
メンバ変数iKindにDCAM_METADATAKIND_FRAMESTAMPSを設定し、 メンバ変数optionにDCAMBUF_METADATAOPTIONかDCAMREC_METADATAOPTIONのどれか1つを設定する必要があります。
framestamps
dcamrec_lockmetadatablock() 関数は、フレームスタンプ配列へのポインタを返します。 dcamrec_copymetadatablock() 関数を使う場合は、フレームスタンプ配列のコピー先となるバッファを指定します。

DCAM_METADATATEXTBLOCK

struct DCAM_METADATATEXTBLOCK {
DCAM_METADATABLOCKHDR hdr; // メンバ変数sizeにこの構造体のサイズを設定
void* text; // ユーザテキストメタデータの配列のポインタ
int32* textsizes; // ユーザテキストメタデータサイズの配列のポインタ
int32 bytesperunit; // テキストメタデータ全体のサイズ
int32 reserved; // 予約
int32* textcodepage; // テキストのコードページ
};

text
dcamrec_copymetadatablock()関数の場合、ホストソフトウエアはテキストメタデータをコピーするためのバッファを設定する必要があります。
dcamrec_lockmetadatablock()関数の場合、それぞれのテキストメタデータのポインタを返します。
textsizes
dcamrec_copymetadatablock()関数の場合、ホストソフトウエアは、それぞれのテキストメタデータをコピーするサイズを指定できます。
dcamrec_lockmetadatablock()関数の場合、それぞれのテキストメタデータサイズのポインタが返ります。
bytesperunit
dcamrec_copymetadatablock()関数の場合、ホストソフトウエアはテキストメタデータを受け取るためのバッファのサイズを設定する必要があります。それぞれのバッファは、このサイズを持っている必要があります。
dcamrec_lockmetadatavblock()関数の場合、DCAMREC_OPENで設定したユニットの最大バイト数を返します。
textcodepage
dcamrec_copymetadatablock()関数の場合、ホストソフトウエアはそれぞれのコードページを受け取るための配列のポインタを設定する必要があります。
dcamrec_lockmetadatablock()関数の場合、それぞれのテキストメタデータのコードページ配列のポインタを返します。

DCAM_METADATABINBLOCK

struct DCAM_METADATABINBLOCK {
DCAM_METADATABLOCKHDR hdr; // メンバ変数sizeにこの構造体のサイズを設定
void* bin; // ユーザデータのためのポインタの配列
int32* binsizes; // ユーザバイナリメタデータサイズのポインタ配列
int32 bytesperunit; // バイナリメタデータの全体のサイズ
int32 reserved; // 予約
};

bin
dcamrec_copymetadatablock()関数の場合、バイナリメタデータをコピーするためのポインタを設定します。 dcamrec_lockmetadatablock()関数の場合、それぞれのバイナリメタデータにアクセスするためのポインタを返します。
binsizes
dcamrec_copymetadatablock()関数の場合、ホストソフトウエアはそれぞれのバイナリメタデータのコピーサイズを指定できます。
dcamrec_lockmetadatablock()関数の場合、それぞれのバイナリメタデータのサイズの配列のポインタを返します。
bytesperunit
dcamrec_copymetadatablock()関数の場合、ホストソフトウエアはそれぞれのバイナリメタデータを受け取るためのバッファのサイズを設定する必要があります。それぞれのバッファはこのサイズでなければなりません。
dcamrec_lockmetadatablock()関数は、DCAMREC_OPENで設定したユニットの最大バイト数の値を返します。

DCAMREC_STATUS

struct DCAMREC_STATUS {
int32 size; // sizeof(*this)
int32 currentsession_index; // 現在のセッションのインデックス
int32 maxframecount_per_session; // セッションあたりの最大フレーム数
int32 currentframe_index; // 現在のフレームのインデックス
int32 missingframe_count; // 書き込み失敗フレーム数
int32 flags; // DCAMREC_STATUSFLAG
int32 totalframecount; // 書き込んだすべてのフレーム数
int32 reserved; // 予約
};

size
この構造体のバイトサイズを指定します。
currentsession_index
カレントセッションの番号を返します。
maxframecount_per_session
セッションあたりの最大フレーム数を返します。
currentframe_index
カレントフレームの番号を返します。
missingframe_count
書き込みに失敗したフレーム数を返します。
totalframecount
ファイル中に書き込まれている全フレーム数を返します。

このチャプターの先頭へ戻る