FOURCC コード

多くのデジタル メディア フォーマットには、FOURCC コードが割り当てられている。FOURCC コードは 32 ビット符号なし整数で、4 つの ASCII 文字を連結して作成される。たとえば、YUY2 ビデオの FOURCC コードは 'YUY2' である。圧縮ビデオ フォーマットおよび非 RGB ビデオ フォーマット (YUV など) では、BITMAPINFOHEADER 構造体の biCompression メンバを FOURCC コードに設定する必要がある。

ソース コードでの FOURCC 値の宣言を容易にするために、さまざまな C/C++ マクロが存在する。たとえば、MAKEFOURCC マクロは Mmsystem.h で宣言され、FCC マクロは Aviriff.h で宣言される。これらのマクロは次のように使う。

DWORD fccYUY2 = MAKEFOURCC('Y','U','Y','2');
DWORD fccYUY2 = FCC('YUY2');

FOURCC コードは、単に文字の順序を逆にして、文字列リテラルとして直接宣言することもできる。以下に例を示す。

DWORD fccYUY2 = '2YUY';  // FOURCC 'YUY2' を宣言する。

順序を逆にする必要があるのは、Microsoft Windows オペレーティング システムがリトルエンディアン アーキテクチャを使っているからである。'Y' = 0x59、'U' = 0x55、および '2' = 0x32 なので、'2YUY' は 0x32595559 になる。

FOURCC コードからサブタイプ GUID への変換

2*32 GUID の範囲が FOURCC を表すために予約されている。これらの GUID はすべて次のような形式である。

  XXXXXXXX-0000-0010-8000-00AA00389B71 

ここで、XXXXXXXX は FOURCC コードである。したがって、YUY2 のサブタイプ GUID は次のようになる。

32595559-0000-0010-8000-00AA00389B71 

これらの GUID の多くはヘッダー ファイル Uuids.h で既に定義されている。たとえば、YUY2 サブタイプは MEDIASUBTYPE_YUY2 として定義されている。DirectShow 基底クラス ライブラリでは、FOURCCMap ヘルパー クラスも提供している。このヘルパー クラスを使って、FOURCC コードを GUID 値に変換できる。FOURCCMap コンストラクタは、入力パラメータとして FOURCC コードを取る。これで、FOURCCMap オブジェクトを対応する GUID にキャストできる。

FOURCCMap fccMap(FCC('YUY2'));
GUID g1 = (GUID)fccMap;

// 等価なコード :
GUID g2 = (GUID)FOURCCMap(FCC('YUY2'));

新しい FOURCC の登録方法

新しい FOURCC コードを登録する場合は、mmreg@Microsoft.com まで電子メールで FOURCC とフォーマットの説明を連絡すること。組織 ID、電子メール アドレス、および担当者名も記載してほしい。現在登録されている FOURCC の一覧については、Microsoft Corporation の hwdev Web サイトを参照すること。

参照