| Index: core/src/fxcodec/codec/fx_codec_jpx_opj.cpp
 | 
| diff --git a/core/src/fxcodec/codec/fx_codec_jpx_opj.cpp b/core/src/fxcodec/codec/fx_codec_jpx_opj.cpp
 | 
| index 3b0490f3c6f0fe7e052f368e1b39e6344c424399..3546f574f96c2de0b9c66cfd3bdb08db00dd80f9 100644
 | 
| --- a/core/src/fxcodec/codec/fx_codec_jpx_opj.cpp
 | 
| +++ b/core/src/fxcodec/codec/fx_codec_jpx_opj.cpp
 | 
| @@ -351,25 +351,24 @@ void color_sycc_to_rgb(opj_image_t *img)
 | 
|  }
 | 
|  void color_apply_icc_profile(opj_image_t *image)
 | 
|  {
 | 
| -    cmsHPROFILE in_prof, out_prof;
 | 
| -    cmsHTRANSFORM transform;
 | 
| -    cmsColorSpaceSignature in_space, out_space;
 | 
| -    cmsUInt32Number intent, in_type, out_type, nr_samples;
 | 
| -    int *r, *g, *b;
 | 
| -    int prec, i, max, max_w, max_h;
 | 
| -    OPJ_COLOR_SPACE oldspace;
 | 
| -    in_prof =
 | 
| +    cmsHPROFILE out_prof;
 | 
| +    cmsUInt32Number in_type;
 | 
| +    cmsUInt32Number out_type;
 | 
| +    int *r;
 | 
| +    int *g;
 | 
| +    int *b;
 | 
| +    int max;
 | 
| +    cmsHPROFILE in_prof =
 | 
|          cmsOpenProfileFromMem(image->icc_profile_buf, image->icc_profile_len);
 | 
|      if(in_prof == NULL) {
 | 
|          return;
 | 
|      }
 | 
| -    in_space = cmsGetPCS(in_prof);
 | 
| -    out_space = cmsGetColorSpace(in_prof);
 | 
| -    intent = cmsGetHeaderRenderingIntent(in_prof);
 | 
| -    max_w = (int)image->comps[0].w;
 | 
| -    max_h = (int)image->comps[0].h;
 | 
| -    prec = (int)image->comps[0].prec;
 | 
| -    oldspace = image->color_space;
 | 
| +    cmsColorSpaceSignature out_space = cmsGetColorSpace(in_prof);
 | 
| +    cmsUInt32Number intent = cmsGetHeaderRenderingIntent(in_prof);
 | 
| +    int max_w = (int)image->comps[0].w;
 | 
| +    int max_h = (int)image->comps[0].h;
 | 
| +    int prec = (int)image->comps[0].prec;
 | 
| +    OPJ_COLOR_SPACE oldspace = image->color_space;
 | 
|      if(out_space == cmsSigRgbData) {
 | 
|          if( prec <= 8 ) {
 | 
|              in_type = TYPE_RGB_8;
 | 
| @@ -398,8 +397,8 @@ void color_apply_icc_profile(opj_image_t *image)
 | 
|      } else {
 | 
|          return;
 | 
|      }
 | 
| -    transform = cmsCreateTransform(in_prof, in_type,
 | 
| -                                   out_prof, out_type, intent, 0);
 | 
| +    cmsHTRANSFORM transform =
 | 
| +        cmsCreateTransform(in_prof, in_type, out_prof, out_type, intent, 0);
 | 
|      cmsCloseProfile(in_prof);
 | 
|      cmsCloseProfile(out_prof);
 | 
|      if(transform == NULL) {
 | 
| @@ -410,13 +409,13 @@ void color_apply_icc_profile(opj_image_t *image)
 | 
|          if( prec <= 8 ) {
 | 
|              unsigned char *inbuf, *outbuf, *in, *out;
 | 
|              max = max_w * max_h;
 | 
| -            nr_samples = (cmsUInt32Number)max * 3 * (cmsUInt32Number)sizeof(unsigned char);
 | 
| +            cmsUInt32Number nr_samples = max * 3 * sizeof(unsigned char);
 | 
|              in = inbuf = FX_Alloc(unsigned char, nr_samples);
 | 
|              out = outbuf = FX_Alloc(unsigned char, nr_samples);
 | 
|              r = image->comps[0].data;
 | 
|              g = image->comps[1].data;
 | 
|              b = image->comps[2].data;
 | 
| -            for(i = 0; i < max; ++i) {
 | 
| +            for(int i = 0; i < max; ++i) {
 | 
|                  *in++ = (unsigned char) * r++;
 | 
|                  *in++ = (unsigned char) * g++;
 | 
|                  *in++ = (unsigned char) * b++;
 | 
| @@ -425,7 +424,7 @@ void color_apply_icc_profile(opj_image_t *image)
 | 
|              r = image->comps[0].data;
 | 
|              g = image->comps[1].data;
 | 
|              b = image->comps[2].data;
 | 
| -            for(i = 0; i < max; ++i) {
 | 
| +            for(int i = 0; i < max; ++i) {
 | 
|                  *r++ = (int) * out++;
 | 
|                  *g++ = (int) * out++;
 | 
|                  *b++ = (int) * out++;
 | 
| @@ -435,13 +434,13 @@ void color_apply_icc_profile(opj_image_t *image)
 | 
|          } else {
 | 
|              unsigned short *inbuf, *outbuf, *in, *out;
 | 
|              max = max_w * max_h;
 | 
| -            nr_samples = (cmsUInt32Number)max * 3 * (cmsUInt32Number)sizeof(unsigned short);
 | 
| +            cmsUInt32Number nr_samples = max * 3 * sizeof(unsigned short);
 | 
|              in = inbuf = FX_Alloc(unsigned short, nr_samples);
 | 
|              out = outbuf = FX_Alloc(unsigned short, nr_samples);
 | 
|              r = image->comps[0].data;
 | 
|              g = image->comps[1].data;
 | 
|              b = image->comps[2].data;
 | 
| -            for(i = 0; i < max; ++i) {
 | 
| +            for(int i = 0; i < max; ++i) {
 | 
|                  *in++ = (unsigned short) * r++;
 | 
|                  *in++ = (unsigned short) * g++;
 | 
|                  *in++ = (unsigned short) * b++;
 | 
| @@ -450,7 +449,7 @@ void color_apply_icc_profile(opj_image_t *image)
 | 
|              r = image->comps[0].data;
 | 
|              g = image->comps[1].data;
 | 
|              b = image->comps[2].data;
 | 
| -            for(i = 0; i < max; ++i) {
 | 
| +            for(int i = 0; i < max; ++i) {
 | 
|                  *r++ = (int) * out++;
 | 
|                  *g++ = (int) * out++;
 | 
|                  *b++ = (int) * out++;
 | 
| @@ -461,7 +460,8 @@ void color_apply_icc_profile(opj_image_t *image)
 | 
|      } else {
 | 
|          unsigned char *in, *inbuf, *out, *outbuf;
 | 
|          max = max_w * max_h;
 | 
| -        nr_samples = (cmsUInt32Number)max * 3 * sizeof(unsigned char);
 | 
| +        cmsUInt32Number nr_samples =
 | 
| +            (cmsUInt32Number)max * 3 * sizeof(unsigned char);
 | 
|          in = inbuf = FX_Alloc(unsigned char, nr_samples);
 | 
|          out = outbuf = FX_Alloc(unsigned char, nr_samples);
 | 
|          image->comps = (opj_image_comp_t*)
 | 
| @@ -477,14 +477,14 @@ void color_apply_icc_profile(opj_image_t *image)
 | 
|          FXSYS_memset8(image->comps[2].data, 0, sizeof(int) * (size_t)max);
 | 
|          image->numcomps += 2;
 | 
|          r = image->comps[0].data;
 | 
| -        for(i = 0; i < max; ++i) {
 | 
| +        for(int i = 0; i < max; ++i) {
 | 
|              *in++ = (unsigned char) * r++;
 | 
|          }
 | 
|          cmsDoTransform(transform, inbuf, outbuf, (cmsUInt32Number)max);
 | 
|          r = image->comps[0].data;
 | 
|          g = image->comps[1].data;
 | 
|          b = image->comps[2].data;
 | 
| -        for(i = 0; i < max; ++i) {
 | 
| +        for(int i = 0; i < max; ++i) {
 | 
|              *r++ = (int) * out++;
 | 
|              *g++ = (int) * out++;
 | 
|              *b++ = (int) * out++;
 | 
| @@ -508,14 +508,12 @@ void color_apply_conversion(opj_image_t *image)
 | 
|          int *L, *a, *b, *red, *green, *blue, *src0, *src1, *src2;
 | 
|          double rl, ol, ra, oa, rb, ob, prec0, prec1, prec2;
 | 
|          double minL, maxL, mina, maxa, minb, maxb;
 | 
| -        unsigned int default_type, il;
 | 
| -        unsigned int i, max, illu;
 | 
| +        unsigned int default_type;
 | 
| +        unsigned int i, max;
 | 
|          cmsHPROFILE in, out;
 | 
|          cmsHTRANSFORM transform;
 | 
|          cmsUInt16Number RGB[3];
 | 
|          cmsCIELab Lab;
 | 
| -        illu = 0;
 | 
| -        il = 0;
 | 
|          in = cmsCreateLab4Profile(NULL);
 | 
|          out = cmsCreate_sRGBProfile();
 | 
|          transform =
 | 
| @@ -706,10 +704,7 @@ void CJPX_Decoder::GetInfo(FX_DWORD& width, FX_DWORD& height, FX_DWORD& codestre
 | 
|  }
 | 
|  FX_BOOL CJPX_Decoder::Decode(FX_LPBYTE dest_buf, int pitch, FX_BOOL bTranslateColor, FX_LPBYTE offsets)
 | 
|  {
 | 
| -    FX_BYTE** channel_bufs;
 | 
| -    int* adjust_comps;
 | 
|      int i, wid, hei, row, col, channel, src;
 | 
| -    FX_BOOL flag;
 | 
|      FX_LPBYTE pChannel, pScanline, pPixel;
 | 
|  
 | 
|      if(image->comps[0].w != image->x1 || image->comps[0].h != image->y1) {
 | 
| @@ -719,16 +714,15 @@ FX_BOOL CJPX_Decoder::Decode(FX_LPBYTE dest_buf, int pitch, FX_BOOL bTranslateCo
 | 
|          return FALSE;
 | 
|      }
 | 
|      FXSYS_memset8(dest_buf, 0xff, image->y1 * pitch);
 | 
| -    channel_bufs = FX_Alloc(FX_BYTE*, image->numcomps);
 | 
| +    FX_BYTE** channel_bufs = FX_Alloc(FX_BYTE*, image->numcomps);
 | 
|      if (channel_bufs == NULL) {
 | 
|          return FALSE;
 | 
|      }
 | 
| -    adjust_comps = FX_Alloc(int, image->numcomps);
 | 
| +    FX_BOOL result = FALSE;
 | 
| +    int* adjust_comps = FX_Alloc(int, image->numcomps);
 | 
|      if (adjust_comps == NULL) {
 | 
| -        FX_Free(channel_bufs);
 | 
| -        return FALSE;
 | 
| +        goto done;
 | 
|      }
 | 
| -    flag = TRUE;
 | 
|      for (i = 0; i < (int)image->numcomps; i ++) {
 | 
|          channel_bufs[i] = dest_buf + offsets[i];
 | 
|          adjust_comps[i] = image->comps[i].prec - 8;
 | 
| @@ -736,8 +730,7 @@ FX_BOOL CJPX_Decoder::Decode(FX_LPBYTE dest_buf, int pitch, FX_BOOL bTranslateCo
 | 
|              if(image->comps[i].dx != image->comps[i - 1].dx
 | 
|                      || image->comps[i].dy != image->comps[i - 1].dy
 | 
|                      || image->comps[i].prec != image->comps[i - 1].prec) {
 | 
| -                flag = FALSE;
 | 
| -                goto failed;
 | 
| +                goto done;
 | 
|              }
 | 
|          }
 | 
|      }
 | 
| @@ -784,14 +777,12 @@ FX_BOOL CJPX_Decoder::Decode(FX_LPBYTE dest_buf, int pitch, FX_BOOL bTranslateCo
 | 
|              }
 | 
|          }
 | 
|      }
 | 
| +    result = TRUE;
 | 
|  
 | 
| +done:
 | 
|      FX_Free(channel_bufs);
 | 
|      FX_Free(adjust_comps);
 | 
| -    return TRUE;
 | 
| -failed:
 | 
| -    FX_Free(channel_bufs);
 | 
| -    FX_Free(adjust_comps);
 | 
| -    return FALSE;
 | 
| +    return result;
 | 
|  }
 | 
|  void initialize_transition_table();
 | 
|  void initialize_significance_luts();
 | 
| 
 |