From c83ae7397d31444e8280ddd73959e10d1dd4fb84 Mon Sep 17 00:00:00 2001 From: Antonin Descampe Date: Wed, 26 Jan 2005 09:59:31 +0000 Subject: [PATCH] Added layer option '-l' to the command line. This option allows user to specify a maximum number of quality layers to be decoded. --- codec/j2k_to_image.c | 8 ++++---- libopenjpeg/t2.c | 26 ++++++++++++++++---------- 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/codec/j2k_to_image.c b/codec/j2k_to_image.c index 5895b8e3..d7f72183 100644 --- a/codec/j2k_to_image.c +++ b/codec/j2k_to_image.c @@ -75,10 +75,10 @@ void usage_display(char *prgm) fprintf(stdout," image resolution is effectively divided by 2 to the power of the\n"); fprintf(stdout," number of discarded levels. The reduce factor is limited by the\n"); fprintf(stdout," smallest total number of decomposition levels among tiles.\n"); - //fprintf(stdout," -l \n"); - //fprintf(stdout," Set the maximum number of quality layers to decode. If there are\n"); - //fprintf(stdout," less quality layers than the specified number, all the quality layers\n"); - //fprintf(stdout," are decoded.\n"); + fprintf(stdout," -l \n"); + fprintf(stdout," Set the maximum number of quality layers to decode. If there are\n"); + fprintf(stdout," less quality layers than the specified number, all the quality layers\n"); + fprintf(stdout," are decoded.\n"); fprintf(stdout," -u\n"); fprintf(stdout," print an usage statement\n"); fprintf(stdout,"\n"); diff --git a/libopenjpeg/t2.c b/libopenjpeg/t2.c index 092b509c..d3f1e4fc 100644 --- a/libopenjpeg/t2.c +++ b/libopenjpeg/t2.c @@ -666,23 +666,29 @@ int t2_decode_packets(unsigned char *src, int len, j2k_image_t * img, for (pino = 0; pino <= cp->tcps[tileno].numpocs; pino++) { while (pi_next(&pi[pino])) { - e = t2_decode_packet(c, src + len - c, tile, cp, - &cp->tcps[tileno], pi[pino].compno, - pi[pino].resno, pi[pino].precno, - pi[pino].layno); - + + if ((cp->layer==0) || (cp->layer>=((pi[pino].layno)+1))) { + e = t2_decode_packet(c, src + len - c, tile, cp, + &cp->tcps[tileno], pi[pino].compno, + pi[pino].resno, pi[pino].precno, + pi[pino].layno); + } else { + e = 0; + } + /* progression in resolution */ img->comps[pi[pino].compno].resno_decoded = e > 0 ? int_max(pi[pino].resno, - img->comps[pi[pino].compno]. - resno_decoded) : img->comps[pi[pino]. - compno].resno_decoded; + img->comps[pi[pino].compno]. + resno_decoded) : img->comps[pi[pino]. + compno].resno_decoded; n++; - + if (e == -999) { /* ADD */ break; - } else + } else { c += e; + } } /* FREE space memory taken by pi */