Servicios de formato de archivo de intercambio de recursos

El formato preferido para los archivos multimedia es el formato de archivo de intercambio de recursos (RIFF). Las funciones de E/S de archivos RIFF funcionan con los servicios básicos de E/S de archivos almacenados en búfer y sin búfer. Puede abrir, leer y escribir archivos RIFF de la misma manera que otros tipos de archivo. Para obtener información detallada sobre RIFF, vea FUNCIONES y macros AVIFile.

Los archivos RIFF usan códigos de cuatro caracteres para identificar elementos de archivo. Estos códigos son cantidades de 32 bits que representan una secuencia de uno a cuatro caracteres alfanuméricos ASCII, rellenados a la derecha con caracteres de espacio. El tipo de datos de los códigos de cuatro caracteres es FOURCC. Use la macro mmioFOURCC para convertir cuatro caracteres en un código de cuatro caracteres. Para convertir una cadena terminada en null en un código de cuatro caracteres, use la función mmioStringToFOURCC .

El bloque de creación básico de un archivo RIFF es un fragmento. Un fragmento es una unidad lógica de datos multimedia, como un único fotograma en un clip de vídeo. Cada fragmento contiene los campos siguientes:

  • Un código de cuatro caracteres que especifica el identificador del fragmento
  • Valor de doble palabra que especifica el tamaño del miembro de datos en el fragmento.
  • Un campo de datos

En la ilustración siguiente se muestra un fragmento "RIFF" que contiene dos subchunks.

Fragmento de riff que contiene dos subchunks image

Un fragmento contenido en otro fragmento es un subchunk. Los únicos fragmentos que pueden contener subchunks son aquellos con un identificador de fragmento de "RIFF" o "LIST". Un fragmento que contiene otro fragmento se denomina fragmento primario. El primer fragmento de un archivo RIFF debe ser un fragmento "RIFF". Todos los demás fragmentos del archivo son subchunks del fragmento "RIFF".

Los fragmentos "RIFF" incluyen un campo adicional en los cuatro primeros bytes del campo de datos. Este campo adicional proporciona el tipo de formulario del campo. El tipo de formulario es un código de cuatro caracteres que identifica el formato de los datos almacenados en el archivo. Por ejemplo, los archivos de audio de forma de onda de Microsoft tienen un tipo de formulario "WAVE".

Los fragmentos "LIST" también incluyen un campo adicional en los cuatro primeros bytes del campo de datos. Este campo adicional contiene el tipo de lista del campo. El tipo de lista es un código de cuatro caracteres que identifica el contenido de la lista. Por ejemplo, un fragmento "LIST" con un tipo de lista de "INFO" puede contener fragmentos "ICOP" y "ICRD" que proporcionan información sobre la fecha de creación y derechos de autor. En la ilustración siguiente se muestra un fragmento "RIFF" que contiene un fragmento "LIST" y otro subchunk (el fragmento "LIST" contiene dos subchunks).

fragmento de riff que contiene una imagen de fragmento de lista

Los servicios de E/S de archivos multimedia incluyen dos funciones que puede usar para navegar entre fragmentos en un archivo RIFF: mmioAscend y mmioDescend. Puede usar estas funciones como funciones de búsqueda de alto nivel. Al descender a un fragmento, la posición del archivo se establece en el campo de datos del fragmento (8 bytes desde el principio del fragmento). En el caso de los fragmentos "RIFF" y "LIST", la posición del archivo se establece en la ubicación que sigue al tipo de formulario o al tipo de lista (12 bytes desde el principio del fragmento). Cuando se sube fuera de un fragmento, la posición del archivo se establece en la ubicación que sigue al final del fragmento.

Para crear un nuevo fragmento, use la función mmioCreateChunk para escribir un encabezado de fragmento en la posición actual de un archivo abierto. Las funciones mmioAscend, mmioDescend y mmioCreateChunk usan la estructura MMCKINFO para especificar y recuperar información sobre fragmentos "RIFF".