+\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