diff options
| author | Antonin Descampe <antonin@gmail.com> | 2004-05-07 13:50:47 +0000 |
|---|---|---|
| committer | Antonin Descampe <antonin@gmail.com> | 2004-05-07 13:50:47 +0000 |
| commit | a4911967eb32c3b9ea5bdcef10205f68e136b123 (patch) | |
| tree | da4417fbd5d8c55f63e87946bc4271f1de063284 /libopenjpeg/j2k.c | |
| parent | 32e7b1529bea8f4464a7f511ac86e7b30b0aa0c5 (diff) | |
* 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
-----------------------------
Diffstat (limited to 'libopenjpeg/j2k.c')
| -rw-r--r-- | libopenjpeg/j2k.c | 111 |
1 files changed, 58 insertions, 53 deletions
diff --git a/libopenjpeg/j2k.c b/libopenjpeg/j2k.c index df14b173..a4c8630d 100644 --- a/libopenjpeg/j2k.c +++ b/libopenjpeg/j2k.c @@ -1079,6 +1079,7 @@ LIBJ2K_API int j2k_encode(j2k_image_t * img, j2k_cp_t * cp, char *outfile, /* Creation of the index file */ if (info_IM.index_on) { + double DistoTotal = 0; info_IM.codestream_size = cio_tell() + pos_correction; /* Correction 14/4/03 suite rmq de Patrick */ 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\n", info_IM.Prog); 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.Layer); 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.codestream_size); - fprintf(INDEX, "%f\n", info_IM.D_max); 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].end_header, - info_IM.tile[tileno].end_pos); - /*for (layno=0;layno<info_IM.Layer;layno++) - fprintf(INDEX, " %f",info_IM.tile[tileno].thresh[layno]); - */ fprintf(INDEX, "\n"); + info_IM.tile[tileno].end_pos, info_IM.tile[tileno].distotile, info_IM.tile[tileno].nbpix, + info_IM.tile[tileno].distotile / info_IM.tile[tileno].nbpix); } for (tileno = 0; tileno < j2k_cp->tw * j2k_cp->th; tileno++) { + int start_pos, end_pos; + double disto = 0; pack_nb = 0; + /* fprintf(INDEX, + "pkno tileno layerno resno compno precno start_pos end_pos deltaSE \n");*/ if (info_IM.Prog == 0) { /* LRCP */ 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 * - info_IM.tile[tileno].ph; precno++) { - fprintf(INDEX, - "%d %d %d %d %d %d %d %d %.08f\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); - /*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); */ + 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); + DistoTotal += disto; 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 (layno = 0; layno < info_IM.Layer; layno++) { for (compno = 0; compno < info_IM.Comp; compno++) { - for (precno = 0; precno < info_IM.pw * info_IM.ph; 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); */ - 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); + 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); + DistoTotal += disto; 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 */ 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 (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); */ - 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); + 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); + DistoTotal += disto; pack_nb++; } } } } } 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 (resno = 0; resno < info_IM.Decomposition + 1; resno++) { 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); */ - 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); + 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); + DistoTotal += disto; pack_nb++; } } @@ -1186,16 +1189,16 @@ LIBJ2K_API int j2k_encode(j2k_image_t * img, j2k_cp_t * cp, char *outfile, } else { /* CPRL */ 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 (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); */ - 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); + 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); + DistoTotal += disto; 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); } @@ -1347,7 +1352,7 @@ int j2k_decode_jpt_stream(unsigned char *src, int len, j2k_image_t ** img, return 0; } /* 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); position = cio_tell(); if (header.Class_Id != 4) { /* 4 : Tile data-bin message */ |
