AVStream 中的电源和状态更改

当 AVStream 收到 IRP_MN_SET_POWER 请求时,它会调用微型驱动程序的 AVStrMiniDeviceSetPower 回调例程(如果微型驱动程序提供了该例程)。

当 AVStream 收到 KSPROPERTY_CONNECTION_STATE 属性的集请求时,它会调用微型驱动程序的 AVStrMiniPinSetDeviceState 回调例程(如果微型驱动程序提供了该例程)。

当系统从睡眠状态唤醒时,AVStream 可能会按与预期顺序相反的顺序调用微型驱动程序的 AVStrMiniPinSetDeviceStateAVStrMiniDeviceSetPower 回调例程。 例如, AVStrMiniPinSetDeviceState 可以在 AVStrMiniDeviceSetPower 之前调用。

因此, 驱动程序必须准备好处理预期回调顺序的此类反转

当系统进入睡眠状态时,不会发生这种逆转。 关机时,这两个回调例程始终按预期顺序发生。 例如, AVStrMiniPinSetDeviceState 始终在 AVStrMiniDeviceSetPower 之前调用。

如果发生此逆转,则整个序列如下所示:

首先,发生关机顺序:

  1. 调用 AVStrMiniPinSetDeviceState ,请求将设备状态从 KSSTATE_RUN 更改为KSSTATE_PAUSE。

  2. 调用 AVStrMiniDeviceSetPower 时,请求将电源状态从 D0 更改为 D2/D3。

  3. 此时,系统处于睡眠状态。

  4. 接下来,将执行通电顺序:

  5. 调用 AVStrMiniDeviceSetPower 时,请求将电源状态从 D2/D3 更改为 D0。

  6. 调用 AVStrMiniPinSetDeviceState ,请求将设备状态从 KSSTATE_PAUSE 更改为KSSTATE_RUN。

在此方案中,步骤 5 和 6 是与预期顺序相反的步骤。

此外,当应用程序进行流式处理且系统启动关机序列时,正在运行的捕获图始终处于暂停状态。 如果图形已停止,它将保持停止状态。