FourCC ( «код-четыре символа») представляет собой последовательность из четырех байт (обычно ASCII ) , которые используются , чтобы однозначно идентифицировать форматы данных . Он возник из системы метаданных OSType или ResType, используемой в классической Mac OS, и был адаптирован для формата файлов обмена Amiga / Electronic Arts и его производных. Позднее эта идея была повторно использована для идентификации типов сжатых данных в QuickTime и DirectShow .
История
В 1984 году была выпущена самая ранняя версия ОС Macintosh, System 1 . Он использовал одноуровневую файловую систему Macintosh с полями метаданных, включая типы файлов , информацию о создателе (приложении) и вилки для хранения дополнительных ресурсов . Все эти поля представляют собой четырехзначные коды, известные как OSType. Эту информацию можно было изменить без изменения самих данных, чтобы их можно было интерпретировать по-разному. Во всей системе использовались одинаковые коды в качестве тегов типов для всех видов данных. [1] [2]
В 1985 году Electronic Arts представила мета-формат Interchange File Format (IFF) (семейство форматов файлов), первоначально разработанный для использования на Amiga . Эти файлы состояли из последовательности «фрагментов», которые могли содержать произвольные данные, причем каждому фрагменту предшествовал четырехбайтовый идентификатор. В спецификации IFF прямо упоминается, что истоки идеи FourCC лежат в Apple. [3]
Этот IFF был принят рядом разработчиков, включая Apple для файлов AIFF и Microsoft для файлов RIFF (которые использовались в качестве основы для файлов формата AVI и WAV ). Apple назвала многие из этих кодов OSTypes . Разработчики Microsoft и Windows называют свои четырехбайтовые идентификаторы FourCC или четырехсимвольными кодами. Коды FourCC также были приняты Microsoft для определения форматов данных, используемых в DirectX , в частности в DirectShow и DirectX Graphics.
В системах Apple
Начиная с Mac OS X Panther , сигнатуры OSType являются одним из нескольких источников, которые могут быть исследованы для определения унифицированного идентификатора типа и больше не используются в качестве сигнатуры первичного типа данных. Mac OS X (macOS) предпочитает более разговорные правила обозначения типов файлов с помощью расширений имен файлов. На момент внесения изменений это изменение вызвало большие споры среди старых пользователей, которые считали, что Apple возвращается к более примитивному способу, при котором метаданные теряются в имени файла.
Коды типов, связанные с файловой системой, недоступны для манипулирования пользователями, хотя их можно просматривать и изменять с помощью определенного программного обеспечения, в первую очередь инструментов командной строки MacOS GetFileInfo и SetFile, которые устанавливаются как часть инструментов разработчика в / Developer / Tools , или утилита ResEdit, доступная для старых компьютеров Mac. [4] [5]
Технические подробности
Последовательность байтов обычно ограничивается печатаемыми символами ASCII , с пробелами, зарезервированными для заполнения более коротких последовательностей. Чувствительность к регистру сохраняется, в отличие от расширений файлов . FourCCs иногда кодируются в шестнадцатеричном формате (например, «0x31637661» для «avc1») [6] [7] [8], а иногда кодируются в удобочитаемом виде (например, « mp4a »). Некоторый FourCCs однако, действительно содержат непечатаемые символы, и не читаемый человек без специального форматирования для отображения; например, 10-битное видео Y'CbCr 4: 2: 2 может иметь FourCC ('Y', '3', 10, 10) [9], который ffmpeg отображает как rawvideo (Y3[10] [10] / 0x0A0A3359), yuv422p10le
.
Четырехбайтовые идентификаторы полезны, потому что они могут состоять из четырех читаемых человеком символов с мнемоническими качествами, при этом вписываясь в четырехбайтовое пространство памяти, обычно выделяемое для целых чисел в 32-битных системах (хотя проблемы с порядком байтов могут сделать их менее читаемыми. ). Таким образом, коды можно эффективно использовать в программном коде как целые числа, а также давать подсказки в потоках двоичных данных при проверке.
Поддержка компилятора
FourCC записывается с прямым порядком байтов относительно базовой последовательности символов ASCII, поэтому при чтении в виде строки он отображается в правильном порядке байтов. Многие компиляторы C, включая GCC, определяют поведение многосимвольного литерала выравнивания по правому краю младшего байта, так что это '1234'
становится в ASCII. [10] Это обычный способ написания кодов FourCC, используемый программистами Mac OS для OSType. ( Классическая Mac OS была исключительно с прямым порядком байтов.)0x31323334
На машинах с прямым порядком байтов требуется перестановка байтов для значения, чтобы результат был правильным. Возьмем пример avc1 сверху: хотя литерал avc1 уже преобразуется в целочисленное значение 0x61766331 , машина с прямым порядком байтов изменила бы порядок байтов и сохранила бы значение как 31 63 76 61 . Чтобы получить правильную последовательность байтов 61 76 63 31 , предварительно замененное значение 0x31637661 используется.
Общее использование
Одним из наиболее известных способов использования FourCC является определение видеокодека или формата кодирования видео в файлах AVI. Общие идентификаторы включают DIVX , XVID и H264 . Для форматов кодирования звука файлы AVI и WAV используют двухбайтовый идентификатор, обычно записанный в шестнадцатеричном формате (например, 0055 для MP3 ). В файлах QuickTime к этим двухбайтовым идентификаторам добавляются буквы «мс», чтобы сформировать четырехсимвольный код. В файлах RealMedia также используются четырехсимвольные коды, однако фактические используемые коды отличаются от кодов, содержащихся в файлах AVI или QuickTime.
Другие форматы файлов, в которых важно использовать концепцию четырехбайтового идентификатора, - это формат стандартного файла MIDI (SMF), формат файла изображения PNG, формат файла сетки 3DS (3D Studio Max) и формат профиля ICC .
Другие варианты использования OSTypes:
- как коды гештальт- селектора
- как идентификаторы полей записи, а также идентификаторы типов и классов событий в AppleEvents
- для идентификации компонентов в диспетчере компонентов
- как идентификаторы «атома» в форматах файлов фильмов и изображений QuickTime
- как независимый от локализации способ определения стандартных папок в Менеджере папок
- в QuickDraw GX они использовались как типы gxTag, а также как типы элементов коллекции в диспетчере коллекций.
- как коды ошибок в определенных библиотеках, таких как QuickTime
Четырехсимвольные коды также используются в приложениях, отличных от форматов файлов, например:
- Форум UEFI для поставщиков в реестре идентификаторов ACPI [11]
- Спецификация ACPI определяет четырехсимвольные идентификаторы на исходном языке ACPI (ASL)
- Synopsys для передачи идентификатора компонента через регистры IP (коллекция DesignWare)
Смотрите также
- Расширение имени файла (также известное как «расширение файла»)
- Формат файла обмена
- Магическое число
- OSType
- код создателя
- код типа
Рекомендации
- ^ База данных типа / создателя
- ^ «Подписи файлов Macintosh» . Logiciels & Services Duhem . Проверено 1 декабря 2015 года .
- ^ Моррисон, Джерри (14 января 1985 г.). " " EA IFF 85 "Стандарт для файлов формата обмена" . Electronic Arts .
- ^ "GetFileInfo", справочник Дарвина ( справочная страница), Apple
- ^ "SetFile", справочник Дарвина ( справочная страница), Apple
- ^ online-metadata.com. "Что такое тег кодека?" . Что такое тег кодека? . Проверено 9 июня 2019 года .
- ^ "git.videolan.org Git - ffmpeg.git / blob - libavformat / isom.c" . git.videolan.org . Проверено 9 июня 2019 года .
- ^ «Поиск FFmpeg / FFmpeg» . GitHub . Проверено 9 июня 2019 года .
- ^ "FFmpeg: исходный файл libavcodec / raw.c" . ffmpeg.org . Проверено 9 июня 2019 года .
- ^ «Препроцессор C: поведение, определяемое реализацией» . gcc.gnu.org .
- ^ «Реестр идентификаторов ACPI» . uefi.org .
Общие ссылки
- Официальный орган регистрации семейства стандартов ISOBMFF
- Флейшман, Э. (июнь 1998 г.). «RFC2361 - Реестры кодеков WAVE и AVI» . Управление по распределению номеров в Интернете (IANA).
- «GUID подтипа аудио» . Microsoft . Проверено 23 февраля 2017 года .
- Крун, Дирк-Ян (16 февраля 2011 г.). «Список видеокодеков, FourCC» . MathWorks (опубликовано 13 сентября 2010 г.).
Эта функция GETFOURCC предоставляет список доступных кодеков видео кодека в текущей установке Windows.
- «Видеокодеки и форматы пикселей» . FourCC . Проверено 23 февраля 2017 года .