Declaração de perfil de exemplo (Perfil da Câmera V2)
Usamos uma câmera hipotética que dá suporte ao novo perfil de Alta Taxa de Quadros. Vamos definir algumas restrições para nosso dispositivo.
O pino de visualização é o pino 0. No KSFILTER_DESCRIPTOR declarado pelo driver da câmera, quando a matriz de KSPIN_DESCRIPTOR_EX é definida, o primeiro KSPIN_DESCRIPTOR_EX é o descritor do pino de visualização. Da mesma forma, o pino 1 é Pino de captura e o pino 2 é Pino de foto.
Devido a limitações de hardware, o dispositivo em questão não pode lidar com o dimensionamento com taxas de quadros de 60 fps ou superiores. Portanto, os fluxos De visualização e captura devem ter a mesma resolução.
Da mesma forma, o dispositivo também não pode lidar com a conversão de espaço de cor para 60 fps ou superior.
A câmera é capaz de transmitir vídeo 4K 16x9 a 60 fps. A câmera também é capaz de 3840x2880@60fps (vídeo 4:3 a 60 fps).
A câmera não é capaz de fornecer nenhuma operação de foto ao executar a 60 fps.
Também declararemos um perfil de Gravação de Vídeo, limitado a 30 fps, mas pode permitir qualquer combinação/subtipos de resolução.
Para a Sequência de foto de perfil de Gravação de Vídeo não há suporte (por exemplo, operações de foto única funcionam).
Para a declaração baseada em INF, cada Filtro de Tipo de Mídia de Fixação deve receber um nome de entrada do Registro. Esse nome deve ser MTF# em que # representa um valor inteiro.
Considerando essas restrições, podemos declarar o seguinte perfil:
[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))"
Definindo a entrada do registro OEMCameraProfileVersion como 2, indicamos para o pipeline de captura que oferecemos suporte ao novo esquema de perfil baseado em restrição.
[SampleDriver.CameraInterface.AddReg]
HKR,,"OEMCameraProfileVersion",0x00010001,2
Depois de declarados, todos os perfis devem ser armazenados na chave do Registro de Perfis no nó Interface do Dispositivo.
[SampleDriver.CameraInterface.AddReg]
HKR,,"OEMCameraProfileVersion",0x00010001,2
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","Constraint",0,"LRS;LST"
Cada perfil deve ser configurado como uma subchave na chave Perfis, usando a ID do Perfil. Uma ID de Perfil consiste em Tipo de Perfil, Índice de Perfil.
O Tipo de Perfil pode ser qualquer um dos seguintes tipos de perfil conhecidos ou uma cadeia de caracteres {GUID}:
KSCAMERAPROFILE_HighQualityPhoto
KSCAMERAPROFILE_BalancedVideoAndPhoto
KSCAMERAPROFILE_VideoConferencing
KSCAMERAPROFILE_PhotoSequence
KSCAMERAPROFILE_FaceAuth_Mode
KSCAMERAPROFILE_HighFrameRate
KSCAMERAPROFILE_HDRWithWCGVideo
KSCAMERAPROFILE_HDRWithWCGPhoto
KSCAMERAPROFILE_VariablePhotoSequence
KSCAMERAPROFILE_VideoHDR8
O Índice de Perfil pode ser qualquer inteiro sem sinal de 32 bits, exceto para 0xFFFFFFFF. O valor de índice de 0xFFFFFFFF é reservado e não deve ser usado por nenhuma declaração IHV/OEM.
A declaração da entrada De restrição na subchave de perfil indica que temos uma restrição de nível de perfil:
[SampleDriver.CameraInterface.AddReg]
HKR,,"OEMCameraProfileVersion",0x00010001,2
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","Constraint",0,"LRS;LST"
Para o perfil taxa de quadros alta, o indica que a LRS;LST
resolução em todos os pinos deve ser a mesma e o subtipo também deve ser o mesmo (nenhuma conversão de espaço de cor nem dimensionamento é permitida do pipeline de captura).
Para o pin De visualização do perfil de Taxa de Quadros Alta, estamos permitindo qualquer taxa de resolução/quadro disponível no pin Visualização. Para nosso dispositivo hipotético, o pino de visualização nunca exporá mais de 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:(!)"
Para o pin captura, permitimos qualquer resolução e qualquer taxa de quadros de 60 fps ou superior.
[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:(!)"
Enquanto o pino de foto não está disponível:
[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:(!)"
Além do perfil alta taxa de quadros, também fornecemos um perfil padrão de Gravação de Vídeo.
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))"
Mais uma vez, não temos restrições no pino Visualização, pois nossa câmera hipotética expõe apenas a visualização de 30 fps com apenas tipos de mídia que têm a garantia de serem simultâneos em cenários de Gravação de Vídeo ou Alta Taxa de Quadros.
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))"
No entanto, para o pin captura, precisamos limitar isso a tipos de mídia de 30 fps, pois não podemos dar suporte a taxas de quadros mais altas para resoluções diferentes entre operações de Visualização e Captura nem 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))"
Para Pino de foto, não declaramos nenhum suporte à Sequência de Fotos declarando o controle Sequência de Fotos como sendo bloqueado para esse perfil.
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))"