Freigeben über


Detailliertes Design für IHVs und OEMs (Kameraprofil V2)

Um das neue Kameraprofil V2-Schema besser zu verstehen, beginnen wir mit einer einfachen Profildeklaration und dissekieren sie, um die einzelnen Abschnitte zu verstehen.

Wir verwenden eine hypothetische Kamera, die das neue Profil für hohe Bildfrequenz unterstützt. Zunächst definieren wir einige hypothetische Hardwareeinschränkungen für unser Gerät.

  1. Der Vorschau-Pin ist pin 0. In der vom Kameratreiber definierten KSFILTER_DESCRIPTOR, wenn das Array von KSPIN_DESCRIPTOR_EX definiert ist, ist der erste KSPIN_DESCRIPTOR_EX der Vorschau-Pindeskriptor. Auf ähnliche Weise ist Pin 1 Aufnahmepin und Pin 2 ist Fotopin.

  2. Aufgrund der Hardwareeinschränkung kann das betreffende Gerät die Skalierung mit bildraten von 60 fps oder höher nicht verarbeiten. Daher müssen sowohl der Vorschaudatenstrom als auch der Capture-Stream die gleiche Auflösung aufweisen.

  3. Ebenso kann das Gerät die Farbraumkonvertierung für 60 fps oder höher nicht verarbeiten, sodass der Untertyp zwischen Vorschau und Aufnahme identisch sein muss.

  4. Die Kamera ist in der Lage, 4K 16x9-Video mit 60 fps zu streamen. Die Kamera kann auch 3840x2880@60fps (4:3-Video bei 60 fps).

  5. Die Kamera kann keine Fotovorgänge bereitstellen, wenn sie mit 60 fps ausgeführt wird.

  6. Zusätzlich zum Profil mit hoher Bildfrequenz deklarieren wir ein Videoaufnahmeprofil.

  7. Das Videoaufzeichnungsprofil ermöglicht eine beliebige Kombination von Medientypen, aber kein Medientyp mit mehr als 30 fps.

  8. Das Videoaufzeichnungsprofil unterstützt auch einzelne Fotovorgänge (z. B. eine Nicht-Fotosequenz).

Für inF-basierte Deklarationen wird im Abschnitt DDInstall.Interfaces die AddReg-Direktive verwendet, um die Profilinformationen zu veröffentlichen.

Jedem Filter vom Typ "Medien anheften" muss ein Registrierungseintragsname zugewiesen werden. Dieser Name muss MTF# sein, wobei # einen ganzzahligen Wert darstellt. Der ganzzahlige Wert muss nicht sequenziell sein, sondern nur eindeutig, da er einen benannten Wert in der Betriebssystemregistrierung darstellt.

Angesichts dieser Einschränkungen können wir das folgende Profil deklarieren:

[SampleDriver.CameraInterface.AddReg]
HKR,,"OEMCameraProfileVersion",0x00010001,2
; This is our High Frame Rate Profile.
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","Constraint",0,"LRS;LST"
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","BlockedControls",0,"VHDR;VPS;{E0766E84-36A2-4945-906D-092ECBD87445},2;WARM1"
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","MTF0",0,"Pin0:((RES==;FRT==;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","MTF1",0,"Pin1:((RES==;FRT>=60,1;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","MTF2",0,"Pin2:(!)"

; Declare the Video Recording Profile here.
HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","MTF0",0,"Pin0:((RES==;FRT==;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","MTF1",0,"Pin1:((RES==;FRT<=30,1;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","MTF2",0,"Pin2:((RES==;FRT==;SUT==ALL))"

OEMCameraProfileVersion

Um die Kameraprofil V2-Unterstützung zu aktivieren, deklarieren Sie die Profilversion:

Der Eintrag OEMCameraProfileVersion definiert unsere Profilversion und muss für diese Überarbeitung der Spezifikation 2 sein:

[SampleDriver.CameraInterface.AddReg]
HKR,,"OEMCameraProfileVersion",0x00010001,2

Wenn der Registrierungseintrag OEMCameraProfileVersion nicht vorhanden ist und der OEMCameraProfile-Eintrag vorhanden ist, greift die Pipeline auf das Kameraprofil 1507-Schema zurück.

Dadurch wird die Abwärtskompatibilität mit vorhandenen Kameraprofilen sichergestellt.

Wenn der Eintrag OEMCameraProfileVersion verfügbar ist, werden alle vorhandenen Informationen zum Kameraprofil 1507 ignoriert, und nur das Kameraprofil V2 wird verarbeitet.

Hinweis: Wenn oemCameraProfileVersion-Eintrag auf 2 festgelegt ist, aber keine Kameraprofil V2-Deklarationen gefunden werden, werden keine Profile veröffentlicht.

Nach der Veröffentlichung müssen alle Profile unter dem Registrierungsschlüssel Profiles unter dem Knoten Device Interface gespeichert werden.

[SampleDriver.CameraInterface.AddReg]
HKR,,"OEMCameraProfileVersion",0x00010001,2
; This is our High Frame Rate Profile.
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","Constraint",0,"LRS;LST"

Jedes Profil muss ein Unterschlüssel unter dem Schlüssel Profiles sein, wobei die Profil-ID verwendet wird.

Die Profil-ID ist eine Kombination aus Profiltyp, Profilindex.

Der Profiltyp kann eine der folgenden Zeichenfolgen oder eine {GUID}-Zeichenfolge sein:

  • KSCAMERAPROFILE_VideoRecording

  • KSCAMERAPROFILE_HighQualityPhoto

  • KSCAMERAPROFILE_BalancedVideoAndPhoto

  • KSCAMERAPROFILE_VideoConferencing

  • KSCAMERAPROFILE_PhotoSequence

  • KSCAMERAPROFILE_FaceAuth_Mode

  • KSCAMERAPROFILE_HighFrameRate

  • KSCAMERAPROFILE_HDRWithWCGVideo

  • KSCAMERAPROFILE_HDRWithWCGPhoto

  • KSCAMERAPROFILE_VariablePhotoSequence

  • KSCAMERAPROFILE_VideoHDR8

Der Profilindex kann ein beliebiger Wert zwischen 0 und 0x7FFFFFFF sein. Indexwerte mit der hohen Bitreihenfolge sind für die interne Verwendung reserviert.

Die Basis des Kameraprofils V2 ist in zwei Standard Schemaeinträge unterteilt:

  • Profileinschränkungen

  • Filter vom Typ "Medien anheften"

Profileinschränkung

Profileinschränkungen sind eine profilweite Deklaration, die die Verarbeitung von Pin Media Type Filters beeinflusst. Dies sind die sechs unterstützten Tags. Sie können in beliebiger Reihenfolge durch ein ";" getrennt angezeigt werden:

Profileinschränkung BESCHREIBUNG
LRS Sperrauflösung für alle Pins. Alle im Profil deklarierten Pins müssen die gleiche Auflösung aufweisen, wenn sie aktiv sind.
LFR Sperren Der Bildfrequenz für alle Pins. Alle im Profil deklarierten Pins müssen die gleiche Bildfrequenz aufweisen, wenn sie aktiv sind.
LST Untertyp für alle Pins sperren. Alle im Profil deklarierten Pins müssen denselben Untertyp aufweisen, wenn sie aktiv sind.
AAR Wenden Sie die Profildeklaration auf Pinebene auf alle Seitenverhältnisse an.

Die auflösungsbasierte Filterung erfolgt mithilfe des Produkts breite * Höhe der Auflösung, und dieses Produkt wird als Wert für den Vergleich verwendet. Wenn das AAR-Tag jedoch nicht festgelegt ist, wird der Vergleich nur für die Auflösungen mit demselben Seitenverhältnis durchgeführt.
DIS Deaktiviert. Wenn diese Einschränkung für die Profileinschränkung verwendet wird, wird der Filter für den Medientyp anheften ignoriert und als ungültige Profilsyntax behandelt.

Dieses Tag darf nicht mit anderen Profileinschränkungstags kombiniert werden.
UAR Lassen Sie eine beliebige Kombination von Auflösungsseitenverhältnissen zwischen Pins zu.

Standardmäßig müssen die Seitenverhältnisse über Pins hinweg identisch sein. Dieses Tag entfernt diese Standardeinschränkung.

Hinweis: Anwendungen werden empfohlen, das gleiche Seitenverhältnis für die verfügbaren Pins beizubehalten.

Wenn das UAR-Tag nicht für eine Profildeklaration festgelegt ist, müssen alle Seitenverhältnisse zwischen den Pins identisch sein. Insbesondere wird das Streaming der Vorschau um 16:9 Uhr beim Aufnehmen eines Fotos oder Streamens von der Aufnahme-Pin um 4:3 nicht unterstützt. Versuche, dies zu tun, führen zu einem Fehler.

Verarbeitung des obigen Beispielprofils:

[SampleDriver.CameraInterface.AddReg]
HKR,,"OEMCameraProfileVersion",0x00010001,2
; This is our High Frame Rate Profile.
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","Constraint",0,"LRS;LST"

Die Profileinschränkung gibt an, dass für das Profil [KSCAMERAPROFILE_HighFrameRate,0] auflösungen und der Untertyp für alle Pins identisch sein müssen. Dies entspricht der HW-Einschränkung unserer hypothetischen Kamera (keine Skalierungs-/Farbraumkonvertierung bei Einer Ausführung von 60 fps oder höher).

Encodereinschränkungen

Ein optionaler Satz von Profileinschränkungen kann empfohlene Encoderparameter für Anwendungen enthalten, die ein Profil für Videocodierungsvorgänge auswählen. Beispielsweise kann ein IHV/OEM die Verwendung von HEVC über H264 für bestimmte Systeme empfehlen, wenn ein Medientyp einen vordefinierten Schwellenwert in Bezug auf Auflösung und/oder Bildfrequenz überschreitet.

Da der auf dem Computer vorhandene HW-Encoder bei Konfiguration mit den Codierungsparametern möglicherweise einen optimalen Betrieb bietet, kann der OEM ein Profil mit weiteren "Hinweisen" für die Anwendung erstellen.

Um diese Unterstützung zu erleichtern, können jedem Profil die folgenden zusätzlichen Einschränkungen hinzugefügt werden.

Bevorzugter codierter Untertyp

Die folgende Liste von Untertypen ist der bevorzugte codierte Untertyp für den Encoder:

  • eSPSubtype_H264

  • eSPSubtype_HEVC

Diese beiden Einschränkungen schließen sich gegenseitig aus. Es kann nur eine deklariert werden. Das Deklarieren beider Führt zu einem ungültigen Profil und wird abgelehnt.

Wenn die Preferred Encoded Subtype Constraint deklariert wird, macht der MF-Attributspeicher des IMFSensorProfile den deklarierten bevorzugten codierten Subtyp mit dem attribut MF_MT_SUBTYPE verfügbar.

Bevorzugtes Encoderprofil

Die folgende Liste des bevorzugten Encoderprofils entspricht der eAVEncH264VProfile-Enumeration .

  • eSPProfile_Simple

  • eSPProfile_Base

  • eSPProfile_Main

  • eSPProfile_High

  • eSPProfile_422

  • eSPProfile_High10

  • eSPProfile_444

  • eSPProfile_Extended

  • eSPProfile_ScalableBase

  • eSPProfile_ScalableHigh

  • eSPProfile_MultiviewHigh

  • eSPProfile_StereoHigh

  • eSPProfile_ConstrainedBase

  • eSPProfile_UCConstrainedHigh

  • eSPProfile_UCScalableConstrainedBase

  • eSPProfile_UCScalableConstrainedHigh

  • eSPProfileH265_Main_420_8

  • eSPProfileH265_Main_420_10

  • eSPProfileH265_Main_420_12

  • eSPProfileH265_Main_422_10

  • eSPProfileH265_Main_422_12

  • eSPProfileH265_Main_444_8

  • eSPProfileH265_Main_444_10

  • eSPProfileH265_Main_444_12

  • eSPProfileH265_Monochrome_12

  • eSPProfileH265_Monochrome_16

  • eSPProfileH265_MainIntra_420_8

  • eSPProfileH265_MainIntra_420_10

  • eSPProfileH265_MainIntra_420_12

  • eSPProfileH265_MainIntra_422_10

  • eSPProfileH265_MainIntra_422_12

  • eSPProfileH265_MainIntra_444_8

  • eSPProfileH265_MainIntra_444_10

  • eSPProfileH265_MainIntra_444_12

  • eSPProfileH265_MainIntra_444_12

  • eSPProfileH265_MainStill_420_8

  • eSPProfileH265_MainStill_444_8

  • eSPProfileH265_MainStill_444_16

Die obige Deklaration "Preferred Encoder Profiles" schließt sich gegenseitig aus. Es kann nur eine deklariert werden. Das Deklarieren mehrerer Profile führt zu einem ungültigen Profil und wird abgelehnt.

Wenn die Profileinschränkung des bevorzugten Encoders deklariert wird, macht der MF-Attributspeicher des IMFSensorProfile das deklarierte bevorzugte Encoderprofil mit dem attribut MF_MT_MPEG2_PROFILE verfügbar.

HINWEIS: eSPProfileH265-Profile sind nur für HEVC-codierte Untertypen gültig.

Die Recommended BFrame Count Constraint bietet dem OEM eine Möglichkeit, die empfohlene B-Frameanzahl für das codierte Video anzugeben:

  • eSPBFCount_X

Wobei X die BFrame-Anzahl darstellt: Beispielsweise gibt eSPBFCount_0 0 B Frame Count an.

Wenn die Recommended BFrame Count Constraint deklariert wird, macht der MF-Attributspeicher des IMFSensorProfile die deklarierte empfohlene BFrame-Anzahl mit dem attribut CODECAPI_AVEncMPVDefaultBPictureCount verfügbar.

Die Empfohlene Bitrateneinschränkung bietet dem OEM eine Möglichkeit, sowohl eine durchschnittliche Codierungsbitrate (bei Verwendung eines geeigneten Modus zur Steuerung der Codierungsrate) als auch die maximale Bitrate anzugeben:

  • eSPBitRate_XXXXX

  • eSPMaxBitRate_XXXXX

Diese beiden Einschränkungen können unabhängig oder zusammen angegeben werden. XXXXX stellt die Bitrate in KBit/s dar. Beispielsweise stellt eSPBitRate_5000 5.000.000 Bits pro Sekunde dar.

Die eSPBitRate_XXXXX, wenn sie vom OEM angegeben wird, wird über den MF-Attributspeicher des IMFSensorProfile über das attribut CODECAPI_AVEncCommonMeanBitRate verfügbar gemacht.

Die eSPMaxBitRate_XXXXX, wenn sie vom OEM angegeben wird, wird über den MF-Attributspeicher des IMFSensorProfile über den CODECAPI_AVEncCommonMaxBitRate verfügbar gemacht.

Beispiel-Encodereinschränkung

Das folgende Beispiel-INF zeigt, wie ein OEM die Encodereinschränkungen deklarieren kann:

[SampleDriver.CameraInterface.AddReg]
HKR,,"OEMCameraProfileVersion",0x00010001,2
HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","Constraint",0,"eSPSubtype_HEVC;eSPProfile_Main;eSPBFCount_1;eSPBitRate_20000;eSPMaxBitRate_50000"

Die obige Beispieleinschränkung des Encoders würde dazu führen, dass der MF-Attributspeicher IMFSensorProfile des profils KSCAMERAPROFILE_VideoRecording,0 (siehe API-Beschreibung unten) die verschiedenen Encoderattribute wie folgt enthält:

HRESULT
CheckEncoderParameters(
    _In_ IMFSensorProfile* pProfile
    )
{
    HRESULT hr = S_OK;
    ComPtr<IMFAttributes> spAttributes;
    GUID guidSubtype = GUID_NULL;
    UINT32 eProfile = eAVEncH264VProfile_unknown;
    UINT32 uiBFrameCount = 0;
    UINT32 uiBitRate = 0;
    UINT32 uiMaxBitRate = 0;

    if (nullptr == pProfile)
    {
        return E_INVALIDARG;
    }

    RETURN_IF_FAILED (pProfile->QueryInterface(IID_PPV_ARGS(&spAttributes)));
    if (SUCCEEDED(spAttributes->GetGUID(MF_MT_SUBTYPE, &guidSubtype)))
    {
        if (guidSubtype == MFVideoFormat_HEVC)
        {
            // Use HEVC codec.
        }
        else
        {
            // Use H264 codec.
        }
    }
    if (SUCCEEDED(spAttributes->GetUINT32(MF_MT_MPEG2_PROFILE, &eProfile)))
    {
        // Use the eProfile provided for encoder profile.
    }
    if (SUCCEEDED(spAttributes->GetUINT32(CODECAPI_AVEncMPVDefaultBPictureCount, &uiBFrameCount)))
    {
        // This is the BFrame count...
    }
    if (SUCCEEDED(spAttributes->GetUINT32(CODECAPI_AVEncCommonMeanBitRate, &uiBitRate)))
    {
        // This is the average bit rate...
    }
    if (SUCCEEDED(spAttributes->GetUINT32(CODECAPI_AVEncCommonMaxBitRate, &uiMaxBitRate)))
    {
        // This is the max bit rate...
    }

    return hr;
}

Auf der WinRT-API-Oberfläche können dieselben Attribute über cameraProfile.Properties abgerufen werden (siehe WinRT-API-Beschreibung unten).

Blockierte Steuerelemente

Durch blockierte Steuerelemente können OEM/IHVs bestimmte Kamerasteuerelemente basierend auf dem ausgewählten Profil selektiv deaktivieren:

[SampleDriver.CameraInterface.AddReg]
HKR,,"OEMCameraProfileVersion",0x00010001,2
; This is our High Frame Rate Profile.
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","Constraint",0,"LRS;LST"
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","BlockedControls",0,"VHDR;PHSEQ;{E0766E84-36A2-4945-906D-092ECBD87445},2;WARM1"

Im obigen Beispiel deklariert der KSCAMERAPROFILE_HighFrameRate,0 video HDR (VHDR), Photo Sequence (PHSEQ), ein benutzerdefiniertes Steuerelement, dessen KSPROPERTY. Set = {E0766E84-36A2-4945-906D-092ECBD87445} und KSPROPERTY.Id = 2, und Warmstart auf Pin1 wird nicht unterstützt.

Wenn dieses Profil ausgewählt ist, blockiert die Pipeline explizit, dass diese Steuerelemente an den DMFT/Kameratreiber ausgegeben werden. Dadurch kann der DMFT/Kameratreiber Unterstützung für alle Kamerasteuerelemente verfügbar machen, und die Pipeline stellt sicher, dass anwendungen, die das Kameraprofil verwenden, nicht versuchen, blockierte Steuerelemente zu berühren.

Blockierte Steuerelemente können mithilfe eines der folgenden Tags für definierte Kamerasteuerelemente definiert werden oder ein {GUID}-Id-Format verwenden.

Tag Steuerelementbeschreibung
PHSEQ Erweiterte Kamerasteuerung – Fotosequenz

Hinweis: Durch das Blockieren der Fotosequenz wird auch eine variable Fotosequenz blockiert.
WARM# Erweiterte Kamerasteuerung – Warmstart-Steuerelement.

# stellt die Pin-ID dar, für die das Steuerelement "Warmer Start" deaktiviert werden soll.
SZENE Erweiterte Kamerasteuerung – Szenenmodus.
FACKEL Erweiterte Kamerasteuerung – Taschenlampenmodus.
BLITZ Erweiterte Kamerasteuerung – Blitzmodus.
ISO Erweiterte Kamerasteuerung – ISO
EVCOMP Erweiterte Kamerasteuerung – EV-Kompensation
WBAL Erweiterte Kamerasteuerung – Weißabgleich
EXPOS Erweiterte Kamerasteuerung – Belichtung
FOKUS Erweiterte Kamerasteuerung – Fokus
ROI Erweiterte Kamerasteuerung – ROI
EXTZOOM Erweiterte Kamerasteuerung – Zoom
BERATUNG Erweiterte Kamerasteuerung – ISO Advanced
VIDST Erweiterte Kamerasteuerung – Videostabilisierung
FACEDT Erweiterte Kamerasteuerung – Gesichtserkennung
VHDR Erweiterte Kamerasteuerung – Video HDR
OIS Erweiterte Kamerasteuerung – optische Bildstabilisierung
ADVPHOTO Erweiterte Kamerasteuerung – Erweitertes Foto
FACEAUTH Erweiterte Kamerasteuerung – Gesichtsauthentifizierung
SICHERHEIT Erweiterte Kamerasteuerung – Sicherer Modus
VFP Erweiterte Kamerasteuerung – VFR

Zusätzlich zu erweiterten Kamerasteuerelementen können Profile auch ältere Steuerelemente unter den PROPSETID_VIDCAP_VIDEOPROCAMP und PROPSETID_VIDCAP_CAMERACONTROL-Steuerelementsätzen blockieren. PROPSETID_VIDCAP_VIDEOPROCAMP-Steuerelemente können mithilfe von blockiert werden:

VIDPROC#

Dabei stellt # die Steuerelement-ID dar:

KSPROPERTY_VIDEOPROCAMP_BRIGHTNESS // 0
KSPROPERTY_VIDEOPROCAMP_CONTRAST // 1
KSPROPERTY_VIDEOPROCAMP_HUE // 2
KSPROPERTY_VIDEOPROCAMP_SATURATION // 3
KSPROPERTY_VIDEOPROCAMP_SHARPNESS // 4
KSPROPERTY_VIDEOPROCAMP_GAMMA // 5
KSPROPERTY_VIDEOPROCAMP_COLORENABLE // 6
KSPROPERTY_VIDEOPROCAMP_WHITEBALANCE // 7
KSPROPERTY_VIDEOPROCAMP_BACKLIGHT_COMPENSATION // 8
KSPROPERTY_VIDEOPROCAMP_GAIN // 9
KSPROPERTY_VIDEOPROCAMP_DIGITAL_MULTIPLIER // 10
KSPROPERTY_VIDEOPROCAMP_DIGITAL_MULTIPLIER_LIMIT // 11
KSPROPERTY_VIDEOPROCAMP_WHITEBALANCE_COMPONENT // 12
KSPROPERTY_VIDEOPROCAMP_POWERLINE_FREQUENCY // 13

Beispiel: VIDPROC13 blockiert das Power Line Frequency-Steuerelement.

Ebenso kann die PROPSETID_VIDCAP_CAMERACONTROL blockiert werden mit:

CAMCTRL#

Dabei stellt # die Steuerelement-ID dar:

KSPROPERTY_CAMERACONTROL_PAN // 0
KSPROPERTY_CAMERACONTROL_TILT // 1
KSPROPERTY_CAMERACONTROL_ROLL // 2
KSPROPERTY_CAMERACONTROL_ZOOM // 3
KSPROPERTY_CAMERACONTROL_EXPOSURE // 4
KSPROPERTY_CAMERACONTROL_IRIS // 5
KSPROPERTY_CAMERACONTROL_FOCUS // 6
KSPROPERTY_CAMERACONTROL_SCANMODE // 7
KSPROPERTY_CAMERACONTROL_PRIVACY // 8
KSPROPERTY_CAMERACONTROL_PANTILT // 9
KSPROPERTY_CAMERACONTROL_PAN_RELATIVE // 10
KSPROPERTY_CAMERACONTROL_TILT_RELATIVE // 11
KSPROPERTY_CAMERACONTROL_ROLL_RELATIVE // 12
KSPROPERTY_CAMERACONTROL_ZOOM_RELATIVE // 13
KSPROPERTY_CAMERACONTROL_EXPOSURE_RELATIVE // 14
KSPROPERTY_CAMERACONTROL_IRIS_RELATIVE // 15
KSPROPERTY_CAMERACONTROL_FOCUS_RELATIVE // 16
KSPROPERTY_CAMERACONTROL_PANTILT_RELATIVE // 17
KSPROPERTY_CAMERACONTROL_FOCAL_LENGTH // 18
KSPROPERTY_CAMERACONTROL_AUTO_EXPOSURE_PRIORITY // 19

Filter "Medientyp anheften"

Wenn Sie mit dem Beispielprofil fortgefahren sind, sehen Sie einen Filter vom Typ "Medien anheften" für das Profil mit hoher Bildfrequenz:

[SampleDriver.CameraInterface.AddReg]
HKR,,"OEMCameraProfileVersion",0x00010001,2
; This is our High Frame Rate Profile.
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","Constraint",0,"LRS;LST"
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","MTF0",0,"Pin0:((RES==;FRT==;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","MTF1",0,"Pin1:((RES==;FRT>=60,1;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","MTF2",0,"Pin2:(!)"

Im obigen Abschnitt Pin0 (der Vorschau-Pin) des Profils mit hoher Bildfrequenz lassen wir jede auflösungs-/bildrate zu, die auf dem Pin verfügbar ist. Für unser hypothetisches Gerät macht der Treiber keine Bildfrequenz verfügbar, die größer als 30 fps für den Vorschaupin ist.

Anheften von Zahlen, wenn sie mit einem INF deklariert werden, entsprechen der Ordnungszahl 0 der KSPIN_DESCRIPTOR_EX-Struktur, die in der KSFILTER_DESCRIPTOR-Struktur definiert ist, die AVStream-Miniporttreiber ankündigen.

Um den Filter "Medientyp anheften" und den entsprechenden Filtersatz zu interpretieren, müssen wir das Syntaxschema definieren:

Diese Zeichenfolgendefinition verwendet das folgende Filterschema des Typs "Medien anheften". Wenn [] angezeigt wird, ist die eingeschlossene Zeichenfolge optional, andernfalls ist alle in der Syntax deklarierten Zeichenfolgen obligatorisch (bei der Einschränkungssyntax wird die Groß-/Kleinschreibung nicht beachtet):

PinMediaTypeFilter     : Pin#:[(!)]|(FilterSet0)(FilterSet1)...(FilterSetN)
FilterSet              : [!](ResolutionFilter;FrameRateFilter;FourCCFilter)
Resolution             : RES[==|<=|>=|!=]Width,Height
FrameRate              : FRT[==|<=|>=|!=]Num,Denom
Subtype                : SUT[==|!=]SubtypeValue
SubtypeValue           : <See below>

SubtypeValue kann die Form einer einzelnen hexadezimalen Darstellung des Four CC-Werts annehmen (z. B. 0x3231564E == NV12), eine {GUID} im Fall eines benutzerdefinierten Medientyps (öffnen/schließen Klammern sind erforderlich, und die GUID muss die Form {55D24460-45B7-450E-829B-91A94FF84180} oder ein gut bekanntes Tag (NV12, YUY2 usw.) haben.

Die {GUID}-Darstellung kann auch für MFVideoFormat_*-Untertypen verwendet werden, wenn ein bekannter Untertyp kein aufgelistetes Tag enthält.

Für unser Beispiel:

Pin0:((RES==;FRT==;SUT==ALL))

Analysiert auf:

Resolution  : Ignore all resolution checks (implies all resolutions are allowed)
Frame rate  : Ignore all frame rate checks (implies all frame rates are allowed)
Subtype     : All

Dies ist semantisch: "Alle Medientypen zulassen".

Unter Bildfrequenzfilter finden Sie unten eine Definition der einzelnen Tags für Auflösung, Bildfrequenz und Untertyp.

Für Pin1 (der Capture-Pin) weist die Framerate-Deklaration einen anderen Wert auf:

[SampleDriver.CameraInterface.AddReg]
HKR,,"OEMCameraProfileVersion",0x00010001,2
; This is our High Frame Rate Profile.
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","Constraint",0,"LRS;LST"
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","MTF0",0,"Pin0:((RES==;FRT==;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","MTF1",0,"Pin1:((RES==;FRT>=60,1;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","MTF2",0,"Pin2:(!)"

Analysiert auf:

Resolution  : Ignore all resolution checks (implies all resolutions are allowed)
Frame rate  : Equal or greater than 60,1
Subtype     : All

Nur Medientypen mit einer Bildfrequenz von 60 fps oder mehr sind unter diesem Profil für Pin1 zulässig.

Während für Pin2 (die Foto-Pin) nicht verfügbar ist:

[SampleDriver.CameraInterface.AddReg]
HKR,,"OEMCameraProfileVersion",0x00010001,2
; This is our High Frame Rate Profile.
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","Constraint",0,"LRS;LST"
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","MTF0",0,"Pin0:((RES==;FRT==;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","MTF1",0,"Pin1:((RES==;FRT>=60,1;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","MTF2",0,"Pin2:(!)"

Wie die Syntax schon sagt, kann ein Filter vom Typ "Medien anheften" optional eine einzelne (!) Deklaration sein, was bedeutet, dass für diese Pin kein unterstütztes Medienformat vorhanden ist (Pins ohne unterstützte Medientypen werden für den Client ausgeblendet).

Wenn Sie mit dem Profil "Videoaufzeichnung" fortgefahren werden, gibt es für den Vorschau-Pin keine Einschränkungen, da unsere hypothetische Kamera nur eine Vorschau von 30 fps mit nur Medientypen verfügbar macht, die sowohl in Videoaufzeichnungs- als auch in Szenarien mit hoher Bildfrequenz gleichzeitig sind.

; Declare the Video Recording Profile here.
HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","BlockedControls",0,"PHSEQ"
HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","MTF0",0,"Pin0:((RES==;FRT==;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","MTF1",0,"Pin1:((RES==;FRT<=30,1;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","MTF2",0,"Pin2:((RES==;FRT==;SUT==ALL))"

Für den Aufnahmepin müssen wir dies jedoch auf nur 30 fps-Medientypen beschränken, da wir keine höheren Bildfrequenzen für unterschiedliche Auflösungen zwischen Vorschau- und Aufnahmevorgängen oder Fotovorgängen unterstützen können.

; Declare the Video Recording Profile here.
HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","BlockedControls",0,"PHSEQ"
HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","MTF0",0,"Pin0:((RES==;FRT==;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","MTF1",0,"Pin1:((RES==;FRT<=30,1;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","MTF2",0,"Pin2:((RES==;FRT==;SUT==ALL))"

Dies erfolgt mithilfe der Bildfrequenz gleich dem Tag "Kleiner als" (FRT<=) und der Angabe einer Bildfrequenz von 30 fps.

Pin1:((RES==;FRT<=30,1;SUT==ALL))

Analysiert auf:

Resolution    : Ignore all resolution checks (implies all resolutions are allowed)
Frame rate    : Equal or less than 30,1
Subtype       : All

Für Foto-Pin deklarieren wir keine Unterstützung für Fotosequenzen, indem wir die BlockedControls mit PHSEQ als nicht zulässiges Steuerelement deklarieren.

; Declare the Video Recording Profile here.
HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","BlockedControls",0,"PHSEQ"
HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","MTF0",0,"Pin0:((RES==;FRT==;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","MTF1",0,"Pin1:((RES==;FRT<=30,1;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","MTF2",0,"Pin2:((RES==;FRT==;SUT==ALL))"

Filtersatz

Im vorherigen Abschnitt haben wir mehrere Filtersätze untersucht und erläutert, was einige dieser Schemazeichenfolgen darstellen. An diesem Punkt ist es notwendig, die Schemasyntax des Filtersatzes zur weiteren Diskussion zu beschreiben.

Jeder Filtersatz besteht aus einem bestimmten Satz von Deklarationen für Auflösung, Bildfrequenz und Untertyp. Dieses Deklarationsdrio ist in der angegebenen Reihenfolge für einen gültigen Filtersatz erforderlich.

Ein Filter vom Typ "Medien anheften" kann aus mehreren Filtereinträgen bestehen:

PinMediaTypeFilter : Pin#:[(!)]|(FilterSet0)(FilterSet1)...(FilterSetN)
FilterSet          : [!](ResolutionFilter;FrameRateFilter;SubtypeFilter)

Wenn ein Filtersatz dieses Schema nicht erfüllt, wird die gesamte Profildeklaration abgelehnt.

Bei allen Profilschemazeichenfolgen wird die Groß-/Kleinschreibung nicht beachtet.

Jeder Filter muss durch ein ";" getrennt werden, und das Trio aus Auflösungsfilter, Bildfrequenzfilter und Untertypfilter muss durch eine öffnende/schließende Klammer begrenzt werden.

Ein weiteres Beispiel für einen Filtersatz:

; Allow only 1080p@60fps for any media subtype.
Pin0:((RES==1920,1080;FRT==60,1;SUT==ALL))

; Allow either 1080p@60fps or 1080p@120fps for any subtype but nothing else.
Pin0:((RES==1920,1080;FRT==60,1;SUT==ALL))((RES==1920,1080;FRT==120,1;SUT==ALL))

Wie im zweiten Beispiel oben gezeigt, erfolgt der Vergleich für mehrere Filtersätze an einem Pin mit einem logischen OR der beiden Filtersätze. Wenn beispielsweise ein Medientyp mit einem der beiden Filtersätze übereinstimmt, ist dies zulässig.

Hinweis: Um die Lesbarkeit der Deklaration zu erleichtern, kann der Filtersatz in mehreren Zeilen beschrieben werden. Dazu müssen sie über dieselbe Pin# verfügen, um gruppiert zu werden:

; Allow only 1080p@60fps or 1080p@120fps
Pin0:((RES==1920,1080;FRT==60,1;SUT==ALL))
Pin0:((RES==1920,1080;FRT==120,1;SUT==ALL))

Ist semantisch identisch mit der obigen Deklaration. Jede Zeile muss jedoch über einen eindeutigen MTF#-Eintrag verfügen.

Disabled Pin

Auflösungsfilter

Wie in dokumentbezogenen Begriffen definiert, definiert der Auflösungsfilter, wie basierend auf dem MF_MT_FRAME_SIZE-Attribut eines IMFMediaType-Attributs gefiltert werden soll.

Die Auflösungsfiltersyntax:

Resolution : RES[==|<=|>=|!=]Width,Height

Auflösungsfilter-Attribut

Das Auflösungsfilter-Attribut verwendet die RES-Zeichenfolge. Bei dieser Zeichenfolge wird die Groß-/Kleinschreibung nicht beachtet.

Vergleichsoperatoren für Auflösungsfilter

Die folgenden Operatoren werden unterstützt:

Vergleichsoperatoren BESCHREIBUNG
== Ermöglicht, wenn Die Auflösung gleich der deklarierten Auflösung ist.

Wenn der Filtersatz ein Ausschlussfiltersatz ist, lässt dieses Tag nicht zu, wenn die Auflösung der deklarierten Auflösung entspricht.

Hinweis: Wenn die Deklaration den Operator == verwendet und der Filterwert leer ist (z. B. RES==;)), wird das attribut MF_MT_FRAME_SIZE ignoriert.
<= Zulassen, wenn Auflösung gleich oder kleiner als die deklarierte Auflösung ist.

Der Auflösungsvergleich erfolgt basierend auf der Gesamtpixelanzahl (Produkt von Width *Height) und basierend auf dem Seitenverhältnis.

Wenn die AAR in der Profileinschränkung deklariert ist, wird die Gesamtpixelanzahl auf alle Seitenverhältnisse angewendet. Andernfalls nur übereinstimmende Seitenverhältnisse.

Wenn der Filtersatz ein Ausschlussfiltersatz ist, lässt dieses Tag nicht zu, wenn die Auflösung gleich oder kleiner als die deklarierte Auflösung ist.
>= Zulassen, wenn Auflösung gleich oder größer als die deklarierte Auflösung ist.

Der Auflösungsvergleich erfolgt basierend auf der Gesamtpixelanzahl (Produkt von Breite * Höhe) und basierend auf dem Seitenverhältnis.

Wenn die AAR in der Profileinschränkung deklariert ist, wird die Gesamtpixelanzahl auf alle Seitenverhältnisse angewendet. Andernfalls nur übereinstimmende Seitenverhältnisse.

Wenn der Filtersatz ein Ausschlussfiltersatz ist, lässt dieses Tag nicht zu, wenn die Auflösung gleich oder größer als die deklarierte Auflösung ist.
!= Zulassen, wenn die Auflösung NICHT gleich der deklarierten Auflösung ist.

Wenn der Filtersatz ein Ausschlussfiltersatz ist, lässt dieses Tag nicht zu, wenn die Auflösung NICHT gleich der deklarierten Auflösung ist.

Auflösungsfilterwert

Breite und Höhe des Auflösungsfilterwerts müssen im Dezimalformat vorliegen, getrennt durch ein Komma (",") ohne Leerzeichen:

; 1080p only.
RES==1920,1080

Im Beispiel unten geschieht Folgendes:

; 1080p and any lower resolution.
RES<=1920,1080

Entspricht nur einer Auflösung von 16:9 gleich oder kleiner als 1080p, wenn das AAR-Tag nicht in der Profileinschränkung deklariert ist. Wenn AAR jedoch deklariert wird, stimmt sie mit allen Auflösungen überein, deren Produkt von Width * Height gleich oder kleiner als (1920 * 1080 = 2073600) ist.

Beispiel:

  • Wenn AAR nicht deklariert ist, entspricht dieser Eintrag 720p, aber nicht 1280x960.

  • Wenn AAR deklariert wird, entspricht dieser Eintrag 720p, 1280 x 960 und allen niedrigeren Auflösungen.

Wenn AAR nicht deklariert wird, um sicherzustellen, dass die selektive Auflösung für beide Seitenverhältnisse von 16:9 und 4:3 übereinstimmt, können mehrere Filtersätze verwendet werden:

; This will match any 16:9 resolution of 1080p or lower
; and match any 4:3 resolution of 800x600 or lower.
; Effectively skipping 1280x960.
((RES<=1920,1080;FRT==;SUT==ALL))((RES<=800,600;FRT==;SUT==ALL))

Um allen Auflösungen zu entsprechen, geben Sie gleich oder größer als 0,0 an.

; Match all resolutions.
RES>=0,0

Bildfrequenzfilter

Wie in den Dokumentbegriffen definiert, definiert der Frameratenfilter, wie anhand des MF_MT_FRAME_RATE-Attributs eines IMFMediaType gefiltert werden soll.

Syntax des Bildfrequenzfilters:

FrameRate : FRT[==|<=|>=|!=]Num,Denom

Frame rate Filter-Attribut

Das Frame Rate Filter-Attribut verwendet die FRT-Zeichenfolge. Bei dieser Zeichenfolge wird die Groß-/Kleinschreibung nicht beachtet.

Vergleichsoperatoren für Bildfrequenzfilter

Dies sind die unterstützten Bildfrequenztags:

Vergleichsoperatoren BESCHREIBUNG
== Zulassen, wenn die Bildfrequenz der deklarierten Bildfrequenz entspricht.

Wenn es sich bei dem Filtersatz um einen Ausschlussfiltersatz handelt, wird dieses Tag nicht zugelassen, wenn die Bildrate der deklarierten Bildrate entspricht.

Hinweis: Wenn die Deklaration den Operator == verwendet und der Filterwert leer ist (z. B. FRT==;)), wird das attribut MF_MT_FRAME_RATE ignoriert.
<= Zulassen, wenn die Bildfrequenz gleich oder kleiner als die deklarierte Bildfrequenz ist.

Wenn es sich bei dem Filtersatz um einen Ausschlussfiltersatz handelt, wird dieses Tag nicht zugelassen, wenn die Bildfrequenz gleich oder kleiner als die deklarierte Bildrate ist.
>= Zulassen, wenn die Bildfrequenz gleich oder größer als die deklarierte Bildfrequenz ist.

Wenn es sich bei dem Filtersatz um einen Ausschlussfiltersatz handelt, wird dieses Tag nicht zugelassen, wenn die Bildfrequenz gleich oder größer als die deklarierte Bildrate ist.
!= Nur zulässig, wenn die Bildfrequenz NICHT der deklarierten Bildrate entspricht.

Wenn der Filtersatz ein Ausschlussfiltersatz ist, wird dieses Tag nicht zugelassen, wenn die Bildfrequenz NICHT der deklarierten Bildrate entspricht.
; Allow 30fps.
FRT==30,1

; Allow 30fps or lower.
FRT<=30,1

; Allow 60fps or higher.
FRT>=60,1

; Match for all frame rate.
FRT>=0,0

FRT==;, und FRT>=0,0 weisen subtile semantische Unterschiede auf.

FRT==; : Ignore all frame rate checks for the Filter Set.

FRT>=0,0 : Match any frame rate.

Der Unterschied zwischen FRT ==; und FRT>=0,0 ist ersteres hat die gleiche Bedeutung sowohl für den Inklusionsfiltersatz als auch für den Ausschlussfiltersatz. Die Bedeutung von FRT>=0,0 ändert sich jedoch je nachdem, ob es sich um einen Inklusionsfiltersatz oder einen Ausschlussfiltersatz handelt.

Die Erläuterung des Ausschlussfiltersatzes finden Sie unter Filtersatz .

Untertypfilter

Der Untertypfilter definiert das Filtern basierend auf dem MF_MT_SUBTYPE-Attribut eines IMFMediaType- Typs.

Subtypfiltersyntax:

Subtype : SUT[==|!=]SubtypeValue
SubtypeValue : <See Below>

Attribut "Subtypfilter"

Das Subtype-Filter-Attribut verwendet die SUT-Zeichenfolge. Bei dieser Zeichenfolge wird die Groß-/Kleinschreibung nicht beachtet.

Untertypfiltervergleichsoperatoren

Die folgenden Vergleichsoperatoren werden unterstützt:

Vergleichsoperatoren BESCHREIBUNG
== Zulassen, wenn der Untertyp dem deklarierten Untertyp entspricht.

Wenn der Filtersatz ein Ausschlussfiltersatz ist, wird dieses Tag nicht zugelassen, wenn der Untertyp gleich dem deklarierten Untertyp ist.

Hinweis: Wenn die Deklaration den Operator == verwendet und der Filterwert leer ist (z. B. FRT==;)), wird das attribut MF_MT_SUBTYPE ignoriert.
!= Zulassen, wenn der Untertyp NICHT dem deklarierten Untertyp entspricht.

Wenn der Filtersatz ein Ausschlussfiltersatz ist, wird dieses Tag nicht zugelassen, wenn der Untertyp NICHT gleich dem deklarierten Untertyp ist.

Die Operatoren Equal oder Less Than (<=) und Equal oder Greater Than (>=) werden für den Untertypfilter nicht unterstützt. Wenn das Profil deklariert wird, ist es ungültig und wird von der Pipeline abgelehnt.

Untertypfilterwert

Der Untertypfilterwert kann die hexadezimale Darstellung des FourCC-Werts, eine GUID-Zeichenfolgendeklaration sein, wenn ein benutzerdefinierter Medientyp verwendet wird (bekannte MFVideoFormat-Untertyp-GUID kann auch verwendet werden) oder ein Known Subtype-Tag (siehe Liste unten).

; Match any media type which has NV12 subtype
SUT==0x3231564E
; Same as above…
SUT=={3231564E-0000-0010-8000-00AA00389B71}
; Still the same (and the recommended declaration).
SUT==NV12

; Allow any subtype except for NV12
SUT!=0x3231564E
; Another way to say the same thing
SUT!={3231564E-0000-0010-8000-00AA00389B71}
; Yet another (and recommended).
SUT!=NV12

; Valid syntax. Profile allow/disallow should ignore
; the subtype and only check against resolution and
; frame rate.
SUT==;

Der Wert von 0/GUID_NULL und ALL hat eine besondere Bedeutung.

Es bedeutet "Alle vier CC-Werte".

; Match all subtypes
SUT==0
; Another way to say the same thing
SUT=={00000000-0000-0000-0000-000000000000}
; Yet another (and recommended).
SUT==ALL

Semantisch SUT==; und SUT==0 haben subtil unterschiedliche Bedeutungen.

Wenn sie in einem Einschlussfilter verwendet werden, haben sie die gleiche Auswirkung: Jeden Untertyp zulassen. Bei Verwendung in einem Ausschlussfilter bedeutet "SUT==0", dass alle Untertypen ausgeschlossen werden. Da dies jedoch den gleichen Effekt hat wie das Markieren des gesamten Pins als deaktiviert (!), gibt es keinen Grund, SUT ==0 in einem Ausschlussfilter zu verwenden.

Bekannte Untertyptags

Tags
RGB32
ARGB32
RGB24
L8
L16
D16
AI44
AYUV
YUY2
YVYU
YVU9
UYVY
NV11
NV12
YV12
I420
IYUV
Y210
Y216
Y410
Y416
Y41P
Y41T
Y42T
P210
P216
P010
P016
V210
V216
V410
MP43
MP4S
M4S2
MP4V
WMV1
WMV2
WMV3
WVC1
MSS1
MSS2
MPG1
DVSL
DVSD
DVHD
DV25
DV50
DVH1
DVC
H264
H265
MJPG
420O
HEVC
HEVS
VP80
VP90
ORAW
H263
VP10
AV01
JPEG

Ausschlussfiltersatz

Alle bisherigen Beispiele für Filtersatz sind Inklusive Filtereinträge. Sie lauten semantisch , "wenn ein Medientyp die Kriterien erfüllt, zulassen, dass der Medientyp vom Client verwendet werden kann".

In der Diskussion fehlt das Äquivalent von "Wenn ein Medientyp die Kriterien erfüllt, darf der Medientyp nicht für den Client verfügbar gemacht werden".

Dafür benötigen wir einen Ausschlussfiltersatz.

Wenn dem Filtersatz ein "!" vorangestellt ist:

; Allow everything except 1080p@60fps of any subtype.
Pin0:(!(RES==1920,1080;FRT==60,1;SUT==))

Es handelt sich um einen Ausschlussfiltersatz. Wenn der Medientyp übereinstimmt, wird ein Ausschlussfiltersatz aus der Liste der verfügbaren Medientypen ausgeschlossen.

Das Deklarieren mehrerer Filtersätze führt dazu, dass die Einschränkungsüberprüfungen der einzelnen Filtersätze logisch oder untereinander ausgeführt werden:

; Allow everything except 1080p@60fps or 1080p@120fps
Pin0:(!(RES==1920,1080;FRT==60,1;SUT==))(!(RES==1920,1080;FRT==120,1;SUT==))

Ausschluss im Vergleich zu Inklusionsfiltern

Wie gezeigt, kann ein Filtersatz ein Inklusionsfiltersatz oder ein Ausschlussfiltersatz sein. Das Mischen verschiedener Filtersätze ist zulässig, aber je nachdem, welcher Filtersatz hinzugefügt wird, kann sich die Bedeutung des Filtertypfilters anheften ändern:

  1. Wenn nur Inklusionsfiltereinträge für einen Filter vom Typ "Medien anheften" deklariert sind, werden alle Medientypen, die nicht mit einem der Filtereinträge übereinstimmen, von den verfügbaren Medientypen ausgeschlossen.

  2. Wenn nur Ausschlussfiltereinträge für einen Filter vom Typ "Medien anheften" deklariert sind, werden alle Medientypen, die nicht mit einem der Filtereinträge übereinstimmen, aus den verfügbaren Medientypen eingeschlossen.

  3. Wenn sowohl Einschluss- als auch Ausschlussfiltereinträge für einen Filter vom Typ "Medien anheften" deklariert werden, wird jeder Medientyp, der einem Inklusionsfiltersatz entspricht, eingeschlossen, es sei denn, er stimmt ebenfalls mit einem Ausschlussfiltersatz überein. Der Ausschlussfiltersatz ersetzt den Inklusionsfiltersatz.

Um dieses Beispiel zu veranschaulichen, nehmen wir für Pin0 an, dass die folgenden Medientypen verfügbar sind:

  • 1920x1080@60fps, NV12

  • 1920x1080@30fps, NV12

  • 1280x720@60fps, NV12

  • 1280x720@30fps, NV12

  • 640x360@60fps, NV12

  • 640x360@30fps, NV12

Wenn wir nur einen Inklusionsfiltersatz deklarieren:

; Allow all media types 720p and lower resolution whose frame
; rate is 30fps or lower. for example, no 60fps is allowed and no
; 1080p is allowed.
Pin0:((RES<=1280,720;FRT<=30,1;SUT==ALL))

Wenn wir nur einen Ausschlussfiltersatz deklarieren:

; Disallow 1080p resolutions or higher or any media types with
; 60fps or higher. Ignore Subtypes.
Pin0:(!(RES>=1920,1080;FRT>=60,1;SUT==))

Wenn wir sowohl einen Einschluss- als auch einen Ausschlussfiltersatz deklarieren:

; Allow all media types except for 640x360@60fps NV12.
Pin0:((RES<=1920,1080;FRT<=60,1;SUT==ALL))
Pin0:(!(RES==640,360;FRT==60,1;SUT==NV12))

Hinweis: Aufgrund der Regel Nr. 2 in der Filterverarbeitungsanweisung kann das letzte Beispiel von "Alle Medientypen außer für 640x360@60fps NV12 zulassen" für unsere Beispiel pin0 sein:

; Allow all media types except for 640x360@60fps NV12.
Pin0:(!(RES==640,360;FRT==60,1;SUT==NV12))

Da nur ein Ausschlussfiltersatz vorhanden ist, sind alle Medientypen mit Ausnahme der Medientypen zulässig, die dem Ausschlussfiltersatz entsprechen.

Weitere Beispiele zur Veranschaulichung der Einträge von Einschluss- und Ausschlussfiltern:

; Allow any media type that is 30fps.
Pin0:((RES==;FRT==30,1;SUT==ALL))

; Allow any media type that is NV12.
Pin0:((RES==;FRT==;SUT==0x3132564E))

; Allow any media type, except for 4K@60fps of any subtype.
Pin0:(!(RES==3840,2160;FRT==60,1;SUT==))

; Allow any media type less than equal to 4K resolution,
; except for YUY2 subtypes.
Pin0:((RES<=3840,2160;FRT>=0,0;SUT==ALL))
Pin0:(!(RES==;FRT==;SUT==YUY2))

; Allow any media type equal or less than 4K
; and equal or less than 60fps
Pin0:((RES<=3840,2160;FRT<=60,1;SUT==ALL))

; Allow any NV12 and YUY2 media types
Pin0:((RES==;FRT>=0,0;SUT==NV12))((RES==;FRT>=0,0;SUT==YUY2))

; Allow any except for MJPG and H264
Pin0:((RES==;FRT>=0,0;SUT!=MJPG))((RES==;FRT>=0,0;SUT!=H264))

; Allow any but exclude only 4K@60fps NV12 & 3840x2880@60fps NV12
Pin0:(!(RES==3840,2160;FRT==60,1;SUT==NV12))(!(RES==3840,2880;FRT==60,1;SUT==NV12))

Kameraprofil V2-Entwicklerspezifikation