stringtranslate.com

FourCC

FourCC («четырехсимвольный код») — это последовательность из четырех байтов ( обычно ASCII ), используемая для уникальной идентификации форматов данных . Она произошла от системы метаданных OSType или ResType, используемой в классической Mac OS, и была принята для Amiga / Electronic Arts Interchange File Format и производных. Позднее эта идея была повторно использована для идентификации сжатых типов данных в QuickTime и DirectShow .

История

В 1984 году была выпущена самая ранняя версия ОС Macintosh, System 1. Она использовала одноуровневую файловую систему Macintosh с полями метаданных, включая типы файлов , информацию о создателе (приложении) и форки для хранения дополнительных ресурсов . Можно было изменять эту информацию, не изменяя сами данные, так что их можно было интерпретировать по-разному. Идентичные коды использовались во всей системе в качестве тегов типов для всех видов данных. [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 или Four-Character Codes . Коды 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 , а пробелы зарезервированы для заполнения более коротких последовательностей. Чувствительность к регистру сохраняется, в отличие от расширений файлов . Иногда FourCC кодируются в шестнадцатеричном формате (например, "0x31637661" для ' avc1 ') [6] [7] [8] а иногда кодируются в удобочитаемом виде (например, " mp4a "). Однако некоторые FourCC содержат непечатаемые символы и не удобочитаемы для человека без специального форматирования для отображения; например, 10-битное видео Y'CbCr 4:2:2 может иметь FourCC ('Y', '3', 10, 10) [9], который ffmpeg отображает как rawvideo (Y3[10] [10] / 0x0A0A3359), yuv422p10le.

Четырехбайтовые идентификаторы полезны, поскольку они могут состоять из четырех читаемых человеком символов с мнемоническими качествами, при этом все еще помещаясь в четырехбайтовое пространство памяти, обычно выделяемое для целых чисел в 32-битных системах (хотя проблемы с порядком байтов могут сделать их менее читаемыми). Таким образом, коды могут эффективно использоваться в программном коде как целые числа, а также давать подсказки в двоичных потоках данных при проверке.

Поддержка компилятора

FourCC записывается в big endian относительно базовой последовательности символов ASCII, так что он отображается в правильном порядке байтов при чтении в виде строки. Многие компиляторы C, включая GCC, определяют поведение многосимвольного литерала с выравниванием по правому краю до наименее значимого байта, так что он '1234'становится в ASCII. [10] Это общепринятый способ записи кодов FourCC, используемый программистами Mac OS для OSType. ( Классическая Mac OS была исключительно big endian.)0x31323334

На машинах с прямым порядком байтов для получения правильного результата требуется перестановка байтов в значении. Возьмем пример avc1 выше: хотя литерал 'avc1' уже преобразуется в целое значение 0x61766331 , машина с прямым порядком байтов изменила бы порядок байтов и сохранила бы значение как 31 63 76 61 . Чтобы получить правильную последовательность байтов 61 76 63 31 , используется предварительно переставленное значение 0x31637661 .

Распространенное использование

Одно из самых известных применений FourCC — идентификация видеокодека или формата видеокодирования в файлах AVI. Распространенные идентификаторы включают DIVX , XVID и H264 . Для форматов аудиокодирования файлы AVI и WAV используют двухбайтовый идентификатор, обычно записанный в шестнадцатеричном формате (например, 0055 для MP3 ). В файлах QuickTime эти двухбайтовые идентификаторы имеют префикс в виде букв «ms», образуя четырехсимвольный код. Файлы RealMedia также используют четырехсимвольные коды, однако фактически используемые коды отличаются от тех, которые встречаются в файлах AVI или QuickTime.

Другими форматами файлов, в которых широко используется концепция четырехбайтового идентификатора, являются формат стандартного файла MIDI (SMF) , формат файла изображения PNG , формат файла сетки 3DS (3D Studio Max) и формат профиля ICC .

Четырехсимвольные коды также используются в приложениях, отличных от форматов файлов, например:

Другие варианты использования OSTypes включают:

Смотрите также

Ссылки

  1. ^ База данных типов/создатели
  2. ^ "Signatures of Macintosh Files". Logiciels & Services Duhem . Получено 1 декабря 2015 г. .
  3. ^ Моррисон, Джерри (14 января 1985 г.). "Стандарт "EA IFF 85" для файлов формата обмена". Electronic Arts .
  4. ^ "GetFileInfo", справочник Darwin (страница руководства), Apple
  5. ^ "SetFile", справочник Darwin (страница руководства), Apple
  6. ^ online-metadata.com. "Что такое тег кодека?". Что такое тег кодека? . Получено 9 июня 2019 г. .
  7. ^ "git.videolan.org Git - ffmpeg.git/blob - libavformat/isom.c". git.videolan.org . Получено 9 июня 2019 г. .
  8. ^ "FFmpeg/FFmpeg search". GitHub . Получено 9 июня 2019 г.
  9. ^ "FFmpeg: libavcodec/raw.c Исходный файл". ffmpeg.org . Получено 9 июня 2019 г. .
  10. ^ "Препроцессор C: поведение, определяемое реализацией". gcc.gnu.org .
  11. ^ "Реестр идентификаторов ACPI". uefi.org .
  12. ^ "OSStatus — Ошибки API Apple". www.osstatus.com .

Общие ссылки