Index structure adpated for other progression orders than LRCP
(thanks to Stefano Pensa)
This commit is contained in:
parent
0ddef9b2db
commit
eb1b017ec7
|
@ -976,7 +976,7 @@ LIBJ2K_API int
|
|||
j2k_encode(j2k_image_t * img, j2k_cp_t * cp, char *output,
|
||||
int len, char *index)
|
||||
{
|
||||
int tileno, compno, layno, resno, precno, pack_nb;
|
||||
int tileno, compno, layno, resno, precno, pack_nb, x, y;
|
||||
char *dest = NULL;
|
||||
FILE *INDEX = NULL;
|
||||
FILE *f = NULL;
|
||||
|
@ -1011,6 +1011,8 @@ j2k_encode(j2k_image_t * img, j2k_cp_t * cp, char *output,
|
|||
info_IM.th = j2k_cp->th;
|
||||
info_IM.Tile_x = j2k_cp->tdx; /* new version parser */
|
||||
info_IM.Tile_y = j2k_cp->tdy; /* new version parser */
|
||||
info_IM.Tile_Ox = j2k_cp->tx0; /* new version parser */
|
||||
info_IM.Tile_Oy = j2k_cp->ty0; /* new version parser */
|
||||
info_IM.Comp = j2k_img->numcomps;
|
||||
info_IM.Layer = (&j2k_cp->tcps[0])->numlayers;
|
||||
info_IM.Decomposition = (&j2k_cp->tcps[0])->tccps->numresolutions - 1;
|
||||
|
@ -1144,8 +1146,6 @@ j2k_encode(j2k_image_t * img, j2k_cp_t * cp, char *output,
|
|||
|
||||
}
|
||||
|
||||
|
||||
|
||||
fprintf(INDEX, "%d %d\n", info_IM.Im_w, info_IM.Im_h);
|
||||
|
||||
fprintf(INDEX, "%d\n", info_IM.Prog);
|
||||
|
@ -1197,194 +1197,161 @@ j2k_encode(j2k_image_t * img, j2k_cp_t * cp, char *output,
|
|||
"pkno tileno layerno resno compno precno start_pos end_pos deltaSE \n"); */
|
||||
|
||||
if (info_IM.Prog == 0) { /* LRCP */
|
||||
|
||||
//fprintf(INDEX, "pack_nb tileno layno resno compno precno start_pos end_pos disto");
|
||||
for (layno = 0; layno < info_IM.Layer; layno++) {
|
||||
|
||||
for (resno = 0; resno < info_IM.Decomposition + 1; resno++) {
|
||||
|
||||
for (compno = 0; compno < info_IM.Comp; compno++) {
|
||||
|
||||
for (precno = 0;
|
||||
precno <
|
||||
info_IM.tile[tileno].pw[resno] *
|
||||
info_IM.tile[tileno].ph[resno]; precno++) {
|
||||
|
||||
info_IM.tile[tileno].pw[resno] * info_IM.tile[tileno].ph[resno];
|
||||
precno++) {
|
||||
start_pos = info_IM.tile[tileno].packet[pack_nb].start_pos;
|
||||
|
||||
end_pos = info_IM.tile[tileno].packet[pack_nb].end_pos;
|
||||
|
||||
disto = info_IM.tile[tileno].packet[pack_nb].disto;
|
||||
|
||||
fprintf(INDEX,
|
||||
"%4d %6d %7d %5d %6d %6d %9d %9d %8e\n",
|
||||
pack_nb, tileno, layno, resno, compno,
|
||||
precno, start_pos, end_pos, disto);
|
||||
|
||||
fprintf(INDEX, "%4d %6d %7d %5d %6d %6d %9d %9d %8e\n",
|
||||
pack_nb, tileno, layno, resno, compno, precno,
|
||||
start_pos, end_pos, disto);
|
||||
DistoTotal += disto;
|
||||
|
||||
pack_nb++;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
} else if (info_IM.Prog == 1) { /* RLCP */
|
||||
|
||||
//fprintf(INDEX, "pack_nb tileno resno layno compno precno start_pos end_pos disto");
|
||||
for (resno = 0; resno < info_IM.Decomposition + 1; resno++) {
|
||||
|
||||
for (layno = 0; layno < info_IM.Layer; layno++) {
|
||||
|
||||
for (compno = 0; compno < info_IM.Comp; compno++) {
|
||||
|
||||
for (precno = 0;
|
||||
precno <
|
||||
info_IM.tile[tileno].pw[resno] *
|
||||
info_IM.tile[tileno].ph[resno]; precno++) {
|
||||
|
||||
for (precno = 0; precno < info_IM.tile[tileno].pw[resno] * info_IM.tile[tileno].ph[resno]; precno++) {
|
||||
start_pos = info_IM.tile[tileno].packet[pack_nb].start_pos;
|
||||
|
||||
end_pos = info_IM.tile[tileno].packet[pack_nb].end_pos;
|
||||
|
||||
disto = info_IM.tile[tileno].packet[pack_nb].disto;
|
||||
|
||||
fprintf(INDEX,
|
||||
"%4d %6d %7d %5d %6d %6d %9d %9d %8e\n",
|
||||
pack_nb, tileno, layno, resno, compno,
|
||||
precno, start_pos, end_pos, disto);
|
||||
|
||||
fprintf(INDEX, "%4d %6d %5d %7d %6d %6d %9d %9d %8e\n",
|
||||
pack_nb, tileno, resno, layno, compno, precno,
|
||||
start_pos, end_pos, disto);
|
||||
DistoTotal += disto;
|
||||
|
||||
pack_nb++;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
} else if (info_IM.Prog == 2) { /* RPCL */
|
||||
|
||||
//fprintf(INDEX, "\npack_nb tileno resno precno compno layno start_pos end_pos disto\n");
|
||||
for (resno = 0; resno < info_IM.Decomposition + 1; resno++) {
|
||||
|
||||
for (precno = 0;
|
||||
precno <
|
||||
info_IM.tile[tileno].pw[resno] *
|
||||
info_IM.tile[tileno].ph[resno]; precno++) {
|
||||
|
||||
/* I suppose components have same XRsiz, YRsiz */
|
||||
int x0 = info_IM.Tile_Ox + tileno - (int)floor( tileno/info_IM.tw ) * info_IM.tw * info_IM.Tile_x;
|
||||
int y0 = info_IM.Tile_Ox + (int)floor( tileno/info_IM.tw ) * info_IM.Tile_y;
|
||||
int x1 = x0 + info_IM.Tile_x;
|
||||
int y1 = y0 + info_IM.Tile_y;
|
||||
for (y=y0; y<y1; y++) {
|
||||
for (x=x0; x<x1; x++) {
|
||||
for (compno = 0; compno < info_IM.Comp; compno++) {
|
||||
|
||||
int prec_max = info_IM.tile[tileno].pw[resno] * info_IM.tile[tileno].ph[resno];
|
||||
for (precno = 0; precno < prec_max; precno++) {
|
||||
int pcnx = info_IM.tile[tileno].pw[resno];
|
||||
int pcx = (int) pow( 2, info_IM.tile[tileno].pdx[resno] + info_IM.Decomposition - resno );
|
||||
int pcy = (int) pow( 2, info_IM.tile[tileno].pdy[resno] + info_IM.Decomposition - resno );
|
||||
int precno_x = precno - (int) floor( precno/pcnx ) * pcnx;
|
||||
int precno_y = (int) floor( precno/pcnx );
|
||||
if (precno_y*pcy == y ) {
|
||||
if (precno_x*pcx == x ) {
|
||||
for (layno = 0; layno < info_IM.Layer; layno++) {
|
||||
|
||||
start_pos = info_IM.tile[tileno].packet[pack_nb].start_pos;
|
||||
|
||||
end_pos = info_IM.tile[tileno].packet[pack_nb].end_pos;
|
||||
|
||||
disto = info_IM.tile[tileno].packet[pack_nb].disto;
|
||||
|
||||
fprintf(INDEX,
|
||||
"%4d %6d %7d %5d %6d %6d %9d %9d %8e\n",
|
||||
pack_nb, tileno, layno, resno, compno,
|
||||
precno, start_pos, end_pos, disto);
|
||||
|
||||
fprintf(INDEX, "%4d %6d %5d %6d %6d %7d %9d %9d %8e\n",
|
||||
pack_nb, tileno, resno, precno, compno, layno,
|
||||
start_pos, end_pos, disto);
|
||||
DistoTotal += disto;
|
||||
|
||||
pack_nb++;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (info_IM.Prog == 3) { /* PCRL */
|
||||
// I suppose components have same XRsiz, YRsiz
|
||||
int x0 = info_IM.Tile_Ox + tileno - (int)floor( tileno/info_IM.tw ) * info_IM.tw * info_IM.Tile_x;
|
||||
int y0 = info_IM.Tile_Ox + (int)floor( tileno/info_IM.tw ) * info_IM.Tile_y;
|
||||
int x1 = x0 + info_IM.Tile_x;
|
||||
int y1 = y0 + info_IM.Tile_y;
|
||||
|
||||
for (precno = 0;
|
||||
precno <
|
||||
info_IM.tile[tileno].pw[resno] *
|
||||
info_IM.tile[tileno].ph[resno]; precno++) {
|
||||
|
||||
//fprintf(INDEX, "\npack_nb tileno precno compno resno layno start_pos end_pos disto\n");
|
||||
for (y=y0; y<y1; y++) {
|
||||
for (x=x0; x<x1; x++) {
|
||||
for (compno = 0; compno < info_IM.Comp; compno++) {
|
||||
|
||||
for (resno = 0; resno < info_IM.Decomposition + 1; resno++) {
|
||||
|
||||
int prec_max = info_IM.tile[tileno].pw[resno] * info_IM.tile[tileno].ph[resno];
|
||||
for (precno = 0; precno < prec_max; precno++) {
|
||||
int pcnx = info_IM.tile[tileno].pw[resno];
|
||||
int pcx = (int) pow( 2, info_IM.tile[tileno].pdx[resno] + info_IM.Decomposition - resno );
|
||||
int pcy = (int) pow( 2, info_IM.tile[tileno].pdy[resno] + info_IM.Decomposition - resno );
|
||||
int precno_x = precno - (int) floor( precno/pcnx ) * pcnx;
|
||||
int precno_y = (int) floor( precno/pcnx );
|
||||
if (precno_y*pcy == y ) {
|
||||
if (precno_x*pcx == x ) {
|
||||
for (layno = 0; layno < info_IM.Layer; layno++) {
|
||||
|
||||
start_pos = info_IM.tile[tileno].packet[pack_nb].start_pos;
|
||||
|
||||
end_pos = info_IM.tile[tileno].packet[pack_nb].end_pos;
|
||||
|
||||
disto = info_IM.tile[tileno].packet[pack_nb].disto;
|
||||
|
||||
fprintf(INDEX,
|
||||
"%4d %6d %7d %5d %6d %6d %9d %9d %8e\n",
|
||||
pack_nb, tileno, layno, resno, compno,
|
||||
precno, start_pos, end_pos, disto);
|
||||
|
||||
fprintf(INDEX, "%4d %6d %6d %6d %5d %7d %9d %9d %8e\n",
|
||||
pack_nb, tileno, precno, compno, resno, layno,
|
||||
start_pos, end_pos, disto);
|
||||
DistoTotal += disto;
|
||||
|
||||
pack_nb++;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else { /* CPRL */
|
||||
|
||||
|
||||
|
||||
//fprintf(INDEX, "\npack_nb tileno compno precno resno layno start_pos end_pos disto\n");
|
||||
for (compno = 0; compno < info_IM.Comp; compno++) {
|
||||
|
||||
for (precno = 0;
|
||||
precno <
|
||||
info_IM.tile[tileno].pw[resno] *
|
||||
info_IM.tile[tileno].ph[resno]; precno++) {
|
||||
|
||||
/* I suppose components have same XRsiz, YRsiz */
|
||||
int x0 = info_IM.Tile_Ox + tileno - (int)floor( tileno/info_IM.tw ) * info_IM.tw * info_IM.Tile_x;
|
||||
int y0 = info_IM.Tile_Ox + (int)floor( tileno/info_IM.tw ) * info_IM.Tile_y;
|
||||
int x1 = x0 + info_IM.Tile_x;
|
||||
int y1 = y0 + info_IM.Tile_y;
|
||||
for (y=y0; y<y1; y++) {
|
||||
for (x=x0; x<x1; x++) {
|
||||
for (resno = 0; resno < info_IM.Decomposition + 1; resno++) {
|
||||
|
||||
int prec_max = info_IM.tile[tileno].pw[resno] * info_IM.tile[tileno].ph[resno];
|
||||
for (precno = 0; precno < prec_max; precno++) {
|
||||
int pcnx = info_IM.tile[tileno].pw[resno];
|
||||
int pcx = (int) pow( 2, info_IM.tile[tileno].pdx[resno] + info_IM.Decomposition - resno );
|
||||
int pcy = (int) pow( 2, info_IM.tile[tileno].pdy[resno] + info_IM.Decomposition - resno );
|
||||
int precno_x = precno - (int) floor( precno/pcnx ) * pcnx;
|
||||
int precno_y = (int) floor( precno/pcnx );
|
||||
if (precno_y*pcy == y ) {
|
||||
if (precno_x*pcx == x ) {
|
||||
for (layno = 0; layno < info_IM.Layer; layno++) {
|
||||
|
||||
start_pos = info_IM.tile[tileno].packet[pack_nb].start_pos;
|
||||
|
||||
end_pos = info_IM.tile[tileno].packet[pack_nb].end_pos;
|
||||
|
||||
disto = info_IM.tile[tileno].packet[pack_nb].disto;
|
||||
|
||||
fprintf(INDEX,
|
||||
"%4d %6d %7d %5d %6d %6d %9d %9d %8e\n",
|
||||
pack_nb, tileno, layno, resno, compno,
|
||||
precno, start_pos, end_pos, disto);
|
||||
|
||||
fprintf(INDEX, "%4d %6d %6d %6d %5d %7d %9d %9d %8e\n",
|
||||
pack_nb, tileno, compno, precno, resno, layno, start_pos, end_pos, disto);
|
||||
DistoTotal += disto;
|
||||
|
||||
pack_nb++;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
fprintf(INDEX, "%8e\n", info_IM.D_max); //SE max
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
fprintf(INDEX, "SE max : %8e\n", info_IM.D_max);
|
||||
|
||||
fprintf(INDEX, "SE total : %.8e\n", DistoTotal);
|
||||
fprintf(INDEX, "%.8e\n", DistoTotal); // SE totale
|
||||
|
||||
fclose(INDEX);
|
||||
|
||||
|
|
|
@ -176,6 +176,7 @@ typedef struct {
|
|||
int Im_w, Im_h; /* Image width and Height */
|
||||
int Prog; /* progression order */
|
||||
int Tile_x, Tile_y; /* Tile size in x and y */
|
||||
int Tile_Ox, Tile_Oy;
|
||||
int tw, th; /* Number of Tile in X and Y */
|
||||
int Comp; /* Component numbers */
|
||||
int Layer; /* number of layer */
|
||||
|
|
Loading…
Reference in New Issue