KSPROPERTY_CAMERACONTROL_PERFRAMESETTING_SET

KSPROPERTY_CAMERACONTROL_PERFRAMESETTING_PROPERTY 中定义的KSPROPERTY_CAMERACONTROL_PERFRAMESETTING_SET属性 ID 用于在驱动程序中设置每帧设置。

使用情况摘要

若要设置每帧设置, KSPROPERTY_CAMERACONTROL_PERFRAMESETTING_SET 属性控件将连同每帧设置有效负载一起发送到驱动程序。

此属性可以读取或写入。 虽然 GET 调用可用于返回驱动程序上设置的最后一个每帧设置,但 GET 调用不会向应用客户端公开,仅在初始化时由 MF 管道构造每帧设置控件时发出,其中驱动程序必须返回缓冲区大小为 0 的STATUS_BUFFER_OVERFLOW

在 GET 调用中,首先将零长度缓冲区发送到驱动程序,以找出所需的数据缓冲区大小,以容纳驱动程序具有的整个每帧设置。 为了响应此调用,驱动程序必须返回STATUS_BUFFER_OVERFLOW,如果尚未设置每帧设置或至少KSCAMERA_PERFRAMESETTING_HEADER大小,则每个帧设置缓冲区大小必须为 0。

每帧设置有效负载必须以 KSCAMERA_PERFRAMESETTING_HEADER开头,后跟一个或多个帧设置。 帧设置的数量在 FrameCount 中指定。 每个帧的设置必须以 KSCAMERA_PERFRAMESETTING_FRAME_HEADER开头,后跟零个或多个项设置。 项设置的数量在 ItemCount 中指定。 每个项的设置(如果有)必须以 KSCAMERA_PERFRAMESETTING_ITEM_HEADER开头。

对于每个项的设置,如果存在值有效负载, 则KSCAMERA_PERFRAMESETTING_ITEM_HEADER 后必须跟 一个KSCAMERA_EXTENDEDPROP_VALUE。 如果存在自定义项, KSCAMERA_PERFRAMESETTING_ITEM_HEADER 后跟 KSCAMERA_PERFRAMESETTING_CUSTOM_ITEM,后跟与 KSCAMERA_PERFRAMESETTING_CUSTOM_ITEM 中指定的 GUID ID 关联的自定义数据。

如果 FrameCount 为 0,驱动程序必须拒绝每帧设置有效负载。 如果 ItemCount 为 0,则不指定任何帧设置。 驱动程序必须将全局设置应用于关联的帧。 例如,FrameCount = 1 且 ItemCount = 0 表示具有全局设置的单帧可变照片序列。

下图演示了每帧设置有效负载配置的数据结构布局。 在下面的示例中,四个帧的每帧设置配置为包含三个项的帧 0,其中两个没有有效负载,一个包含值有效负载;帧 1 包含两个项,一个没有有效负载,另一个包含值有效负载;帧 2 包含 0 项,表示第 2 帧的全局设置;帧 3 包含四个项,一个包含值有效负载,两个项具有自定义项和自定义数据有效负载,一个没有有效负载。

perframesetting-header 的结构。

  1. 每帧设置标头中的大小 表示KSCAMERA_PERFRAMESETTING_HEADER要填充的总有效负载大小 。大小

  2. 每帧设置帧中的大小 表示要填充 KSCAMERA_PERFRAMESETTING_FRAME_HEADER的大小。框架的大小

  3. 项大小 表示要填充 KSCAMERA_PERFRAMESETTING_ITEM_HEADER的大小。项的大小

  4. 自定义项大小 表示要 填充KSCAMERA_PERFRAMESETTING_CUSTOM_ITEM的大小。 自定义项的大小。

每帧设置曝光时间

如果在每帧设置中指定了手动曝光时间, KSCAMERA_EXTENDEDPROP_VALUE。Value.ll 将包含 SET 调用中所需的曝光时间和 GET 调用中使用的当前曝光时间。

每帧设置补偿

如果在每帧设置中指定了手动设置补偿, KSCAMERA_EXTENDEDPROP_VALUE。Value.l 将包含 SET 调用中所需的曝光补偿,以及 GET 调用中使用的当前曝光补偿。

每帧设置焦点

如果在每帧设置中指定了手动每帧设置, KSCAMERA_EXTENDEDPROP_VALUE。Value.ul 将包含 SET 调用中所需的镜头位置和 GET 调用中使用的当前镜头位置。

每帧设置 ISO

如果驱动程序不支持 KSCAMERA_EXTENDEDPROP_ISO_MANUAL,则不包括值有效负载。 否则,每帧设置项标头必须后跟 KSCAMERA_EXTENDEDPROP_VALUE。 在 SET 调用中, KSCAMERA_EXTENDEDPROP_VALUE。 如果 支持并在 KSCAMERA_PERFRAMESETTING_ITEM_HEADER 中指定KSCAMERA_EXTENDEDPROP_ISO_MANUAL,则 Value.ul 包含所需的 ISO 速度 。标志

下面显示了KSCAMERA_EXTNDEDPROP_ISO_AUTO每帧设置 ISO 功能时项标头和值有效负载的外观,KSCAMERA_EXTENDEDPROP_ISO_MANUAL (min = 30,max = 210,步骤 =20) 如下所示:

KSCAMERA_EXTNDEDPROP_ISO_AUTO, 
KSCAMERA_EXTENDEDPROP_ISO_MANUAL (min = 30, max = 210, step =20)
  1. 如果 ISO 速度为 70

    KSCAMERA_PERFRAMESETTING_ITEM_HEADER.Flags = KSCAMERA_EXTENDEDPROP_ISO_MANUAL
    KSCAMERA_EXTENDEDPROP_VALUE.Value.ul = 70
    
  2. 如果 ISO 速度为 50

    KSCAMERA_PERFRAMESETTING_ITEM_HEADER.Flags = KSCAMERA_EXTENDEDPROP_ISO_MANUAL
    KSCAMERA_EXTENDEDPROP_VALUE.Value.ul = 50
    

下表汇总了每帧设置的可用控件和值。 实际可用性由驱动程序的实际功能决定,可以使用 KSPROPERTY_CAMERACONTROL_PERFRAMESETTING_CAPABILITY获取。

名称 可用值

曝光时间

自动或时间(以 100 纳秒为单位)。

Flash

开/关、自动、红眼减少开/关、闪光功率百分比。

曝光补偿

自动或补偿步骤值。

ISO 感光度

具有整数 ISO 值的自动或手动。

焦点

自动或逻辑镜头位置。 此值没有特定单位。

自定义属性

OEM 使用自定义 GUID 和属性数据对此进行定义。

确认图像

打开/关闭

若要将自定义属性数据传递到每帧设置,应用将执行以下操作:

  1. 调用 IFrameSettingsControls 上的 QueryInterface 以获取与每帧设置关联的 IMFGetServices 接口。

  2. 从 IMFGetServices 接口调用 GetService,以在每帧设置上创建自定义 IMFAttributes 接口。

  3. 调用自定义属性 GUID 上的 SetUINT32、SetBlob 等,以在与每帧设置关联的 IMFAttributes 上设置自定义属性数据。

框架将查找自定义 IMFAttributes,以构造自定义项有效负载(如果有)时,在驱动程序上设置每帧设置有效负载。

KSCAMERA_PERFRAMESETTING_HEADER 中的 LoopCount 字段指定每帧设置应应用于照片序列中要捕获的未来帧的重复次数。 例如, LoopCount 由管道 (硬编码为 1,每帧设置将仅应用一次,不会进一步重复) 。 KSCAMERA_PERFRAMESETTING_HEADER 中的 FrameCount 字段指定每帧设置应应用于每个重复中的帧的帧设置数。

KSCAMERA_PERFRAMESETTING_FRAME_HEADER中的 ItemCount 字段指定应应用于相应帧的项设置数。 如果 ItemCount 为 0,则应将全局设置应用于相应的帧。

下表列出了可能的配置和相应的照片序列类型。

LoopCount FrameCount ItemCount 类型

L (L=1)

N (N>0)

S (S>=0)

有限可变照片序列

L (L=1)

1

0

具有全局设置的一帧有限变量照片序列

L (L=1)

0

S

配置无效

可变照片序列已简化,只需执行一次重复的有限捕获。 具有每帧设置的照片序列将始终标记为可变照片序列,并且始终需要每帧设置有效负载。

如果循环计数为 L (L = 1) 且帧计数为 N (N > 0) ,则为有限可变照片序列。 每帧设置将重复 L = 1 次,每次重复时,N 帧设置将应用于下一个 N 个未来帧。

如果循环计数为 L (L = 1) ,则帧计数为 1,项计数为 0,则为具有全局设置的单帧有限可变照片序列。

可进一步简化可变照片序列,以不请求任何过去的帧。 管道会将请求的过去照片计数硬编码, (例如 RequestedHistoryFrames) 为 0。 驱动程序仅提供可变照片序列中的未来帧。 下图演示了驱动程序在可变照片序列中传递的预期帧数。 过去的照片计数在 KSCAMERA_EXTENDEDPROP_PHOTOMODE 中指定 。由 管道硬编码为 0 的扩展属性控件 KSPROPERTY_CAMERACONTROL_EXTENDED_PHOTOMODE RequestedHistoryFrames。

N : Frame Count
L : Loop Count
P : Past Photos Requested
T : Total number of frame delivered by driver
L = 1
P = 0
T = (N * L) + P

对于有限变量照片序列,驱动程序必须标记KSSTREAM_HEADER。具有KSSTREAM_HEADER_OPTIONSF_ENDOFPHOTOSEQUENCE标志的最后一帧的 OptionsFlags。 这样做可确保驱动程序在传递预期的未来帧量后自动停止将帧传递回 MF 管道。 这会有效地停止照片序列,并通知应用客户端照片序列的完成。 当驱动程序完成捕获有限可变照片序列中的最后一帧时,就会发生这种情况。

要求

标头

Ksmedia.h