diff options
| author | Francois-Olivier Devaux <fodevaux@users.noreply.github.com> | 2007-10-10 06:17:28 +0000 |
|---|---|---|
| committer | Francois-Olivier Devaux <fodevaux@users.noreply.github.com> | 2007-10-10 06:17:28 +0000 |
| commit | ab0473aa42c3a069a0101f9dbbef1557635dca2b (patch) | |
| tree | 1691f3bc785c0fc254cc75a3b3a4fdfaa2ce4c47 | |
| parent | 4b60f17bba1f1201738ca5f3c760f68ffd301bf2 (diff) | |
*Patch from Callum Lewick. Clean up of j2klib.h for the aligned malloc stuff.
*convert.c: Changed some error comments for TIFF images
| -rw-r--r-- | ChangeLog | 5 | ||||
| -rw-r--r-- | codec/convert.c | 10 | ||||
| -rw-r--r-- | libopenjpeg/j2k_lib.h | 74 |
3 files changed, 54 insertions, 35 deletions
@@ -5,6 +5,11 @@ What's New for OpenJPEG ! : changed + : added +October 10, 2007 +* [FOD] Patch from Callum Lewick. Clean up of j2klib.h for the aligned malloc stuff. + It makes it work right with mingw, as _mm_malloc() isn't a macro, attempts to pave the way to using cmake to check for this stuff and combines a patch from Dana Fagerstrom at Sun that makes it use memalign() on Solaris + convert.c: Changed some error comments for TIFF images + September 27, 2007 * [FOD] Patch from Callum Lewick. Fixed dwt.c where an alignment in buffer was problematic under x86_64. diff --git a/codec/convert.c b/codec/convert.c index ff95001f..c120c249 100644 --- a/codec/convert.c +++ b/codec/convert.c @@ -1714,7 +1714,7 @@ int imagetotif(opj_image_t * image, const char *outfile) { break; } }else{ - fprintf(stderr,"Bits=%d, Only 8,12,16 bits implemented\n",image->comps[0].prec); + fprintf(stderr,"TIFF file creation. Bits=%d, Only 8,12,16 bits implemented\n",image->comps[0].prec); fprintf(stderr,"Aborting\n"); return 1; } @@ -1723,7 +1723,7 @@ int imagetotif(opj_image_t * image, const char *outfile) { _TIFFfree(buf); TIFFClose(tif); }else{ - fprintf(stderr,"False color format. Only RGB & Grayscale has been implemented\n"); + fprintf(stderr,"TIFF file creation. Bad color format. Only RGB & Grayscale has been implemented\n"); fprintf(stderr,"Aborting\n"); return 1; } @@ -1858,7 +1858,7 @@ opj_image_t* tiftoimage(const char *filename, opj_cparameters_t *parameters) } } else{ - fprintf(stderr,"Bits=%d, Only 8,12,16 bits implemented\n",Info.tiBps); + fprintf(stderr,"TIFF file creation. Bits=%d, Only 8,12,16 bits implemented\n",Info.tiBps); fprintf(stderr,"Aborting\n"); return NULL; } @@ -1936,7 +1936,7 @@ opj_image_t* tiftoimage(const char *filename, opj_cparameters_t *parameters) } } else{ - fprintf(stderr,"Bits=%d, Only 8,12,16 bits implemented\n",Info.tiBps); + fprintf(stderr,"TIFF file creation. Bits=%d, Only 8,12,16 bits implemented\n",Info.tiBps); fprintf(stderr,"Aborting\n"); return NULL; } @@ -1945,7 +1945,7 @@ opj_image_t* tiftoimage(const char *filename, opj_cparameters_t *parameters) _TIFFfree(buf); TIFFClose(tif); }else{ - fprintf(stderr,"False color format. Only RGB & Grayscale has been implemented\n"); + fprintf(stderr,"TIFF file creation. Bad color format. Only RGB & Grayscale has been implemented\n"); fprintf(stderr,"Aborting\n"); return NULL; } diff --git a/libopenjpeg/j2k_lib.h b/libopenjpeg/j2k_lib.h index bb936c8b..99f06196 100644 --- a/libopenjpeg/j2k_lib.h +++ b/libopenjpeg/j2k_lib.h @@ -61,43 +61,57 @@ Allocate memory aligned to a 16 byte boundry @param size Bytes to allocate @return Returns a void pointer to the allocated space, or NULL if there is insufficient memory available */ +/* FIXME: These should be set with cmake tests, but we're currently not requiring use of cmake */ #ifdef WIN32 - -#ifdef __GNUC__ -#include <mm_malloc.h> -#else /* MSVC, Intel C++ */ -#include <malloc.h> -#endif - -#ifdef _mm_malloc - #define opj_aligned_malloc(size) _mm_malloc(size, 16) - #else - #define opj_aligned_malloc(size) malloc(size) - #endif - - #ifdef _mm_free - #define opj_aligned_free(m) _mm_free(m) - #else - #define opj_aligned_free(m) free(m) - #endif - + /* Someone should tell the mingw people that their malloc.h ought to provide _mm_malloc() */ + #ifdef __GNUC__ + #include <mm_malloc.h> + #define HAVE_MM_MALLOC + #else /* MSVC, Intel C++ */ + #include <malloc.h> + #ifdef _mm_malloc + #define HAVE_MM_MALLOC + #endif + #endif #else /* Not WIN32 */ + #if defined(__sun) + #define HAVE_MEMALIGN + /* Linux x86_64 and OSX always align allocations to 16 bytes */ + #elif !defined(__amd64__) && !defined(__APPLE__) + /* FIXME: Yes, this is a big assumption */ + #define HAVE_POSIX_MEMALIGN + #endif +#endif -/* Linux x86_64 and OSX always align allocations to 16 bytes */ -#if defined(__amd64__) || defined(__APPLE__) #define opj_aligned_malloc(size) malloc(size) -#else -extern int posix_memalign (void **, size_t, size_t); - -static INLINE void* __attribute__ ((malloc)) opj_aligned_malloc(size_t size){ - void* mem = NULL; - posix_memalign(&mem, 16, size); - return mem; -} +#define opj_aligned_free(m) free(m) + +#ifdef HAVE_MM_MALLOC + #undef opj_aligned_malloc + #define opj_aligned_malloc(size) _mm_malloc(size, 16) + #undef opj_aligned_free + #define opj_aligned_free(m) _mm_free(m) #endif -#define opj_aligned_free(m) free(m) +#ifdef HAVE_MEMALIGN + extern void* memalign(size_t, size_t); + #undef opj_aligned_malloc + #define opj_aligned_malloc(size) memalign(16, (size)) + #undef opj_aligned_free + #define opj_aligned_free(m) free(m) +#endif +#ifdef HAVE_POSIX_MEMALIGN + #undef opj_aligned_malloc + extern int posix_memalign(void**, size_t, size_t); + + static INLINE void* __attribute__ ((malloc)) opj_aligned_malloc(size_t size){ + void* mem = NULL; + posix_memalign(&mem, 16, size); + return mem; + } + #undef opj_aligned_free + #define opj_aligned_free(m) free(m) #endif /** |
