Freigeben über


KSPROPERTY_CAMERACONTROL_PERFRAMESETTING_SET

Die KSPROPERTY_CAMERACONTROL_PERFRAMESETTING_SET-Eigenschafts-ID, die in KSPROPERTY_CAMERACONTROL_PERFRAMESETTING_PROPERTY definiert ist, wird verwendet, um Die Einstellungen pro Frame im Treiber festzulegen.

Nutzungszusammenfassung

Um die Einstellungen pro Frame festzulegen, wird das KSPROPERTY_CAMERACONTROL_PERFRAMESETTING_SET-Eigenschaftssteuerelement zusammen mit einer Nutzlast pro Frameeinstellungen an den Treiber gesendet.

Diese Eigenschaft kann gelesen oder geschrieben werden. Während ein GET-Aufruf verwendet werden kann, um die letzten Einstellungen pro Frame zurückzugeben, die für den Treiber festgelegt wurden, wird der GET-Aufruf nicht für den App-Client verfügbar gemacht und nur zum Initialisierungszeitpunkt ausgegeben, wenn das Einstellungssteuerelement pro Frame von der MF-Pipeline erstellt wird, wobei der Treiber STATUS_BUFFER_OVERFLOW mit Puffergröße 0 zurückgeben muss.

In einem GET-Aufruf wird zuerst ein Puffer der Länge null an den Treiber gesendet, um die erforderliche Datenpuffergröße für die gesamten Einstellungen pro Frame des Treibers zu ermitteln. Als Reaktion auf diesen Aufruf muss der Treiber STATUS_BUFFER_OVERFLOW mit der erforderlichen Puffergröße pro Frame zurückgeben, die 0 sein muss, wenn keine Einstellungen pro Frame festgelegt wurden, oder zumindest die Größe von KSCAMERA_PERFRAMESETTING_HEADER andernfalls.

Die Nutzlast für die Einstellung pro Frame muss mit einem KSCAMERA_PERFRAMESETTING_HEADER beginnen, gefolgt von mindestens einer Frameeinstellung. Die Anzahl der Frameeinstellungen wird in FrameCount angegeben. Die Einstellungen für jeden Frame müssen mit einer KSCAMERA_PERFRAMESETTING_FRAME_HEADER beginnen, gefolgt von null oder mehr Elementeinstellungen. Die Anzahl der Elementeinstellungen wird in ItemCount angegeben. Die Einstellungen für jedes Element müssen ggf. mit einer KSCAMERA_PERFRAMESETTING_ITEM_HEADER beginnen.

Wenn für die Einstellungen für jedes Element eine Value-Nutzlast vorhanden ist, muss dem KSCAMERA_PERFRAMESETTING_ITEM_HEADER eine KSCAMERA_EXTENDEDPROP_VALUE folgen. Wenn ein benutzerdefiniertes Element vorhanden ist, muss auf KSCAMERA_PERFRAMESETTING_ITEM_HEADER ein KSCAMERA_PERFRAMESETTING_CUSTOM_ITEM gefolgt von den benutzerdefinierten Daten folgen, die der GUID-ID in KSCAMERA_PERFRAMESETTING_CUSTOM_ITEM zugeordnet sind.

Wenn FrameCount 0 ist, muss der Treiber die Nutzlast der Einstellungen pro Frame ablehnen. Wenn ItemCount 0 ist, werden keine Frameeinstellungen angegeben. Der Treiber muss globale Einstellungen auf den zugeordneten Frame anwenden. FrameCount = 1 und ItemCount = 0 impliziert beispielsweise eine Einzelbildvariablen-Fotosequenz mit globalen Einstellungen.

Die folgende Abbildung veranschaulicht das Datenstrukturlayout einer Nutzlastkonfiguration pro Frameeinstellungen. Im folgenden Beispiel werden die Einstellungen pro Frame für vier Frames mit Frame 0 konfiguriert, die drei Elemente enthält, zwei davon ohne Nutzlast und eines mit einer Wertnutzlast. Frame 1 enthält zwei Elemente, eines ohne Nutzlast und das andere mit einer Wertnutzlast; Frame 2 mit 0 Element, das die globalen Einstellungen für Frame 2 impliziert; Frame 3 enthält vier Elemente, eines mit einer Wertnutzlast, zwei mit einem benutzerdefinierten Element und einer benutzerdefinierten Datennutzlast und eines ohne Nutzlast.

struktur des perframesetting-headers.

  1. Die Größe im Header der Einstellungen pro Frame stellt die Gesamtnutzlastgröße dar, die in KSCAMERA_PERFRAMESETTING_HEADER ausgefüllt werden soll . Größe

  2. Die Größe im Frame-Einstellungsframe stellt die Größe dar, die in KSCAMERA_PERFRAMESETTING_FRAME_HEADER ausgefüllt werden soll . Größe für einen Frame.

  3. Die Elementgröße stellt die Größe dar, die in KSCAMERA_PERFRAMESETTING_ITEM_HEADER ausgefüllt werden soll . Größe für ein Element.

  4. Die benutzerdefinierte Elementgröße stellt die Größe dar, die in KSCAMERA_PERFRAMESETTING_CUSTOM_ITEM ausgefüllt werden soll . Größe für ein benutzerdefiniertes Element.

Belichtungszeit pro Frameeinstellungen

Wenn die manuelle Belichtungszeit in den Einstellungen pro Frame angegeben ist, KSCAMERA_EXTENDEDPROP_VALUE. Value.ll enthält die gewünschte Belichtungszeit in einem SET-Aufruf und die aktuelle Belichtungszeit, die in einem GET-Aufruf verwendet wird.

Kompensation der Einstellungen pro Frame

Wenn die manuelle Einstellungskompensation in den Einstellungen pro Frame angegeben wird, KSCAMERA_EXTENDEDPROP_VALUE. Value.l enthält die gewünschte Belichtungskompensation in einem SET-Aufruf und die aktuelle Belichtungskompensation, die in einem GET-Aufruf verwendet wird.

Fokus der Einstellungen pro Frame

Wenn die Einstellungen manuell pro Frame in den Einstellungen pro Frame angegeben sind, KSCAMERA_EXTENDEDPROP_VALUE. Value.ul enthält die gewünschte Objektivposition in einem SET-Aufruf und die aktuelle Linsenposition, die in einem GET-Aufruf verwendet wird.

ISO-Einstellungen pro Frame

Wenn der Treiber KSCAMERA_EXTENDEDPROP_ISO_MANUAL nicht unterstützt, ist die Wertnutzlast nicht enthalten. Andernfalls muss auf die Elementheader für die Einzelbildeinstellung ein KSCAMERA_EXTENDEDPROP_VALUE folgen. In einem SET-AufrufKSCAMERA_EXTENDEDPROP_VALUE. Value.ul enthält die gewünschte ISO-Geschwindigkeit, wenn KSCAMERA_EXTENDEDPROP_ISO_MANUAL unterstützt und in KSCAMERA_PERFRAMESETTING_ITEM_HEADER angegeben wird . Flags.

Im Folgenden wird gezeigt, wie der Elementheader und die Nutzlast des Werts aussehen sollten, wenn die ISO-Funktion pro Frameeinstellungen KSCAMERA_EXTNDEDPROP_ISO_AUTO ist, KSCAMERA_EXTENDEDPROP_ISO_MANUAL (min = 30, max = 210, Step =20):

KSCAMERA_EXTNDEDPROP_ISO_AUTO, 
KSCAMERA_EXTENDEDPROP_ISO_MANUAL (min = 30, max = 210, step =20)
  1. Wenn die ISO-Geschwindigkeit 70 beträgt

    KSCAMERA_PERFRAMESETTING_ITEM_HEADER.Flags = KSCAMERA_EXTENDEDPROP_ISO_MANUAL
    KSCAMERA_EXTENDEDPROP_VALUE.Value.ul = 70
    
  2. Wenn die ISO-Geschwindigkeit 50 ist

    KSCAMERA_PERFRAMESETTING_ITEM_HEADER.Flags = KSCAMERA_EXTENDEDPROP_ISO_MANUAL
    KSCAMERA_EXTENDEDPROP_VALUE.Value.ul = 50
    

In der folgenden Tabelle sind die verfügbaren Steuerelemente und Werte für die Einstellungen pro Frame zusammengefasst. Die tatsächliche Verfügbarkeit wird durch die tatsächliche Funktion des Treibers bestimmt, die mit KSPROPERTY_CAMERACONTROL_PERFRAMESETTING_CAPABILITY abgerufen werden kann.

Name Verfügbare Werte

Belichtungszeit

Auto oder Zeit in 100 Nanosekunden.

Blinken

Ein/Aus, Auto, Red Eye-Reduzierung ein/aus, Blitzleistung in Prozent.

Belichtungskorrektur

Auto- oder Kompensationsschrittwert.

ISO-Geschwindigkeit

Automatisch oder manuell mit ganzzahligem ISO-Wert.

Fokus

Automatische oder logische Objektivposition. Dieser Wert verfügt nicht über eine bestimmte Einheit.

Benutzerdefinierte Eigenschaften

Der OEM definiert dies mit einer benutzerdefinierten GUID und Eigenschaftendaten.

Bestätigungsbild

Ein/Aus

Um die benutzerdefinierten Eigenschaftendaten an die Einstellungen pro Frame zu übergeben, führt die App folgendes aus:

  1. Ruft das QueryInterface in IFrameSettingsControls auf, um die IMFGetServices-Schnittstelle abzurufen, die den Einstellungen pro Frame zugeordnet ist.

  2. Ruft getService von der IMFGetServices-Schnittstelle auf, um eine benutzerdefinierte IMFAttributes-Schnittstelle für die Einstellungen pro Frame zu erstellen.

  3. Ruft SetUINT32, SetBlob usw. für die GUID der benutzerdefinierten Eigenschaft auf, um die benutzerdefinierten Eigenschaftendaten für die IMFAttributes festzulegen, die den Einstellungen pro Frame zugeordnet sind.

Das Framework sucht die benutzerdefinierten IMFAttributes, um die Nutzlasten für benutzerdefinierte Elemente zu erstellen, falls vorhanden, wenn die Nutzlast der Pro-Frame-Einstellungen zusammengebaut wird, die für den Treiber festgelegt werden soll.

Das Feld LoopCount in KSCAMERA_PERFRAMESETTING_HEADER gibt die Anzahl der Wiederholungen an, die die Einstellungen pro Frame auf die zukünftigen Frames angewendet werden sollen, die in einer Fotosequenz erfasst werden sollen. Der LoopCount wird von der Pipeline auf 1 hart codiert (z. B. werden die Einstellungen pro Frame nur einmal ohne weitere Wiederholungen angewendet). Das Feld FrameCount in KSCAMERA_PERFRAMESETTING_HEADER gibt die Anzahl der Frameeinstellungen an, die auf die Frames in jeder Wiederholung angewendet werden sollen.

Das Feld ItemCount in KSCAMERA_PERFRAMESETTING_FRAME_HEADER gibt die Anzahl der Elementeinstellungen an, die auf den entsprechenden Frame angewendet werden sollen. Wenn ItemCount 0 ist, sollten globale Einstellungen auf den entsprechenden Frame angewendet werden.

In der folgenden Tabelle sind die möglichen Konfigurationen und die entsprechenden Fotosequenztypen aufgeführt.

LoopCount FrameCount ItemCount Typ

L(L=1)

N(N>0)

S(S>=0)

Finite Variable Fotosequenz

L(L=1)

1

0

Finite Variable Fotosequenz mit einer Frame-Finite-Variable mit globalen Einstellungen

L(L=1)

0

E

Ungültige Konfiguration

Die variable Fotosequenz wurde vereinfacht, um endliche Aufnahmen mit nur einer Wiederholung durchzuführen. Die Fotosequenz mit den Einstellungen pro Frame wird immer als variable Fotosequenz gekennzeichnet, und die Nutzlast der Bildeinstellungen ist immer erforderlich.

Wenn die Schleifenanzahl L (L = 1) und die Frameanzahl N (N > 0) ist, handelt es sich um eine endliche variable Fotosequenz. Die Einstellungen pro Frame werden L = 1 Mal wiederholt, wobei die N-Frameeinstellungen in jeder Wiederholung auf die nächsten N zukünftigen Frames angewendet werden.

Wenn die Schleifenanzahl L (L = 1), die Frameanzahl 1 und die Elementanzahl 0 ist, handelt es sich um eine Finite Variable-Fotosequenz mit einem Frame mit globalen Einstellungen.

Die variable Fotosequenz wird weiter vereinfacht, um keine vergangenen Frames anzufordern. Die Pipeline codiert die angeforderte Anzahl vergangener Fotos (z. B. RequestedHistoryFrames) mit 0. Der Treiber liefert nur zukünftige Frames in einer variablen Fotosequenz. Die folgende Abbildung veranschaulicht die erwartete Anzahl von Frames, die vom Treiber in einer variablen Fotosequenz bereitgestellt werden sollen. Die Anzahl vergangener Fotos wird in KSCAMERA_EXTENDEDPROP_PHOTOMODE angegeben. RequestedHistoryFrames vom KSPROPERTY_CAMERACONTROL_EXTENDED_PHOTOMODE erweiterte Eigenschaftssteuerelement, das von der Pipeline auf 0 hartcodiert ist.

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

Für die Finite Variable Fotosequenz muss der Treiber die KSSTREAM_HEADER markieren . OptionsFlags für den letzten Frame mit dem KSSTREAM_HEADER_OPTIONSF_ENDOFPHOTOSEQUENCE-Flag . Dadurch wird sichergestellt, dass der Treiber die Frames automatisch an die MF-Pipeline zurückgibt, nachdem die erwartete Menge zukünftiger Frames übermittelt wurde. Dadurch wird die Fotosequenz effektiv beendet und der App-Client über die Vervollständigung der Fotosequenz benachrichtigt. Dies geschieht, wenn der Treiber die Erfassung des letzten Frames in der Endlichen Variablen-Fotosequenz beendet.

Anforderungen

Header

Ksmedia.h