diff options
| author | Even Rouault <even.rouault@spatialys.com> | 2017-07-06 01:47:40 +0200 |
|---|---|---|
| committer | Even Rouault <even.rouault@spatialys.com> | 2017-08-07 18:32:52 +0200 |
| commit | f58aab9d6a57e48bdc60e15dd373c24de74719a9 (patch) | |
| tree | 8c2153b701957850fc186d5fd74decc61e30220e /src/lib | |
| parent | 61fb5dd7f81c2e3dfabbb99f59dc89572d59fa37 (diff) | |
Add opj_image_data_alloc() / opj_image_data_free()
As bin/common/color.c used to directly call malloc()/free(), we need
to export functions dedicated to allocating/freeing image component data.
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/openjp2/image.c | 4 | ||||
| -rw-r--r-- | src/lib/openjp2/j2k.c | 6 | ||||
| -rw-r--r-- | src/lib/openjp2/openjpeg.c | 11 | ||||
| -rw-r--r-- | src/lib/openjp2/openjpeg.h | 21 | ||||
| -rw-r--r-- | src/lib/openjp2/tcd.c | 8 |
5 files changed, 41 insertions, 9 deletions
diff --git a/src/lib/openjp2/image.c b/src/lib/openjp2/image.c index ecd65ece..e29172b2 100644 --- a/src/lib/openjp2/image.c +++ b/src/lib/openjp2/image.c @@ -74,7 +74,7 @@ opj_image_t* OPJ_CALLCONV opj_image_create(OPJ_UINT32 numcmpts, opj_image_destroy(image); return NULL; } - comp->data = (OPJ_INT32*) opj_aligned_malloc( + comp->data = (OPJ_INT32*) opj_image_data_alloc( (size_t)comp->w * comp->h * sizeof(OPJ_INT32)); if (!comp->data) { /* TODO replace with event manager, breaks API */ @@ -99,7 +99,7 @@ void OPJ_CALLCONV opj_image_destroy(opj_image_t *image) for (compno = 0; compno < image->numcomps; compno++) { opj_image_comp_t *image_comp = &(image->comps[compno]); if (image_comp->data) { - opj_aligned_free(image_comp->data); + opj_image_data_free(image_comp->data); } } opj_free(image->comps); diff --git a/src/lib/openjp2/j2k.c b/src/lib/openjp2/j2k.c index afbcc9c5..9de69cec 100644 --- a/src/lib/openjp2/j2k.c +++ b/src/lib/openjp2/j2k.c @@ -8803,7 +8803,7 @@ static OPJ_BOOL opj_j2k_update_image_data(opj_tcd_t * p_tcd, OPJ_BYTE * p_data, /* would overflow */ return OPJ_FALSE; } - l_img_comp_dest->data = (OPJ_INT32*) opj_aligned_malloc(l_width * l_height * + l_img_comp_dest->data = (OPJ_INT32*) opj_image_data_alloc(l_width * l_height * sizeof(OPJ_INT32)); if (! l_img_comp_dest->data) { return OPJ_FALSE; @@ -10419,7 +10419,7 @@ static OPJ_BOOL opj_j2k_decode_tiles(opj_j2k_t *p_j2k, /* Transfer TCD data to output image data */ for (i = 0; i < p_j2k->m_output_image->numcomps; i++) { - opj_aligned_free(p_j2k->m_output_image->comps[i].data); + opj_image_data_free(p_j2k->m_output_image->comps[i].data); p_j2k->m_output_image->comps[i].data = p_j2k->m_tcd->tcd_image->tiles->comps[i].data; p_j2k->m_output_image->comps[i].resno_decoded = @@ -10824,7 +10824,7 @@ OPJ_BOOL opj_j2k_get_tile(opj_j2k_t *p_j2k, p_j2k->m_output_image->comps[compno].resno_decoded; if (p_image->comps[compno].data) { - opj_aligned_free(p_image->comps[compno].data); + opj_image_data_free(p_image->comps[compno].data); } p_image->comps[compno].data = p_j2k->m_output_image->comps[compno].data; diff --git a/src/lib/openjp2/openjpeg.c b/src/lib/openjp2/openjpeg.c index 0071c03d..8293a58d 100644 --- a/src/lib/openjp2/openjpeg.c +++ b/src/lib/openjp2/openjpeg.c @@ -1007,3 +1007,14 @@ opj_stream_t* OPJ_CALLCONV opj_stream_create_file_stream( return l_stream; } + + +void* OPJ_CALLCONV opj_image_data_alloc(OPJ_SIZE_T size) +{ + return opj_aligned_malloc(size); +} + +void OPJ_CALLCONV opj_image_data_free(void* ptr) +{ + opj_aligned_free(ptr); +} diff --git a/src/lib/openjp2/openjpeg.h b/src/lib/openjp2/openjpeg.h index 0aea383b..5fbf7ac3 100644 --- a/src/lib/openjp2/openjpeg.h +++ b/src/lib/openjp2/openjpeg.h @@ -1093,6 +1093,27 @@ OPJ_API void OPJ_CALLCONV opj_image_destroy(opj_image_t *image); OPJ_API opj_image_t* OPJ_CALLCONV opj_image_tile_create(OPJ_UINT32 numcmpts, opj_image_cmptparm_t *cmptparms, OPJ_COLOR_SPACE clrspc); +/** + * Allocator for opj_image_t->comps[].data + * To be paired with opj_image_data_free. + * + * @param size number of bytes to allocate + * + * @return a new pointer if successful, NULL otherwise. + * @since 2.2.0 +*/ +OPJ_API void* OPJ_CALLCONV opj_image_data_alloc(OPJ_SIZE_T size); + +/** + * Destructor for opj_image_t->comps[].data + * To be paired with opj_image_data_alloc. + * + * @param ptr Pointer to free + * + * @since 2.2.0 +*/ +OPJ_API void OPJ_CALLCONV opj_image_data_free(void* ptr); + /* ========================================================== stream functions definitions diff --git a/src/lib/openjp2/tcd.c b/src/lib/openjp2/tcd.c index 1213bffe..2189dcc3 100644 --- a/src/lib/openjp2/tcd.c +++ b/src/lib/openjp2/tcd.c @@ -674,7 +674,7 @@ OPJ_BOOL opj_alloc_tile_component_data(opj_tcd_tilecomp_t *l_tilec) if ((l_tilec->data == 00) || ((l_tilec->data_size_needed > l_tilec->data_size) && (l_tilec->ownsData == OPJ_FALSE))) { - l_tilec->data = (OPJ_INT32 *) opj_aligned_malloc(l_tilec->data_size_needed); + l_tilec->data = (OPJ_INT32 *) opj_image_data_alloc(l_tilec->data_size_needed); if (! l_tilec->data) { return OPJ_FALSE; } @@ -683,8 +683,8 @@ OPJ_BOOL opj_alloc_tile_component_data(opj_tcd_tilecomp_t *l_tilec) l_tilec->ownsData = OPJ_TRUE; } else if (l_tilec->data_size_needed > l_tilec->data_size) { /* We don't need to keep old data */ - opj_aligned_free(l_tilec->data); - l_tilec->data = (OPJ_INT32 *) opj_aligned_malloc(l_tilec->data_size_needed); + opj_image_data_free(l_tilec->data); + l_tilec->data = (OPJ_INT32 *) opj_image_data_alloc(l_tilec->data_size_needed); if (! l_tilec->data) { l_tilec->data_size = 0; l_tilec->data_size_needed = 0; @@ -1645,7 +1645,7 @@ static void opj_tcd_free_tile(opj_tcd_t *p_tcd) } if (l_tile_comp->ownsData && l_tile_comp->data) { - opj_aligned_free(l_tile_comp->data); + opj_image_data_free(l_tile_comp->data); l_tile_comp->data = 00; l_tile_comp->ownsData = 0; l_tile_comp->data_size = 0; |
