KSPROPERTY_CAMERACONTROL_PERFRAMESETTING_SET
L'ID della proprietà KSPROPERTY_CAMERACONTROL_PERFRAMESETTING_SET definito in KSPROPERTY_CAMERACONTROL_PERFRAMESETTING_PROPERTY viene usato per impostare le impostazioni per frame nel driver.
Riepilogo utilizzo
Per impostare le impostazioni per frame, il controllo proprietà KSPROPERTY_CAMERACONTROL_PERFRAMESETTING_SET viene inviato al driver insieme a un payload delle impostazioni per frame.
Questa proprietà può essere letta o scritta. Sebbene sia possibile usare una chiamata GET per restituire l'ultima impostazione per fotogramma impostata sul driver, la chiamata GET non viene esposta al client dell'app e viene emessa solo al momento dell'inizializzazione quando il controllo delle impostazioni per frame viene costruito dalla pipeline MF, dove il driver deve restituire STATUS_BUFFER_OVERFLOW con dimensioni del buffer pari a 0.
In una chiamata GET, un buffer di lunghezza zero viene inviato al driver per prima cosa per individuare le dimensioni del buffer di dati necessarie per contenere l'intera impostazione per frame che il driver ha. In risposta a questa chiamata, il driver deve restituire STATUS_BUFFER_OVERFLOW con le dimensioni del buffer necessarie per frame che devono essere pari a 0 se non è stata impostata alcuna impostazione per frame o almeno la dimensione di KSCAMERA_PERFRAMESETTING_HEADER in caso contrario.
Il payload dell'impostazione per frame deve iniziare con un KSCAMERA_PERFRAMESETTING_HEADER, seguito da una o più impostazioni dei fotogrammi. Il numero di impostazioni del frame viene specificato in FrameCount. Le impostazioni per ogni frame devono iniziare con una KSCAMERA_PERFRAMESETTING_FRAME_HEADER, seguita da zero o più impostazioni dell'elemento. Il numero di impostazioni dell'elemento viene specificato in ItemCount. Le impostazioni per ogni elemento, se presenti, devono iniziare con un KSCAMERA_PERFRAMESETTING_ITEM_HEADER.
Per le impostazioni per ogni elemento, se è presente un payload valore, il KSCAMERA_PERFRAMESETTING_ITEM_HEADER deve essere seguito da un KSCAMERA_EXTENDEDPROP_VALUE. Se è presente un elemento personalizzato, KSCAMERA_PERFRAMESETTING_ITEM_HEADER deve essere seguito da un KSCAMERA_PERFRAMESETTING_CUSTOM_ITEM, seguito dai dati personalizzati associati all'ID GUID specificato in KSCAMERA_PERFRAMESETTING_CUSTOM_ITEM.
Se FrameCount è 0, il driver deve rifiutare il payload delle impostazioni per frame. Se ItemCount è 0, non vengono specificate impostazioni frame. Il driver deve applicare le impostazioni globali al frame associato. Ad esempio, FrameCount = 1 e ItemCount = 0 implica una singola sequenza di foto a variabile cornice con impostazioni globali.
La figura seguente illustra il layout della struttura dei dati di una configurazione del payload delle impostazioni per frame. Nell'esempio seguente, le impostazioni per frame per quattro fotogrammi vengono configurate con frame 0 contenente tre elementi, due senza payload e uno con un payload Value; frame 1 contenente due elementi, uno senza payload e l'altro con un payload di valore; frame 2 contenente 0 elemento che implica le impostazioni globali per frame 2; frame 3 contenente quattro elementi, uno con un payload di valore, due con un elemento personalizzato e un payload di dati personalizzati e uno senza payload.
Le dimensioni nell'intestazione delle impostazioni per frame rappresentano le dimensioni totali del payload da compilare KSCAMERA_PERFRAMESETTING_HEADER. Dimensione
Le dimensioni nel frame delle impostazioni per frame rappresentano le dimensioni da riempire KSCAMERA_PERFRAMESETTING_FRAME_HEADER. Dimensioni per un frame.
Le dimensioni dell'elemento rappresentano le dimensioni da riempire KSCAMERA_PERFRAMESETTING_ITEM_HEADER. Dimensioni per un elemento.
Le dimensioni dell'elemento personalizzato rappresentano le dimensioni da compilare in KSCAMERA_PERFRAMESETTING_CUSTOM_ITEM. Dimensioni per un elemento personalizzato.
Tempo di esposizione delle impostazioni per frame
Se il tempo di esposizione manuale viene specificato nelle impostazioni per frame, KSCAMERA_EXTENDEDPROP_VALUE. Value.ll conterrà il tempo di esposizione desiderato in una chiamata SET e il tempo di esposizione corrente in uso in una chiamata GET .
Compensazione delle impostazioni per frame
Se viene specificata la compensazione manuale delle impostazioni per ogni frame, KSCAMERA_EXTENDEDPROP_VALUE. Value.l conterrà la compensazione dell'esposizione desiderata in una chiamata SET e la compensazione dell'esposizione corrente in uso in una chiamata GET .
Stato attivo delle impostazioni per fotogramma
Se le impostazioni manuali per frame sono specificate in base alle impostazioni dei fotogrammi, KSCAMERA_EXTENDEDPROP_VALUE. Value.ul conterrà la posizione dell'obiettivo desiderata in una chiamata SET e la posizione corrente dell'obiettivo in uso in una chiamata GET .
Impostazioni per frame ISO
Se il driver non supporta KSCAMERA_EXTENDEDPROP_ISO_MANUAL, il payload valore non è incluso. In caso contrario, l'intestazione dell'elemento dell'impostazione per frame deve essere seguita da una KSCAMERA_EXTENDEDPROP_VALUE. In una chiamata SETKSCAMERA_EXTENDEDPROP_VALUE. Value.ul contiene la velocità ISO desiderata se KSCAMERA_EXTENDEDPROP_ISO_MANUAL è supportata e specificata in KSCAMERA_PERFRAMESETTING_ITEM_HEADER. Flag.
Di seguito viene illustrato l'aspetto dell'intestazione dell'elemento e del payload Valore quando la funzionalità ISO delle impostazioni per frame è KSCAMERA_EXTNDEDPROP_ISO_AUTO, KSCAMERA_EXTENDEDPROP_ISO_MANUAL (min = 30, max = 210, passaggio =20)come indicato di seguito:
KSCAMERA_EXTNDEDPROP_ISO_AUTO,
KSCAMERA_EXTENDEDPROP_ISO_MANUAL (min = 30, max = 210, step =20)
Se la velocità ISO è 70
KSCAMERA_PERFRAMESETTING_ITEM_HEADER.Flags = KSCAMERA_EXTENDEDPROP_ISO_MANUAL KSCAMERA_EXTENDEDPROP_VALUE.Value.ul = 70
Se la velocità ISO è 50
KSCAMERA_PERFRAMESETTING_ITEM_HEADER.Flags = KSCAMERA_EXTENDEDPROP_ISO_MANUAL KSCAMERA_EXTENDEDPROP_VALUE.Value.ul = 50
La tabella seguente riepiloga i controlli e i valori disponibili per le impostazioni per frame. La disponibilità effettiva è determinata dalla funzionalità effettiva del driver, che può essere ottenuta usando KSPROPERTY_CAMERACONTROL_PERFRAMESETTING_CAPABILITY.
Nome | Valori disponibili |
---|---|
Tempo di esposizione |
Tempo o automatico in 100 nanosecondi. |
Flash |
On/Off, riduzione automatica degli occhi rossi on/off, alimentazione flash in percentuale. |
Compensazione dell'esposizione |
Valore del passaggio di compensazione o automatico. |
Sensibilità ISO |
Auto o manuale con valore ISO integer. |
Focus |
Posizione automatica o logica dell'obiettivo. Questo valore non ha un'unità specifica. |
Proprietà personalizzate |
L'OEM lo definisce con un GUID personalizzato e i dati delle proprietà. |
Immagine di conferma |
Attivato/Disattivato |
Per passare i dati delle proprietà personalizzate alle impostazioni per frame, l'app esegue le operazioni seguenti:
Chiama QueryInterface in IFrameSettingsControls per ottenere l'interfaccia IMFGetServices associata alle impostazioni per frame.
Chiama l'interfaccia GetService dall'interfaccia IMFGetServices per creare un'interfaccia IMFAttributes personalizzata nelle impostazioni per frame.
Chiama il GUID della proprietà personalizzata SetUINT32, SetBlob e così via per impostare i dati delle proprietà personalizzate in IMFAttributes associati alle impostazioni per frame.
Il framework cercherà gli IMFAttribute personalizzati per costruire i payload degli elementi personalizzati, se presenti durante l'assemblaggio del payload delle impostazioni per frame da impostare sul driver.
Il campo LoopCount in KSCAMERA_PERFRAMESETTING_HEADER specifica il numero di ripetizioni che le impostazioni per fotogramma devono essere applicate ai fotogrammi futuri da acquisire in una sequenza di foto. LoopCount è hardcoded su 1 dalla pipeline( ad esempio, le impostazioni per frame verranno applicate una sola volta senza ripetizioni aggiuntive). Il campo FrameCount in KSCAMERA_PERFRAMESETTING_HEADER specifica il numero di impostazioni dei fotogrammi da applicare alle impostazioni per frame in ogni ripetizione.
Il campo ItemCount in KSCAMERA_PERFRAMESETTING_FRAME_HEADER specifica il numero di impostazioni dell'elemento da applicare al frame corrispondente. Se ItemCount è 0, le impostazioni globali devono essere applicate al frame corrispondente.
La tabella seguente elenca le configurazioni possibili e i tipi di sequenza di foto corrispondenti.
LoopCount | FrameCount | ItemCount | Tipo |
---|---|---|---|
L(L=1) |
N(N>0) |
S(S>=0) |
Sequenza di foto variabile finita |
L(L=1) |
1 |
0 |
Sequenza di foto variabile limitata con una cornice con impostazioni globali |
L(L=1) |
0 |
S |
Configurazione non valida. |
La sequenza di foto variabile è stata semplificata per eseguire acquisizioni finite con una sola ripetizione. La sequenza di foto con impostazioni per fotogramma verrà sempre contrassegnata come sequenza di foto variabile e il payload delle impostazioni per fotogramma è sempre obbligatorio.
Se il numero di cicli è L (L = 1) e il conteggio dei fotogrammi è N (N > 0), si tratta di una sequenza di foto variabile finita. Le impostazioni per frame verranno ripetute L = 1 volte con le impostazioni N frame applicate ai successivi N fotogrammi futuri in ogni ripetizione.
Se il numero di cicli è L (L = 1), il conteggio dei fotogrammi è 1 e il conteggio degli elementi è 0, si tratta di una sequenza di foto con una variabile di fotogrammi con impostazioni globali.
La sequenza di foto variabile è ulteriormente semplificata per non richiedere fotogrammi passati. La pipeline hardcodederà il conteggio delle foto precedenti richieste, ad esempio RequestedHistoryFrames, su 0. Il driver fornisce solo fotogrammi futuri in una sequenza di foto variabile. La figura seguente illustra il numero previsto di fotogrammi da consegnare dal driver in una sequenza di foto variabile. Il conteggio delle foto precedenti viene specificato in KSCAMERA_EXTENDEDPROP_PHOTOMODE. RequestedHistoryFrames dal controllo della proprietà estesa KSPROPERTY_CAMERACONTROL_EXTENDED_PHOTOMODE hardcoded su 0 dalla pipeline.
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
Per la sequenza di foto variabile finita, il driver deve contrassegnare il KSSTREAM_HEADER. OpzioniFlags per l'ultimo frame con il flag KSSTREAM_HEADER_OPTIONSF_ENDOFPHOTOSEQUENCE . In questo modo si garantisce che il driver arresti automaticamente il recapito dei fotogrammi alla pipeline MF dopo il recapito della quantità di fotogrammi futuri previsti. In questo modo la sequenza di foto viene arrestata e viene notificata al client dell'app il completamento della sequenza di foto. Ciò si verifica quando il driver termina l'acquisizione dell'ultimo fotogramma nella sequenza di foto variabile finita.
Requisiti
Intestazione |
Ksmedia.h |