PostGIS  2.5.7dev-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 287 of file rt_band.c.

287  {
288  rt_band rtn = NULL;
289 
290  assert(band != NULL);
291 
292  /* offline */
293  if (band->offline) {
294  rtn = rt_band_new_offline(
295  band->width, band->height,
296  band->pixtype,
297  band->hasnodata, band->nodataval,
298  band->data.offline.bandNum, (const char *) band->data.offline.path
299  );
300  }
301  /* online */
302  else {
303  uint8_t *data = NULL;
304  data = rtalloc(rt_pixtype_size(band->pixtype) * band->width * band->height);
305  if (data == NULL) {
306  rterror("rt_band_duplicate: Out of memory allocating online band data");
307  return NULL;
308  }
309  memcpy(data, band->data.mem, rt_pixtype_size(band->pixtype) * band->width * band->height);
310 
311  rtn = rt_band_new_inline(
312  band->width, band->height,
313  band->pixtype,
314  band->hasnodata, band->nodataval,
315  data
316  );
317  rt_band_set_ownsdata_flag(rtn, 1); /* we DO own this data!!! */
318  }
319 
320  if (rtn == NULL) {
321  rterror("rt_band_duplicate: Could not copy band");
322  return NULL;
323  }
324 
325  return rtn;
326 }
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
int rt_pixtype_size(rt_pixtype pixtype)
Return size in bytes of a value in the given pixtype.
Definition: rt_pixel.c:39
band
Definition: ovdump.py:57
data
Definition: ovdump.py:103
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:63
void rt_band_set_ownsdata_flag(rt_band band, int flag)
Definition: rt_band.c:667
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:124
unsigned char uint8_t
Definition: uthash.h:79

References ovdump::band, ovdump::data, rt_band_new_inline(), rt_band_new_offline(), rt_band_set_ownsdata_flag(), rt_pixtype_size(), rtalloc(), and rterror().

Referenced by rt_raster_copy_band().

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