Partilhar via


Exemplo de declaração de perfil (Camera Profile V2)

Nós pegamos uma câmera hipotética que suporta o novo perfil High Frame Rate. Vamos definir algumas restrições para o nosso dispositivo.

  1. 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, a primeira KSPIN_DESCRIPTOR_EX é o descritor do pino de visualização. Da mesma forma, o pino 1 é o pino de captura e o pino 2 é o pino de foto.

  2. 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.

  3. 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.

  4. 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).

  5. A câmera não é capaz de fornecer nenhuma operação de foto quando executado a 60 fps.

  6. Também declararemos um perfil de gravação de vídeo, limitado a 30 fps, mas que pode permitir qualquer combinação/subtipo de resolução.

  7. Para a sequência de fotos de perfil de gravação de vídeo não é suportada (por exemplo, operações de foto única funcionam).

Para declaração baseada em INF, cada filtro de tipo de mídia Pin deve receber um nome de entrada do Registro. Esse nome deve ser MTF#, onde # representa um valor inteiro.

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

Ao definir a entrada do Registro OEMCameraProfileVersion como 2, indicamos ao pipeline de captura que oferecemos suporte ao novo esquema de perfil baseado em restrição.

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

Uma vez declarados, todos os perfis devem ser armazenados na chave do Registro 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 sob a chave Perfis, usando a ID do perfil. Um ID de Perfil consiste em Tipo de Perfil, Índice de Perfil.

Tipo de perfil pode ser qualquer um dos seguintes tipos de perfil bem 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 não assinado de 32 bits, exceto 0xFFFFFFFF. O valor do índice de 0xFFFFFFFF é reservado e não deve ser usado por nenhuma declaração IHV/OEM.

A declaração da entrada 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 High Frame Rate, o LRS;LST indica que a resolução em todos os pinos deve ser a mesma e o subtipo também deve ser o mesmo (não é permitida a conversão de escala nem espaço de cor a partir do pipeline de captura).

Para o pino de visualização do perfil de alta taxa de quadros, estamos permitindo qualquer resolução/taxa de quadros disponível no pino de visualização. Para o 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 pino de 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 da foto não estiver 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 High Frame Rate, 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 de visualização, uma vez que nossa câmera hipotética só expõe a visualização de 30 fps com apenas tipos de mídia que são garantidos para ser simultâneo em ambos os 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))"

Mas para o pino de captura, precisamos limitar isso a 30 tipos de mídia fps porque não podemos suportar taxas de quadros mais altas para diferentes resoluções entre as operações de visualização e captura nem de 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 o pino de foto, declaramos não haver suporte para sequência de fotos declarando o controle de sequência de fotos como 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))"

Camera Profile V2 especificação do desenvolvedor