Udostępnij przez


Przykładowa deklaracja profilu (profil kamery w wersji 2)

Bierzemy hipotetyczny aparat obsługujący nowy profil o wysokiej szybkości klatek. Zdefiniujmy pewne ograniczenia dla naszego urządzenia.

  1. Numer PIN podglądu to numer PIN 0. W KSFILTER_DESCRIPTOR, który jest zadeklarowany przez sterownik aparatu, gdy jest zdefiniowana tablica KSPIN_DESCRIPTOR_EX, pierwszym KSPIN_DESCRIPTOR_EX jest deskryptor numeru PIN podglądu. Podobnie numer PIN 1 to Przechwyć pinezkę, a numer PIN 2 to Zdjęcie pin.

  2. Ze względu na ograniczenia sprzętowe urządzenie, o których mowa, nie może obsłużyć skalowania przy szybkości 60 klatek na sekundę lub większej. W związku z tym zarówno strumienie podglądu, jak i przechwytywania muszą mieć taką samą rozdzielczość.

  3. Podobnie urządzenie nie może obsługiwać konwersji przestrzeni kolorów na 60 klatek na sekundę lub więcej.

  4. Aparat jest w stanie przesyłać strumieniowo wideo 4K 16x9 na 60 klatek na sekundę. Aparat jest również w stanie 3840x2880@60fps (4:3 wideo na 60 klatek na sekundę).

  5. Aparat nie może zapewnić żadnych operacji fotograficznych w przypadku działania przy 60 kl./s.

  6. Zadeklarujemy również profil nagrywania wideo, ograniczony do 30 klatek na sekundę, ale może zezwalać na dowolną kombinację rozdzielczości/podtypy.

  7. W przypadku sekwencji zdjęć profilu nagrywania wideo nie jest obsługiwana (na przykład działa operacja pojedynczego zdjęcia).

W przypadku deklaracji opartej na protokole INF każdy filtr typu nośnika pin musi mieć przypisaną nazwę wpisu rejestru. Ta nazwa musi być nazwą MTF#, gdzie # reprezentuje wartość całkowitą.

Biorąc pod uwagę te ograniczenia, możemy zadeklarować następujący profil:

[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))"

Ustawiając wpis rejestru OEMCameraProfileVersion na 2, wskazujemy potok przechwytywania, który obsługujemy nowy schemat profilu opartego na ograniczeniach.

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

Po zadeklarowaniu wszystkie profile muszą być przechowywane w kluczu rejestru Profile w węźle Interfejs urządzenia.

[SampleDriver.CameraInterface.AddReg]
HKR,,"OEMCameraProfileVersion",0x00010001,2
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","Constraint",0,"LRS;LST"

Każdy profil musi być skonfigurowany jako podklucz w kluczu Profile przy użyciu identyfikatora profilu. Identyfikator profilu składa się z typu profilu, indeksu profilu.

Typ profilu może być jednym z następujących dobrze znanych typów profilów lub ciągiem {GUID}:

  • KSCAMERAPROFILE_HighQualityPhoto

  • KSCAMERAPROFILE_BalancedVideoAndPhoto

  • KSCAMERAPROFILE_VideoConferencing

  • KSCAMERAPROFILE_PhotoSequence

  • KSCAMERAPROFILE_FaceAuth_Mode

  • KSCAMERAPROFILE_HighFrameRate

  • KSCAMERAPROFILE_HDRWithWCGVideo

  • KSCAMERAPROFILE_HDRWithWCGPhoto

  • KSCAMERAPROFILE_VariablePhotoSequence

  • KSCAMERAPROFILE_VideoHDR8

Indeks profilu może być dowolną 32-bitową liczbą całkowitą bez znaku, z wyjątkiem 0xFFFFFFFF. Wartość indeksu 0xFFFFFFFF jest zarezerwowana i nie może być używana przez żadną deklarację IHV/OEM.

Deklaracja wpisu Ograniczenie w podkluczu profilu wskazuje, że mamy ograniczenie poziomu profilu:

[SampleDriver.CameraInterface.AddReg]
HKR,,"OEMCameraProfileVersion",0x00010001,2
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","Constraint",0,"LRS;LST"

W przypadku profilu o wysokiej szybkości klatek LRS;LST wskazuje, że rozdzielczość we wszystkich wyprowadzeniach musi być taka sama, a podtyp musi być taki sam (żadne skalowanie ani konwersja przestrzeni kolorów nie jest dozwolona z potoku przechwytywania).

W przypadku numeru PIN w wersji zapoznawczej profilu Wysoki współczynnik klatek na klatkę ramową zezwalamy na dowolną rozdzielczość/szybkość klatek dostępną w numerze PIN w wersji zapoznawczej. W przypadku naszego hipotetycznego urządzenia numer PIN w wersji zapoznawczej nigdy nie będzie ujawniać więcej niż 30 klatek na sekundę.

[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:(!)"

W przypadku przypinania przechwytywania zezwalamy na dowolną rozdzielczość i dowolną szybkość 60 klatek na sekundę lub wyższą.

[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:(!)"

Chociaż numer PIN zdjęcia jest niedostępny:

[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:(!)"

Oprócz profilu o wysokiej szybkości klatek udostępniamy również standardowy profil nagrywania wideo.

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))"

Po raz kolejny nie mamy żadnych ograniczeń dotyczących pinezki podglądu, ponieważ nasz hipotetyczny aparat uwidacznia tylko podgląd 30 klatek na sekundę tylko z typami multimediów, które mają gwarancję współbieżności w scenariuszach nagrywania wideo lub wysokiej szybkości klatek.

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))"

Jednak w przypadku przypinania przechwytywania musimy ograniczyć to do 30 typów multimediów na sekundę, ponieważ nie możemy obsługiwać wyższych szybkości klatek dla różnych rozdzielczości między operacjami podglądu i przechwytywania ani zdjęć.

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))"

W przypadku pinezki zdjęć nie deklarujemy obsługi sekwencji zdjęć, deklarując kontrolkę Photo Sequence jako zablokowaną dla tego profilu.

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))"

specyfikacja dewelopera profilu kamery w wersji 2