IMFCameraControlDefaults
COM公式ドキュメント
カメラコントロールの既定値を指定するためのメソッドを提供します。
解説(Remarks)
このインターフェイスは IMFCameraControlDefaultsCollection および IMFCameraConfigurationManager と組み合わせて使用し、既定のコントロール値のセットを保存します。これにより、ユーザーごとに異なる既定のコントロール値のセットを提供するといったシナリオが可能になります。
メソッド 4
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
コントロールの構成タイプを取得します。これは、コントロール値をストリーミング開始前に設定する必要があるか、ストリーミング開始後に設定する必要があるかを示します。
戻り値
コントロールの構成タイプを指定する MF_SENSOR_CONTROL_CONFIGURATION_TYPE 列挙体のメンバー。
解説(Remarks)
一部のセンサーレベルのコントロール(フォーカス、明るさ、ホワイトバランスなど)は、パラメーターを収束させるためにフレームデータを必要とするため、センサーの開始後にのみ設定できます。HDR サポートなどの他のタイプのコントロールは、センサーモードの再プログラミングを必要とするため、センサーが実行状態にないときにのみ構成できます。既知のコントロールが開始前か開始後かは、コントロールの DDI 仕様で指定されています。DDI 仕様でコントロールが開始前コントロールであることが明示的に示されていない場合、呼び出し元はそのコントロールを開始後コントロールとみなす必要があります。
カメラコントロールの許容範囲、ステップ値、既定値に関する情報を取得します。
| rangeInfo | MF_CAMERA_CONTROL_RANGE_INFO* | out | コントロールの範囲情報を表す MF_CAMERA_CONTROL_RANGE_INFO 構造体へのポインターを受け取ります。 |
戻り値
次を含む HRESULT:
| Value | Description | | S_OK | 成功 | | MF_E_NOT_FOUND | コントロールが基本的な範囲値をサポートしていません。 |
解説(Remarks)
従来の PROPSETID_VIDCAP_VIDEOPROCAMP および PROPSETID_VIDCAP_CAMERACONTROL コントロールセットは、コントロールを構成できる許容範囲とステップ値、および既定値を提供します。その他のコントロールについては、基になるコントロールが基本的な範囲情報をサポートしているかどうかを把握するのは呼び出し元の責任です。
IMFCameraControlDefaults インスタンスに関連付けられたコントロールのデータペイロードを取得し、クライアントがコントロール値を直接変更できるようにします。
| control | void** | out | ロックされるコントロールへのポインターを受け取ります。 |
| controlSize | DWORD* | out | control が指す構造体のサイズを受け取ります。 |
| data | void** | outoptional | コントロールのデータペイロードへのポインターを受け取ります。 |
| dataSize | DWORD* | outoptional | dataSize が指すバッファーのサイズを受け取ります。 |
戻り値
成功した場合は S_OK。
解説(Remarks)
カスタムコントロールは任意のペイロードスキーマサイズを持つことができるため、control および data パラメーターは型チェックされません。
コントロールを含むコレクションを IMFCameraConfigurationManager::SaveDefaults メソッドに送信する前に、UnlockControlData を呼び出す必要があります。
LockControlData の呼び出しでロックされたコントロールデータバッファーのロックを解除します。
戻り値
成功した場合は S_OK。
解説(Remarks)
UnlockControlData を呼び出した後、クライアントはコントロールデータバッファーの内容を変更してはなりません。変更すると未定義の動作になります。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IMFCameraControlDefaults "{75510662-B034-48F4-88A7-8DE61DAA4AF9}" #usecom global IMFCameraControlDefaults IID_IMFCameraControlDefaults "{}" #comfunc global IMFCameraControlDefaults_GetType 3 #comfunc global IMFCameraControlDefaults_GetRangeInfo 4 var #comfunc global IMFCameraControlDefaults_LockControlData 5 sptr,var,sptr,var #comfunc global IMFCameraControlDefaults_UnlockControlData 6 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IMFCameraControlDefaults "{75510662-B034-48F4-88A7-8DE61DAA4AF9}" #usecom global IMFCameraControlDefaults IID_IMFCameraControlDefaults "{}" #comfunc global IMFCameraControlDefaults_GetType 3 #comfunc global IMFCameraControlDefaults_GetRangeInfo 4 sptr #comfunc global IMFCameraControlDefaults_LockControlData 5 sptr,sptr,sptr,sptr #comfunc global IMFCameraControlDefaults_UnlockControlData 6 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。