KSPROPERTY_CAMERACONTROL_PERFRAMESETTING_SET
KSPROPERTY_CAMERACONTROL_PERFRAMESETTING_PROPERTY中定義的KSPROPERTY_CAMERACONTROL_PERFRAMESETTING_SET屬性識別碼,可用來在驅動程式中設定每個畫面格設定。
使用量摘要
若要設定每個畫面設定, KSPROPERTY_CAMERACONTROL_PERFRAMESETTING_SET 屬性控制件會連同每個畫面設定承載一起傳送給驅動程式。
這個屬性可以讀取或寫入。 雖然 GET 呼叫可用來傳回驅動程式上設定的最後一個畫面設定, 但是 GET 呼叫不會公開給應用程式用戶端,而且只有在 MF 管線建構每個畫面格設定控件時才會發出 GET 呼叫,其中驅動程式必須傳回緩衝區大小為 0 的STATUS_BUFFER_OVERFLOW 。
在 GET 呼叫中,會先將零長度緩衝區傳送至驅動程式,以找出所需的數據緩衝區大小,以保存驅動程式擁有的整個個別畫面設定。 為了回應此呼叫,驅動程式必須傳回 STATUS_BUFFER_OVERFLOW ,且每個畫面格設定緩衝區大小必須為0,如果沒有設定每個畫面格設定,或至少設定 KSCAMERA_PERFRAMESETTING_HEADER 的大小,則為0。
每一畫面格設定承載的開頭必須是 KSCAMERA_PERFRAMESETTING_HEADER,後面接著一或多個畫面設定。 FrameCount 中指定畫面格設定的數目。 每個畫面的設定都必須以 KSCAMERA_PERFRAMESETTING_FRAME_HEADER開頭,後面接著零個或多個項目設定。 ItemCount 中指定項目設定的數目。 如果任何項目必須以 KSCAMERA_PERFRAMESETTING_ITEM_HEADER開頭,則為每個項目的設定。
針對每個項目的設定,如果有值承載, 則KSCAMERA_PERFRAMESETTING_ITEM_HEADER 後面必須接著 KSCAMERA_EXTENDEDPROP_VALUE。 如果自定義專案存在, KSCAMERA_PERFRAMESETTING_ITEM_HEADER 後面必須接著 KSCAMERA_PERFRAMESETTING_CUSTOM_ITEM,後面接著與 KSCAMERA_PERFRAMESETTING_CUSTOM_ITEM中指定的 GUID 識別符相關聯的自定義數據。
如果 FrameCount 為 0,驅動程式必須拒絕每個畫面格的設定承載。 如果 ItemCount 為 0,則不會指定畫面格設定。 驅動程式必須將全域設定套用至相關聯的框架。 例如,FrameCount = 1,ItemCount = 0 表示具有全域設定的單一畫面變數相片序列。
下圖說明每個畫面格設定承載組態的數據結構配置。 在下列範例中,四個畫面格的個別畫面設定會設定包含三個項目的畫面0,兩個專案不含承載,另一個則具有值承載;框架 1 包含兩個專案,一個沒有承載,另一個專案具有值承載;框架 2 包含 0 個專案,這表示畫面 2 的全域設定;框架 3 包含四個專案,一個具有值承載,兩個專案分別具有自定義專案和自定義數據承載,另一個沒有承載。
每個畫面格設定標頭的大小 代表要填入KSCAMERA_PERFRAMESETTING_HEADER的承載大小總計 。大小
每個畫面格設定畫面的大小 代表要填入 KSCAMERA_PERFRAMESETTING_FRAME_HEADER的大小。框架的大小 。
專案大小 代表要填入 KSCAMERA_PERFRAMESETTING_ITEM_HEADER的大小。專案的大小 。
自定義專案大小 代表要填入 KSCAMERA_PERFRAMESETTING_CUSTOM_ITEM的大小。 自訂專案的大小。
每個畫面格設定曝光時間
如果在每一畫面格設定中指定手動曝光時間, 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_EXTENDEDPROP_VALUE。如果 支援 KSCAMERA_EXTENDEDPROP_ISO_MANUAL 並在 KSCAMERA_PERFRAMESETTING_ITEM_HEADER 中指定,Value.ul 會包含所需的 ISO 速度 。旗標。
以下顯示當每個畫面格設定 ISO 功能 KSCAMERA_EXTNDEDPROP_ISO_AUTO時,項目標頭和值承載的外觀, KSCAMERA_EXTENDEDPROP_ISO_MANUAL (min = 30,max = 210,步驟 =20) 如下所示:
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 奈秒的自動或時間。 |
閃爍 |
開/關、自動、紅眼縮小開啟/關閉、以百分比為單位的閃爍電源。 |
曝光補償 |
自動或補償步驟值。 |
ISO 速度 |
具有整數 ISO 值的自動或手動。 |
焦點 |
自動或邏輯鏡頭位置。 這個值沒有特定的單位。 |
自訂屬性 |
OEM 會使用自定義 GUID 和屬性資料來定義此專案。 |
確認影像 |
開啟/關閉 |
若要將自訂屬性資料傳入個別畫面設定,應用程式會執行下列動作:
呼叫 IFrameSettingsControls 上的 QueryInterface,以取得與個別畫面格設定相關聯的 IMFGetServices 介面。
從IMFGetServices介面呼叫 GetService,以在每個畫面格設定上建立自定義的IMFAttributes介面。
在自定義屬性 GUID 上呼叫 SetUINT32、SetBlob 等,以在與個別畫面格設定相關聯的 IMFAttributes 上設定自定義屬性數據。
架構會查閱自定義 IMFAttributes,以在將個別畫面格設定承載組合在驅動程式上時建構自定義項目承載。
KSCAMERA_PERFRAMESETTING_HEADER中的 LoopCount 字段會指定每個畫面格設定應套用至未來要在相片序列中擷取的重複次數。 例如,管線會將 LoopCount 硬式編碼為1 (,每個畫面格設定只會套用一次,而不需要進一步重複) 。 KSCAMERA_PERFRAMESETTING_HEADER中的 FrameCount 字段會指定每個畫面格設定應套用至每個重複畫面格的畫面數。
KSCAMERA_PERFRAMESETTING_FRAME_HEADER中的 ItemCount 字段會指定應該套用至對應框架的項目設定數目。 如果 ItemCount 為 0,應該將全域設定套用至對應的框架。
下表列出可能的組態和對應的相片序列類型。
LoopCount | FrameCount | ItemCount | 類型 |
---|---|---|---|
L (L=1) |
N (N>0) |
S (S>=0) |
有限變數相片序列 |
L (L=1) |
1 |
0 |
具有全域設定的一個畫面有限變數相片序列 |
L (L=1) |
0 |
S |
無效的組態 |
已簡化可變相片序列,只執行一個重複的有限擷取。 具有每個畫面設定的相片序列一律會標示為可變相片序列,而且一律需要個別畫面設定承載。
如果迴圈計數為 L (L = 1) ,而畫面計數為 N (N > 0) ,則為有限變數相片序列。 每個畫面格設定將會重複 L = 1 次,並在每次重複中將 N 個畫面格設定套用至下一個 N 個未來的畫面。
如果迴圈計數為 L (L = 1) ,則畫面格計數為 1,而項目計數為 0,它是具有全域設定的一個畫面有限變數相片序列。
變數相片序列會進一步簡化,以不要求任何過去的畫面格。 管線會將要求的過去相片計數硬式編碼 (,例如 RequestedHistoryFrames) 為 0。 驅動程式只會在可變相片序列中提供未來的畫面。 下圖說明驅動程式在可變相片序列中要傳遞的預期畫面數。 過去相片計數是在 KSCAMERA_EXTENDEDPROP_PHOTOMODE 中指定 。由 管線硬式編碼為 0 的KSPROPERTY_CAMERACONTROL_EXTENDED_PHOTOMODE 擴充屬性控制項所要求HistoryFrames。
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。 具有 KSSTREAM_HEADER_OPTIONSF_ENDOFPHOTOSEQUENCE 旗標的最後一個畫面格的 OptionsFlags。 這麼做可確保驅動程式會在預期的未來畫面量傳遞之後,自動停止將畫面傳回 MF 管線。 這會有效地停止相片序列,並通知應用程式用戶端完成相片序列。 當驅動程式完成擷取有限變數相片序列中的最後一個畫面時,就會發生這種情況。
規格需求
標頭 |
Ksmedia.h |