diff --git a/ChangeLog b/ChangeLog index 60d3d484..a54be224 100644 --- 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 diff --git a/codec/convert.c b/codec/convert.c index 17ecf49b..81b34dc9 100644 --- a/codec/convert.c +++ b/codec/convert.c @@ -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); diff --git a/libopenjpeg/j2k.c b/libopenjpeg/j2k.c index 9cb99e86..8fabbf96 100644 --- a/libopenjpeg/j2k.c +++ b/libopenjpeg/j2k.c @@ -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; } + diff --git a/libopenjpeg/pi.c b/libopenjpeg/pi.c index a012f517..e43be817 100644 --- a/libopenjpeg/pi.c +++ b/libopenjpeg/pi.c @@ -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, } + diff --git a/libopenjpeg/pi.h b/libopenjpeg/pi.h index fc993297..f2274922 100644 --- a/libopenjpeg/pi.h +++ b/libopenjpeg/pi.h @@ -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 diff --git a/libopenjpeg/t2.c b/libopenjpeg/t2.c index f8bda1ca..6c0e012b 100644 --- a/libopenjpeg/t2.c +++ b/libopenjpeg/t2.c @@ -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) { } } + diff --git a/libopenjpeg/tcd.c b/libopenjpeg/tcd.c index 2253c5b4..003d521e 100644 --- a/libopenjpeg/tcd.c +++ b/libopenjpeg/tcd.c @@ -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) { } +