Serviços de Formato de Arquivo de Intercâmbio de Recursos

O formato preferencial para arquivos multimídia é o RIFF (formato de arquivo de intercâmbio de recursos). As funções de E/S do arquivo RIFF funcionam com os serviços básicos de E/S de arquivo em buffer e não armazenados. Você pode abrir, ler e gravar arquivos RIFF da mesma forma que outros tipos de arquivo. Para obter informações detalhadas sobre o RIFF, consulte As Funções e Macros do AVIFile.

Os arquivos RIFF usam códigos de quatro caracteres para identificar elementos de arquivo. Esses códigos são quantidades de 32 bits que representam uma sequência de um a quatro caracteres alfanuméricos ASCII, acolchoados à direita com caracteres de espaço. O tipo de dados para códigos de quatro caracteres é FOURCC. Use a macro mmioFOURCC para converter quatro caracteres em um código de quatro caracteres. Para converter uma cadeia de caracteres terminada em um código de quatro caracteres, use a função mmioStringToFOURCC .

O bloco de construção básico de um arquivo RIFF é uma parte. Uma parte é uma unidade lógica de dados multimídia, como um único quadro em um clipe de vídeo. Cada parte contém os seguintes campos:

  • Um código de quatro caracteres especificando o identificador de partes
  • Um valor de palavra dupla que especifica o tamanho do membro de dados na parte
  • Um campo de dados

A ilustração a seguir mostra um pedaço "RIFF" que contém dois subchunks.

riff chunk that contains two subchunks image

Uma parte contida em outra parte é um subchunk. As únicas partes com permissão para conter subchunks são aquelas com um identificador de partes de "RIFF" ou "LIST". Uma parte que contém outra parte é chamada de parte pai. A primeira parte em um arquivo RIFF deve ser uma parte "RIFF". Todas as outras partes do arquivo são subchunks da parte "RIFF".

As partes "RIFF" incluem um campo adicional nos quatro primeiros bytes do campo de dados. Este campo adicional fornece o tipo de formulário do campo. O tipo de formulário é um código de quatro caracteres que identifica o formato dos dados armazenados no arquivo. Por exemplo, os arquivos de áudio de forma de onda da Microsoft têm um tipo de formulário de "WAVE".

As partes "LIST" também incluem um campo adicional nos quatro primeiros bytes do campo de dados. Este campo adicional contém o tipo de lista do campo. O tipo de lista é um código de quatro caracteres que identifica o conteúdo da lista. Por exemplo, uma parte "LIST" com um tipo de lista de "INFO" pode conter partes "ICOP" e "ICRD" fornecendo informações de datas de criação e direitos autorais. A ilustração a seguir mostra um pedaço "RIFF" que contém uma parte "LIST" e um outro subchunk (a parte "LIST" contém dois subchunks).

riff chunk that contains a list chunk image

Os serviços de E/S do arquivo multimídia incluem duas funções que você pode usar para navegar entre partes em um arquivo RIFF: mmioAscend e mmioDescend. Você pode usar essas funções como funções de busca de alto nível. Quando você desce em uma parte, a posição do arquivo é definida como o campo de dados da parte (8 bytes desde o início da parte). Para partes "RIFF" e "LIST", a posição do arquivo é definida como o local após o tipo de formulário ou tipo de lista (12 bytes desde o início da parte). Quando você sobe de uma parte, a posição do arquivo é definida como o local após o final da parte.

Para criar uma nova parte, use a função mmioCreateChunk para gravar um cabeçalho de parte na posição atual em um arquivo aberto. As funções mmioAscend, mmioDescend e mmioCreateChunk usam a estrutura MMCKINFO para especificar e recuperar informações sobre partes "RIFF".