Narsil č. 06

Popis Formátu FLI

↑

Možná se vám to zdá podivné, ale jelikož předpokládám, že i mezi vámi se najdou nějací programátoři, a protože jsem si dal tu práci a přeložil animační formát používaný na IBM PC, který nese název FLI. Proč? Jelikož tento formát pracuje v rastru 320x200 (myslím formát vyrobený v roce 89, dnes už má pravděpodobně i něco navíc), pracuje s 256 barvami, a hlavně, protože autorem programu Autodesk Animator je Jim Kent. Ano, ten stejný Jim Kent co dělal Cyber Paint pro ATARI ST (o tom však píšeme na jiném místě dnešního čísla). Co z toho tedy vyplývá? Například k dnešnímu dni vzniklo na ST už asi 5 FLI přehravačů, a já udělal šestý. Toho se časem taktéž dočkáte ve snesitelné podobě. A pro přehrávání sekvencí uděláme i knihovnu do Omikron Basicu. Co by se dalo ještě říci, snad jen, že v balíku Autodesk Animatoru je také utilita Convert, a ta vám umožní skonvertovat SEQ sekvence právě do formátu FLI, takže pak už jen zbývá udělat si program na přehrávání FLI a budete spokojeni.

Popis FLI soubory je sice poměrně složitý, ale idea naopak velmi jednoduchá. Nač se zatěžovat zbytečným ukládáním jednotlivých částí obrazovky, když jsou stejné jako u předešlé. Nejenom že to ušetří místo, ale navíc je to velmi rychlé. Proč? Protože mnohem rychlejší metodou je body přeskočit, než je nastavovat.

FLI soubor má 128-byte hlavičku za níž následuje sekvence obrazků. První obrázek (pro počítačové grafiky taktéž frame) používá ke kompresi tzv. bytewise run-lenght compression scheme, tj. Bytově orientovanou úsekovou kompresi (FUJ! to je hrůza HEAD). U jednotlivých obrázků (následující za prvním frame) jsou ukládány pouze rozdílnosti od předcházejícího obrázků. (Občas můžete také spatřit první a i nějaký podobrázek nezapakovaný). V souboru se většinou nachází jeden extra frame, který navazuje na rozdíly mezi prvním a posledním obrázkem.

Hlavička FLI souboru:

size = velikost

name = jméno (jména nebudu z důvodu přenositelnosti překládát)

byte, size, name, Co to znamená?

offset

0, 4, size, Délka souboru. Záleží na progrmamu, jak se to dá využít?. Můžete například zjistit, jestli se animace vejde do paměti.

4, 2, magic, Nastav na hex AF11. Prosím nastav zde jinou hodnotu, jestliže budeš měnit formát soubor (stačí i rozlišení), tak zajistíš, že Autodesk Animator nebude při pokusu o čtení krachovat.

6, 2, frames, Počet frameů v FLI. Maximální počet je 4000.

8, 2, width, Šířka obrazovky (320).

10, 2, height, Výška obrazovky (200).

12, 2, depth, Počet vrstev bodů (8). Označuje v podstatě s kolika barvami animace pracuje. V tomto případě s 256.

14, 2, flags, Musí být 0. (Já viděl i tři, tak nevím HEAD)

16, 2, speed, Počet VBL přerušení mezi jednotlivými obrázky.

18, 4, next, Nastav na 0.

22, 4, frit, Nastav na 0.

26, 102, expand, Všechno nuly -- určeno pro budoucí rozšíření.

Následují jednotlivé framey, každý má svou vlastní hlavičku:

byte, size, name, Co to znamená?

offset

0, 4, size, Délka obrázku v bajtech. Autodesk Animator požaduje, aby to bylo méně než 64K.

4, 2, magic, Vždycky hexadecimalně F1FA

6, 2, chunks, Počet 'chunks' v obrázku.

8, 8, expand, Místo pro budoucí rozšíření. Všechno nuly.

Po hlavičce frameu přichází chunks, které určují vystavení obrázku. První je chunk pro barvy, jestliže byla paleta od posledního frameu změněna, pak přichází pixel chunk, který se objeví tehdy, je-li nějaká část obrázku změněna. Když bude frame absolutně identický s předcházejícím, tak nemusí být žádný chunk použit.

Každý chunk má svou vlastní hlavičku ,následovanou daty, která vypadá asi takhle:

byte, size, name, Co to znamená?

offset

0, 4, size Velikost chunku v bajtech.

4, 2, type Druh chunku (Podívej se dolů).

Ve FLI souboru můžeš obvykle spatřit následujících pět typů chunků:

number, name, Co to znamená? 11 FLI_COLOR Kompresovaný popis barev (color map).

12 FLI_LC ŕádkově orientovaná komprese. Je nejčastěji používaný typ ve většině frameů. Vyjímku tvoří první obraz. Jedná se o popsání rozdílů od předcházejícího obrázku.

13 FLI_BLACK Nastav celou obrazovku na barvu 0 (color 0) (vyskytuje se pouze na prvním obrázku).

15 FLI_BRUN Bytewise run-length komprese -- pouze (většinou) první frame.

16 FLI_COPY Označuje nezapakovanou 64000 byte dlouhoý frame. Brzy bude zabudována specialní komprese, zatím nefunguje (doufám že tě to ani nenapadne. Na ST je to celé skompresované, ale to nahrávání - Hrůza!).

Samotná komprese je bajtově orientovaná. Jestliže kompresovaná data mají lichou délku, pak je vložen tzv. pad byte, který zajistí, že FLI_COPY bude vždy startovat na sudé adrese kvůli rychlejšímu DMA.

FLI_COLOR Chunks

První word (slovo) je počet balíků v tomto chunku. Potom následují samotné balíky. První byte balíku říka, jak mnoho barev budeme v COLOR MAPĚ přeskakovat. Následující byte označuje počet měněných barev. Jestliže je to nula, pak to značí 256, tedy všechny. Dále se vypisují vždy tři byte pro každou barvu (jeden pro červenou, zelenou, modrou).

FLI_LC Chunks

Toto je nejpoužívanější a bohužel také nejsložitejší chunk. První slovo (word (16 bitů - pro bitově orientované) - pro anglicky orientované, tedy mě HEAD) je číslo řádku počítané od zhora obrazovky (Využití spočívá v tom, že animace například běhá pouze po spodu obrazovky, tak sem dáš 199 a prvních 199 řádků se nezmění).Další slovo označuje počet řádků, které budou měněny, dále už jsou je vlastní data pro měněné řádky. Každý řádek je pakován samostatně, mimo jiné to umožňuje mnohem jednoduššeji přehrávat FLI ve zmenšené velikosti.

První byte zapakovaného řádku je počet balíků v tomto řádku. Jestliže je řádek nezměněn, tak je počet nastaven na 0. Formát pro jeden balík:

skip_count - velikost přeskočení

size_count - počítadlo

data

Velikost přeskočení je jeden byte. Při přeskočení vetším než 255 bodů to musí být zapsáno do dvou balíků. Velikost počítadla je také jeden byte. Při nastaveném kladném počítadle se všechna následující data balíku překopírují za sebou na obrazovku, naopak při záporném počítadle se překopíruje vždy jeden byte a následuje opakování přeskočení a kopírování tolikrát, na kolik je počítadlo nastavené.

V nejhorším případě může mít FLI_LC obrázek okolo 70Kb. Jestliže k tomu dojde a frame má více než 59999 byte, tak se Autodesk Animator rozodne, zda-li by nebylo užitečnejší uložit frame jako FLI_COPY.

FLI_BLACK Chunks

Je zcela stupidní. Není použito žádné združování dat. Ve skutečnosti se generuje pouze na prvním frameu v Autodesk Animatoru po použití NEW v FLIC menu.

FLI_BRUN Chunks

V mnohém shodné s FLI_LC chunky, avšak bez přeskoků. Data začínají vždy od prvního řádku bezprostředně po hlavičce chunku a pokračují řádek po řádku. První byte označuje počet balíků v řádku. Formát po balík je:

size_count

data

Jestliže je size_count kladný, jedná se o opakované kopírování jednoho byte size_count krát. Jestliže je size_count záporný, pak dojde ke kopírování dat z chunku na obrazovku. Počet zkopírovaných byte je uložen v size_count.

Když dojde k tomu, že jsou zkompresovaná data delší než 59999 byte, tak se frame uloží jako FLI_COPY.

FLI_COPY Chunks

Zde je vždy 64000 byte dat pro uložení přímo na obrazovku.

Doufám, že už je to jasné, a když ne, tak si počkejte, až uvedu svůj konverzní program i s knihovnou pro Omikron Basic, a pak budete v pohodě.

HEAD