共用方式為


隱私權快門取代影像

本文說明如何為支援快門狀態報告的相機啟用影像取代。 它也會說明如何提供自定義取代映像。

相機 在此功能實作之前具有隱私權快門/開關的驅動程式,提供來自相機感測器的樣本,或必須實作專屬功能來偵測快門狀態並取代樣本本身。 這項功能可讓相機驅動程式依賴OS,將範例中的影像取代為作業系統提供的解決方案,或相機驅動程式提供的自定義映像。

從 Windows 11 版本 21H2 開始,Windows 硬體相容性計劃 (WHCP) 需要具有隱私權快門或終止切換的相機來報告相機快門狀態。 這項需求可讓操作系統和應用程式知道快門的目前狀態,並用來提供如何變更快門狀態的實用使用者指引。 OEM 合作夥伴會使用此機制將功能建置至其驅動程式,以向使用者提供資訊的東西來取代來自相機的影像。 這項功能可讓 OEM 利用這項相同的功能,而不需要在 DeviceMFT 內撰寫專屬程式代碼。

需求

此功能僅由具有隱私權快門/終止開關的相機實作。 隱私權快門的實作詳細數據, 請參閱隱私權快門/切換通知 一文。

想要支援映像取代自定義映像的裝置也必須提供已簽署的二進位檔,其驅動程式套件中包含其取代映像的一部分。

實作概觀

當裝置傳送關閉裝置的快門通知時,就會發生影像取代。 如果關閉快門狀態並啟用影像取代,相機管線會從相機驅動程式提供的自定義影像或使用此處顯示的收件匣取代影像載入取代影像。

收件匣取代影像。

載入時,管線會將影像轉譯成輸出緩衝區,該緩衝區符合相機驅動程式目前選取之媒體類型的相同解析度和媒體類型。 如果解析度不同,影像會相應增加或縮小,但不會延展到其現有的外觀比例之外。

從這一點開始,在快門狀態變更為開啟之前,相機驅動程式所提供的所有樣本都會將其元數據和範例屬性複製到新的範例,並捨棄其媒體緩衝區。 新的媒體緩衝區是從翻譯的快門圖像複製,並改用。 然後,這個新的範例會透過管線傳送,就好像是原始範例一樣。

媒體緩衝區快門圖像。

實作指南

若要啟用影像取代,必須將下列登錄專案新增至相機的裝置介面節點,並將值設定為 1。

Regkey 類型 Regkey 名稱 Regkey 值
REG_DWORD EnableImageReplacement 0x1

針對驅動程式 INF,您可以新增此專案,如下所示。

...

[Device.AddReg]
HKR,,EnableImageReplacement,%REG_DWORD%,1

...

[Strings]
REG_DWORD=0x00010001

針對 MS-OS 描述元,這可以新增為下列名稱:

UVC-EnableImageReplacement

自訂映像

針對自定義映像取代,驅動程式必須提供下列專案:

  1. 一或多個格式為 BMP 類型的 ARGB32 影像檔,大小為 1000 x 1000 像素。 在此範例中,它是 “TestImage.bmp”。

  2. 資源 DLL,其中包含作為資源的圖像檔。 在此範例中,它會SampleSocMFT.dll。

驅動程式提供的映像檔必須是 1000 x 1000 像素的 ARGB32 影像。 這會取代實作概觀中顯示的影像。 範例的所有其他變更都會如所述發生,只有要取代的映像是驅動程式的自定義。 資源 DLL 必須是驅動程式套件的一部分,而且必須簽署。 對於大部分的裝置,這表示將其放在驅動程式 DeviceMFT 中。

若要將圖像檔新增至資源 DLL,請使用下列範例修改專案的資源檔 *.rc。

#ifdef ID_REPLACEMENT_IMAGE
#define ID_REPLACEMENT_IMAGE    200
#endif

ID_REPLACEMENT_IMAGE     RCDATA    "TestImage.bmp"

下一個步驟是修改驅動程式 INF。 如果使用的資源 DLL 是新的,它必須是 CopyFiles 指示詞的一部分。 最後,必須新增三個額外的 AddReg 指示詞。

[SourceDisksFiles]
AvsCameraSim.sys=1
SampleSocMFT.dll=1

[DestinationDir]
AvsCameraSim.CopySys=13
AvsCameraSim.CopyDMFT=13

[AvsCameraSim.CopySys]
AvsCameraSim.sys

[AvsCameraSim.CopyDMFT]
SampleSocMFT.dll

[AvsCameraSim]
Include=ks.inf, kscaptur.inf
Needs=KS.registration, KSCaptur.Registration.NT
CopyFiles=AvsCameraSim.CopySys, AvsCameraSim.CopyDMFT
AddReg=AvsCameraSim.AddReg

[AvsCameraSim.AddReg]
HKR,,CameraImageResource,,%13%\%DMFT.NAME%
HKR,,CameraImageResourceID,%REG_DWORD%,%ResourceID%
HKR,,EnableImageReplacement,%REG_DWORD%,1

[Strings]
DMFT.Name="SampleSocMFT.dll"
REG_DWORD=0x00010001

;localizable
ResourceID=200

...

必須比對資源的 INF ResourceID 和ID_REPLACEMENT_IMAGE標識碼。 您可以調整這些值,讓單一資源 DLL 可以包含多個資源識別碼和多個映像,而且 INF 可以當地語系化以選取正確的資源識別碼。

自定義影像框線

對於在信箱發生時不想要黑色框線的自定義影像,他們可以透過自定義取代範例框線色彩的登錄來指定 MFARGB 結構。

Regkey 類型 Regkey 名稱 Regkey 值
REG_BINARY 相機 ImageBackgroundColor 0x1

針對驅動程式 INF,可以新增它,如下所示:

...

[Device.AddReg]
HKR,,CameraImageBackgroundColor,%REG_ BINARY%,00,00,00,FF

[Strings]
REG_BINARY=0x00000001