* Fixed_quality option added : specifying -q psnr1,psnr2,psnr3,... at the command line when encoding an image generates layers with the corresponding psnr. You have to specify values in the increase order. This option is incompatible with "-r" or "-f" options.
* Old -q option is now available with -f * The INDEX-file structure has been modified and is now like this : ------------------------------ image_width image_height progression order tile_width tile_height nb_tiles_width nb_tiles_height nb_components nb_layers nb_decompositions foreach resolution_level {[precinct_width,precinct_height]} main_header_end codestream_size foreach tile { tileno start_pos end_header end_pos squarred_error_total nb_pixels mean_squarred_error } foreach tile { foreach packet { packetno tileno layerno resno compno precinctno start_pos end_pos SE_reduction } } SE max SE total -----------------------------
This commit is contained in:
parent
32e7b1529b
commit
a4911967eb
|
@ -300,6 +300,7 @@ int main(int argc, char **argv)
|
||||||
cp.comment = NULL;
|
cp.comment = NULL;
|
||||||
cp.disto_alloc = 0;
|
cp.disto_alloc = 0;
|
||||||
cp.fixed_alloc = 0;
|
cp.fixed_alloc = 0;
|
||||||
|
cp.fixed_quality = 0; //add fixed_quality
|
||||||
/* img.PPT=0; */
|
/* img.PPT=0; */
|
||||||
|
|
||||||
Tile_arg = 0;
|
Tile_arg = 0;
|
||||||
|
@ -309,7 +310,7 @@ int main(int argc, char **argv)
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
int c = getopt(argc, argv,
|
int c = getopt(argc, argv,
|
||||||
"i:o:r:q:t:n:c:b:x:p:s:d:h:P:S:E:M:R:T:C:I");
|
"i:o:r:q:f:t:n:c:b:x:p:s:d:h:P:S:E:M:R:T:C:I");
|
||||||
if (c == -1)
|
if (c == -1)
|
||||||
break;
|
break;
|
||||||
switch (c) {
|
switch (c) {
|
||||||
|
@ -375,7 +376,24 @@ int main(int argc, char **argv)
|
||||||
cp.matrice = NULL;
|
cp.matrice = NULL;
|
||||||
break;
|
break;
|
||||||
/* ----------------------------------------------------- */
|
/* ----------------------------------------------------- */
|
||||||
case 'q': /* rates fixed */
|
case 'q': /* add fixed_quality */
|
||||||
|
s = optarg;
|
||||||
|
while (sscanf(s, "%f", &tcp_init->distoratio[tcp_init->numlayers]) ==
|
||||||
|
1) {
|
||||||
|
tcp_init->numlayers++;
|
||||||
|
while (*s && *s != ',') {
|
||||||
|
s++;
|
||||||
|
}
|
||||||
|
if (!*s)
|
||||||
|
break;
|
||||||
|
s++;
|
||||||
|
}
|
||||||
|
cp.fixed_quality = 1;
|
||||||
|
cp.matrice = NULL;
|
||||||
|
break;
|
||||||
|
/* dda */
|
||||||
|
/* ----------------------------------------------------- */
|
||||||
|
case 'f': /* mod fixed_quality (before : -q) */
|
||||||
s = optarg;
|
s = optarg;
|
||||||
sscanf(s, "%d", &tcp_init->numlayers);
|
sscanf(s, "%d", &tcp_init->numlayers);
|
||||||
s++;
|
s++;
|
||||||
|
@ -563,11 +581,11 @@ int main(int argc, char **argv)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cp.disto_alloc & cp.fixed_alloc) {
|
if (!(cp.disto_alloc ^ cp.fixed_alloc ^ cp.fixed_quality)) {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"Error: option -r and -q can not be used together !!\n");
|
"Error: options -r -q and -f can not be used together !!\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
} // mod fixed_quality
|
||||||
|
|
||||||
/* if no rate entered, lossless by default */
|
/* if no rate entered, lossless by default */
|
||||||
if (tcp_init->numlayers == 0) {
|
if (tcp_init->numlayers == 0) {
|
||||||
|
@ -657,7 +675,10 @@ int main(int argc, char **argv)
|
||||||
tcp = &cp.tcps[tileno];
|
tcp = &cp.tcps[tileno];
|
||||||
tcp->numlayers = tcp_init->numlayers;
|
tcp->numlayers = tcp_init->numlayers;
|
||||||
for (j = 0; j < tcp->numlayers; j++) {
|
for (j = 0; j < tcp->numlayers; j++) {
|
||||||
tcp->rates[j] = tcp_init->rates[j];
|
if (cp.fixed_quality) // add fixed_quality
|
||||||
|
tcp->distoratio[j] = tcp_init->distoratio[j];
|
||||||
|
else
|
||||||
|
tcp->rates[j] = tcp_init->rates[j];
|
||||||
}
|
}
|
||||||
tcp->csty = CSty;
|
tcp->csty = CSty;
|
||||||
tcp->prg = Prog_order;
|
tcp->prg = Prog_order;
|
||||||
|
@ -769,5 +790,6 @@ int main(int argc, char **argv)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
system("pause");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1079,6 +1079,7 @@ LIBJ2K_API int j2k_encode(j2k_image_t * img, j2k_cp_t * cp, char *outfile,
|
||||||
|
|
||||||
/* Creation of the index file */
|
/* Creation of the index file */
|
||||||
if (info_IM.index_on) {
|
if (info_IM.index_on) {
|
||||||
|
double DistoTotal = 0;
|
||||||
info_IM.codestream_size = cio_tell() + pos_correction; /* Correction 14/4/03 suite rmq de Patrick */
|
info_IM.codestream_size = cio_tell() + pos_correction; /* Correction 14/4/03 suite rmq de Patrick */
|
||||||
INDEX = fopen(index, "w");
|
INDEX = fopen(index, "w");
|
||||||
|
|
||||||
|
@ -1090,43 +1091,45 @@ LIBJ2K_API int j2k_encode(j2k_image_t * img, j2k_cp_t * cp, char *outfile,
|
||||||
fprintf(INDEX, "%d %d\n", info_IM.Im_w, info_IM.Im_h);
|
fprintf(INDEX, "%d %d\n", info_IM.Im_w, info_IM.Im_h);
|
||||||
fprintf(INDEX, "%d\n", info_IM.Prog);
|
fprintf(INDEX, "%d\n", info_IM.Prog);
|
||||||
fprintf(INDEX, "%d %d\n", info_IM.Tile_x, info_IM.Tile_y);
|
fprintf(INDEX, "%d %d\n", info_IM.Tile_x, info_IM.Tile_y);
|
||||||
|
fprintf(INDEX, "%d %d\n", j2k_cp->tw, j2k_cp->th);
|
||||||
fprintf(INDEX, "%d\n", info_IM.Comp);
|
fprintf(INDEX, "%d\n", info_IM.Comp);
|
||||||
fprintf(INDEX, "%d\n", info_IM.Layer);
|
fprintf(INDEX, "%d\n", info_IM.Layer);
|
||||||
fprintf(INDEX, "%d\n", info_IM.Decomposition);
|
fprintf(INDEX, "%d\n", info_IM.Decomposition);
|
||||||
fprintf(INDEX, "%d %d\n", info_IM.pdx, info_IM.pdy);
|
for (resno=info_IM.Decomposition;resno>=0;resno--) {
|
||||||
|
fprintf(INDEX, "[%d,%d] ", (1<<info_IM.tile[0].pdx[resno]), (1<<info_IM.tile[0].pdx[resno])); //based on tile 0
|
||||||
|
}
|
||||||
|
fprintf(INDEX,"\n");
|
||||||
fprintf(INDEX, "%d\n", info_IM.Main_head_end);
|
fprintf(INDEX, "%d\n", info_IM.Main_head_end);
|
||||||
fprintf(INDEX, "%d\n", info_IM.codestream_size);
|
fprintf(INDEX, "%d\n", info_IM.codestream_size);
|
||||||
fprintf(INDEX, "%f\n", info_IM.D_max);
|
|
||||||
for (tileno = 0; tileno < j2k_cp->tw * j2k_cp->th; tileno++) {
|
for (tileno = 0; tileno < j2k_cp->tw * j2k_cp->th; tileno++) {
|
||||||
fprintf(INDEX, "%d %d %d %d", info_IM.tile[tileno].num_tile,
|
fprintf(INDEX, "%4d %9d %9d %9d %9e %9d %9e\n",
|
||||||
|
info_IM.tile[tileno].num_tile,
|
||||||
info_IM.tile[tileno].start_pos,
|
info_IM.tile[tileno].start_pos,
|
||||||
info_IM.tile[tileno].end_header,
|
info_IM.tile[tileno].end_header,
|
||||||
info_IM.tile[tileno].end_pos);
|
info_IM.tile[tileno].end_pos, info_IM.tile[tileno].distotile, info_IM.tile[tileno].nbpix,
|
||||||
/*for (layno=0;layno<info_IM.Layer;layno++)
|
info_IM.tile[tileno].distotile / info_IM.tile[tileno].nbpix);
|
||||||
fprintf(INDEX, " %f",info_IM.tile[tileno].thresh[layno]);
|
|
||||||
*/ fprintf(INDEX, "\n");
|
|
||||||
}
|
}
|
||||||
for (tileno = 0; tileno < j2k_cp->tw * j2k_cp->th; tileno++) {
|
for (tileno = 0; tileno < j2k_cp->tw * j2k_cp->th; tileno++) {
|
||||||
|
int start_pos, end_pos;
|
||||||
|
double disto = 0;
|
||||||
pack_nb = 0;
|
pack_nb = 0;
|
||||||
|
/* fprintf(INDEX,
|
||||||
|
"pkno tileno layerno resno compno precno start_pos end_pos deltaSE \n");*/
|
||||||
if (info_IM.Prog == 0) { /* LRCP */
|
if (info_IM.Prog == 0) { /* LRCP */
|
||||||
for (layno = 0; layno < info_IM.Layer; layno++) {
|
for (layno = 0; layno < info_IM.Layer; layno++) {
|
||||||
for (resno = 0; resno < info_IM.Decomposition + 1; resno++) {
|
for (resno = 0; resno < info_IM.Decomposition + 1; resno++) {
|
||||||
for (compno = 0; compno < info_IM.Comp; compno++) {
|
for (compno = 0; compno < info_IM.Comp; compno++) {
|
||||||
for (precno = 0;
|
for (precno = 0;
|
||||||
precno <
|
precno <
|
||||||
info_IM.tile[tileno].pw *
|
info_IM.tile[tileno].pw[resno] * info_IM.tile[tileno].ph[resno];
|
||||||
info_IM.tile[tileno].ph; precno++) {
|
precno++) {
|
||||||
fprintf(INDEX,
|
start_pos = info_IM.tile[tileno].packet[pack_nb].start_pos;
|
||||||
"%d %d %d %d %d %d %d %d %.08f\n",
|
end_pos = info_IM.tile[tileno].packet[pack_nb].end_pos;
|
||||||
pack_nb, tileno, layno, resno,
|
disto = info_IM.tile[tileno].packet[pack_nb].disto;
|
||||||
compno, precno,
|
fprintf(INDEX, "%4d %6d %7d %5d %6d %6d %9d %9d %8e\n",
|
||||||
info_IM.tile[tileno].
|
pack_nb, tileno, layno, resno, compno, precno,
|
||||||
packet[pack_nb].start_pos,
|
start_pos, end_pos, disto);
|
||||||
info_IM.tile[tileno].
|
DistoTotal += disto;
|
||||||
packet[pack_nb].end_pos,
|
|
||||||
info_IM.tile[tileno].
|
|
||||||
packet[pack_nb].disto / info_IM.D_max);
|
|
||||||
/*fprintf(INDEX, "%d %d %d %d %d %d %d %d\n", pack_nb, tileno, layno, resno, compno, precno, info_IM.tile[tileno].packet[pack_nb].start_pos, info_IM.tile[tileno].packet[pack_nb].end_pos); */
|
|
||||||
pack_nb++;
|
pack_nb++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1136,14 +1139,14 @@ LIBJ2K_API int j2k_encode(j2k_image_t * img, j2k_cp_t * cp, char *outfile,
|
||||||
for (resno = 0; resno < info_IM.Decomposition + 1; resno++) {
|
for (resno = 0; resno < info_IM.Decomposition + 1; resno++) {
|
||||||
for (layno = 0; layno < info_IM.Layer; layno++) {
|
for (layno = 0; layno < info_IM.Layer; layno++) {
|
||||||
for (compno = 0; compno < info_IM.Comp; compno++) {
|
for (compno = 0; compno < info_IM.Comp; compno++) {
|
||||||
for (precno = 0; precno < info_IM.pw * info_IM.ph; precno++) {
|
for (precno = 0; precno < info_IM.tile[tileno].pw[resno] * info_IM.tile[tileno].ph[resno]; precno++) {
|
||||||
/* fprintf(INDEX,"%d %d %d %d %d %d %d %d %.04f\n",pack_nb,tileno,layno,resno,compno,precno,info_IM.tile[tileno].packet[pack_nb].start_pos,info_IM.tile[tileno].packet[pack_nb].end_pos,info_IM.tile[tileno].packet[pack_nb].disto/info_IM.D_max); */
|
start_pos = info_IM.tile[tileno].packet[pack_nb].start_pos;
|
||||||
fprintf(INDEX, "%d %d %d %d %d %d %d %d\n",
|
end_pos = info_IM.tile[tileno].packet[pack_nb].end_pos;
|
||||||
pack_nb, tileno, layno, resno,
|
disto = info_IM.tile[tileno].packet[pack_nb].disto;
|
||||||
compno, precno,
|
fprintf(INDEX, "%4d %6d %7d %5d %6d %6d %9d %9d %8e\n",
|
||||||
info_IM.tile[tileno].
|
pack_nb, tileno, layno, resno, compno, precno,
|
||||||
packet[pack_nb].start_pos,
|
start_pos, end_pos, disto);
|
||||||
info_IM.tile[tileno].packet[pack_nb].end_pos);
|
DistoTotal += disto;
|
||||||
pack_nb++;
|
pack_nb++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1151,33 +1154,33 @@ LIBJ2K_API int j2k_encode(j2k_image_t * img, j2k_cp_t * cp, char *outfile,
|
||||||
}
|
}
|
||||||
} else if (info_IM.Prog == 2) { /* RPCL */
|
} else if (info_IM.Prog == 2) { /* RPCL */
|
||||||
for (resno = 0; resno < info_IM.Decomposition + 1; resno++) {
|
for (resno = 0; resno < info_IM.Decomposition + 1; resno++) {
|
||||||
for (precno = 0; precno < info_IM.pw * info_IM.ph; precno++) {
|
for (precno = 0; precno < info_IM.tile[tileno].pw[resno] * info_IM.tile[tileno].ph[resno]; precno++) {
|
||||||
for (compno = 0; compno < info_IM.Comp; compno++) {
|
for (compno = 0; compno < info_IM.Comp; compno++) {
|
||||||
for (layno = 0; layno < info_IM.Layer; layno++) {
|
for (layno = 0; layno < info_IM.Layer; layno++) {
|
||||||
/* fprintf(INDEX,"%d %d %d %d %d %d %d %d %.04f\n",pack_nb,tileno,layno,resno,compno,precno,info_IM.tile[tileno].packet[pack_nb].start_pos,info_IM.tile[tileno].packet[pack_nb].end_pos,info_IM.tile[tileno].packet[pack_nb].disto/info_IM.D_max); */
|
start_pos = info_IM.tile[tileno].packet[pack_nb].start_pos;
|
||||||
fprintf(INDEX, "%d %d %d %d %d %d %d %d\n",
|
end_pos = info_IM.tile[tileno].packet[pack_nb].end_pos;
|
||||||
pack_nb, tileno, layno, resno,
|
disto = info_IM.tile[tileno].packet[pack_nb].disto;
|
||||||
compno, precno,
|
fprintf(INDEX, "%4d %6d %7d %5d %6d %6d %9d %9d %8e\n",
|
||||||
info_IM.tile[tileno].
|
pack_nb, tileno, layno, resno, compno, precno,
|
||||||
packet[pack_nb].start_pos,
|
start_pos, end_pos, disto);
|
||||||
info_IM.tile[tileno].packet[pack_nb].end_pos);
|
DistoTotal += disto;
|
||||||
pack_nb++;
|
pack_nb++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (info_IM.Prog == 3) { /* PCRL */
|
} else if (info_IM.Prog == 3) { /* PCRL */
|
||||||
for (precno = 0; precno < info_IM.pw * info_IM.ph; precno++) {
|
for (precno = 0; precno < info_IM.tile[tileno].pw[resno] * info_IM.tile[tileno].ph[resno]; precno++) {
|
||||||
for (compno = 0; compno < info_IM.Comp; compno++) {
|
for (compno = 0; compno < info_IM.Comp; compno++) {
|
||||||
for (resno = 0; resno < info_IM.Decomposition + 1; resno++) {
|
for (resno = 0; resno < info_IM.Decomposition + 1; resno++) {
|
||||||
for (layno = 0; layno < info_IM.Layer; layno++) {
|
for (layno = 0; layno < info_IM.Layer; layno++) {
|
||||||
/* fprintf(INDEX,"%d %d %d %d %d %d %d %d %.04f\n",pack_nb,tileno,layno,resno,compno,precno,info_IM.tile[tileno].packet[pack_nb].start_pos,info_IM.tile[tileno].packet[pack_nb].end_pos,info_IM.tile[tileno].packet[pack_nb].disto/info_IM.D_max); */
|
start_pos = info_IM.tile[tileno].packet[pack_nb].start_pos;
|
||||||
fprintf(INDEX, "%d %d %d %d %d %d %d %d\n",
|
end_pos = info_IM.tile[tileno].packet[pack_nb].end_pos;
|
||||||
pack_nb, tileno, layno, resno,
|
disto = info_IM.tile[tileno].packet[pack_nb].disto;
|
||||||
compno, precno,
|
fprintf(INDEX, "%4d %6d %7d %5d %6d %6d %9d %9d %8e\n",
|
||||||
info_IM.tile[tileno].
|
pack_nb, tileno, layno, resno, compno, precno,
|
||||||
packet[pack_nb].start_pos,
|
start_pos, end_pos, disto);
|
||||||
info_IM.tile[tileno].packet[pack_nb].end_pos);
|
DistoTotal += disto;
|
||||||
pack_nb++;
|
pack_nb++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1186,16 +1189,16 @@ LIBJ2K_API int j2k_encode(j2k_image_t * img, j2k_cp_t * cp, char *outfile,
|
||||||
} else { /* CPRL */
|
} else { /* CPRL */
|
||||||
|
|
||||||
for (compno = 0; compno < info_IM.Comp; compno++) {
|
for (compno = 0; compno < info_IM.Comp; compno++) {
|
||||||
for (precno = 0; precno < info_IM.pw * info_IM.ph; precno++) {
|
for (precno = 0; precno < info_IM.tile[tileno].pw[resno] * info_IM.tile[tileno].ph[resno]; precno++) {
|
||||||
for (resno = 0; resno < info_IM.Decomposition + 1; resno++) {
|
for (resno = 0; resno < info_IM.Decomposition + 1; resno++) {
|
||||||
for (layno = 0; layno < info_IM.Layer; layno++) {
|
for (layno = 0; layno < info_IM.Layer; layno++) {
|
||||||
/*fprintf(INDEX,"%d %d %d %d %d %d %d %d %.04f\n",pack_nb,tileno,layno,resno,compno,precno,info_IM.tile[tileno].packet[pack_nb].start_pos,info_IM.tile[tileno].packet[pack_nb].end_pos,info_IM.tile[tileno].packet[pack_nb].disto/info_IM.D_max); */
|
start_pos = info_IM.tile[tileno].packet[pack_nb].start_pos;
|
||||||
fprintf(INDEX, "%d %d %d %d %d %d %d %d\n",
|
end_pos = info_IM.tile[tileno].packet[pack_nb].end_pos;
|
||||||
pack_nb, tileno, layno, resno,
|
disto = info_IM.tile[tileno].packet[pack_nb].disto;
|
||||||
compno, precno,
|
fprintf(INDEX, "%4d %6d %7d %5d %6d %6d %9d %9d %8e\n",
|
||||||
info_IM.tile[tileno].
|
pack_nb, tileno, layno, resno, compno, precno,
|
||||||
packet[pack_nb].start_pos,
|
start_pos, end_pos, disto);
|
||||||
info_IM.tile[tileno].packet[pack_nb].end_pos);
|
DistoTotal += disto;
|
||||||
pack_nb++;
|
pack_nb++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1203,6 +1206,8 @@ LIBJ2K_API int j2k_encode(j2k_image_t * img, j2k_cp_t * cp, char *outfile,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
fprintf(INDEX, "SE max : %8e\n", info_IM.D_max);
|
||||||
|
fprintf(INDEX, "SE total : %.8e\n", DistoTotal);
|
||||||
fclose(INDEX);
|
fclose(INDEX);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1347,7 +1352,7 @@ int j2k_decode_jpt_stream(unsigned char *src, int len, j2k_image_t ** img,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
/* data-bin read -> need to read a new header */
|
/* data-bin read -> need to read a new header */
|
||||||
if ((unsigned int)(cio_tell() - position) == header.Msg_length) {
|
if ((unsigned int) (cio_tell() - position) == header.Msg_length) {
|
||||||
jpt_read_Msg_Header(&header);
|
jpt_read_Msg_Header(&header);
|
||||||
position = cio_tell();
|
position = cio_tell();
|
||||||
if (header.Class_Id != 4) { /* 4 : Tile data-bin message */
|
if (header.Class_Id != 4) { /* 4 : Tile data-bin message */
|
||||||
|
|
|
@ -124,6 +124,7 @@ typedef struct {
|
||||||
unsigned char *ppt_data; /* packet header store there for futur use in t2_decode_packet */
|
unsigned char *ppt_data; /* packet header store there for futur use in t2_decode_packet */
|
||||||
int ppt; /* If ppt == 1 --> there was a PPT marker for the present tile */
|
int ppt; /* If ppt == 1 --> there was a PPT marker for the present tile */
|
||||||
int ppt_store; /* Use in case of multiple marker PPT (number of info already store) */
|
int ppt_store; /* Use in case of multiple marker PPT (number of info already store) */
|
||||||
|
float distoratio[100]; /* add fixed_quality */
|
||||||
j2k_tccp_t *tccps; /* tile-component coding parameters */
|
j2k_tccp_t *tccps; /* tile-component coding parameters */
|
||||||
} j2k_tcp_t;
|
} j2k_tcp_t;
|
||||||
|
|
||||||
|
@ -131,6 +132,7 @@ typedef struct {
|
||||||
int image_type; /* 0: PNM, PGM, PPM 1: PGX */
|
int image_type; /* 0: PNM, PGM, PPM 1: PGX */
|
||||||
int disto_alloc; /* Allocation by rate/distortion */
|
int disto_alloc; /* Allocation by rate/distortion */
|
||||||
int fixed_alloc; /* Allocation by fixed layer */
|
int fixed_alloc; /* Allocation by fixed layer */
|
||||||
|
int fixed_quality; /* add fixed_quality */
|
||||||
int reduce_on; /* option reduce is used if reduce = 1 */
|
int reduce_on; /* option reduce is used if reduce = 1 */
|
||||||
int reduce_value; /* if option reduce is used -> original dimension divided by 2^value */
|
int reduce_value; /* if option reduce is used -> original dimension divided by 2^value */
|
||||||
int tx0, ty0; /* XTOsiz, YTOsiz */
|
int tx0, ty0; /* XTOsiz, YTOsiz */
|
||||||
|
@ -158,8 +160,11 @@ typedef struct {
|
||||||
int start_pos; /* Start position */
|
int start_pos; /* Start position */
|
||||||
int end_header; /* End position of the header */
|
int end_header; /* End position of the header */
|
||||||
int end_pos; /* End position */
|
int end_pos; /* End position */
|
||||||
int pw, ph; /* number of precinct by tile */
|
int pw[33], ph[33]; /* precinct number for each resolution level */
|
||||||
|
int pdx[33], pdy[33]; /* precinct size (in power of 2), in X and Y for each resolution level */
|
||||||
info_packet *packet; /* information concerning packets inside tile */
|
info_packet *packet; /* information concerning packets inside tile */
|
||||||
|
int nbpix; /* add fixed_quality */
|
||||||
|
double distotile; /* add fixed_quality */
|
||||||
} info_tile; /* index struct */
|
} info_tile; /* index struct */
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
@ -174,8 +179,8 @@ typedef struct {
|
||||||
int Comp; /* Component numbers */
|
int Comp; /* Component numbers */
|
||||||
int Layer; /* number of layer */
|
int Layer; /* number of layer */
|
||||||
int Decomposition; /* number of decomposition */
|
int Decomposition; /* number of decomposition */
|
||||||
int pw, ph; /* nombre precinct in X and Y */
|
//int pw, ph; /* nombre precinct in X and Y */
|
||||||
int pdx, pdy; /* size of precinct in X and Y */
|
//int pdx, pdy; /* size of precinct in X and Y */
|
||||||
int Main_head_end; /* Main header position */
|
int Main_head_end; /* Main header position */
|
||||||
int codestream_size; /* codestream's size */
|
int codestream_size; /* codestream's size */
|
||||||
info_tile *tile; /* information concerning tiles inside image */
|
info_tile *tile; /* information concerning tiles inside image */
|
||||||
|
|
|
@ -514,24 +514,22 @@ void t1_dec_clnpass(int w, int h, int bpno, int orient, int cblksty)
|
||||||
}
|
}
|
||||||
} /* VSC and BYPASS by Antonin */
|
} /* VSC and BYPASS by Antonin */
|
||||||
|
|
||||||
double t1_getwmsedec(int nmsedec, int compno, int level, int orient,
|
double t1_getwmsedec(int nmsedec, int compno, int level, int orient, int bpno, int qmfbid, double stepsize, int numcomps) //mod fixed_quality
|
||||||
int bpno, int qmfbid, double stepsize)
|
|
||||||
{
|
{
|
||||||
double w1, w2, wmsedec;
|
double w1, w2, wmsedec;
|
||||||
if (qmfbid == 1) {
|
if (qmfbid == 1) {
|
||||||
w1 = mct_getnorm(compno);
|
w1 = (numcomps > 1) ? mct_getnorm(compno) : 1;
|
||||||
w2 = dwt_getnorm(level, orient);
|
w2 = dwt_getnorm(level, orient);
|
||||||
} else { /* if (qmfbid == 0) */
|
} else { /* if (qmfbid == 0) */
|
||||||
w1 = mct_getnorm_real(compno);
|
w1 = (numcomps > 1) ? mct_getnorm_real(compno) : 1;
|
||||||
w2 = dwt_getnorm_real(level, orient);
|
w2 = dwt_getnorm_real(level, orient);
|
||||||
}
|
}
|
||||||
wmsedec = w1 * w2 * stepsize * (1 << bpno);
|
wmsedec = w1 * w2 * (stepsize / 8192.0) * (1 << bpno);
|
||||||
wmsedec *= wmsedec * nmsedec / 8192.0;
|
wmsedec *= wmsedec * nmsedec / 8192.0;
|
||||||
return wmsedec;
|
return wmsedec;
|
||||||
}
|
}
|
||||||
|
|
||||||
void t1_encode_cblk(tcd_cblk_t * cblk, int orient, int compno, int level,
|
void t1_encode_cblk(tcd_cblk_t * cblk, int orient, int compno, int level, int qmfbid, double stepsize, int cblksty, int numcomps, tcd_tile_t * tile) //mod fixed_quality
|
||||||
int qmfbid, double stepsize, int cblksty)
|
|
||||||
{
|
{
|
||||||
int i, j;
|
int i, j;
|
||||||
int w, h;
|
int w, h;
|
||||||
|
@ -587,9 +585,9 @@ void t1_encode_cblk(tcd_cblk_t * cblk, int orient, int compno, int level,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
cumwmsedec +=
|
cumwmsedec += t1_getwmsedec(nmsedec, compno, level, orient, bpno, qmfbid, stepsize, numcomps); //mod fixed_quality
|
||||||
t1_getwmsedec(nmsedec, compno, level, orient, bpno, qmfbid,
|
tile->distotile += t1_getwmsedec(nmsedec, compno, level, orient, bpno, qmfbid, stepsize, numcomps); //add antonin quality
|
||||||
stepsize);
|
|
||||||
|
|
||||||
/* Code switch "RESTART" (i.e. TERMALL) */
|
/* Code switch "RESTART" (i.e. TERMALL) */
|
||||||
if ((cblksty & J2K_CCP_CBLKSTY_TERMALL)
|
if ((cblksty & J2K_CCP_CBLKSTY_TERMALL)
|
||||||
|
@ -728,6 +726,8 @@ void t1_encode_cblks(tcd_tile_t * tile, j2k_tcp_t * tcp)
|
||||||
tcd_precinct_t *prc;
|
tcd_precinct_t *prc;
|
||||||
tcd_cblk_t *cblk;
|
tcd_cblk_t *cblk;
|
||||||
|
|
||||||
|
tile->distotile = 0; //add fixed_quality
|
||||||
|
|
||||||
for (compno = 0; compno < tile->numcomps; compno++) {
|
for (compno = 0; compno < tile->numcomps; compno++) {
|
||||||
tilec = &tile->comps[compno];
|
tilec = &tile->comps[compno];
|
||||||
for (resno = 0; resno < tilec->numresolutions; resno++) {
|
for (resno = 0; resno < tilec->numresolutions; resno++) {
|
||||||
|
@ -787,10 +787,7 @@ void t1_encode_cblks(tcd_tile_t * tile, j2k_tcp_t * tcp)
|
||||||
} else if (orient == 1) {
|
} else if (orient == 1) {
|
||||||
orient = 2;
|
orient = 2;
|
||||||
}
|
}
|
||||||
t1_encode_cblk(cblk, orient, compno,
|
t1_encode_cblk(cblk, orient, compno, tilec->numresolutions - 1 - resno, tcp->tccps[compno].qmfbid, band->stepsize, tcp->tccps[compno].cblksty, tile->numcomps, tile); //mod fixed_quality
|
||||||
tilec->numresolutions - 1 - resno,
|
|
||||||
tcp->tccps[compno].qmfbid,
|
|
||||||
band->stepsize, tcp->tccps[compno].cblksty);
|
|
||||||
} /* cblkno */
|
} /* cblkno */
|
||||||
} /* precno */
|
} /* precno */
|
||||||
} /* bandno */
|
} /* bandno */
|
||||||
|
|
|
@ -131,10 +131,10 @@ void tcd_malloc_encode(j2k_image_t * img, j2k_cp_t * cp, int curtileno)
|
||||||
for (j = 0; j < tcp->numlayers; j++) {
|
for (j = 0; j < tcp->numlayers; j++) {
|
||||||
tcp->rates[j] =
|
tcp->rates[j] =
|
||||||
int_ceildiv(tile->numcomps * (tile->x1 - tile->x0) *
|
int_ceildiv(tile->numcomps * (tile->x1 - tile->x0) *
|
||||||
(tile->y1 -
|
(tile->y1 -
|
||||||
tile->y0) * img->comps[0].prec , (tcp->rates[j] * 8 *
|
tile->y0) * img->comps[0].prec, (tcp->rates[j] * 8 *
|
||||||
img->comps[0].dx *
|
img->comps[0].dx *
|
||||||
img->comps[0].dy));
|
img->comps[0].dy));
|
||||||
if (j && tcp->rates[j] < tcp->rates[j - 1] + 10) {
|
if (j && tcp->rates[j] < tcp->rates[j - 1] + 10) {
|
||||||
tcp->rates[j] = tcp->rates[j - 1] + 20;
|
tcp->rates[j] = tcp->rates[j - 1] + 20;
|
||||||
} else {
|
} else {
|
||||||
|
@ -390,10 +390,10 @@ void tcd_init_encode(j2k_image_t * img, j2k_cp_t * cp, int curtileno)
|
||||||
for (j = 0; j < tcp->numlayers; j++) {
|
for (j = 0; j < tcp->numlayers; j++) {
|
||||||
tcp->rates[j] =
|
tcp->rates[j] =
|
||||||
int_ceildiv(tile->numcomps * (tile->x1 - tile->x0) *
|
int_ceildiv(tile->numcomps * (tile->x1 - tile->x0) *
|
||||||
(tile->y1 -
|
(tile->y1 -
|
||||||
tile->y0) * img->comps[0].prec , (tcp->rates[j] * 8 *
|
tile->y0) * img->comps[0].prec, (tcp->rates[j] * 8 *
|
||||||
img->comps[0].dx *
|
img->comps[0].dx *
|
||||||
img->comps[0].dy));
|
img->comps[0].dy));
|
||||||
if (j && tcp->rates[j] < tcp->rates[j - 1] + 10) {
|
if (j && tcp->rates[j] < tcp->rates[j - 1] + 10) {
|
||||||
tcp->rates[j] = tcp->rates[j - 1] + 20;
|
tcp->rates[j] = tcp->rates[j - 1] + 20;
|
||||||
} else {
|
} else {
|
||||||
|
@ -913,6 +913,9 @@ void tcd_rateallocate_fixed()
|
||||||
void tcd_makelayer(int layno, double thresh, int final)
|
void tcd_makelayer(int layno, double thresh, int final)
|
||||||
{
|
{
|
||||||
int compno, resno, bandno, precno, cblkno, passno;
|
int compno, resno, bandno, precno, cblkno, passno;
|
||||||
|
|
||||||
|
tcd_tile->distolayer[layno] = 0; //add fixed_quality
|
||||||
|
|
||||||
for (compno = 0; compno < tcd_tile->numcomps; compno++) {
|
for (compno = 0; compno < tcd_tile->numcomps; compno++) {
|
||||||
tcd_tilecomp_t *tilec = &tcd_tile->comps[compno];
|
tcd_tilecomp_t *tilec = &tcd_tile->comps[compno];
|
||||||
for (resno = 0; resno < tilec->numresolutions; resno++) {
|
for (resno = 0; resno < tilec->numresolutions; resno++) {
|
||||||
|
@ -952,8 +955,12 @@ void tcd_makelayer(int layno, double thresh, int final)
|
||||||
n = passno + 1;
|
n = passno + 1;
|
||||||
}
|
}
|
||||||
layer->numpasses = n - cblk->numpassesinlayers;
|
layer->numpasses = n - cblk->numpassesinlayers;
|
||||||
if (!layer->numpasses)
|
|
||||||
|
if (!layer->numpasses) {
|
||||||
|
layer->disto = 0;
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (cblk->numpassesinlayers == 0) {
|
if (cblk->numpassesinlayers == 0) {
|
||||||
layer->len = cblk->passes[n - 1].rate;
|
layer->len = cblk->passes[n - 1].rate;
|
||||||
layer->data = cblk->data;
|
layer->data = cblk->data;
|
||||||
|
@ -969,6 +976,8 @@ void tcd_makelayer(int layno, double thresh, int final)
|
||||||
cblk->passes[cblk->numpassesinlayers - 1].distortiondec;
|
cblk->passes[cblk->numpassesinlayers - 1].distortiondec;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tcd_tile->distolayer[layno] += layer->disto; //add fixed_quality
|
||||||
|
|
||||||
if (final)
|
if (final)
|
||||||
cblk->numpassesinlayers = n;
|
cblk->numpassesinlayers = n;
|
||||||
}
|
}
|
||||||
|
@ -982,11 +991,17 @@ void tcd_rateallocate(unsigned char *dest, int len, info_image * info_IM)
|
||||||
{
|
{
|
||||||
int compno, resno, bandno, precno, cblkno, passno, layno;
|
int compno, resno, bandno, precno, cblkno, passno, layno;
|
||||||
double min, max;
|
double min, max;
|
||||||
|
double cumdisto[100]; //add fixed_quality
|
||||||
|
const double K = 1; // 1.1; //add fixed_quality
|
||||||
|
double maxSE = 0;
|
||||||
min = DBL_MAX;
|
min = DBL_MAX;
|
||||||
max = 0;
|
max = 0;
|
||||||
|
|
||||||
|
tcd_tile->nbpix = 0; //add fixed_quality
|
||||||
|
|
||||||
for (compno = 0; compno < tcd_tile->numcomps; compno++) {
|
for (compno = 0; compno < tcd_tile->numcomps; compno++) {
|
||||||
tcd_tilecomp_t *tilec = &tcd_tile->comps[compno];
|
tcd_tilecomp_t *tilec = &tcd_tile->comps[compno];
|
||||||
|
tilec->nbpix = 0;
|
||||||
for (resno = 0; resno < tilec->numresolutions; resno++) {
|
for (resno = 0; resno < tilec->numresolutions; resno++) {
|
||||||
tcd_resolution_t *res = &tilec->resolutions[resno];
|
tcd_resolution_t *res = &tilec->resolutions[resno];
|
||||||
for (bandno = 0; bandno < res->numbands; bandno++) {
|
for (bandno = 0; bandno < res->numbands; bandno++) {
|
||||||
|
@ -1018,15 +1033,27 @@ void tcd_rateallocate(unsigned char *dest, int len, info_image * info_IM)
|
||||||
max = rdslope;
|
max = rdslope;
|
||||||
}
|
}
|
||||||
} /* passno */
|
} /* passno */
|
||||||
|
|
||||||
|
tcd_tile->nbpix += ((cblk->x1 - cblk->x0) * (cblk->y1 - cblk->y0)); //add fixed_quality
|
||||||
|
tilec->nbpix += ((cblk->x1 - cblk->x0) * (cblk->y1 - cblk->y0)); //add fixed_quality
|
||||||
|
|
||||||
} /* cbklno */
|
} /* cbklno */
|
||||||
} /* precno */
|
} /* precno */
|
||||||
} /* bandno */
|
} /* bandno */
|
||||||
} /* resno */
|
} /* resno */
|
||||||
|
maxSE+=(double)(((1<<tcd_img->comps[compno].prec)-1)*((1<<tcd_img->comps[compno].prec)-1))*(tilec->nbpix);
|
||||||
} /* compno */
|
} /* compno */
|
||||||
if (info_IM->index_on) { /* Threshold for Marcela Index */
|
|
||||||
info_IM->tile[tcd_tileno].thresh =
|
/* add antonin index */
|
||||||
|
if (info_IM->index_on) {
|
||||||
|
info_tile *info_TL = &info_IM->tile[tcd_tileno];
|
||||||
|
info_TL->nbpix = tcd_tile->nbpix;
|
||||||
|
info_TL->distotile = tcd_tile->distotile;
|
||||||
|
info_TL->thresh =
|
||||||
(double *) malloc(tcd_tcp->numlayers * sizeof(double));
|
(double *) malloc(tcd_tcp->numlayers * sizeof(double));
|
||||||
}
|
}
|
||||||
|
/* dda */
|
||||||
|
|
||||||
for (layno = 0; layno < tcd_tcp->numlayers; layno++) {
|
for (layno = 0; layno < tcd_tcp->numlayers; layno++) {
|
||||||
volatile double lo = min;
|
volatile double lo = min;
|
||||||
volatile double hi = max;
|
volatile double hi = max;
|
||||||
|
@ -1035,25 +1062,43 @@ void tcd_rateallocate(unsigned char *dest, int len, info_image * info_IM)
|
||||||
volatile double goodthresh;
|
volatile double goodthresh;
|
||||||
volatile int goodlen;
|
volatile int goodlen;
|
||||||
volatile int i;
|
volatile int i;
|
||||||
|
double distotarget; //add fixed_quality
|
||||||
|
|
||||||
|
distotarget = tcd_tile->distotile - ((K * maxSE) / pow(10, tcd_tcp->distoratio[layno] / 10)); // add fixed_quality
|
||||||
|
|
||||||
for (i = 0; i < 32; i++) {
|
for (i = 0; i < 32; i++) {
|
||||||
volatile double thresh = (lo + hi) / 2;
|
volatile double thresh = (lo + hi) / 2;
|
||||||
int l;
|
int l=0;
|
||||||
|
double distoachieved = 0; // add fixed_quality
|
||||||
|
|
||||||
tcd_makelayer(layno, thresh, 0);
|
tcd_makelayer(layno, thresh, 0);
|
||||||
|
|
||||||
l = t2_encode_packets(tcd_img, tcd_cp, tcd_tileno, tcd_tile,
|
if (tcd_cp->fixed_quality) { // add fixed_quality
|
||||||
layno + 1, dest, maxlen, info_IM);
|
distoachieved =
|
||||||
/* fprintf(stderr, "rate alloc: len=%d, max=%d\n", l, maxlen); */
|
layno ==
|
||||||
if (l == -999) {
|
0 ? tcd_tile->distolayer[0] : cumdisto[layno - 1] +
|
||||||
|
tcd_tile->distolayer[layno];
|
||||||
|
if (distoachieved < distotarget) {
|
||||||
|
hi = thresh;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
lo = thresh;
|
lo = thresh;
|
||||||
continue;
|
} else {
|
||||||
|
l =
|
||||||
|
t2_encode_packets(tcd_img, tcd_cp, tcd_tileno, tcd_tile,
|
||||||
|
layno + 1, dest, maxlen, info_IM);
|
||||||
|
/* fprintf(stderr, "rate alloc: len=%d, max=%d\n", l, maxlen); */
|
||||||
|
if (l == -999) {
|
||||||
|
lo = thresh;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
hi = thresh;
|
||||||
}
|
}
|
||||||
|
|
||||||
hi = thresh;
|
|
||||||
success = 1;
|
success = 1;
|
||||||
goodthresh = thresh;
|
goodthresh = thresh;
|
||||||
goodlen = l;
|
goodlen = l;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!success) {
|
if (!success) {
|
||||||
|
@ -1064,6 +1109,10 @@ void tcd_rateallocate(unsigned char *dest, int len, info_image * info_IM)
|
||||||
info_IM->tile[tcd_tileno].thresh[layno] = goodthresh;
|
info_IM->tile[tcd_tileno].thresh[layno] = goodthresh;
|
||||||
}
|
}
|
||||||
tcd_makelayer(layno, goodthresh, 1);
|
tcd_makelayer(layno, goodthresh, 1);
|
||||||
|
cumdisto[layno] =
|
||||||
|
layno ==
|
||||||
|
0 ? tcd_tile->distolayer[0] : cumdisto[layno - 1] +
|
||||||
|
tcd_tile->distolayer[layno]; // add fixed_quality
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1071,7 +1120,7 @@ int tcd_encode_tile_pxm(int tileno, unsigned char *dest, int len,
|
||||||
info_image * info_IM)
|
info_image * info_IM)
|
||||||
{
|
{
|
||||||
int compno;
|
int compno;
|
||||||
int l;
|
int l,i;
|
||||||
clock_t time7;
|
clock_t time7;
|
||||||
tcd_tile_t *tile;
|
tcd_tile_t *tile;
|
||||||
j2k_tcp_t *tcp = &tcd_cp->tcps[0];
|
j2k_tcp_t *tcp = &tcd_cp->tcps[0];
|
||||||
|
@ -1083,16 +1132,16 @@ int tcd_encode_tile_pxm(int tileno, unsigned char *dest, int len,
|
||||||
tile = tcd_tile;
|
tile = tcd_tile;
|
||||||
/* INDEX >> "Precinct_nb_X et Precinct_nb_Y" */
|
/* INDEX >> "Precinct_nb_X et Precinct_nb_Y" */
|
||||||
if (info_IM->index_on) {
|
if (info_IM->index_on) {
|
||||||
tcd_tilecomp_t *tilec_idx = &tile->comps[0]; /* old parser version */
|
tcd_tilecomp_t *tilec_idx = &tile->comps[0]; //Based on Component 0
|
||||||
tcd_resolution_t *res_idx = &tilec_idx->resolutions[0]; /* old parser version */
|
for (i=0;i<tilec_idx->numresolutions;i++) {
|
||||||
|
tcd_resolution_t *res_idx = &tilec_idx->resolutions[i];
|
||||||
|
|
||||||
info_IM->tile[tileno].pw = res_idx->pw;
|
info_IM->tile[tileno].pw[i] = res_idx->pw;
|
||||||
info_IM->tile[tileno].ph = res_idx->ph;
|
info_IM->tile[tileno].ph[i] = res_idx->ph;
|
||||||
|
|
||||||
info_IM->pw = res_idx->pw; /* old parser version */
|
info_IM->tile[tileno].pdx[i] = tccp->prcw[i];
|
||||||
info_IM->ph = res_idx->ph; /* old parser version */
|
info_IM->tile[tileno].pdy[i] = tccp->prch[i];
|
||||||
info_IM->pdx = 1 << tccp->prcw[tccp->numresolutions - 1];
|
}
|
||||||
info_IM->pdy = 1 << tccp->prch[tccp->numresolutions - 1];
|
|
||||||
}
|
}
|
||||||
/* << INDEX */
|
/* << INDEX */
|
||||||
|
|
||||||
|
@ -1190,7 +1239,7 @@ int tcd_encode_tile_pxm(int tileno, unsigned char *dest, int len,
|
||||||
/*-----------RATE-ALLOCATE------------------*/
|
/*-----------RATE-ALLOCATE------------------*/
|
||||||
info_IM->index_write = 0; /* INDEX */
|
info_IM->index_write = 0; /* INDEX */
|
||||||
|
|
||||||
if (tcd_cp->disto_alloc)
|
if (tcd_cp->disto_alloc || tcd_cp->fixed_quality) // mod fixed_quality
|
||||||
/* Normal Rate/distortion allocation */
|
/* Normal Rate/distortion allocation */
|
||||||
tcd_rateallocate(dest, len, info_IM);
|
tcd_rateallocate(dest, len, info_IM);
|
||||||
else
|
else
|
||||||
|
@ -1220,7 +1269,7 @@ int tcd_encode_tile_pgx(int tileno, unsigned char *dest, int len,
|
||||||
info_image * info_IM)
|
info_image * info_IM)
|
||||||
{
|
{
|
||||||
int compno;
|
int compno;
|
||||||
int l;
|
int l,i;
|
||||||
clock_t time;
|
clock_t time;
|
||||||
tcd_tile_t *tile;
|
tcd_tile_t *tile;
|
||||||
j2k_tcp_t *tcp = &tcd_cp->tcps[0];
|
j2k_tcp_t *tcp = &tcd_cp->tcps[0];
|
||||||
|
@ -1232,14 +1281,16 @@ int tcd_encode_tile_pgx(int tileno, unsigned char *dest, int len,
|
||||||
tile = tcd_tile;
|
tile = tcd_tile;
|
||||||
/* INDEX >> "Precinct_nb_X et Precinct_nb_Y" */
|
/* INDEX >> "Precinct_nb_X et Precinct_nb_Y" */
|
||||||
if (info_IM->index_on) {
|
if (info_IM->index_on) {
|
||||||
tcd_tilecomp_t *tilec_idx = &tile->comps[0];
|
tcd_tilecomp_t *tilec_idx = &tile->comps[0]; //Based on Component 0
|
||||||
tcd_resolution_t *res_idx = &tilec_idx->resolutions[0];
|
for (i=0;i<tilec_idx->numresolutions;i++) {
|
||||||
info_IM->tile[tileno].pw = res_idx->pw;
|
tcd_resolution_t *res_idx = &tilec_idx->resolutions[i];
|
||||||
info_IM->tile[tileno].ph = res_idx->ph;
|
|
||||||
info_IM->pw = res_idx->pw; /* old parser version */
|
info_IM->tile[tileno].pw[i] = res_idx->pw;
|
||||||
info_IM->ph = res_idx->ph; /* old parser version */
|
info_IM->tile[tileno].ph[i] = res_idx->ph;
|
||||||
info_IM->pdx = 1 << tccp->prcw[tccp->numresolutions - 1];
|
|
||||||
info_IM->pdy = 1 << tccp->prch[tccp->numresolutions - 1];
|
info_IM->tile[tileno].pdx[i] = tccp->prcw[i];
|
||||||
|
info_IM->tile[tileno].pdy[i] = tccp->prch[i];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
/* << INDEX */
|
/* << INDEX */
|
||||||
/*---------------TILE-------------------*/
|
/*---------------TILE-------------------*/
|
||||||
|
@ -1333,11 +1384,10 @@ int tcd_encode_tile_pgx(int tileno, unsigned char *dest, int len,
|
||||||
t1_encode_cblks(tile, tcd_tcp);
|
t1_encode_cblks(tile, tcd_tcp);
|
||||||
|
|
||||||
/*-----------RATE-ALLOCATE------------------*/
|
/*-----------RATE-ALLOCATE------------------*/
|
||||||
info_IM->index_write = 0; /* INDEX */
|
|
||||||
|
|
||||||
info_IM->index_write = 0; /* INDEX */
|
info_IM->index_write = 0; /* INDEX */
|
||||||
|
|
||||||
if (tcd_cp->disto_alloc)
|
if (tcd_cp->disto_alloc || tcd_cp->fixed_quality) // mod fixed_quality
|
||||||
/* Normal Rate/distortion allocation */
|
/* Normal Rate/distortion allocation */
|
||||||
tcd_rateallocate(dest, len, info_IM);
|
tcd_rateallocate(dest, len, info_IM);
|
||||||
else
|
else
|
||||||
|
|
|
@ -98,12 +98,16 @@ typedef struct {
|
||||||
int numresolutions; /* number of resolutions level */
|
int numresolutions; /* number of resolutions level */
|
||||||
tcd_resolution_t *resolutions; /* resolutions information */
|
tcd_resolution_t *resolutions; /* resolutions information */
|
||||||
int *data; /* data of the component */
|
int *data; /* data of the component */
|
||||||
|
int nbpix; /* add fixed_quality */
|
||||||
} tcd_tilecomp_t;
|
} tcd_tilecomp_t;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int x0, y0, x1, y1; /* dimension of the tile : left upper corner (x0, y0) right low corner (x1,y1) */
|
int x0, y0, x1, y1; /* dimension of the tile : left upper corner (x0, y0) right low corner (x1,y1) */
|
||||||
int numcomps; /* number of components in tile */
|
int numcomps; /* number of components in tile */
|
||||||
tcd_tilecomp_t *comps; /* Components information */
|
tcd_tilecomp_t *comps; /* Components information */
|
||||||
|
int nbpix; /* add fixed_quality */
|
||||||
|
double distotile; /* add fixed_quality */
|
||||||
|
double distolayer[100]; /* add fixed_quality */
|
||||||
} tcd_tile_t;
|
} tcd_tile_t;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|
Loading…
Reference in New Issue