Dichiarazione del profilo di esempio (profilo fotocamera V2)
Prendiamo una fotocamera ipotetica che supporta il nuovo profilo ad alta frequenza fotogrammi. Definiamo alcuni vincoli per il dispositivo.
Il pin di anteprima è pin 0. Nella KSFILTER_DESCRIPTOR dichiarata dal driver della fotocamera, quando viene definita la matrice di KSPIN_DESCRIPTOR_EX, la prima KSPIN_DESCRIPTOR_EX è il descrittore del pin di anteprima. Analogamente, il pin 1 è Pin capture e pin 2 è Il pin foto.
A causa delle limitazioni hardware, il dispositivo in questione non può gestire la scalabilità a velocità di fotogrammi di 60 fps o superiore. Pertanto, sia i flussi preview che Capture devono avere la stessa risoluzione.
Analogamente, il dispositivo non può gestire anche la conversione dello spazio dei colori per 60 fps o superiore.
La fotocamera è in grado di trasmettere video 4K 16x9 a 60 fps. La fotocamera è anche in grado di 3840x2880@60fps (4:3 video a 60 fps).
La fotocamera non è in grado di fornire operazioni fotografiche durante l'esecuzione a 60 fps.
Si dichiarerà anche un profilo di registrazione video, limitato a 30 fps, ma può consentire qualsiasi combinazione di risoluzione/sottotipi.
Per la sequenza di foto del profilo di registrazione video non è supportata (ad esempio, le singole operazioni fotografico funzionano).
Per la dichiarazione basata su INF, ogni filtro tipo di supporto pin deve essere assegnato a un nome di voce del Registro di sistema. Questo nome deve essere MTF# dove # rappresenta un valore intero.
Dato questi vincoli, è possibile dichiarare il profilo seguente:
[SampleDriver.CameraInterface.AddReg]
; Declare our schema version.
HKR,,"OEMCameraProfileVersion",0x00010001,2
;
; Declare our HighFrameRate profile with a lock resolution/subtype constraint.
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:(!)"
;
; Declare our VideoRecording profile.
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))"
Impostando la voce del Registro di sistema OEMCameraProfileVersion su 2, viene indicata la pipeline di acquisizione che supporta il nuovo schema del profilo basato su vincoli.
[SampleDriver.CameraInterface.AddReg]
HKR,,"OEMCameraProfileVersion",0x00010001,2
Dopo aver dichiarato, tutti i profili devono essere archiviati nella chiave del Registro di sistema Profili nel nodo Interfaccia dispositivo.
[SampleDriver.CameraInterface.AddReg]
HKR,,"OEMCameraProfileVersion",0x00010001,2
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","Constraint",0,"LRS;LST"
Ogni profilo deve essere configurato come sottochiave sotto la chiave Profili usando l'ID profilo. Un ID profilo è costituito da tipo di profilo, indice del profilo.
Il tipo di profilo può essere uno dei tipi di profilo noti seguenti o una stringa {GUID}:
KSCAMERAPROFILE_HighQualityPhoto
KSCAMERAPROFILE_BalancedVideoAndPhoto
KSCAMERAPROFILE_VideoConferencing
KSCAMERAPROFILE_PhotoSequence
KSCAMERAPROFILE_FaceAuth_Mode
KSCAMERAPROFILE_HighFrameRate
KSCAMERAPROFILE_HDRWithWCGVideo
KSCAMERAPROFILE_HDRWithWCGPhoto
KSCAMERAPROFILE_VariablePhotoSequence
KSCAMERAPROFILE_VideoHDR8
L'indice del profilo può essere qualsiasi intero senza segno a 32 bit, ad eccezione di 0xFFFFFFFF. Il valore dell'indice di 0xFFFFFFFF è riservato e non deve essere usato da alcuna dichiarazione IHV/OEM.
La dichiarazione della voce Vincolo nella sottochiave del profilo indica che è presente un vincolo a livello di profilo:
[SampleDriver.CameraInterface.AddReg]
HKR,,"OEMCameraProfileVersion",0x00010001,2
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","Constraint",0,"LRS;LST"
Per il profilo Ad alta frequenza fotogrammi, indica LRS;LST
che la risoluzione tra tutti i pin deve essere la stessa e il sottotipo deve anche essere lo stesso (nessun ridimensionamento né conversione dello spazio dei colori è consentita dalla pipeline di acquisizione).
Per il pin di anteprima del profilo Ad alta frequenza fotogrammi, è possibile consentire qualsiasi velocità di risoluzione/fotogramma disponibile nel pin di anteprima. Per il dispositivo ipotetico, il pin di anteprima non espone mai più di 30 fps.
[SampleDriver.CameraInterface.AddReg]
HKR,,"OEMCameraProfileVersion",0x00010001,2
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:(!)"
Per il pin acquisizione, è possibile consentire qualsiasi risoluzione e qualsiasi frequenza di fotogrammi 60 fps o superiore.
[SampleDriver.CameraInterface.AddReg]
HKR,,"OEMCameraProfileVersion",0x00010001,2
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:(!)"
Anche se il pin foto non è disponibile:
[SampleDriver.CameraInterface.AddReg]
HKR,,"OEMCameraProfileVersion",0x00010001,2
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:(!)"
Oltre al profilo Ad alta frequenza fotogrammi, offriamo anche un profilo di registrazione video standard.
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))"
Ancora una volta, non abbiamo vincoli sul pin di anteprima perché la fotocamera ipotetica espone solo 30 fps di anteprima con solo tipi di supporti che sono garantiti per essere simultanei negli scenari di registrazione video o frequenza elevata dei fotogrammi.
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))"
Ma per il pin di acquisizione è necessario limitare questo a 30 tipi di supporti fps perché non è possibile supportare velocità di fotogrammi superiori per risoluzioni diverse tra anteprima e acquisizione o operazioni foto.
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))"
Per il pin foto non viene dichiarato alcun supporto per la sequenza di foto dichiarando il controllo Sequenza foto come bloccato per questo profilo.
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))"