Merge pull request #531 from mayeut/issue-289
Add option to force component splitting in imagetopnm
This commit is contained in:
commit
5e1474cc92
|
@ -1350,7 +1350,7 @@ opj_image_t* pnmtoimage(const char *filename, opj_cparameters_t *parameters) {
|
||||||
return image;
|
return image;
|
||||||
}/* pnmtoimage() */
|
}/* pnmtoimage() */
|
||||||
|
|
||||||
int imagetopnm(opj_image_t * image, const char *outfile)
|
int imagetopnm(opj_image_t * image, const char *outfile, int force_split)
|
||||||
{
|
{
|
||||||
int *red, *green, *blue, *alpha;
|
int *red, *green, *blue, *alpha;
|
||||||
int wr, hr, max;
|
int wr, hr, max;
|
||||||
|
@ -1380,7 +1380,8 @@ int imagetopnm(opj_image_t * image, const char *outfile)
|
||||||
|
|
||||||
if(want_gray) ncomp = 1;
|
if(want_gray) ncomp = 1;
|
||||||
|
|
||||||
if (ncomp == 2 /* GRAYA */
|
if ((force_split == 0) &&
|
||||||
|
(ncomp == 2 /* GRAYA */
|
||||||
|| (ncomp > 2 /* RGB, RGBA */
|
|| (ncomp > 2 /* RGB, RGBA */
|
||||||
&& image->comps[0].dx == image->comps[1].dx
|
&& image->comps[0].dx == image->comps[1].dx
|
||||||
&& image->comps[1].dx == image->comps[2].dx
|
&& image->comps[1].dx == image->comps[2].dx
|
||||||
|
@ -1388,8 +1389,8 @@ int imagetopnm(opj_image_t * image, const char *outfile)
|
||||||
&& image->comps[1].dy == image->comps[2].dy
|
&& image->comps[1].dy == image->comps[2].dy
|
||||||
&& image->comps[0].prec == image->comps[1].prec
|
&& image->comps[0].prec == image->comps[1].prec
|
||||||
&& image->comps[1].prec == image->comps[2].prec
|
&& image->comps[1].prec == image->comps[2].prec
|
||||||
))
|
)))
|
||||||
{
|
{
|
||||||
fdest = fopen(outfile, "wb");
|
fdest = fopen(outfile, "wb");
|
||||||
|
|
||||||
if (!fdest)
|
if (!fdest)
|
||||||
|
|
|
@ -91,7 +91,7 @@ opj_image_t* pgxtoimage(const char *filename, opj_cparameters_t *parameters);
|
||||||
int imagetopgx(opj_image_t *image, const char *outfile);
|
int imagetopgx(opj_image_t *image, const char *outfile);
|
||||||
|
|
||||||
opj_image_t* pnmtoimage(const char *filename, opj_cparameters_t *parameters);
|
opj_image_t* pnmtoimage(const char *filename, opj_cparameters_t *parameters);
|
||||||
int imagetopnm(opj_image_t *image, const char *outfile);
|
int imagetopnm(opj_image_t *image, const char *outfile, int force_split);
|
||||||
|
|
||||||
/* RAW conversion */
|
/* RAW conversion */
|
||||||
int imagetoraw(opj_image_t * image, const char *outfile);
|
int imagetoraw(opj_image_t * image, const char *outfile);
|
||||||
|
|
|
@ -145,6 +145,8 @@ typedef struct opj_decompress_params
|
||||||
int force_rgb;
|
int force_rgb;
|
||||||
/* upsample components according to their dx/dy values */
|
/* upsample components according to their dx/dy values */
|
||||||
int upsample;
|
int upsample;
|
||||||
|
/* split output components to different files */
|
||||||
|
int split_pnm;
|
||||||
}opj_decompress_parameters;
|
}opj_decompress_parameters;
|
||||||
|
|
||||||
/* -------------------------------------------------------------------------- */
|
/* -------------------------------------------------------------------------- */
|
||||||
|
@ -218,6 +220,8 @@ static void decode_help_display(void) {
|
||||||
" Force output image colorspace to RGB\n"
|
" Force output image colorspace to RGB\n"
|
||||||
" -upsample\n"
|
" -upsample\n"
|
||||||
" Downsampled components will be upsampled to image size\n"
|
" Downsampled components will be upsampled to image size\n"
|
||||||
|
" -split-pnm\n"
|
||||||
|
" Split output components to different files when writing to PNM\n"
|
||||||
"\n");
|
"\n");
|
||||||
/* UniPG>> */
|
/* UniPG>> */
|
||||||
#ifdef USE_JPWL
|
#ifdef USE_JPWL
|
||||||
|
@ -506,7 +510,8 @@ int parse_cmdline_decoder(int argc, char **argv, opj_decompress_parameters *para
|
||||||
{"ImgDir", REQ_ARG, NULL ,'y'},
|
{"ImgDir", REQ_ARG, NULL ,'y'},
|
||||||
{"OutFor", REQ_ARG, NULL ,'O'},
|
{"OutFor", REQ_ARG, NULL ,'O'},
|
||||||
{"force-rgb", NO_ARG, &(parameters->force_rgb), 1},
|
{"force-rgb", NO_ARG, &(parameters->force_rgb), 1},
|
||||||
{"upsample", NO_ARG, &(parameters->upsample), 1}
|
{"upsample", NO_ARG, &(parameters->upsample), 1},
|
||||||
|
{"split-pnm", NO_ARG, &(parameters->split_pnm), 1}
|
||||||
};
|
};
|
||||||
|
|
||||||
const char optlist[] = "i:o:r:l:x:d:t:p:"
|
const char optlist[] = "i:o:r:l:x:d:t:p:"
|
||||||
|
@ -1433,7 +1438,7 @@ int main(int argc, char **argv)
|
||||||
/* ------------------- */
|
/* ------------------- */
|
||||||
switch (parameters.cod_format) {
|
switch (parameters.cod_format) {
|
||||||
case PXM_DFMT: /* PNM PGM PPM */
|
case PXM_DFMT: /* PNM PGM PPM */
|
||||||
if (imagetopnm(image, parameters.outfile)) {
|
if (imagetopnm(image, parameters.outfile, parameters.split_pnm)) {
|
||||||
fprintf(stderr,"[ERROR] Outfile %s not generated\n",parameters.outfile);
|
fprintf(stderr,"[ERROR] Outfile %s not generated\n",parameters.outfile);
|
||||||
failed = 1;
|
failed = 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2031,14 +2031,8 @@ static OPJ_BOOL opj_j2k_read_siz(opj_j2k_t *p_j2k,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* testcase issue427-illegal-tile-offset.jp2 */
|
/* testcase issue427-illegal-tile-offset.jp2 */
|
||||||
l_tx1 = l_cp->tx0 + l_cp->tdx;
|
l_tx1 = opj_uint_adds(l_cp->tx0, l_cp->tdx); /* manage overflow */
|
||||||
if (l_tx1 < l_cp->tx0) { /* manage overflow */
|
l_ty1 = opj_uint_adds(l_cp->ty0, l_cp->tdy); /* manage overflow */
|
||||||
l_tx1 = 0xFFFFFFFFU;
|
|
||||||
}
|
|
||||||
l_ty1 = l_cp->ty0 + l_cp->tdy;
|
|
||||||
if (l_ty1 < l_cp->ty0) { /* manage overflow */
|
|
||||||
l_ty1 = 0xFFFFFFFFU;
|
|
||||||
}
|
|
||||||
if ((l_cp->tx0 > l_image->x0) || (l_cp->ty0 > l_image->y0) || (l_tx1 <= l_image->x0) || (l_ty1 <= l_image->y0) ) {
|
if ((l_cp->tx0 > l_image->x0) || (l_cp->ty0 > l_image->y0) || (l_tx1 <= l_image->x0) || (l_ty1 <= l_image->y0) ) {
|
||||||
opj_event_msg(p_manager, EVT_ERROR, "Error with SIZ marker: illegal tile offset\n");
|
opj_event_msg(p_manager, EVT_ERROR, "Error with SIZ marker: illegal tile offset\n");
|
||||||
return OPJ_FALSE;
|
return OPJ_FALSE;
|
||||||
|
|
|
@ -510,11 +510,17 @@ foreach(kdu_file ${kdu_j2k_conf_files})
|
||||||
set( filenameInput "${kdu_file}.j2c" )
|
set( filenameInput "${kdu_file}.j2c" )
|
||||||
set( filenameRef "${kdu_file}.ppm" )
|
set( filenameRef "${kdu_file}.ppm" )
|
||||||
|
|
||||||
|
if("${kdu_file}" STREQUAL "a6_mono_colr")
|
||||||
|
set(kdu_test_args -upsample -split-pnm )
|
||||||
|
else()
|
||||||
|
set(kdu_test_args -upsample )
|
||||||
|
endif()
|
||||||
|
|
||||||
add_test(NAME ETS-KDU-${filenameInput}-decode
|
add_test(NAME ETS-KDU-${filenameInput}-decode
|
||||||
COMMAND opj_decompress
|
COMMAND opj_decompress
|
||||||
-i ${INPUT_CONF}/${filenameInput}
|
-i ${INPUT_CONF}/${filenameInput}
|
||||||
-o ${TEMP}/${filenameInput}.ppm
|
-o ${TEMP}/${filenameInput}.ppm
|
||||||
-upsample
|
${kdu_test_args}
|
||||||
)
|
)
|
||||||
|
|
||||||
if("${kdu_file}" STREQUAL "a6_mono_colr")
|
if("${kdu_file}" STREQUAL "a6_mono_colr")
|
||||||
|
|
Loading…
Reference in New Issue