Fixed issues with generation of SOP marker.

This commit is contained in:
Parvatha Elangovan 2007-09-19 14:56:19 +00:00
parent a6ba04cdf4
commit 7e40a9475a
5 changed files with 52 additions and 33 deletions

View File

@ -5,6 +5,9 @@ What's New for OpenJPEG
! : changed ! : changed
+ : added + : added
September 19, 2007
* [Parvatha] Fixed issues with generation of SOP marker.
September 18, 2007 September 18, 2007
* [Parvatha] Fixed issues with Reading and Writing TIF images in convert.c to avoid segmentation fault. * [Parvatha] Fixed issues with Reading and Writing TIF images in convert.c to avoid segmentation fault.
* [Parvatha] Fixed issues relating to using user specified rates for CINEMA option for multiple images. * [Parvatha] Fixed issues relating to using user specified rates for CINEMA option for multiple images.

View File

@ -1647,6 +1647,7 @@ int imagetotif(opj_image_t * image, const char *outfile) {
width = image->comps[0].w; width = image->comps[0].w;
height = image->comps[0].h; height = image->comps[0].h;
imgsize = image->comps[0].w * image->comps[0].h ;
bps = image->comps[0].prec; bps = image->comps[0].prec;
/* Set tags */ /* Set tags */
@ -1670,6 +1671,7 @@ int imagetotif(opj_image_t * image, const char *outfile) {
dat8 = buf; dat8 = buf;
if (image->comps[0].prec == 8){ if (image->comps[0].prec == 8){
for (i=0; i<TIFFStripSize(tif); i+=1) { // 8 bits per pixel for (i=0; i<TIFFStripSize(tif); i+=1) { // 8 bits per pixel
if(index < imgsize){
int r = 0; int r = 0;
r = image->comps[0].data[index]; r = image->comps[0].data[index];
if (image->comps[0].sgnd){ if (image->comps[0].sgnd){
@ -1677,9 +1679,12 @@ int imagetotif(opj_image_t * image, const char *outfile) {
} }
dat8[i+0] = r; dat8[i+0] = r;
index++; index++;
}else
break;
} }
}else if (image->comps[0].prec == 12){ }else if (image->comps[0].prec == 12){
for (i = 0; i<TIFFStripSize(tif); i+=3) { // 12 bits per pixel for (i = 0; i<TIFFStripSize(tif); i+=3) { // 12 bits per pixel
if(index < imgsize){
int r = 0, r1 = 0; int r = 0, r1 = 0;
r = image->comps[0].data[index]; r = image->comps[0].data[index];
r1 = image->comps[0].data[index+1]; r1 = image->comps[0].data[index+1];
@ -1691,9 +1696,12 @@ int imagetotif(opj_image_t * image, const char *outfile) {
dat8[i+1] = ((r & 0x0f) << 4 )|((r1 >> 8)& 0x0f); dat8[i+1] = ((r & 0x0f) << 4 )|((r1 >> 8)& 0x0f);
dat8[i+2] = r1 ; dat8[i+2] = r1 ;
index+=2; index+=2;
}else
break;
} }
}else if (image->comps[0].prec == 16){ }else if (image->comps[0].prec == 16){
for (i=0; i<TIFFStripSize(tif); i+=2) { // 16 bits per pixel for (i=0; i<TIFFStripSize(tif); i+=2) { // 16 bits per pixel
if(index < imgsize){
int r = 0; int r = 0;
r = image->comps[0].data[index]; r = image->comps[0].data[index];
if (image->comps[0].sgnd){ if (image->comps[0].sgnd){
@ -1702,6 +1710,8 @@ int imagetotif(opj_image_t * image, const char *outfile) {
dat8[i+0] = r; dat8[i+0] = r;
dat8[i+1] = r >> 8; dat8[i+1] = r >> 8;
index++; index++;
}else
break;
} }
}else{ }else{
fprintf(stderr,"Bits=%d, Only 8,12,16 bits implemented\n",image->comps[0].prec); fprintf(stderr,"Bits=%d, Only 8,12,16 bits implemented\n",image->comps[0].prec);
@ -1733,7 +1743,7 @@ opj_image_t* tiftoimage(const char *filename, opj_cparameters_t *parameters)
OPJ_COLOR_SPACE color_space; OPJ_COLOR_SPACE color_space;
opj_image_cmptparm_t cmptparm[3]; opj_image_cmptparm_t cmptparm[3];
opj_image_t * image = NULL; opj_image_t * image = NULL;
int imgsize; int imgsize = 0;
tif = TIFFOpen(filename, "r"); tif = TIFFOpen(filename, "r");
@ -1889,6 +1899,7 @@ opj_image_t* tiftoimage(const char *filename, opj_cparameters_t *parameters)
strip_size = 0; strip_size = 0;
strip_size = TIFFStripSize(tif); strip_size = TIFFStripSize(tif);
index = 0; index = 0;
imgsize = image->comps[0].w * image->comps[0].h ;
/* Read the Image components*/ /* Read the Image components*/
for (strip = 0; strip < TIFFNumberOfStrips(tif); strip++) { for (strip = 0; strip < TIFFNumberOfStrips(tif); strip++) {
unsigned char *dat8; unsigned char *dat8;

View File

@ -1444,7 +1444,9 @@ static void j2k_write_sod(opj_j2k_t *j2k, void *tile_coder) {
for (layno = 0; layno < tcp->numlayers; layno++) { for (layno = 0; layno < tcp->numlayers; layno++) {
tcp->rates[layno] -= tcp->rates[layno] ? (j2k->sod_start / (cp->th * cp->tw)) : 0; tcp->rates[layno] -= tcp->rates[layno] ? (j2k->sod_start / (cp->th * cp->tw)) : 0;
} }
if(cstr_info && (j2k->cur_tp_num == 0)) { if(j2k->cur_tp_num == 0){
tcd->tcd_image->tiles->packno = 0;
if(cstr_info)
cstr_info->packno = 0; cstr_info->packno = 0;
} }

View File

@ -147,8 +147,8 @@ static int t2_encode_packet(opj_tcd_tile_t * tile, opj_tcp_t * tcp, opj_pi_itera
c[1] = 145; c[1] = 145;
c[2] = 0; c[2] = 0;
c[3] = 4; c[3] = 4;
c[4] = (cstr_info->packno % 65536) / 256; c[4] = (tile->packno % 65536) / 256;
c[5] = (cstr_info->packno % 65536) % 256; c[5] = (tile->packno % 65536) % 256;
c += 6; c += 6;
} }
/* </SOP> */ /* </SOP> */
@ -656,6 +656,7 @@ int t2_encode_packets(opj_t2_t* t2,int tileno, opj_tcd_tile_t *tile, int maxlaye
cstr_info->packno++; cstr_info->packno++;
} }
/* << INDEX */ /* << INDEX */
tile->packno++;
} }
} }
} }

View File

@ -144,6 +144,8 @@ typedef struct opj_tcd_tile {
int numpix; /* add fixed_quality */ int numpix; /* add fixed_quality */
double distotile; /* add fixed_quality */ double distotile; /* add fixed_quality */
double distolayer[100]; /* add fixed_quality */ double distolayer[100]; /* add fixed_quality */
/** packet number */
int packno;
} opj_tcd_tile_t; } opj_tcd_tile_t;
/** /**