23 #if defined(__GNUC__) && !defined(GROK_SKIP_POISON)
24 #pragma GCC poison malloc calloc realloc free
44 void*
grkCalloc(
size_t numOfElements,
size_t sizeOfElements);
89 template<
typename T,
template<
typename TT>
typename A>
92 grkBuffer(T* buffer,
size_t off,
size_t length,
bool ownsData)
126 buf = A<T>::alloc(length);
184 GRK_WARN(
"grkBufferU8: attempt to increment buffer offset out of bounds");
195 if(
offset < (
size_t)(-off))
221 template<
typename T,
template<
typename TT>
typename A>
224 grkBuffer2d(T* buffer,
bool ownsData, uint32_t w, uint32_t strd, uint32_t h)
257 uint64_t data_size_needed = (uint64_t)
stride *
height() *
sizeof(T);
258 if(!data_size_needed)
262 grk::GRK_ERROR(
"Failed to allocate aligned memory buffer of dimensions %u x %u",
267 memset(this->
buf, 0, data_size_needed);
316 const uint32_t destStride)
336 const uint32_t srcStride)
344 bool copy_data(T* dest, uint32_t dest_w, uint32_t dest_h, uint32_t dest_stride)
const
346 assert(dest_w <=
width());
347 assert(dest_h <=
height());
348 assert(dest_stride <=
stride);
353 auto src_ptr = this->
buf;
354 auto dest_ptr = dest;
355 for(uint32_t j = 0; j < dest_h; ++j)
357 memcpy(dest_ptr, src_ptr, dest_w *
sizeof(T));
358 dest_ptr += dest_stride;
368 if(!inter.non_empty())
371 T* dest = this->
buf + (inter.y0 *
stride + inter.x0);
372 T* src = rhs.
buf + ((inter.y0 - rhs.
y0) * rhs.
stride + inter.x0 - rhs.
x0);
373 uint32_t
len = inter.width();
374 for(uint32_t j = inter.y0; j < inter.y1; ++j)
376 filter.copy(dest, src,
len);
#define SIZE_MAX
Definition: MemManager.cpp:30
Copyright (C) 2016-2021 Grok Image Compression Inc.
Definition: ICacheable.h:20
void grkAlignedFree(void *ptr)
Definition: MemManager.cpp:125
void grkFree(void *ptr)
Deallocates or frees a memory block.
Definition: MemManager.cpp:145
void GRK_ERROR(const char *fmt,...)
Definition: logger.cpp:58
void GRK_WARN(const char *fmt,...)
Definition: logger.cpp:49
void * grkAlignedMalloc(size_t size)
Allocate memory aligned to a 16 byte boundary.
Definition: MemManager.cpp:121
void * grkMalloc(size_t size)
Allocate an uninitialized memory block.
Definition: MemManager.cpp:106
void * grkCalloc(size_t num, size_t size)
Allocate a memory block with elements initialized to 0.
Definition: MemManager.cpp:113
void * grkRealloc(void *ptr, size_t new_size)
Reallocate memory blocks.
Definition: MemManager.cpp:138
uint32_t grkMakeAlignedWidth(uint32_t width)
Definition: MemManager.cpp:38
Definition: MemManager.h:79
void dealloc(T *buf)
Definition: MemManager.h:84
T * alloc(size_t length)
Definition: MemManager.h:80
Definition: MemManager.h:67
T * alloc(size_t length)
Definition: MemManager.h:68
void dealloc(T *buf)
Definition: MemManager.h:72
Definition: MemManager.h:223
bool copy_data(T *dest, uint32_t dest_w, uint32_t dest_h, uint32_t dest_stride) const
Definition: MemManager.h:344
grkBuffer2d(T *buffer, bool ownsData, uint32_t w, uint32_t strd, uint32_t h)
Definition: MemManager.h:224
grkBuffer2d(void)
Definition: MemManager.h:232
bool read(grkRectU32 window, int32_t *dest, const uint32_t destColStride, const uint32_t destStride)
Read the contents of a rectangular window into a user buffer.
Definition: MemManager.h:315
grkBuffer2d(const grkBuffer2d &rhs)
Definition: MemManager.h:233
void attach(T *buffer, uint32_t strd)
Definition: MemManager.h:273
bool write(grkRectU32 window, const int32_t *src, const uint32_t srcColStride, const uint32_t srcStride)
Write the contents of a rectangular window from a user buffer.
Definition: MemManager.h:335
grkBuffer2d & operator=(const grkBuffer2d &rhs)
Definition: MemManager.h:236
grkBuffer2d(const grkRectU32 *b)
Definition: MemManager.h:229
virtual ~grkBuffer2d()=default
bool isWindowValid(grkRectU32 win)
Returns whether window bounds are valid (non empty and within buffer bounds)
Definition: MemManager.h:299
grkBuffer2d & operator=(const grkBuffer2d *rhs)
Definition: MemManager.h:240
uint32_t stride
Definition: MemManager.h:385
grkBuffer2d(uint32_t w, uint32_t h)
Definition: MemManager.h:228
void acquire(T *buffer, uint32_t strd)
Definition: MemManager.h:279
void copy(const grkBuffer2d &rhs, F filter)
Definition: MemManager.h:365
T * getBuffer(void) const
Definition: MemManager.h:381
grkBuffer2d(uint32_t w, uint32_t strd, uint32_t h)
Definition: MemManager.h:227
bool alloc2d(bool clear)
Definition: MemManager.h:251
void transfer(T **buffer, uint32_t *strd)
Definition: MemManager.h:285
Definition: MemManager.h:91
void acquire(T *buffer)
Definition: MemManager.h:151
grkBuffer()
Definition: MemManager.h:96
grkBuffer(T *buffer, size_t length, bool ownsData)
Definition: MemManager.h:97
void incrementOffset(ptrdiff_t off)
Definition: MemManager.h:171
T * currPtr(void) const
Definition: MemManager.h:206
grkBuffer & operator=(const grkBuffer *rhs)
Definition: MemManager.h:110
void transfer(T **buffer)
Definition: MemManager.h:158
virtual ~grkBuffer()
Definition: MemManager.h:98
grkBuffer & operator=(const grkBuffer &rhs)
Definition: MemManager.h:106
bool owns_data
Definition: MemManager.h:215
size_t offset
Definition: MemManager.h:213
grkBuffer(T *buffer, size_t off, size_t length, bool ownsData)
Definition: MemManager.h:92
grkBuffer(const grkBuffer &rhs)
Definition: MemManager.h:102
virtual void dealloc()
Definition: MemManager.h:135
T * buf
Definition: MemManager.h:212
virtual bool alloc(size_t length)
Definition: MemManager.h:121
grkBuffer(T *buffer, size_t length)
Definition: MemManager.h:95
size_t remainingLength(void)
Definition: MemManager.h:167
void attach(T *buffer)
Definition: MemManager.h:145
size_t len
Definition: MemManager.h:214
uint32_t x1
Definition: util.h:96
uint32_t y0
Definition: util.h:96
grkRect< uint32_t > & operator=(const grkRect< uint32_t > &rhs)
Definition: util.h:129
uint32_t width() const
Definition: util.h:209
grkRect< uint32_t > intersection(const grkRect< uint32_t > rhs) const
Definition: util.h:173
uint32_t height() const
Definition: util.h:213
uint32_t y1
Definition: util.h:96
uint32_t x0
Definition: util.h:96