Perfis de câmera

Perfil da API do KS

KsInitializeDeviceProfile

Para publicar os perfis de dispositivo, todos os drivers de miniporta devem inicializar o armazenamento de perfis, 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 Flags do KSFILTER_DESCRIPTOR tem a bandeira KSFILTER_FLAG_PRIORITIZE_REFERENCEGUID definida.

Se o KSFILTERFACTORY fornecido não contiver uma interface de dispositivo associada ao KSCATEGORY_VIDEO_CAMERA, esta chamada de API falhará com STATUS_INVALID_PARAMETER.

Para excluir todos os perfis do repositório de perfis associado à interface do dispositivo para este 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 seguinte nova API KS é introduzida:

__drv_maxIRQL(PASSIVE_LEVEL)
KSDDKAPI
NTSTATUS
NTAPI
KsPublishDeviceProfile(
    __in PKSFILTERFACTORY FilterFactory,
    __in PKSDEVICE_PROFILE_INFO Profile
    );

Essa API é chamada repetidamente para cada perfil suportado pelo driver da câmera. Cada chamada pode ter um conjunto diferente de simultaneidade e informações de 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)

Este é o mesmo FilterFactory usado na API KsInitializeDeviceProfile.

As informações do perfil da câmera só serão associadas à categoria de interface KSCATEGORY_VIDEO_CAMERA. Qualquer fábrica de filtros criada sem essa categoria de interface e tentando registrar um perfil de câmera resultará em que essa API retornará um STATUS_INVALID_PARAMETER.

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 dispositivos:

##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 sizeof(KSDEVICE_PROFILE_INFO) estrutura.

Camera.Info

Estrutura de KSCAMERA_PROFILE_INFO definindo as informações de perfil de uma câmera.

Camera.Reservado

Não utilizado. Deve ser definido como 0.

Camera.ConcurrencyCount

Número de estruturas KSCAMERA_PROFILE_CONCURRENCYINFO na matriz Concorrência. 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 de KSCAMERA_PROFILE_CONCURRENCYINFO que descrevem o suporte de simultaneidade para este perfil. Se Camera.CountOfConcurrency for igual a 0, esse parâmetro deverá ser NULL. Se o Camera.CountOfConcurrency for igual a >0, esse parâmetro não deve 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 um ID exclusivo para o Perfil. Este GUID pode ser um GUID exclusivo criado por IHV/OEM representando um perfil personalizado ou pode ser um dos GUIDs predefinidos descritos na seção 3.1.

NOTA: Este campo NÃO deve ser definido como KSCAMERAPROFILE_Legacy. O perfil Legacy não deve ser publicado pelo driver da câmera. O ID do perfil herdado é enviado para o driver da câmera durante a inicialização do Capture Engine/Media Capture se o aplicativo não tiver indicado que pode suportar perfis. Nesses casos, o driver da câmera deve reverter seu comportamento para o modo de operacionalização do Windows 8.1 e expor apenas os Tipos de Mídia de Conjunto Reduzido, juntamente com os bits de capacidade correspondentes KSPROPERTY_CAMERACONTROL_IMAGE_PIN_CAPABILITY_EXCLUSIVE_WITH_RECORD e KSPROPERTY_CAMERACONTROL_IMAGE_PIN_CAPABILITY_SEQUENCE_EXCLUSIVE_WITH_RECORD, indicando se o driver da câmera é capaz de suportar gravação e fotografia simultânea e/ou gravação ou sequência de fotografias 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 KSCAMERA_PROFILE_PININFO referenciadas pelos Pins. Esse valor deve ser >0.

Pinos

Matriz de estruturas de KSCAMERA_PROFILE_PININFO definindo os tipos de mídia suportados em cada um dos pinos deste perfil.

Este campo não deve ser NULL.

Simultaneidade (KSCAMERA_PROFILE_CONCURRENCYINFO)

Atualmente, um aplicativo não tem conhecimento sobre se ele pode tentar transmitir de mais de uma câmera até que a tentativa seja bem-sucedida ou falhe. No caso do cenário de Blogagem na Web, isso significa que o aplicativo deve tentar ativar ambos os fluxos antes de renderizar a interface do utilizador com um elemento de vídeo em imagem sobre 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 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árias aplicações, a simultaneidade não será suficiente para garantir a operação concorrente. As informações de concorrência não tentarão resolver este cenário. Em vez disso, o recurso Camera Yanking existente do Windows 8 será aproveitado.

O parâmetro Concurrency representa uma matriz de estruturas KSCAMERA_PROFILE_CONCURRENCYINFO (cujo tamanho é especificado pelo parâmetro Camera.CountOfConcurrency), indicando em 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 indica ao SO 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 o ReferenceGuid do KSFILTER_DESCRIPTOR que corresponde ao outro dispositivo com o qual este perfil é utilizado conjuntamente.

Reservado

Não utilizado. Deve ser 0.

Contagem de Perfis

Número de IDs de perfil contidos na matriz Perfis. Deve ser maior que 0.

Perfis

Esta é uma matriz do KSCAMERA_PROFILE_INFO que pode ser usada simultaneamente no outro dispositivo de câmera especificado pelo ReferenceGuid.

Este 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

Esta é a categoria PINNAME correspondente ao pino de Captura, Pré-visualização ou Imagem Fixa. Para o Windows Threshold, as únicas categorias de pinos suportadas 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 estruturas KSCAMERA_PROFILE_MEDIAINFO especificadas no campo MediaInfos.

MediaInfo

Matriz de estruturas KSCAMERA_PROFILE_MEDIAINFO.

Informações de Mídia (KSCAMERA_PROFILE_MEDIAINFO)

A informação relevante sobre o tipo de média para cada perfil é descrita da seguinte forma:

##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 relação num/denom da taxa de quadros (por exemplo, 30 / 1 = 30 fps). Esta taxa de quadros representa a taxa de quadros máxima da resolução especificada em condições ideais de iluminação. A taxa de quadros real pode ser menor do que este valor.

Para obter informações sobre mídia fotográfica, 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 a camada de aplicativo que o controle de sequência de fotos será rejeitado pelo driver quando esse tipo específico de mídia de fotos for selecionado.

Bandeiras

Pode ser OU bit a bit de um ou mais dos seguintes sinais:

  • KSCAMERAPROFILE_FLAGS_VIDEOHDR Quando o indicador HDR de vídeo está ativado nas informações de mídia, HDR de vídeo pode ser ativado para o fluxo de gravação para essa configuração de mídia.

    Este sinalizador não pode ser definido para informações de mídia no pino da foto.

  • KSCAMERAPROFILE_FLAGS_VARIABLEPHOTOSEQUENCE Quando o sinalizador da sequência de fotos variável é ativado para as informações de mídia, o suporte a VPS está disponível mesmo que as informações de mídia de fotos não especifiquem uma taxa de quadros.

    Se este sinalizador estiver ativo e a taxa de fotogramas for diferente de zero, para essa informação de mídia de fotos, o VPS e a Sequência de Fotos estarão disponíveis.

    Se esse sinalizador estiver definido e a taxa de quadros for zero, para essa informação de mídia fotográfica, o VPS estará disponível, mas não a sequência de fotos.

    Se este sinalizador não estiver definido e a taxa de quadros for diferente de zero, nessa informação de mídia de fotos, o VPS não é disponível, mas a Sequência de Fotos é disponível.

    Se este indicador não estiver definido e a taxa de quadros for zero, nem o VPS nem a Sequência de Fotos estarão disponíveis para informações de mídia.

    Este flag só pode ser definido para informações de mídia do pino de foto. A presença desse sinalizador em informações de mídia de pinos sem foto resulta na rejeição do conjunto de perfis.

Dados0... 3

Valor determinado com base nas Flags. Não utilizado neste momento, deve ser definido como 0.

KsPersistDeviceProfile

Para confirmar as informações de perfil no repositório persistente, a seguinte API do KS deve ser invocada.

__drv_maxIRQL(PASSIVE_LEVEL)
KSDDKAPI
NTSTATUS
NTAPI
KsPersistDeviceProfile(
    __in PKSFILTERFACTORY FilterFactory
    );

FilterFactory (KSFILTERFACTORY)

Este é o KSFILTERFACTORY que foi usado ao inicializar o armazenamento de perfil em KsInitializeDeviceProfile. Se KsPersistDeviceProfile for chamado sem primeiro inicializar o repositório de perfis com KsInitializeDeviceProfile, a chamada para KsPersistDeviceProfile falhará com STATUS_INVALID_DEVICE_REQUEST.

Além disso, essa API também pode falhar com STATUS_INSUFFICIENT_RESOURCE se o pool de páginas estiver esgotado quando as informações de perfil estiverem sendo persistentes.

KSPROPERTY_CAMERACONTROL_EXTENDED_PROFILE

Âmbito: Versão 1

Controle: Filtro

Tipo: assíncrono, não cancelável

Um novo Controle de Propriedade Estendido é 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 Propriedades Estendidas 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 de erro da última operação SET. Se nenhuma operação SET tiver ocorrido, isso deve ser 0. 0 indica que não foram detetados erros.

Capacidade

Deve ser KSCAMERA_EXTENDEDPROP_CAPS_ASYNCCONTROL. Nenhum outro modo é suportado.

Bandeiras

Deve ser 0.

KSCAMERA_EXTENDEDPROP_PROFILE

A carga útil do controlo 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 este for KSCAMERAPROFILE_Legacy, e nenhum perfil tiver sido selecionado, o driver da câmara deve expor o Tipo de Média de Conjunto Reduzido.

Se este campo for GUID_NULL, nenhum perfil foi selecionado, mas o aplicativo reconhece o perfil, portanto, o driver da câmera deve expor toda a gama de tipos de mídia.

Índice

Valor do índice associado ao perfil identificado.

Reservado

Não utilizado. Deve ser 0.

Perfil INF

Para permitir aos OEMs a flexibilidade, com base em diferentes SKUs 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 [ProfildId GUID, Index] 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 a substituir o índice 0th, KSCAMERAPROFILE_VideoRecording, KSCAMERAPROFILE_HighQualityPhoto, KSCAMERAPROFILE_BalancedVideoPhoto e KSCAMERAPROFILE_VideoConferencing, juntamente com um novo perfil personalizado com o ID {3074C75C-1D69-4A0A-895D-EB9EFDE1CF30}.

Para cada GUID de perfil no OEMCameraProfiles, uma nova subchave deve ser criada no Nó de Interface de Dispositivo que corresponda ao nome especificado na cadeia de caracteres delimitada.

Sob essa subchave, o OEM pode indicar que o perfil foi desativado (substituindo assim a configuração publicada pelo driver) adicionando o seguinte valor:

Disabled: REG_DWORD: 0x1

Se o OEM, em vez disso, desejar alterar ou publicar os tipos de mídia disponíveis em vez de simplesmente desativar o perfil, outra subchave correspondente ao PinCategory do fluxo deve ser criada.

Por exemplo, para publicar o pino de visualização do 0º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 registo MediaCount indica o número de MediaInfo presente para este pino. Cada MediaInfo deve receber um nome de entrada de registo "Media#" onde \ representa um índice iniciado em 0 de um total de N (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

Assim, 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 a partir da configuração do IHV para permitir apenas a gravação em 1080p, 720p, 360p (com o 720p feito o Tipo de Mídia Preferido) enquanto permite apenas visualizações de 720p e 360p sem qualquer suporte a fotos.

Para definir um perfil personalizado, a mesma sintaxe pode ser usada, mas com o nome do perfil sendo substituído pela ID do 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 do 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 da câmera para que as entradas do registro possam ser criadas durante a instalação da câmera (e removidas quando o driver é 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 : Concorrência

Para publicar a configuração de simultaneidade de um perfil, o seguinte valor do registro pode ser adicionado:

<Device Interface Node>KSCAMERAPROFILE_VideoConferencing,0

Concurrency: REG_SZ:
{ConcurrentDeviceReferenceGUID};{ProfileID},{Index};…

O ConcurrentDeviceRefefenceGUID é o ReferenceGUID do KSFILTER_DESCRIPTOR associado à câmera que este perfil pode executar em simultâneo.

Exemplo 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 um OEM pode publicar (ou substituir as configurações padrão do IHV) para perfis. No exemplo acima, a gravação de vídeo com índice 0 para a câmera frontal é limitada a apenas 720p30 tanto para visualização quanto para gravação, e não há suporte a fotos.

O PhotoSequence da câmara frontal também está desativado (substituindo o perfil publicado pelo IHV).

O perfil HighQualityPhoto é limitado a pré-visualização de 720p com captura única de 1080p ou fotografia de 720p a 5 fps.

O perfil de Videoconferência é limitado a apenas 720p30 para visualização e captura, indicando que pode ser executado simultaneamente com o perfil de Videoconferência da câmera traseira (o perfil de Videoconferência da câmera traseira não é mostrado no INF — se não for especificado no INF, o perfil de Videoconferência da câmera traseira usa o que o IHV publicou ou se não estiver presente, os perfis estão desativados, uma vez que a substituição acima é inválida).

INF vs. API Perfil KS

As informações do perfil INF substituirão sempre as informações do perfil publicadas pela API do KS. A precedência é no nível por perfil.

Se um driver publicar os perfis de VideoRecording, HighQualityPhoto e VideoConferencing usando a API KS, e as configurações INF incluírem entradas de perfil para HighQualityPhoto, apenas o perfil HighQualityPhoto publicado pelo driver será sobrescrito com a informação 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 de 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 existentes do Windows 8.1 simplesmente atualizando seu INF.