FourCC - FourCC

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

История

В 1984 году была выпущена самая ранняя версия ОС Macintosh, Система 1, был выпущен. Используется одноуровневый Файловая система Macintosh с полями метаданных, включая типы файлов, информация о создателе (приложении) и вилки для хранения Дополнительные ресурсы. Все эти поля представляют собой четырехзначные коды, известные как OSType. Эту информацию можно было изменить, не изменяя сами данные, чтобы их можно было интерпретировать по-разному. Идентичные коды использовались во всей системе в качестве тегов типов для всех видов данных.[1][2]

В 1985 г. Electronic Arts представил Формат файла обмена (IFF) мета-формат (семейство форматов файлов), изначально разработанный для использования на Amiga. Эти файлы состояли из последовательности «фрагментов», которые могли содержать произвольные данные, причем каждому фрагменту предшествовал четырехбайтовый идентификатор. В спецификации IFF прямо упоминается, что истоки идеи FourCC лежат в Apple.[3]

Этот МКФ был принят рядом разработчиков, в том числе яблоко за AIFF файлы и Microsoft за РИФФ файлы (которые были использованы в качестве основы для AVI и WAV формат файла). Apple назвала многие из этих кодов OSTypes. Microsoft и Windows разработчики называют свои четырехбайтовые идентификаторы FourCC или четырехсимвольными кодами. Коды FourCC также были приняты Microsoft для определения форматов данных, используемых в DirectX, особенно в DirectShow и DirectX Graphics.

В системах Apple

С Mac OS X Пантера, Сигнатуры OSType являются одним из нескольких источников, которые могут быть исследованы для определения Единый идентификатор типа и больше не используются в качестве сигнатуры первичного типа данных. Mac OS X (macOS) предпочитает более разговорные правила обозначения типов файлов с помощью расширений имен файлов. Во время изменения это изменение было источником больших споров среди старых пользователей, которые считали, что Apple возвращается к более примитивному способу, который неуместен. метаданные в имени файла.

Коды типов, связанные с файловой системой, недоступны для пользователей для манипуляции, хотя их можно просматривать и изменять с помощью определенного программного обеспечения, в первую очередь инструментов командной строки macOS GetFileInfo и SetFile которые устанавливаются как часть инструментов разработчика в /Инструменты разработчика, или 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-битный системы (хотя endian проблемы могут сделать их менее читаемыми). Таким образом, коды могут эффективно использоваться в программном коде как целые числа, а также давать подсказки в потоках двоичных данных при проверке.

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

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

На машинах с прямым порядком байтов требуется перестановка байтов для значения, чтобы результат был правильным. Взяв пример 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:

  • в качестве Гештальт коды выбора
  • как идентификаторы полей записи, а также идентификаторы типа и класса события в AppleСобытия
  • для идентификации компонентов в Менеджер компонентов
  • как идентификаторы «атома» в QuickTime форматы файлов фильмов и изображений
  • как независимый от локализации способ определения стандартных папок в Менеджере папок
  • в QuickDraw GX, они использовались как типы gxTag, а также как типы элементов коллекции в диспетчере коллекций.
  • в качестве коды ошибок в некоторых библиотеках, например QuickTime

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

Рекомендации

  1. ^ База данных типа / создателя
  2. ^ «Подписи файлов Macintosh». Logiciels & Services Duhem. Получено 1 декабря, 2015.
  3. ^ Моррисон, Джерри (14 января 1985 г.). ""EA IFF 85 "Стандарт файлов формата обмена". Electronic Arts.
  4. ^ "GetFileInfo", Ссылка на Дарвина (страница руководства), Apple
  5. ^ "SetFile", Ссылка на Дарвина (страница руководства), 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". GitHub. Получено 9 июня, 2019.
  9. ^ "FFmpeg: исходный файл libavcodec / raw.c". ffmpeg.org. Получено 9 июня, 2019.
  10. ^ «Препроцессор C: поведение, определяемое реализацией». gcc.gnu.org.

Общие ссылки