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 armazenado em buffer e não armazenados em buffer. 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 AVIFile Functions and Macros.

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 nulo 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 que especifica o identificador de parte
  • 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 uma parte "RIFF" que contém dois subchunks.

parte do riff que contém duas imagem de subchunks

Uma parte contida em outra parte é um subchunk. As únicas partes permitidas para conter subchunks são aquelas com um identificador de parte 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 no arquivo são subchunks da parte "RIFF".

As partes "RIFF" incluem um campo adicional nos quatro primeiros bytes do campo de dados. Esse 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 waveform da Microsoft têm um tipo de formulário "WAVE".

As partes "LIST" também incluem um campo adicional nos quatro primeiros bytes do campo de dados. Esse 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 data de criação e direitos autorais. A ilustração a seguir mostra uma parte "RIFF" que contém uma parte "LIST" e um outro subchunk (a parte "LIST" contém dois subchunks).

parte do riff que contém uma imagem de parte da lista

Os serviços de E/S de 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 do 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 o tipo de lista (12 bytes desde o início da parte). Quando você sobe para fora 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".