ホーム › Media.KernelStreaming › KSCAMERA_METADATA_CAPTURESTATS
KSCAMERA_METADATA_CAPTURESTATS
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| Header | KSCAMERA_METADATA_ITEMHEADER | 8 | +0 | +0 | メタデータ項目の共通ヘッダKSCAMERA_METADATA_ITEMHEADER。 |
| Flags | DWORD | 4 | +8 | +8 | 各統計フィールドの有効性を示すフラグの組み合わせ。 |
| Reserved | DWORD | 4 | +12 | +12 | 予約フィールド。将来の拡張用で通常は0を設定する。 |
| ExposureTime | ULONGLONG | 8 | +16 | +16 | 露光時間を100ナノ秒単位で示す。 |
| ExposureCompensationFlags | ULONGLONG | 8 | +24 | +24 | 露出補正のモード/単位を示すフラグ。 |
| ExposureCompensationValue | INT | 4 | +32 | +32 | 露出補正値(EV)を示す。 |
| IsoSpeed | DWORD | 4 | +36 | +36 | ISO感度値を示す。 |
| FocusState | DWORD | 4 | +40 | +40 | フォーカスの状態を示す値(合焦中/合焦完了など)。 |
| LensPosition | DWORD | 4 | +44 | +44 | レンズ位置を示す値。 |
| WhiteBalance | DWORD | 4 | +48 | +48 | ホワイトバランス値(色温度等)を示す。 |
| Flash | DWORD | 4 | +52 | +52 | フラッシュの発光状態を示す値。 |
| FlashPower | DWORD | 4 | +56 | +56 | フラッシュの発光強度を示す。 |
| ZoomFactor | DWORD | 4 | +60 | +60 | ズーム倍率を示す(Q16固定小数等)。 |
| SceneMode | ULONGLONG | 8 | +64 | +64 | 適用されているシーンモードを示す64ビットフラグ。 |
| SensorFramerate | ULONGLONG | 8 | +72 | +72 | センサのフレームレートを示す64ビット値。 |
各言語での定義
#include <windows.h>
// KSCAMERA_METADATA_ITEMHEADER (x64 8 / x86 8 バイト)
typedef struct KSCAMERA_METADATA_ITEMHEADER {
DWORD MetadataId;
DWORD Size;
} KSCAMERA_METADATA_ITEMHEADER;
// KSCAMERA_METADATA_CAPTURESTATS (x64 80 / x86 80 バイト)
typedef struct KSCAMERA_METADATA_CAPTURESTATS {
KSCAMERA_METADATA_ITEMHEADER Header;
DWORD Flags;
DWORD Reserved;
ULONGLONG ExposureTime;
ULONGLONG ExposureCompensationFlags;
INT ExposureCompensationValue;
DWORD IsoSpeed;
DWORD FocusState;
DWORD LensPosition;
DWORD WhiteBalance;
DWORD Flash;
DWORD FlashPower;
DWORD ZoomFactor;
ULONGLONG SceneMode;
ULONGLONG SensorFramerate;
} KSCAMERA_METADATA_CAPTURESTATS;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct KSCAMERA_METADATA_ITEMHEADER
{
public uint MetadataId;
public uint Size;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct KSCAMERA_METADATA_CAPTURESTATS
{
public KSCAMERA_METADATA_ITEMHEADER Header;
public uint Flags;
public uint Reserved;
public ulong ExposureTime;
public ulong ExposureCompensationFlags;
public int ExposureCompensationValue;
public uint IsoSpeed;
public uint FocusState;
public uint LensPosition;
public uint WhiteBalance;
public uint Flash;
public uint FlashPower;
public uint ZoomFactor;
public ulong SceneMode;
public ulong SensorFramerate;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure KSCAMERA_METADATA_ITEMHEADER
Public MetadataId As UInteger
Public Size As UInteger
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure KSCAMERA_METADATA_CAPTURESTATS
Public Header As KSCAMERA_METADATA_ITEMHEADER
Public Flags As UInteger
Public Reserved As UInteger
Public ExposureTime As ULong
Public ExposureCompensationFlags As ULong
Public ExposureCompensationValue As Integer
Public IsoSpeed As UInteger
Public FocusState As UInteger
Public LensPosition As UInteger
Public WhiteBalance As UInteger
Public Flash As UInteger
Public FlashPower As UInteger
Public ZoomFactor As UInteger
Public SceneMode As ULong
Public SensorFramerate As ULong
End Structureimport ctypes
from ctypes import wintypes
class KSCAMERA_METADATA_ITEMHEADER(ctypes.Structure):
_fields_ = [
("MetadataId", wintypes.DWORD),
("Size", wintypes.DWORD),
]
class KSCAMERA_METADATA_CAPTURESTATS(ctypes.Structure):
_fields_ = [
("Header", KSCAMERA_METADATA_ITEMHEADER),
("Flags", wintypes.DWORD),
("Reserved", wintypes.DWORD),
("ExposureTime", ctypes.c_ulonglong),
("ExposureCompensationFlags", ctypes.c_ulonglong),
("ExposureCompensationValue", ctypes.c_int),
("IsoSpeed", wintypes.DWORD),
("FocusState", wintypes.DWORD),
("LensPosition", wintypes.DWORD),
("WhiteBalance", wintypes.DWORD),
("Flash", wintypes.DWORD),
("FlashPower", wintypes.DWORD),
("ZoomFactor", wintypes.DWORD),
("SceneMode", ctypes.c_ulonglong),
("SensorFramerate", ctypes.c_ulonglong),
]#[repr(C)]
pub struct KSCAMERA_METADATA_ITEMHEADER {
pub MetadataId: u32,
pub Size: u32,
}
#[repr(C)]
pub struct KSCAMERA_METADATA_CAPTURESTATS {
pub Header: KSCAMERA_METADATA_ITEMHEADER,
pub Flags: u32,
pub Reserved: u32,
pub ExposureTime: u64,
pub ExposureCompensationFlags: u64,
pub ExposureCompensationValue: i32,
pub IsoSpeed: u32,
pub FocusState: u32,
pub LensPosition: u32,
pub WhiteBalance: u32,
pub Flash: u32,
pub FlashPower: u32,
pub ZoomFactor: u32,
pub SceneMode: u64,
pub SensorFramerate: u64,
}import "golang.org/x/sys/windows"
type KSCAMERA_METADATA_ITEMHEADER struct {
MetadataId uint32
Size uint32
}
type KSCAMERA_METADATA_CAPTURESTATS struct {
Header KSCAMERA_METADATA_ITEMHEADER
Flags uint32
Reserved uint32
ExposureTime uint64
ExposureCompensationFlags uint64
ExposureCompensationValue int32
IsoSpeed uint32
FocusState uint32
LensPosition uint32
WhiteBalance uint32
Flash uint32
FlashPower uint32
ZoomFactor uint32
SceneMode uint64
SensorFramerate uint64
}type
KSCAMERA_METADATA_ITEMHEADER = record
MetadataId: DWORD;
Size: DWORD;
end;
KSCAMERA_METADATA_CAPTURESTATS = record
Header: KSCAMERA_METADATA_ITEMHEADER;
Flags: DWORD;
Reserved: DWORD;
ExposureTime: UInt64;
ExposureCompensationFlags: UInt64;
ExposureCompensationValue: Integer;
IsoSpeed: DWORD;
FocusState: DWORD;
LensPosition: DWORD;
WhiteBalance: DWORD;
Flash: DWORD;
FlashPower: DWORD;
ZoomFactor: DWORD;
SceneMode: UInt64;
SensorFramerate: UInt64;
end;const KSCAMERA_METADATA_ITEMHEADER = extern struct {
MetadataId: u32,
Size: u32,
};
const KSCAMERA_METADATA_CAPTURESTATS = extern struct {
Header: KSCAMERA_METADATA_ITEMHEADER,
Flags: u32,
Reserved: u32,
ExposureTime: u64,
ExposureCompensationFlags: u64,
ExposureCompensationValue: i32,
IsoSpeed: u32,
FocusState: u32,
LensPosition: u32,
WhiteBalance: u32,
Flash: u32,
FlashPower: u32,
ZoomFactor: u32,
SceneMode: u64,
SensorFramerate: u64,
};type
KSCAMERA_METADATA_ITEMHEADER {.bycopy.} = object
MetadataId: uint32
Size: uint32
KSCAMERA_METADATA_CAPTURESTATS {.bycopy.} = object
Header: KSCAMERA_METADATA_ITEMHEADER
Flags: uint32
Reserved: uint32
ExposureTime: uint64
ExposureCompensationFlags: uint64
ExposureCompensationValue: int32
IsoSpeed: uint32
FocusState: uint32
LensPosition: uint32
WhiteBalance: uint32
Flash: uint32
FlashPower: uint32
ZoomFactor: uint32
SceneMode: uint64
SensorFramerate: uint64struct KSCAMERA_METADATA_ITEMHEADER
{
uint MetadataId;
uint Size;
}
struct KSCAMERA_METADATA_CAPTURESTATS
{
KSCAMERA_METADATA_ITEMHEADER Header;
uint Flags;
uint Reserved;
ulong ExposureTime;
ulong ExposureCompensationFlags;
int ExposureCompensationValue;
uint IsoSpeed;
uint FocusState;
uint LensPosition;
uint WhiteBalance;
uint Flash;
uint FlashPower;
uint ZoomFactor;
ulong SceneMode;
ulong SensorFramerate;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; KSCAMERA_METADATA_CAPTURESTATS サイズ: 80 バイト(x64)
dim st, 20 ; 4byte整数×20(構造体サイズ 80 / 4 切り上げ)
; Header : KSCAMERA_METADATA_ITEMHEADER (+0, 8byte) varptr(st)+0 を基点に操作(8byte:入れ子/配列)
; Flags : DWORD (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; Reserved : DWORD (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; ExposureTime : ULONGLONG (+16, 8byte) qpoke st,16,値 / qpeek(st,16) ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; ExposureCompensationFlags : ULONGLONG (+24, 8byte) qpoke st,24,値 / qpeek(st,24) ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; ExposureCompensationValue : INT (+32, 4byte) st.8 = 値 / 値 = st.8 (lpoke/lpeek も可)
; IsoSpeed : DWORD (+36, 4byte) st.9 = 値 / 値 = st.9 (lpoke/lpeek も可)
; FocusState : DWORD (+40, 4byte) st.10 = 値 / 値 = st.10 (lpoke/lpeek も可)
; LensPosition : DWORD (+44, 4byte) st.11 = 値 / 値 = st.11 (lpoke/lpeek も可)
; WhiteBalance : DWORD (+48, 4byte) st.12 = 値 / 値 = st.12 (lpoke/lpeek も可)
; Flash : DWORD (+52, 4byte) st.13 = 値 / 値 = st.13 (lpoke/lpeek も可)
; FlashPower : DWORD (+56, 4byte) st.14 = 値 / 値 = st.14 (lpoke/lpeek も可)
; ZoomFactor : DWORD (+60, 4byte) st.15 = 値 / 値 = st.15 (lpoke/lpeek も可)
; SceneMode : ULONGLONG (+64, 8byte) qpoke st,64,値 / qpeek(st,64) ※IronHSPのみ。3.7/3.8は lpoke st,64,下位 : lpoke st,68,上位
; SensorFramerate : ULONGLONG (+72, 8byte) qpoke st,72,値 / qpeek(st,72) ※IronHSPのみ。3.7/3.8は lpoke st,72,下位 : lpoke st,76,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global KSCAMERA_METADATA_ITEMHEADER
#field int MetadataId
#field int Size
#endstruct
#defstruct global KSCAMERA_METADATA_CAPTURESTATS
#field KSCAMERA_METADATA_ITEMHEADER Header
#field int Flags
#field int Reserved
#field int64 ExposureTime
#field int64 ExposureCompensationFlags
#field int ExposureCompensationValue
#field int IsoSpeed
#field int FocusState
#field int LensPosition
#field int WhiteBalance
#field int Flash
#field int FlashPower
#field int ZoomFactor
#field int64 SceneMode
#field int64 SensorFramerate
#endstruct
stdim st, KSCAMERA_METADATA_CAPTURESTATS ; NSTRUCT 変数を確保
st->Flags = 100
mes "Flags=" + st->Flags