Possibility to choose to apply MCT (multiple component transform) enabled, and new...
authorFrancois-Olivier Devaux <fodevaux@users.noreply.github.com>
Thu, 10 May 2007 14:13:30 +0000 (14:13 +0000)
committerFrancois-Olivier Devaux <fodevaux@users.noreply.github.com>
Thu, 10 May 2007 14:13:30 +0000 (14:13 +0000)
codec/image_to_j2k.c
libopenjpeg/j2k.c

index 60581f512f2a0800eb2bf4499715ef676d1bf9b4..bc5af74778721bfc4d38c2e4c7dc195396fab2f0 100644 (file)
@@ -1542,6 +1542,8 @@ int main(int argc, char **argv) {
                                        }
                                break;
                }
+                       /* Decide if MCT should be used */
+                       parameters.tcp_mct = image->numcomps == 3 ? 1 : 0;
 
                        if(parameters.cp_cinema){
                                cinema_setup_encoder(&parameters,image);
index 7c04256ae0837267eae956ebd8afb611439ae220..bf5acf5c735faa91d6965fc847c777568e086152 100644 (file)
@@ -1474,24 +1474,27 @@ static void j2k_write_eoc(opj_j2k_t *j2k) {
 static void j2k_read_eoc(opj_j2k_t *j2k) {
        int i, tileno;
 
-#ifndef NO_PACKETS_DECODING  
-       opj_tcd_t *tcd = tcd_create(j2k->cinfo);
-       tcd_malloc_decode(tcd, j2k->image, j2k->cp);
-       for (i = 0; i < j2k->cp->tileno_size; i++) {
-               tileno = j2k->cp->tileno[i];
-               tcd_decode_tile(tcd, j2k->tile_data[tileno], j2k->tile_len[tileno], tileno);
-               opj_free(j2k->tile_data[tileno]);
-               j2k->tile_data[tileno] = NULL;
-       }
-       tcd_free_decode(tcd);
-       tcd_destroy(tcd);
-#else 
-       for (i = 0; i < j2k->cp->tileno_size; i++) {
-               tileno = j2k->cp->tileno[i];
-               opj_free(j2k->tile_data[tileno]);
-               j2k->tile_data[tileno] = NULL;
+       /* if packets should be decoded */
+       if (j2k->cp->limit_decoding != DECODE_ALL_BUT_PACKETS) {
+               opj_tcd_t *tcd = tcd_create(j2k->cinfo);
+               tcd_malloc_decode(tcd, j2k->image, j2k->cp);
+               for (i = 0; i < j2k->cp->tileno_size; i++) {
+                       tileno = j2k->cp->tileno[i];
+                       tcd_decode_tile(tcd, j2k->tile_data[tileno], j2k->tile_len[tileno], tileno);
+                       opj_free(j2k->tile_data[tileno]);
+                       j2k->tile_data[tileno] = NULL;
+               }
+               tcd_free_decode(tcd);
+               tcd_destroy(tcd);
+       }
+       /* if packets should not be decoded  */
+       else {
+               for (i = 0; i < j2k->cp->tileno_size; i++) {
+                       tileno = j2k->cp->tileno[i];
+                       opj_free(j2k->tile_data[tileno]);
+                       j2k->tile_data[tileno] = NULL;
+               }
        }
-#endif
        
        j2k->state = J2K_STATE_MT;
 }
@@ -2083,7 +2086,7 @@ void j2k_setup_encoder(opj_j2k_t *j2k, opj_cparameters_t *parameters, opj_image_
                }
                tcp->csty = parameters->csty;
                tcp->prg = parameters->prog_order;
-               tcp->mct = image->numcomps == 3 ? 1 : 0;
+               tcp->mct = parameters->tcp_mct; 
 
                numpocs_tile = 0;
                tcp->POC = 0;