相机配置文件

KS API 简介

KsInitializeDeviceProfile

若要发布设备配置文件,所有微型端口驱动程序都必须初始化配置文件存储,为此,必须调用以下 KS API:

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

FilterFactory (KSFILTERFACTORY)

这是由相机驱动程序创建的 KSFILTERFACTORY,用于唯一标识相机的滤镜工厂。

为了此筛选器类型,必须为 KSFILTERFACTORY 中包含的 KSFILTER_DESCRIPTOR 结构的 ReferenceGuid 字段设置一个唯一的 GUID。 KSFILTER_DESCRIPTOR 的 Flags 字段设置了 KSFILTER_FLAG_PRIORITIZE_REFERENCEGUID 标志。

如果提供的 KSFILTERFACTORY 不包含与 KSCATEGORY_VIDEO_CAMERA 关联的设备接口,则此 API 调用将失败,并返回 STATUS_INVALID_PARAMETER。

若要从与此 KSFILTERFACTORY 的设备接口关联的配置文件存储区中删除所有配置文件,驱动程序可以调用 KsInitializeDeviceProfile,紧接着可以调用 KsPersistDeviceProfile。 这将导致空的配置文件信息,这将从配置文件存储中删除配置文件信息。

KsPublishDeviceProfile

若要发布此信息,引入了以下新的 KS API:

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

对于相机驱动程序支持的每个配置项,都会重复调用此 API。 每个调用可能具有不同的并发和数据范围信息集。 KSCAMERA_PROFILE_INFO的 ProfileId 字段必须是唯一的。 如果使用相同的 ProfileId 并且配置文件信息的内容不同,则后续调用将覆盖以前的配置文件信息。

FilterFactory (KSFILTERFACTORY)

这是 KsInitializeDeviceProfile API 中使用的同一 FilterFactory。

相机配置文件信息将仅与KSCATEGORY_VIDEO_CAMERA接口类别相关联。 在没有此接口类别的情况下创建的任何筛选器工厂,并且尝试注册相机配置文件将导致此 API 返回STATUS_INVALID_PARAMETER。

配置文件(KSDEVICE_PROFILE_INFO)

KSDEVICE_PROFILE_INFO是一种通用结构,旨在处理各种设备类型的配置文件信息:

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

类型

定义配置文件的类型。 目前,唯一定义的类型是KSDEVICE_PROFILE_TYPE_Camera。

大小

这必须设置为 sizeof(KSDEVICE_PROFILE_INFO) 结构。

Camera.Info

定义相机配置文件信息的KSCAMERA_PROFILE_INFO结构。

Camera.Reserved

Unused. 必须设置为 0。

Camera.ConcurrencyCount

并发数组中 KSCAMERA_PROFILE_CONCURRENCYINFO 结构的数量。 对于 Windows 阈值,此阈值必须小于或等于 1。

值为 0(Camera.Concurrency 设置为 NULL),表示此配置文件是非并发配置文件。

Camera.Concurrency

描述此配置文件的并发支持的KSCAMERA_PROFILE_CONCURRENCYINFO结构的数组。 如果 Camera.CountOfConcurrency 为 0,则此参数必须为 NULL。 如果 Camera.CountOfConcurrency 为 >0,则此参数不得为 NULL。

KSCAMERA_PROFILE_INFO

KSCAMERA_PROFILE_INFO结构用于唯一标识给定的配置文件:

typedef struct _KSCAMERA_PROFILE_INFO
{
    UINT32 ProfileId;
    UINT32 Index;
    UINT32 PinCount;
    PKSCAMERA_PROFILE_PININFO Pins
} KSCAMERA_PROFILE_INFO, *PKSCAMERA_PROFILE_INFO;

ProfileId

表示配置文件的唯一 ID 的 GUID。 此 GUID 可能是表示自定义配置文件的唯一 IHV/OEM 创建的 GUID,也可能是第 3.1 节中所述的预定义 GUID 之一。

注意:此字段不得设置为KSCAMERAPROFILE_Legacy。 旧版配置文件不得由相机驱动程序发布。 如果应用程序未声明它可以支持配置文件,则在捕获引擎/媒体捕获初始化期间,将旧版配置文件 ID 发送到相机驱动程序。 在这种情况下,相机驱动程序必须将其行为还原为 Windows 8.1 作模式,并仅公开缩减的媒体类型集以及相应的 KSPROPERTY_CAMERACONTROL_IMAGE_PIN_CAPABILITY_EXCLUSIVE_WITH_RECORD 和 KSPROPERTY_CAMERACONTROL_IMAGE_PIN_CAPABILITY_SEQUENCE_EXCLUSIVE_WITH_RECORD 功能比特,指示相机驱动程序是否能够支持缩减的媒体类型集中的同时录制/照片和/或录制/照片序列。

指数

给定 ProfileId 组中的每个配置文件必须具有唯一的索引值。 这样,设备的任何配置文件都可以使用 ProfileId + Index 进行唯一标识。

PinCount

Pins指向的KSCAMERA_PROFILE_PININFO结构体的数量。 此值必须为 >0。

引脚

KSCAMERA_PROFILE_PININFO结构数组,用于定义此配置文件中各个引脚上支持的媒体类型。

此字段不得为 NULL。

并发(KSCAMERA_PROFILE_CONCURRENCYINFO)

目前,应用程序不知道它是否可以尝试从多个相机流式传输,直到尝试成功或失败。 对于 Web 博客场景,这意味着应用程序必须尝试同时激活两个流,然后才能使用画中画视频元素渲染界面。

并发参数向应用程序提供提示,即可以使用特定配置文件(或配置文件集)同时激活前摄像头和后部相机。 通过此知识,应用程序可以在激活两个流之前为这两个流绘制 UI 元素。

对于多个应用程序,仅依靠并发不足以保证同时操作。 并发信息不会尝试解决这种情况。 相反,将利用 Windows 8 的现有摄像头快速切换功能。

并发参数表示一个KSCAMERA_PROFILE_CONCURRENCYINFO结构(其数组大小由 Camera.CountOfConcurrency 参数指定)的数组,指示KSCAMERA_PROFILE_INFO结构中标识的配置文件可以在不同的相机上同时运行。

如果 Camera.CountOfConcurrency 和 Camera.Concurrency 字段分别为 0 和 NULL,则它向 OS 指示由KSCAMERA_PROFILE_INFO定义的配置文件不是并发配置文件。

typedef struct _KSCAMERA_PROFILE_CONCURRENCYINFO
{
    GUID ReferenceGuid;
    UINT32 Reserved;
    UINT32 ProfileCount;
    PKSCAMERA_PROFILE_INFO Profiles;
} KSCAMERA_PROFILE_CONCURRENCYINFO,*PKSCAMERA_PROFILE_CONCURRENCYINFO;

ReferenceGuid

必须将其设置为与此配置文件同时运行的其他设备相对应的 KSFILTER_DESCRIPTOR 的 ReferenceGuid。

保留

Unused. 必须为 0。

ProfileCount

配置文件数组中包含的配置文件 ID 数。 必须大于 0。

配置文件

这是可在 ReferenceGuid 指定的其他相机设备上同时使用的KSCAMERA_PROFILE_INFO数组。

此字段不得为 NULL。

引脚 (KSCAMERA_PROFILE_PININFO)

若要为每个引脚指定媒体类型的可用列表,必须指定KSCAMERA_PROFILE_PININFO数组,其数组大小由 CountOfPins 参数指定。

typedef struct _KSCAMERA_PROFILE_PININFO
{
    GUID PinCategory;
    UINT32 Reserved;
    UINT32 MediaInfoCount;
    PKSCAMERA_PROFILE_MEDIAINFO MediaInfos;
} KSCAMERA_PROFILE_PININFO, *PKSCAMERA_PROFILE_PININFO;

PinCategory

这是对应于“捕获”、“预览”或“静止图像”固定的 PINNAME 类别。 对于 Windows 阈值,唯一支持的引脚类别是:PINNAME_VIDEO_CAPTURE、PINNAME_VIDEO_PREVIEW、PINNAME_VIDEO_STILL。 所有其他类别都会导致STATUS_INVALID_PARAMETER错误。

保留

Unused. 必须为 0。

MediaInfoCount

MediaInfos 字段中指定的KSCAMERA_PROFILE_MEDIAINFO结构的数组大小。

MediaInfo

KSCAMERA_PROFILE_MEDIAINFO结构的数组。

MediaInfos(KSCAMERA_PROFILE_MEDIAINFO)

每个配置文件提供的相关媒体类型信息如下所述:

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

分辨率

X(水平)和 Y(垂直)帧大小(以像素为单位)。

MaxFrameRate

帧速率的 num/denom 比率(例如 30 / 1 = 30 fps)。 此帧速率表示理想照明条件下指定分辨率的最大帧速率。 实际帧速率可能低于此值。

对于照片媒体信息,如果由于给定照片分辨率的硬件限制而无法启用照片序列,则帧速率必须设置为 0(num=0,denom=0)。 当选择该特定照片媒体类型时,这会通知应用层驱动程序将拒绝照片序列控制。

标志

可以是以下一个或多个标志的按位 OR:

  • KSCAMERAPROFILE_FLAGS_VIDEOHDR 当为媒体信息设置视频 HDR 标志时,对于该媒体设置,录制流可能会启用视频 HDR。

    无法为照片图钉上的媒体信息设置此标志。

  • KSCAMERAPROFILE_FLAGS_VARIABLEPHOTOSEQUENCE 为媒体信息设置可变照片序列标志时,即使照片媒体信息不提供帧速率,VPS 支持也可用。

    如果设置此标志并且帧速率为非零,则对于该照片媒体信息,VPS 和照片序列可用。

    如果设置了此标志且帧速率为零,则对于该照片媒体信息,VPS 可用,但照片序列不可用。

    如果未设置此标志并且帧速率为非零,则对于该照片媒体信息,VPS 不可用,但照片序列可用。

    如果未设置此标志并且帧速率为零,则 VPS 和照片序列都不能用于该媒体信息。

    只能为照片图钉上的媒体信息设置此标志。 在非照片引脚媒体信息上存在此标志将导致配置文件集被拒绝。

Data0...3

根据标志确定的值。 目前未使用,必须设置为 0。

KsPersistDeviceProfile

若要将配置文件信息提交到持久性存储区,必须调用以下 KS API。

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

FilterFactory (KSFILTERFACTORY)

这是在 KsInitializeDeviceProfile 中用于初始化配置文件存储的 KSFILTERFACTORY。 如果在使用 KsInitializeDeviceProfile 初始化配置文件存储之前调用了 KsPersistDeviceProfile,那么 KsPersistDeviceProfile 的调用将失败,并返回错误 STATUS_INVALID_DEVICE_REQUEST。

此外,如果页面池在保存配置文件信息时耗尽,则此 API 也可能会因STATUS_INSUFFICIENT_RESOURCE而失败。

KSPROPERTY_CAMERACONTROL_EXTENDED_PROFILE

范围:版本 1

控件:筛选器

类型:异步、不可取消

引入了一种新的扩展属性控件,以便捕获框架能够将所选的配置文件告知相机驱动程序。

KSCAMERA_EXTENDEDPROP_HEADER

版本

为扩展属性控制版本 1 定义。

PinId

必须是 KSCAMERA_EXTENDEDPROP_FILTERSCOPE (0xFFFFFFFF)。

大小

必须是 sizeof(KSCAMERA_EXTENDEDPROP_HEADER) + sizeof(KSCAMERA_EXTENDEDPROP_PROFILE)

结果

显示上一次 SET 操作的错误结果。 如果未执行 SET作,则必须为 0。 0 表示未检测到任何错误。

能力

必须是 KSCAMERA_EXTENDEDPROP_CAPS_ASYNCCONTROL。 不支持其他模式。

Flags

必须为 0。

KSCAMERA_EXTENDEDPROP_PROFILE

KSPROPERTY_CAMERACONTROL_EXTENDED_PROFILE控件的有效负载包含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。 如果这是KSCAMERAPROFILE_Legacy,则未选择配置文件,相机驱动程序必须公开缩减集媒体类型。

如果此字段GUID_NULL,则未选择配置文件,但应用程序可识别配置文件,因此相机驱动程序必须公开各种媒体类型。

索引

与标识的配置文件关联的索引值。

保留

Unused. 必须为 0。

INF 配置文件

为了向 OEM 提供灵活性,针对不同的 SKU,这些 SKU 可能使用相同的参考驱动程序但配有不同的传感器(甚至在性能级别不同的情况下),可以使用以下 INF 部分来发布或覆盖配置文件:

每个配置文件(无论是新配置文件还是现有配置文件)都必须在存储于设备接口节点下的分号分隔字符串中包含其 [ProfileId GUID, Index] 值。

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

在上面的示例中,我们将重写第 0 个 索引、KSCAMERAPROFILE_VideoRecording、KSCAMERAPROFILE_HighQualityPhoto、KSCAMERAPROFILE_BalancedVideoPhoto和KSCAMERAPROFILE_VideoConferencing,以及 ID 为 {3074C75C-1D69-4A0A-895D-EB9EFDE1CF30} 的新自定义配置文件

对于 OEMCameraProfiles 中的每个配置文件 GUID,必须在与分隔字符串中指定的名称匹配的设备接口节点中创建一个新的子项。

在此子项下,OEM 可能通过添加以下值来指示配置文件已被禁用(从而重写驱动程序发布的设置):

Disabled: REG_DWORD: 0x1

如果 OEM 希望更改或发布可用的媒体类型,而不是只禁用配置文件,则必须创建与流的 PinCategory 匹配的另一个子项。

例如,若要发布第 0 个 索引的预览图钉,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>

MediaCount 注册表值指示此端口中存在的 MediaInfo 数量。 必须为每个 MediaInfo 提供“Media#”的注册表项名称,其中 \ 表示基于 N 计数的 0 索引(例如 Media0、Media1、Media2 ...、MediaN-1)。

Media0 指定的 MediaInfo 将被视为配置文件的首选媒体类型。

上述 MediaInfo 格式采用以下语法:

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

因此,请执行以下步骤:

<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

将从 IHV 设置中发布的视频录制配置文件,以便仅支持 1080p、720p 和 360p 录制(其中 720p 为首选媒体类型),同时仅支持 720p 和 360p 预览,并且不提供照片支持。

若要定义自定义配置文件,可以使用相同的语法,但配置文件名称将替换为自定义配置文件的 GUID ID:

<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

可以采用适用于 OEM 的任何方式处理对注册表的修改。 建议的过程是创建相机驱动程序 INF 文件的 AddReg 部分,以便可以在相机安装期间创建注册表项(并在删除驱动程序时删除):

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

INF 配置文件:并发

若要发布配置文件的并发设置,可以添加以下注册表值:

<Device Interface Node>KSCAMERAPROFILE_VideoConferencing,0

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

ConcurrentDeviceReferenceGUID 是 KSFILTER_DESCRIPTOR 的 ReferenceGUID,该描述符与此配置文件可以并发运行的相机关联。

示例 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",

上述 INF 的示例部分显示了 OEM 如何发布(或替代默认的 IHV)配置文件设置。 在上面的示例中,前置摄像头的索引为 0 的视频录制功能限制为仅支持 720p30 分辨率,用于预览和录制,并且不支持拍照。

还禁用了前置摄像头的 PhotoSequence(覆盖 IHV 已发布的配置文件)。

HighQualityPhoto 模式限制为 720p 预览,1080p 单拍或 720p 照片(以 5 fps 连拍)。

VideoConferencing 配置文件的预览和捕获分辨率仅限于 720p30,同时,它表明可以与后置摄像头的 VideoConferencing 配置文件同时运行(后置摄像头的 VideoConferencing 配置文件未在 INF 中显示——如果未在 INF 中指定,后置摄像头的 VideoConferencing 配置文件将使用 IHV 发布的版本。如果该版本不存在,由于前述无效的覆盖操作,配置文件将被禁用)。

INF 与 KS API 概要

INF 配置文件信息将始终取代 KS API 发布的配置文件信息。 优先级在每个配置文件级别。

如果驱动程序通过 KS API 和 INF 设置发布了 VideoRecording、HighQualityPhoto、VideoConferencing 等配置文件,并且 INF 设置中包含 HighQualityPhoto 的配置文件条目,那么只有驱动程序发布的 HighQualityPhoto 配置文件将被 INF 中的配置文件信息覆盖。

这样做是因为预期单个引用驱动程序(由 IHV 实现)可能会发布一组可用于给定传感器的配置文件,但 OEM 可能会决定选择不同的传感器和/或由于最终外形规格,可以选择更改/限制可用配置文件。

INF 配置文件还允许 OEM 在不更改驱动程序二进制文件的情况下,只需更新其 INF 即可发布现有 Windows 8.1 驱动程序的配置文件。