Un FourCC ("código de cuatro caracteres") es una secuencia de cuatro bytes (normalmente ASCII ) que se utiliza para identificar de forma única los formatos de datos . Tiene su origen en el sistema de metadatos OSType o ResType utilizado en el Mac OS clásico y se adoptó para el formato de archivo de intercambio Amiga / Electronic Arts y sus derivados. La idea se reutilizó posteriormente para identificar tipos de datos comprimidos en QuickTime y DirectShow .
En 1984 se lanzó la primera versión de un sistema operativo Macintosh, System 1. Utilizaba el sistema de archivos Macintosh de un solo nivel con campos de metadatos que incluían tipos de archivos , información del creador (aplicación) y bifurcaciones para almacenar recursos adicionales . Era posible cambiar esta información sin cambiar los datos en sí, de modo que pudieran interpretarse de manera diferente. Se usaban códigos idénticos en todo el sistema, como etiquetas de tipo para todo tipo de datos. [1] [2]
En 1985, Electronic Arts introdujo el metaformato (familia de formatos de archivo) Interchange File Format (IFF), ideado originalmente para su uso en Amiga . Estos archivos consistían en una secuencia de "fragmentos" que podían contener datos arbitrarios, cada uno de los cuales tenía como prefijo un identificador de cuatro bytes. La especificación IFF menciona explícitamente que los orígenes de la idea de FourCC se encuentran en Apple. [3]
Este IFF fue adoptado por varios desarrolladores, incluidos Apple para los archivos AIFF y Microsoft para los archivos RIFF (que se usaron como base para los formatos de archivo AVI y WAV ). Apple se refirió a muchos de estos códigos como OSTypes . Los desarrolladores de Microsoft y Windows se refieren a sus identificadores de cuatro bytes como FourCCs o Four-Character Codes . Microsoft también adoptó los códigos FourCC para identificar los formatos de datos utilizados en DirectX , específicamente dentro de DirectShow y DirectX Graphics.
Desde Mac OS X Panther , las firmas OSType son una de las diversas fuentes que se pueden examinar para determinar un Identificador de tipo uniforme y ya no se utilizan como la firma de tipo de datos principal. Mac OS X (macOS) prefiere la convención más coloquial de etiquetar los tipos de archivos mediante extensiones de nombre de archivo. En el momento del cambio, el cambio fue una fuente de gran controversia entre los usuarios más antiguos, que creían que Apple estaba volviendo a una forma más primitiva que coloca incorrectamente los metadatos en el nombre del archivo.
Los códigos de tipo asociados al sistema de archivos no son fácilmente accesibles para que los usuarios los manipulen, aunque se pueden ver y cambiar con cierto software, en particular las herramientas de línea de comandos de macOS GetFileInfo y SetFile que se instalan como parte de las herramientas para desarrolladores en /Developer/Tools , o la utilidad ResEdit disponible para Macs más antiguas. [4] [5]
La secuencia de bytes suele estar restringida a caracteres ASCII imprimibles , con caracteres de espacio reservados para rellenar secuencias más cortas. Se conserva la distinción entre mayúsculas y minúsculas, a diferencia de las extensiones de archivo . Los FourCC a veces se codifican en hexadecimal (p. ej., "0x31637661" para " avc1 ") [6] [7] [8] y a veces se codifican de forma legible para humanos (p. ej., " mp4a "). Sin embargo, algunos FourCC contienen caracteres no imprimibles y no son legibles para humanos sin un formato especial para su visualización; por ejemplo, el vídeo Y'CbCr 4:2:2 de 10 bits puede tener un FourCC de ('Y', '3', 10, 10) [9] que ffmpeg muestra como rawvideo (Y3[10] [10] / 0x0A0A3359), yuv422p10le
.
Los identificadores de cuatro bytes son útiles porque pueden estar compuestos por cuatro caracteres legibles por humanos con cualidades mnemotécnicas, y al mismo tiempo caben en el espacio de memoria de cuatro bytes que normalmente se asigna a los números enteros en los sistemas de 32 bits (aunque los problemas de endian pueden hacerlos menos legibles). Por lo tanto, los códigos se pueden usar de manera eficiente en el código del programa como números enteros, además de brindar pistas en flujos de datos binarios cuando se inspeccionan.
FourCC se escribe en big endian en relación con la secuencia de caracteres ASCII subyacente, de modo que aparece en el orden de bytes correcto cuando se lee como una cadena. Muchos compiladores de C, incluido GCC, definen un comportamiento literal de múltiples caracteres de alineación a la derecha con el byte menos significativo, de modo que '1234'
se convierte en ASCII. [10] Esta es la forma convencional de escribir códigos FourCC que utilizan los programadores de Mac OS para OSType. ( El Mac OS clásico era exclusivamente big endian).0x31323334
En las máquinas little-endian, se requiere un intercambio de bytes en el valor para que el resultado sea correcto. Tomando el ejemplo avc1 de arriba: aunque el literal 'avc1' ya se convierte al valor entero 0x61766331 , una máquina little-endian habría invertido el orden de bytes y almacenado el valor como 31 63 76 61 . Para obtener la secuencia de bytes correcta 61 76 63 31 , se utiliza el valor pre-intercambiado 0x31637661 .
Uno de los usos más conocidos de FourCC es identificar el códec de vídeo o el formato de codificación de vídeo en los archivos AVI. Los identificadores comunes incluyen DIVX , XVID y H264 . Para los formatos de codificación de audio , los archivos AVI y WAV utilizan un identificador de dos bytes, normalmente escrito en hexadecimal (como 0055 para MP3 ). En los archivos QuickTime, estos identificadores de dos bytes tienen como prefijo las letras "ms" para formar un código de cuatro caracteres. Los archivos RealMedia también utilizan códigos de cuatro caracteres; sin embargo, los códigos reales utilizados difieren de los que se encuentran en los archivos AVI o QuickTime.
Otros formatos de archivo que hacen un uso importante del concepto de ID de cuatro bytes son el formato de archivo MIDI estándar (SMF) , el formato de archivo de imagen PNG , el formato de archivo de malla 3DS (3D Studio Max) y el formato de perfil ICC .
Los códigos de cuatro caracteres también se utilizan en aplicaciones distintas a los formatos de archivo, por ejemplo:
Otros usos de OSTypes incluyen:
Esta función GETFOURCC ofrece una lista de los codificadores y códecs de vídeo disponibles en la instalación actual de Windows.