ЧетыреCC
FourCC байтов («четырехсимвольный код») — это последовательность из четырех ( обычно ASCII ), используемая для уникальной идентификации форматов данных . Он возник на основе системы метаданных OSType или ResType, используемой в классической Mac OS, и был принят для Amiga / Electronic Arts формата файлов обмена и его производных. Позже идея была повторно использована для идентификации типов сжатых данных в 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 или четырехсимвольными кодами . Коды 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 записывается с прямым порядком байтов относительно базовой последовательности символов 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 Используется .
Обычное использование
[ редактировать ]Этот раздел нуждается в дополнительных цитатах для проверки . ( февраль 2024 г. ) |
Одним из наиболее известных применений FourCC является идентификация видеокодека или формата видеокодирования в файлах AVI. Общие идентификаторы включают DIVX , XVID и H264 . Для форматов аудиокодирования файлы AVI и WAV используют двухбайтовый идентификатор, обычно записанный в шестнадцатеричном формате (например, 0055 для MP3 ). В файлах QuickTime к этим двухбайтовым идентификаторам добавляются буквы «мс», образующие четырехзначный код. В файлах RealMedia также используются четырехсимвольные коды, однако фактические используемые коды отличаются от кодов, найденных в файлах AVI или QuickTime.
Другими форматами файлов, в которых важно использовать концепцию четырехбайтового идентификатора, являются формат стандартного MIDI-файла (SMF) , PNG формат файла изображения , формат файла сетки 3DS (3D Studio Max) и формат профиля ICC .
Четырехзначные коды также используются в приложениях, отличных от форматов файлов, например:
- Форум UEFI для поставщиков в реестре идентификаторов ACPI [11]
- Спецификация ACPI определяет четырехсимвольные идентификаторы на исходном языке ACPI (ASL).
- Synopsys для определения идентификатора компонента через регистры IP (коллекция DesignWare)
Другие варианты использования OSTypes включают:
- как идентификаторы полей записи, а также идентификаторы типов событий и классов в AppleEvents
- для идентификации компонентов в Диспетчере компонентов
- как идентификаторы «атомов» в QuickTime . форматах файлов фильмов и изображений
- как независимый от локализации способ идентификации стандартных папок в диспетчере папок.
- в QuickDraw GX они использовались как типы gxTag, а также как типы элементов коллекции в Менеджере коллекций.
- Константы перечисления в API Apple (как целое число; порядок байтов хоста)
- «OSStatus» Коды ошибок в некоторых библиотеках, таких как QuickTime (в виде целого числа; порядок байтов хоста) [12]
См. также
[ редактировать ]- Расширение имени файла (также известное как «расширение файла»)
- Формат файла обмена
- Магическое число
- Тип ОС
Ссылки
[ редактировать ]- ^ База данных типов/создателей
- ^ «Подписи файлов Macintosh» . Логика и услуги Дюэм . Проверено 1 декабря 2015 г.
- ^ Моррисон, Джерри (14 января 1985 г.). « Стандарт EA IFF 85 для файлов формата обмена» . Электронное искусство .
- ^ «GetFileInfo», справочник Дарвина (справочная страница), Apple
- ^ «SetFile», справочник Дарвина (справочная страница), Apple
- ^ онлайн-метаданные.com. «Что такое тег кодека?» . Что такое тег кодека? . Проверено 9 июня 2019 г.
- ^ «git.videolan.org Git — ffmpeg.git/blob — libavformat/isom.c» . git.videolan.org . Проверено 9 июня 2019 г.
- ^ «Поиск FFmpeg/FFmpeg» . Гитхаб . Проверено 9 июня 2019 г.
- ^ «FFmpeg: исходный файл libavcodec/raw.c» . ffmpeg.org . Проверено 9 июня 2019 г.
- ^ «Препроцессор C: поведение, определяемое реализацией» . gcc.gnu.org .
- ^ «Реестр идентификаторов ACPI» . uefi.org .
- ^ «OSStatus — ошибки Apple API» . www.osstatus.com .
Общие ссылки
[ редактировать ]- Официальный орган регистрации семейства стандартов ISOBMFF.
- Флейшман, Э. (июнь 1998 г.). «RFC2361 — реестры кодеков WAVE и AVI» . Управление по присвоению номеров в Интернете (IANA).
- «GUID подтипа аудио» . Майкрософт . Проверено 23 февраля 2017 г.
- Кроон, Дирк-Ян (16 февраля 2011 г.). «Список видеокодеков, FourCC» . MathWorks (опубликовано 13 сентября 2010 г.).
Эта функция GETFOURCC предоставляет список доступных кодеков видеокодеков в текущей установке Windows.