Informática Numaboa - Referências
IFF
Dom 8 Jul 2007 18:28 |
- Detalhes
- Categoria: Formatos padrão
- Atualização: Domingo, 08 Julho 2007 21:22
- Autor: vovó Vicki
- Acessos: 6964
IFF é o acrônimo de Interchage File Format, Formato de Arquivo Permutável. Para que serve isto? É para botar ordem na casa, facilitar a vida dos programadores e muito mais :thumbup:
A Electronic Arts
A Eletronic Arts é uma editora americana de jogos para computador e para videogames fundada em 1982. Esta empresa precisa ser elogiada porque facilitou a vida de programadores e usuários finais. Foi dela a idéia de criar o IFF, um padrão de formato de arquivos genérico. Além de estabelecer um critério de organização dos dados de arquivos, também publicou toda a documentação e o código fonte em C para criar e ler arquivos do tipo IFF.
Primeira coisa: o padrão é aberto, de conhecimento público e não depende de software proprietário - uma enorme vantagem. Segunda grande vantagem: arquivos deste tipo possuem uma vida útil muito prolongada porque, mantido o padrão, arquivos de dados antigos continuam compatíveis com softwares mais atuais. E, como todas as coisas boas são três, a terceira vantagem é que o padrão IFF pode ser ampliado para se criar novos padrões.
Bem, parece que a coisa é tão boa que até a Microsoft se rendeu aos encantos do IFF
O padrão dos padrões
Um arquivo IFF é um conjunto de dados dispostos de forma que possam ser lidos por vários programas, mesmo que não relacionados. Um arquivo IFF não pode conter dados pertencentes a um único programa (dados proprietários). Se um programa precisar de dados "pessoais", estes devem ser colocados de modo que outros programas possam "pular" estes dados.Existem vários tipos diferentes de arquivos IFF. Os mais conhecidos talvez sejam o GIFF, que armazena dados de imagens, e os WAVE, MIDI e AIFF, que guardam amostragens de som. Cada um destes arquivos precisa de uma identificação (ID) que garante que o arquivo é do tipo IFF, seguida por uma segunda ID que indica o tipo do arquivo.
Uma ID é composta por quatro caracteres ASCII, ou seja, por quatro bytes. Experimente abrir um arquivo GIF ou WAV num editor qualquer (até o bloco de notas do Windows serve). Existem alguns caracteres "legíveis", sempre em grupos de 4 - são as IDs.
Todo arquivo IFF precisa começar com uma das seguintes IDs (estão entre aspas para poder identificar o caractere espaço - ASCII 20): "FORM", "LIST" e "CAT ". Se uma destas IDs não estiver no início do arquivo, então ele não é IFF. Esta ID é conhecida como ID de grupo, ou seja, é uma "ID mestra" que agrupa outras IDs também conhecidas como chunks (nacos).
Logo depois da ID mestra vem um inteiro longo (isto é, um valor binário de 32 bits). Este inteiro indica quantos bytes existem no arquivo, excluídos os bytes da ID mestra e os dele mesmo, ou seja, o valor indica o tamanho do arquivo menos 8 bytes (4 da ID mestra e 4 para o valor de 32 bits).
Depois do inteiro longo vem a segunda ID (mais quatro letras) informando o tipo do arquivo IFF: por exemplo, AIFF ou WAVE para som. Somando os 4 bytes da segunda ID com os 8 bytes da ID mestra e da contagem de bytes (inteiro longo), temos um cabeçalho de 12 bytes. O que vem depois do cabeçalho depende do tipo de arquivo e pode variar. Veja um exemplo de cabeçalho AIFF:
46 4F 52 4D FORM 00 00 12 D4 Número de bytes de dados 41 49 46 46 AIFF
Uma coisa que todos os arquivos IFF possuem em comum depois do cabeçalho é que os dados são organizados em chunks. Um chunk ou naco é composto por uma ID, por um inteiro longo que informa quantos bytes de dados estão presentes no chunk e depois os dados propriamente ditos. Novamente, o inteiro longo não inclui a ID do chunk e ele próprio, apenas o número de bytes ocupados pelos dados.
Resumo da história: arquivos IFF são constituídos por um cabeçalho e por vários chunks (grupos de dados). Cada grupo de dados começa com uma ID e um inteiro longo que contém o número de bytes de dados do grupo.
Algumas particularidades
- Um chunk nunca pode ter um número ímpar de bytes de dados. Por exemplo, se o grupo CMAP de um arquivo do tipo ILBM (um tipo de imagem) tiver 3 bytes de dados, a estrutura fica assim:
CMAP ID do chunk 3 Quantidade de dados 0,1,33 <-------------------- NÃO ACONTECE CMAP ID do chunk 3 Quantidade de dados 0,1,33,0 <-------------------- DADOS AJUSTADOS
- FORM: é a ID mestra para arquivos IFF "normais" (som e imagem).
- CAT : é uma coleção de arquivos FORM colocados num único arquivo.
- LIST: é uma coleção de arquivos CAT colocados num único arquivo.
Big Endian e Little Endian
No formato IFF todos os valores de 16 e de 32 bits são armazenados na ordem Big Endian (Byte mais significativo primeiro e byte menos significativo no fim). Por exemplo, num arquivo AIFF:
46 4F 52 4D FORM 00 00 10 00 hex 00 00 10 00 ou 4096 decimal 41 49 46 46 AIFF
Isto foi feito porque arquivos IFF foram inicialmente usados em máquinas com CPU Motorola 68000. Aliás, este também é o motivo pelo qual os dados precisavam ser ajustados (vide exemplo acima). Pois bem, a Microsoft achou o formato IFF uma tetéia, só que o Windows foi feito para processadores Intel... e Intel usa Little Endian. Compare o exemplo a seguir com o anterior:
52 49 46 46 RIFF 02 01 00 00 hex 00 00 01 02 ou 258 decimal 57 41 56 45 WAVE
Pois bem, a Microsoft pregou o chinelo e criou o formato RIFF, onde os valores são armazenados na ordem Little Endian (é como se fosse ler de trás para frente). Costumo criticar a MS, mas esta alteração realmente foi necessária. Mas tem uma fofoca boa: como a MS adora afanar coisas, "criou" uma tal de ID mestra RIFX. Sabem o que vem a ser a RIFX? Apenas a FORM com outro nome! Ainda bem que não pegou, mas, caso você encontre uma tranqueira destas, é só trocar a ID mestra por FORM que fica tudo do mesmo tamanho... só que no formato original