source: Sophya/trunk/Poubelle/archediab.old/prog_compression_unsigned/compress.h@ 641

Last change on this file since 641 was 641, checked in by ansari, 26 years ago

compression

File size: 4.3 KB
RevLine 
[641]1
2/************************************************************************/
3/******* *********/
4/******* compresseur de données rangées en ligne *********/
5/******* *********/
6/************************************************************************/
7
8
9
10
11/* comprime une suite de n valeures (dans des mots de 32 bit) */
12/* valeures codées sur 22 bit maximum */
13/* resultat de la compression codé sur 7 bit + exposant */
14/* n doit etre multiple de 4 */
15/* le fichier resultat a pour longueur n/4 + 1 mot de 32 bit */
16/* 4 * n octets ==> n + 4 octets */
17/* pour n = 72 en sortie 19 mots = 76 octets */
18
19void compress_7_1(unsigned long* in,unsigned long*out,int n,int pasin);
20void decompress_7_1(long* in,long*out,int n);
21
22
23/* comprime une suite de n valeures (dans des mots de 32 bit) */
24/* valeures codées sur 16 bit maximum */
25/* resultat de la compression codé sur 4 bit + exposant */
26/* n doit etre ( multiple de 7 ) + 2 */
27/* le fichier resultat a pour longueur (n-2)/7 + 1 mot de 32 bit */
28/* 4 * n octets ==> 4 * (n-2) / 7 + 4 octets */
29/* pour n = 72 en sortie 11 mots = 44 octets */
30
31void compress_4_1(unsigned long* in,unsigned long*out,int n,int pasin);
32void decompress_4_1(long* in,long*out,int n);
33
34
35/* comprime une suite de n valeures (dans des mots de 32 bit) */
36/* valeures codées sur 16 bit maximum */
37/* resultat de la compression codé sur 3 bit + exposant */
38/* n doit etre ( multiple de 9 ) */
39/* le fichier resultat a pour longueur n/9 + 1 mot de 32 bit */
40/* 4 * n octets ==> 4 * n / 9 + 4 octets */
41/* pour n = 72 en sortie 9 mots = 36 octets */
42
43
44void compress_3_1(unsigned long* in,unsigned long*out,int n,int pasin);
45void decompress_3_1(long* in,long*out,int n);
46
47/************************************************************************/
48/*********** *********/
49/*********** compresseur de données rangées par paires *********/
50/*********** (data bolo par exemple) *********/
51/*********** *********/
52/************************************************************************/
53
54
55
56/* comprime une suite de n valeures (dans des mots de 32 bit) */
57/* valeures codées sur 21 bit maximum */
58/* resultat de la compression codé sur 7 bit + exposant */
59/* n doit etre multiple de 4 */
60/* le fichier resultat a pour longueur n/4 + 1 mot de 32 bit */
61/* 4 * n octets ==> n + 4 octets */
62/* pour n = 72 en sortie 19 mots = 76 octets */
63
64
65void compress_7_2(unsigned long* in,unsigned long*out,int n,int pasin);
66void decompress_7_2(long* in,long*out,int n);
67
68
69
70/* comprime une suite de n valeures (dans des mots de 32 bit) */
71/* valeures codées sur 32 bit maximum */
72/* resultat de la compression codé sur 4 bit + exposant */
73/* n doit etre ( multiple de 7 ) + 2 */
74/* le fichier resultat a pour longueur (n-2)/7 + 2 mot de 32 bit */
75/* 4 * n octets ==> 4 * (n-2) / 7 + 8 octets */
76/* pour n = 72 en sortie 12 mots = 48 octets */
77
78
79
80void compress_4_2(unsigned long* in,unsigned long*out,int n,int pasin);
81void decompress_4_2(long* in,long*out,int n);
82
83
84
85/************************************************************************/
86/*********** *********/
87/*********** definitions communes pour les compresseurs *********/
88/*********** *********/
89/************************************************************************/
90
91/* tous les nombres sont des entiers unsigned long pour compress */
92/*Les valeures de la table d'entree sont consideres comme toujours positives et sur 21 bits */
93/* les valeurs de reference pour le calcul des ecarts sont augmentees de ecart_bit=0x10000000 */
94/* LES ECARTS SONT DES ENTIERS POSITIFS (ecart_bit + valeur courante - valeur precedente) */
95
96/* pour tous les compresseurs */
97#define kmax_ 15 /* valeur maximum de l'exposant */
98#define ecart_bit 0x10000000
99#define shif(ec,k,q) {while(ec>(q|ecart_bit))if(k<kmax_){k++;q<<=1;}else ec=(q|ecart_bit);while(ec<ecart_bit-q)if(k<kmax_){k++;q<<=1;}else ec=ecart_bit-q;}
100#define arrondi(ec,k) ((ec & filtre[k]) +( (ec & test[k]) <<1 ) ) /* resultat sur 28 bit */
101#define new_val(val,ec,k) ((val + arrondi(ec,k))&data_mask);
102
103/* pour les decompresseurs */
104#define recup(ec,sss,k) {ec=((R>>sss)&ecart_mask);if(ec & sgbi_ ) ec|= sign_ ; ec<<=k;}
105
Note: See TracBrowser for help on using the repository browser.