Win32 API 日本語リファレンス
ホームGraphics.Dxgi › DXGI_HDR_METADATA_HDR10

DXGI_HDR_METADATA_HDR10

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

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

フィールド

フィールドサイズx64x86説明
RedPrimaryWORD4+0+0赤原色のCIE xy色度座標(0.00002単位)を表す配列。
GreenPrimaryWORD4+4+4緑原色のCIE xy色度座標(0.00002単位)を表す配列。
BluePrimaryWORD4+8+8青原色のCIE xy色度座標(0.00002単位)を表す配列。
WhitePointWORD4+12+12ホワイトポイントのCIE xy色度座標(0.00002単位)を表す配列。
MaxMasteringLuminanceDWORD4+16+16マスタリング時の最大輝度(nits単位)。
MinMasteringLuminanceDWORD4+20+20マスタリング時の最小輝度(0.0001 nits単位)。
MaxContentLightLevelWORD2+24+24コンテンツ最大輝度レベル(MaxCLL、nits単位)。
MaxFrameAverageLightLevelWORD2+26+26フレーム平均最大輝度レベル(MaxFALL、nits単位)。

各言語での定義

#include <windows.h>

// DXGI_HDR_METADATA_HDR10  (x64 28 / x86 28 バイト)
typedef struct DXGI_HDR_METADATA_HDR10 {
    WORD RedPrimary[2];
    WORD GreenPrimary[2];
    WORD BluePrimary[2];
    WORD WhitePoint[2];
    DWORD MaxMasteringLuminance;
    DWORD MinMasteringLuminance;
    WORD MaxContentLightLevel;
    WORD MaxFrameAverageLightLevel;
} DXGI_HDR_METADATA_HDR10;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DXGI_HDR_METADATA_HDR10
{
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public ushort[] RedPrimary;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public ushort[] GreenPrimary;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public ushort[] BluePrimary;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public ushort[] WhitePoint;
    public uint MaxMasteringLuminance;
    public uint MinMasteringLuminance;
    public ushort MaxContentLightLevel;
    public ushort MaxFrameAverageLightLevel;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DXGI_HDR_METADATA_HDR10
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=2)> Public RedPrimary() As UShort
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=2)> Public GreenPrimary() As UShort
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=2)> Public BluePrimary() As UShort
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=2)> Public WhitePoint() As UShort
    Public MaxMasteringLuminance As UInteger
    Public MinMasteringLuminance As UInteger
    Public MaxContentLightLevel As UShort
    Public MaxFrameAverageLightLevel As UShort
End Structure
import ctypes
from ctypes import wintypes

class DXGI_HDR_METADATA_HDR10(ctypes.Structure):
    _fields_ = [
        ("RedPrimary", ctypes.c_ushort * 2),
        ("GreenPrimary", ctypes.c_ushort * 2),
        ("BluePrimary", ctypes.c_ushort * 2),
        ("WhitePoint", ctypes.c_ushort * 2),
        ("MaxMasteringLuminance", wintypes.DWORD),
        ("MinMasteringLuminance", wintypes.DWORD),
        ("MaxContentLightLevel", ctypes.c_ushort),
        ("MaxFrameAverageLightLevel", ctypes.c_ushort),
    ]
#[repr(C)]
pub struct DXGI_HDR_METADATA_HDR10 {
    pub RedPrimary: [u16; 2],
    pub GreenPrimary: [u16; 2],
    pub BluePrimary: [u16; 2],
    pub WhitePoint: [u16; 2],
    pub MaxMasteringLuminance: u32,
    pub MinMasteringLuminance: u32,
    pub MaxContentLightLevel: u16,
    pub MaxFrameAverageLightLevel: u16,
}
import "golang.org/x/sys/windows"

type DXGI_HDR_METADATA_HDR10 struct {
	RedPrimary [2]uint16
	GreenPrimary [2]uint16
	BluePrimary [2]uint16
	WhitePoint [2]uint16
	MaxMasteringLuminance uint32
	MinMasteringLuminance uint32
	MaxContentLightLevel uint16
	MaxFrameAverageLightLevel uint16
}
type
  DXGI_HDR_METADATA_HDR10 = record
    RedPrimary: array[0..1] of Word;
    GreenPrimary: array[0..1] of Word;
    BluePrimary: array[0..1] of Word;
    WhitePoint: array[0..1] of Word;
    MaxMasteringLuminance: DWORD;
    MinMasteringLuminance: DWORD;
    MaxContentLightLevel: Word;
    MaxFrameAverageLightLevel: Word;
  end;
const DXGI_HDR_METADATA_HDR10 = extern struct {
    RedPrimary: [2]u16,
    GreenPrimary: [2]u16,
    BluePrimary: [2]u16,
    WhitePoint: [2]u16,
    MaxMasteringLuminance: u32,
    MinMasteringLuminance: u32,
    MaxContentLightLevel: u16,
    MaxFrameAverageLightLevel: u16,
};
type
  DXGI_HDR_METADATA_HDR10 {.bycopy.} = object
    RedPrimary: array[2, uint16]
    GreenPrimary: array[2, uint16]
    BluePrimary: array[2, uint16]
    WhitePoint: array[2, uint16]
    MaxMasteringLuminance: uint32
    MinMasteringLuminance: uint32
    MaxContentLightLevel: uint16
    MaxFrameAverageLightLevel: uint16
struct DXGI_HDR_METADATA_HDR10
{
    ushort[2] RedPrimary;
    ushort[2] GreenPrimary;
    ushort[2] BluePrimary;
    ushort[2] WhitePoint;
    uint MaxMasteringLuminance;
    uint MinMasteringLuminance;
    ushort MaxContentLightLevel;
    ushort MaxFrameAverageLightLevel;
}

HSP用 定義

HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; DXGI_HDR_METADATA_HDR10 サイズ: 28 バイト(x64)
dim st, 7    ; 4byte整数×7(構造体サイズ 28 / 4 切り上げ)
; RedPrimary : WORD (+0, 4byte)  varptr(st)+0 を基点に操作(4byte:入れ子/配列)
; GreenPrimary : WORD (+4, 4byte)  varptr(st)+4 を基点に操作(4byte:入れ子/配列)
; BluePrimary : WORD (+8, 4byte)  varptr(st)+8 を基点に操作(4byte:入れ子/配列)
; WhitePoint : WORD (+12, 4byte)  varptr(st)+12 を基点に操作(4byte:入れ子/配列)
; MaxMasteringLuminance : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; MinMasteringLuminance : DWORD (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; MaxContentLightLevel : WORD (+24, 2byte)  wpoke st,24,値  /  値 = wpeek(st,24)
; MaxFrameAverageLightLevel : WORD (+26, 2byte)  wpoke st,26,値  /  値 = wpeek(st,26)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global DXGI_HDR_METADATA_HDR10
    #field short RedPrimary 2
    #field short GreenPrimary 2
    #field short BluePrimary 2
    #field short WhitePoint 2
    #field int MaxMasteringLuminance
    #field int MinMasteringLuminance
    #field short MaxContentLightLevel
    #field short MaxFrameAverageLightLevel
#endstruct

stdim st, DXGI_HDR_METADATA_HDR10        ; NSTRUCT 変数を確保
st->MaxMasteringLuminance = 100
mes "MaxMasteringLuminance=" + st->MaxMasteringLuminance