PostGIS  2.5.0dev-r@@SVN_REVISION@@

◆ rt_band_duplicate()

rt_band rt_band_duplicate ( rt_band  band)

Create a new band duplicated from source band.

Memory is allocated for band path (if band is offline) or band data (if band is online). The caller is responsible for freeing the memory when the returned rt_band is destroyed.

Parameters
the band to duplicate
Returns
an rt_band or NULL on failure

Memory is allocated for band path (if band is offline) or band data (if band is online). The caller is responsible for freeing the memory when the returned rt_band is destroyed.

Parameters
the band to copy
Returns
an rt_band or NULL on failure

Definition at line 283 of file rt_band.c.

References ovdump::data, rt_band_t::data, rt_band_t::hasnodata, rt_band_t::height, rt_band_t::mem, rt_band_t::nodataval, rt_band_t::offline, rt_band_t::pixtype, rt_band_new_inline(), rt_band_new_offline(), rt_band_set_ownsdata_flag(), rt_pixtype_size(), rtalloc(), rterror(), and rt_band_t::width.

Referenced by rt_raster_copy_band().

283  {
284  rt_band rtn = NULL;
285 
286  assert(band != NULL);
287 
288  /* offline */
289  if (band->offline) {
290  rtn = rt_band_new_offline(
291  band->width, band->height,
292  band->pixtype,
293  band->hasnodata, band->nodataval,
294  band->data.offline.bandNum, (const char *) band->data.offline.path
295  );
296  }
297  /* online */
298  else {
299  uint8_t *data = NULL;
300  data = rtalloc(rt_pixtype_size(band->pixtype) * band->width * band->height);
301  if (data == NULL) {
302  rterror("rt_band_duplicate: Out of memory allocating online band data");
303  return NULL;
304  }
305  memcpy(data, band->data.mem, rt_pixtype_size(band->pixtype) * band->width * band->height);
306 
307  rtn = rt_band_new_inline(
308  band->width, band->height,
309  band->pixtype,
310  band->hasnodata, band->nodataval,
311  data
312  );
313  rt_band_set_ownsdata_flag(rtn, 1); /* we DO own this data!!! */
314  }
315 
316  if (rtn == NULL) {
317  rterror("rt_band_duplicate: Could not copy band");
318  return NULL;
319  }
320 
321  return rtn;
322 }
rt_band rt_band_new_offline(uint16_t width, uint16_t height, rt_pixtype pixtype, uint32_t hasnodata, double nodataval, uint8_t bandNum, const char *path)
Create an out-db rt_band.
Definition: rt_band.c:120
rt_pixtype pixtype
Definition: librtcore.h:2294
void rterror(const char *fmt,...)
Wrappers used for reporting errors and info.
Definition: rt_context.c:199
void * rtalloc(size_t size)
Wrappers used for managing memory.
Definition: rt_context.c:171
data
Definition: ovdump.py:103
uint16_t height
Definition: librtcore.h:2297
void rt_band_set_ownsdata_flag(rt_band band, int flag)
Definition: rt_band.c:619
double nodataval
Definition: librtcore.h:2301
uint16_t width
Definition: librtcore.h:2296
int rt_pixtype_size(rt_pixtype pixtype)
Return size in bytes of a value in the given pixtype.
Definition: rt_pixel.c:39
int32_t offline
Definition: librtcore.h:2295
void * mem
Definition: librtcore.h:2307
int32_t hasnodata
Definition: librtcore.h:2298
rt_band rt_band_new_inline(uint16_t width, uint16_t height, rt_pixtype pixtype, uint32_t hasnodata, double nodataval, uint8_t *data)
Create an in-db rt_band with no data.
Definition: rt_band.c:59
unsigned char uint8_t
Definition: uthash.h:79
union rt_band_t::@8 data
Here is the call graph for this function:
Here is the caller graph for this function: