Bug fixed by David Bruken. Fixed memory allocation issue in opj_malloc.h.
Possible errors in pi_create_encode handled
This commit is contained in:
parent
847b082b64
commit
287fb0b8fd
|
@ -5,6 +5,10 @@ What's New for OpenJPEG
|
||||||
! : changed
|
! : changed
|
||||||
+ : added
|
+ : added
|
||||||
|
|
||||||
|
December 21, 2007
|
||||||
|
* [FOD] Bug fixed by David Bruken. Fixed memory allocation issue in opj_malloc.h
|
||||||
|
! [FOD] Possible errors in pi_create_encode handled
|
||||||
|
|
||||||
December 19, 2007
|
December 19, 2007
|
||||||
* [Antonin] changed variables names alpha, beta, gamma, delta in dwt.c to avoid re-declarations on Macosx
|
* [Antonin] changed variables names alpha, beta, gamma, delta in dwt.c to avoid re-declarations on Macosx
|
||||||
! [Parvatha] In pi.c, removed the Recursive function pi_check_next_level() and modified the code.
|
! [Parvatha] In pi.c, removed the Recursive function pi_check_next_level() and modified the code.
|
||||||
|
|
|
@ -1,140 +1,145 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2005, Hervé Drolon, FreeImage Team
|
* Copyright (c) 2005, Hervé Drolon, FreeImage Team
|
||||||
* Copyright (c) 2007, Callum Lerwick <seg@haxxed.com>
|
* Copyright (c) 2007, Callum Lerwick <seg@haxxed.com>
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions
|
* modification, are permitted provided that the following conditions
|
||||||
* are met:
|
* are met:
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer.
|
* notice, this list of conditions and the following disclaimer.
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
* documentation and/or other materials provided with the distribution.
|
* documentation and/or other materials provided with the distribution.
|
||||||
*
|
*
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
|
||||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
* POSSIBILITY OF SUCH DAMAGE.
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
#ifndef __OPJ_MALLOC_H
|
#ifndef __OPJ_MALLOC_H
|
||||||
#define __OPJ_MALLOC_H
|
#define __OPJ_MALLOC_H
|
||||||
/**
|
/**
|
||||||
@file opj_malloc.h
|
@file opj_malloc.h
|
||||||
@brief Internal functions
|
@brief Internal functions
|
||||||
|
|
||||||
The functions in opj_malloc.h are internal utilities used for memory management.
|
The functions in opj_malloc.h are internal utilities used for memory management.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** @defgroup MISC MISC - Miscellaneous internal functions */
|
/** @defgroup MISC MISC - Miscellaneous internal functions */
|
||||||
/*@{*/
|
/*@{*/
|
||||||
|
|
||||||
/** @name Exported functions */
|
/** @name Exported functions */
|
||||||
/*@{*/
|
/*@{*/
|
||||||
/* ----------------------------------------------------------------------- */
|
/* ----------------------------------------------------------------------- */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Allocate an uninitialized memory block
|
Allocate an uninitialized memory block
|
||||||
@param size Bytes to allocate
|
@param size Bytes to allocate
|
||||||
@return Returns a void pointer to the allocated space, or NULL if there is insufficient memory available
|
@return Returns a void pointer to the allocated space, or NULL if there is insufficient memory available
|
||||||
*/
|
*/
|
||||||
#define opj_malloc(size) malloc(size)
|
#define opj_malloc(size) malloc(size)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Allocate a memory block with elements initialized to 0
|
Allocate a memory block with elements initialized to 0
|
||||||
@param num Blocks to allocate
|
@param num Blocks to allocate
|
||||||
@param size Bytes per block to allocate
|
@param size Bytes per block to allocate
|
||||||
@return Returns a void pointer to the allocated space, or NULL if there is insufficient memory available
|
@return Returns a void pointer to the allocated space, or NULL if there is insufficient memory available
|
||||||
*/
|
*/
|
||||||
#define opj_calloc(num, size) calloc(num, size)
|
#define opj_calloc(num, size) calloc(num, size)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Allocate memory aligned to a 16 byte boundry
|
Allocate memory aligned to a 16 byte boundry
|
||||||
@param size Bytes to allocate
|
@param size Bytes to allocate
|
||||||
@return Returns a void pointer to the allocated space, or NULL if there is insufficient memory available
|
@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 */
|
/* FIXME: These should be set with cmake tests, but we're currently not requiring use of cmake */
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
/* Someone should tell the mingw people that their malloc.h ought to provide _mm_malloc() */
|
/* Someone should tell the mingw people that their malloc.h ought to provide _mm_malloc() */
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
#include <mm_malloc.h>
|
#include <mm_malloc.h>
|
||||||
#define HAVE_MM_MALLOC
|
#define HAVE_MM_MALLOC
|
||||||
#else /* MSVC, Intel C++ */
|
#else /* MSVC, Intel C++ */
|
||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
#ifdef _mm_malloc
|
#ifdef _mm_malloc
|
||||||
#define HAVE_MM_MALLOC
|
#define HAVE_MM_MALLOC
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#else /* Not WIN32 */
|
#else /* Not WIN32 */
|
||||||
#if defined(__sun)
|
#if defined(__sun)
|
||||||
#define HAVE_MEMALIGN
|
#define HAVE_MEMALIGN
|
||||||
/* Linux x86_64 and OSX always align allocations to 16 bytes */
|
#elif defined(__GNUC__)
|
||||||
#elif !defined(__amd64__) && !defined(__APPLE__)
|
#define HAVE_MEMALIGN
|
||||||
/* FIXME: Yes, this is a big assumption */
|
#include <malloc.h>
|
||||||
#define HAVE_POSIX_MEMALIGN
|
/* Linux x86_64 and OSX always align allocations to 16 bytes */
|
||||||
#endif
|
#elif !defined(__amd64__) && !defined(__APPLE__)
|
||||||
#endif
|
/* FIXME: Yes, this is a big assumption */
|
||||||
|
#define HAVE_POSIX_MEMALIGN
|
||||||
#define opj_aligned_malloc(size) malloc(size)
|
#endif
|
||||||
#define opj_aligned_free(m) free(m)
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_MM_MALLOC
|
|
||||||
#undef opj_aligned_malloc
|
|
||||||
#define opj_aligned_malloc(size) _mm_malloc(size, 16)
|
#define opj_aligned_malloc(size) malloc(size)
|
||||||
#undef opj_aligned_free
|
#define opj_aligned_free(m) free(m)
|
||||||
#define opj_aligned_free(m) _mm_free(m)
|
|
||||||
#endif
|
#ifdef HAVE_MM_MALLOC
|
||||||
|
#undef opj_aligned_malloc
|
||||||
#ifdef HAVE_MEMALIGN
|
#define opj_aligned_malloc(size) _mm_malloc(size, 16)
|
||||||
extern void* memalign(size_t, size_t);
|
#undef opj_aligned_free
|
||||||
#undef opj_aligned_malloc
|
#define opj_aligned_free(m) _mm_free(m)
|
||||||
#define opj_aligned_malloc(size) memalign(16, (size))
|
#endif
|
||||||
#undef opj_aligned_free
|
|
||||||
#define opj_aligned_free(m) free(m)
|
#ifdef HAVE_MEMALIGN
|
||||||
#endif
|
extern void* memalign(size_t, size_t);
|
||||||
|
#undef opj_aligned_malloc
|
||||||
#ifdef HAVE_POSIX_MEMALIGN
|
#define opj_aligned_malloc(size) memalign(16, (size))
|
||||||
#undef opj_aligned_malloc
|
#undef opj_aligned_free
|
||||||
extern int posix_memalign(void**, size_t, size_t);
|
#define opj_aligned_free(m) free(m)
|
||||||
|
#endif
|
||||||
static INLINE void* __attribute__ ((malloc)) opj_aligned_malloc(size_t size){
|
|
||||||
void* mem = NULL;
|
#ifdef HAVE_POSIX_MEMALIGN
|
||||||
posix_memalign(&mem, 16, size);
|
#undef opj_aligned_malloc
|
||||||
return mem;
|
extern int posix_memalign(void**, size_t, size_t);
|
||||||
}
|
|
||||||
#undef opj_aligned_free
|
static INLINE void* __attribute__ ((malloc)) opj_aligned_malloc(size_t size){
|
||||||
#define opj_aligned_free(m) free(m)
|
void* mem = NULL;
|
||||||
#endif
|
posix_memalign(&mem, 16, size);
|
||||||
|
return mem;
|
||||||
/**
|
}
|
||||||
Reallocate memory blocks.
|
#undef opj_aligned_free
|
||||||
@param memblock Pointer to previously allocated memory block
|
#define opj_aligned_free(m) free(m)
|
||||||
@param size New size in bytes
|
#endif
|
||||||
@return Returns a void pointer to the reallocated (and possibly moved) memory block
|
|
||||||
*/
|
/**
|
||||||
#define opj_realloc(m, s) realloc(m, s)
|
Reallocate memory blocks.
|
||||||
|
@param memblock Pointer to previously allocated memory block
|
||||||
/**
|
@param size New size in bytes
|
||||||
Deallocates or frees a memory block.
|
@return Returns a void pointer to the reallocated (and possibly moved) memory block
|
||||||
@param memblock Previously allocated memory block to be freed
|
*/
|
||||||
*/
|
#define opj_realloc(m, s) realloc(m, s)
|
||||||
#define opj_free(m) free(m)
|
|
||||||
|
/**
|
||||||
#ifdef __GNUC__
|
Deallocates or frees a memory block.
|
||||||
#pragma GCC poison malloc calloc realloc free
|
@param memblock Previously allocated memory block to be freed
|
||||||
#endif
|
*/
|
||||||
|
#define opj_free(m) free(m)
|
||||||
/* ----------------------------------------------------------------------- */
|
|
||||||
/*@}*/
|
#ifdef __GNUC__
|
||||||
|
#pragma GCC poison malloc calloc realloc free
|
||||||
/*@}*/
|
#endif
|
||||||
|
|
||||||
#endif /* __OPJ_MALLOC_H */
|
/* ----------------------------------------------------------------------- */
|
||||||
|
/*@}*/
|
||||||
|
|
||||||
|
/*@}*/
|
||||||
|
|
||||||
|
#endif /* __OPJ_MALLOC_H */
|
||||||
|
|
||||||
|
|
|
@ -726,7 +726,7 @@ bool pi_next(opj_pi_iterator_t * pi) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void pi_create_encode( opj_pi_iterator_t *pi, opj_cp_t *cp,int tileno, int pino,int tpnum, int tppos, J2K_T2_MODE t2_mode,int cur_totnum_tp){
|
bool pi_create_encode( opj_pi_iterator_t *pi, opj_cp_t *cp,int tileno, int pino,int tpnum, int tppos, J2K_T2_MODE t2_mode,int cur_totnum_tp){
|
||||||
char prog[4];
|
char prog[4];
|
||||||
int i;
|
int i;
|
||||||
int incr_top=1,resetX=0;
|
int incr_top=1,resetX=0;
|
||||||
|
@ -746,7 +746,9 @@ void pi_create_encode( opj_pi_iterator_t *pi, opj_cp_t *cp,int tileno, int pino,
|
||||||
case RLCP: strncpy(prog, "RLCP",4);
|
case RLCP: strncpy(prog, "RLCP",4);
|
||||||
break;
|
break;
|
||||||
case RPCL: strncpy(prog, "RPCL",4);
|
case RPCL: strncpy(prog, "RPCL",4);
|
||||||
break;
|
break;
|
||||||
|
case PROG_UNKNOWN:
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!(cp->tp_on && ((!cp->cinema && (t2_mode == FINAL_PASS)) || cp->cinema))){
|
if(!(cp->tp_on && ((!cp->cinema && (t2_mode == FINAL_PASS)) || cp->cinema))){
|
||||||
|
@ -956,5 +958,6 @@ void pi_create_encode( opj_pi_iterator_t *pi, opj_cp_t *cp,int tileno, int pino,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -118,8 +118,9 @@ Modify the packet iterator for enabling tile part generation
|
||||||
@param tpnum Tile part number of the current tile
|
@param tpnum Tile part number of the current tile
|
||||||
@param tppos The position of the tile part flag in the progression order
|
@param tppos The position of the tile part flag in the progression order
|
||||||
@param cur_totnum_tp The total number of tile parts in the current tile
|
@param cur_totnum_tp The total number of tile parts in the current tile
|
||||||
|
@return Returns true if an error is detected
|
||||||
*/
|
*/
|
||||||
void pi_create_encode( opj_pi_iterator_t *pi, opj_cp_t *cp,int tileno, int pino,int tpnum, int tppos, J2K_T2_MODE t2_mode,int cur_totnum_tp);
|
bool pi_create_encode(opj_pi_iterator_t *pi, opj_cp_t *cp,int tileno, int pino,int tpnum, int tppos, J2K_T2_MODE t2_mode,int cur_totnum_tp);
|
||||||
/**
|
/**
|
||||||
Create a packet iterator for Decoder
|
Create a packet iterator for Decoder
|
||||||
@param image Raw image for which the packets will be listed
|
@param image Raw image for which the packets will be listed
|
||||||
|
|
|
@ -612,7 +612,10 @@ int t2_encode_packets(opj_t2_t* t2,int tileno, opj_tcd_tile_t *tile, int maxlaye
|
||||||
for(poc = 0; poc < pocno ; poc++){
|
for(poc = 0; poc < pocno ; poc++){
|
||||||
int comp_len = 0;
|
int comp_len = 0;
|
||||||
int tpnum = compno;
|
int tpnum = compno;
|
||||||
pi_create_encode(pi, cp,tileno,poc,tpnum,tppos,t2_mode,cur_totnum_tp);
|
if (pi_create_encode(pi, cp,tileno,poc,tpnum,tppos,t2_mode,cur_totnum_tp)) {
|
||||||
|
opj_event_msg(t2->cinfo, EVT_ERROR, "Error initializing Packet Iterator\n");
|
||||||
|
return -999;
|
||||||
|
}
|
||||||
while (pi_next(&pi[poc])) {
|
while (pi_next(&pi[poc])) {
|
||||||
if (pi[poc].layno < maxlayers) {
|
if (pi[poc].layno < maxlayers) {
|
||||||
e = t2_encode_packet(tile, &cp->tcps[tileno], &pi[poc], c, dest + len - c, cstr_info, tileno);
|
e = t2_encode_packet(tile, &cp->tcps[tileno], &pi[poc], c, dest + len - c, cstr_info, tileno);
|
||||||
|
|
Loading…
Reference in New Issue