PostGIS 3.7.0dev-r@@SVN_REVISION@@
Loading...
Searching...
No Matches

◆ rt_band_init_value()

void rt_band_init_value ( rt_band  band,
double  initval 
)

Fill in the cells of a band with a starting value frequently used to init with nodata value.

Parameters
band: band to initialize
initval: value to initialize with

Definition at line 113 of file rt_band.c.

116 {
117 assert(band != NULL);
118 assert(band->data.mem != NULL);
119 rt_pixtype pixtype = band->pixtype;
120 uint32_t width = band->width;
121 uint32_t height = band->height;
122 uint32_t numval = width * height;
123 void *mem = band->data.mem;
124 size_t memsize = numval * rt_pixtype_size(pixtype);
125
126 /* initialize to nodataval */
127 int32_t checkvalint = 0;
128 uint32_t checkvaluint = 0;
129 double checkvaldouble = 0;
130 float checkvalfloat = 0;
131
132 /* initialize to zero */
133 if (FLT_EQ(initval, 0.0)) {
134 memset(mem, 0, memsize);
135 return;
136 }
137
138 switch (pixtype) {
139 case PT_1BB:
140 {
141 uint8_t *ptr = mem;
142 uint8_t clamped_initval = rt_util_clamp_to_1BB(initval);
143 for (uint32_t i = 0; i < numval; i++)
144 ptr[i] = clamped_initval;
145 checkvalint = ptr[0];
146 break;
147 }
148 case PT_2BUI:
149 {
150 uint8_t *ptr = mem;
151 uint8_t clamped_initval = rt_util_clamp_to_2BUI(initval);
152 for (uint32_t i = 0; i < numval; i++)
153 ptr[i] = clamped_initval;
154 checkvalint = ptr[0];
155 break;
156 }
157 case PT_4BUI:
158 {
159 uint8_t *ptr = mem;
160 uint8_t clamped_initval = rt_util_clamp_to_4BUI(initval);
161 for (uint32_t i = 0; i < numval; i++)
162 ptr[i] = clamped_initval;
163 checkvalint = ptr[0];
164 break;
165 }
166 case PT_8BSI:
167 {
168 int8_t *ptr = mem;
169 int8_t clamped_initval = rt_util_clamp_to_8BSI(initval);
170 for (uint32_t i = 0; i < numval; i++)
171 ptr[i] = clamped_initval;
172 checkvalint = ptr[0];
173 break;
174 }
175 case PT_8BUI:
176 {
177 uint8_t *ptr = mem;
178 uint8_t clamped_initval = rt_util_clamp_to_8BUI(initval);
179 for (uint32_t i = 0; i < numval; i++)
180 ptr[i] = clamped_initval;
181 checkvalint = ptr[0];
182 break;
183 }
184 case PT_16BSI:
185 {
186 int16_t *ptr = mem;
187 int16_t clamped_initval = rt_util_clamp_to_16BSI(initval);
188 for (uint32_t i = 0; i < numval; i++)
189 ptr[i] = clamped_initval;
190 checkvalint = ptr[0];
191 break;
192 }
193 case PT_16BUI: {
194 uint16_t *ptr = mem;
195 uint16_t clamped_initval = rt_util_clamp_to_16BUI(initval);
196 for (uint32_t i = 0; i < numval; i++)
197 ptr[i] = clamped_initval;
198 checkvalint = ptr[0];
199 break;
200 }
201 case PT_16BF: {
202 uint16_t *ptr = mem;
203 float clamped_initval = rt_util_clamp_to_16F(initval);
204 uint16_t packed = rt_util_float_to_float16(clamped_initval);
205 for (uint32_t i = 0; i < numval; i++)
206 ptr[i] = packed;
207 checkvalfloat = rt_util_float16_to_float(ptr[0]);
208 break;
209 }
210 case PT_32BSI: {
211 int32_t *ptr = mem;
212 int32_t clamped_initval = rt_util_clamp_to_32BSI(initval);
213 for (uint32_t i = 0; i < numval; i++)
214 ptr[i] = clamped_initval;
215 checkvalint = ptr[0];
216 break;
217 }
218 case PT_32BUI:
219 {
220 uint32_t *ptr = mem;
221 uint32_t clamped_initval = rt_util_clamp_to_32BUI(initval);
222 for (uint32_t i = 0; i < numval; i++)
223 ptr[i] = clamped_initval;
224 checkvaluint = ptr[0];
225 break;
226 }
227 case PT_32BF:
228 {
229 float *ptr = mem;
230 float clamped_initval = rt_util_clamp_to_32F(initval);
231 for (uint32_t i = 0; i < numval; i++)
232 ptr[i] = clamped_initval;
233 checkvalfloat = ptr[0];
234 break;
235 }
236 case PT_64BF:
237 {
238 double *ptr = mem;
239 for (uint32_t i = 0; i < numval; i++)
240 ptr[i] = initval;
241 checkvaldouble = ptr[0];
242 break;
243 }
244 default:
245 {
246 rterror("%s: Unknown pixeltype %d", __func__, pixtype);
247 return;
248 }
249 }
250
251 /* Overflow checking */
253 initval,
254 checkvalint, checkvaluint,
255 checkvalfloat, checkvaldouble,
256 pixtype
257 );
258
259 return;
260}
void rterror(const char *fmt,...) __attribute__((format(printf
Wrappers used for reporting errors and info.
int8_t rt_util_clamp_to_8BSI(double value)
Definition rt_util.c:51
uint8_t rt_util_clamp_to_1BB(double value)
Definition rt_util.c:36
float rt_util_clamp_to_16F(double value)
Definition rt_util.c:88
int32_t rt_util_clamp_to_32BSI(double value)
Definition rt_util.c:71
uint16_t rt_util_float_to_float16(float value)
Definition rt_util.c:101
float rt_util_float16_to_float(uint16_t value)
Definition rt_util.c:134
rt_pixtype
Definition librtcore.h:188
@ PT_32BUI
Definition librtcore.h:197
@ PT_16BF
Definition librtcore.h:198
@ PT_2BUI
Definition librtcore.h:190
@ PT_32BSI
Definition librtcore.h:196
@ PT_4BUI
Definition librtcore.h:191
@ PT_32BF
Definition librtcore.h:199
@ PT_1BB
Definition librtcore.h:189
@ PT_16BUI
Definition librtcore.h:195
@ PT_8BSI
Definition librtcore.h:192
@ PT_16BSI
Definition librtcore.h:194
@ PT_64BF
Definition librtcore.h:200
@ PT_8BUI
Definition librtcore.h:193
int rt_util_dbl_trunc_warning(double initialvalue, int32_t checkvalint, uint32_t checkvaluint, float checkvalfloat, double checkvaldouble, rt_pixtype pixtype)
Definition rt_util.c:778
#define FLT_EQ(x, y)
Definition librtcore.h:2436
uint8_t rt_util_clamp_to_2BUI(double value)
Definition rt_util.c:41
uint8_t rt_util_clamp_to_8BUI(double value)
Definition rt_util.c:56
int16_t rt_util_clamp_to_16BSI(double value)
Definition rt_util.c:61
uint8_t rt_util_clamp_to_4BUI(double value)
Definition rt_util.c:46
uint16_t rt_util_clamp_to_16BUI(double value)
Definition rt_util.c:66
uint32_t rt_util_clamp_to_32BUI(double value)
Definition rt_util.c:76
float rt_util_clamp_to_32F(double value)
Definition rt_util.c:81
int rt_pixtype_size(rt_pixtype pixtype)
Return size in bytes of a value in the given pixtype.
Definition rt_pixel.c:40

References FLT_EQ, PT_16BF, PT_16BSI, PT_16BUI, PT_1BB, PT_2BUI, PT_32BF, PT_32BSI, PT_32BUI, PT_4BUI, PT_64BF, PT_8BSI, PT_8BUI, rt_pixtype_size(), rt_util_clamp_to_16BSI(), rt_util_clamp_to_16BUI(), rt_util_clamp_to_16F(), rt_util_clamp_to_1BB(), rt_util_clamp_to_2BUI(), rt_util_clamp_to_32BSI(), rt_util_clamp_to_32BUI(), rt_util_clamp_to_32F(), rt_util_clamp_to_4BUI(), rt_util_clamp_to_8BSI(), rt_util_clamp_to_8BUI(), rt_util_dbl_trunc_warning(), rt_util_float16_to_float(), rt_util_float_to_float16(), and rterror().

Referenced by rt_band_reclass(), rt_band_reclass_exact(), and rt_raster_generate_new_band().

Here is the call graph for this function:
Here is the caller graph for this function: