-/**
-Create an index file
-@param j2k
-@param cio
-@param image_info
-@param index Index filename
-@return Returns 1 if successful, returns 0 otherwise
-*/
-static int j2k_create_index(opj_j2k_t *j2k, opj_cio_t *cio, opj_image_info_t *image_info, char *index) {
- int tileno, compno, layno, resno, precno, pack_nb, x, y;
- FILE *stream = NULL;
- double total_disto = 0;
-
- image_info->codestream_size = cio_tell(cio) + j2k->pos_correction; /* Correction 14/4/03 suite rmq de Patrick */
-
-/* UniPG>> */
-#ifdef USE_JPWL
- /* if JPWL is enabled and the name coincides with our own set
- then discard the creation of the file: this was just done to
- enable indexing, we do not want an index file
- */
- if (j2k->cp->epc_on && !strcmp(index, JPWL_PRIVATEINDEX_NAME))
- return 1;
-#endif /* USE_JPWL */
-/* <<UniPG */
-
- stream = fopen(index, "w");
- if (!stream) {
- opj_event_msg(j2k->cinfo, EVT_ERROR, "failed to open %s for writing\n", index);
- return 0;
- }
-
- fprintf(stream, "%d %d\n", image_info->image_w, image_info->image_h);
- fprintf(stream, "%d\n", image_info->prog);
- fprintf(stream, "%d %d\n", image_info->tile_x, image_info->tile_y);
- fprintf(stream, "%d %d\n", image_info->tw, image_info->th);
- fprintf(stream, "%d\n", image_info->comp);
- fprintf(stream, "%d\n", image_info->layer);
- fprintf(stream, "%d\n", image_info->decomposition);
-
- for (resno = image_info->decomposition; resno >= 0; resno--) {
- fprintf(stream, "[%d,%d] ",
- (1 << image_info->tile[0].pdx[resno]), (1 << image_info->tile[0].pdx[resno])); /* based on tile 0 */
- }
- fprintf(stream, "\n");
- fprintf(stream, "%d\n", image_info->main_head_end);
- fprintf(stream, "%d\n", image_info->codestream_size);
-
- for (tileno = 0; tileno < image_info->tw * image_info->th; tileno++) {
- fprintf(stream, "%4d %9d %9d %9d %9e %9d %9e\n",
- image_info->tile[tileno].num_tile,
- image_info->tile[tileno].start_pos,
- image_info->tile[tileno].end_header,
- image_info->tile[tileno].end_pos,
- image_info->tile[tileno].distotile, image_info->tile[tileno].nbpix,
- image_info->tile[tileno].distotile / image_info->tile[tileno].nbpix);
- }
-
- for (tileno = 0; tileno < image_info->tw * image_info->th; tileno++) {
- int start_pos, end_pos;
- double disto = 0;
- pack_nb = 0;
-
- /*
- fprintf(stream, "pkno tileno layerno resno compno precno start_pos end_pos deltaSE \n");
- */
-
- if (image_info->prog == LRCP) { /* LRCP */
- /*
- fprintf(stream, "pack_nb tileno layno resno compno precno start_pos end_pos disto");
- */
- for (layno = 0; layno < image_info->layer; layno++) {
- for (resno = 0; resno < image_info->decomposition + 1; resno++) {
- for (compno = 0; compno < image_info->comp; compno++) {
- int prec_max = image_info->tile[tileno].pw[resno] * image_info->tile[tileno].ph[resno];
- for (precno = 0; precno < prec_max; precno++) {
- start_pos = image_info->tile[tileno].packet[pack_nb].start_pos;
- end_pos = image_info->tile[tileno].packet[pack_nb].end_pos;
- disto = image_info->tile[tileno].packet[pack_nb].disto;
- fprintf(stream, "%4d %6d %7d %5d %6d %6d %9d %9d %8e\n",
- pack_nb, tileno, layno, resno, compno, precno, start_pos, end_pos, disto);
- total_disto += disto;
- pack_nb++;
- }
- }
- }
- }
- } /* LRCP */
- else if (image_info->prog == RLCP) { /* RLCP */
- /*
- fprintf(stream, "pack_nb tileno resno layno compno precno start_pos end_pos disto");
- */
- for (resno = 0; resno < image_info->decomposition + 1; resno++) {
- for (layno = 0; layno < image_info->layer; layno++) {
- for (compno = 0; compno < image_info->comp; compno++) {
- int prec_max = image_info->tile[tileno].pw[resno] * image_info->tile[tileno].ph[resno];
- for (precno = 0; precno < prec_max; precno++) {
- start_pos = image_info->tile[tileno].packet[pack_nb].start_pos;
- end_pos = image_info->tile[tileno].packet[pack_nb].end_pos;
- disto = image_info->tile[tileno].packet[pack_nb].disto;
- fprintf(stream, "%4d %6d %5d %7d %6d %6d %9d %9d %8e\n",
- pack_nb, tileno, resno, layno, compno, precno, start_pos, end_pos, disto);
- total_disto += disto;
- pack_nb++;
- }
- }
- }
- }
- } /* RLCP */
- else if (image_info->prog == RPCL) { /* RPCL */
- /*
- fprintf(stream, "\npack_nb tileno resno precno compno layno start_pos end_pos disto\n");
- */
- for (resno = 0; resno < image_info->decomposition + 1; resno++) {
- /* I suppose components have same XRsiz, YRsiz */
- int x0 = image_info->tile_Ox + tileno - (int)floor( (float)tileno/(float)image_info->tw ) * image_info->tw * image_info->tile_x;
- int y0 = image_info->tile_Ox + (int)floor( (float)tileno/(float)image_info->tw ) * image_info->tile_y;
- int x1 = x0 + image_info->tile_x;
- int y1 = y0 + image_info->tile_y;
- for(y = y0; y < y1; y++) {
- for(x = x0; x < x1; x++) {
- for (compno = 0; compno < image_info->comp; compno++) {
- int prec_max = image_info->tile[tileno].pw[resno] * image_info->tile[tileno].ph[resno];
- for (precno = 0; precno < prec_max; precno++) {
- int pcnx = image_info->tile[tileno].pw[resno];
- int pcx = (int) pow( 2, image_info->tile[tileno].pdx[resno] + image_info->decomposition - resno );
- int pcy = (int) pow( 2, image_info->tile[tileno].pdy[resno] + image_info->decomposition - resno );
- int precno_x = precno - (int) floor( (float)precno/(float)pcnx ) * pcnx;
- int precno_y = (int) floor( (float)precno/(float)pcnx );
- if (precno_y*pcy == y ) {
- if (precno_x*pcx == x ) {
- for (layno = 0; layno < image_info->layer; layno++) {
- start_pos = image_info->tile[tileno].packet[pack_nb].start_pos;
- end_pos = image_info->tile[tileno].packet[pack_nb].end_pos;
- disto = image_info->tile[tileno].packet[pack_nb].disto;
- fprintf(stream, "%4d %6d %5d %6d %6d %7d %9d %9d %8e\n",
- pack_nb, tileno, resno, precno, compno, layno, start_pos, end_pos, disto);
- total_disto += disto;
- pack_nb++;
- }
- }
- }
- } /* precno */
- } /* compno */
- } /* x = x0..x1 */
- } /* y = y0..y1 */
- } /* resno */
- } /* RPCL */
- else if (image_info->prog == PCRL) { /* PCRL */
- /* I suppose components have same XRsiz, YRsiz */
- int x0 = image_info->tile_Ox + tileno - (int)floor( (float)tileno/(float)image_info->tw ) * image_info->tw * image_info->tile_x;
- int y0 = image_info->tile_Ox + (int)floor( (float)tileno/(float)image_info->tw ) * image_info->tile_y;
- int x1 = x0 + image_info->tile_x;
- int y1 = y0 + image_info->tile_y;
- /*
- fprintf(stream, "\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 < image_info->comp; compno++) {
- for (resno = 0; resno < image_info->decomposition + 1; resno++) {
- int prec_max = image_info->tile[tileno].pw[resno] * image_info->tile[tileno].ph[resno];
- for (precno = 0; precno < prec_max; precno++) {
- int pcnx = image_info->tile[tileno].pw[resno];
- int pcx = (int) pow( 2, image_info->tile[tileno].pdx[resno] + image_info->decomposition - resno );
- int pcy = (int) pow( 2, image_info->tile[tileno].pdy[resno] + image_info->decomposition - resno );
- int precno_x = precno - (int) floor( (float)precno/(float)pcnx ) * pcnx;
- int precno_y = (int) floor( (float)precno/(float)pcnx );
- if (precno_y*pcy == y ) {
- if (precno_x*pcx == x ) {
- for (layno = 0; layno < image_info->layer; layno++) {
- start_pos = image_info->tile[tileno].packet[pack_nb].start_pos;
- end_pos = image_info->tile[tileno].packet[pack_nb].end_pos;
- disto = image_info->tile[tileno].packet[pack_nb].disto;
- fprintf(stream, "%4d %6d %6d %6d %5d %7d %9d %9d %8e\n",
- pack_nb, tileno, precno, compno, resno, layno, start_pos, end_pos, disto);
- total_disto += disto;
- pack_nb++;
- }
- }
- }
- } /* precno */
- } /* resno */
- } /* compno */
- } /* x = x0..x1 */
- } /* y = y0..y1 */
- } /* PCRL */
- else { /* CPRL */
- /*
- fprintf(stream, "\npack_nb tileno compno precno resno layno start_pos end_pos disto\n");
- */
- for (compno = 0; compno < image_info->comp; compno++) {
- /* I suppose components have same XRsiz, YRsiz */
- int x0 = image_info->tile_Ox + tileno - (int)floor( (float)tileno/(float)image_info->tw ) * image_info->tw * image_info->tile_x;
- int y0 = image_info->tile_Ox + (int)floor( (float)tileno/(float)image_info->tw ) * image_info->tile_y;
- int x1 = x0 + image_info->tile_x;
- int y1 = y0 + image_info->tile_y;
- for(y = y0; y < y1; y++) {
- for(x = x0; x < x1; x++) {
- for (resno = 0; resno < image_info->decomposition + 1; resno++) {
- int prec_max = image_info->tile[tileno].pw[resno] * image_info->tile[tileno].ph[resno];
- for (precno = 0; precno < prec_max; precno++) {
- int pcnx = image_info->tile[tileno].pw[resno];
- int pcx = (int) pow( 2, image_info->tile[tileno].pdx[resno] + image_info->decomposition - resno );
- int pcy = (int) pow( 2, image_info->tile[tileno].pdy[resno] + image_info->decomposition - resno );
- int precno_x = precno - (int) floor( (float)precno/(float)pcnx ) * pcnx;
- int precno_y = (int) floor( (float)precno/(float)pcnx );
- if (precno_y*pcy == y ) {
- if (precno_x*pcx == x ) {
- for (layno = 0; layno < image_info->layer; layno++) {
- start_pos = image_info->tile[tileno].packet[pack_nb].start_pos;
- end_pos = image_info->tile[tileno].packet[pack_nb].end_pos;
- disto = image_info->tile[tileno].packet[pack_nb].disto;
- fprintf(stream, "%4d %6d %6d %6d %5d %7d %9d %9d %8e\n",
- pack_nb, tileno, compno, precno, resno, layno, start_pos, end_pos, disto);
- total_disto += disto;
- pack_nb++;
- }
- }
- }
- } /* precno */
- } /* resno */
- } /* x = x0..x1 */
- } /* y = y0..y1 */
- } /* comno */
- } /* CPRL */
- } /* tileno */
-
- fprintf(stream, "%8e\n", image_info->D_max); /* SE max */
- fprintf(stream, "%.8e\n", total_disto); /* SE totale */
- fclose(stream);
-
- return 1;
-}
-
-bool j2k_encode(opj_j2k_t *j2k, opj_cio_t *cio, opj_image_t *image, char *index) {