KSPROPERTY_CAMERACONTROL_PERFRAMESETTING_SET
KSPROPERTY_CAMERACONTROL_PERFRAMESETTING_PROPERTY で定義されている KSPROPERTY_CAMERACONTROL_PERFRAMESETTING_SET プロパティ ID は、ドライバーのフレームごとの設定に使用されます。
使用状況の概要
フレームごとの設定を設定するには、KSPROPERTY_CAMERACONTROL_PERFRAMESETTING_SET プロパティ コントロールをフレームごとの設定ペイロードと共にドライバーに送信します。
このプロパティは、読み取りまたは書き込み可能です。 GET 呼び出しを使用して、ドライバーに設定されたフレームごとの最後の設定を返すことができますが、GET 呼び出しはアプリ クライアントに公開されず、MF パイプラインによってフレームごとの設定コントロールが構築された初期化時にのみ発行されます。この場合、ドライバーはバッファー サイズが 0 の STATUS_BUFFER_OVERFLOW を返す必要があります。
GET 呼び出しでは、長さ 0 のバッファーが最初にドライバーに送信され、ドライバーが持つフレームごとの設定全体を保持するために必要なデータ バッファー サイズが確認されます。 この呼び出しに応答して、ドライバーは必要なフレームごとの設定バッファー サイズを持つ STATUS_BUFFER_OVERFLOW を返す必要があります。フレームごとの設定が設定されていない場合は 0、それ以外の場合は少なくとも KSCAMERA_PERFRAMESETTING_HEADER のサイズを返す必要があります。
フレームごとの設定ペイロードは、KSCAMERA_PERFRAMESETTING_HEADER で始まり、その後に 1 つ以上のフレーム設定が続く必要があります。 フレーム設定の数は FrameCount で指定します。 各フレームの設定は、KSCAMERA_PERFRAMESETTING_FRAME_HEADER で始まり、その後に 0 個以上の項目設定が続く必要があります。 ItemCount で指定されている項目設定の数。 KSCAMERA_PERFRAMESETTING_ITEM_HEADER で始まる必要がある場合の、各項目の設定。
項目の設定では、Value ペイロードが存在する場合は、KSCAMERA_PERFRAMESETTING_ITEM_HEADER の後に KSCAMERA_EXTENDEDPROP_VALUE が続く必要があります。 カスタム項目が存在する場合は、KSCAMERA_PERFRAMESETTING_ITEM_HEADER の後に KSCAMERA_PERFRAMESETTING_CUSTOM_ITEM が続き、その後に KSCAMERA_PERFRAMESETTING_CUSTOM_ITEM で指定された GUID ID に関連付けられたカスタム データが続く必要があります。
FrameCount が 0 の場合、ドライバーはフレームごとの設定ペイロードを拒否する必要があります。 ItemCount が 0 の場合、フレーム設定は指定されません。 ドライバーは、関連付けられているフレームにグローバル設定を適用する必要があります。 たとえば、FrameCount = 1、ItemCount = 0 は、グローバル設定を持つ 1 つのフレーム可変写真シーケンスを意味します。
次の図は、フレームごとの設定ペイロード構成のデータ構造レイアウトを示しています。 次の例では、4 つのフレームのフレームごとの設定が構成されています。フレーム 0 には 3 つの項目が含まれており、ペイロードがない項目が 2 つ、Value ペイロードを含む項目が 1 つです。フレーム 1 には 2 つの項目が含まれており、ペイロードがない項目が 1 つ、Value ペイロードを含む項目が 1 つです。フレーム 2 には 0 個の項目が含まれており、これはフレーム 2 のグローバル設定を意味します。フレーム 3 には 4 つの項目が含まれており、1 つの項目には Value ペイロードが含まれており、2 つの項目にはそれぞれカスタム項目とカスタム データのペイロードが含まれており、1 つの項目にはペイロードが含まれていません。
フレームごとの設定ヘッダーのサイズは KSCAMERA_PERFRAMESETTING_HEADER.Size に入力するペイロードの合計サイズを表します。
フレームごとの設定フレームのサイズは、フレームの KSCAMERA_PERFRAMESETTING_FRAME_HEADER.Size に入力するサイズを表します。
項目のサイズは、項目の KSCAMERA_PERFRAMESETTING_ITEM_HEADER.Size に入力するサイズを表します。
カスタム項目のサイズ は、カスタム項目の KSCAMERA_PERFRAMESETTING_CUSTOM_ITEM.Size に入力するサイズを表します。
フレームごとの設定の露出時間
フレームごとの設定で手動の露出時間が指定されている場合は、KSCAMERA_EXTENDEDPROP_VALUE.Value.ll には、SET 呼び出しで必要な露出時間と GET 呼び出しで使用されている現在の露出時間が含まれます。
フレームごとの設定補正
フレームごとの設定で手動の設定補正が指定されている場合は、KSCAMERA_EXTENDEDPROP_VALUE.Value.l には、SET 呼び出しで必要な露出補正と GET 呼び出しで使用されている現在の露出補正が含まれます。
フレームごとの設定フォーカス
フレームごとの手動設定がフレームごとの設定で指定されている場合は、KSCAMERA_EXTENDEDPROP_VALUE.Value.ul には、SET 呼び出しの目的のレンズ位置と GET 呼び出しで使用されている現在のレンズ位置が含まれます。
フレームごとの設定 ISO
ドライバーが、KSCAMERA_EXTENDEDPROP_ISO_MANUAL をサポートしていない場合、Value ペイロードは含まれません。 それ以外の場合は、フレームごとの設定項目ヘッダーの後に KSCAMERA_EXTENDEDPROP_VALUE が続く必要があります。 SET 呼び出しで、KSCAMERA_PERFRAMESETTING_ITEM_HEADER.Flags に KSCAMERA_EXTENDEDPROP_ISO_MANUAL がサポートされ、指定されている場合は、KSCAMERA_EXTENDEDPROP_VALUE.Value.ul に必要な ISO 速度が含まれます。
以下は、フレームごとの設定 ISO 機能が KSCAMERA_EXTNDEDPROP_ISO_AUTO、KSCAMERA_EXTENDEDPROP_ISO_MANUAL (min = 30、max = 210、step =20) の場合の項目ヘッダーと Value ペイロードの外観を示しています。
KSCAMERA_EXTNDEDPROP_ISO_AUTO,
KSCAMERA_EXTENDEDPROP_ISO_MANUAL (min = 30, max = 210, step =20)
ISO 速度が 70 の場合
KSCAMERA_PERFRAMESETTING_ITEM_HEADER.Flags = KSCAMERA_EXTENDEDPROP_ISO_MANUAL KSCAMERA_EXTENDEDPROP_VALUE.Value.ul = 70
ISO 速度が 50 の場合
KSCAMERA_PERFRAMESETTING_ITEM_HEADER.Flags = KSCAMERA_EXTENDEDPROP_ISO_MANUAL KSCAMERA_EXTENDEDPROP_VALUE.Value.ul = 50
次の表は、フレームごとの設定で使用できるコントロールと値をまとめたものです。 実際の可用性は、ドライバーの実際の機能によって決まります。これは、KSPROPERTY_CAMERACONTROL_PERFRAMESETTING_CAPABILITY を使用して取得できます。
名前 | 使用できる値 |
---|---|
露出時間 |
自動または 100 ナノ秒 単位の時間。 |
Flash |
オン/オフ、自動、赤目補正のオン/オフ、フラッシュ出力 (割合)。 |
露出補正 |
自動または補正ステップの値。 |
ISO 速度 |
ISO 値の整数を使用した自動または手動。 |
フォーカス |
自動または論理レンズの位置。 この値には、特定の単位がありません。 |
カスタム プロパティ |
OEM は、カスタム GUID とプロパティ データを使用してこれを定義します。 |
確認イメージ |
オン/オフ |
カスタム プロパティ データをフレームごとの設定に渡すために、アプリは次の処理を行います。
IFrameSettingsControls で QueryInterface を呼び出して、フレームごとの設定に関連付けられている IMFGetServices インターフェイスを取得します。
IMFGetServices インターフェイスから GetService を呼び出して、フレームごとの設定でカスタム IMFAttributes インターフェイスを作成します。
フレームごとの設定に関連付けられている IMFAttributes でカスタム プロパティ データを設定するには、カスタム プロパティ GUID で SetUINT32、SetBlob などを呼び出します。
フレームワークは、カスタム IMFAttributes を検索して、ドライバーで設定するフレーム単位の設定ペイロードをアセンブルするときにカスタム項目ペイロードを構築します。存在する場合は、カスタム項目ペイロードが作成されます。
KSCAMERA_PERFRAMESETTING_HEADER の LoopCount フィールドは、写真シーケンスでキャプチャされる将来のフレームにフレームごとの設定を適用する必要がある繰り返しの数を指定します。 LoopCount は、パイプラインによって 1 にハードコーディングされます (たとえば、フレームごとの設定は、それ以上繰り返さずに 1 回だけ適用されます)。 KSCAMERA_PERFRAMESETTING_HEADER の FrameCount フィールドは、フレームごとの設定を各繰り返しのフレームに適用する必要があるフレーム設定の数を指定します。
KSCAMERA_PERFRAMESETTING_FRAME_HEADER の ItemCount フィールドは、対応するフレームに適用する項目設定の数を指定します。 ItemCount が 0 の場合、対応するフレームにグローバル設定を適用する必要があります。
次の表に、使用可能な構成と、対応する写真シーケンスの種類を示します。
LoopCount | FrameCount | ItemCount | Type |
---|---|---|---|
L(L=1) |
N(N>0) |
S(S>=0) |
有限可変写真シーケンス |
L(L=1) |
1 |
0 |
グローバル設定を持つ 1 フレームの有限可変写真シーケンス |
L(L=1) |
0 |
S |
構成が無効です |
可変写真シーケンスは、1 回の繰り返しのみで有限のキャプチャを実行するように簡略化されました。 フレームごとの設定を持つ写真シーケンスは常に可変写真シーケンスとしてフラグが設定され、フレームごとの設定ペイロードは常に必要です。
ループ数が L (L = 1) で、フレーム数が N (N > 0) の場合は、有限可変写真シーケンスです。 フレームごとの設定は L = 1 回繰り返され、N フレーム設定は各繰り返しの次の N フレームに適用されます。
ループ数が L (L = 1) の場合、フレーム数は 1 で、項目数は 0 の場合、グローバル設定の 1 フレーム有限可変写真シーケンスです。
可変写真シーケンスは、過去のフレームを要求しないようにさらに簡略化されています。 パイプラインは、要求された過去の写真の数 (RequestedHistoryFrames など) を 0 にハードコーディングします。 ドライバーは、可変写真シーケンスで将来のフレームのみを提供します。 次の図は、可変写真シーケンスでドライバーによって配信されるフレームの数を示しています。 過去の写真の数は、パイプラインによって 0 にハードコーディングされる KSPROPERTY_CAMERACONTROL_EXTENDED_PHOTOMODE 拡張プロパティ コントロールによって KSCAMERA_EXTENDEDPROP_PHOTOMODE.RequestedHistoryFrames で指定されます。
N : Frame Count
L : Loop Count
P : Past Photos Requested
T : Total number of frame delivered by driver
L = 1
P = 0
T = (N * L) + P
有限可変写真シーケンスの場合、ドライバーは最後のフレームの KSSTREAM_HEADER.OptionsFlags を KSSTREAM_HEADER_OPTIONSF_ENDOFPHOTOSEQUENCE でマークする必要があります。 これにより、将来予想されるフレームの量が配信された後、ドライバーが自動的に MF パイプラインへのフレームの配信を停止します。 これにより、写真シーケンスが効果的に停止され、アプリ クライアントに写真シーケンスの完了が通知されます。 これは、ドライバーが有限可変写真シーケンスの最後のフレームのキャプチャを完了したときに発生します。
要件
ヘッダー |
Ksmedia.h |