source: Sophya/trunk/Poubelle/archTOI.old/compress.h@ 629

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

archtoi 2 aout 99

File size: 4.3 KB
RevLine 
[310]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
[342]19void compress_7_1(unsigned int4* in,unsigned int4*out,int n,int pasin);
[315]20void decompress_7_1(int4* in,int4*out,int n);
[310]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
[342]31void compress_4_1(unsigned int4* in,unsigned int4*out,int n,int pasin);
[315]32void decompress_4_1(int4* in,int4*out,int n);
[310]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
[342]44void compress_3_1(unsigned int4* in,unsigned int4*out,int n,int pasin);
[315]45void decompress_3_1(int4* in,int4*out,int n);
[310]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
[342]65void compress_7_2(unsigned int4* in,unsigned int4*out,int n,int pasin);
[315]66void decompress_7_2(int4* in,int4*out,int n);
[310]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
[342]80void compress_4_2(unsigned int4* in,unsigned int4*out,int n,int pasin);
[315]81void decompress_4_2(int4* in,int4*out,int n);
[310]82
83
84
85/************************************************************************/
86/*********** *********/
87/*********** definitions communes pour les compresseurs *********/
88/*********** *********/
89/************************************************************************/
90
[342]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) */
[310]95
[342]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);
[310]102
[342]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.