Home | History | Annotate | Download | only in libopenjpeg20
      1 diff --git a/third_party/libopenjpeg20/dwt.c b/third_party/libopenjpeg20/dwt.c
      2 index 4ad99ed..975a97e 100644
      3 --- a/third_party/libopenjpeg20/dwt.c
      4 +++ b/third_party/libopenjpeg20/dwt.c
      5 @@ -46,14 +46,12 @@
      6  /** @defgroup DWT DWT - Implementation of a discrete wavelet transform */
      7  /*@{*/
      8  
      9 -#define OPJ_WS(i) v->mem[(i)*2]
     10 -#define OPJ_WD(i) v->mem[(1+(i)*2)]
     11 -
     12  /** @name Local data structures */
     13  /*@{*/
     14  
     15  typedef struct dwt_local {
     16  	OPJ_INT32* mem;
     17 +	OPJ_SIZE_T mem_count;
     18  	OPJ_INT32 dn;
     19  	OPJ_INT32 sn;
     20  	OPJ_INT32 cas;
     21 @@ -107,16 +105,16 @@ static void opj_dwt_interleave_v(opj_dwt_t* v, OPJ_INT32 *a, OPJ_INT32 x);
     22  /**
     23  Forward 5-3 wavelet transform in 1-D
     24  */
     25 -static void opj_dwt_encode_1(OPJ_INT32 *a, OPJ_INT32 dn, OPJ_INT32 sn, OPJ_INT32 cas);
     26 +static void opj_dwt_encode_1(OPJ_INT32 *a, OPJ_SIZE_T a_count, OPJ_INT32 dn, OPJ_INT32 sn, OPJ_INT32 cas);
     27  /**
     28  Inverse 5-3 wavelet transform in 1-D
     29  */
     30  static void opj_dwt_decode_1(opj_dwt_t *v);
     31 -static void opj_dwt_decode_1_(OPJ_INT32 *a, OPJ_INT32 dn, OPJ_INT32 sn, OPJ_INT32 cas);
     32 +static void opj_dwt_decode_1_(OPJ_INT32 *a, OPJ_SIZE_T a_count, OPJ_INT32 dn, OPJ_INT32 sn, OPJ_INT32 cas);
     33  /**
     34  Forward 9-7 wavelet transform in 1-D
     35  */
     36 -static void opj_dwt_encode_1_real(OPJ_INT32 *a, OPJ_INT32 dn, OPJ_INT32 sn, OPJ_INT32 cas);
     37 +static void opj_dwt_encode_1_real(OPJ_INT32 *a, OPJ_SIZE_T a_count, OPJ_INT32 dn, OPJ_INT32 sn, OPJ_INT32 cas);
     38  /**
     39  Explicit calculation of the Quantization Stepsizes 
     40  */
     41 @@ -124,10 +122,10 @@ static void opj_dwt_encode_stepsize(OPJ_INT32 stepsize, OPJ_INT32 numbps, opj_st
     42  /**
     43  Inverse wavelet transform in 2-D.
     44  */
     45 -static OPJ_BOOL opj_dwt_decode_tile(opj_tcd_tilecomp_t* tilec, OPJ_UINT32 i, DWT1DFN fn);
     46 +static OPJ_BOOL opj_dwt_decode_tile(const opj_tcd_tilecomp_t* tilec, OPJ_UINT32 i, DWT1DFN fn);
     47  
     48 -static OPJ_BOOL opj_dwt_encode_procedure(	opj_tcd_tilecomp_t * tilec,
     49 -										    void (*p_function)(OPJ_INT32 *, OPJ_INT32,OPJ_INT32,OPJ_INT32) );
     50 +static OPJ_BOOL opj_dwt_encode_procedure(const opj_tcd_tilecomp_t * tilec,
     51 +										    void(*p_function)(OPJ_INT32 *, OPJ_SIZE_T, OPJ_INT32, OPJ_INT32, OPJ_INT32));
     52  
     53  static OPJ_UINT32 opj_dwt_max_resolution(opj_tcd_resolution_t* restrict r, OPJ_UINT32 i);
     54  
     55 @@ -156,13 +154,20 @@ static void opj_v4dwt_decode_step2(opj_v4_t* l, opj_v4_t* w, OPJ_INT32 k, OPJ_IN
     56  
     57  /*@}*/
     58  
     59 -#define OPJ_S(i) a[(i)*2]
     60 -#define OPJ_D(i) a[(1+(i)*2)]
     61 -#define OPJ_S_(i) ((i)<0?OPJ_S(0):((i)>=sn?OPJ_S(sn-1):OPJ_S(i)))
     62 -#define OPJ_D_(i) ((i)<0?OPJ_D(0):((i)>=dn?OPJ_D(dn-1):OPJ_D(i)))
     63 -/* new */
     64 -#define OPJ_SS_(i) ((i)<0?OPJ_S(0):((i)>=dn?OPJ_S(dn-1):OPJ_S(i)))
     65 -#define OPJ_DD_(i) ((i)<0?OPJ_D(0):((i)>=sn?OPJ_D(sn-1):OPJ_D(i)))
     66 +#define IDX_S(i) (i)*2
     67 +#define IDX_D(i) 1 + (i)* 2
     68 +#define UNDERFLOW_SN(i) ((i) >= sn&&sn>0)
     69 +#define UNDERFLOW_DN(i) ((i) >= dn&&dn>0)
     70 +#define OVERFLOW_S(i) (IDX_S(i) >= a_count)
     71 +#define OVERFLOW_D(i) (IDX_D(i) >= a_count)
     72 +
     73 +#define OPJ_S(i) a[IDX_S(i)]
     74 +#define OPJ_D(i) a[IDX_D(i)]
     75 +#define OPJ_S_(i) ((i)<0 ? OPJ_S(0) : (UNDERFLOW_SN(i) ? OPJ_S(sn - 1) : OVERFLOW_S(i) ? OPJ_S(i - 1) : OPJ_S(i)))
     76 +#define OPJ_D_(i) ((i)<0 ? OPJ_D(0) : (UNDERFLOW_DN(i) ? OPJ_D(dn - 1) : OVERFLOW_D(i) ? OPJ_D(i - 1) : OPJ_D(i)))
     77 +/* new */
     78 +#define OPJ_SS_(i) ((i)<0 ? OPJ_S(0) : (UNDERFLOW_DN(i) ? OPJ_S(dn - 1) : OVERFLOW_S(i) ? OPJ_S(i - 1) : OPJ_S(i)))
     79 +#define OPJ_DD_(i) ((i)<0 ? OPJ_D(0) : (UNDERFLOW_SN(i) ? OPJ_D(sn - 1) : OVERFLOW_D(i) ? OPJ_D(i - 1) : OPJ_D(i)))
     80  
     81  /* <summary>                                                              */
     82  /* This table contains the norms of the 5-3 wavelets for different bands. */
     83 @@ -283,7 +288,7 @@ static void opj_dwt_interleave_v(opj_dwt_t* v, OPJ_INT32 *a, OPJ_INT32 x) {
     84  /* <summary>                            */
     85  /* Forward 5-3 wavelet transform in 1-D. */
     86  /* </summary>                           */
     87 -static void opj_dwt_encode_1(OPJ_INT32 *a, OPJ_INT32 dn, OPJ_INT32 sn, OPJ_INT32 cas) {
     88 +static void opj_dwt_encode_1(OPJ_INT32 *a, OPJ_SIZE_T a_count, OPJ_INT32 dn, OPJ_INT32 sn, OPJ_INT32 cas) {
     89  	OPJ_INT32 i;
     90  	
     91  	if (!cas) {
     92 @@ -304,7 +309,7 @@ static void opj_dwt_encode_1(OPJ_INT32 *a, OPJ_INT32 dn, OPJ_INT32 sn, OPJ_INT32
     93  /* <summary>                            */
     94  /* Inverse 5-3 wavelet transform in 1-D. */
     95  /* </summary>                           */ 
     96 -static void opj_dwt_decode_1_(OPJ_INT32 *a, OPJ_INT32 dn, OPJ_INT32 sn, OPJ_INT32 cas) {
     97 +static void opj_dwt_decode_1_(OPJ_INT32 *a, OPJ_SIZE_T a_count, OPJ_INT32 dn, OPJ_INT32 sn, OPJ_INT32 cas) {
     98  	OPJ_INT32 i;
     99  	
    100  	if (!cas) {
    101 @@ -326,13 +331,13 @@ static void opj_dwt_decode_1_(OPJ_INT32 *a, OPJ_INT32 dn, OPJ_INT32 sn, OPJ_INT3
    102  /* Inverse 5-3 wavelet transform in 1-D. */
    103  /* </summary>                           */ 
    104  static void opj_dwt_decode_1(opj_dwt_t *v) {
    105 -	opj_dwt_decode_1_(v->mem, v->dn, v->sn, v->cas);
    106 +	opj_dwt_decode_1_(v->mem, v->mem_count, v->dn, v->sn, v->cas);
    107  }
    108  
    109  /* <summary>                             */
    110  /* Forward 9-7 wavelet transform in 1-D. */
    111  /* </summary>                            */
    112 -static void opj_dwt_encode_1_real(OPJ_INT32 *a, OPJ_INT32 dn, OPJ_INT32 sn, OPJ_INT32 cas) {
    113 +static void opj_dwt_encode_1_real(OPJ_INT32 *a, OPJ_SIZE_T a_count, OPJ_INT32 dn, OPJ_INT32 sn, OPJ_INT32 cas) {
    114  	OPJ_INT32 i;
    115  	if (!cas) {
    116  		if ((dn > 0) || (sn > 1)) {	/* NEW :  CASE ONE ELEMENT */
    117 @@ -385,7 +390,7 @@ static void opj_dwt_encode_stepsize(OPJ_INT32 stepsize, OPJ_INT32 numbps, opj_st
    118  /* <summary>                            */
    119  /* Forward 5-3 wavelet transform in 2-D. */
    120  /* </summary>                           */
    121 -static INLINE OPJ_BOOL opj_dwt_encode_procedure(opj_tcd_tilecomp_t * tilec,void (*p_function)(OPJ_INT32 *, OPJ_INT32,OPJ_INT32,OPJ_INT32) )
    122 +static INLINE OPJ_BOOL opj_dwt_encode_procedure(const opj_tcd_tilecomp_t * tilec, void(*p_function)(OPJ_INT32 *, OPJ_SIZE_T, OPJ_INT32, OPJ_INT32, OPJ_INT32))
    123  {
    124  	OPJ_INT32 i, j, k;
    125  	OPJ_INT32 *a = 00;
    126 @@ -395,7 +400,8 @@ static INLINE OPJ_BOOL opj_dwt_encode_procedure(opj_tcd_tilecomp_t * tilec,void
    127  
    128  	OPJ_INT32 rw;			/* width of the resolution level computed   */
    129  	OPJ_INT32 rh;			/* height of the resolution level computed  */
    130 -	OPJ_UINT32 l_data_size;
    131 +	OPJ_SIZE_T l_data_count;
    132 +	OPJ_SIZE_T l_data_size;
    133  
    134  	opj_tcd_resolution_t * l_cur_res = 0;
    135  	opj_tcd_resolution_t * l_last_res = 0;
    136 @@ -407,8 +413,9 @@ static INLINE OPJ_BOOL opj_dwt_encode_procedure(opj_tcd_tilecomp_t * tilec,void
    137  	l_cur_res = tilec->resolutions + l;
    138  	l_last_res = l_cur_res - 1;
    139  
    140 -	l_data_size = opj_dwt_max_resolution( tilec->resolutions,tilec->numresolutions) * (OPJ_UINT32)sizeof(OPJ_INT32);
    141 -	bj = (OPJ_INT32*)opj_malloc((size_t)l_data_size);
    142 +	l_data_count = opj_dwt_max_resolution(tilec->resolutions, tilec->numresolutions) * (OPJ_UINT32)sizeof(OPJ_INT32);
    143 +	l_data_size = l_data_count * (OPJ_UINT32)sizeof(OPJ_INT32);
    144 +	bj = (OPJ_INT32*)opj_malloc(l_data_size);
    145  	if (! bj) {
    146  		return OPJ_FALSE;
    147  	}
    148 @@ -437,7 +444,7 @@ static INLINE OPJ_BOOL opj_dwt_encode_procedure(opj_tcd_tilecomp_t * tilec,void
    149  				bj[k] = aj[k*w];
    150  			}
    151  
    152 -			(*p_function) (bj, dn, sn, cas_col);
    153 +			(*p_function) (bj, l_data_count, dn, sn, cas_col);
    154  
    155  			opj_dwt_deinterleave_v(bj, aj, dn, sn, w, cas_col);
    156  		}
    157 @@ -448,7 +455,7 @@ static INLINE OPJ_BOOL opj_dwt_encode_procedure(opj_tcd_tilecomp_t * tilec,void
    158  		for (j = 0; j < rh; j++) {
    159  			aj = a + j * w;
    160  			for (k = 0; k < rw; k++)  bj[k] = aj[k];
    161 -			(*p_function) (bj, dn, sn, cas_row);
    162 +			(*p_function) (bj, l_data_count, dn, sn, cas_row);
    163  			opj_dwt_deinterleave_h(bj, aj, dn, sn, cas_row);
    164  		}
    165  
    166 @@ -557,7 +564,7 @@ static OPJ_UINT32 opj_dwt_max_resolution(opj_tcd_resolution_t* restrict r, OPJ_U
    167  /* <summary>                            */
    168  /* Inverse wavelet transform in 2-D.     */
    169  /* </summary>                           */
    170 -static OPJ_BOOL opj_dwt_decode_tile(opj_tcd_tilecomp_t* tilec, OPJ_UINT32 numres, DWT1DFN dwt_1D) {
    171 +static OPJ_BOOL opj_dwt_decode_tile(const opj_tcd_tilecomp_t* tilec, OPJ_UINT32 numres, DWT1DFN dwt_1D) {
    172  	opj_dwt_t h;
    173  	opj_dwt_t v;
    174  
    175 @@ -568,13 +575,14 @@ static OPJ_BOOL opj_dwt_decode_tile(opj_tcd_tilecomp_t* tilec, OPJ_UINT32 numres
    176  
    177  	OPJ_UINT32 w = (OPJ_UINT32)(tilec->x1 - tilec->x0);
    178  
    179 -	h.mem = (OPJ_INT32*)
    180 -	opj_aligned_malloc(opj_dwt_max_resolution(tr, numres) * sizeof(OPJ_INT32));
    181 +	h.mem_count = opj_dwt_max_resolution(tr, numres);
    182 +	h.mem = (OPJ_INT32*)opj_aligned_malloc(h.mem_count * sizeof(OPJ_INT32));
    183  	if (! h.mem){
    184  		/* FIXME event manager error callback */
    185  		return OPJ_FALSE;
    186  	}
    187  
    188 +	v.mem_count = h.mem_count;
    189  	v.mem = h.mem;
    190  
    191  	while( --numres) {
    192