[algo] codecs de compactage en C++

codecs de compactage en C++ [algo] - Algo - Programmation

Marsh Posté le 28-10-2002 à 15:52:45    

:hello:
voilà, on a un projet en C++ visant à créer un classe gérant quelques algo de compression/decompression type LZW, huffman (compactage plutot).
On a à notre disposition une classe gérant des flux de Bits écrite par notre prof (son utilisation ne parait pas indispensable, mais elle est là...).
 
Ma question est : un codec doit-il gérer des entrées/sorties? (lecture d'un fichier => compress/decompress => ecriture d'un fichier)
 ou bien travaille-t-on en mémoire centrale ?(on ouvre un fichier, on reserve de la mémoire :sweat: et on y copie le fichier au risque de faire du swap puis compress/etc ...)


Message édité par kaloskagatos le 28-10-2002 à 16:05:43

---------------
« Le hasard, c’est différent de la chance. Parce que la chance, je n'en ai jamais. »
Reply

Marsh Posté le 28-10-2002 à 15:52:45   

Reply

Marsh Posté le 28-10-2002 à 16:05:13    

l'était pas aguichant mon titre => reformule plus court
+ up :D


---------------
« Le hasard, c’est différent de la chance. Parce que la chance, je n'en ai jamais. »
Reply

Marsh Posté le 28-10-2002 à 16:07:54    

Pour moi, un codec doit prendre un flux (iostream), après, c'est celui qui utilise le codec qui voit si il faut passer un streambuf (en mémoire) ou un flux fichier (fstream).


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 28-10-2002 à 16:20:18    

merci, c'est un pas en avant :)
 
[HS] j'ai du mal à reconnaître ce que représente ton image associée...


---------------
« Le hasard, c’est différent de la chance. Parce que la chance, je n'en ai jamais. »
Reply

Marsh Posté le 28-10-2002 à 17:59:48    

Tu parles des codecs standards de windows ?
Pour eux, il y a juste une fonction à implanter dans une DLL. Pour l'encodage, l'appli te passe un pointeur vers les données à compresser (format bitmap standard), tu renvoies un pointeur sur les données compressées.
C'est tout, tu ne gère pas de fichier.

Reply

Marsh Posté le 28-10-2002 à 21:41:41    

mrbebert a écrit a écrit :

Tu parles des codecs standards de windows ?
Pour eux, il y a juste une fonction à implanter dans une DLL.



non c moi qui implémente les codecs
 
 

Citation :

Pour l'encodage, l'appli te passe un pointeur vers les données à compresser (format bitmap standard), tu renvoies un pointeur sur les données compressées.
C'est tout, tu ne gère pas de fichier.


 
 
donc tout se passe en mémoire
 
mais pour la partie encodage faut renvoyer les données avec en entête les dictionnaires et autres données particulières comme ça pèle mêle?
 
 en fait je renvois ce que j'écrirais dans un fichier sans l'écrire dans un fichier...
 
 
(je dois me prendre la tête pour des conneries en fait)


Message édité par kaloskagatos le 28-10-2002 à 21:42:23

---------------
« Le hasard, c’est différent de la chance. Parce que la chance, je n'en ai jamais. »
Reply

Marsh Posté le 28-10-2002 à 21:54:07    

kaloskagatos a écrit a écrit :

...
donc tout se passe en mémoire
 
mais pour la partie encodage faut renvoyer les données avec en entête les dictionnaires et autres données particulières comme ça pèle mêle?
 
 en fait je renvois ce que j'écrirais dans un fichier sans l'écrire dans un fichier...
 
 
(je dois me prendre la tête pour des conneries en fait)


Dans ton codec, tu reçois les données à compresser (au format bitmap), et tu renvoies un bloc de données que tu organises comme tu veux. C'est ce bloc que tu recevra, dans le même état, pour le décodage. A toi de faire en sorte d'y avoir mis tout ce dont tu as besoin.
Le traitement se fait image par image, mais tu peux réutiliser les données de l'image précédente (principe des keyframes).
 
Avant le codage ou le décodage, il y a d'autres appels de fonction pour déterminer la résolution/type de codage, initialiser les structures dont tu pourrais avoir besoin.
 
Tout ca se fait avec une seule fonction qui a le profil suivant :
LRESULT PASCAL DriverProc(DWORD dwDriverID, HDRVR hDriver, UINT uiMessage, LPARAM lParam1, LPARAM lParam2)
- uiMessage : le type de traitement que tu dois effectuer (ouverture, fermeture, compresser, décompresser.....)
- lParam1/lParam2 : les 2 paramètres. Généralement, ce sont des pointeurs sur une structure.
 
Toute la partie lecture/enregistrement de fichiers, ce n'est pas toi qui la gère, mais l'appli qui utilise ton codec.
 
Tu as un exemple de code source d'un codec ici :
http://www.divx-digest.tv/software [...] -2.1.1.zip


Message édité par mrbebert le 28-10-2002 à 22:00:13
Reply

Marsh Posté le 28-10-2002 à 22:05:39    

ok c tout bon g compris
 
(t'emballe pas trop avec les bitmaps pasque moi j'encode sans tenir compte du format, c du winzip si tu veux)


---------------
« Le hasard, c’est différent de la chance. Parce que la chance, je n'en ai jamais. »
Reply

Marsh Posté le 28-10-2002 à 22:13:02    

Je n'ai touché qu'aux codecs de compression video, c'est pour ca que je parle de bitmaps :D

Reply

Marsh Posté le 28-10-2002 à 22:16:54    

ok mais j'ai écouté ce que t'avais à me dire et j'en ai tiré de bonnes chose :jap:


---------------
« Le hasard, c’est différent de la chance. Parce que la chance, je n'en ai jamais. »
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed