Win32 API 日本語リファレンス
ホームMedia.KernelStreaming › KSCAMERA_METADATA_CAPTURESTATS

KSCAMERA_METADATA_CAPTURESTATS

構造体
サイズx64: 80 バイト / x86: 80 バイト

サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。

フィールド

フィールドサイズx64x86説明
HeaderKSCAMERA_METADATA_ITEMHEADER8+0+0メタデータ項目の共通ヘッダKSCAMERA_METADATA_ITEMHEADER。
FlagsDWORD4+8+8各統計フィールドの有効性を示すフラグの組み合わせ。
ReservedDWORD4+12+12予約フィールド。将来の拡張用で通常は0を設定する。
ExposureTimeULONGLONG8+16+16露光時間を100ナノ秒単位で示す。
ExposureCompensationFlagsULONGLONG8+24+24露出補正のモード/単位を示すフラグ。
ExposureCompensationValueINT4+32+32露出補正値(EV)を示す。
IsoSpeedDWORD4+36+36ISO感度値を示す。
FocusStateDWORD4+40+40フォーカスの状態を示す値(合焦中/合焦完了など)。
LensPositionDWORD4+44+44レンズ位置を示す値。
WhiteBalanceDWORD4+48+48ホワイトバランス値(色温度等)を示す。
FlashDWORD4+52+52フラッシュの発光状態を示す値。
FlashPowerDWORD4+56+56フラッシュの発光強度を示す。
ZoomFactorDWORD4+60+60ズーム倍率を示す(Q16固定小数等)。
SceneModeULONGLONG8+64+64適用されているシーンモードを示す64ビットフラグ。
SensorFramerateULONGLONG8+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 Structure
import 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: uint64
struct 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