return 0;\r
}\r
\r
-/* ------------------------------------------------------------------------------------ */\r
-\r
-/**\r
-Write a structured index to a file\r
-@param cstr_info Codestream information\r
-@param index Index filename\r
-@return Returns 0 if successful, returns 1 otherwise\r
-*/\r
-int write_index_file_v2(FILE* stream, opj_codestream_info_t *cstr_info) {\r
- int tileno, compno, layno, resno, precno, pack_nb, x, y;\r
- double total_disto = 0;\r
-/* UniPG>> */\r
- int tilepartno;\r
- char disto_on, numpix_on;\r
-\r
-#ifdef USE_JPWL\r
- if (!strcmp(index, JPWL_PRIVATEINDEX_NAME))\r
- return EXIT_SUCCESS;\r
-#endif /* USE_JPWL */\r
-/* <<UniPG */\r
-\r
- if (!cstr_info)\r
- return EXIT_FAILURE;\r
-\r
- if (!stream)\r
- return EXIT_FAILURE;\r
-\r
- if (cstr_info->tile[0].distotile)\r
- disto_on = 1;\r
- else\r
- disto_on = 0;\r
-\r
- if (cstr_info->tile[0].numpix)\r
- numpix_on = 1;\r
- else\r
- numpix_on = 0;\r
-\r
- fprintf(stream, "%d %d\n", cstr_info->image_w, cstr_info->image_h);\r
- fprintf(stream, "%d\n", cstr_info->prog);\r
- fprintf(stream, "%d %d\n", cstr_info->tile_x, cstr_info->tile_y);\r
- fprintf(stream, "%d %d\n", cstr_info->tw, cstr_info->th);\r
- fprintf(stream, "%d\n", cstr_info->numcomps);\r
- fprintf(stream, "%d\n", cstr_info->numlayers);\r
- fprintf(stream, "%d\n", cstr_info->numdecompos[0]); /* based on component 0 */\r
-\r
- for (resno = cstr_info->numdecompos[0]; resno >= 0; resno--) {\r
- fprintf(stream, "[%d,%d] ",\r
- (1 << cstr_info->tile[0].pdx[resno]), (1 << cstr_info->tile[0].pdx[resno])); /* based on tile 0 and component 0 */\r
- }\r
-\r
- fprintf(stream, "\n");\r
-/* UniPG>> */\r
- fprintf(stream, "%d\n", cstr_info->main_head_start);\r
-/* <<UniPG */\r
- fprintf(stream, "%d\n", cstr_info->main_head_end);\r
- fprintf(stream, "%d\n", cstr_info->codestream_size);\r
-\r
- fprintf(stream, "\nINFO ON TILES\n");\r
- fprintf(stream, "tileno start_pos end_hd end_tile nbparts");\r
- if (disto_on)\r
- fprintf(stream," disto");\r
- if (numpix_on)\r
- fprintf(stream," nbpix");\r
- if (disto_on && numpix_on)\r
- fprintf(stream," disto/nbpix");\r
- fprintf(stream, "\n");\r
-\r
- for (tileno = 0; tileno < cstr_info->tw * cstr_info->th; tileno++) {\r
- fprintf(stream, "%4d %9d %9d %9d %9d",\r
- cstr_info->tile[tileno].tileno,\r
- cstr_info->tile[tileno].start_pos,\r
- cstr_info->tile[tileno].end_header,\r
- cstr_info->tile[tileno].end_pos,\r
- cstr_info->tile[tileno].num_tps);\r
- if (disto_on)\r
- fprintf(stream," %9e", cstr_info->tile[tileno].distotile);\r
- if (numpix_on)\r
- fprintf(stream," %9d", cstr_info->tile[tileno].numpix);\r
- if (disto_on && numpix_on)\r
- fprintf(stream," %9e", cstr_info->tile[tileno].distotile / cstr_info->tile[tileno].numpix);\r
- fprintf(stream, "\n");\r
- }\r
-\r
- for (tileno = 0; tileno < cstr_info->tw * cstr_info->th; tileno++) {\r
- int start_pos, end_ph_pos, end_pos;\r
- double disto = 0;\r
- int max_numdecompos = 0;\r
- pack_nb = 0;\r
-\r
- for (compno = 0; compno < cstr_info->numcomps; compno++) {\r
- if (max_numdecompos < cstr_info->numdecompos[compno])\r
- max_numdecompos = cstr_info->numdecompos[compno];\r
- }\r
-\r
- fprintf(stream, "\nTILE %d DETAILS\n", tileno);\r
- fprintf(stream, "part_nb tileno start_pack num_packs start_pos end_tph_pos end_pos\n");\r
- for (tilepartno = 0; tilepartno < cstr_info->tile[tileno].num_tps; tilepartno++)\r
- fprintf(stream, "%4d %9d %9d %9d %9d %11d %9d\n",\r
- tilepartno, tileno,\r
- cstr_info->tile[tileno].tp[tilepartno].tp_start_pack,\r
- cstr_info->tile[tileno].tp[tilepartno].tp_numpacks,\r
- cstr_info->tile[tileno].tp[tilepartno].tp_start_pos,\r
- cstr_info->tile[tileno].tp[tilepartno].tp_end_header,\r
- cstr_info->tile[tileno].tp[tilepartno].tp_end_pos\r
- );\r
-\r
- if (cstr_info->prog == LRCP) { /* LRCP */\r
- fprintf(stream, "LRCP\npack_nb tileno layno resno compno precno start_pos end_ph_pos end_pos");\r
- if (disto_on)\r
- fprintf(stream, " disto");\r
- fprintf(stream,"\n");\r
-\r
- for (layno = 0; layno < cstr_info->numlayers; layno++) {\r
- for (resno = 0; resno < max_numdecompos + 1; resno++) {\r
- for (compno = 0; compno < cstr_info->numcomps; compno++) {\r
- int prec_max;\r
- if (resno > cstr_info->numdecompos[compno])\r
- break;\r
- prec_max = cstr_info->tile[tileno].pw[resno] * cstr_info->tile[tileno].ph[resno];\r
- for (precno = 0; precno < prec_max; precno++) {\r
- start_pos = cstr_info->tile[tileno].packet[pack_nb].start_pos;\r
- end_ph_pos = cstr_info->tile[tileno].packet[pack_nb].end_ph_pos;\r
- end_pos = cstr_info->tile[tileno].packet[pack_nb].end_pos;\r
- disto = cstr_info->tile[tileno].packet[pack_nb].disto;\r
- fprintf(stream, "%4d %6d %7d %5d %6d %6d %6d %6d %7d",\r
- pack_nb, tileno, layno, resno, compno, precno, start_pos, end_ph_pos, end_pos);\r
- if (disto_on)\r
- fprintf(stream, " %8e", disto);\r
- fprintf(stream, "\n");\r
- total_disto += disto;\r
- pack_nb++;\r
- }\r
- }\r
- }\r
- }\r
- } /* LRCP */\r
-\r
- else if (cstr_info->prog == RLCP) { /* RLCP */\r
- fprintf(stream, "RLCP\npack_nb tileno resno layno compno precno start_pos end_ph_pos end_pos\n");\r
- if (disto_on)\r
- fprintf(stream, " disto");\r
- fprintf(stream,"\n");\r
-\r
- for (resno = 0; resno < max_numdecompos + 1; resno++) {\r
- for (layno = 0; layno < cstr_info->numlayers; layno++) {\r
- for (compno = 0; compno < cstr_info->numcomps; compno++) {\r
- int prec_max;\r
- if (resno > cstr_info->numdecompos[compno])\r
- break;\r
- prec_max = cstr_info->tile[tileno].pw[resno] * cstr_info->tile[tileno].ph[resno];\r
- for (precno = 0; precno < prec_max; precno++) {\r
- start_pos = cstr_info->tile[tileno].packet[pack_nb].start_pos;\r
- end_ph_pos = cstr_info->tile[tileno].packet[pack_nb].end_ph_pos;\r
- end_pos = cstr_info->tile[tileno].packet[pack_nb].end_pos;\r
- disto = cstr_info->tile[tileno].packet[pack_nb].disto;\r
- fprintf(stream, "%4d %6d %5d %7d %6d %6d %9d %9d %7d",\r
- pack_nb, tileno, resno, layno, compno, precno, start_pos, end_ph_pos, end_pos);\r
- if (disto_on)\r
- fprintf(stream, " %8e", disto);\r
- fprintf(stream, "\n");\r
- total_disto += disto;\r
- pack_nb++;\r
- }\r
- }\r
- }\r
- }\r
- } /* RLCP */\r
-\r
- else if (cstr_info->prog == RPCL) { /* RPCL */\r
-\r
- fprintf(stream, "RPCL\npack_nb tileno resno precno compno layno start_pos end_ph_pos end_pos");\r
- if (disto_on)\r
- fprintf(stream, " disto");\r
- fprintf(stream,"\n");\r
-\r
- for (resno = 0; resno < max_numdecompos + 1; resno++) {\r
- int numprec = cstr_info->tile[tileno].pw[resno] * cstr_info->tile[tileno].ph[resno];\r
- for (precno = 0; precno < numprec; precno++) {\r
- /* I suppose components have same XRsiz, YRsiz */\r
- int x0 = cstr_info->tile_Ox + tileno - (int)floor((float)tileno/(float)cstr_info->tw ) * cstr_info->tw * cstr_info->tile_x;\r
- int y0 = cstr_info->tile_Ox + (int)floor( (float)tileno/(float)cstr_info->tw ) * cstr_info->tile_y;\r
- int x1 = x0 + cstr_info->tile_x;\r
- int y1 = y0 + cstr_info->tile_y;\r
- for (compno = 0; compno < cstr_info->numcomps; compno++) {\r
- int pcnx = cstr_info->tile[tileno].pw[resno];\r
- int pcx = (int) pow( 2, cstr_info->tile[tileno].pdx[resno] + cstr_info->numdecompos[compno] - resno );\r
- int pcy = (int) pow( 2, cstr_info->tile[tileno].pdy[resno] + cstr_info->numdecompos[compno] - resno );\r
- int precno_x = precno - (int) floor( (float)precno/(float)pcnx ) * pcnx;\r
- int precno_y = (int) floor( (float)precno/(float)pcnx );\r
- if (resno > cstr_info->numdecompos[compno])\r
- break;\r
- for(y = y0; y < y1; y++) {\r
- if (precno_y*pcy == y ) {\r
- for (x = x0; x < x1; x++) {\r
- if (precno_x*pcx == x ) {\r
- for (layno = 0; layno < cstr_info->numlayers; layno++) {\r
- start_pos = cstr_info->tile[tileno].packet[pack_nb].start_pos;\r
- end_ph_pos = cstr_info->tile[tileno].packet[pack_nb].end_ph_pos;\r
- end_pos = cstr_info->tile[tileno].packet[pack_nb].end_pos;\r
- disto = cstr_info->tile[tileno].packet[pack_nb].disto;\r
- fprintf(stream, "%4d %6d %5d %6d %6d %7d %9d %9d %7d",\r
- pack_nb, tileno, resno, precno, compno, layno, start_pos, end_ph_pos, end_pos);\r
- if (disto_on)\r
- fprintf(stream, " %8e", disto);\r
- fprintf(stream, "\n");\r
- total_disto += disto;\r
- pack_nb++;\r
- }\r
- }\r
- }/* x = x0..x1 */\r
- }\r
- } /* y = y0..y1 */\r
- } /* precno */\r
- } /* compno */\r
- } /* resno */\r
- } /* RPCL */\r
-\r
- else if (cstr_info->prog == PCRL) { /* PCRL */\r
- /* I suppose components have same XRsiz, YRsiz */\r
- int x0 = cstr_info->tile_Ox + tileno - (int)floor( (float)tileno/(float)cstr_info->tw ) * cstr_info->tw * cstr_info->tile_x;\r
- int y0 = cstr_info->tile_Ox + (int)floor( (float)tileno/(float)cstr_info->tw ) * cstr_info->tile_y;\r
- int x1 = x0 + cstr_info->tile_x;\r
- int y1 = y0 + cstr_info->tile_y;\r
-\r
- // Count the maximum number of precincts\r
- int max_numprec = 0;\r
- for (resno = 0; resno < max_numdecompos + 1; resno++) {\r
- int numprec = cstr_info->tile[tileno].pw[resno] * cstr_info->tile[tileno].ph[resno];\r
- if (numprec > max_numprec)\r
- max_numprec = numprec;\r
- }\r
-\r
- fprintf(stream, "PCRL\npack_nb tileno precno compno resno layno start_pos end_ph_pos end_pos");\r
- if (disto_on)\r
- fprintf(stream, " disto");\r
- fprintf(stream,"\n");\r
\r
- for (precno = 0; precno < max_numprec; precno++) {\r
- for (compno = 0; compno < cstr_info->numcomps; compno++) {\r
- for (resno = 0; resno < cstr_info->numdecompos[compno] + 1; resno++) {\r
- int numprec = cstr_info->tile[tileno].pw[resno] * cstr_info->tile[tileno].ph[resno];\r
- int pcnx = cstr_info->tile[tileno].pw[resno];\r
- int pcx = (int) pow( 2, cstr_info->tile[tileno].pdx[resno] + cstr_info->numdecompos[compno] - resno );\r
- int pcy = (int) pow( 2, cstr_info->tile[tileno].pdy[resno] + cstr_info->numdecompos[compno] - resno );\r
- int precno_x = precno - (int) floor( (float)precno/(float)pcnx ) * pcnx;\r
- int precno_y = (int) floor( (float)precno/(float)pcnx );\r
- if (precno >= numprec)\r
- continue;\r
- for(y = y0; y < y1; y++) {\r
- if (precno_y*pcy == y ) {\r
- for (x = x0; x < x1; x++) {\r
- if (precno_x*pcx == x ) {\r
- for (layno = 0; layno < cstr_info->numlayers; layno++) {\r
- start_pos = cstr_info->tile[tileno].packet[pack_nb].start_pos;\r
- end_ph_pos = cstr_info->tile[tileno].packet[pack_nb].end_ph_pos;\r
- end_pos = cstr_info->tile[tileno].packet[pack_nb].end_pos;\r
- disto = cstr_info->tile[tileno].packet[pack_nb].disto;\r
- fprintf(stream, "%4d %6d %6d %6d %5d %7d %9d %9d %7d",\r
- pack_nb, tileno, precno, compno, resno, layno, start_pos, end_ph_pos, end_pos);\r
- if (disto_on)\r
- fprintf(stream, " %8e", disto);\r
- fprintf(stream, "\n");\r
- total_disto += disto;\r
- pack_nb++;\r
- }\r
- }\r
- }/* x = x0..x1 */\r
- }\r
- } /* y = y0..y1 */\r
- } /* resno */\r
- } /* compno */\r
- } /* precno */\r
- } /* PCRL */\r
-\r
- else { /* CPRL */\r
- // Count the maximum number of precincts\r
- int max_numprec = 0;\r
- for (resno = 0; resno < max_numdecompos + 1; resno++) {\r
- int numprec = cstr_info->tile[tileno].pw[resno] * cstr_info->tile[tileno].ph[resno];\r
- if (numprec > max_numprec)\r
- max_numprec = numprec;\r
- }\r
-\r
- fprintf(stream, "CPRL\npack_nb tileno compno precno resno layno start_pos end_ph_pos end_pos");\r
- if (disto_on)\r
- fprintf(stream, " disto");\r
- fprintf(stream,"\n");\r
-\r
- for (compno = 0; compno < cstr_info->numcomps; compno++) {\r
- /* I suppose components have same XRsiz, YRsiz */\r
- int x0 = cstr_info->tile_Ox + tileno - (int)floor( (float)tileno/(float)cstr_info->tw ) * cstr_info->tw * cstr_info->tile_x;\r
- int y0 = cstr_info->tile_Ox + (int)floor( (float)tileno/(float)cstr_info->tw ) * cstr_info->tile_y;\r
- int x1 = x0 + cstr_info->tile_x;\r
- int y1 = y0 + cstr_info->tile_y;\r
-\r
- for (precno = 0; precno < max_numprec; precno++) {\r
- for (resno = 0; resno < cstr_info->numdecompos[compno] + 1; resno++) {\r
- int numprec = cstr_info->tile[tileno].pw[resno] * cstr_info->tile[tileno].ph[resno];\r
- int pcnx = cstr_info->tile[tileno].pw[resno];\r
- int pcx = (int) pow( 2, cstr_info->tile[tileno].pdx[resno] + cstr_info->numdecompos[compno] - resno );\r
- int pcy = (int) pow( 2, cstr_info->tile[tileno].pdy[resno] + cstr_info->numdecompos[compno] - resno );\r
- int precno_x = precno - (int) floor( (float)precno/(float)pcnx ) * pcnx;\r
- int precno_y = (int) floor( (float)precno/(float)pcnx );\r
- if (precno >= numprec)\r
- continue;\r
-\r
- for(y = y0; y < y1; y++) {\r
- if (precno_y*pcy == y ) {\r
- for (x = x0; x < x1; x++) {\r
- if (precno_x*pcx == x ) {\r
- for (layno = 0; layno < cstr_info->numlayers; layno++) {\r
- start_pos = cstr_info->tile[tileno].packet[pack_nb].start_pos;\r
- end_ph_pos = cstr_info->tile[tileno].packet[pack_nb].end_ph_pos;\r
- end_pos = cstr_info->tile[tileno].packet[pack_nb].end_pos;\r
- disto = cstr_info->tile[tileno].packet[pack_nb].disto;\r
- fprintf(stream, "%4d %6d %6d %6d %5d %7d %9d %9d %7d",\r
- pack_nb, tileno, compno, precno, resno, layno, start_pos, end_ph_pos, end_pos);\r
- if (disto_on)\r
- fprintf(stream, " %8e", disto);\r
- fprintf(stream, "\n");\r
- total_disto += disto;\r
- pack_nb++;\r
- }\r
- }\r
- }/* x = x0..x1 */\r
- }\r
- } /* y = y0..y1 */\r
- } /* resno */\r
- } /* precno */\r
- } /* compno */\r
- } /* CPRL */\r
- } /* tileno */\r
-\r
- if (disto_on) {\r
- fprintf(stream, "%8e\n", cstr_info->D_max); /* SE max */\r
- fprintf(stream, "%.8e\n", total_disto); /* SE totale */\r
- }\r
-/* UniPG>> */\r
- /* print the markers' list */\r
- if (cstr_info->marknum) {\r
- fprintf(stream, "\nMARKER LIST\n");\r
- fprintf(stream, "%d\n", cstr_info->marknum);\r
- fprintf(stream, "type\tstart_pos length\n");\r
- for (x = 0; x < cstr_info->marknum; x++)\r
- fprintf(stream, "%X\t%9d %9d\n", cstr_info->marker[x].type, cstr_info->marker[x].pos, cstr_info->marker[x].len);\r
- }\r
-/* <<UniPG */\r
-\r
- return EXIT_SUCCESS;\r
-}\r
-\r
-/* ------------------------------------------------------------------------------------ */\r
-\r
-/**\r
-Dump the file info structure into a file\r
-@param stream output stream\r
-@param file_info informations read into the JPG2000 file\r
-@return Returns 0 if successful, returns 1 otherwise\r
-*/\r
-int dump_file_info(FILE* stream, opj_file_info_t *file_info)\r
-{\r
- /* IMAGE HEADER */\r
- if ( file_info->file_info_flag & OPJ_IMG_INFO ) {\r
- opj_image_header_t img_header = file_info->img_info;\r
- int compno;\r
-\r
- fprintf(stream, "Image info {\n");\r
- fprintf(stream, "\t x0=%d, y0=%d\n",img_header.x0, img_header.y0);\r
- fprintf(stream, "\t x1=%d, y1=%d\n",img_header.x1, img_header.y1);\r
- fprintf(stream, "\t numcomps=%d\n", img_header.numcomps);\r
- for (compno = 0; compno < img_header.numcomps; compno++) {\r
- opj_image_comp_header_t comp = img_header.comps[compno];\r
-\r
- fprintf(stream, "\t component %d {\n", compno);\r
- fprintf(stream, "\t\t dx=%d, dy=%d\n", comp.dx, comp.dy);\r
- fprintf(stream, "\t\t prec=%d\n", comp.prec);\r
- fprintf(stream, "\t\t sgnd=%d\n", comp.sgnd);\r
- fprintf(stream, "\t}\n");\r
- }\r
- fprintf(stream, "}\n");\r
- }\r
-\r
- /* CODESTREAM INFO */\r
- if ( file_info->file_info_flag & OPJ_J2K_INFO ) {\r
- opj_codestream_info_v2_t cstr_info = file_info->codestream_info;\r
- int tileno, compno, layno, bandno, resno, numbands;\r
-\r
- fprintf(stream, "Codestream info {\n");\r
- fprintf(stream, "\t tx0=%d, ty0=%d\n", cstr_info.tx0, cstr_info.ty0);\r
- fprintf(stream, "\t tdx=%d, tdy=%d\n", cstr_info.tdx, cstr_info.tdy);\r
- fprintf(stream, "\t tw=%d, th=%d\n", cstr_info.tw, cstr_info.th);\r
-\r
- for (tileno = 0; tileno < cstr_info.tw * cstr_info.th; tileno++) {\r
- opj_tile_info_v2_t tile_info = cstr_info.tile[tileno];\r
-\r
- fprintf(stream, "\t tile %d {\n", tileno);\r
- fprintf(stream, "\t\t csty=%x\n", tile_info.csty);\r
- fprintf(stream, "\t\t prg=%d\n", tile_info.prg);\r
- fprintf(stream, "\t\t numlayers=%d\n", tile_info.numlayers);\r
- fprintf(stream, "\t\t mct=%d\n", tile_info.mct);\r
- fprintf(stream, "\t\t rates=");\r
-\r
- for (layno = 0; layno < tile_info.numlayers; layno++) {\r
- fprintf(stream, "%.1f ", tile_info.rates[layno]);\r
- }\r
- fprintf(stream, "\n");\r
-\r
- for (compno = 0; compno < cstr_info.numcomps; compno++) {\r
- opj_tccp_info_t tccp_info = tile_info.tccp_info[compno];\r
-\r
- fprintf(stream, "\t\t comp %d {\n", compno);\r
- fprintf(stream, "\t\t\t csty=%x\n", tccp_info.csty);\r
- fprintf(stream, "\t\t\t numresolutions=%d\n", tccp_info.numresolutions);\r
- fprintf(stream, "\t\t\t cblkw=%d\n", tccp_info.cblkw);\r
- fprintf(stream, "\t\t\t cblkh=%d\n", tccp_info.cblkh);\r
- fprintf(stream, "\t\t\t cblksty=%x\n", tccp_info.cblksty);\r
- fprintf(stream, "\t\t\t qmfbid=%d\n", tccp_info.qmfbid);\r
- fprintf(stream, "\t\t\t qntsty=%d\n", tccp_info.qntsty);\r
- fprintf(stream, "\t\t\t numgbits=%d\n", tccp_info.numgbits);\r
- fprintf(stream, "\t\t\t roishift=%d\n", tccp_info.roishift);\r
-\r
-#ifdef TODO_MSD\r
- fprintf(stream, "\t\t\t stepsizes=");\r
- numbands = tccp_info->qntsty == J2K_CCP_QNTSTY_SIQNT ? 1 : tccp_info->numresolutions * 3 - 2;\r
- for (bandno = 0; bandno < numbands; bandno++) {\r
- fprintf(stream, "(%d,%d) ", tccp_info->stepsizes[bandno].mant,\r
- tccp_info->stepsizes[bandno].expn);\r
- }\r
- fprintf(stream, "\n");\r
-\r
- if (tccp_info->csty & J2K_CCP_CSTY_PRT) {\r
- fprintf(stream, " prcw=");\r
- for (resno = 0; resno < tccp_info->numresolutions; resno++) {\r
- fprintf(stream, "%d ", tccp_info->prcw[resno]);\r
- }\r
- fprintf(stream, "\n");\r
-\r
- fprintf(stream, " prch=");\r
- for (resno = 0; resno < tccp_info->numresolutions; resno++) {\r
- fprintf(stream, "%d ", tccp_info->prch[resno]);\r
- }\r
- fprintf(stream, "\n");\r
- }\r
-#endif\r
- fprintf(stream, "\t\t\t }\n");\r
- } /*end of component*/\r
- fprintf(stream, "\t\t }\n");\r
- } /*end of tile */\r
- fprintf(stream, "\t }\n");\r
- }\r
-\r
- if ( file_info->file_info_flag & OPJ_JP2_INFO ) {\r
- // not yet coded\r
- }\r
- return EXIT_SUCCESS;\r
-}\r