FourCC (「4文字コード」)は、データ形式を一意に識別するために使用される4バイト(通常はASCII)のシーケンスです。これは、クラシックMac OSで使用されていたOSTypeまたはResTypeメタデータシステムに由来し、 Amiga / Electronic Arts Interchange File Formatおよびその派生製品に採用されました。このアイデアは後に、 QuickTimeやDirectShowで圧縮データのタイプを識別するために再利用されました。
歴史
1984年、Macintosh OSの初期バージョンであるSystem 1がリリースされました。System 1は、ファイルタイプ、クリエータ(アプリケーション)情報、追加リソースを保存するためのフォークなどのメタデータフィールドを備えたシングルレベルのMacintosh File Systemを採用していました。データ自体を変更することなくこれらの情報を変更できるため、異なる解釈が可能でした。システム全体で同一のコードが使用され、あらゆる種類のデータのタイプタグとして使用されていました。[ 1 ] [ 2 ]
1985年、エレクトロニック・アーツは、もともとAmiga向けに考案されたInterchange File Format(IFF)メタフォーマット(ファイルフォーマット群)を導入しました。これらのファイルは、任意のデータを含むことができる「チャンク」のシーケンスで構成され、各チャンクの先頭には4バイトのIDが付けられていました。IFFの仕様では、FourCCのアイデアの起源はAppleにあることが明記されています。[ 3 ]
このIFFは、 Apple社がAIFFファイル、Microsoft社がRIFFファイル( AVIおよびWAVファイル形式のベースとして使用)など、多くの開発者に採用されました。Apple社はこれらのコードの多くをOSTypesと呼んでいました。Microsoft社とWindows社の開発者は、4バイトの識別子をFourCC(Four-Character Codes)と呼んでいます。FourCCコードは、Microsoft社でもDirectX 、特にDirectShowおよびDirectX Graphicsで使用されるデータ形式を識別するために採用されました。
Appleのシステムでは
Mac OS X Panther以降、OSTypeシグネチャはUniform Type Identifier( UTI)を決定するために検査される複数の情報源の一つであり、主要なデータ型シグネチャとしては使用されなくなりました。Mac OS X(macOS)では、ファイル名拡張子を用いてファイルの種類を分類するという、より口語的な慣習が推奨されています。この変更が行われた当時、古いユーザーの間で大きな論争が巻き起こりました。彼らはAppleがファイル名のメタデータを誤った場所に配置してしまう、より原始的な方法に戻ろうとしていると考えていたのです。
ファイルシステムに関連付けられた型コードはユーザーが簡単に操作できるものではありませんが、特定のソフトウェア、特に開発者ツールの一部として/Developer/ToolsにインストールされているmacOSコマンドラインツールのGetFileInfoとSetFile、または古いMacで利用可能なResEditユーティリティを使用して表示および変更することができます。 [ 4 ] [ 5 ]
技術的な詳細
バイトシーケンスは通常、ASCII印字可能文字に制限され、スペース文字は短いシーケンスを埋めるために予約されています。ファイル拡張子とは異なり、大文字と小文字の区別は保持されます。FourCCは16進数でエンコードされる場合があり(例:' avc1 'の場合は"0x31637661")[ 6 ] [ 7 ] [ 8 ]、人間が読める形式でエンコードされる場合もあります(例:" mp4a ")。ただし、一部のFourCCには印字不可能な文字が含まれており、表示用に特別なフォーマットを施さなければ人間が読むことはできません。例えば、10ビットのY'CbCr 4:2:2ビデオのFourCCは('Y'、'3'、10、10)[ 9 ]となり、 ffmpegではと表示されますrawvideo (Y3[10] [10] / 0x0A0A3359), yuv422p10le。
4バイト識別子は、人間が読める4つの文字で構成され、ニーモニック特性を持つため便利です。また、32ビットシステムで整数に通常割り当てられる4バイトのメモリ空間に収まります(ただし、エンディアンの問題により可読性が低下する場合があります)。そのため、これらのコードはプログラムコード内で整数として効率的に使用できるだけでなく、バイナリデータストリームを検査する際に手がかりとして使用できます。
コンパイラサポート
FourCCは、文字列として読み込まれた際に正しいバイト順で表示されるよう、基となるASCII文字シーケンスを基準としてビッグエンディアンで記述されます。GCCを含む多くのCコンパイラは、複数文字リテラルを最下位バイトに右寄せする動作を定義しているため、 ASCIIでは'1234'となります。[ 10 ]これは、Mac OSプログラマがOSTypeでFourCCコードを記述する際に一般的に使用される方法です。(旧Mac OSは完全にビッグエンディアンでした。) 0x31323334
リトルエンディアンマシンでは、正しい結果を得るために値のバイトスワップが必要です。上記の avc1 の例を見てみましょう。リテラル「avc1」は既に整数値0x61766331に変換されますが、リトルエンディアンマシンではバイト順序が反転され、値は31 63 76 61として保存されます。正しいバイトシーケンス61 76 63 31を生成するために、スワップ前の値0x31637661が使用されます。
一般的な用途
FourCCの最もよく知られた用途の一つは、AVIファイル内のビデオコーデックまたはビデオコーディング形式を識別することです。一般的な識別子には、 DIVX、XVID、H264などがあります。オーディオコーディング形式の場合、AVIファイルとWAVファイルは2バイトの識別子を使用し、通常は16進数で表記されます( MP3の場合は0055など)。QuickTimeファイルでは、これらの2バイトの識別子の前に「ms」という文字が付加され、4文字のコードが形成されます。RealMediaファイルも4文字のコードを使用しますが、実際に使用されるコードはAVIファイルやQuickTimeファイルとは異なります。
4 バイト ID の概念を重要視するその他のファイル形式としては、標準 MIDI ファイル (SMF)形式、PNG画像ファイル形式、3DS (3D Studio Max) メッシュ ファイル形式、ICCプロファイル形式などがあります。
4 文字のコードは、ファイル形式以外のアプリケーションでも使用されます。次に例を示します。
- ACPI IDレジストリのベンダー向けUEFIフォーラム[ 11 ]
- ACPI仕様では、ACPIソース言語(ASL)で4文字の識別子を定義しています。
- Synopsys は、IP のレジスタを介してコンポーネント ID を伝えます (DesignWare コレクション)
OSTypes のその他の用途は次のとおりです。
- AppleEventsのレコードフィールドID、イベントタイプおよびクラスIDとして
- コンポーネントマネージャでコンポーネントを識別するため
- QuickTimeムービーおよび画像ファイル形式の「アトム」IDとして
- フォルダマネージャで標準フォルダを識別するためのローカリゼーションに依存しない方法として
- QuickDraw GXでは、これらは gxTag タイプとして使用され、コレクション マネージャーのコレクション アイテムのタイプとしても使用されました。
- Apple API の列挙定数 (整数として; ホストのエンディアン)
- QuickTimeなどの特定のライブラリの「OSStatus」エラーコード(整数、ホストエンディアン)[ 12 ]
- PalmOSではデータマネージャの下に作成者とリソースの種類が表示されます。[ 13 ]
参照
参考文献
- ^タイプ/クリエイターデータベース
- ^ 「Macintoshファイルの署名」 . Logiciels & Services Duhem . 2015年12月1日閲覧。
- ^モリソン、ジェリー(1985年1月14日)。「EA IFF 85」交換フォーマットファイルの標準。エレクトロニック・アーツ。
- ^ "GetFileInfo", Darwinリファレンス(manページ)、Apple
- ^ "SetFile", Darwinリファレンス(manページ)、Apple
- ^ online-metadata.com. 「コーデックタグとは?」コーデックタグとは?2019年6月9日閲覧。
- ^ "git.videolan.org Git - ffmpeg.git/blob - libavformat/isom.c" . git.videolan.org . 2019年6月9日閲覧。
- ^ “FFmpeg/FFmpeg search” . GitHub . 2019年6月9日閲覧。
- ^ "FFmpeg: libavcodec/raw.c ソースファイル" . ffmpeg.org . 2019年6月9日閲覧。
- ^ 「Cプリプロセッサ: 実装定義の動作」gcc.gnu.org 。
- ^「ACPI ID レジストリ」。uefi.org 。
- ^「OSStatus — Apple API エラー」www.osstatus.com。
- ^「Palm OS® プログラマーズ API リファレンス 第 30 章: データおよびリソース マネージャー」。palm.wiki 。
一般的な参考文献
- ISOBMFF規格群の公式登録機関
- Fleischman, E. (1998年6月). 「RFC2361 - WAVEおよびAVIコーデックレジストリ」 . Internet Assigned Numbers Authority (IANA).
- 「オーディオサブタイプGUID」。Microsoft 。 2017年2月23日閲覧。
- Kroon, Dirk-Jan (2011年2月16日). 「List Video Codecs, FourCC」 . MathWorks (2010年9月13日公開).
この関数GETFOURCCは、現在のWindowsインストールで利用可能なビデオエンコーダコーデックのリストを取得します。