Perfis de Câmera
Perfil da API do KS
KsInitializeDeviceProfile
Para publicar os perfis de dispositivo, todos os drivers de miniporto devem inicializar o repositório de perfil, para fazer isso, a seguinte API KS deve ser chamada:
__drv_maxIRQL(PASSIVE_LEVEL)
KSDDKAPI
NTSTATUS
NTAPI
KsInitializeDeviceProfile(
__in PKSFILTERFACTORY FilterFactory
);
FilterFactory (KSFILTERFACTORY)
Este é o KSFILTERFACTORY que foi criado pelo driver da câmera para identificar exclusivamente a fábrica de filtros da câmera.
É necessário que o campo ReferenceGuid da estrutura KSFILTER_DESCRIPTOR contida com o KSFILTERFACTORY seja definido com um GUID exclusivo para esse tipo de filtro. E o campo Sinalizadores do KSFILTER_DESCRIPTOR tem o sinalizador KSFILTER_FLAG_PRIORITIZE_REFERENCEGUID definido.
Se o KSFILTERFACTORY fornecido não contiver uma interface de dispositivo associada ao KSCATEGORY_VIDEO_CAMERA, essa chamada à API falhará com STATUS_INVALID_PARAMETER.
Para excluir todos os perfis do repositório de perfil associados à interface do dispositivo para esse KSFILTERFACTORY, o driver pode chamar KsInitializeDeviceProfile seguido imediatamente por KsPersistDeviceProfile. Isso resultaria em informações de perfil vazias, o que removeria as informações de perfil do repositório de perfis.
KsPublishDeviceProfile
Para publicar essas informações, a nova API do KS a seguir é introduzida:
__drv_maxIRQL(PASSIVE_LEVEL)
KSDDKAPI
NTSTATUS
NTAPI
KsPublishDeviceProfile(
__in PKSFILTERFACTORY FilterFactory,
__in PKSDEVICE_PROFILE_INFO Profile
);
Essa API é chamada repetidamente para cada perfil compatível com o driver da câmera. Cada chamada pode ter um conjunto diferente de informações de simultaneidade e intervalo de dados. O campo ProfileId do KSCAMERA_PROFILE_INFO deve ser exclusivo. Se o mesmo ProfileId for usado e o conteúdo das informações de perfil for diferente, a chamada subsequente substituirá as informações de perfil anteriores.
FilterFactory (KSFILTERFACTORY)
Esse é o mesmo FilterFactory usado na API KsInitializeDeviceProfile.
As informações de perfil da câmera serão associadas apenas à categoria de interface KSCATEGORY_VIDEO_CAMERA. Qualquer fábrica de filtros criada sem essa categoria de interface e tentar registrar um perfil de Câmera resultará no retorno de uma STATUS_INVALID_PARAMETER dessa API.
Perfil (KSDEVICE_PROFILE_INFO)
O KSDEVICE_PROFILE_INFO é uma estrutura genérica projetada para lidar com informações de perfil para vários tipos de dispositivo:
##define KSDEVICE_PROFILE_TYPE_CAMERA 0x00000001
typedef struct _KSDEVICE_PROFILE_INFO
{
UINT32 Type;
UINT32 Size;
union
{
struct
{
KSCAMERA_PROFILE_INFO Info;
UINT32 Reserved;
UINT32 ConcurrencyCount;
PKSCAMERA_PROFILE_CONCURRENCYINFO Concurrency;
} Camera;
// Add other device type specific "profiles" here.
};
} KSDEVICE_PROFILE_INFO, *PKSDEVICE_PROFILE_INFO;
Tipo
Define o tipo de perfil. Atualmente, o único tipo definido é KSDEVICE_PROFILE_TYPE_Camera.
Tamanho
Isso deve ser definido como estrutura sizeof(KSDEVICE_PROFILE_INFO).
Camera.Info
Estrutura de KSCAMERA_PROFILE_INFO definindo as informações de perfil de uma Câmera.
Camera.Reserved
Não utilizado. Deve ser definido como 0.
Camera.ConcurrencyCount
Número de estruturas de KSCAMERA_PROFILE_CONCURRENCYINFO na matriz Simultaneidade. Para o Limite do Windows, isso deve ser menor ou igual a 1.
Um valor de 0 (com Camera.Concurrency definido como NULL), indica que esse perfil não é simultâneo.
Camera.Concurrency
Matriz de estruturas KSCAMERA_PROFILE_CONCURRENCYINFO que descrevem o suporte de simultaneidade para esse perfil. Se Camera.CountOfConcurrency for 0, esse parâmetro deverá ser NULL. Se Camera.CountOfConcurrency for >0, esse parâmetro não deverá ser NULL.
KSCAMERA_PROFILE_INFO
A estrutura KSCAMERA_PROFILE_INFO é usada para identificar exclusivamente um determinado perfil:
typedef struct _KSCAMERA_PROFILE_INFO
{
UINT32 ProfileId;
UINT32 Index;
UINT32 PinCount;
PKSCAMERA_PROFILE_PININFO Pins
} KSCAMERA_PROFILE_INFO, *PKSCAMERA_PROFILE_INFO;
ProfileId
GUID que representa uma ID exclusiva para o Perfil. Esse GUID pode ser um GUID exclusivo criado por IHV/OEM que representa um perfil personalizado ou pode ser um dos GUIDs predefinidos descritos na seção 3.1.
OBSERVAÇÃO: esse campo NÃO deve ser definido como KSCAMERAPROFILE_Legacy. O perfil Herdado não deve ser publicado pelo driver da câmera. A ID do perfil herdado será enviada ao driver da câmera durante a inicialização do Mecanismo de Captura/Captura de Mídia se o aplicativo não tiver indicado que pode dar suporte a perfis. Nesses casos, o driver da câmera deve reverter seu comportamento para o modo de operação Windows 8.1 e expor apenas os Tipos de Mídia de Conjunto Reduzido, juntamente com os bits de KSPROPERTY_CAMERACONTROL_IMAGE_PIN_CAPABILITY_EXCLUSIVE_WITH_RECORD e KSPROPERTY_CAMERACONTROL_IMAGE_PIN_CAPABILITY_SEQUENCE_EXCLUSIVE_WITH_RECORD capacidade correspondentes, indicando se o driver da câmera é capaz de dar suporte à gravação simultânea/ foto e/ou gravação/sequência de fotos dentro do Tipo de Mídia de Conjunto Reduzido.
Índice
Cada perfil dentro de um determinado grupo ProfileId deve ter um valor de Índice exclusivo. Isso permite que qualquer perfil de um dispositivo seja identificado exclusivamente com ProfileId + Index.
PinCount
O número de estruturas de KSCAMERA_PROFILE_PININFO apontadas por Pinos. Esse valor deve ser >0.
Pins
Matriz de estruturas KSCAMERA_PROFILE_PININFO definindo os tipos de mídia com suporte em cada um dos pinos desse perfil.
Esse campo não deve ser NULL.
Simultaneidade (KSCAMERA_PROFILE_CONCURRENCYINFO)
Atualmente, um aplicativo não tem conhecimento se pode tentar transmitir de mais de uma câmera até que a tentativa seja bem-sucedida ou falhe. No caso do cenário do Web Blogging, isso significa que o aplicativo precisa tentar ativar os dois fluxos antes de pintar a interface do usuário com uma imagem no elemento de vídeo de imagem.
O parâmetro Concurrency fornece uma dica para o aplicativo de que as câmeras frontal e traseira podem ser ativadas ao mesmo tempo usando um perfil específico (ou um conjunto de perfis). Com esse conhecimento, o aplicativo pode desenhar os elementos da interface do usuário para ambos os fluxos antes de ativá-los.
Para vários aplicativos, a simultaneidade não será suficiente para garantir a operação simultânea. As informações de simultaneidade não tentarão resolver esse cenário. Em vez disso, o recurso de inicializando câmeras existente de Windows 8 será aproveitado.
O parâmetro Concurrency representa uma matriz de estrutura de KSCAMERA_PROFILE_CONCURRENCYINFO (cujo tamanho de matriz é especificado pelo parâmetro Camera.CountOfConcurrency) indicando quais perfis o perfil identificado na estrutura KSCAMERA_PROFILE_INFO pode ser executado simultaneamente em câmeras diferentes.
Se os campos Camera.CountOfConcurrency e Camera.Concurrency forem 0 & NULL, respectivamente, isso indicará ao sistema operacional que o perfil definido pelo KSCAMERA_PROFILE_INFO não é um perfil simultâneo.
typedef struct _KSCAMERA_PROFILE_CONCURRENCYINFO
{
GUID ReferenceGuid;
UINT32 Reserved;
UINT32 ProfileCount;
PKSCAMERA_PROFILE_INFO Profiles;
} KSCAMERA_PROFILE_CONCURRENCYINFO,*PKSCAMERA_PROFILE_CONCURRENCYINFO;
ReferenceGuid
Deve ser definido como ReferenceGuid do KSFILTER_DESCRIPTOR que corresponde ao outro dispositivo com o qual esse perfil é simultâneo.
Reservado
Não utilizado. Deve ser 0.
ProfileCount
Número de IDs de perfil contidas na matriz Perfis. Deve ser maior que 0.
Perfis
Essa é uma matriz da KSCAMERA_PROFILE_INFO que pode ser usada simultaneamente no outro dispositivo de câmera especificado pelo ReferenceGuid.
Esse campo não deve ser NULL.
Pinos (KSCAMERA_PROFILE_PININFO)
Para especificar a lista disponível de tipos de mídia para cada um dos pinos, uma matriz de KSCAMERA_PROFILE_PININFO deve ser especificada, cujo tamanho de matriz é especificado pelo parâmetro CountOfPins.
typedef struct _KSCAMERA_PROFILE_PININFO
{
GUID PinCategory;
UINT32 Reserved;
UINT32 MediaInfoCount;
PKSCAMERA_PROFILE_MEDIAINFO MediaInfos;
} KSCAMERA_PROFILE_PININFO, *PKSCAMERA_PROFILE_PININFO;
PinCategory
Essa é a categoria PINNAME correspondente ao pino de imagem Capturar, Visualizar ou Ainda. Para o Limite do Windows, as únicas categorias de pino com suporte são: PINNAME_VIDEO_CAPTURE, PINNAME_VIDEO_PREVIEW PINNAME_VIDEO_STILL. Todas as outras categorias resultam em um erro de STATUS_INVALID_PARAMETER.
Reservado
Não utilizado. Deve ser 0.
MediaInfoCount
Tamanho da matriz de KSCAMERA_PROFILE_MEDIAINFO estruturas especificadas no campo MediaInfos.
Mediainfo
Matriz de estruturas KSCAMERA_PROFILE_MEDIAINFO.
MediaInfos (KSCAMERA_PROFILE_MEDIAINFO)
As informações de tipo de mídia relevantes apresentadas para cada perfil são descritas por:
##define KSCAMERAPROFILE_FLAGS_VIDEOHDR 0x0000000000000002
##define KSCAMERAPROFILE_FLAGS_VARIABLEPHOTOSEQUENCE 0x0000000000000010
typedef struct _KSCAMERA_PROFILE_MEDIAINFO
{
struct
{
UINT32 X;
UINT32 Y;
} Resolution;
struct
{
UINT32 Numerator;
UINT32 Denominator;
} MaxFrameRate;
ULONGLONG Flags;
UINT32 Data0;
UINT32 Data1;
UINT32 Data2;
UINT32 Data3;
} KSCAMERA_PROFILE_MEDIAINFO, *PKSCAMERA_PROFILE_MEDIAINFO;
Resolução
O tamanho do quadro X (horizontal) e Y (vertical) em pixels.
MaxFrameRate
A taxa num/denom da taxa de quadros (por exemplo, 30 / 1 = 30 fps). Essa taxa de quadros representa a taxa máxima de quadros da resolução especificada em condições de iluminação ideais. A taxa de quadros real pode ser menor que esse valor.
Para obter informações de mídia de fotos, se a sequência de fotos não puder ser habilitada devido a restrições de hardware para a resolução de fotos fornecida, a taxa de quadros deverá ser definida como 0 (num=0,denom=0). Isso informa à camada de aplicativo que o controle de sequência de fotos será rejeitado pelo driver quando esse tipo de mídia de foto específico for selecionado.
Flags
Pode ser OR bit a bit de um ou mais dos seguintes sinalizadores:
KSCAMERAPROFILE_FLAGS_VIDEOHDR Quando o sinalizador HDR de vídeo é definido para as informações de mídia, para essa configuração de mídia, o HDR de vídeo pode estar habilitado para o fluxo de registro.
Esse sinalizador pode não ser definido para informações de mídia no pino de foto.
KSCAMERAPROFILE_FLAGS_VARIABLEPHOTOSEQUENCE Quando o sinalizador Sequência de Fotos Variáveis é definido para as informações de mídia, o suporte ao VPS está disponível mesmo que as informações de mídia de foto não forneçam uma taxa de quadros.
Se esse sinalizador for definido & taxa de quadros for diferente de zero, para essas informações de mídia de foto, o VPS e a Sequência de Fotos estão disponíveis.
Se esse sinalizador for definido & taxa de quadros for zero, para essas informações de mídia de foto, o VPS estará disponível, mas não a Sequência de Fotos.
Se esse sinalizador não estiver definido & taxa de quadros não for zero, para essas informações de mídia de foto, o VPS não estará disponível, mas a Sequência de Fotos estará disponível.
Se esse sinalizador não estiver definido & taxa de quadros for zero, nem VPS nem Sequência de Fotos estão disponíveis para essas informações de mídia.
Esse sinalizador só pode ser definido para informações de mídia no pino de foto. A presença desse sinalizador em informações de mídia de pino nãofoto resulta na rejeição do conjunto de perfis.
Data0... 3
Valor determinado com base em Sinalizadores. Não utilizado neste momento, deve ser definido como 0.
KsPersistDeviceProfile
Para confirmar as informações de perfil no repositório persistente, a API KS a seguir deve ser invocada.
__drv_maxIRQL(PASSIVE_LEVEL)
KSDDKAPI
NTSTATUS
NTAPI
KsPersistDeviceProfile(
__in PKSFILTERFACTORY FilterFactory
);
FilterFactory (KSFILTERFACTORY)
Esse é o KSFILTERFACTORY que foi usado para inicializar o repositório de perfil em KsInitializeDeviceProfile. Se KsPersistDeviceProfile for chamado sem inicializar primeiro o repositório de perfil com KsInitializeDeviceProfile, a chamada para KsPersistDeviceProfile falhará com STATUS_INVALID_DEVICE_REQUEST.
Além disso, essa API também poderá falhar com STATUS_INSUFFICIENT_RESOURCE se o pool de páginas estiver esgotado quando as informações de perfil estiverem sendo mantidas.
KSPROPERTY_CAMERACONTROL_EXTENDED_PROFILE
Escopo: Versão 1
Controle: Filtrar
Tipo: Assíncrono, Não Cancelável
Um novo Controle de Propriedade Estendida é introduzido para permitir que a estrutura de captura informe ao driver da câmera qual perfil foi selecionado.
KSCAMERA_EXTENDEDPROP_HEADER
Versão
Definido para o Controle de Propriedade Estendido versão 1.
PinId
Deve ser KSCAMERA_EXTENDEDPROP_FILTERSCOPE
(0xFFFFFFFF).
Tamanho
Deve ser sizeof(KSCAMERA_EXTENDEDPROP_HEADER) + sizeof(KSCAMERA_EXTENDEDPROP_PROFILE)
.
Resultado
Indica os resultados do erro da última operação SET. Se nenhuma operação SET tiver ocorrido, isso deverá ser 0. 0 indica que nenhum erro foi detectado.
Recurso
Deve ser KSCAMERA_EXTENDEDPROP_CAPS_ASYNCCONTROL
. Não há suporte para outros modos.
Sinalizadores
Deve ser 0.
KSCAMERA_EXTENDEDPROP_PROFILE
O conteúdo do controle KSPROPERTY_CAMERACONTROL_EXTENDED_PROFILE contém o KSCAMERA_EXTENDEDPROP_HEADER + KSCAMERA_EXTENDEDPROP_PROFILE.
typedef struct _KSCAMERA_EXTENDEDPROP_PROFILE
{
GUID ProfileId;
UINT32 Index;
UINT32 Reserved;
} KSCAMERA_EXTENDEDPROP_PROFILE, *PKSCAMERA_EXTENDEDPROP_PROFILE;
ProfileId
GUID que representa o perfil selecionado. Se for KSCAMERAPROFILE_Legacy, nenhum perfil foi selecionado, o driver da câmera deverá expor o Tipo de Mídia de Conjunto Reduzido.
Se esse campo for GUID_NULL, nenhum perfil foi selecionado, mas o aplicativo está ciente do perfil, portanto, o driver da câmera deve expor toda a gama de tipos de mídia.
Index
Valor de índice associado ao perfil identificado.
Reserved
Não utilizado. Deve ser 0.
Perfil INF
Para permitir aos OEMs a flexibilidade, com base em SKUs diferentes que podem usar o mesmo driver de referência, mas sensores diferentes (ou mesmo no caso de diferentes níveis de desempenho), os perfis podem ser publicados ou substituídos usando as seguintes seções INF:
Cada perfil, novo ou existente, deve ter seu valor [GUID de ProfildId, Índice] em uma cadeia de caracteres delimitada por ponto e vírgula armazenada no Nó da Interface do Dispositivo:
OEMCameraProfiles: REG_SZ:
KSCAMERAPROFILE_VideoRecording,0;KSCAMERAPROFILE_HighQualityPhoto,0;KSCAMERAPROFILE_BalancedVideoPhoto,0;KSCAMERAPROFILE_VideoConferencing,0;{3074C75C-1D69-4A0A-895D-EB9EFDE1CF30},0
No exemplo acima, estamos substituindo o0º indexado, KSCAMERAPROFILE_VideoRecording, KSCAMERAPROFILE_HighQualityPhoto, KSCAMERAPROFILE_BalancedVideoPhoto e KSCAMERAPROFILE_VideoConferencing juntamente com um novo perfil personalizado com a ID de {3074C75C-1D69-4A0A-895D-EB9EFDE1CF30}
Para cada GUID de perfil no OEMCameraProfiles, uma nova subchave deve ser criada no Nó da Interface do Dispositivo que corresponde ao nome especificado na cadeia de caracteres delimitada.
Sob essa subchave, o OEM pode indicar que o perfil foi desabilitado (substituindo assim a configuração publicada pelo driver) adicionando o seguinte valor:
Disabled: REG_DWORD: 0x1
Se o OEM quiser alterar ou publicar os tipos de mídia disponíveis em vez de simplesmente desabilitar o perfil, outra subchave correspondente à PinCategory do fluxo deverá ser criada.
Por exemplo, para publicar o pin visualização do0º indexado, KSCAMERAPROFILE_VideoRecording:
<Device Interface Node>KSCAMERAPROFILE_VideoRecording,0\PINNAME_VIDEO_PREVIEW
MediaCount: REG_DWORD: N
Media0: REG_SZ: <MediaInfo Format>
...
MediaN-1: REG_SZ: <MediaInfo Format>
O valor do registro MediaCount indica o número de MediaInfo presentes para esse pin. Cada MediaInfo deve receber um nome de entrada do Registro de "Media#" em que \ representa um índice baseado em 0 de N contagem (por exemplo, Media0, Media1, Media2 ...,MediaN-1).
O MediaInfo especificado por Media0 será tratado como o Tipo de Mídia Preferencial para o perfil.
O Formato MediaInfo acima usa a seguinte sintaxe:
MediaInfo Format = <ResolutionX>, <ResolutionY>, <MaxFrameRateNum>,<MaxFrameRateDenom>, Flags, Data0, Data1, Data2, Data3
Portanto, o seguinte:
<Device Interface Node>KSCAMERAPROFILE_VideoRecording,0\PINNAME_VIDEO_PREVIEW
MediaCount: REG_DWORD: 2
Media0: REG_SZ: 1280,720,30,1,0,0,0,0,0
Media1: REG_SZ: 640,360,30,1,0,0,0,0,0
<Device Interface
Node>KSCAMERAPROFILE_VideoRecording,0\PINNAME_VIDEO_CAPTURE
MediaCount: REG_DWORD: 3
Media0: REG_SZ: 1280,720,30,1,0,0,0,0,0
Media1: REG_SZ: 1920,1080,30,1,0,0,0,0,0
Media2: REG_SZ: 640,360,30,1,0,0,0,0,0
Publicará o perfil VideoRecording da configuração do IHV para permitir apenas a gravação de 1080p, 720p, 360p (com o 720p feito o Tipo de Mídia Preferencial) enquanto permite apenas visualizações de 720p e 360p sem qualquer suporte para fotos.
Para definir um perfil personalizado, a mesma sintaxe pode ser usada, mas com o nome do perfil sendo substituído pela ID GUID do perfil personalizado:
<Device Interface
Node>{3074C75C-1D69-4A0A-895D-EB9EFDE1CF30},0\PINNAME_VIDEO_PREVIEW
MediaCount: REG_DWORD: 2
Media0: REG_SZ: 1280,720,30,1,0,0,0,0,0
Media1: REG_SZ: 640,360,30,1,0,0,0,0,0
<Device Interface
Node>{3074C75C-1D69-4A0A-895D-EB9EFDE1CF30},0\PINNAME_VIDEO_CAPTURE
MediaCount: REG_DWORD: 2
Media0: REG_SZ: 1280,720,30,1,0,0,0,0,0
Media2: REG_SZ: 640,360,30,1,0,0,0,0,0
<Device Interface
Node>{3074C75C-1D69-4A0A-895D-EB9EFDE1CF30},0\PINNAME_IMAGE
MediaCount: REG_DWORD: 2
Media0: REG_SZ: 1920,1080,0,0,0,0,0,0,0
Media1: REG_SZ: 1280,720,0,0,0,0,0,0,0
A modificação no registro pode ser tratada de qualquer maneira adequada para o OEM. O processo recomendado é criar uma seção AddReg para o arquivo INF do driver de câmera para que as entradas do Registro possam ser criadas durante a instalação da câmera (e removidas quando o driver for removido):
[SampleDriver.DeviceInterface.AddReg]
HKR,,"OEMCameraProfiles",0,"KSCAMERAPROFILE_VideoRecording,0",
HKR,"KSCAMERAPROFILE_VideoRecording,0\PINNAME_VIDEO_PREVIEW","MediaCount",0x00010001,2,
HKR,"KSCAMERAPROFILE_VideoRecording,0\PINNAME_VIDEO_PREVIEW","Media0",0,"1280,720,30,1,0,0,0,0,0",
HKR,"KSCAMERAPROFILE_VideoRecording,0\PINNAME_VIDEO_PREVIEW","Media1",0,"640,360,30,1,0,0,0,0,0",
…
Perfil INF: simultaneidade
Para publicar a configuração simultaneidade de um perfil, o seguinte valor do Registro pode ser adicionado:
<Device Interface Node>KSCAMERAPROFILE_VideoConferencing,0
Concurrency: REG_SZ:
{ConcurrentDeviceReferenceGUID};{ProfileID},{Index};…
ConcurrentDeviceRefefenceGUID é o ReferenceGUID do KSFILTER_DESCRIPTOR associado à câmera que esse perfil pode executar simultaneamente.
Exemplo de INF
;---------------------------------------------------------------
; S t r i n g s
;---------------------------------------------------------------
[Strings]
; non-localizable
RefGUIDFrontCamera="{C3FDE193-01D1-4A78-AA0F-0D2395611C3D}"
RefGUIDRearCamera="{3E5169E8-8DB8-4951-A33F-CFF94F2C87BE}"
;---------------------------------------------------------------
; A d d R e g
;---------------------------------------------------------------
[SampleDriver.FrontCameraInterface.AddReg]
HKR,,"OEMCameraProfiles",0,"KSCAMERAPROFILE_VideoRecording;KSCAMERAPROFILE_VideoConferencing;KSCAMERAPROFILE_HighQualityPhoto;KSCAMERAPROFILE_PhotoSequence",
HKR,,"ReferenceGUID",0,%RefGUIDFrontCamera%
HKR,"KSCAMERAPROFILE_VideoRecording,0\PINNAME_VIDEO_PREVIEW","MediaCount",0x00010001,2,
HKR,"KSCAMERAPROFILE_VideoRecording,0\PINNAME_VIDEO_PREVIEW","Media0",0,"1280,720,30,1,0,0,0,0,0",
HKR,"KSCAMERAPROFILE_VideoRecording,0\PINNAME_VIDEO_PREVIEW","Media1",0,"640,360,30,1,0,0,0,0,0",
HKR,"KSCAMERAPROFILE_VideoRecording,0\PINNAME_VIDEO_CAPTURE","MediaCount",0x00010001,2,
HKR,"KSCAMERAPROFILE_VideoRecording,0\PINNAME_VIDEO_CAPTURE","Media0",0,"1280,720,30,1,0,0,0,0,0",
HKR,"KSCAMERAPROFILE_VideoRecording,0\PINNAME_VIDEO_CAPTURE","Media1",0,"640,360,30,1,0,0,0,0,0",
HKR,"KSCAMERAPROFILE_PhotoSequence,0","Disabled",0x00010001,1,
HKR,"KSCAMERAPROFILE_HighQualityPhoto,0\PINNAME_VIDEO_PREVIEW","Media0",0,"1280,720,30,1,0,0,0,0,0",
HKR,"KSCAMERAPROFILE_HighQualityPhoto,0\PINNAME_VIDEO_PREVIEW","Media1",0,"640,360,30,1,0,0,0,0,0",
HKR,"KSCAMERAPROFILE_HighQualityPhoto,0\PINNAME_IMAGE","MediaCount",0x00010001,2,
HKR,"KSCAMERAPROFILE_HighQualityPhoto,0\PINNAME_IMAGE","Media0",0,"1920,1080,0,0,0,0,0,0,0",
HKR,"KSCAMERAPROFILE_HighQualityPhoto,0\PINNAME_IMAGE","Media1",0,"1280,720,5,1,0,0,0,0,0",
HKR,"KSCAMERAPROFILE_VideoConferencing,0\PINNAME_VIDEO_PREVIEW","MediaCount",0x00010001,2,
HKR,"KSCAMERAPROFILE_VideoConferencing,0\PINNAME_VIDEO_PREVIEW","Media0",0,"1280,720,30,1,0,0,0,0,0",
HKR,"KSCAMERAPROFILE_VideoConferencing,0\PINNAME_VIDEO_PREVIEW","Media1",0,"640,360,30,1,0,0,0,0,0",
HKR,"KSCAMERAPROFILE_VideoConferencing,0\PINNAME_VIDEO_CAPTURE","MediaCount",0x00010001,2,
HKR,"KSCAMERAPROFILE_VideoConferencing,0\PINNAME_VIDEO_CAPTURE","Media0",0,"1280,720,30,1,0,0,0,0,0",
HKR,"KSCAMERAPROFILE_VideoConferencing,0\PINNAME_VIDEO_CAPTURE","Media1",0,"640,360,30,1,0,0,0,0,0",
HKR,"KSCAMERAPROFILE_VideoConferencing,0","Concurrency",0,"%RefGUIDRearCamera%;KSCAMERAPROFILE_VideoConferencing,0",
A seção de exemplo de um INF acima mostra como e o OEM pode publicar (ou substituir as configurações de IHV padrão) para perfis. No exemplo acima, o 0º VideoRecording indexado para a câmera frontal é limitado a apenas 720p30 para visualização e registro sem suporte para fotos.
A PhotoSequence para a câmera frontal também está desabilitada (substituindo o perfil publicado do IHV).
O perfil HighQualityPhoto é limitado à versão prévia de 720p com 1080p de captura única ou foto de 720p a 5 fps.
O perfil VideoConferencing é limitado a apenas 720p30 para visualização e captura, indicando que ele pode ser executado simultaneamente com o perfil VideoConferencing da câmera traseira (o perfil VideoConferencing da câmera traseira não é mostrado no INF— se não for especificado no INF, o perfil VideoConferencing da câmera traseira usa qualquer que seja o IHV publicado ou se não estiver presente, os perfis são desabilitados, pois a substituição acima é inválida).
Perfil da API INF vs. KS
As informações de perfil do INF sempre substituirão as informações de perfil publicadas pela API do KS. A precedência está no nível por perfil.
Se um driver publicar o perfil VideoRecording, HighQualityPhoto, VideoConferencing usando a API KS e as configurações do INF contiverem as entradas de perfil para HighQualityPhoto, somente o perfil HighQualityPhoto publicado pelo driver será substituído com as informações de perfil do INF.
Isso é feito com a expectativa de que um único driver de referência (implementado pelo IHV) possa publicar um conjunto de perfis disponíveis para um determinado sensor, mas o OEM pode decidir selecionar um sensor diferente e/ou devido ao fator forma final, pode optar por alterar/limitar os perfis disponíveis.
O Perfil INF também permite que os OEMs, sem alterar o binário do driver, publiquem perfis para drivers de Windows 8.1 existentes simplesmente atualizando seu INF.