擷取統計資料中繼資料屬性
下表摘要說明 MFT0 MFSampleExtension_CaptureMetaData 中繼資料屬性包的可用擷取統計資料 IMFAttributes,以供預覽、視訊和仍然擷取。
除非另有指示,否則針對所擷取的每個相片,仍然必須列出擷取統計資料。 針對預覽和視訊列出的擷取統計資料應該以最佳方式傳遞,驅動程式可能會或可能不會根據可用性和效能考慮,在所有畫面上提供所有擷取統計資料。
名稱 | 類型 | Pin | 描述 |
---|---|---|---|
MF_CAPTURE_METADATA_FOCUSSTATE | UINT32 | 預覽 | 此屬性包含目前的焦點狀態,可接受下列其中一個值。 |
MF_CAPTURE_METADATA_SENSORFRAMERATE | UINT64 | 預覽 | 此屬性包含擷取預覽畫面時的測量感應器讀出速率,其中包含上層 32 位中的微調值,以及下層 32 位中的分母值。 |
MF_CAPTURE_METADATA_FACEROIS | Blob | 預覽,影片 | 此屬性包含驅動程式偵測到的臉部矩形資訊。 |
MF_CAPTURE_METADATA_FACEROITIMESTAMPS | Blob | 預覽,影片 | 此屬性包含 MF_CAPTURE_METADATA_FACEROIS中所識別臉部 RO 的時間戳記資訊。 |
MF_CAPTURE_METADATA_FACEROICHARACTERIZATIONS | Blob | 預覽,影片 | 此屬性包含 MF_CAPTURE_METADATA_FACEROIS中所識別臉部 RO 的閃爍和/或臉部運算式狀態。 |
MF_CAPTURE_METADATA_EXPOSURE_TIME | UINT64 | 預覽,仍然 | 此屬性包含 100 奈秒所套用的曝光時間 |
MF_CAPTURE_METADATA_EXPOSURE_COMPENSATION | Blob | 預覽,仍然 | 此屬性包含 EV 補償步驟旗標和 EV 補償值,以擷取相片時套用至驅動程式的步驟單位。 |
MF_CAPTURE_METADATA_ISO_SPEED | UINT32 | 預覽,仍然 | 此屬性包含套用為整數的 ISO 速度值。 |
MF_CAPTURE_METADATA_LENS_POSITION | UINT32 | 預覽,仍然 | 此屬性包含焦點套用至擷取相片時的邏輯鏡頭位置。 這個值沒有特定的單位。 |
MF_CAPTURE_METADATA_SCENE_MODE | UINT64 | 還 | 此屬性包含套用為 UINT64KSCAMERA_EXTENDEDPROP_SCENEMODE_XXX 旗標的場景模式。 |
MF_CAPTURE_METADATA_FLASH | UINT32 (布林值) | 預覽,仍然 | 此屬性包含包含快閃狀態的布林值。 值為 1 指定快閃開啟,而值為 0,指定擷取相片的閃爍已關閉。 |
MF_CAPTURE_METADATA_FLASH_POWER | UINT32 | 還 | [選擇性]此屬性包含套用為介於 0 到 100 之間的百分比值的快閃電源。 |
MF_CAPTURE_METADATA_WHITEBALANCE | UINT32 (Kelvin) | 預覽,仍然 | 此屬性包含以 Kelvin 值的形式套用的白平衡。 |
MF_CAPTURE_METADATA_ZOOMFACTOR | UINT32 (Q16) | 還 | 這個屬性包含套用的縮放值,而且與可從 GET 呼叫中的 KSPROPERTY_CAMERACONTROL_EXTENDED_ZOOM 查詢的相同值。 此值必須在 Q16 中。 |
MF_CAPTURE_METADATA_EXIF | Blob | 還 | [選擇性]此屬性包含如 Blob 定義區段中所指定的 EXIF 中繼資料 |
MF_CAPTURE_METADATA_REQUESTED_FRAME_SETTING_ID | UINT32 | 還 | [選擇性]這個屬性包含可變相片序列中對應畫面的畫面識別碼。 此屬性只會針對可變相片序列擷取進行設定。 |
MF_CAPTURE_METADATA_ISO_GAINS | Blob | 預覽 | 這個屬性包含擷取預覽畫面時套用至 Senor 的類比和數位增益。 這是無單位的。 |
MF_CAPTURE_METADATA_WHITEBALANCE_GAINS | Blob | 預覽 | 此屬性包含擷取預覽畫面時套用至 R、G、B、感應器和\或 ISP 的白平衡增益。 這是無單位的。 |
MF_CAPTURE_METADATA_HISTOGRAM | Blob | 預覽 | 此屬性包含擷取預覽畫面時長條圖。 |
MF_CAPTURE_METADATA_FRAME_ILLUMINATION | UINT64 | 用於 Hello 的 IR 針腳 | IR 相機的這個屬性會指定畫面是否使用作用中的 IR 光線,而且應該與 FACEAUTH_MODE_ALTERNATIVE_FRAME_ILLUMINATION搭配使用。 |
任何自訂 GUID | 任何變體類型 | 此屬性包含與自訂 GUID 相關聯的自訂資料 |
MF_CAPTURE_METADATA_FOCUSSTATE
MF_CAPTURE_METADATA_FOCUSSTATE屬性包含目前的焦點狀態,可以採用下列其中一個值。
typedef enum
{
KSCAMERA_EXTENDEDPROP_FOCUSSTATE_UNINITIALIZED = 0,
KSCAMERA_EXTENDEDPROP_FOCUSSTATE_LOST,
KSCAMERA_EXTENDEDPROP_FOCUSSTATE_SEARCHING,
KSCAMERA_EXTENDEDPROP_FOCUSSTATE_FOCUSED,
KSCAMERA_EXTENDEDPROP_FOCUSSTATE_FAILED,
} KSCAMERA_EXTENDEDPROP_FOCUSSTATE;
MF_CAPTURE_METADATA_SENSORFRAMERATE
MF_CAPTURE_METADATA_SENSORFRAMERATE屬性包含擷取預覽畫面時的測量感應器讀出速率,其中包含上層 32 位中的分子值,以及下層 32 位的分母值。
MF_CAPTURE_METADATA_FACEROIS
MF_CAPTURE_METADATA_FACEROIS屬性包含驅動程式偵測到的臉部矩形資訊。 根據預設,驅動程式\MFT0 應該會在預覽串流上提供臉部資訊。 如果驅動程式在其他串流上公告功能,如果應用程式在這些串流上啟用臉部偵測,driver\MFT 必須提供對應資料流程上的臉部資訊。 在驅動程式上啟用防震視訊時,應該在影片防震後提供臉部資訊。 下列資料結構描述MF_CAPTURE_METADATA_FACEROIS的 Blob 格式。 主要臉部必須是 Blob 中的第一個 FaceRectInfo。
typedef struct tagFaceRectInfoBlobHeader
{
ULONG Size; // Size of this header + all FaceRectInfo following
ULONG Count; // Number of FaceRectInfo’s in the blob
} FaceRectInfoBlobHeader;
typedef struct tagFaceRectInfo
{
RECT Region; // Relative coordinates on the frame that face detection is running (Q31 format)
LONG ConfidenceLevel; // Confidence level of the region being a face ([0, 100])
} FaceRectInfo;
請注意,FaceRectinfoBlobHeader 和 FaceRectInfo 結構只會描述 MF_CAPTURE_METADATA_FACEROIS 屬性的 Blob 格式。 臉部 RO 的中繼資料專案結構 (KSCAMERA_METADATA_ITEMHEADER + 臉部 ROIs 中繼資料承載) 為驅動程式,且必須對齊 8 位元組。
根據設計,如果串流設定了啟用臉部偵測,且有問題的場景在擷取期間不包含任何臉部,則驅動程式仍然需要將「虛擬」MF_CAPTURE_METADATA_FACEROIS屬性附加至每個樣本,而該樣本沒有相關聯的臉部資訊。 (「dummy」 臉部 ROI 屬性的FaceRectInfoBlobHeader結構的Count欄位設定為零。)
MF_CAPTURE_METADATA_FACEROITIMESTAMPS
MF_CAPTURE_METADATA_FACEROITIMESTAMPS屬性包含MF_CAPTURE_METADATA_FACEROIS中所識別臉部 RO 的時間戳記資訊。 對於無法提供臉部 RO 時間戳記的裝置,應該省略此屬性。
下列資料結構描述MF_CAPTURE_METADATA_FACEROITIMESTAMPS的 Blob 格式。
typedef struct tagMetadataTimeStamps
{
ULONG Flags; // Bitwise OR of MF_METADATATIMESTAMPS_XXX flags
LONGLONG Device; // QPC time for the sample where the face rect is derived from (in 100ns)
LONGLONG Presentation; // PTS for the sample where the face rect is derived from (in 100ns)
} MetadataTimeStamps;
針對 [旗標] 欄位,我們將定義下列位旗標,以指出時間戳記有效。 如果驅動程式提供臉部 ROI 的時間戳記中繼資料,MFT0 必須將 Flags 設定為 MF_METADATATIEMSTAMPS_DEVICE 和適當的 QPC 時間。
#define MF_METADATATIMESTAMPS_DEVICE 0x00000001
#define MF_METADATATIMESTAMPS_PRESENTATION 0x00000002
請注意,MetadataTimeStamps 結構只會描述 MF_CAPTURE_METADATA_FACEROITIMESTAMPS 屬性的 Blob 格式。 時間戳記 (KSCAMERA_METADATA_ITEMHEADER + 時間戳記中繼資料承載的中繼資料專案結構) 為驅動程式,且必須對齊 8 位元組。
MF_CAPTURE_METADATA_FACEROICHARACTERIZATIONS
MF_CAPTURE_METADATA_FACEROICHARACTERIZATIONS屬性包含MF_CAPTURE_METADATA_FACEROIS中所識別臉部 RO 的閃爍和/或臉部運算式狀態。 對於不支援閃爍和\或臉部運算式偵測的裝置,應該省略此屬性。
下列資料結構描述MF_CAPTURE_METADATA_FACEROICHARACTERIZATIONS的 Blob 格式。
請注意,FaceBlobHeader 和 FaceEction 結構只會描述 MF_CAPTURE_METADATA_FACEROICHARACTERIZATIONS 屬性的 Blob 格式。 臉部特徵的中繼資料專案結構 (KSCAMERA_METADATA_ITEMHEADER + 臉部檢測中繼資料承載) 最多為驅動程式,且必須對齊 8 位元組。
typedef struct tagFaceCharacterizationBlobHeader
{
ULONG Size; // Size of this header + all FaceCharacterization following
ULONG Count; // Number of FaceCharacterization’s in the blob. Must match the number of FaceRectInfo’s in FaceRectInfoBlobHeader
} FaceCharacterizationBlobHeader;
typedef struct tagFaceCharacterization
{
ULONG BlinkScoreLeft; // [0, 100]. 0 indicates no blink for the left eye. 100 indicates definite blink for the left eye
ULONG BlinkScoreRight; // [0, 100]. 0 indicates no blink for the right eye. 100 indicates definite blink for the right eye
ULONG FacialExpression; // Any one of the MF_METADATAFACIALEXPRESSION_XXX defined
ULONG FacialExpressionScore; // [0, 100]. 0 indicates no such facial expression as identified. 100 indicates definite such facial expression as defined
} FaceCharacterization;
下列定義可以偵測到的可能臉部運算式。
#define MF_METADATAFACIALEXPRESSION_SMILE 0x00000001
如果MF_CAPTURE_METADATA_FACEROICHARACTERIZATIONS屬性存在,則其 Blob 中 FaceFace 專案的數目和順序必須符合MF_CAPTURE_METADATA_FACEROIS blob 中 FaceRectInfo 專案的數目和順序。 每個Face 專案都代表相同索引之對應 FaceRectInfo 專案中臉部的閃爍和/或臉部運算式狀態。
下圖說明臉部特徵 Blob 的版面配置,以及四個臉部的 RI Blob,其中第一個臉部既不閃爍也不笑臉、第二個閃爍左眼、第三個笑臉,第四個則兩者都會閃爍 (兩個眼睛) 和笑臉。
MF_CAPTURE_METADATA_EXPOSURE_TIME
MF_CAPTURE_METADATA_EXPOSURE_TIME屬性包含擷取預覽和\或相片框架時套用至感應器的曝光時間,這是 UINT64 且在 100ns 中。
MF_CAPTURE_METADATA_EXPOSURE_COMPENSATION
MF_CAPTURE_METADATA_EXPOSURE_COMPENSATION屬性包含 EV 補償步驟旗標和 EV 補償值,以擷取預覽和或相片框架時套用至感應器的步驟單位。
下列資料結構描述MF_CAPTURE_METADATA_EXPOSURE_COMPENSATION的 Blob 格式。
typedef struct tagCapturedMetadataExposureCompensation
{
UINT64 Flags; // KSCAMERA_EXTENDEDPROP_EVCOMP_XXX step flag
INT32 Value; // EV Compensation value in units of the step
} CapturedMetadataExposureCompensation;
請注意,CapturedMetadataExposureCompensation 結構只會描述 MF_CAPTURE_METADATA_EXPOSURE_COMPENSATION 屬性的 Blob 格式。 EV 補償 (KSCAMERA_METADATA_ITEMHEADER + EV 補償中繼資料承載) 的中繼資料專案結構為驅動程式,且必須對齊 8 位元組。
MF_CAPTURE_METADATA_ISO_SPEED
MF_CAPTURE_METADATA_ISO_SPEED屬性包含擷取預覽和或相片框架時套用至感應器的 ISO 速度值。 這是無單位的。
MF_CAPTURE_METADATA_ISO_GAINS
MF_CAPTURE_METADATA_ISO_GAINS屬性包含擷取預覽畫面時套用至敏感元的類比和數位增益。 這是無單位的。
下列資料結構描述MF_CAPTURE_METADATA_ISO_GAINS的 Blob 格式。
typedef struct tagCapturedMetadataISOGains
{
FLOAT AnalogGain;
FLOAT DigitalGain;
} CapturedMetadataISOGains;
請注意,CapturedMetadataISOGains 結構只會描述 MF_CAPTURE_METADATA_ISO_GAINS 屬性的 Blob 格式。 ISO 取得的中繼資料專案結構 (KSCAMERA_METADATA_ITEMHEADER + ISO 取得中繼資料承載) 為驅動程式,且必須對齊 8 位元組。
MF_CAPTURE_METADATA_LENS_POSITION
MF_CAPTURE_METADATA_LENS_POSITION屬性包含擷取預覽和\或相片框架時的邏輯鏡頭位置,這是無單位的。 這是可從 GET 呼叫中KSPROPERTY_CAMERACONTROL_EXTENDED_FOCUS查詢的相同值。
MF_CAPTURE_METADATA_SCENE_MODE
MF_CAPTURE_METADATA_SCENE_MODE屬性包含套用至所擷取相片的場景模式,這是 64 位KSCAMERA_EXTENDEDPROP_SCENEMODE_XXX旗標。
MF_CAPTURE_METADATA_FLASH
MF_CAPTURE_METADATA_FLASH屬性包含擷取預覽和\或相片畫面時的布林值,其中 1 表示閃爍開啟,0 表示閃爍。
MF_CAPTURE_METADATA_FLASH_POWER
MF_CAPTURE_METADATA_FLASH_POWER屬性包含套用至所擷取相片的快閃電源,這是 [0, 100] 範圍內的值。 如果驅動程式不支援適用于快閃的可調整電源,則應該省略此屬性。
MF_CAPTURE_METADATA_WHITEBALANCE
MF_CAPTURE_METADATA_WHITEBALANCE屬性包含擷取預覽和\或相片框架時套用至感應器的白平衡,這是 Kevin 中的值。
MF_CAPTURE_METADATA_WHITEBALANCE_GAINS
MF_CAPTURE_METADATA_WHITEBALANCE_GAINS屬性包含擷取預覽畫面時套用至 R、G、B、B 的白平衡增益。 這是無單位的。
下列資料結構描述MF_CAPTURE_METADATA_WHITEBALANCE_GAINS的 Blob 格式。
typedef struct tagCapturedMetadataWhiteBalanceGains
{
FLOAT R;
FLOAT G;
FLOAT B;
} CapturedMetadataWhiteBalanceGains;
請注意,CapturedMetadataWhiteBalanceGains 結構只會描述 MF_CAPTURE_METADATA_WHITEBALANCE_GAINS 屬性的 Blob 格式。 白平衡取得的中繼資料專案結構 (KSCAMERA_METADATA_ITEMHEADER + 白平衡取得中繼資料承載) 為驅動程式,且必須對齊 8 位元組。
MF_CAPTURE_METADATA_ZOOMFACTOR
MF_CAPTURE_METADATA_ZOOMFACTOR 屬性包含套用至所擷取相片的縮放值,與可從 GET 呼叫中的KSPROPERTY_CAMERACONTROL_EXTENDED_ZOOM查詢的相同值。 這應該在 Q16 中。
MF_CAPTURE_METADATA_EXIF
MF_CAPTURE_METADATA_EXIF包含如 3.1 (Blob 定義) 中所述的 EXIF 中繼資料。 MFT0 應該從驅動程式提供的MF_CAPTURE_METADATA_FRAME_RAWSTREAM緩衝區擷取原始 EXIF 中繼資料,此中繼資料專案會識別為自訂中繼資料專案 (MetadataId > = MetadataId_Custom_Start) 。 MFT0 接著會將原始資料轉換成MF_CAPTURE_METADATA_EXIF屬性。
Blob 定義
Blob 應包含完整的 TIFF 標頭、第 0 個 IFD 和 EXIF 子 IFD,如 EXIF 2.3 和 TIFF 6.0 規格所定義。 Blob 不應在 TIFF 標頭之前包含任何資料。 Blob 不應在第 0 個 IFD 結尾之後包含任何資料。 例如,包含縮圖資料的 IFD 無效。
下圖從 TIFF 規格複製,說明預期的記憶體配置:
以下是與 EXIF 和 TIFF 規格一致的需求,但會強調說明:
- 位元組順序必須是小到尾 (「II」) 或大位元組 (「MM」) 。
- TIFF 規格中的指標 (「位元組位移」,) 應該相對於 TIFF 標頭的開頭。
以下是比 EXIF 和 TIFF 規格更嚴格的需求:
- 下一個 IFD 的位移應為 0,亦即不會指向其他 IFD。
- TIFF 標頭和第 0 個 IFD 應是連續的,也就是儲存在位元組 4-7 中的第 0 個 IFD 位移應該0x8。
強制 EXIF 中繼資料
下一節說明必須包含在 MF_CAPTURE_METADATA_EXIF 中的 EXIF 中繼資料。
名稱 | EXIF 標籤 | 描述 |
---|---|---|
方向 | 274 | 以資料列和資料行來檢視的影像方向。 如需完整描述,請參閱 EXIF 規格 |
請確定 | 271 | 錄製設備的製造商 |
型號 | 272 | 裝置的型號名稱或型號 |
XResolution | 282 | ImageWidth 方向中每個解析度單位的圖元數目 |
YResolution | 283 | ImageLength 方向中每個解析度單位的圖元數目 |
ResolutionUnit | 296 | 測量 XResolution 和 YResolution 的單位 |
軟體 | 305 | 韌體的名稱和版本 |
ColorSpace | 40961 | 色彩空間資訊,通常是 sRGB |
SubsSecTimeOriginal | 37521 | 記錄與 DateTimeOriginal 標記相關聯的秒數 |
SubSecTimeDigitized | 37522 | 記錄與 DateTimeDigitized 標記相關聯的秒數 |
ExposureTime | 33434 | 以秒為單位的曝光時間 (精確到 0.001s) |
FNumber | 33437 | 用於擷取的 F 編號 |
ISOSpeedRatings | 34855 | ISO 12322 中定義的 ISO 速度值,以飽和度為基礎 |
DateTimeOriginal | 36867 | 產生原始影像資料的日期和時間 |
DateTimeDIgitized | 36868 | 將影像儲存為數字資料的日期和時間 |
快門速度值 | 37377 | 相片曝光加總系統中的快門速度 (APEX) 單位 |
光圈值 | 37378 | APEX 單位的鏡頭光圈 |
ExposureBias 值 | 37380 | APEX 單位中的曝光偏差值 |
MeteringMode | 37383 | AE 計量模式 (請參閱 EXIF 規格) |
LightSource | 37384 | 光源類型 (請參閱 EXIF 規格) |
閃爍 | 37385 | 映射擷取期間快閃的狀態 |
FocalLength | 37386 | 鏡頭的實際焦點長度 |
ExposureMode | 41986 | 擷取期間的曝光模式 |
白平衡 | 41987 | 擷取期間的白平衡模式 |
DigitalZoomRatio | 41988 | 影像擷取期間的數位縮放比例 |
FocalLengthIn35mmFilm | 41989 | 35 公釐對等的焦點長度 |
SceneCaptureType | 41990 | 已拍攝的場景類型 |
選擇性/OEM 定義的中繼資料
只要相機驅動程式符合 EXIF 規格並儲存在第 0 個 TIFF IFD 或 EXIF 子 IFD 中,相機驅動程式就可以以自訂 EXIF 標籤的形式包含任何其他中繼資料。
MakerNote 需求和二進位版面配置預期
相機驅動程式可能會以製造商附注的形式包含製造商專屬資訊, (標籤 37500) 。 製作者附注不得包含任何指標,否則不得依賴在製作者記事本身以外的資料,包括檔案的開頭和 TIFF 標頭的位置。 此外,它不得假設 TIFF 標頭中指定的檔案結尾。
一般而言,作業系統不保證中繼資料 Blob 的二進位配置會在寫入輸出 JPEG 資料流程時保留。 它只會保證中繼資料會以符合 EXIF 規格來寫出。 例如,它只會保證製作者附注會複製為連續區塊,並由正確的 IFD 標籤、類型和位移識別。
使用 WIC JPEG 編碼器
MF_CAPTURE_METADATA_EXIF的預期用法是搭配作業系統提供的 Windows 映像處理元件 (WIC) JPEG 編碼器。 Windows 相機管線會使用 Windows WIC JPEG 編碼器來取用從 MF_CAPTURE_METADATA_EXIF 取得的 EXIF 中繼資料,並在應用程式未直接從相機擷取 JPEG 時,將影像圖元資料多工處理成 JPEG 檔案,但已設定管線以擷取至 NV12/YUY2 並透過 OS 編碼
MF_CAPTURE_METADATA_REQUESTED_FRAME_SETTING_ID
MF_CAPTURE_METADATA_REQUESTED_FRAME_SETTING_ID屬性包含可變相片序列中對應畫面的畫面識別碼。 此屬性只會針對可變相片序列擷取設定。
MF_CAPTURE_METADATA_FRAME_ILLUMINATION
IR 相機的 MF_CAPTURE_METADATA_FRAME_ILLUMINATION 屬性會指定畫面是否使用作用中 IR 光源,而且應該與FACEAUTH_MODE_ALTERNATIVE_FRAME_ILLUMINATION搭配使用。 它僅適用于 IR 樣本,如果相機同時支援 IR 和色彩樣本,則不應該出現在 RGB 畫面上。
如果在作用中照明開啟時擷取框架,則值應該設定為 0xXXXXXXXXXXXXXXXXXXXXXXXX1,如果擷取框架時沒有回應則設定為 0xXXXXXXXXXXXXXXXXXX。
MF_CAPTURE_METADATA_HISTOGRAM
MF_CAPTURE_METADATA_HISTOGRAM屬性包含擷取預覽畫面時長條圖。
下列資料結構描述MF_CAPTURE_METADATA_HISTOGRAM的 Blob 格式。
typedef struct tagHistogramGrid
{
ULONG Width; // Width of the sensor output that histogram is collected from
ULONG Height; // Height of the sensor output that histogram is collected from
RECT Region; // Absolute coordinates of the region on the sensor output that the histogram is collected for
} HistogramGrid;
typedef struct tagHistogramBlobHeader
{
ULONG Size; // Size of the entire histogram blob in bytes
ULONG Histograms; // Number of histograms in the blob. Each histogram is identified by a HistogramHeader
} HistogramBlobHeader;
typedef struct tagHistogramHeader
{
ULONG Size; // Size of this header + (HistogramDataHeader + histogram data following) * number of channels available
ULONG Bins; // Number of bins in the histogram
ULONG FourCC; // Color space that the histogram is collected from
ULONG ChannelMasks; // Masks of the color channels that the histogram is collected for
HistogramGrid Grid; // Grid that the histogram is collected from
} HistogramHeader;
typedef struct tagHistogramDataHeader
{
ULONG Size; // Size in bytes of this header + histogram data following
ULONG ChannelMask; // Mask of the color channel for the histogram data
ULONG Linear; // 1, if linear; 0 nonlinear
} HistogramDataHeader;
針對 ChannelMasks 欄位,我們將定義下列位元遮罩,以指出長條圖中的可用通道。
#define MF_HISTOGRAM_CHANNEL_Y 0x00000001
#define MF_HISTOGRAM_CHANNEL_R 0x00000002
#define MF_HISTOGRAM_CHANNEL_G 0x00000004
#define MF_HISTOGRAM_CHANNEL_B 0x00000008
#define MF_HISTOGRAM_CHANNEL_Cb 0x00000010
#define MF_HISTOGRAM_CHANNEL_Cr 0x00000020
注意:
- 每個 Blob 可以包含從不同區域收集的多個長條圖,或相同框架的不同色彩空間
- Blob 中的每個長條圖都會由自己的長條圖Header 來識別
- 每個長條圖都有自己的區域和感應器輸出大小相關聯。 針對完整框架長條圖,區域會符合長條圖Grid 中指定的感應器輸出大小。
- 所有可用通道的長條圖資料會分組在一個長條圖之下。 每個通道的長條圖資料是由緊接在資料上方的 HistogramDataHeader 來識別。 ChannelMasks 指出有多少個通道以及哪些通道具有長條圖資料,也就是上述所支援MF_HISTOGRAM_CHANNEL_XXX位元遮罩的位 OR。 ChannelMask 指出資料所針對的通道,該通道是由上述任何一個MF_HISTOGRAM_CHANNEL_XXX位元遮罩所識別。
下圖說明長條圖 Blob 的版面配置,內含完整框架的 Y 長條圖。
長條圖資料是 ULONG 的陣列,每個專案都代表落在一組音調值之下的圖元數目,依量化分類。 陣列中的資料應該從 bin 0 開始到 bin N-1,其中 N 是長條圖中的 bin 數目,也就是 HistogramBlobHeader.Bins。
下圖說明長條圖資料區段的配置。
下圖說明具有四個通道之全框架 YRGB 長條圖的長條圖 Blob 配置。
下圖說明長條圖 Blob 的版面配置,其中包含僅限 Y 的長條圖,後面接著具有三個通道的 RGB 長條圖。
針對閾值,如果支援KSPROPERTY_CAMERACONTROL_EXTENDED_HISTOGRAM,則至少必須提供具有 Y 通道的完整框架長條圖,這應該是長條圖 Blob 中的第一個長條圖。
請注意,HistogramBlobHeader、HistogramHeader、HistogramDataHeader 和 Histogram 資料只會描述MF_CAPTURE_METADATA_HISTOGRAM屬性的 Blob 格式。 長條圖的中繼資料專案結構 (KSCAMERA_METADATA_ITEMHEADER + 所有長條圖中繼資料承載) 為驅動程式,且必須對齊 8 位元組。
長條圖中繼資料控制項
KSPROPERTY_CAMERACONTROL_EXTENDED_HISTOGRAM是屬性識別碼,用來控制驅動程式所產生的長條圖中繼資料。 這是僅限預覽釘選的釘選層級控制項,且定義為下列內容:
typedef enum {
…
#if (NTDDI_VERSION >= NTDDI_WIN8)
KSPROPERTY_CAMERACONTROL_EXTENDED_HISTOGRAM
#endif
} KSPROPERTY_CAMERACONTROL_EXTENDED_PROPERTY;
針對KSCAMERA_EXTENDEDPROP_HEADER,我們將定義下列位旗標來控制驅動程式中的長條圖中繼資料。 預設值為 OFF。
#define KSCAMERA_EXTENDEDPROP_HISTOGRAM_OFF 0x0000000000000000
#define KSCAMERA_EXTENDEDPROP_HISTOGRAM_ON 0x0000000000000001
此控制項必須在KSPROPERTY_CAMERACONTROL_EXTENDED_METADATA控制項之前使用,以確保配置適當的大小元資料緩衝區。
如果設定為 HISTOGRAM_OFF,驅動程式不得在預覽釘選上傳遞長條圖中繼資料。 驅動程式不應在其元資料緩衝區大小需求中包含長條圖中繼資料大小。
如果設定為 HISTOGRAM_ON,驅動程式應該會在預覽釘選上傳遞長條圖中繼資料。 驅動程式必須在其元資料緩衝區大小需求中包含長條圖中繼資料大小。
如果驅動程式沒有產生長條圖中繼資料的功能,驅動程式就不應該實作此控制項。 如果驅動程式支援此控制項,它也必須支援KSPROPERTY_CAMERACONTROL_EXTENDED_METADATA控制項。
當預覽釘選狀態高於KSSTATE_STOP狀態時,此控制項的 SET 呼叫沒有任何作用。 如果預覽狀態不在停止狀態,驅動程式應拒絕收到的 SET 呼叫,並傳回STATUS_INVALID_DEVICE_STATE。 在 GET 呼叫中,驅動程式應該會在 [旗標] 欄位中傳回目前的設定。
這是同步控制項。 此控制項沒有定義的功能。
KSCAMERA_EXTENDEDPROP_HEADER
版本
必須是 1。
PinId
必須是與預覽釘選相關聯的 Pin 識別碼。
大小
必須是 sizeof(KSCAMERA_EXTENDEDPROP_HEADER) + sizeof(KSCAMERA_EXTENDEDPROP_VALUE)
結果
指出最後一個 SET 作業的錯誤結果。 如果沒有進行 SET 作業,這必須是 0。
功能
必須是 0。
Flags
這是讀取/寫入欄位。 這可以是上述任何一個 KSCAMERA_EXTENDEDPROP_HISTOGRAM_XXX
旗標。
KSCAMERA_EXTENDEDPROP_VALUE
未使用