Perfiles de cámara

Perfil de API de KS

KsInitializeDeviceProfile

Para publicar los perfiles de dispositivo, todos los controladores de miniport deben inicializar el almacén de perfiles para ello, se debe llamar a la siguiente API de KS:

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

FilterFactory (KSFILTERFACTORY)

Este es el KSFILTERFACTORY creado por el controlador de cámara para identificar de forma única el generador de filtros de la cámara.

Es necesario que el campo ReferenceGuid de la estructura KSFILTER_DESCRIPTOR contenida con KSFILTERFACTORY se establezca con un GUID único para este tipo de filtro. Y el campo Flags del KSFILTER_DESCRIPTOR tiene establecida la bandera KSFILTER_FLAG_PRIORITIZE_REFERENCEGUID.

Si el KSFILTERFACTORY proporcionado no contiene una interfaz de dispositivo asociada a la KSCATEGORY_VIDEO_CAMERA, esta llamada API produce un error con STATUS_INVALID_PARAMETER.

Para eliminar todos los perfiles del almacén de perfiles asociado a la interfaz de dispositivo para este KSFILTERFACTORY, el controlador puede llamar a KsInitializeDeviceProfile seguido inmediatamente por KsPersistDeviceProfile. Esto daría lugar a una información de perfil vacía, que quitaría la información del perfil del almacén de perfiles.

KsPublishDeviceProfile

Para publicar esta información, se presenta la siguiente NUEVA API de KS:

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

Esta API se llama repetidamente para cada perfil que admite el controlador de cámara. Cada llamada puede tener un conjunto diferente de información de intervalos de datos y simultaneidad. El campo ProfileId del KSCAMERA_PROFILE_INFO debe ser único. Si se usa el mismo ProfileId y el contenido de la información del perfil es diferente, la llamada posterior sobrescribe la información de perfil anterior.

FilterFactory (KSFILTERFACTORY)

Este es el mismo FilterFactory usado en la API KsInitializeDeviceProfile.

La información del perfil de cámara solo se asociará a la categoría de interfaz KSCATEGORY_VIDEO_CAMERA. Cualquier generador de filtros creado sin esta categoría de interfaz e intentar registrar un perfil de cámara dará como resultado que esta API devuelva un STATUS_INVALID_PARAMETER.

Perfil (KSDEVICE_PROFILE_INFO)

El KSDEVICE_PROFILE_INFO es una estructura genérica diseñada para controlar la información de perfil de varios 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 el tipo de perfil. Actualmente, el único tipo definido es KSDEVICE_PROFILE_TYPE_Camera.

tamaño

Debe establecerse en la estructura sizeof(KSDEVICE_PROFILE_INFO).

Camera.Info

La estructura de KSCAMERA_PROFILE_INFO que define la información de perfil de una cámara.

Camera.Reserved

Unused. Debe establecerse en 0.

Camera.ConcurrencyCount

Número de estructuras de KSCAMERA_PROFILE_CONCURRENCYINFO en el array de Concurrency. Para el umbral de Windows, debe ser menor o igual que 1.

Un valor de 0 (con Camera.Concurrency establecido en NULL) indica que este perfil no es concurrente.

Camera.Concurrency

Matriz de estructuras de KSCAMERA_PROFILE_CONCURRENCYINFO que describen el soporte de concurrencia para este perfil. Si Camera.CountOfConcurrency es 0, este parámetro debe ser NULL. Si Camera.CountOfConcurrency es >0, este parámetro no debe ser NULL.

KSCAMERA_PROFILE_INFO

La estructura KSCAMERA_PROFILE_INFO se usa para identificar de forma única un perfil determinado:

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 un identificador único para el perfil. Este GUID puede ser un GUID único creado por IHV/OEM que representa un perfil personalizado o puede ser uno de los GUID predefinidos descritos en la sección 3.1.

NOTA: Este campo NO debe establecerse en KSCAMERAPROFILE_Legacy. El controlador de cámara no debe publicar el perfil heredado. El identificador de perfil heredado se envía al controlador de cámara durante la inicialización del motor de captura o captura multimedia si la aplicación no ha indicado que puede admitir perfiles. En tales casos, el controlador de cámara debe revertir su comportamiento al modo de funcionamiento de Windows 8.1 y exponer solo los Tipos de Medios del Conjunto Reducido junto con los bits de capacidad correspondientes KSPROPERTY_CAMERACONTROL_IMAGE_PIN_CAPABILITY_EXCLUSIVE_WITH_RECORD y KSPROPERTY_CAMERACONTROL_IMAGE_PIN_CAPABILITY_SEQUENCE_EXCLUSIVE_WITH_RECORD, que indican si el controlador de cámara es capaz de admitir la grabación/foto simultánea y/o grabación/secuencia de fotos dentro de los Tipos de Medios del Conjunto Reducido.

Índice

Cada perfil dentro de un grupo profileId determinado debe tener un valor de índice único. Esto permite que cualquier perfil de un dispositivo se identifique de forma única con ProfileId + Index.

PinCount

Número de estructuras de KSCAMERA_PROFILE_PININFO a las que apunta Pins. Este valor debe ser >0.

Pines

Matriz de estructuras de KSCAMERA_PROFILE_PININFO que definen los tipos de medios admitidos en cada uno de los pines de este perfil.

Este campo no debe ser NULL.

Simultaneidad (KSCAMERA_PROFILE_CONCURRENCYINFO)

Actualmente, una aplicación no tiene conocimiento sobre si puede intentar transmitir desde más de una cámara hasta que el intento se realice correctamente o no. En el caso del escenario de blogging web, esto significa que la aplicación tiene que intentar activar ambas secuencias antes de renderizar la interfaz de usuario con un elemento de vídeo en imagen en imagen.

El parámetro Concurrency proporciona una sugerencia a la aplicación que las cámaras frontales y traseras se pueden activar al mismo tiempo mediante un perfil específico (o un conjunto de perfiles). Con este conocimiento, la aplicación puede dibujar los elementos de la interfaz de usuario para ambos flujos antes de activarlos.

En el caso de varias aplicaciones, la concurrencia no será suficiente para garantizar la operación simultánea. La información de simultaneidad no intentará resolver este escenario. En su lugar, se aprovechará la característica existente de movimiento de cámara de Windows 8.

El parámetro Concurrency representa una matriz de estructuras KSCAMERA_PROFILE_CONCURRENCYINFO (cuyo tamaño de matriz se especifica mediante el parámetro Camera.CountOfConcurrency) que indica qué perfiles pueden ejecutarse simultáneamente en diferentes cámaras según el perfil identificado en la estructura KSCAMERA_PROFILE_INFO.

Si los campos Camera.CountOfConcurrency y Camera.Concurrency son 0 y NULL respectivamente, indica al sistema operativo que el perfil definido por el KSCAMERA_PROFILE_INFO no es un 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

Debe establecerse en el ReferenceGuid del KSFILTER_DESCRIPTOR que corresponde con el otro dispositivo con el que este perfil es concurrente.

Reservado

Unused. Debe ser 0.

ProfileCount

Número de identificadores de perfil incluidos en la matriz Profiles. Debe ser mayor que 0.

perfiles de

Se trata de una matriz de la KSCAMERA_PROFILE_INFO que se puede usar simultáneamente en el otro dispositivo de cámara especificado por ReferenceGuid.

Este campo no debe ser NULL.

Pines (KSCAMERA_PROFILE_PININFO)

Para especificar la lista disponible de tipos multimedia para cada uno de los pines, se debe especificar una matriz de KSCAMERA_PROFILE_PININFO, cuyo tamaño lo especifica el 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 es la categoría PINNAME correspondiente a captura, vista previa o patilla de imagen still. En el caso del umbral de Windows, las únicas categorías de pines admitidas son: PINNAME_VIDEO_CAPTURE, PINNAME_VIDEO_PREVIEW, PINNAME_VIDEO_STILL. Todas las demás categorías producen un error de STATUS_INVALID_PARAMETER.

Reservado

Unused. Debe ser 0.

MediaInfoCount

Tamaño de matriz de KSCAMERA_PROFILE_MEDIAINFO estructuras especificadas en el campo MediaInfos.

MediaInfo

Matriz de estructuras de KSCAMERA_PROFILE_MEDIAINFO.

MediaInfos (KSCAMERA_PROFILE_MEDIAINFO)

La información de tipo multimedia pertinente presentada para cada perfil se describe mediante:

##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;

Resolución

Tamaño del marco X (horizontal) e Y (vertical) en píxeles.

MaxFrameRate

Relación de número/denom de velocidad de fotogramas (por ejemplo, 30 /1 = 30 fps). Esta velocidad de fotogramas representa la velocidad máxima de fotogramas de la resolución especificada en condiciones de iluminación ideales. La velocidad de fotogramas real puede ser menor que este valor.

Para obtener información de medios fotográficos, si la secuencia de fotos no se puede habilitar debido a restricciones de hardware para la resolución de foto dada, la velocidad de fotogramas debe establecerse en 0 (num=0,denom=0). Esto informa a la capa de aplicación de que el controlador rechazará el control de secuencia de fotos cuando se seleccione ese tipo de medio fotográfico concreto.

marcas de

Puede ser OR bit a bit de una o varias de las marcas siguientes:

  • KSCAMERAPROFILE_FLAGS_VIDEOHDR Cuando se establece la marca HDR de vídeo para la información multimedia, para esa configuración multimedia, el HDR de vídeo se puede habilitar para el flujo de grabación.

    Es posible que esta marca no se establezca para la información multimedia en el pin de foto.

  • KSCAMERAPROFILE_FLAGS_VARIABLEPHOTOSEQUENCE Cuando se establece la marca Variable Photo Sequence para la información multimedia, la compatibilidad con VPS está disponible incluso si la información del medio fotográfico no proporciona una velocidad de fotogramas.

    Si esta marca está establecida y la velocidad de fotogramas es distinta de cero, para esa información multimedia fotográfica, VPS y Secuencia de fotos están disponibles.

    Si esta marca está establecida y la velocidad de fotogramas es cero, para esa información multimedia de fotos, VPS está disponible pero no secuencia de fotos.

    Si esta marca no está establecida y la velocidad de fotogramas no es cero, para esa información de medios fotográficos, el VPS no está disponible, pero la secuencia de fotos sí está disponible.

    Si esta marca no está establecida y la velocidad de fotogramas es cero, ni VPS ni Photo Sequence están disponibles para esa información multimedia.

    Esta marca solo se puede establecer para la información multimedia en el pin de foto. La presencia de esta marca en la información multimedia que no es de pin de fotos da como resultado que se rechace el conjunto de perfiles.

Datos0…3

Valor determinado en función de las marcas. No se utiliza en este momento, debe establecerse en 0.

KsPersistDeviceProfile

Para confirmar la información del perfil en el almacén persistente, se debe invocar la siguiente API de KS.

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

FilterFactory (KSFILTERFACTORY)

Este es el KSFILTERFACTORY que se utilizó para inicializar el almacén de perfiles en KsInitializeDeviceProfile. Si se llama a KsPersistDeviceProfile sin inicializar primero el almacén de perfiles con KsInitializeDeviceProfile, se produce un error en la llamada a KsPersistDeviceProfile con STATUS_INVALID_DEVICE_REQUEST.

Además, esta API también puede producir un error con STATUS_INSUFFICIENT_RESOURCE si la piscina de páginas se agota cuando la información del perfil se está almacenando de forma persistente.

Propiedad de Cámara Extendida de Control de Perfiles

Ámbito: versión 1

Control: Filtro

Tipo: asincrónico, no cancelable

Se introduce un nuevo control de propiedad extendida para permitir que el entorno de captura informe al controlador de cámara sobre el perfil que se seleccionó.

KSCAMERA_EXTENDEDPROP_HEADER

Versión

Definido para la versión 1 del control de propiedades extendidas.

PinId

Debe ser KSCAMERA_EXTENDEDPROP_FILTERSCOPE (0xFFFFFFFF).

Tamaño

Debe ser sizeof(KSCAMERA_EXTENDEDPROP_HEADER) + sizeof(KSCAMERA_EXTENDEDPROP_PROFILE).

Resultado

Indica los resultados del error de la última operación SET. Si no se ha realizado ninguna operación SET, debe ser 0. 0 indica que no se detectaron errores.

Capacidad

Debe ser KSCAMERA_EXTENDEDPROP_CAPS_ASYNCCONTROL. No se admite ningún otro modo.

Flags

Debe ser 0.

KSCAMERA_EXTENDEDPROP_PROFILE

La carga útil del control KSPROPERTY_CAMERACONTROL_EXTENDED_PROFILE incluye el KSCAMERA_EXTENDEDPROP_HEADER y el KSCAMERA_EXTENDEDPROP_PROFILE.

typedef struct _KSCAMERA_EXTENDEDPROP_PROFILE
{
    GUID ProfileId;
    UINT32 Index;
    UINT32 Reserved;
} KSCAMERA_EXTENDEDPROP_PROFILE, *PKSCAMERA_EXTENDEDPROP_PROFILE;

ProfileId

GUID que representa el perfil seleccionado. Si se KSCAMERAPROFILE_Legacy, no se seleccionó ningún perfil, el controlador de cámara debe exponer el tipo de medio de conjunto reducido.

Si este campo es GUID_NULL, no se seleccionó ningún perfil, pero la aplicación es consciente del perfil, por lo que el controlador de cámara debe exponer toda la gama de tipos multimedia.

Índice

Valor de índice asociado al perfil identificado.

reservados

Unused. Debe ser 0.

Perfil INF

Para permitir a los OEM la flexibilidad, en función de diferentes SKU que pueden usar el mismo controlador de referencia pero sensores diferentes (o incluso en el caso de distintos niveles de rendimiento), los perfiles se pueden publicar o invalidar mediante las secciones INF siguientes:

Cada perfil, nuevo o existente, debe tener su valor [GUID de ProfileId, Index] en una cadena delimitada por punto y coma almacenada en el Nodo de Interfaz de Dispositivo.

OEMCameraProfiles: REG_SZ:
KSCAMERAPROFILE_VideoRecording,0;KSCAMERAPROFILE_HighQualityPhoto,0;KSCAMERAPROFILE_BalancedVideoPhoto,0;KSCAMERAPROFILE_VideoConferencing,0;{3074C75C-1D69-4A0A-895D-EB9EFDE1CF30},0

En el ejemplo anterior, reemplazamos el 0º indexado, KSCAMERAPROFILE_VideoRecording, KSCAMERAPROFILE_HighQualityPhoto, KSCAMERAPROFILE_BalancedVideoPhoto y KSCAMERAPROFILE_VideoConferencing junto con un nuevo perfil personalizado con el identificador de {3074C75C-1D69-4A0A-895D-EB9EFDE1CF30}

Para cada GUID de perfil de OEMCameraProfiles, se debe crear una nueva subclave en el nodo de interfaz de dispositivo que coincida con el nombre especificado en la cadena delimitada.

En esta subclave, OEM puede indicar que el perfil se ha deshabilitado (invalidando así la configuración publicada por el controlador) agregando el siguiente valor:

Disabled: REG_DWORD: 0x1

Si, en cambio, el OEM desea cambiar o publicar los tipos de medios disponibles en lugar de simplemente deshabilitar el perfil, se debe crear otra subclave que coincida con el PinCategory de la secuencia.

Por ejemplo, para publicar el pin de vista previa del 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>

El valor del Registro MediaCount indica el número de MediaInfo presente para este pin. Cada MediaInfo debe tener un nombre de entrada del Registro de "Media#" donde \ representa un índice basado en 0 de N count (por ejemplo, Media0, Media1, Media2 ...,MediaN-1).

El MediaInfo especificado por Media0 se tratará como el tipo de medio preferido para el perfil.

El formato MediaInfo anterior toma la sintaxis siguiente:

MediaInfo Format = <ResolutionX>, <ResolutionY>, <MaxFrameRateNum>,<MaxFrameRateDenom>, Flags, Data0, Data1, Data2, Data3

Entonces, lo siguiente:

<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

Se publicará el perfil de VideoRecording desde la configuración del IHV para permitir solo grabación a 1080p, 720p, y 360p (estableciendo 720p como el Tipo de Medio Preferido) al tiempo que solo permite vistas previas a 720p y 360p sin soporte para fotos.

Para definir un perfil personalizado, se puede usar la misma sintaxis, pero con el nombre del perfil que se va a reemplazar por el identificador GUID del 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

La modificación del registro se puede controlar de cualquier manera adecuada para el OEM. El proceso recomendado es crear una sección AddReg en el archivo INF del controlador de cámara para que las entradas del Registro se puedan crear durante la instalación de la cámara (y quitarlas cuando se quite el controlador):

[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 : simultaneidad

Para publicar la configuración de simultaneidad de un perfil, se puede agregar el siguiente valor del Registro:

<Device Interface Node>KSCAMERAPROFILE_VideoConferencing,0

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

El ConcurrentDeviceReferenceGUID es el ReferenceGUID del KSFILTER_DESCRIPTOR asociado a la cámara con la cual este perfil puede ejecutarse simultáneamente.

Ejemplo 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",

En la sección de ejemplo de un INF mostrada anteriormente se muestra cómo un OEM puede publicar (o sobrescribir los ajustes predeterminados de un IHV) para los perfiles. En el ejemplo anterior, la grabación de vídeo indexada en la posición 0 para la cámara frontal está limitada a solo 720p30 tanto para la vista previa como para la grabación, sin soporte para fotos.

La PhotoSequence para la cámara frontal también está deshabilitada (invalidando el perfil publicado de IHV).

El perfil de HighQualityPhoto está limitado a la versión preliminar de 720p con una sola toma de 1080p o foto de 720p a 5 fps.

El perfil de VideoConferencing está limitado a solo 720p30 tanto para la vista previa como para la captura, al mismo tiempo que indica que se puede ejecutar simultáneamente con el perfil de VideoConferencing de la cámara trasera (el perfil de VideoConferencing de la cámara trasera no se muestra en el INF—si no se especifica en el INF, el perfil de VideoConferencing de la cámara trasera utiliza lo que haya publicado el IHV o, si no está presente, los perfiles están desactivados ya que la anulación anterior no es válida).

Perfil de API de INF frente a KS

La información del perfil INF siempre reemplazará la información de perfil publicada por la API de KS. La precedencia es a nivel de perfil individual.

Si un controlador publica los perfiles VideoRecording, HighQualityPhoto y VideoConferencing mediante la API KS, y la configuración de INF contiene las entradas de perfil para HighQualityPhoto, solo el perfil HighQualityPhoto publicado por el controlador se sobrescribirá con la información del perfil de la INF.

Esto se hace con la expectativa de que un único controlador de referencia (implementado por el IHV) pueda publicar un conjunto de perfiles disponibles para un sensor determinado, pero el OEM puede decidir seleccionar un sensor diferente o debido al factor de forma final, puede optar por cambiar o limitar los perfiles disponibles.

El perfil INF también permite que los OEM, sin cambiar el archivo binario del controlador, publiquen perfiles para controladores existentes de Windows 8.1 simplemente actualizando su INF.