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+0CIE1931 色空間における赤の色度座標です。インデックス 0 に X 座標、インデックス 1 に Y 座標が格納されます。値は 50,000 を基準に正規化されます。
GreenPrimaryWORD4+4+4CIE1931 色空間における緑の色度座標です。インデックス 0 に X 座標、インデックス 1 に Y 座標が格納されます。値は 50,000 を基準に正規化されます。
BluePrimaryWORD4+8+8CIE1931 色空間における青の色度座標です。インデックス 0 に X 座標、インデックス 1 に Y 座標が格納されます。値は 50,000 を基準に正規化されます。
WhitePointWORD4+12+12CIE1931 色空間における白色点の色度座標です。インデックス 0 に X 座標、インデックス 1 に Y 座標が格納されます。値は 50,000 を基準に正規化されます。
MaxMasteringLuminanceDWORD4+16+16コンテンツのマスタリングに使用したディスプレイの最大輝度 (ニト単位) です。値は 1 ニトを単位とする整数値です。
MinMasteringLuminanceDWORD4+20+20コンテンツのマスタリングに使用したディスプレイの最小輝度 (ニト単位) です。値は 1/10000 ニト (0.0001 ニト) を単位とします。
MaxContentLightLevelWORD2+24+24最大コンテンツ輝度レベル (MaxCLL) です。これは、コンテンツ全体で最も明るいピクセルに対応するニト値です。
MaxFrameAverageLightLevelWORD2+26+26最大フレーム平均輝度レベル (MaxFALL) です。これは、コンテンツ全体で平均輝度が最も高いフレームの、平均輝度に対応するニト値です。

公式ドキュメント

HDR10 のメタデータを記述します。High Efficiency Video Coding (HEVC) で圧縮された映像で使用されます。これは、コンテンツのマスタリングに使用したディスプレイの能力と、コンテンツの輝度値を記述するために使用されます。

解説(Remarks)

この構造体は、HEVC で使用される HDR10 メタデータの定義を表すものであり、ST.2086 向けの HDR10 メタデータではありません。これらは密接に関連していますが、定義は異なります。

例: マスタリング ディスプレイが DCI-P3 の色原色と D65 白色点を持ち、最大輝度が 1000 ニト、最小輝度が 0.001 ニトである場合。コンテンツの最大輝度は 2000 ニト、最大フレーム平均輝度レベル (MaxFALL) は 500 ニトです。

RedPrimary[0] = 0.680 * 50000;
RedPrimary[1] = 0.320 * 50000;
GreenPrimary[0] = 0.265 * 50000;
GreenPrimary[1] = 0.690 * 50000;
BluePrimary[0] = 0.150 * 50000;
BluePrimary[1] = 0.060 * 50000;
WhitePoint[0] = 0.3127 * 50000;
WhitePoint[1] = 0.3290 * 50000;
MaxMasteringLuminance = 1000;
MinMasteringLuminance = 0.001 * 10000;
MaxContentLightLevel = 2000;
MaxFrameAverageLightLevel = 500;

この構造体は SetHDRMetaData メソッドと組み合わせて使用します。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での定義

#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