FourCC
A FourCC ("four-character code") is a sequence of four bytes (typically ASCII) used to uniquely identify data formats. It originated from the OSType or ResType metadata system used in classic Mac OS and was adopted for the Amiga/Electronic Arts Interchange File Format and derivatives. The idea was later reused to identify compressed data types in QuickTime and DirectShow.
History
In 1984, the earliest version of a Macintosh OS, System 1, was released. It used the single-level Macintosh File System with metadata fields including file types, creator (application) information, and forks to store additional resources. It was possible to change this information without changing the data itself, so that they could be interpreted differently. Identical codes were used throughout the system, as type tags for all kinds of data.[1][2]
In 1985, Electronic Arts introduced the Interchange File Format (IFF) meta-format (family of file formats), originally devised for use on the Amiga. These files consisted of a sequence of "chunks", which could contain arbitrary data, each chunk prefixed by a four-byte ID. The IFF specification explicitly mentions that the origins of the FourCC idea lie with Apple.[3]
This IFF was adopted by a number of developers including
In Apple systems
Since
Filesystem-associated type codes are not readily accessible for users to manipulate, although they can be viewed and changed with certain software, most notably the macOS command line tools GetFileInfo and SetFile which are installed as part of the developer tools into /Developer/Tools, or the ResEdit utility available for older Macs.[4][5]
Technical details
The byte sequence is usually restricted to
rawvideo (Y3[10] [10] / 0x0A0A3359), yuv422p10le
.
Four-byte identifiers are useful because they can be made up of four human-readable characters with mnemonic qualities, while still fitting in the four-byte memory space typically allocated for integers in
Compiler support
FourCC is written in big endian relative to the underlying ASCII character sequence, so that it appears in the correct byte order when read as a string. Many C compilers, including GCC, define a multi-character literal behavior of right-aligning to the least significant byte, so that '1234'
becomes 0x31323334
in ASCII.[10] This is the conventional way of writing FourCC codes used by Mac OS programmers for OSType. (Classic Mac OS was exclusively big-endian.)
On little-endian machines, a byte-swap on the value is required to make the result correct. Taking the avc1 example from above: although the literal 'avc1' already converts to the integer value 0x61766331, a little-endian machine would have reversed the byte order and stored the value as 31 63 76 61. To yield the correct byte sequence 61 76 63 31, the pre-swapped value 0x31637661 is used.
Common uses
This section needs additional citations for verification. (February 2024) |
One of the most well-known uses of FourCCs is to identify the
Other file formats that make important use of the four-byte ID concept are the
profile format.Four-character codes are also used in applications other than file formats, for example:
- UEFI Forum for vendor in the ACPI ID Registry[11]
- ACPI specification defines four-character identifiers in ACPI Source Language (ASL)
- Synopsys to tell component ID via registers of an IP (DesignWare collection)
Other uses for OSTypes include:
- as record field IDs and event type and class IDs in AppleEvents
- for identifying components in the Component Manager
- as “atom” IDs in the QuickTime movie and image file formats
- as a localization-independent way of identifying standard folders in the Folder Manager
- in QuickDraw GX, they were used as gxTag types and also as types of collection items in the Collection Manager.
- Enumeration constants in Apple APIs (as an integer; host endianess)
- "OSStatus" error codes in certain libraries, such as QuickTime (as an integer; host endianess)[12]
See also
- Filename extension (also known as "file extension")
- Interchange File Format
- Magic number
- OSType
- creator code
- type code
References
- ^ The Type/Creator Database
- ^ "Signatures of Macintosh Files". Logiciels & Services Duhem. Retrieved December 1, 2015.
- ^ Morrison, Jerry (January 14, 1985). ""EA IFF 85" Standard for Interchange Format Files". Electronic Arts.
- ^ "GetFileInfo", Darwin reference (man page), Apple
- ^ "SetFile", Darwin reference (man page), Apple
- ^ online-metadata.com. "What Is A Codec Tag?". What Is A Codec Tag?. Retrieved June 9, 2019.
- ^ "git.videolan.org Git - ffmpeg.git/blob - libavformat/isom.c". git.videolan.org. Retrieved June 9, 2019.
- ^ "FFmpeg/FFmpeg search". GitHub. Retrieved June 9, 2019.
- ^ "FFmpeg: libavcodec/raw.c Source File". ffmpeg.org. Retrieved June 9, 2019.
- ^ "The C Preprocessor: Implementation-defined behavior". gcc.gnu.org.
- ^ "ACPI ID Registry". uefi.org.
- ^ "OSStatus — Apple API Errors". www.osstatus.com.
General references
- Official Registration Authority for the ISOBMFF family of standards
- Fleischman, E. (June 1998). "RFC2361 - WAVE and AVI Codec Registries". Internet Assigned Numbers Authority (IANA).
- "Audio Subtype GUIDs". Microsoft. Retrieved February 23, 2017.
- Kroon, Dirk-Jan (February 16, 2011). "List Video Codecs, FourCC". MathWorks (published September 13, 2010).
This function GETFOURCC gives a list of available Video encoder-codecs in the current Windows installation