Mercurial > hg > wm
comparison Meerwald/param_stuff.c @ 3:acb6967ee76d
update to 0.5
author | Peter Meerwald <pmeerw@cosy.sbg.ac.at> |
---|---|
date | Tue, 14 Aug 2007 21:11:21 +0200 |
parents | |
children | f83ef905a63d |
comparison
equal
deleted
inserted
replaced
2:b92f06d9a967 | 3:acb6967ee76d |
---|---|
1 #ifdef PARAM_STUFF | |
2 { | |
3 #define MAXNALPHA 32 | |
4 | |
5 double alpha[MAXNALPHA]; | |
6 char *alpha_str = getenv("PARAM_ALPHA"); | |
7 double alpha_value; | |
8 int alpha_len = 0; | |
9 | |
10 int param_len[MAXNALPHA]; | |
11 char *param_len_str = getenv("PARAM_LEN"); | |
12 int param_len_value; | |
13 int param_len_len = 0; | |
14 int param_len_sum = 0; | |
15 | |
16 char buf[1024] = ""; | |
17 char *v; | |
18 | |
19 | |
20 if (alpha_str && strlen(alpha_str) < sizeof(buf) | |
21 && strcmp(alpha_str, "") ) { | |
22 | |
23 strcpy(buf, alpha_str); | |
24 | |
25 v = strtok(buf, "\",; "); | |
26 do { | |
27 | |
28 alpha_value = atof(v); | |
29 | |
30 if (alpha_value < -M_PI || alpha_value >= M_PI) { | |
31 fprintf(stderr, "%s: parametric - alpha %f out of range\n", | |
32 progname, alpha_value); | |
33 exit(1); | |
34 } | |
35 | |
36 alpha[alpha_len] = alpha_value; | |
37 alpha_len++; | |
38 } while (v = strtok(NULL, "\",; ")); | |
39 | |
40 | |
41 if( param_len_str && strlen(param_len_str) < sizeof(buf) | |
42 && strcmp(param_len_str, "") ) { | |
43 /* There was an parameter length environment variable. */ | |
44 | |
45 strcpy(buf, param_len_str); | |
46 | |
47 v = strtok(buf, "\",; "); | |
48 do { | |
49 | |
50 param_len_value = atoi(v); | |
51 | |
52 if (param_len_value <= 0) { | |
53 fprintf(stderr, "%s: parameter length %d out of range\n", | |
54 progname, param_len_value); | |
55 exit(1); | |
56 } | |
57 | |
58 param_len[param_len_len] = param_len_value; | |
59 param_len_len++; | |
60 param_len_sum += param_len_value; | |
61 | |
62 } while (v = strtok(NULL, "\",; ")); | |
63 | |
64 } else { | |
65 /* No length variable given. | |
66 For backward compatability we use all parameters for | |
67 one filter and therefore for all levels. | |
68 */ | |
69 | |
70 param_len[0] = alpha_len; | |
71 param_len_len = 1; | |
72 param_len_sum = alpha_len; | |
73 } | |
74 | |
75 | |
76 /* If we do not get a parameter length value for every | |
77 decomposition level then we reuse the last supplied value | |
78 for the remaining levels. | |
79 */ | |
80 if (param_len_len < level+1) { | |
81 int last_param_len = param_len[ param_len_len - 1 ]; | |
82 | |
83 for(; param_len_len < level+1; param_len_len++ ) { | |
84 param_len[ param_len_len ] = last_param_len; | |
85 param_len_sum += last_param_len; | |
86 } | |
87 } | |
88 | |
89 | |
90 /* If the number of supplied alphas is lower than is required | |
91 for by param_len then copy the last filter | |
92 parameters to the remaining levels. | |
93 */ | |
94 if( alpha_len < param_len_sum ) { | |
95 int i; | |
96 int last_param_len = param_len[ param_len_len - 1 ]; | |
97 int last_start = alpha_len - last_param_len; | |
98 | |
99 for( i=0; alpha_len < param_len_sum; alpha_len++, i++ ) { | |
100 alpha[ alpha_len ] = alpha[ last_start + (i % last_param_len) ]; | |
101 } | |
102 } | |
103 | |
104 if (verbose > 1) { | |
105 int i, j; | |
106 int cur_sum = 0; | |
107 | |
108 fprintf(stderr, "%s: parametric, number of levels: %d\n", | |
109 progname, level); | |
110 | |
111 for (i = 0; i < level+1; i++) { | |
112 | |
113 fprintf(stderr, " %d filter parameters for level %d: ", | |
114 param_len[i], i); | |
115 | |
116 for (j = 0; j < param_len[i]; j++) { | |
117 fprintf(stderr, "%f ", alpha[cur_sum + j]); | |
118 } | |
119 | |
120 fprintf(stderr, "\n"); | |
121 | |
122 cur_sum += param_len[i]; | |
123 } | |
124 } | |
125 | |
126 | |
127 dwt_param_filter(alpha, param_len); | |
128 | |
129 | |
130 } /* if( alpha_str... */ | |
131 } | |
132 #endif | |
133 |