summaryrefslogtreecommitdiff
path: root/src/bin/common
diff options
context:
space:
mode:
Diffstat (limited to 'src/bin/common')
-rw-r--r--src/bin/common/color.c1291
-rw-r--r--src/bin/common/color.h6
-rw-r--r--src/bin/common/format_defs.h6
-rw-r--r--src/bin/common/opj_getopt.c379
-rw-r--r--src/bin/common/opj_getopt.h15
-rw-r--r--src/bin/common/opj_string.h44
6 files changed, 897 insertions, 844 deletions
diff --git a/src/bin/common/color.c b/src/bin/common/color.c
index 0f2b8dac..98b62348 100644
--- a/src/bin/common/color.c
+++ b/src/bin/common/color.c
@@ -1,6 +1,6 @@
/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
* party and contributor rights, including patent rights, and no such rights
* are granted under this license.
*
@@ -8,7 +8,7 @@
* Copyright (c) 2002-2014, Professor Benoit Macq
* Copyright (c) 2001-2003, David Janssens
* Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux
+ * Copyright (c) 2003-2007, Francois-Olivier Devaux
* Copyright (c) 2003-2014, Antonin Descampe
* Copyright (c) 2005, Herve Drolon, FreeImage Team
* All rights reserved.
@@ -72,235 +72,299 @@ B: 0.999823 1.77204 -8.04142e-06 :Cr - 2^(prec - 1)
-----------------------------------------------------------*/
static void sycc_to_rgb(int offset, int upb, int y, int cb, int cr,
- int *out_r, int *out_g, int *out_b)
+ int *out_r, int *out_g, int *out_b)
{
- int r, g, b;
-
- cb -= offset; cr -= offset;
- r = y + (int)(1.402 * (float)cr);
- if(r < 0) r = 0; else if(r > upb) r = upb; *out_r = r;
-
- g = y - (int)(0.344 * (float)cb + 0.714 * (float)cr);
- if(g < 0) g = 0; else if(g > upb) g = upb; *out_g = g;
-
- b = y + (int)(1.772 * (float)cb);
- if(b < 0) b = 0; else if(b > upb) b = upb; *out_b = b;
+ int r, g, b;
+
+ cb -= offset;
+ cr -= offset;
+ r = y + (int)(1.402 * (float)cr);
+ if(r < 0) r = 0;
+ else if(r > upb) r = upb;
+ *out_r = r;
+
+ g = y - (int)(0.344 * (float)cb + 0.714 * (float)cr);
+ if(g < 0) g = 0;
+ else if(g > upb) g = upb;
+ *out_g = g;
+
+ b = y + (int)(1.772 * (float)cb);
+ if(b < 0) b = 0;
+ else if(b > upb) b = upb;
+ *out_b = b;
}
static void sycc444_to_rgb(opj_image_t *img)
{
- int *d0, *d1, *d2, *r, *g, *b;
- const int *y, *cb, *cr;
- unsigned int maxw, maxh, max, i;
- int offset, upb;
-
- upb = (int)img->comps[0].prec;
- offset = 1<<(upb - 1); upb = (1<<upb)-1;
-
- maxw = (unsigned int)img->comps[0].w; maxh = (unsigned int)img->comps[0].h;
- max = maxw * maxh;
-
- y = img->comps[0].data;
- cb = img->comps[1].data;
- cr = img->comps[2].data;
-
- d0 = r = (int*)malloc(sizeof(int) * (size_t)max);
- d1 = g = (int*)malloc(sizeof(int) * (size_t)max);
- d2 = b = (int*)malloc(sizeof(int) * (size_t)max);
-
- for(i = 0U; i < max; ++i)
- {
- sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
- ++y; ++cb; ++cr; ++r; ++g; ++b;
- }
- free(img->comps[0].data); img->comps[0].data = d0;
- free(img->comps[1].data); img->comps[1].data = d1;
- free(img->comps[2].data); img->comps[2].data = d2;
+ int *d0, *d1, *d2, *r, *g, *b;
+ const int *y, *cb, *cr;
+ unsigned int maxw, maxh, max, i;
+ int offset, upb;
+
+ upb = (int)img->comps[0].prec;
+ offset = 1<<(upb - 1);
+ upb = (1<<upb)-1;
+
+ maxw = (unsigned int)img->comps[0].w;
+ maxh = (unsigned int)img->comps[0].h;
+ max = maxw * maxh;
+
+ y = img->comps[0].data;
+ cb = img->comps[1].data;
+ cr = img->comps[2].data;
+
+ d0 = r = (int*)malloc(sizeof(int) * (size_t)max);
+ d1 = g = (int*)malloc(sizeof(int) * (size_t)max);
+ d2 = b = (int*)malloc(sizeof(int) * (size_t)max);
+
+ for(i = 0U; i < max; ++i) {
+ sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
+ ++y;
+ ++cb;
+ ++cr;
+ ++r;
+ ++g;
+ ++b;
+ }
+ free(img->comps[0].data);
+ img->comps[0].data = d0;
+ free(img->comps[1].data);
+ img->comps[1].data = d1;
+ free(img->comps[2].data);
+ img->comps[2].data = d2;
}/* sycc444_to_rgb() */
static void sycc422_to_rgb(opj_image_t *img)
-{
- int *d0, *d1, *d2, *r, *g, *b;
- const int *y, *cb, *cr;
- unsigned int maxw, maxh, max;
- int offset, upb;
- unsigned int i, j;
-
- upb = (int)img->comps[0].prec;
- offset = 1<<(upb - 1); upb = (1<<upb)-1;
-
- maxw = (unsigned int)img->comps[0].w; maxh = (unsigned int)img->comps[0].h;
- max = maxw * maxh;
-
- y = img->comps[0].data;
- cb = img->comps[1].data;
- cr = img->comps[2].data;
-
- d0 = r = (int*)malloc(sizeof(int) * (size_t)max);
- d1 = g = (int*)malloc(sizeof(int) * (size_t)max);
- d2 = b = (int*)malloc(sizeof(int) * (size_t)max);
-
- for(i=0U; i < maxh; ++i)
- {
- for(j=0U; j < (maxw & ~(unsigned int)1U); j += 2U)
- {
- sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
- ++y; ++r; ++g; ++b;
- sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
- ++y; ++r; ++g; ++b; ++cb; ++cr;
- }
- if (j < maxw) {
- sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
- ++y; ++r; ++g; ++b; ++cb; ++cr;
- }
- }
- free(img->comps[0].data); img->comps[0].data = d0;
- free(img->comps[1].data); img->comps[1].data = d1;
- free(img->comps[2].data); img->comps[2].data = d2;
+{
+ int *d0, *d1, *d2, *r, *g, *b;
+ const int *y, *cb, *cr;
+ unsigned int maxw, maxh, max;
+ int offset, upb;
+ unsigned int i, j;
+
+ upb = (int)img->comps[0].prec;
+ offset = 1<<(upb - 1);
+ upb = (1<<upb)-1;
+
+ maxw = (unsigned int)img->comps[0].w;
+ maxh = (unsigned int)img->comps[0].h;
+ max = maxw * maxh;
+
+ y = img->comps[0].data;
+ cb = img->comps[1].data;
+ cr = img->comps[2].data;
+
+ d0 = r = (int*)malloc(sizeof(int) * (size_t)max);
+ d1 = g = (int*)malloc(sizeof(int) * (size_t)max);
+ d2 = b = (int*)malloc(sizeof(int) * (size_t)max);
+
+ for(i=0U; i < maxh; ++i) {
+ for(j=0U; j < (maxw & ~(unsigned int)1U); j += 2U) {
+ sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
+ ++y;
+ ++r;
+ ++g;
+ ++b;
+ sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
+ ++y;
+ ++r;
+ ++g;
+ ++b;
+ ++cb;
+ ++cr;
+ }
+ if (j < maxw) {
+ sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
+ ++y;
+ ++r;
+ ++g;
+ ++b;
+ ++cb;
+ ++cr;
+ }
+ }
+ free(img->comps[0].data);
+ img->comps[0].data = d0;
+ free(img->comps[1].data);
+ img->comps[1].data = d1;
+ free(img->comps[2].data);
+ img->comps[2].data = d2;
#if defined(USE_JPWL) || defined(USE_MJ2)
- img->comps[1].w = maxw; img->comps[1].h = maxh;
- img->comps[2].w = maxw; img->comps[2].h = maxh;
+ img->comps[1].w = maxw;
+ img->comps[1].h = maxh;
+ img->comps[2].w = maxw;
+ img->comps[2].h = maxh;
#else
- img->comps[1].w = (OPJ_UINT32)maxw; img->comps[1].h = (OPJ_UINT32)maxh;
- img->comps[2].w = (OPJ_UINT32)maxw; img->comps[2].h = (OPJ_UINT32)maxh;
+ img->comps[1].w = (OPJ_UINT32)maxw;
+ img->comps[1].h = (OPJ_UINT32)maxh;
+ img->comps[2].w = (OPJ_UINT32)maxw;
+ img->comps[2].h = (OPJ_UINT32)maxh;
#endif
- img->comps[1].dx = img->comps[0].dx;
- img->comps[2].dx = img->comps[0].dx;
- img->comps[1].dy = img->comps[0].dy;
- img->comps[2].dy = img->comps[0].dy;
+ img->comps[1].dx = img->comps[0].dx;
+ img->comps[2].dx = img->comps[0].dx;
+ img->comps[1].dy = img->comps[0].dy;
+ img->comps[2].dy = img->comps[0].dy;
}/* sycc422_to_rgb() */
static void sycc420_to_rgb(opj_image_t *img)
{
- int *d0, *d1, *d2, *r, *g, *b, *nr, *ng, *nb;
- const int *y, *cb, *cr, *ny;
- unsigned int maxw, maxh, max;
- int offset, upb;
- unsigned int i, j;
-
- upb = (int)img->comps[0].prec;
- offset = 1<<(upb - 1); upb = (1<<upb)-1;
-
- maxw = (unsigned int)img->comps[0].w; maxh = (unsigned int)img->comps[0].h;
- max = maxw * maxh;
-
- y = img->comps[0].data;
- cb = img->comps[1].data;
- cr = img->comps[2].data;
-
- d0 = r = (int*)malloc(sizeof(int) * (size_t)max);
- d1 = g = (int*)malloc(sizeof(int) * (size_t)max);
- d2 = b = (int*)malloc(sizeof(int) * (size_t)max);
-
- for(i=0U; i < (maxh & ~(unsigned int)1U); i += 2U)
- {
- ny = y + maxw;
- nr = r + maxw; ng = g + maxw; nb = b + maxw;
-
- for(j=0; j < (maxw & ~(unsigned int)1U); j += 2U)
- {
- sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
- ++y; ++r; ++g; ++b;
- sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
- ++y; ++r; ++g; ++b;
-
- sycc_to_rgb(offset, upb, *ny, *cb, *cr, nr, ng, nb);
- ++ny; ++nr; ++ng; ++nb;
- sycc_to_rgb(offset, upb, *ny, *cb, *cr, nr, ng, nb);
- ++ny; ++nr; ++ng; ++nb; ++cb; ++cr;
- }
- if(j < maxw)
- {
- sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
- ++y; ++r; ++g; ++b;
-
- sycc_to_rgb(offset, upb, *ny, *cb, *cr, nr, ng, nb);
- ++ny; ++nr; ++ng; ++nb; ++cb; ++cr;
- }
- y += maxw; r += maxw; g += maxw; b += maxw;
- }
- if(i < maxh)
- {
- for(j=0U; j < (maxw & ~(unsigned int)1U); j += 2U)
- {
- sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
-
- ++y; ++r; ++g; ++b;
-
- sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
-
- ++y; ++r; ++g; ++b; ++cb; ++cr;
- }
- if(j < maxw)
- {
- sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
- }
- }
-
- free(img->comps[0].data); img->comps[0].data = d0;
- free(img->comps[1].data); img->comps[1].data = d1;
- free(img->comps[2].data); img->comps[2].data = d2;
+ int *d0, *d1, *d2, *r, *g, *b, *nr, *ng, *nb;
+ const int *y, *cb, *cr, *ny;
+ unsigned int maxw, maxh, max;
+ int offset, upb;
+ unsigned int i, j;
+
+ upb = (int)img->comps[0].prec;
+ offset = 1<<(upb - 1);
+ upb = (1<<upb)-1;
+
+ maxw = (unsigned int)img->comps[0].w;
+ maxh = (unsigned int)img->comps[0].h;
+ max = maxw * maxh;
+
+ y = img->comps[0].data;
+ cb = img->comps[1].data;
+ cr = img->comps[2].data;
+
+ d0 = r = (int*)malloc(sizeof(int) * (size_t)max);
+ d1 = g = (int*)malloc(sizeof(int) * (size_t)max);
+ d2 = b = (int*)malloc(sizeof(int) * (size_t)max);
+
+ for(i=0U; i < (maxh & ~(unsigned int)1U); i += 2U) {
+ ny = y + maxw;
+ nr = r + maxw;
+ ng = g + maxw;
+ nb = b + maxw;
+
+ for(j=0; j < (maxw & ~(unsigned int)1U); j += 2U) {
+ sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
+ ++y;
+ ++r;
+ ++g;
+ ++b;
+ sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
+ ++y;
+ ++r;
+ ++g;
+ ++b;
+
+ sycc_to_rgb(offset, upb, *ny, *cb, *cr, nr, ng, nb);
+ ++ny;
+ ++nr;
+ ++ng;
+ ++nb;
+ sycc_to_rgb(offset, upb, *ny, *cb, *cr, nr, ng, nb);
+ ++ny;
+ ++nr;
+ ++ng;
+ ++nb;
+ ++cb;
+ ++cr;
+ }
+ if(j < maxw) {
+ sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
+ ++y;
+ ++r;
+ ++g;
+ ++b;
+
+ sycc_to_rgb(offset, upb, *ny, *cb, *cr, nr, ng, nb);
+ ++ny;
+ ++nr;
+ ++ng;
+ ++nb;
+ ++cb;
+ ++cr;
+ }
+ y += maxw;
+ r += maxw;
+ g += maxw;
+ b += maxw;
+ }
+ if(i < maxh) {
+ for(j=0U; j < (maxw & ~(unsigned int)1U); j += 2U) {
+ sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
+
+ ++y;
+ ++r;
+ ++g;
+ ++b;
+
+ sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
+
+ ++y;
+ ++r;
+ ++g;
+ ++b;
+ ++cb;
+ ++cr;
+ }
+ if(j < maxw) {
+ sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
+ }
+ }
+
+ free(img->comps[0].data);
+ img->comps[0].data = d0;
+ free(img->comps[1].data);
+ img->comps[1].data = d1;
+ free(img->comps[2].data);
+ img->comps[2].data = d2;
#if defined(USE_JPWL) || defined(USE_MJ2)
- img->comps[1].w = maxw; img->comps[1].h = maxh;
- img->comps[2].w = maxw; img->comps[2].h = maxh;
+ img->comps[1].w = maxw;
+ img->comps[1].h = maxh;
+ img->comps[2].w = maxw;
+ img->comps[2].h = maxh;
#else
- img->comps[1].w = (OPJ_UINT32)maxw; img->comps[1].h = (OPJ_UINT32)maxh;
- img->comps[2].w = (OPJ_UINT32)maxw; img->comps[2].h = (OPJ_UINT32)maxh;
+ img->comps[1].w = (OPJ_UINT32)maxw;
+ img->comps[1].h = (OPJ_UINT32)maxh;
+ img->comps[2].w = (OPJ_UINT32)maxw;
+ img->comps[2].h = (OPJ_UINT32)maxh;
#endif
- img->comps[1].dx = img->comps[0].dx;
- img->comps[2].dx = img->comps[0].dx;
- img->comps[1].dy = img->comps[0].dy;
- img->comps[2].dy = img->comps[0].dy;
+ img->comps[1].dx = img->comps[0].dx;
+ img->comps[2].dx = img->comps[0].dx;
+ img->comps[1].dy = img->comps[0].dy;
+ img->comps[2].dy = img->comps[0].dy;
}/* sycc420_to_rgb() */
void color_sycc_to_rgb(opj_image_t *img)
{
- if(img->numcomps < 3)
- {
- img->color_space = OPJ_CLRSPC_GRAY;
- return;
- }
-
- if((img->comps[0].dx == 1)
- && (img->comps[1].dx == 2)
- && (img->comps[2].dx == 2)
- && (img->comps[0].dy == 1)
- && (img->comps[1].dy == 2)
- && (img->comps[2].dy == 2))/* horizontal and vertical sub-sample */
- {
- sycc420_to_rgb(img);
- }
- else
- if((img->comps[0].dx == 1)
- && (img->comps[1].dx == 2)
- && (img->comps[2].dx == 2)
- && (img->comps[0].dy == 1)
- && (img->comps[1].dy == 1)
- && (img->comps[2].dy == 1))/* horizontal sub-sample only */
- {
- sycc422_to_rgb(img);
- }
- else
- if((img->comps[0].dx == 1)
- && (img->comps[1].dx == 1)
- && (img->comps[2].dx == 1)
- && (img->comps[0].dy == 1)
- && (img->comps[1].dy == 1)
- && (img->comps[2].dy == 1))/* no sub-sample */
- {
- sycc444_to_rgb(img);
- }
- else
- {
- fprintf(stderr,"%s:%d:color_sycc_to_rgb\n\tCAN NOT CONVERT\n", __FILE__,__LINE__);
- return;
- }
- img->color_space = OPJ_CLRSPC_SRGB;
+ if(img->numcomps < 3) {
+ img->color_space = OPJ_CLRSPC_GRAY;
+ return;
+ }
+
+ if((img->comps[0].dx == 1)
+ && (img->comps[1].dx == 2)
+ && (img->comps[2].dx == 2)
+ && (img->comps[0].dy == 1)
+ && (img->comps[1].dy == 2)
+ && (img->comps[2].dy == 2)) { /* horizontal and vertical sub-sample */
+ sycc420_to_rgb(img);
+ } else if((img->comps[0].dx == 1)
+ && (img->comps[1].dx == 2)
+ && (img->comps[2].dx == 2)
+ && (img->comps[0].dy == 1)
+ && (img->comps[1].dy == 1)
+ && (img->comps[2].dy == 1)) { /* horizontal sub-sample only */
+ sycc422_to_rgb(img);
+ } else if((img->comps[0].dx == 1)
+ && (img->comps[1].dx == 1)
+ && (img->comps[2].dx == 1)
+ && (img->comps[0].dy == 1)
+ && (img->comps[1].dy == 1)
+ && (img->comps[2].dy == 1)) { /* no sub-sample */
+ sycc444_to_rgb(img);
+ } else {
+ fprintf(stderr,"%s:%d:color_sycc_to_rgb\n\tCAN NOT CONVERT\n", __FILE__,__LINE__);
+ return;
+ }
+ img->color_space = OPJ_CLRSPC_SRGB;
}/* color_sycc_to_rgb() */
@@ -325,412 +389,397 @@ void color_sycc_to_rgb(opj_image_t *img)
/*#define DEBUG_PROFILE*/
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 =
- cmsOpenProfileFromMem(image->icc_profile_buf, image->icc_profile_len);
+ 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 =
+ cmsOpenProfileFromMem(image->icc_profile_buf, image->icc_profile_len);
#ifdef DEBUG_PROFILE
- FILE *icm = fopen("debug.icm","wb");
- fwrite( image->icc_profile_buf,1, image->icc_profile_len,icm);
- fclose(icm);
+ FILE *icm = fopen("debug.icm","wb");
+ fwrite( image->icc_profile_buf,1, image->icc_profile_len,icm);
+ fclose(icm);
#endif
- 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;
-
- if(out_space == cmsSigRgbData) /* enumCS 16 */
- {
- if( prec <= 8 )
- {
- in_type = TYPE_RGB_8;
- out_type = TYPE_RGB_8;
- }
- else
- {
- in_type = TYPE_RGB_16;
- out_type = TYPE_RGB_16;
- }
- out_prof = cmsCreate_sRGBProfile();
- image->color_space = OPJ_CLRSPC_SRGB;
- }
- else
- if(out_space == cmsSigGrayData) /* enumCS 17 */
- {
- in_type = TYPE_GRAY_8;
- out_type = TYPE_RGB_8;
- out_prof = cmsCreate_sRGBProfile();
- image->color_space = OPJ_CLRSPC_SRGB;
- }
- else
- if(out_space == cmsSigYCbCrData) /* enumCS 18 */
- {
- in_type = TYPE_YCbCr_16;
- out_type = TYPE_RGB_16;
- out_prof = cmsCreate_sRGBProfile();
- image->color_space = OPJ_CLRSPC_SRGB;
- }
- else
- {
+ 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;
+
+ if(out_space == cmsSigRgbData) { /* enumCS 16 */
+ if( prec <= 8 ) {
+ in_type = TYPE_RGB_8;
+ out_type = TYPE_RGB_8;
+ } else {
+ in_type = TYPE_RGB_16;
+ out_type = TYPE_RGB_16;
+ }
+ out_prof = cmsCreate_sRGBProfile();
+ image->color_space = OPJ_CLRSPC_SRGB;
+ } else if(out_space == cmsSigGrayData) { /* enumCS 17 */
+ in_type = TYPE_GRAY_8;
+ out_type = TYPE_RGB_8;
+ out_prof = cmsCreate_sRGBProfile();
+ image->color_space = OPJ_CLRSPC_SRGB;
+ } else if(out_space == cmsSigYCbCrData) { /* enumCS 18 */
+ in_type = TYPE_YCbCr_16;
+ out_type = TYPE_RGB_16;
+ out_prof = cmsCreate_sRGBProfile();
+ image->color_space = OPJ_CLRSPC_SRGB;
+ } else {
#ifdef DEBUG_PROFILE
-fprintf(stderr,"%s:%d: color_apply_icc_profile\n\tICC Profile has unknown "
-"output colorspace(%#x)(%c%c%c%c)\n\tICC Profile ignored.\n",
-__FILE__,__LINE__,out_space,
- (out_space>>24) & 0xff,(out_space>>16) & 0xff,
- (out_space>>8) & 0xff, out_space & 0xff);
+ fprintf(stderr,"%s:%d: color_apply_icc_profile\n\tICC Profile has unknown "
+ "output colorspace(%#x)(%c%c%c%c)\n\tICC Profile ignored.\n",
+ __FILE__,__LINE__,out_space,
+ (out_space>>24) & 0xff,(out_space>>16) & 0xff,
+ (out_space>>8) & 0xff, out_space & 0xff);
#endif
- return;
- }
+ return;
+ }
#ifdef DEBUG_PROFILE
-fprintf(stderr,"%s:%d:color_apply_icc_profile\n\tchannels(%d) prec(%d) w(%d) h(%d)"
-"\n\tprofile: in(%p) out(%p)\n",__FILE__,__LINE__,image->numcomps,prec,
- max_w,max_h, (void*)in_prof,(void*)out_prof);
-
-fprintf(stderr,"\trender_intent (%u)\n\t"
-"color_space: in(%#x)(%c%c%c%c) out:(%#x)(%c%c%c%c)\n\t"
-" type: in(%u) out:(%u)\n",
- intent,
- in_space,
- (in_space>>24) & 0xff,(in_space>>16) & 0xff,
- (in_space>>8) & 0xff, in_space & 0xff,
-
- out_space,
- (out_space>>24) & 0xff,(out_space>>16) & 0xff,
- (out_space>>8) & 0xff, out_space & 0xff,
-
- in_type,out_type
- );
+ fprintf(stderr,"%s:%d:color_apply_icc_profile\n\tchannels(%d) prec(%d) w(%d) h(%d)"
+ "\n\tprofile: in(%p) out(%p)\n",__FILE__,__LINE__,image->numcomps,prec,
+ max_w,max_h, (void*)in_prof,(void*)out_prof);
+
+ fprintf(stderr,"\trender_intent (%u)\n\t"
+ "color_space: in(%#x)(%c%c%c%c) out:(%#x)(%c%c%c%c)\n\t"
+ " type: in(%u) out:(%u)\n",
+ intent,
+ in_space,
+ (in_space>>24) & 0xff,(in_space>>16) & 0xff,
+ (in_space>>8) & 0xff, in_space & 0xff,
+
+ out_space,
+ (out_space>>24) & 0xff,(out_space>>16) & 0xff,
+ (out_space>>8) & 0xff, out_space & 0xff,
+
+ in_type,out_type
+ );
#else
- (void)prec;
- (void)in_space;
+ (void)prec;
+ (void)in_space;
#endif /* DEBUG_PROFILE */
- transform = cmsCreateTransform(in_prof, in_type,
- out_prof, out_type, intent, 0);
+ transform = cmsCreateTransform(in_prof, in_type,
+ out_prof, out_type, intent, 0);
#ifdef OPJ_HAVE_LIBLCMS2
-/* Possible for: LCMS_VERSION >= 2000 :*/
- cmsCloseProfile(in_prof);
- cmsCloseProfile(out_prof);
+ /* Possible for: LCMS_VERSION >= 2000 :*/
+ cmsCloseProfile(in_prof);
+ cmsCloseProfile(out_prof);
#endif
- if(transform == NULL)
- {
+ if(transform == NULL) {
#ifdef DEBUG_PROFILE
-fprintf(stderr,"%s:%d:color_apply_icc_profile\n\tcmsCreateTransform failed. "
-"ICC Profile ignored.\n",__FILE__,__LINE__);
+ fprintf(stderr,"%s:%d:color_apply_icc_profile\n\tcmsCreateTransform failed. "
+ "ICC Profile ignored.\n",__FILE__,__LINE__);
#endif
- image->color_space = oldspace;
+ image->color_space = oldspace;
#ifdef OPJ_HAVE_LIBLCMS1
- cmsCloseProfile(in_prof);
- cmsCloseProfile(out_prof);
+ cmsCloseProfile(in_prof);
+ cmsCloseProfile(out_prof);
#endif
- return;
- }
-
- if(image->numcomps > 2)/* RGB, RGBA */
- {
- if( prec <= 8 )
- {
- unsigned char *inbuf, *outbuf, *in, *out;
- max = max_w * max_h;
- nr_samples = (cmsUInt32Number)max * 3 * (cmsUInt32Number)sizeof(unsigned char);
- in = inbuf = (unsigned char*)malloc(nr_samples);
- out = outbuf = (unsigned char*)malloc(nr_samples);
-
- r = image->comps[0].data;
- g = image->comps[1].data;
- b = image->comps[2].data;
-
- for(i = 0; i < max; ++i)
- {
- *in++ = (unsigned char)*r++;
- *in++ = (unsigned char)*g++;
- *in++ = (unsigned char)*b++;
- }
-
- 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)
- {
- *r++ = (int)*out++;
- *g++ = (int)*out++;
- *b++ = (int)*out++;
- }
- free(inbuf); free(outbuf);
- }
- else
- {
- unsigned short *inbuf, *outbuf, *in, *out;
- max = max_w * max_h;
- nr_samples = (cmsUInt32Number)max * 3 * (cmsUInt32Number)sizeof(unsigned short);
- in = inbuf = (unsigned short*)malloc(nr_samples);
- out = outbuf = (unsigned short*)malloc(nr_samples);
-
- r = image->comps[0].data;
- g = image->comps[1].data;
- b = image->comps[2].data;
-
- for(i = 0; i < max; ++i)
- {
- *in++ = (unsigned short)*r++;
- *in++ = (unsigned short)*g++;
- *in++ = (unsigned short)*b++;
- }
-
- 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)
- {
- *r++ = (int)*out++;
- *g++ = (int)*out++;
- *b++ = (int)*out++;
- }
- free(inbuf); free(outbuf);
- }
- }
- else /* GRAY, GRAYA */
- {
- unsigned char *in, *inbuf, *out, *outbuf;
- max = max_w * max_h;
- nr_samples = (cmsUInt32Number)max * 3 * sizeof(unsigned char);
- in = inbuf = (unsigned char*)malloc(nr_samples);
- out = outbuf = (unsigned char*)malloc(nr_samples);
-
- image->comps = (opj_image_comp_t*)
- realloc(image->comps, (image->numcomps+2)*sizeof(opj_image_comp_t));
-
- if(image->numcomps == 2)
- image->comps[3] = image->comps[1];
-
- image->comps[1] = image->comps[0];
- image->comps[2] = image->comps[0];
-
- image->comps[1].data = (int*)calloc((size_t)max, sizeof(int));
- image->comps[2].data = (int*)calloc((size_t)max, sizeof(int));
-
- image->numcomps += 2;
-
- r = image->comps[0].data;
-
- for(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)
- {
- *r++ = (int)*out++; *g++ = (int)*out++; *b++ = (int)*out++;
- }
- free(inbuf); free(outbuf);
-
- }/* if(image->numcomps */
-
- cmsDeleteTransform(transform);
+ return;
+ }
+
+ if(image->numcomps > 2) { /* RGB, RGBA */
+ if( prec <= 8 ) {
+ unsigned char *inbuf, *outbuf, *in, *out;
+ max = max_w * max_h;
+ nr_samples = (cmsUInt32Number)max * 3 * (cmsUInt32Number)sizeof(unsigned char);
+ in = inbuf = (unsigned char*)malloc(nr_samples);
+ out = outbuf = (unsigned char*)malloc(nr_samples);
+
+ r = image->comps[0].data;
+ g = image->comps[1].data;
+ b = image->comps[2].data;
+
+ for(i = 0; i < max; ++i) {
+ *in++ = (unsigned char)*r++;
+ *in++ = (unsigned char)*g++;
+ *in++ = (unsigned char)*b++;
+ }
+
+ 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) {
+ *r++ = (int)*out++;
+ *g++ = (int)*out++;
+ *b++ = (int)*out++;
+ }
+ free(inbuf);
+ free(outbuf);
+ } else {
+ unsigned short *inbuf, *outbuf, *in, *out;
+ max = max_w * max_h;
+ nr_samples = (cmsUInt32Number)max * 3 * (cmsUInt32Number)sizeof(unsigned short);
+ in = inbuf = (unsigned short*)malloc(nr_samples);
+ out = outbuf = (unsigned short*)malloc(nr_samples);
+
+ r = image->comps[0].data;
+ g = image->comps[1].data;
+ b = image->comps[2].data;
+
+ for(i = 0; i < max; ++i) {
+ *in++ = (unsigned short)*r++;
+ *in++ = (unsigned short)*g++;
+ *in++ = (unsigned short)*b++;
+ }
+
+ 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) {
+ *r++ = (int)*out++;
+ *g++ = (int)*out++;
+ *b++ = (int)*out++;
+ }
+ free(inbuf);
+ free(outbuf);
+ }
+ } else { /* GRAY, GRAYA */
+ unsigned char *in, *inbuf, *out, *outbuf;
+ max = max_w * max_h;
+ nr_samples = (cmsUInt32Number)max * 3 * sizeof(unsigned char);
+ in = inbuf = (unsigned char*)malloc(nr_samples);
+ out = outbuf = (unsigned char*)malloc(nr_samples);
+
+ image->comps = (opj_image_comp_t*)
+ realloc(image->comps, (image->numcomps+2)*sizeof(opj_image_comp_t));
+
+ if(image->numcomps == 2)
+ image->comps[3] = image->comps[1];
+
+ image->comps[1] = image->comps[0];
+ image->comps[2] = image->comps[0];
+
+ image->comps[1].data = (int*)calloc((size_t)max, sizeof(int));
+ image->comps[2].data = (int*)calloc((size_t)max, sizeof(int));
+
+ image->numcomps += 2;
+
+ r = image->comps[0].data;
+
+ for(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) {
+ *r++ = (int)*out++;
+ *g++ = (int)*out++;
+ *b++ = (int)*out++;
+ }
+ free(inbuf);
+ free(outbuf);
+
+ }/* if(image->numcomps */
+
+ cmsDeleteTransform(transform);
#ifdef OPJ_HAVE_LIBLCMS1
- cmsCloseProfile(in_prof);
- cmsCloseProfile(out_prof);
+ cmsCloseProfile(in_prof);
+ cmsCloseProfile(out_prof);
#endif
}/* color_apply_icc_profile() */
void color_cielab_to_rgb(opj_image_t *image)
{
- int *row;
- int enumcs, numcomps;
-
- image->color_space = OPJ_CLRSPC_SRGB;
-
- numcomps = (int)image->numcomps;
-
- if(numcomps != 3)
- {
- fprintf(stderr,"%s:%d:\n\tnumcomps %d not handled. Quitting.\n",
- __FILE__,__LINE__,numcomps);
- return;
- }
-
- row = (int*)image->icc_profile_buf;
- enumcs = row[0];
-
- if(enumcs == 14) /* CIELab */
- {
- int *L, *a, *b, *red, *green, *blue;
- int *src0, *src1, *src2, *dst0, *dst1, *dst2;
- double rl, ol, ra, oa, rb, ob, prec0, prec1, prec2;
- double minL, maxL, mina, maxa, minb, maxb;
- unsigned int default_type;
- unsigned int i, max;
- cmsHPROFILE in, out;
- cmsHTRANSFORM transform;
- cmsUInt16Number RGB[3];
- cmsCIELab Lab;
-
- in = cmsCreateLab4Profile(NULL);
- out = cmsCreate_sRGBProfile();
-
- transform = cmsCreateTransform(in, TYPE_Lab_DBL, out, TYPE_RGB_16, INTENT_PERCEPTUAL, 0);
-
+ int *row;
+ int enumcs, numcomps;
+
+ image->color_space = OPJ_CLRSPC_SRGB;
+
+ numcomps = (int)image->numcomps;
+
+ if(numcomps != 3) {
+ fprintf(stderr,"%s:%d:\n\tnumcomps %d not handled. Quitting.\n",
+ __FILE__,__LINE__,numcomps);
+ return;
+ }
+
+ row = (int*)image->icc_profile_buf;
+ enumcs = row[0];
+
+ if(enumcs == 14) { /* CIELab */
+ int *L, *a, *b, *red, *green, *blue;
+ int *src0, *src1, *src2, *dst0, *dst1, *dst2;
+ double rl, ol, ra, oa, rb, ob, prec0, prec1, prec2;
+ double minL, maxL, mina, maxa, minb, maxb;
+ unsigned int default_type;
+ unsigned int i, max;
+ cmsHPROFILE in, out;
+ cmsHTRANSFORM transform;
+ cmsUInt16Number RGB[3];
+ cmsCIELab Lab;
+
+ in = cmsCreateLab4Profile(NULL);
+ out = cmsCreate_sRGBProfile();
+
+ transform = cmsCreateTransform(in, TYPE_Lab_DBL, out, TYPE_RGB_16, INTENT_PERCEPTUAL, 0);
+
#ifdef OPJ_HAVE_LIBLCMS2
- cmsCloseProfile(in);
- cmsCloseProfile(out);
+ cmsCloseProfile(in);
+ cmsCloseProfile(out);
#endif
- if(transform == NULL)
- {
+ if(transform == NULL) {
#ifdef OPJ_HAVE_LIBLCMS1
- cmsCloseProfile(in);
- cmsCloseProfile(out);
+ cmsCloseProfile(in);
+ cmsCloseProfile(out);
#endif
- return;
- }
- prec0 = (double)image->comps[0].prec;
- prec1 = (double)image->comps[1].prec;
- prec2 = (double)image->comps[2].prec;
-
- default_type = (unsigned int)row[1];
-
- if(default_type == 0x44454600)/* DEF : default */
- {
- rl = 100; ra = 170; rb = 200;
- ol = 0;
- oa = pow(2, prec1 - 1);
- ob = pow(2, prec2 - 2) + pow(2, prec2 - 3);
- }
- else
- {
- rl = row[2]; ra = row[4]; rb = row[6];
- ol = row[3]; oa = row[5]; ob = row[7];
- }
-
- L = src0 = image->comps[0].data;
- a = src1 = image->comps[1].data;
- b = src2 = image->comps[2].data;
-
- max = image->comps[0].w * image->comps[0].h;
-
- red = dst0 = (int*)malloc(max * sizeof(int));
- green = dst1 = (int*)malloc(max * sizeof(int));
- blue = dst2 = (int*)malloc(max * sizeof(int));
-
- minL = -(rl * ol)/(pow(2, prec0)-1);
- maxL = minL + rl;
-
- mina = -(ra * oa)/(pow(2, prec1)-1);
- maxa = mina + ra;
-
- minb = -(rb * ob)/(pow(2, prec2)-1);
- maxb = minb + rb;
-
- for(i = 0; i < max; ++i)
- {
- Lab.L = minL + (double)(*L) * (maxL - minL)/(pow(2, prec0)-1); ++L;
- Lab.a = mina + (double)(*a) * (maxa - mina)/(pow(2, prec1)-1); ++a;
- Lab.b = minb + (double)(*b) * (maxb - minb)/(pow(2, prec2)-1); ++b;
-
- cmsDoTransform(transform, &Lab, RGB, 1);
-
- *red++ = RGB[0];
- *green++ = RGB[1];
- *blue++ = RGB[2];
- }
- cmsDeleteTransform(transform);
+ return;
+ }
+ prec0 = (double)image->comps[0].prec;
+ prec1 = (double)image->comps[1].prec;
+ prec2 = (double)image->comps[2].prec;
+
+ default_type = (unsigned int)row[1];
+
+ if(default_type == 0x44454600) { /* DEF : default */
+ rl = 100;
+ ra = 170;
+ rb = 200;
+ ol = 0;
+ oa = pow(2, prec1 - 1);
+ ob = pow(2, prec2 - 2) + pow(2, prec2 - 3);
+ } else {
+ rl = row[2];
+ ra = row[4];
+ rb = row[6];
+ ol = row[3];
+ oa = row[5];
+ ob = row[7];
+ }
+
+ L = src0 = image->comps[0].data;
+ a = src1 = image->comps[1].data;
+ b = src2 = image->comps[2].data;
+
+ max = image->comps[0].w * image->comps[0].h;
+
+ red = dst0 = (int*)malloc(max * sizeof(int));
+ green = dst1 = (int*)malloc(max * sizeof(int));
+ blue = dst2 = (int*)malloc(max * sizeof(int));
+
+ minL = -(rl * ol)/(pow(2, prec0)-1);
+ maxL = minL + rl;
+
+ mina = -(ra * oa)/(pow(2, prec1)-1);
+ maxa = mina + ra;
+
+ minb = -(rb * ob)/(pow(2, prec2)-1);
+ maxb = minb + rb;
+
+ for(i = 0; i < max; ++i) {
+ Lab.L = minL + (double)(*L) * (maxL - minL)/(pow(2, prec0)-1);
+ ++L;
+ Lab.a = mina + (double)(*a) * (maxa - mina)/(pow(2, prec1)-1);
+ ++a;
+ Lab.b = minb + (double)(*b) * (maxb - minb)/(pow(2, prec2)-1);
+ ++b;
+
+ cmsDoTransform(transform, &Lab, RGB, 1);
+
+ *red++ = RGB[0];
+ *green++ = RGB[1];
+ *blue++ = RGB[2];
+ }
+ cmsDeleteTransform(transform);
#ifdef OPJ_HAVE_LIBLCMS1
- cmsCloseProfile(in);
- cmsCloseProfile(out);
+ cmsCloseProfile(in);
+ cmsCloseProfile(out);
#endif
- free(src0); image->comps[0].data = dst0;
- free(src1); image->comps[1].data = dst1;
- free(src2); image->comps[2].data = dst2;
-
- image->color_space = OPJ_CLRSPC_SRGB;
- image->comps[0].prec = 16;
- image->comps[1].prec = 16;
- image->comps[2].prec = 16;
-
- return;
- }
-
- fprintf(stderr,"%s:%d:\n\tenumCS %d not handled. Ignoring.\n", __FILE__,__LINE__, enumcs);
+ free(src0);
+ image->comps[0].data = dst0;
+ free(src1);
+ image->comps[1].data = dst1;
+ free(src2);
+ image->comps[2].data = dst2;
+
+ image->color_space = OPJ_CLRSPC_SRGB;
+ image->comps[0].prec = 16;
+ image->comps[1].prec = 16;
+ image->comps[2].prec = 16;
+
+ return;
+ }
+
+ fprintf(stderr,"%s:%d:\n\tenumCS %d not handled. Ignoring.\n", __FILE__,__LINE__, enumcs);
}/* color_apply_conversion() */
#endif /* OPJ_HAVE_LIBLCMS2 || OPJ_HAVE_LIBLCMS1 */
void color_cmyk_to_rgb(opj_image_t *image)
{
- float C, M, Y, K;
- float sC, sM, sY, sK;
- unsigned int w, h, max, i;
-
- w = image->comps[0].w;
- h = image->comps[0].h;
-
- if(image->numcomps < 4) return;
-
- max = w * h;
-
- sC = 1.0F / (float)((1 << image->comps[0].prec) - 1);
- sM = 1.0F / (float)((1 << image->comps[1].prec) - 1);
- sY = 1.0F / (float)((1 << image->comps[2].prec) - 1);
- sK = 1.0F / (float)((1 << image->comps[3].prec) - 1);
-
- for(i = 0; i < max; ++i)
- {
- /* CMYK values from 0 to 1 */
- C = (float)(image->comps[0].data[i]) * sC;
- M = (float)(image->comps[1].data[i]) * sM;
- Y = (float)(image->comps[2].data[i]) * sY;
- K = (float)(image->comps[3].data[i]) * sK;
-
- /* Invert all CMYK values */
- C = 1.0F - C;
- M = 1.0F - M;
- Y = 1.0F - Y;
- K = 1.0F - K;
-
- /* CMYK -> RGB : RGB results from 0 to 255 */
- image->comps[0].data[i] = (int)(255.0F * C * K); /* R */
- image->comps[1].data[i] = (int)(255.0F * M * K); /* G */
- image->comps[2].data[i] = (int)(255.0F * Y * K); /* B */
- }
-
- free(image->comps[3].data); image->comps[3].data = NULL;
- image->comps[0].prec = 8;
- image->comps[1].prec = 8;
- image->comps[2].prec = 8;
- image->numcomps -= 1;
- image->color_space = OPJ_CLRSPC_SRGB;
-
- for (i = 3; i < image->numcomps; ++i) {
- memcpy(&(image->comps[i]), &(image->comps[i+1]), sizeof(image->comps[i]));
- }
+ float C, M, Y, K;
+ float sC, sM, sY, sK;
+ unsigned int w, h, max, i;
+
+ w = image->comps[0].w;
+ h = image->comps[0].h;
+
+ if(image->numcomps < 4) return;
+
+ max = w * h;
+
+ sC = 1.0F / (float)((1 << image->comps[0].prec) - 1);
+ sM = 1.0F / (float)((1 << image->comps[1].prec) - 1);
+ sY = 1.0F / (float)((1 << image->comps[2].prec) - 1);
+ sK = 1.0F / (float)((1 << image->comps[3].prec) - 1);
+
+ for(i = 0; i < max; ++i) {
+ /* CMYK values from 0 to 1 */
+ C = (float)(image->comps[0].data[i]) * sC;
+ M = (float)(image->comps[1].data[i]) * sM;
+ Y = (float)(image->comps[2].data[i]) * sY;
+ K = (float)(image->comps[3].data[i]) * sK;
+
+ /* Invert all CMYK values */
+ C = 1.0F - C;
+ M = 1.0F - M;
+ Y = 1.0F - Y;
+ K = 1.0F - K;
+
+ /* CMYK -> RGB : RGB results from 0 to 255 */
+ image->comps[0].data[i] = (int)(255.0F * C * K); /* R */
+ image->comps[1].data[i] = (int)(255.0F * M * K); /* G */
+ image->comps[2].data[i] = (int)(255.0F * Y * K); /* B */
+ }
+
+ free(image->comps[3].data);
+ image->comps[3].data = NULL;
+ image->comps[0].prec = 8;
+ image->comps[1].prec = 8;
+ image->comps[2].prec = 8;
+ image->numcomps -= 1;
+ image->color_space = OPJ_CLRSPC_SRGB;
+
+ for (i = 3; i < image->numcomps; ++i) {
+ memcpy(&(image->comps[i]), &(image->comps[i+1]), sizeof(image->comps[i]));
+ }
}/* color_cmyk_to_rgb() */
@@ -739,50 +788,54 @@ void color_cmyk_to_rgb(opj_image_t *image)
*/
void color_esycc_to_rgb(opj_image_t *image)
{
- int y, cb, cr, sign1, sign2, val;
- unsigned int w, h, max, i;
- int flip_value = (1 << (image->comps[0].prec-1));
- int max_value = (1 << image->comps[0].prec) - 1;
-
- if(image->numcomps < 3) return;
-
- w = image->comps[0].w;
- h = image->comps[0].h;
-
- sign1 = (int)image->comps[1].sgnd;
- sign2 = (int)image->comps[2].sgnd;
-
- max = w * h;
-
- for(i = 0; i < max; ++i)
- {
-
- y = image->comps[0].data[i]; cb = image->comps[1].data[i]; cr = image->comps[2].data[i];
-
- if( !sign1) cb -= flip_value;
- if( !sign2) cr -= flip_value;
-
- val = (int)
- ((float)y - (float)0.0000368 * (float)cb
- + (float)1.40199 * (float)cr + (float)0.5);
-
- if(val > max_value) val = max_value; else if(val < 0) val = 0;
- image->comps[0].data[i] = val;
-
- val = (int)
- ((float)1.0003 * (float)y - (float)0.344125 * (float)cb
- - (float)0.7141128 * (float)cr + (float)0.5);
-
- if(val > max_value) val = max_value; else if(val < 0) val = 0;
- image->comps[1].data[i] = val;
-
- val = (int)
- ((float)0.999823 * (float)y + (float)1.77204 * (float)cb
- - (float)0.000008 *(float)cr + (float)0.5);
-
- if(val > max_value) val = max_value; else if(val < 0) val = 0;
- image->comps[2].data[i] = val;
- }
- image->color_space = OPJ_CLRSPC_SRGB;
+ int y, cb, cr, sign1, sign2, val;
+ unsigned int w, h, max, i;
+ int flip_value = (1 << (image->comps[0].prec-1));
+ int max_value = (1 << image->comps[0].prec) - 1;
+
+ if(image->numcomps < 3) return;
+
+ w = image->comps[0].w;
+ h = image->comps[0].h;
+
+ sign1 = (int)image->comps[1].sgnd;
+ sign2 = (int)image->comps[2].sgnd;
+
+ max = w * h;
+
+ for(i = 0; i < max; ++i) {
+
+ y = image->comps[0].data[i];
+ cb = image->comps[1].data[i];
+ cr = image->comps[2].data[i];
+
+ if( !sign1) cb -= flip_value;
+ if( !sign2) cr -= flip_value;
+
+ val = (int)
+ ((float)y - (float)0.0000368 * (float)cb
+ + (float)1.40199 * (float)cr + (float)0.5);
+
+ if(val > max_value) val = max_value;
+ else if(val < 0) val = 0;
+ image->comps[0].data[i] = val;
+
+ val = (int)
+ ((float)1.0003 * (float)y - (float)0.344125 * (float)cb
+ - (float)0.7141128 * (float)cr + (float)0.5);
+
+ if(val > max_value) val = max_value;
+ else if(val < 0) val = 0;
+ image->comps[1].data[i] = val;
+
+ val = (int)
+ ((float)0.999823 * (float)y + (float)1.77204 * (float)cb
+ - (float)0.000008 *(float)cr + (float)0.5);
+
+ if(val > max_value) val = max_value;
+ else if(val < 0) val = 0;
+ image->comps[2].data[i] = val;
+ }
+ image->color_space = OPJ_CLRSPC_SRGB;
}/* color_esycc_to_rgb() */
diff --git a/src/bin/common/color.h b/src/bin/common/color.h
index 0cd78e89..24792544 100644
--- a/src/bin/common/color.h
+++ b/src/bin/common/color.h
@@ -1,6 +1,6 @@
/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
* party and contributor rights, including patent rights, and no such rights
* are granted under this license.
*
@@ -8,7 +8,7 @@
* Copyright (c) 2002-2014, Professor Benoit Macq
* Copyright (c) 2001-2003, David Janssens
* Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux
+ * Copyright (c) 2003-2007, Francois-Olivier Devaux
* Copyright (c) 2003-2014, Antonin Descampe
* Copyright (c) 2005, Herve Drolon, FreeImage Team
* All rights reserved.
diff --git a/src/bin/common/format_defs.h b/src/bin/common/format_defs.h
index 608d7b3a..1985b54f 100644
--- a/src/bin/common/format_defs.h
+++ b/src/bin/common/format_defs.h
@@ -1,6 +1,6 @@
/*
- * The copyright in this software is being made available under the 2-clauses
- * BSD License, included below. This software may be subject to other third
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
* party and contributor rights, including patent rights, and no such rights
* are granted under this license.
*
@@ -8,7 +8,7 @@
* Copyright (c) 2002-2014, Professor Benoit Macq
* Copyright (c) 2001-2003, David Janssens
* Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux
+ * Copyright (c) 2003-2007, Francois-Olivier Devaux
* Copyright (c) 2003-2014, Antonin Descampe
* Copyright (c) 2005, Herve Drolon, FreeImage Team
* All rights reserved.
diff --git a/src/bin/common/opj_getopt.c b/src/bin/common/opj_getopt.c
index 65f271f8..46a76b92 100644
--- a/src/bin/common/opj_getopt.c
+++ b/src/bin/common/opj_getopt.c
@@ -1,6 +1,6 @@
/*
- * The copyright in this software is being made available under the 3-clauses
- * BSD License, included below. This software may be subject to other third
+ * The copyright in this software is being made available under the 3-clauses
+ * BSD License, included below. This software may be subject to other third
* party and contributor rights, including patent rights, and no such rights
* are granted under this license.
*
@@ -44,212 +44,213 @@ static char sccsid[] = "@(#)opj_getopt.c 8.3 (Berkeley) 4/27/95";
#include "opj_getopt.h"
int opj_opterr = 1, /* if error message should be printed */
- opj_optind = 1, /* index into parent argv vector */
- opj_optopt, /* character checked for validity */
- opj_optreset; /* reset getopt */
- char *opj_optarg; /* argument associated with option */
+ opj_optind = 1, /* index into parent argv vector */
+ opj_optopt, /* character checked for validity */
+ opj_optreset; /* reset getopt */
+char *opj_optarg; /* argument associated with option */
#define BADCH (int)'?'
#define BADARG (int)':'
-static char EMSG[]={""};
+static char EMSG[]= {""};
/* As this class remembers its values from one Java call to the other, reset the values before each use */
-void opj_reset_options_reading(void) {
- opj_opterr = 1;
- opj_optind = 1;
+void opj_reset_options_reading(void)
+{
+ opj_opterr = 1;
+ opj_optind = 1;
}
/*
* getopt --
* Parse argc/argv argument vector.
*/
-int opj_getopt(int nargc, char *const *nargv, const char *ostr) {
+int opj_getopt(int nargc, char *const *nargv, const char *ostr)
+{
# define __progname nargv[0]
- static char *place = EMSG; /* option letter processing */
- const char *oli = NULL; /* option letter list index */
-
- if (opj_optreset || !*place) { /* update scanning pointer */
- opj_optreset = 0;
- if (opj_optind >= nargc || *(place = nargv[opj_optind]) != '-') {
- place = EMSG;
- return (-1);
+ static char *place = EMSG; /* option letter processing */
+ const char *oli = NULL; /* option letter list index */
+
+ if (opj_optreset || !*place) { /* update scanning pointer */
+ opj_optreset = 0;
+ if (opj_optind >= nargc || *(place = nargv[opj_optind]) != '-') {
+ place = EMSG;
+ return (-1);
+ }
+ if (place[1] && *++place == '-') { /* found "--" */
+ ++opj_optind;
+ place = EMSG;
+ return (-1);
+ }
+ } /* option letter okay? */
+ if ((opj_optopt = (int) *place++) == (int) ':' ||
+ !(oli = strchr(ostr, opj_optopt))) {
+ /*
+ * if the user didn't specify '-' as an option,
+ * assume it means -1.
+ */
+ if (opj_optopt == (int) '-')
+ return (-1);
+ if (!*place)
+ ++opj_optind;
+ if (opj_opterr && *ostr != ':') {
+ fprintf(stderr,
+ "%s: illegal option -- %c\n", __progname, opj_optopt);
+ return (BADCH);
+ }
}
- if (place[1] && *++place == '-') { /* found "--" */
- ++opj_optind;
- place = EMSG;
- return (-1);
+ if (*++oli != ':') { /* don't need argument */
+ opj_optarg = NULL;
+ if (!*place)
+ ++opj_optind;
+ } else { /* need an argument */
+ if (*place) /* no white space */
+ opj_optarg = place;
+ else if (nargc <= ++opj_optind) { /* no arg */
+ place = EMSG;
+ if (*ostr == ':')
+ return (BADARG);
+ if (opj_opterr) {
+ fprintf(stderr,
+ "%s: option requires an argument -- %c\n",
+ __progname, opj_optopt);
+ return (BADCH);
+ }
+ } else /* white space */
+ opj_optarg = nargv[opj_optind];
+ place = EMSG;
+ ++opj_optind;
}
- } /* option letter okay? */
- if ((opj_optopt = (int) *place++) == (int) ':' ||
- !(oli = strchr(ostr, opj_optopt))) {
- /*
- * if the user didn't specify '-' as an option,
- * assume it means -1.
- */
- if (opj_optopt == (int) '-')
- return (-1);
- if (!*place)
- ++opj_optind;
- if (opj_opterr && *ostr != ':') {
- fprintf(stderr,
- "%s: illegal option -- %c\n", __progname, opj_optopt);
- return (BADCH);
- }
- }
- if (*++oli != ':') { /* don't need argument */
- opj_optarg = NULL;
- if (!*place)
- ++opj_optind;
- } else { /* need an argument */
- if (*place) /* no white space */
- opj_optarg = place;
- else if (nargc <= ++opj_optind) { /* no arg */
- place = EMSG;
- if (*ostr == ':')
- return (BADARG);
- if (opj_opterr) {
- fprintf(stderr,
- "%s: option requires an argument -- %c\n",
- __progname, opj_optopt);
- return (BADCH);
- }
- } else /* white space */
- opj_optarg = nargv[opj_optind];
- place = EMSG;
- ++opj_optind;
- }
- return (opj_optopt); /* dump back option letter */
+ return (opj_optopt); /* dump back option letter */
}
int opj_getopt_long(int argc, char * const argv[], const char *optstring,
-const opj_option_t *longopts, int totlen) {
- static int lastidx,lastofs;
- const char *tmp;
- int i,len;
- char param = 1;
+ const opj_option_t *longopts, int totlen)
+{
+ static int lastidx,lastofs;
+ const char *tmp;
+ int i,len;
+ char param = 1;
again:
- if (opj_optind >= argc || !argv[opj_optind] || *argv[opj_optind]!='-')
- return -1;
-
- if (argv[opj_optind][0]=='-' && argv[opj_optind][1]==0) {
- if(opj_optind >= (argc - 1)){ /* no more input parameters */
- param = 0;
- }
- else{ /* more input parameters */
- if(argv[opj_optind + 1][0] == '-'){
- param = 0; /* Missing parameter after '-' */
- }
- else{
- param = 2;
- }
- }
- }
-
- if (param == 0) {
- ++opj_optind;
- return (BADCH);
- }
-
- if (argv[opj_optind][0]=='-') { /* long option */
- char* arg=argv[opj_optind]+1;
- const opj_option_t* o;
- o=longopts;
- len=sizeof(longopts[0]);
-
- if (param > 1){
- arg = argv[opj_optind+1];
- opj_optind++;
- }
- else
- arg = argv[opj_optind]+1;
-
- if(strlen(arg)>1){
- for (i=0;i<totlen;i=i+len,o++) {
- if (!strcmp(o->name,arg)) { /* match */
- if (o->has_arg == 0) {
- if ((argv[opj_optind+1])&&(!(argv[opj_optind+1][0]=='-'))){
- fprintf(stderr,"%s: option does not require an argument. Ignoring %s\n",arg,argv[opj_optind+1]);
- ++opj_optind;
- }
- }else{
- opj_optarg=argv[opj_optind+1];
- if(opj_optarg){
- if (opj_optarg[0] == '-'){ /* Has read next input parameter: No arg for current parameter */
- if (opj_opterr) {
- fprintf(stderr,"%s: option requires an argument\n",arg);
- return (BADCH);
- }
- }
- }
- if (!opj_optarg && o->has_arg==1) { /* no argument there */
- if (opj_opterr) {
- fprintf(stderr,"%s: option requires an argument \n",arg);
- return (BADCH);
- }
- }
- ++opj_optind;
- }
- ++opj_optind;
- if (o->flag)
- *(o->flag)=o->val;
- else
- return o->val;
- return 0;
- }
- }/*(end for)String not found in the list*/
- fprintf(stderr,"Invalid option %s\n",arg);
- ++opj_optind;
- return (BADCH);
- }else{ /*Single character input parameter*/
- if (*optstring==':') return ':';
- if (lastidx!=opj_optind) {
- lastidx=opj_optind; lastofs=0;
- }
- opj_optopt=argv[opj_optind][lastofs+1];
- if ((tmp=strchr(optstring,opj_optopt))) {/*Found input parameter in list*/
- if (*tmp==0) { /* apparently, we looked for \0, i.e. end of argument */
- ++opj_optind;
- goto again;
- }
- if (tmp[1]==':') { /* argument expected */
- if (tmp[2]==':' || argv[opj_optind][lastofs+2]) { /* "-foo", return "oo" as opj_optarg */
- if (!*(opj_optarg=argv[opj_optind]+lastofs+2)) opj_optarg=0;
- goto found;
- }
- opj_optarg=argv[opj_optind+1];
- if(opj_optarg){
- if (opj_optarg[0] == '-'){ /* Has read next input parameter: No arg for current parameter */
- if (opj_opterr) {
- fprintf(stderr,"%s: option requires an argument\n",arg);
- return (BADCH);
- }
- }
- }
- if (!opj_optarg) { /* missing argument */
- if (opj_opterr) {
- fprintf(stderr,"%s: option requires an argument\n",arg);
- return (BADCH);
- }
- }
- ++opj_optind;
- }else {/*Argument not expected*/
- ++lastofs;
- return opj_optopt;
- }
+ if (opj_optind >= argc || !argv[opj_optind] || *argv[opj_optind]!='-')
+ return -1;
+
+ if (argv[opj_optind][0]=='-' && argv[opj_optind][1]==0) {
+ if(opj_optind >= (argc - 1)) { /* no more input parameters */
+ param = 0;
+ } else { /* more input parameters */
+ if(argv[opj_optind + 1][0] == '-') {
+ param = 0; /* Missing parameter after '-' */
+ } else {
+ param = 2;
+ }
+ }
+ }
+
+ if (param == 0) {
+ ++opj_optind;
+ return (BADCH);
+ }
+
+ if (argv[opj_optind][0]=='-') { /* long option */
+ char* arg=argv[opj_optind]+1;
+ const opj_option_t* o;
+ o=longopts;
+ len=sizeof(longopts[0]);
+
+ if (param > 1) {
+ arg = argv[opj_optind+1];
+ opj_optind++;
+ } else
+ arg = argv[opj_optind]+1;
+
+ if(strlen(arg)>1) {
+ for (i=0; i<totlen; i=i+len,o++) {
+ if (!strcmp(o->name,arg)) { /* match */
+ if (o->has_arg == 0) {
+ if ((argv[opj_optind+1])&&(!(argv[opj_optind+1][0]=='-'))) {
+ fprintf(stderr,"%s: option does not require an argument. Ignoring %s\n",arg,argv[opj_optind+1]);
+ ++opj_optind;
+ }
+ } else {
+ opj_optarg=argv[opj_optind+1];
+ if(opj_optarg) {
+ if (opj_optarg[0] == '-') { /* Has read next input parameter: No arg for current parameter */
+ if (opj_opterr) {
+ fprintf(stderr,"%s: option requires an argument\n",arg);
+ return (BADCH);
+ }
+ }
+ }
+ if (!opj_optarg && o->has_arg==1) { /* no argument there */
+ if (opj_opterr) {
+ fprintf(stderr,"%s: option requires an argument \n",arg);
+ return (BADCH);
+ }
+ }
+ ++opj_optind;
+ }
+ ++opj_optind;
+ if (o->flag)
+ *(o->flag)=o->val;
+ else
+ return o->val;
+ return 0;
+ }
+ }/*(end for)String not found in the list*/
+ fprintf(stderr,"Invalid option %s\n",arg);
+ ++opj_optind;
+ return (BADCH);
+ } else { /*Single character input parameter*/
+ if (*optstring==':') return ':';
+ if (lastidx!=opj_optind) {
+ lastidx=opj_optind;
+ lastofs=0;
+ }
+ opj_optopt=argv[opj_optind][lastofs+1];
+ if ((tmp=strchr(optstring,opj_optopt))) {/*Found input parameter in list*/
+ if (*tmp==0) { /* apparently, we looked for \0, i.e. end of argument */
+ ++opj_optind;
+ goto again;
+ }
+ if (tmp[1]==':') { /* argument expected */
+ if (tmp[2]==':' || argv[opj_optind][lastofs+2]) { /* "-foo", return "oo" as opj_optarg */
+ if (!*(opj_optarg=argv[opj_optind]+lastofs+2)) opj_optarg=0;
+ goto found;
+ }
+ opj_optarg=argv[opj_optind+1];
+ if(opj_optarg) {
+ if (opj_optarg[0] == '-') { /* Has read next input parameter: No arg for current parameter */
+ if (opj_opterr) {
+ fprintf(stderr,"%s: option requires an argument\n",arg);
+ return (BADCH);
+ }
+ }
+ }
+ if (!opj_optarg) { /* missing argument */
+ if (opj_opterr) {
+ fprintf(stderr,"%s: option requires an argument\n",arg);
+ return (BADCH);
+ }
+ }
+ ++opj_optind;
+ } else {/*Argument not expected*/
+ ++lastofs;
+ return opj_optopt;
+ }
found:
- ++opj_optind;
- return opj_optopt;
- } else { /* not found */
- fprintf(stderr,"Invalid option %s\n",arg);
- ++opj_optind;
- return (BADCH);
- }/*end of not found*/
-
- }/* end of single character*/
- }/*end '-'*/
- fprintf(stderr,"Invalid option\n");
- ++opj_optind;
- return (BADCH);;
+ ++opj_optind;
+ return opj_optopt;
+ } else { /* not found */
+ fprintf(stderr,"Invalid option %s\n",arg);
+ ++opj_optind;
+ return (BADCH);
+ }/*end of not found*/
+
+ }/* end of single character*/
+ }/*end '-'*/
+ fprintf(stderr,"Invalid option\n");
+ ++opj_optind;
+ return (BADCH);;
}/*end function*/
diff --git a/src/bin/common/opj_getopt.h b/src/bin/common/opj_getopt.h
index f97e8b35..87c5bafc 100644
--- a/src/bin/common/opj_getopt.h
+++ b/src/bin/common/opj_getopt.h
@@ -3,13 +3,12 @@
#ifndef _GETOPT_H_
#define _GETOPT_H_
-typedef struct opj_option
-{
- const char *name;
- int has_arg;
- int *flag;
- int val;
-}opj_option_t;
+typedef struct opj_option {
+ const char *name;
+ int has_arg;
+ int *flag;
+ int val;
+} opj_option_t;
#define NO_ARG 0
#define REQ_ARG 1
@@ -23,7 +22,7 @@ extern char *opj_optarg;
extern int opj_getopt(int nargc, char *const *nargv, const char *ostr);
extern int opj_getopt_long(int argc, char * const argv[], const char *optstring,
- const opj_option_t *longopts, int totlen);
+ const opj_option_t *longopts, int totlen);
extern void opj_reset_options_reading(void);
#endif /* _GETOPT_H_ */
diff --git a/src/bin/common/opj_string.h b/src/bin/common/opj_string.h
index 8829926a..f704a8c9 100644
--- a/src/bin/common/opj_string.h
+++ b/src/bin/common/opj_string.h
@@ -39,34 +39,34 @@
/* keep in mind there still is a buffer read overflow possible */
static size_t opj_strnlen_s(const char *src, size_t max_len)
{
- size_t len;
-
- if (src == NULL) {
- return 0U;
- }
- for (len = 0U; (*src != '\0') && (len < max_len); src++, len++);
- return len;
+ size_t len;
+
+ if (src == NULL) {
+ return 0U;
+ }
+ for (len = 0U; (*src != '\0') && (len < max_len); src++, len++);
+ return len;
}
/* should be equivalent to C11 function except for the handler */
/* keep in mind there still is a buffer read overflow possible */
static int opj_strcpy_s(char* dst, size_t dst_size, const char* src)
{
- size_t src_len = 0U;
- if ((dst == NULL) || (dst_size == 0U)) {
- return EINVAL;
- }
- if (src == NULL) {
- dst[0] = '\0';
- return EINVAL;
- }
- src_len = opj_strnlen_s(src, dst_size);
- if (src_len >= dst_size) {
- return ERANGE;
- }
- memcpy(dst, src, src_len);
- dst[src_len] = '\0';
- return 0;
+ size_t src_len = 0U;
+ if ((dst == NULL) || (dst_size == 0U)) {
+ return EINVAL;
+ }
+ if (src == NULL) {
+ dst[0] = '\0';
+ return EINVAL;
+ }
+ src_len = opj_strnlen_s(src, dst_size);
+ if (src_len >= dst_size) {
+ return ERANGE;
+ }
+ memcpy(dst, src, src_len);
+ dst[src_len] = '\0';
+ return 0;
}
#endif /* OPJ_STRING_H */