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

DXVA2_NominalRange

列挙型
基底型i4

メンバー 7

名前10進16進説明
DXVA2_NominalRangeMask70x7フラグ値を検証するためのビットマスクです。この値は有効なフラグではありません。
DXVA2_NominalRange_Unknown00x0

不明または未指定の公称範囲です。

この値を DXVA2_VideoProcessBltParams 構造体の DestFormat メンバーで使用した場合、ドライバーは転送先の色空間に基づいて最適な公称範囲を決定します。たとえば、転送先サーフェスは通常 sRGB であり、チャネルあたり 0 ~ 255 の公称範囲を持ちます。ただし、ドライバーは自動ゲイン制御などの手法を使用して、基準白を超える値を保持しつつダイナミックレンジを最大化する場合があります。

DXVA2_NominalRange_Normal10x1DXVA2_NominalRange_0_255 と同等です。
DXVA2_NominalRange_Wide20x2DXVA2_NominalRange_16_235 と同等です。
DXVA2_NominalRange_0_25510x1正規化された範囲 [0...1] は、8 ビットサンプルでは [0...255] に、10 ビットサンプルでは [0...1023] にマッピングされます。
DXVA2_NominalRange_16_23520x2正規化された範囲 [0...1] は、8 ビットサンプルでは [16...235] に、10 ビットサンプルでは [64...940] にマッピングされます。
DXVA2_NominalRange_48_20830x3正規化された範囲 [0..1] は、8 ビットサンプルでは [48...208] に、10 ビットサンプルでは [192...832] にマッピングされます。

公式ドキュメント

カラーデータを正規化された [0...1] の範囲にマッピングする方法を記述します。

これらのフラグは DXVA2_ExtendedFormat 構造体で使用されます。これらは、カラー値の範囲にヘッドルーム (100% 白を超える値) とトウルーム (基準黒を下回る値) が含まれるかどうかを示します。

解説(Remarks)

YUV カラーの場合、これらのフラグは Y'CbCr と Y'PbPr の間で変換する方法を指定します。Y'PbPr 色空間は、Y' (輝度) が [0..1]、Pb/Pr (彩度) が [-0.5...0.5] の範囲を持ちます。

説明
DXVA2_NominalRange_0_255 YUV データには使用しないでください。
DXVA2_NominalRange_16_235 8 ビットの Y'CbCr 成分の場合:
  • Y' の範囲 [0...1] は、8 ビットの Y' 値では [16..235] にマッピングされます。
  • Pb/Pr の範囲 [-0.5...0.5] は、8 ビットの Cb/Cr 値では [16...240] にマッピングされます。
精度が n ビットのサンプルの場合、一般的な式は次のとおりです。
  • Y' = (Y' * 219 + 16) * 2 ^ (n-8)
  • Cb = (Pb * 224 + 128) * 2 ^ (n-8)
  • Cr = (Pr * 224 + 128) * 2 ^ (n-8)
Y'CbCr から Y'PbPr へ変換する逆の式は次のとおりです。
  • Y' = (Y' / 2 ^ (n-8) - 16) / 219
  • Pb = (Cb / 2 ^ (n-8) - 128) / 224
  • Pr = (Cr / 2 ^ (n-8) - 128) / 224
DXVA2_NominalRange_48_208 8 ビットの Y'CbCr 値の場合、Y' の範囲 [0..1] は [48...208] にマッピングされます。

RGB カラーの場合、これらのフラグはさまざまな RGB 空間を区別します。

説明
DXVA2_NominalRange_0_255 sRGB
DXVA2_NominalRange_16_235 スタジオ RGB、ITU-R BT.709
DXVA2_NominalRange_48_208 ITU-R BT.1361 RGB

ビデオデータには、公称範囲を上回る値や下回る値が含まれる場合があります。

メモ DXVA2_NominalRange_Normal と DXVA2_NominalRange_Wide という名前の値は、混乱を招く可能性があります。Wide とは、公称範囲 [0...1] をより狭いデジタル値の範囲にマッピングすることによって表現できるアナログ値の範囲を指します。この文脈での wide の意味はあいまいであるため、同等の値である DXVA2_NominalRange_0_255 と DXVA2_NominalRange_16_235 を使用することをお勧めします。これらの名前は列挙型の意味を明示的に伝えるため、誤解される可能性が低くなります。
この列挙型は、DXVA 1.0 で使用されていた DXVA_NominalRange 列挙型と同等ですが、追加の値が定義されています。

ビデオ形式の記述に IMFMediaType インターフェイスを使用している場合、公称範囲は MF_MT_VIDEO_NOMINAL_RANGE 属性で指定します。

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

各言語での定義

列挙メンバーの定義。HSP タブは #define global(値は16進)。

typedef enum DXVA2_NominalRange : int {
    DXVA2_NominalRangeMask = 7,
    DXVA2_NominalRange_Unknown = 0,
    DXVA2_NominalRange_Normal = 1,
    DXVA2_NominalRange_Wide = 2,
    DXVA2_NominalRange_0_255 = 1,
    DXVA2_NominalRange_16_235 = 2,
    DXVA2_NominalRange_48_208 = 3
} DXVA2_NominalRange;
public enum DXVA2_NominalRange : int
{
    DXVA2_NominalRangeMask = 7,
    DXVA2_NominalRange_Unknown = 0,
    DXVA2_NominalRange_Normal = 1,
    DXVA2_NominalRange_Wide = 2,
    DXVA2_NominalRange_0_255 = 1,
    DXVA2_NominalRange_16_235 = 2,
    DXVA2_NominalRange_48_208 = 3,
}
Public Enum DXVA2_NominalRange As Integer
    DXVA2_NominalRangeMask = 7
    DXVA2_NominalRange_Unknown = 0
    DXVA2_NominalRange_Normal = 1
    DXVA2_NominalRange_Wide = 2
    DXVA2_NominalRange_0_255 = 1
    DXVA2_NominalRange_16_235 = 2
    DXVA2_NominalRange_48_208 = 3
End Enum
import enum

class DXVA2_NominalRange(enum.IntEnum):
    DXVA2_NominalRangeMask = 7
    DXVA2_NominalRange_Unknown = 0
    DXVA2_NominalRange_Normal = 1
    DXVA2_NominalRange_Wide = 2
    DXVA2_NominalRange_0_255 = 1
    DXVA2_NominalRange_16_235 = 2
    DXVA2_NominalRange_48_208 = 3
// DXVA2_NominalRange
pub const DXVA2_NominalRangeMask: i32 = 7;
pub const DXVA2_NominalRange_Unknown: i32 = 0;
pub const DXVA2_NominalRange_Normal: i32 = 1;
pub const DXVA2_NominalRange_Wide: i32 = 2;
pub const DXVA2_NominalRange_0_255: i32 = 1;
pub const DXVA2_NominalRange_16_235: i32 = 2;
pub const DXVA2_NominalRange_48_208: i32 = 3;
// DXVA2_NominalRange
const (
	DXVA2_NominalRangeMask int32 = 7
	DXVA2_NominalRange_Unknown int32 = 0
	DXVA2_NominalRange_Normal int32 = 1
	DXVA2_NominalRange_Wide int32 = 2
	DXVA2_NominalRange_0_255 int32 = 1
	DXVA2_NominalRange_16_235 int32 = 2
	DXVA2_NominalRange_48_208 int32 = 3
)
const
  DXVA2_NominalRangeMask = 7;
  DXVA2_NominalRange_Unknown = 0;
  DXVA2_NominalRange_Normal = 1;
  DXVA2_NominalRange_Wide = 2;
  DXVA2_NominalRange_0_255 = 1;
  DXVA2_NominalRange_16_235 = 2;
  DXVA2_NominalRange_48_208 = 3;
// DXVA2_NominalRange
pub const DXVA2_NominalRangeMask: i32 = 7;
pub const DXVA2_NominalRange_Unknown: i32 = 0;
pub const DXVA2_NominalRange_Normal: i32 = 1;
pub const DXVA2_NominalRange_Wide: i32 = 2;
pub const DXVA2_NominalRange_0_255: i32 = 1;
pub const DXVA2_NominalRange_16_235: i32 = 2;
pub const DXVA2_NominalRange_48_208: i32 = 3;
const
  DXVA2_NominalRangeMask* = 7
  DXVA2_NominalRange_Unknown* = 0
  DXVA2_NominalRange_Normal* = 1
  DXVA2_NominalRange_Wide* = 2
  DXVA2_NominalRange_0_255* = 1
  DXVA2_NominalRange_16_235* = 2
  DXVA2_NominalRange_48_208* = 3
enum DXVA2_NominalRange : int {
    DXVA2_NominalRangeMask = 7,
    DXVA2_NominalRange_Unknown = 0,
    DXVA2_NominalRange_Normal = 1,
    DXVA2_NominalRange_Wide = 2,
    DXVA2_NominalRange_0_255 = 1,
    DXVA2_NominalRange_16_235 = 2,
    DXVA2_NominalRange_48_208 = 3,
}
#define global DXVA2_NominalRangeMask     0x7
#define global DXVA2_NominalRange_Unknown 0x0
#define global DXVA2_NominalRange_Normal  0x1
#define global DXVA2_NominalRange_Wide    0x2
#define global DXVA2_NominalRange_0_255   0x1
#define global DXVA2_NominalRange_16_235  0x2
#define global DXVA2_NominalRange_48_208  0x3