opj_compress help: revert 32572617765cb9d77302384653a48d793b8f657f and indicate 1...
authorEven Rouault <even.rouault@spatialys.com>
Fri, 1 Sep 2017 17:16:35 +0000 (19:16 +0200)
committerEven Rouault <even.rouault@spatialys.com>
Fri, 1 Sep 2017 17:16:35 +0000 (19:16 +0200)
src/bin/jp2/opj_compress.c
src/lib/openjp2/j2k.c
src/lib/openjp2/openjpeg.h

index 4a0baed6ab34ebc8c81965987ac580ff0c8f4dcb..58fdaaecf97a9118c0dbe0c5e8c33b8cc2de01bc 100644 (file)
@@ -169,16 +169,17 @@ static void encode_help_display(void)
     fprintf(stdout, "    Different compression ratios for successive layers.\n");
     fprintf(stdout,
             "    The rate specified for each quality level is the desired\n");
-    fprintf(stdout, "    compression factor (use 0 for lossless)\n");
+    fprintf(stdout, "    compression factor (use 1 for lossless)\n");
     fprintf(stdout, "    Decreasing ratios required.\n");
-    fprintf(stdout, "      Example: -r 20,10,0 means \n");
+    fprintf(stdout, "      Example: -r 20,10,1 means \n");
     fprintf(stdout, "            quality layer 1: compress 20x, \n");
     fprintf(stdout, "            quality layer 2: compress 10x \n");
     fprintf(stdout, "            quality layer 3: compress lossless\n");
     fprintf(stdout, "    Options -r and -q cannot be used together.\n");
     fprintf(stdout, "-q <psnr value>,<psnr value>,<psnr value>,...\n");
     fprintf(stdout, "    Different psnr for successive layers (-q 30,40,50).\n");
-    fprintf(stdout, "    Increasing PSNR values required.\n");
+    fprintf(stdout, "    Increasing PSNR values required, except 0 which can\n");
+    fprintf(stdout, "    be used for the last layer to indicate it is lossless.\n");
     fprintf(stdout, "    Options -r and -q cannot be used together.\n");
     fprintf(stdout, "-n <number of resolutions>\n");
     fprintf(stdout, "    Number of resolutions.\n");
index 4fd65872af4798d910329c258b0c2f4673097969..1e9f36955197b8a7ffd7c1ddf74e1492b8fbcc52 100644 (file)
@@ -7060,6 +7060,10 @@ OPJ_BOOL opj_j2k_setup_encoder(opj_j2k_t *p_j2k,
                     tcp->rates[j] = parameters->tcp_rates[j];
                 }
             }
+            if (!cp->m_specific_param.m_enc.m_fixed_quality &&
+                    tcp->rates[j] <= 1.0) {
+                tcp->rates[j] = 0.0;    /* force lossless */
+            }
         }
 
         tcp->csty = (OPJ_UINT32)parameters->csty;
index 21755b48d5a091b80d84043941eca0da295f236f..66993b7b4b1d78052c678331de5bc2d65cba8c82 100644 (file)
@@ -381,9 +381,12 @@ typedef struct opj_cparameters {
     OPJ_UINT32 numpocs;
     /** number of layers */
     int tcp_numlayers;
-    /** rates of layers - might be subsequently limited by the max_cs_size field */
+    /** rates of layers - might be subsequently limited by the max_cs_size field.
+     * Should be decreasing. 1 can be
+     * used as last value to indicate the last layer is lossless. */
     float tcp_rates[100];
-    /** different psnr for successive layers */
+    /** different psnr for successive layers. Should be increasing. 0 can be
+     * used as last value to indicate the last layer is lossless. */
     float tcp_distoratio[100];
     /** number of resolutions */
     int numresolution;