PDA

Voir la version complète : Libungif: Décoder des gifs


birslip
11/11/2005, 01h23
Salut, durant la longue absence de PA :o j'ai porter une lib bien pratique sur DS: la libungif (http://sourceforge.net/projects/libungif).
Ce quelle permet aujourd'hui: décoder une image de type gif (renommée en .bin dans le dossier data) dans un buffer, j'ai mis maximum 192 et 256, allez voir dans le fichier _gif.c il vous suffit uniquement de changer ça (car grâce aux pointeurs on conait la taille du tableau!) pour changer la taille du buffer. J'ai aussi mis ces dimensions pour coller avec la mémoire de la DS (BG_GFX avec la libnds) mais rien ne vous empèche de faire plus :D

Pour le téléchargement: linungif-10112005.zip (http://www.gp2xfr.info/images/upload/linungif-10112005.zip)
(et la rom (http://www.gp2xfr.info/images/upload/gif.zip))
Copie d'écran:
http://www.gp2xfr.info/images/upload/libungif.png

PS: J'ai pas encore mis au point le système de frame par seconde, donc la première image gif semble être lente, ce n'est pas du à la lenteur du décodage (bienqu'il mouline un peu en fullscreen ;)) mais à ce réglage, pour modifier la vitesse de défilement, dans le fichier _gif.c à la ligne 103 (for(m=0;m<6;m++) WaitForVblank();) il vous suffit de modifier 6 par ce que vous voulez :)

Voilà, si vous voulez plus d'explications :chapeau:

thoduv
11/11/2005, 12h21
Ouah ! Ca m'a l'air bien pratique tout ca ! Juste une petite question : est-ce seulement pour la DS, où je peux l'utiliser sur autre chose ?

birslip
11/11/2005, 12h34
Cette lib (http://sourceforge.net/projects/libungif) permet de décoder un gif vers un buffer, elle est écrite en C, donc elle est portable, sur la page du projet sourceforge, on peut télécharger la lib en entier, et il y a plusieurs exemples (gba, win32,...) donc biensur, elle est utilisable sur d'autre support :)

thoduv
11/11/2005, 12h37
Ok, ca va me servir. Donc pour l'instant les formats lisible sur DS/GBA sont le gif, le jpeg. Le png j'ai regardé la lib m'a l'air assez compliquée, donc assez dur à porter :| et pour le bmp je crois pas que ca ai été fait, donc je vais essayer de faire un petit truc.

Mollusk
11/11/2005, 12h56
Cette lib a été ajoutée à PAlib, ainsi que la lib Jpeg...

Concernant les modifications, j'ai ajouté une commande pour extraire dans un buffer d'une taille au choix, ainsi que le support pour du 16 bit (au lieu de l'éternel 8 bit), et aussi ca doit être un poil optimisé (supprimé quelques messages d'erreurs inutiles, accéléré un peu les copies en faisant les bits 4 par 4 au lieu de 2 par 2...)

Pour le bmp, j'ai commencé un truc vite fait, pareil, dans PAlib, donc si tu veux regarder de ce côté-là, aucun soucis, le code se met facilement sur une autre console... Par contre, j'ai que mis l'utilisation du mode 16 bit pour l'instant, j'ai pas encore regardé pour la gestion des palettes, mais je vais le faire la semaine prochaine normalement, ou peut-être cet après-midi, tiens :p Pareil que pour le gif, j'ai essayé d'optimiser un peu, mais comme le bmp c'est 'a l'envers' par rapport au format DS, c'est pas pratique...

thoduv
11/11/2005, 13h06
Oui ca m'avait surpris la première fois aussi que les BMP soient à l'envers ... Ca empêche de faire des copies DMA quoi ...

Mollusk
11/11/2005, 13h15
bah pour la copie DMA, de toute facon ca serait valable que pour les bmp 16 bit ou les 8bit, pour tous les autres faut s'adapter...

Pour les 24/32, c'est chiant, faut modifier les paramètres RGB pour coller avec la qualité de merde gba/DS, et virer le bit de l'alpha... enfin bon, c'est pas méchant, mais ca empeche le code d'etre super rapide, alors que bon, un bmp c'est pas du compressé...

thoduv
11/11/2005, 17h30
J'ai compilé la libpng sur DS, je suis en train d'essayer d'adapter les fonctions I/O. Je promets rien, mais ca serait cool que ca fonctionne. ;)

birslip
11/11/2005, 17h38
Pas mal :)
Moi j'ai pleins d'erreurs :(
Tu donneras les sources biensur? :p

Nesgba
11/11/2005, 18h00
Cette lib a été ajoutée à PAlib, ainsi que la lib Jpeg...

Concernant les modifications, j'ai ajouté une commande pour extraire dans un buffer d'une taille au choix, ainsi que le support pour du 16 bit (au lieu de l'éternel 8 bit), et aussi ca doit être un poil optimisé (supprimé quelques messages d'erreurs inutiles, accéléré un peu les copies en faisant les bits 4 par 4 au lieu de 2 par 2...)
tu veut que ca aille plus vite et tu veut passer en 16 bit y'a pas une contradiction quelque part la ? ^^ (d'ailleur j'ai jamais vu un gif en 16 bits moi XD)

quel est la meilleure compression au final
bmp+huffman, gif, jpeg ?

Mollusk
11/11/2005, 18h09
le gif en 16 bit, c'est juste parce que j'ai fait une fonction qui prend une image, choppe l'extension, et la charge (gif, jpeg, ou bmp) à l'écran, qu'il soit en 8 ou 16 bit, donc j'avais besoin du 16 bit (parce que pour les jpeg, c'était mieux...)

Concernant la compression, j'ai l'impression que si tu as un faible nombre de couleurs, le gif donne de tres bons résultats, mais sinon le jpeg a l'air mieux

Mollusk
11/11/2005, 18h10
Thoduv, j'achète ! enfin, j'aimerai pouvoir ajouté à PAlib, si ca te dérange pas :p ca fait quelle taille ?

Nesgba
11/11/2005, 18h37
Concernant la compression, j'ai l'impression que si tu as un faible nombre de couleurs, le gif donne de tres bons résultats, mais sinon le jpeg a l'air mieux

ben ca serai sur gba ce serai le format ideal pour les sprites 15 couleurs mais sur ds ca n'a que peut d'utilité :'{.

je planche sur un decopresseur divX en ce moment ca t'interesse ? ^^

birslip
11/11/2005, 18h39
ben ca serai sur gba ce serai le format ideal pour les sprites 15 couleurs mais sur ds ca n'a que peut d'utilité :'{.

je planche sur un decopresseur divX en ce moment ca t'interesse ? ^^
:chaise:
dis pas de connerie :unsure: (c'est un mensonge au moins? :| )

Nesgba
11/11/2005, 18h43
:chaise:
dis pas de connerie :unsure: (c'est un mensonge au moins? :| )

sur ?

thoduv
11/11/2005, 19h17
Thoduv, j'achète ! enfin, j'aimerai pouvoir ajouté à PAlib, si ca te dérange pas :p ca fait quelle taille ?

La libpng fait 150Ko. Ca compile, je suis en train d'essayer de faire marcher ca ...