知識マップ: Media FoundationでYUVをRGBに変換する方法
記事「Media FoundationでYUVをRGBに変換する方法」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。
この記事は、Media Foundationのdecoderから出る非圧縮フレームがRGBではなくNV12やYUY2のようなY'CbCr系であることを起点に、YUV→RGB変換の2つの経路を整理している。Source ReaderでMF_SOURCE_READER_ENABLE_VIDEO_PROCESSINGを有効にしてRGB32を要求する自動変換は手軽だがsoftware処理でリアルタイム再生には向かず、大量処理や色の制御が必要ならNV12/YUY2を自分で受けてBGRAへ変換する。自前変換ではchroma subsamplingの復元に加え、IMFMediaTypeが持つMF_MT_YUV_MATRIX(BT.601/BT.709)とMF_MT_VIDEO_NOMINAL_RANGEを見て係数とrangeを正しく選び、strideをwidth×bytesPerPixelで決め打ちせずIMF2DBuffer::Lock2Dが返す実際の値を使う必要がある。
flowchart LR
accTitle: Media FoundationでのYUV→RGB変換の知識マップ
accDescr: Media Foundationのdecoderが出すNV12/YUY2などYCbCr系フレームをRGBへ変換する2つの経路と、chroma subsampling・matrix・nominal range・strideという実装上の落とし穴の関係を示す図
yuv_to_rgb_conversion["YUV→RGB変換"]
nv12_pixel_format["NV12ピクセル形式"]
yuy2_pixel_format["YUY2ピクセル形式"]
chroma_subsampling["クロマサブサンプリング(4:4:4/4:2:2/4:2:0)"]
yuv_matrix_attribute["MF_MT_YUV_MATRIX属性"]
nominal_range_attribute["MF_MT_VIDEO_NOMINAL_RANGE属性"]
ycbcr["Y'CbCr"]
imfsourcereader["IMFSourceReader(Source Reader)"]
mf_video_processing_auto_conversion["MF_SOURCE_READER_ENABLE_VIDEO_PROCESSING"]
mfvideoformat_rgb32["MFVideoFormat_RGB32"]
video_processor_mft["Video Processor MFT"]
video_stride["stride(画像の行送りバイト数)"]
imf2dbuffer_lock2d["IMF2DBuffer::Lock2D"]
imfmediatype["IMFMediaType"]
imfattributes["IMFAttributes"]
bt601["BT.601"]
bt709["BT.709"]
media_foundation["Media Foundation"]
yuv_to_rgb_conversion -->|"前提とする"| chroma_subsampling
yuv_to_rgb_conversion -.->|"で構成できる"| yuv_matrix_attribute
yuv_to_rgb_conversion -.->|"で構成できる"| nominal_range_attribute
nv12_pixel_format -->|"利用する"| chroma_subsampling
yuy2_pixel_format -->|"利用する"| chroma_subsampling
nv12_pixel_format -->|"利用する"| ycbcr
yuy2_pixel_format -->|"利用する"| ycbcr
imfsourcereader -.->|"利用する"| mf_video_processing_auto_conversion
mf_video_processing_auto_conversion -->|"実装を担う"| yuv_to_rgb_conversion
mf_video_processing_auto_conversion -->|"利用する"| mfvideoformat_rgb32
video_processor_mft -.->|"推奨される対応"| yuv_to_rgb_conversion
yuv_to_rgb_conversion -->|"前提とする"| video_stride
video_stride -.->|"で確認できる"| imf2dbuffer_lock2d
imf2dbuffer_lock2d -->|"推奨される対応"| yuv_to_rgb_conversion
imfsourcereader -->|"利用する"| imfmediatype
imfmediatype -->|"利用する"| imfattributes
video_stride -.->|"で構成できる"| imfmediatype
nv12_pixel_format -->|"前提とする"| video_stride
yuv_matrix_attribute -->|"利用する"| bt601
yuv_matrix_attribute -->|"利用する"| bt709
media_foundation -.->|"利用する"| imfsourcereader
yuv_to_rgb_conversion -.->|"利用する"| nv12_pixel_format
yuv_to_rgb_conversion -.->|"利用する"| yuy2_pixel_format
概念間の関係(全23件)
図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。
- YUV→RGB変換はクロマサブサンプリング(4:4:4/4:2:2/4:2:0)を前提とします。
- YUV→RGB変換はMF_MT_YUV_MATRIX属性で構成できます。
- YUV→RGB変換はMF_MT_VIDEO_NOMINAL_RANGE属性で構成できます。
- NV12ピクセル形式はクロマサブサンプリング(4:4:4/4:2:2/4:2:0)を利用します。
- YUY2ピクセル形式はクロマサブサンプリング(4:4:4/4:2:2/4:2:0)を利用します。
- NV12ピクセル形式はY'CbCrを利用します。
- YUY2ピクセル形式はY'CbCrを利用します。
- IMFSourceReader(Source Reader)はMF_SOURCE_READER_ENABLE_VIDEO_PROCESSINGを利用します。
- MF_SOURCE_READER_ENABLE_VIDEO_PROCESSINGはYUV→RGB変換の実装を担います。
- MF_SOURCE_READER_ENABLE_VIDEO_PROCESSINGはMFVideoFormat_RGB32を利用します。
- Video Processor MFTはYUV→RGB変換に対する本記事の推奨です。
- YUV→RGB変換はstride(画像の行送りバイト数)を前提とします。
- stride(画像の行送りバイト数)はIMF2DBuffer::Lock2Dで確認できます。
- IMF2DBuffer::Lock2DはYUV→RGB変換に対する本記事の推奨です。
- IMFSourceReader(Source Reader)はIMFMediaTypeを利用します。
- IMFMediaTypeはIMFAttributesを利用します。
- stride(画像の行送りバイト数)はIMFMediaTypeで構成できます。
- NV12ピクセル形式はstride(画像の行送りバイト数)を前提とします。
- MF_MT_YUV_MATRIX属性はBT.601を利用します。
- MF_MT_YUV_MATRIX属性はBT.709を利用します。
- Media FoundationはIMFSourceReader(Source Reader)を利用します。
- YUV→RGB変換はNV12ピクセル形式を利用します。
- YUV→RGB変換はYUY2ピクセル形式を利用します。
主要概念の定義
機械可読データ
このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。