Fixed the DCinema filesize allocation. It now includes the SOT marker size
authorFrancois-Olivier Devaux <fodevaux@users.noreply.github.com>
Wed, 8 Aug 2007 09:41:16 +0000 (09:41 +0000)
committerFrancois-Olivier Devaux <fodevaux@users.noreply.github.com>
Wed, 8 Aug 2007 09:41:16 +0000 (09:41 +0000)
ChangeLog
codec/convert.c
libopenjpeg/j2k.c
libopenjpeg/pi.c
libopenjpeg/pi.h
libopenjpeg/t2.c
libopenjpeg/tcd.c

index 60d3d48486a1778eb37822737eb11a3f23679f52..a54be224c6f14a69b529cb4ae12129d89fac89b9 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -5,6 +5,9 @@ What's New for OpenJPEG
 ! : changed
 + : added
 
+August 08, 2008
+* [Parvatha] Fixed the DCinema filesize allocation. It now includes the SOT marker size
+
 August 02, 2007
 + [GB] Added a basic saving capability to OPJViewer
 
index 17ecf49b7e89cadb311e30989fcdd89b9b9618a6..81b34dc99cf4a7e533bbac97ccc546a3c4388fe9 100644 (file)
@@ -1188,7 +1188,7 @@ int imagetotif(opj_image_t * image, const char *outfile) {
                                                dat8[i+1] = (image->comps[0].data[index]<<4)|((image->comps[1].data[index]>>8)& 0x0f);
                                                dat8[i+2] = (image->comps[1].data[index]);
                                                dat8[i+3] = (image->comps[2].data[index]>>8)<<4 | (image->comps[2].data[index]>>4);
-                                               dat8[i+4] = (image->comps[2].data[index]<<4)|((image->comps[1].data[index+1]>>8)& 0x0f);
+                                               dat8[i+4] = (image->comps[2].data[index]<<4)|((image->comps[0].data[index+1]>>8)& 0x0f);
                                                dat8[i+5] = (image->comps[0].data[index+1]);
                                                dat8[i+6] = (image->comps[1].data[index+1]>>8)<<4 | (image->comps[1].data[index+1]>>4);
                                                dat8[i+7] = (image->comps[1].data[index+1]<<4)|((image->comps[2].data[index+1]>>8)& 0x0f);
index 9cb99e869b95780d0c75d46e9d1e1efb23f2f5a7..8fabbf96fcbc5cf35075b73ea2795cfbbbd4dcaa 100644 (file)
@@ -1348,7 +1348,6 @@ static void j2k_write_sod(opj_j2k_t *j2k, void *tile_coder) {
 
        tcd->tp_num = j2k->tp_num ;
        tcd->cur_tp_num = j2k->cur_tp_num;
-       tcd->cur_totnum_tp = j2k->cur_totnum_tp[j2k->curtileno];
        
        cio_write(cio, J2K_MS_SOD, 2);
        if (j2k->curtileno == 0) {
@@ -2515,7 +2514,7 @@ bool j2k_encode(opj_j2k_t *j2k, opj_cio_t *cio, opj_image_t *image, char *index)
                
                j2k->curtileno = tileno;
                j2k->cur_tp_num = 0;
-
+               tcd->cur_totnum_tp = j2k->cur_totnum_tp[j2k->curtileno];
                /* initialisation before tile encoding  */
                if (tileno == 0) {
                        tcd_malloc_encode(tcd, image, cp, j2k->curtileno);
@@ -2632,3 +2631,4 @@ bool j2k_encode(opj_j2k_t *j2k, opj_cio_t *cio, opj_image_t *image, char *index)
        return true;
 }
 
+
index a012f51748b8a7c87cf60ff51d9e1d63127db219..e43be817bec94739a85d07039d7bdd9ca37ad648 100644 (file)
@@ -665,7 +665,7 @@ opj_pi_iterator_t *pi_initialise_encode(opj_image_t *image, opj_cp_t *cp, int ti
                }
                
                /* Generation of boundaries for each prog flag*/
-                       if(tcp->POC & (t2_mode == FINAL_PASS)){
+                       if(tcp->POC && ( cp->cinema || ((!cp->cinema) && (t2_mode == FINAL_PASS)))){
                                tcp->pocs[pino].compS= tcp->pocs[pino].compno0;
                                tcp->pocs[pino].compE= tcp->pocs[pino].compno1;
                                tcp->pocs[pino].resS = tcp->pocs[pino].resno0;
@@ -820,7 +820,7 @@ int pi_check_next_level(int pos,opj_cp_t *cp,int tileno, int pino, char *prog){
 }
 
 
-void pi_create_encode( opj_pi_iterator_t *pi, opj_cp_t *cp,int tileno, int pino,int tpnum, int tppos){
+void pi_create_encode( opj_pi_iterator_t *pi, opj_cp_t *cp,int tileno, int pino,int tpnum, int tppos, J2K_T2_MODE t2_mode){
        char *prog;
        int i,l;
        int incr_top=1,resetX=0;
@@ -831,7 +831,7 @@ void pi_create_encode( opj_pi_iterator_t *pi, opj_cp_t *cp,int tileno, int pino,
        pi[pino].first = 1;
        pi[pino].poc.prg = tcp->prg;    
        
-       if(!(cp->tp_on)){
+       if(!(cp->tp_on && ((!cp->cinema && (t2_mode == FINAL_PASS)) || cp->cinema))){
                pi[pino].poc.resno0 = tcp->resS;
                pi[pino].poc.resno1 = tcp->resE;
                pi[pino].poc.compno0 = tcp->compS;
@@ -1076,3 +1076,4 @@ void pi_create_encode( opj_pi_iterator_t *pi, opj_cp_t *cp,int tileno, int pino,
 }
 
 
+
index fc993297acb2b78c4fac4a152f280621225131b2..f2274922c425f658ce6b339a98c5c391bfafc6b7 100644 (file)
@@ -118,7 +118,7 @@ Modify the packet iterator for enabling tile part generation
 @param tpnum Tile part number of the current tile
 @param tppos The position of the tile part flag in the progression order
 */
-void pi_create_encode( opj_pi_iterator_t *pi, opj_cp_t *cp,int tileno, int pino,int tpnum, int tppos);
+void pi_create_encode( opj_pi_iterator_t *pi, opj_cp_t *cp,int tileno, int pino,int tpnum, int tppos, J2K_T2_MODE t2_mode);
 /**
 Create a packet iterator for Decoder
 @param image Raw image for which the packets will be listed
index f8bda1ca5e83d2188e19c7a35a1008d77399b81a..6c0e012b10a2f40d222b4d51f3bbbb66dcecbb10 100644 (file)
@@ -586,7 +586,7 @@ int t2_encode_packets(opj_t2_t* t2,int tileno, opj_tcd_tile_t *tile, int maxlaye
                        for(poc = 0; poc < pocno ; poc++){
                                int comp_len = 0;
                                int tpnum = compno;
-                               pi_create_encode(pi, cp,tileno,poc,tpnum,tppos); 
+                               pi_create_encode(pi, cp,tileno,poc,tpnum,tppos,t2_mode); 
                                while (pi_next(&pi[poc])) {
                                        if (pi[poc].layno < maxlayers) {
                                                e = t2_encode_packet(tile, &cp->tcps[tileno], &pi[poc], c, dest + len - c, image_info, tileno);
@@ -609,7 +609,7 @@ int t2_encode_packets(opj_t2_t* t2,int tileno, opj_tcd_tile_t *tile, int maxlaye
                        if (e == -999)  break;
                }
        }else{  /* t2_mode == FINAL_PASS  */
-               pi_create_encode(pi, cp,tileno,pino,tpnum,tppos); 
+               pi_create_encode(pi, cp,tileno,pino,tpnum,tppos,t2_mode);
                while (pi_next(&pi[pino])) {
                        if (pi[pino].layno < maxlayers) {
                                e = t2_encode_packet(tile, &cp->tcps[tileno], &pi[pino], c, dest + len - c, image_info, tileno);
@@ -715,3 +715,4 @@ void t2_destroy(opj_t2_t *t2) {
        }
 }
 
+
index 2253c5b40ab32c564f7c19b49551d84633728ad1..003d521e90c06b3d0642da58ae0871c7f30786c1 100644 (file)
@@ -151,6 +151,13 @@ void tcd_malloc_encode(opj_tcd_t *tcd, opj_image_t * image, opj_cp_t * cp, int c
                /* Modification of the RATE >> */
                for (j = 0; j < tcp->numlayers; j++) {
                        tcp->rates[j] = tcp->rates[j] ? 
+                               cp->tp_on ? 
+                                       (((float) (tile->numcomps 
+                                       * (tile->x1 - tile->x0) 
+                                       * (tile->y1 - tile->y0)
+                                       * image->comps[0].prec))
+                                       /(tcp->rates[j] * 8 * image->comps[0].dx * image->comps[0].dy)) - (((tcd->cur_totnum_tp - 1) * 14 )/ tcp->numlayers)
+                                       :
                                ((float) (tile->numcomps 
                                        * (tile->x1 - tile->x0) 
                                        * (tile->y1 - tile->y0) 
@@ -1049,7 +1056,7 @@ bool tcd_rateallocate(opj_tcd_t *tcd, unsigned char *dest, int len, opj_image_in
                double hi = max;
                int success = 0;
                /* TODO: remove maxlen */
-               int maxlen = tcd_tcp->rates[layno] ? int_min(((int) ceil(tcd_tcp->rates[layno])), len) : len;
+               int maxlen = tcd_tcp->rates[layno] ? int_min(((int) ceil(tcd_tcp->rates[layno]- 2)), len) : len;
                double goodthresh = 0;
                double stable_thresh = 0;
                int i;
@@ -1436,3 +1443,4 @@ void tcd_free_decode_tile(opj_tcd_t *tcd, int tileno) {
 }
 
 
+