Compare commits

...

311 Commits

Author SHA1 Message Date
Francois-Olivier Devaux
42ad5bb05a OpenJPEG version 1.2 2007-06-04 14:01:59 +00:00
Francois-Olivier Devaux
aec1d7592c Tipo corrected... 2007-06-04 13:32:25 +00:00
Francois-Olivier Devaux
21f2cab710 Release of version 1.2.0 2007-06-04 13:27:25 +00:00
Francois-Olivier Devaux
ea9335ff48 Bugs corrected in decoding of command line (getopt.c), in the handling of 16 bit files (t1.c and tcd.c) and the calculation of elapsed time for multiple tiles parts (tcd.c and tdc.h). 2007-06-04 13:23:26 +00:00
Giuseppe Baruffa
adc1aacb60 OPJViewer opens now BMP, PNG, GIF, PNM, TIFF (with wxWidgets internals); added an encoder settings tab, for future integration with "save file as..." in JPEG 2000 format 2007-06-03 17:34:46 +00:00
Francois-Olivier Devaux
814bab6900 Fixed the handling of 16bit TIFF files for cinema compression. Modified "convert.c".
Fixed the parameters used for cinema compression (9-7 transform used instead of 5-3). Modified "image_to_j2k.c"
2007-05-31 09:13:44 +00:00
Francois-Olivier Devaux
1f55aaf4a6 Bug fixed by Sylvain Munaut. Change in the reading of the POC marker. Since COD/COC can be anywhere in the header, the decoder cannot always know while decoding the POC marker the value of numlayers and numresolution. 2007-05-23 16:04:50 +00:00
Francois-Olivier Devaux
8be8111008 Patch suggested by Callum Lerwick <seg@haxxed.com>: "This makes the t1 data arrays dynamic, which greatly reduces cache thrashing. Also, some minor cleanup to prevent unnecessary casts" 2007-05-22 13:14:13 +00:00
Francois-Olivier Devaux
1bec8fe082 Patch suggested by Callum Lerwick <seg@haxxed.com>: "Some formatting cleanups, so that the long function definitions and calls fit on screen. Use of prefix increment which is theoretically faster, in
practice any sane compiler can optimize a postfix increment but its best not to count on such things. Consolidation of some redundant calculations in the inner loops, which becomes very useful in the future autovectorize patch."
2007-05-21 13:08:10 +00:00
Francois-Olivier Devaux
7d06d7fb5d Patch suggested by Callum Lerwick <seg@haxxed.com>: "This changes the flag code in t1 to use a flag_t type, which can then be changed to reduce RAM usage. It is now typedef to a short." 2007-05-21 12:50:03 +00:00
Francois-Olivier Devaux
e0ee9becb4 Patch suggested by Callum Lerwick <seg@haxxed.com>: "This patch makes the t1 LUTs static. I actually intend this as a prelude to possibly eliminating some or all of the LUTs entirely." 2007-05-21 09:44:10 +00:00
Francois-Olivier Devaux
0afa3c70bc Changlog updated 2007-05-15 14:02:03 +00:00
Francois-Olivier Devaux
38137b033a JP3D library Binaries removed from SVN. 2007-05-10 14:34:05 +00:00
Francois-Olivier Devaux
1200dd871a MJ2 codec updated from LibOpenJPEG version 0.97 to LibOpenJPEG version 1. Hence, the MJ2 codec will now take advantage of all the improvements and optimizations done on the LibOpenJPEG library. 2007-05-10 14:21:09 +00:00
Francois-Olivier Devaux
f3170bf64e Possibility to choose to apply MCT (multiple component transform) enabled, and new decoding_limit: DECODE_ALL_BUT_PACKETS 2007-05-10 14:13:30 +00:00
Giuseppe Baruffa
7c9dc11e33 workarounds for rendering differently sized components 2007-04-27 17:20:26 +00:00
Mathieu Malaterre
848214e789 ENH: add basic instructions for cmake 2007-04-26 09:09:29 +00:00
Mathieu Malaterre
e5240301c7 ENH: add basic instructions for cmake 2007-04-26 09:08:10 +00:00
Francois-Olivier Devaux
2bd0f7b8c4 Modification of the openjpeg.h file to avoid and ABI break with v1.1, removed the dangerous #IFDEF JPWL and added tcp_mct in cparameters. 2007-04-25 17:04:21 +00:00
Giuseppe Baruffa
fbc9a5edcb enable/disable decoding in OPJViewer 2007-04-22 22:41:01 +00:00
Parvatha Elangovan
110b54c7c6 Fixed Error in tiftoimage(). Modification in convert.c. 2007-04-12 10:01:48 +00:00
Parvatha Elangovan
dbd132dca8 Accepting "j2c" as format for Encoding and Decoding. Modification in image_to_j2k.c.
Modified imagetotif() to read images with signed data. Modification in convert.c.
2007-04-10 16:23:48 +00:00
Francois-Olivier Devaux
0930d9886b fix.h, dwt.c and t1.c optimized. Thanks a lot to Dzonatas <dzonatas at dzonux.net> and Callum Lerwick <seg at haxxed.com> for these great patches ! 2007-04-05 14:24:19 +00:00
Parvatha Elangovan
dd18811600 Digital cinema compliance for 4K chosen by "-cinema4K" option. Modification in image_to_j2k.c.
Bit rate limitation for each color component. Modification in image_to_j2k.c, t2.c.
Modified and tested Progression order change "-POC" option. Modification in image_to_j2k.c, j2k.c, pi.c.
Function j2k_check_poc_val() to check for possible loss of packets in case of wrong POC declaration. Modification in j2k.c.
Structure T2_MODE. This tells if the t2_encode_packets() is called during Threshold calculation or in Final pass. Modification in j2k.h, tcd.c
2007-04-04 13:40:32 +00:00
Francois-Olivier Devaux
24146a96cf Included the license in a distinct file, which allows other projects using OpenJPEG to
include it into the built package in a legally unambiguous manner.
2007-04-04 06:19:26 +00:00
Giuseppe Baruffa
7dd3a5bf22 OPJViewer should now work under Linux, at least with not big j2k files. Tested under Suse 10.1 64 bit. 2007-03-30 09:27:08 +00:00
Parvatha Elangovan
9ba672366e Enable accepting file names with `-´ symbol .Modification getopt.c
Rsiz profile name generation to be STD_RSIZ for profiles which are not DCI compliant.Modification in image_to_j2k.c
Renamed convert_progression_order to j2k_convert_progression_order. Modification j2k.c
Calculation of number of tile part in each tile in j2k_calculate_tp. Modification j2k.c
j2k_setup_encoder to set bit rate limitation for digital cinema compliance with quality option. Modification in j2k.c
Equation to check multiple tile precincts. Modification pi.c
array size generation of pi->include in pi_initialise_encode().Modification in pi.c
Modification in pi_create_encode for tile part generation.Modification in pi.c
In tcd_rateallocate a variable stable_threshold which holds the valid threshold value. This is used to avoid error in case of a wrong threshold value in the last iteration. Modification in tcd.c.
2007-03-29 14:15:14 +00:00
Giuseppe Baruffa
a1fe5809a4 Some coding style adaptations for compiling the OPJViewer GUI under Linux. It compiles, but does not yet display images. 2007-03-29 08:27:03 +00:00
Francois-Olivier Devaux
5a3c1ffe7d Fixed an historical bug in t1.c that leaded to the inclusion of useless 0xFF in the codestream. Thanks to Sylvain, Pascal and Parvatha ! 2007-03-28 08:44:21 +00:00
Giuseppe Baruffa
144e1ff4e6 Following to Hervé's suggestions, all the exit() calls, added by JPWL strict checking in t2.c and j2k.c, have been substituted with (object free'ing + opj_evt_message(EVT_ERROR) + return); added linking to TIFF library in the JPWL VC6 workspaces 2007-03-27 17:18:56 +00:00
Giuseppe Baruffa
3f36196dfd Improved parsing in OPJViewer, as well some aesthetic modifications; support for image rendering with bit depths lower than 8 bits; can display an arbitrary frame of an MJ2 file (only in B/W, though); can reload a file; better image resizing capabilities 2007-03-27 12:48:17 +00:00
Antonin Descampe
f7c9b01800 Fixed Makefile.osx and changed Readme.osx accordingly 2007-03-23 14:08:15 +00:00
Parvatha Elangovan
6045158ce6 Fixed j2k_prog_order_list[]. Modifications in j2k.c.
Fixed t1_decode_cblks. Modifications in t1.c.
2007-03-21 13:01:15 +00:00
Parvatha Elangovan
694a173adb Added feature for generation of tile parts. Modifications in image_to_j2k.c, openjpeg.c, j2k.c, pi.c
Added function j2k_write_tlm(),to generate TLM marker for a Digital cinema compliant codestream. Modifications in j2k.c.
2007-03-20 17:15:18 +00:00
Francois-Olivier Devaux
8bc6da2ffa Fixed linux makefile, with help from David Fries and Guido 2007-03-14 07:35:54 +00:00
Parvatha Elangovan
78003a016a Added option for Digital cinema profile compliant codestream. This can be chosen by "-cinema2K" or "-cinema4K" for a 2K and 4K compliance respectively. The feature for tileparts has not been implemented in this version. Modification in image_to_j2k.c
Added the Digital Cinema profiles (CINEMA2K and CINEMA4K) to the list of profiles recognized in the codestream SIZ marker segment. Modification in openjpeg.h,j2k.c
Added feature for constant quality within bitrate defined in Digital cinema standards. Modification in tcd.c
Modified the method of generation of buffer length. Modification in cio.c
2007-03-07 16:04:33 +00:00
Francois-Olivier Devaux
9e5d0b1a40 Modified codec projects (*.dsp) and makefile to include the tiff library (modified codec/image_to_j2k.dsp codec/j2k_to_image.dsp and codec/makefile) 2007-03-01 16:12:17 +00:00
Mathieu Malaterre
219dd65bef COMP: Fix compilation of executable linking to TIFF lib. 2007-03-01 14:39:31 +00:00
Giuseppe Baruffa
ba423fe3d0 Zoom capability and decoder settings dialog in OPJViewer 2007-03-01 00:01:37 +00:00
Giuseppe Baruffa
e2a54d9ac6 Modified JPWL libopenjpeg library by directly embedding the JPWL functions 2007-02-28 23:43:37 +00:00
Antonin Descampe
44ab0ccf01 add an "ifdef WIN32" to "include malloc.h" to be compliant with non-WIN32 platforms. 2007-02-28 15:55:03 +00:00
Parvatha Elangovan
192e46c32f Enabled compression of TIF image format to j2k by tifftoimage() and decompression of codestream to TIF image format using imagetotif(). Modifications in image_to_j2k.c, j2k_to_image.c, convert.c, convert.h 2007-02-28 15:31:56 +00:00
Antonin Descampe
e5c5d1064e fixed a bug in context numerotation that prevented the RESET switch to work correctly : mqc_reset_enc in mqc.c 2007-02-28 14:27:20 +00:00
Francois-Olivier Devaux
2fb6da8d85 Corrected codec Makefile by adding the compilation of "compat/getopt.c" 2007-02-28 13:56:06 +00:00
Parvatha Elangovan
fd680a1cf0 Made get_file_format function more robust. Modifications in image_to_j2k.c, j2k_to_image.c, getopt.c, getopt.h 2007-02-27 14:19:09 +00:00
Parvatha Elangovan
313c772f4a Added the dirent.h file used for opening and reading Directory holding image files. Used in image_to_j2k.c and j2k_to_image.c. 2007-02-27 08:54:56 +00:00
Parvatha Elangovan
0781b7d441 Option to read images from a Folder whose path is specified in the Input parameters by "-ImgDir" along with output decod format specified by "-OutFor" . Modifications in image_to_j2k.c, j2k_to_image.c, getopt.c, getopt.h
Enabling use of multi character input parameters in the codec. Modifications in image_to_j2k.c, j2k_to_image.c, getopt.c, getopt.h
2007-02-26 15:40:01 +00:00
Giuseppe Baruffa
e6ce7958f2 Added makefile for linux build of JPWL module; added newlines at the end of JPWL files 2007-02-23 18:24:49 +00:00
Francois-Olivier Devaux
d268ea7d6a Changed version number from 1.1.0 to 1.1.1 in openjpeg.h 2007-02-23 10:48:11 +00:00
Giuseppe Baruffa
0eaafe93ac Added Readme file for OPJViewer 2007-02-23 08:59:46 +00:00
Giuseppe Baruffa
8a75823eea Fixed a copy-and-paste type assignment error (bool instead of int) in the JPWL section of decoder parameters structure in openjpeg.h; minor type-casting in jpwl_lib.c. As a result, now OPJViewer should run correctly when built against the most current SVN trunk of LibOpenJPEG.lib 2007-02-23 01:23:05 +00:00
Francois-Olivier Devaux
e841b13166 Added the OPJViewer Module (/OPJViewer), developed by Giuseppe Baruffa of the University of Perugia 2007-02-22 17:05:58 +00:00
Francois-Olivier Devaux
7cb2194c8e Algorithmic optimizations in t1.c, thanks to Guido J. ! 2007-02-21 07:57:27 +00:00
Francois-Olivier Devaux
eac141b69a Added OPJ_LIMIT_DECODING enabling us to limit the decoding to main header 2007-02-19 09:59:29 +00:00
Francois-Olivier Devaux
d084ff59f2 David Fries suggestions. In image_to_j2k and j2k_to_image, strncpy() functions: instead of specifying the path size macro, let the compiler read the length out of the array entry. 2007-02-13 09:00:37 +00:00
Francois-Olivier Devaux
dcc6f679bc Change file modified. -fPIC flag used for 64-bit compilation. Move operation (rather than copy) for the dist library creation, and -p flag added. 2007-02-13 08:49:00 +00:00
Francois-Olivier Devaux
3f5e8eb92b Extra tokens at the end of #endif directive corrected in openjpeg.c, j2k.c and image_to_j2k.c -> no more warnings in linux compilation 2007-01-31 15:19:54 +00:00
Francois-Olivier Devaux
16879e20ec Linux Makefile for the codec added 2007-01-31 14:58:22 +00:00
Francois-Olivier Devaux
b700cd9101 Linux Makefile for the codec added 2007-01-31 14:57:26 +00:00
Francois-Olivier Devaux
a6d7377213 Use of OPJ_PATH_LEN (defined as 4096) to be the maximum allowed size for filenames instead of MAX_PATH which is not always defined. This caused some programs using OpenJPEG to crash. Modifications in openjpeg.h j2k_to_image.c and image_to_j2k.c 2007-01-30 10:51:29 +00:00
Francois-Olivier Devaux
d48feb45fc Correction of the syntax usage (line 36) 2007-01-30 10:43:56 +00:00
Francois-Olivier Devaux
b5c8558934 ! [FOD] Modification in the context numbers, to reflect what has been specified in standard, in libopenjpeg/t1.h 2007-01-23 11:43:21 +00:00
Francois-Olivier Devaux
521b9bef33 Modification of the context numbers, to reflect what has been specified in standard. 2007-01-23 11:41:16 +00:00
Francois-Olivier Devaux
ed3aec55fd Copyright update 2007-01-15 09:55:40 +00:00
Francois-Olivier Devaux
ef560f19a3 JP2 module: Tests during encoding if the number of components respects the JPEG 2000 standard. 2007-01-03 15:41:50 +00:00
Giuseppe Baruffa
6b9d244449 Definition of USE_JPWL in doxygen file for building the corresponding documentation on JPWL module; creation of README file in JPWL directory 2006-12-13 11:50:24 +00:00
Francois-Olivier Devaux
16dc670030 MJ2 codec restructuration. Update of dsp project files properties 2006-12-08 17:51:18 +00:00
Francois-Olivier Devaux
acd2187a43 MJ2 codec restructuration. Update of project files (dsp, vcproj and makefile) 2006-12-08 17:49:30 +00:00
Francois-Olivier Devaux
b8445ebec0 MJ2 codec restructuration. Movec compat directory to MJ2_codec 2006-12-08 17:17:14 +00:00
Francois-Olivier Devaux
4b75a2784c MJ2 codec restructuration. Movec compat directory to MJ2_codec 2006-12-08 17:11:50 +00:00
Francois-Olivier Devaux
2b3947e8a8 MJ2 codec restructuration. Created MJ2_codec directory and moved MJ2 codec files to this directory, created libopenjpeg_097 directory and moved libopenjpeg files version 0.97 to this directory 2006-12-08 17:09:39 +00:00
Francois-Olivier Devaux
1c43ca006d MJ2 codec restructuration. Created libopenjpeg_097 directory and moved libopenjpeg files version 0.97 to this directory 2006-12-08 17:07:44 +00:00
Francois-Olivier Devaux
bc145d8dc8 MJ2 codec restructuration. Created MJ2_codec directory and moved M2 codec files to this directory 2006-12-08 17:04:31 +00:00
Giuseppe Baruffa
76ee6b8441 + Antonin verified that the MacOS build of JPWL module suffered from a missing definition of the "min" macro; I've added this into both jpwl.h and rs.h 2006-12-07 18:46:28 +00:00
Giuseppe Baruffa
3adfd18602 * Better fix of the TPH EPBs bug in JPWL module
* Fixed the UEP bug in JPWL module
+ Added some lines in the help of JPWL_image_to_j2k
2006-12-05 18:20:04 +00:00
Giuseppe Baruffa
9e42842bb5 Bug fix explanation 2006-12-04 17:26:16 +00:00
Francois-Olivier Devaux
a8591daa68 SVN file properties modified (EOL handled better) 2006-12-04 16:25:52 +00:00
Francois-Olivier Devaux
265de2ed0d SVN file properties modified (EOL handled better) 2006-12-04 16:20:36 +00:00
Francois-Olivier Devaux
36007b6a76 SVN file properties modified (EOL handled better) 2006-12-04 16:16:15 +00:00
Francois-Olivier Devaux
34661c5aea SVN file properties modified 2006-12-04 16:11:23 +00:00
Francois-Olivier Devaux
d53edb5ea7 SVN file properties modified 2006-12-04 16:11:05 +00:00
Francois-Olivier Devaux
16fbba79ec EOL handling 2006-12-04 16:10:24 +00:00
Francois-Olivier Devaux
fb4ad9c507 Version 1.1 2006-12-04 15:52:19 +00:00
Giuseppe Baruffa
9eaaf55f7a Fixed the following bug:
- when using -W h,h0 the EPBs in TPHs always get a "not latest in current header" signature, even if they are really the latest.

The fix checks for additional EPBs, after the TPH one (e.g. UEP EPBs), and sets the Depb field of the TPH EPB accordingly.
2006-12-04 15:28:48 +00:00
Francois-Olivier Devaux
dc069254c3 Changes for 4th of December 2006 (bis) 2006-12-04 15:22:25 +00:00
Francois-Olivier Devaux
b97f88bf7e Changes for 4th of December 2006 2006-12-04 15:18:47 +00:00
Francois-Olivier Devaux
2c03b73dff First integration of JPWL code 2006-12-04 14:59:33 +00:00
Francois-Olivier Devaux
6cc148e226 Code optimization usinq vsprintf() command 2006-12-04 14:57:09 +00:00
Francois-Olivier Devaux
f9d76c0be9 First integration of JPWL code 2006-12-04 14:55:38 +00:00
Francois-Olivier Devaux
bcf7032b8b First integration of JPWL code 2006-12-04 14:55:11 +00:00
Francois-Olivier Devaux
0ace960ea5 Corrected incorrect fprintf formatting 2006-12-04 14:52:34 +00:00
Francois-Olivier Devaux
b420c330b2 JPWL version 1.0 by Universita' degli Studi di Perugia 2006-12-04 13:24:22 +00:00
Francois-Olivier Devaux
7fd2ae9786 JPWL version 1.0 by Universita' degli Studi di Perugia 2006-12-04 13:23:44 +00:00
Francois-Olivier Devaux
3d2f2b4048 Deleted because this directory corresponds to an old version of the JPWL library 2006-12-04 13:20:19 +00:00
Francois-Olivier Devaux
9fc6e4f4bd Deleted because this directory corresponds to an old version of the JPWL library 2006-12-04 13:20:06 +00:00
Francois-Olivier Devaux
07fa11a94c Deleted because this directory corresponds to an old version of the JPWL library 2006-12-04 13:19:25 +00:00
Francois-Olivier Devaux
36c6e4abb9 Deleted because this directory corresponds to an old version of the JPWL library 2006-12-04 13:18:53 +00:00
Antonin Descampe
15949d43d1 fixed a cast problem in the maxlen variable 2006-10-31 18:10:03 +00:00
Antonin Descampe
696cd710df removed a debug test in the version just committed 2006-10-31 17:37:01 +00:00
Antonin Descampe
2d416a8017 fixed a bug in the computation of the mantissa (mu) 2006-10-31 17:11:15 +00:00
Antonin Descampe
b565431251 added the ability to specify the rate as "float" (before : integer) 2006-10-31 17:10:14 +00:00
Antonin Descampe
480021bc33 initial release of jp3d library and codec 2006-10-30 15:32:50 +00:00
Giuseppe Baruffa
af448b94a1 2006-10-27 19:06:07 +00:00
Giuseppe Baruffa
4bd7195ea6 Test 2006-10-27 19:04:31 +00:00
Giuseppe Baruffa
331d3e523d 2006-10-27 19:00:14 +00:00
Antonin Descampe
b5aee428ba remove some needless cvs files 2006-10-27 17:51:08 +00:00
Antonin Descampe
3386c7765a testsvn2 2006-10-27 14:48:39 +00:00
Antonin Descampe
97a3327f99 testsvn 2006-10-26 19:54:44 +00:00
Antonin Descampe
173ccf70d4 fixed a bug in j2k_to_image.c, that prevented the -l option to work correctly. 2006-08-18 10:10:47 +00:00
Antonin Descampe
7860407cb5 fixed a bug in pi.c, line 473, that appeared when more than 100 precincts were generated in a resolution level 2006-08-04 10:12:14 +00:00
Antonin Descampe
4d6bd49719 *** empty log message *** 2006-07-28 15:46:34 +00:00
Mathieu Malaterre
9aa9170110 ENH: Update CMake to do proper installation. Still using the 2.2 installation approach for now. 2006-07-22 03:47:02 +00:00
Mathieu Malaterre
4b3aabebd2 ENH: Fix warning about assignment discards qualifiers from pointer target type 2006-07-22 03:35:17 +00:00
Mathieu Malaterre
1093244d43 ENH: Update on recent commit 2006-07-22 03:30:10 +00:00
Mathieu Malaterre
0577ed8e6e STYLE: Fix style issue 2006-07-22 03:27:36 +00:00
Mathieu Malaterre
4f87b9abd1 BUG: Do not leak with greyscale bmp. Solve problem with name>256 for pgx and resolve random memory access (reported by valgrind) 2006-07-22 03:26:10 +00:00
Mathieu Malaterre
abe8e93c21 ENH: Marking const char * what should be const char *. TODO need to fix code for imagetopgx. 2006-07-21 21:07:18 +00:00
Mathieu Malaterre
f222743e19 ENH: Better solution: using the opj_version function to stay up to date 2006-07-21 21:00:19 +00:00
Mathieu Malaterre
190b4b7c9e ENH: Minor cleanup, mainly comment and line too long 2006-07-21 20:28:44 +00:00
Mathieu Malaterre
d55af7fe7e ENH: Cannot assign const char* into a char*. At same time upgrade OpenJPEG version to proper one 2006-07-21 20:03:07 +00:00
Antonin Descampe
817681fb98 fixed a bug in t1.c that prevented in some cases a true lossless compression (thanks to Don Mimlitch for reporting this bug) 2006-03-19 18:51:32 +00:00
Giuseppe Baruffa
f0721df1d9 italian text translated into english 2006-03-16 16:49:13 +00:00
Giuseppe Baruffa
76d29b8df1 This commit was generated by cvs2svn to compensate for changes in r266,
which included commits to RCS files with non-trunk default branches.
2006-03-16 16:47:31 +00:00
Giuseppe Baruffa
2f9aae7671 Added a second version of enco+deco, with comments and text in italian 2006-03-13 18:01:33 +00:00
Mathieu Malaterre
0108506433 COMP: Fix warning about C++ comment 2006-02-19 21:12:20 +00:00
Mathieu Malaterre
b883da435b COMP: Fix declaration hides parameter len 2006-02-18 12:52:52 +00:00
Mathieu Malaterre
6a4572a56f COMP: Fix declaration hides parameter len 2006-02-18 12:51:35 +00:00
Mathieu Malaterre
fba75d93c4 STYLE: Remove C++ comments 2006-02-18 12:48:49 +00:00
Freeimage
c2b399b363 removed unneeded working variables in opj_tcd_t 2006-02-12 16:53:23 +00:00
Francois-Olivier Devaux
786ec27a05 Readded CRLF 2006-02-08 14:25:03 +00:00
Francois-Olivier Devaux
2a505f73c4 Added SOURCE=..\libopenjpeg\jpw.c
Added SOURCE=..\libopenjpeg\rs.c
2006-02-08 14:24:25 +00:00
Francois-Olivier Devaux
e318641bfa Added SOURCE=..\libopenjpeg\jpw.c 2006-02-08 14:23:39 +00:00
Mathieu Malaterre
6566009e89 BUG: Need to leave option for user to change 2006-02-05 22:55:26 +00:00
Mathieu Malaterre
a350bdc1c4 ENH: Several updates: Do not need an explicit DartConfig, default inexistant file is just fine. Also remove explicit BUILD_SHARED_LIBS since this is garantee to be OFF by CMake 2006-02-05 22:17:03 +00:00
Mathieu Malaterre
23eeec8769 ENH: Do the proper thing for static/shared 2006-02-05 21:39:19 +00:00
Freeimage
f31d963a64 fixed a bug in codec/convert.c::imagetobmp 2006-02-04 18:39:46 +00:00
Freeimage
5e0948c142 readded CRLF to dsp, dsw and rc files 2006-02-04 12:38:32 +00:00
Freeimage
73ada6ce7f readded CRLF to dsp and dsw files 2006-02-04 12:07:31 +00:00
Freeimage
48311061c1 added the 'static' keyword to inline functions to keep gcc happy 2006-02-03 23:08:52 +00:00
Antonin Descampe
39ad332cee minor change : project replaced by workspace 2006-02-02 13:15:21 +00:00
Freeimage
90a4692c48 What's new ... 2006-02-01 21:27:43 +00:00
Freeimage
fe720be147 added a VERSION resource to the DLL version of OpenJPEG 2006-02-01 21:25:37 +00:00
Freeimage
8d7b0c9c05 changed function definitions of INT and FIX modules to 'inline' 2006-02-01 21:25:11 +00:00
Mathieu Malaterre
33b5757921 ENH: Update CMake to match the new shared lib system (no more def file) 2006-01-31 22:35:51 +00:00
Freeimage
355b88c15d fixed various minor warnings occuring under icc9 and bcc32, added MSVC project and compiler directives to build a 'standard' WIN32 DLL 2006-01-31 21:26:11 +00:00
Mathieu Malaterre
74c1b3637e COMP: Fix compilation on MINGW 2006-01-31 19:45:17 +00:00
Mathieu Malaterre
9ffd9e6619 ENH: update changelog about modification for shared lib in CMake which now compatible with old build system 2006-01-31 14:54:16 +00:00
Mathieu Malaterre
1460d23294 STYLE: Remove completely reference to OPJ_EXPORT 2006-01-31 14:51:39 +00:00
Mathieu Malaterre
75cf4f0906 STYLE: More verbose comments 2006-01-31 14:41:40 +00:00
Mathieu Malaterre
85c327861a STYLE: Add more comment, also use more feature from CMake to introduce the VERSION number of openjpeg 2006-01-31 14:32:40 +00:00
Mathieu Malaterre
c5c3ca370e ENH: Move to a def solution to avoid polluting header file with declspec 2006-01-31 14:20:06 +00:00
Antonin Descampe
72de930d08 fixed two initialization problems in t1.c and tcd.c 2006-01-27 16:29:41 +00:00
Freeimage
8a662fa4b1 fixed various minor warnings occuring under gcc, added corrections proposed in the forum 2006-01-26 20:02:04 +00:00
Mathieu Malaterre
7546f19b51 ENH: Sync with ITK and add ref to doxygen 2006-01-25 18:45:49 +00:00
Mathieu Malaterre
55fb4d0b67 ENH: Sync with ITK repository 2006-01-25 18:18:09 +00:00
Mathieu Malaterre
61e353d652 STYLE: Add a lot of comments for the CMake build system 2006-01-25 16:32:48 +00:00
Mathieu Malaterre
5ff45287ea ENH: Fix compilation on mingw32 and borland 2006-01-25 16:02:12 +00:00
Mathieu Malaterre
6b27c32ee8 ENH: Set a default BUILDNAME 2006-01-25 15:55:13 +00:00
Mathieu Malaterre
44869986ca BUG: Try to fix the shell script 2006-01-25 15:54:10 +00:00
Antonin Descampe
2f75846baf fixed a problem in convert.c when multiple comments 2006-01-25 15:45:01 +00:00
Mathieu Malaterre
ec2b3b3b3f COMP: Fix compilation on mingw (already had itoa) and borland (need __int64) 2006-01-25 15:21:28 +00:00
Antonin Descampe
b9b72f1951 removed all CtrlM from files 2006-01-25 10:03:59 +00:00
Antonin Descampe
ebeb57d7d3 check also for CtrlM in .txt and .cmake files 2006-01-25 09:34:32 +00:00
Antonin Descampe
e6aae96217 added cmake files to the project 2006-01-25 09:23:17 +00:00
Antonin Descampe
511d342a94 removed all CtrlM from files 2006-01-25 09:17:16 +00:00
Antonin Descampe
a1ec600b42 fix.c : replaced "WIN32" by "_MSC_VER" for int64 2006-01-25 09:04:36 +00:00
Antonin Descampe
06185ea2d1 removed all CtrlM from files 2006-01-25 09:03:41 +00:00
Antonin Descampe
fc42b3ec84 fix.c : replaced "WIN32" by "_MSC_VER" for int64 2006-01-25 09:00:40 +00:00
Antonin Descampe
5432a70c79 added "OPJ_EXPORT" in openjpeg.h to generate shared lib with win32 2006-01-25 08:50:18 +00:00
Antonin Descampe
d02b01dc85 removed all CtrlM from files (openjpeg.h,t2.c,j2k_to_image.c) 2006-01-25 08:45:21 +00:00
Antonin Descampe
cc3e813786 event.c : replaced "WIN32" by "_MSC_VER" for i2a (line 33) + replaced win32 line breaks 2006-01-24 21:02:13 +00:00
Antonin Descampe
d280fdef70 event.c : replaced "WIN32" by "_MSC_VER" for i2a 2006-01-24 20:40:58 +00:00
Antonin Descampe
40fd335947 CtrlM check added when committing files 2006-01-22 19:19:19 +00:00
Antonin Descampe
6a52f1a9df fixed various minor warnings with gdcm patches 2006-01-20 16:53:05 +00:00
Freeimage
197b0505cb fixed a bug in jp2_read_ihdr (need to allocate jp2->comps) 2006-01-19 20:25:44 +00:00
Freeimage
f8d899c4f1 What's new 2006-01-18 20:11:30 +00:00
Freeimage
d5ecae07ad fixed a bug in opj_cio_open when saving 48-bit images (wrong buffer size calculation) 2006-01-18 20:10:58 +00:00
Freeimage
8f9f70f922 changed the name of j2k_realloc to opj_realloc 2006-01-18 20:10:23 +00:00
Antonin Descampe
69dcece31a makefiles and readme updated 2005-12-21 14:54:37 +00:00
Antonin Descampe
34c8a555fa fixed a bug when specifying a rate '-r' => no distortion info was available in the index 2005-12-08 14:47:40 +00:00
Antonin Descampe
fe33ebe83c fixed a bug in t1_getwmsedec (stepsize was divided by 8192) 2005-12-08 11:01:59 +00:00
Antonin Descampe
237bb54678 added doc module to openjpeg module 2005-12-08 09:40:00 +00:00
Antonin Descampe
95bc884365 OpenJPEG version 1.1 2005-12-08 09:38:47 +00:00
Antonin Descampe
e45e87cfb7 removed old readme and Makefile 2005-12-08 09:27:26 +00:00
Antonin Descampe
2dc3ca544d removed test file 2005-12-07 21:29:44 +00:00
Antonin Descampe
4fb43c8af0 test 2005-12-07 21:28:11 +00:00
Antonin Descampe
a5d33c992d still trying to add root directory to module 2005-12-07 21:26:00 +00:00
Antonin Descampe
dbd4b4945b still trying to add root directory to module 2005-12-07 21:20:11 +00:00
Antonin Descampe
17704c6e2f still trying to add root directory to module 2005-12-07 21:10:18 +00:00
Antonin Descampe
a35e8df118 test for adding root directory to modules 2005-12-07 21:06:03 +00:00
Antonin Descampe
d9c1214282 test to add root directory to modules 2005-12-07 20:45:11 +00:00
Antonin Descampe
0674edc2ca added an 'openjpeg' module 2005-12-06 16:30:35 +00:00
Antonin Descampe
f335cb0e0b addes an 'openjpeg' module containing all modules 2005-12-06 16:19:07 +00:00
Antonin Descampe
c447f6e6bc removed pre-commit check tabs 2005-12-06 16:08:37 +00:00
Antonin Descampe
884c8429fc Makefile moved to ROOT directory 2005-12-04 17:10:57 +00:00
Antonin Descampe
5cf0326dcb LibOpenJPEG project files moved to root directory 2005-12-04 17:07:44 +00:00
Antonin Descampe
59835a580e openjpeg version 1.0 (previous version still available with tag opj0-97) 2005-12-02 18:30:54 +00:00
Antonin Descampe
08f7bfbb5f add an include <sys/time.h> before <sys/resource.h> 2005-12-02 13:48:10 +00:00
Antonin Descampe
f61cda9b7d openjpeg version 1.0 (previous version still available with tag opj0-97) 2005-12-02 13:34:15 +00:00
Antonin Descampe
76016d509b Added check to avoid tabs in source files 2005-12-01 12:38:36 +00:00
Antonin Descampe
4458ef921c minor change for readability 2005-11-09 10:20:28 +00:00
Antonin Descampe
c9ac67cd05 minor change to avoid warnings about signedness 2005-11-09 10:17:51 +00:00
Giuseppe Baruffa
cff5df73d9 Initial revision 2005-11-08 17:40:33 +00:00
Antonin Descampe
e398154212 small changes to remove warnings related to signedness 2005-11-08 16:15:40 +00:00
Antonin Descampe
0ea26e7ba6 small change to avoid signed/unsigned warning during compilation 2005-11-04 11:10:38 +00:00
Antonin Descampe
8f3bd54c3d Changes proposed by Mathieu Malaterre from the GDCM project... Thanks a lot Mathieu
- '//' replaced by '/* */'
- inclusion of int.h in int.c
- inclusion of j2k.h in int.h in order to export symbols
- adding (void) var when a variable is declared but not used
- some explicit cast
- CLOCKS_PER_SEC is declared as float in bcc55, so there is a need to cast it to int for the modulo operation
- some variables changed from float -> double
2005-11-01 10:15:34 +00:00
Antonin Descampe
18a9bcb882 changed one of the 9-7 coefficients (value closer to the one in the std) 2005-10-27 07:51:11 +00:00
Antonin Descampe
7ee36c3a4c 1) quantization stepsizes stored as float instead of shifted integers -> fixes a pb of precision when using very small stepsizes. 2) bug fixed when decoding until bitplane 0 -> r-value (1/2) added to the coefficient. 2005-10-27 07:49:29 +00:00
Francois-Olivier Devaux
7f8f47566f Modifications to decoding of JP2H box in order to be compatible with JP2 conformance files 2005-10-20 07:43:55 +00:00
Antonin Descampe
d6a523e091 major change in the dwt-module, thanks to Ive (aka Reiner Wahler): thanks a lot ! See note in dwt.c for more details. 2005-09-21 13:00:51 +00:00
Antonin Descampe
ac634b1639 bug fixed when asking for an index with more than (layer*resolutions*100) packets per tile (2nd correction) 2005-09-21 08:11:27 +00:00
Antonin Descampe
a0513798bb bug fixed when asking for an index with more than (layer*resolutions*100) packets per tile 2005-09-20 15:40:13 +00:00
Antonin Descampe
8f4d6bbeba bug fixed when freeing the memory allocated if ppm-marker or ppt-marker is used 2005-09-13 14:17:09 +00:00
Antonin Descampe
cd98a4f740 bug fixed when freeing the memory allocated if ppm-marker or ppt-marker is used 2005-09-13 14:11:41 +00:00
Francois-Olivier Devaux
e25e7e767e Modifications proposed by Rob Komar. Thanks for your contribution ! 2005-08-01 15:10:04 +00:00
Antonin Descampe
de75303c38 Several bugs fixed when dealing with pgx-files with more than 8 bpp and the fixed_quality feature. 2005-07-18 15:21:56 +00:00
Francois-Olivier Devaux
32ba9920db At lines 577, 692 and 699, zeroing of effective region of code-block rather than the 1024*1024 allocated integers of code-block. This optimization has been proposed by Dmitry Kolyadin. Thanks for your help ! 2005-06-02 15:28:37 +00:00
Francois-Olivier Devaux
7ae6a670fa Conversions from int to unsigned int to ensure correct execution of int_min and int_max at lines 800 to 830 2005-06-02 15:25:25 +00:00
Francois-Olivier Devaux
cf4f8be5f0 Conversions from int to unsigned int to ensure correct execution of int_min at line 626 to 628 2005-06-02 15:14:33 +00:00
Antonin Descampe
ec1b970a32 argv[2] replaced by outfile when writing to output file (thanks to O.Smeesters and V.Mesaros) 2005-05-26 15:18:56 +00:00
Antonin Descampe
ee6d0cfba9 CRLF -> LF 2005-05-26 15:13:08 +00:00
Francois-Olivier Devaux
789f6f8e7a CVS test 2005-05-26 14:25:54 +00:00
Sebastien Lugan
3d2a52cd82 correction CRLF -> LF 2005-05-26 14:20:00 +00:00
Antonin Descampe
384068ce8c test 2005-05-26 12:22:00 +00:00
Francois-Olivier Devaux
7e518596e0 cio_read_to_buf(...) and cio_write_from_buf(...) functions syntax modification 2005-05-26 12:07:46 +00:00
Francois-Olivier Devaux
f9eb8f93c2 Code optimization: t1_flags and t1_data set to zero with memset 2005-05-24 12:15:52 +00:00
Francois-Olivier Devaux
d54925f777 2 functions were added, to fasten buffer transfers:
void cio_read_to_buf(unsigned char* buf, int n)
void cio_write_from_buf(unsigned char* buf, int n)
Code written by Glenn Pearson
2005-05-23 15:26:29 +00:00
Francois-Olivier Devaux
eae26f958e 2 functions were added, to fasten buffer transfers:
void cio_read_to_buf(unsigned char* buf, int n)
void cio_write_from_buf(unsigned char* buf, int n)
2005-05-23 15:25:48 +00:00
Francois-Olivier Devaux
ee7c2c28f1 Variables in Movie and Track structure initialized to avoid problems when freeing memory.
These initializations are made in mj2_read_smhd and mj2_read_hmhd.
2005-05-23 09:48:44 +00:00
Francois-Olivier Devaux
8a2e6ecd8b Useless call of mj2_init_stdmovie function deleted 2005-05-23 09:46:37 +00:00
Francois-Olivier Devaux
1b0a585256 Modified mj2_init_stdmovie. Check for division by zero at line 212: tk->sample[j].sample_delta = tk->timescale / tk->sample_rate;
Thanks to Valentin Mesaros !
2005-05-20 07:59:01 +00:00
Francois-Olivier Devaux
29b6a4307a Release configuration modified 2005-04-27 11:01:28 +00:00
Francois-Olivier Devaux
ad4857df94 Light modifications 2005-04-27 10:51:01 +00:00
Francois-Olivier Devaux
a73e37301a First upload of the DTD file 2005-04-27 10:42:31 +00:00
Francois-Olivier Devaux
255e296113 Light modifications 2005-04-27 10:42:16 +00:00
Francois-Olivier Devaux
e4696a445d Update 2005-04-19 10:10:54 +00:00
Francois-Olivier Devaux
81f688433d bug while freeing memory (mj2_free) fixed 2005-04-19 09:18:51 +00:00
Francois-Olivier Devaux
0130af0ff4 Bug while writing huge MOOV boxes fixed. Thanks to Valentin Mesaros ! 2005-04-19 09:17:55 +00:00
Francois-Olivier Devaux
2cbcbb25b0 Standard movie initialisation slightely modified 2005-04-19 09:17:03 +00:00
Francois-Olivier Devaux
5197135a0a Makefile update 2005-04-19 09:16:22 +00:00
Francois-Olivier Devaux
4c67811f65 Project update 2005-04-15 08:02:18 +00:00
Francois-Olivier Devaux
8e8afafae6 Project settings update 2005-04-06 08:53:59 +00:00
Francois-Olivier Devaux
370cfc43a2 Project settings update 2005-04-06 08:44:32 +00:00
Francois-Olivier Devaux
d101633cfa Project settings update 2005-04-06 08:36:32 +00:00
Francois-Olivier Devaux
128bcc4f62 Relative path modifications 2005-04-06 08:21:31 +00:00
Francois-Olivier Devaux
050737bea0 Visual .NET project 2005-04-01 14:17:42 +00:00
Francois-Olivier Devaux
63e17a19eb New version by Glenn Pearson 2005-04-01 14:16:03 +00:00
Francois-Olivier Devaux
61e85ded8b Line 114: Simple warning message when NO_PACKETS_DECODING is not defined 2005-03-25 15:49:29 +00:00
Francois-Olivier Devaux
1cc9fa6815 Line 944:Memory release of img.comps[i].data when NO_PACKETS_DECODING is not defined 2005-03-25 15:48:50 +00:00
Francois-Olivier Devaux
7bdb0331a6 Removed unused parameter in fprintf at line 618 2005-03-25 13:58:00 +00:00
Francois-Olivier Devaux
623f1d96cf Unused "dest" pointer removed from main() 2005-03-25 13:53:54 +00:00
Francois-Olivier Devaux
1de9535b8c #endif;
replaced by
#endif
2005-03-25 13:52:55 +00:00
Francois-Olivier Devaux
68ebc572fc Makefile for frames_to_mj2, mj2_to_frames, wrap_j2k_in_mj2
and extract_j2k_from_mj2
Thanks to Valentin Mesaros from Octalis !
2005-03-25 13:47:47 +00:00
Francois-Olivier Devaux
5f44ec7d01 Newline at end of file added 2005-03-25 13:46:38 +00:00
Francois-Olivier Devaux
10aee43cbc Replaced bad message error when unknown box is found 2005-03-25 13:44:54 +00:00
Francois-Olivier Devaux
7e2e09e2a9 Replaced unlink() with remove() 2005-03-25 13:44:16 +00:00
Francois-Olivier Devaux
86ce4d4c18 New OpenJPEG MJ2 module: mj2_to_metadata created by Glenn Pearson. The OpenJPEG team would like to thank him for his contributions ! 2005-03-25 09:44:32 +00:00
Francois-Olivier Devaux
361edd25b7 Newline at end of file 2005-03-25 09:30:30 +00:00
Francois-Olivier Devaux
85691a02a6 Initialisation of movie->cl changed in mj2_init_stdmovie 2005-03-21 15:14:16 +00:00
Francois-Olivier Devaux
1f96f0e92a Modifications made to enable the decoding of a J2K file headers without decoding all packets using #NO_PACKETS_DECODING
Used with MJ2_to_metadata
2005-03-16 12:11:40 +00:00
Francois-Olivier Devaux
34a6c13a2d Input file format bug fixed (2) 2005-02-10 16:22:01 +00:00
Francois-Olivier Devaux
542f06007c Input file format bug fixed 2005-02-10 16:16:18 +00:00
Francois-Olivier Devaux
fdbca0fc9d Minor bugs in error messages fixed 2005-02-09 10:26:22 +00:00
Francois-Olivier Devaux
632902d7e3 Added tk->visual_w and tk->visual_h variables, specifying the track's visual presentation size as fixed-point 16.16 values. 2005-02-09 10:08:48 +00:00
Francois-Olivier Devaux
9310f1b4a9 Precision added to tk->balance, tk->volume, movie->volume and movie->rate 2005-02-09 09:56:32 +00:00
Francois-Olivier Devaux
ed0a46eff5 YUV_DFMT added 2005-02-09 09:55:13 +00:00
Francois-Olivier Devaux
8323900f73 Bug with number of layers to decode fixed 2005-02-01 16:30:06 +00:00
Antonin Descampe
c83ae7397d Added layer option '-l' to the command line. This option allows user to
specify a maximum number of quality layers to be decoded.
2005-01-26 09:59:31 +00:00
Antonin Descampe
3b1bee0eec * function getopt added to the decoder (to efficiently manage arguments
in command line)
* reduce_on, reduce_value grouped in a single variable reduce
* up-to-date usage display
* image_type renamed --> decod_format
* JPEG2000_format renamed -->  cod_format
2005-01-26 08:59:49 +00:00
Francois-Olivier Devaux
ba1cf545df Bug with mj2_read_struct fixed (problem when reading MJ2 files starting with the MOOV box fixed) 2005-01-14 08:14:01 +00:00
Antonin Descampe
bfb2f9f58b Luke Lee optimization for fix_mul... Thanks to him 2005-01-03 17:39:30 +00:00
Francois-Olivier Devaux
13b8ecfe44 This tool wraps J2K codestreams into a MJ2 file (designed to
work with other codecs than OpenJPEG)
2004-12-08 12:12:23 +00:00
Francois-Olivier Devaux
9e9e188ebf This tool extracts J2K codestreams from a MJ2 file (designed to
work with other codecs than OpenJPEG)
2004-12-08 12:12:00 +00:00
Francois-Olivier Devaux
5034581e69 Converting to Dos 2004-12-08 12:09:25 +00:00
Francois-Olivier Devaux
85ec5eccf7 Converting to Unix 2004-12-08 12:07:25 +00:00
Francois-Olivier Devaux
9c8fcc3616 This tool wraps J2K codestreams into a MJ2 file (designed to
work with other codecs than OpenJPEG)
2004-12-08 11:24:10 +00:00
Francois-Olivier Devaux
7976b61c89 This tool extracts J2K codestreams from a MJ2 file (designed to
work with other codecs than OpenJPEG)
2004-12-08 11:23:37 +00:00
Francois-Olivier Devaux
43a6b92345 New modular version of the MJ2 library.
The goal of this new version is to make the library more independent from OpenJPEG
2004-12-08 11:22:18 +00:00
Francois-Olivier Devaux
f25acae0bc Modifications in handling of JP2 files to increase modularity of JP2.c
Memory leak fixed with jp2 files
2004-12-08 09:08:13 +00:00
Francois-Olivier Devaux
9225f53d62 Modularity increase in jp2_init_stdjp2 function and jp2c box functions to enable new version of MJ2 module 2004-12-08 09:06:04 +00:00
Antonin Descampe
eb1b017ec7 Index structure adpated for other progression orders than LRCP
(thanks to Stefano Pensa)
2004-11-29 14:48:20 +00:00
Francois-Olivier Devaux
0ddef9b2db Modifications to increase modularity of jp2 coding/decoding 2004-11-26 16:33:18 +00:00
Francois-Olivier Devaux
1bdb07cefe fprintf correctly redirected to stderr or stdout 2004-11-15 12:41:35 +00:00
Francois-Olivier Devaux
0a879e2207 Help message updated 2004-11-05 10:08:06 +00:00
Francois-Olivier Devaux
f3c3eab744 Usage message updated 2004-11-05 10:07:02 +00:00
Francois-Olivier Devaux
08209f1d23 Help message updated 2004-11-05 09:58:42 +00:00
Francois-Olivier Devaux
3ec116ae08 Help message updated 2004-11-05 09:51:30 +00:00
Francois-Olivier Devaux
3b600a986c Stack corruption error corrected with "tmp" variable 2004-11-05 08:59:58 +00:00
Francois-Olivier Devaux
0d4a38f3a5 Bug with -F argument fixed 2004-10-08 07:08:25 +00:00
Francois-Olivier Devaux
2410db2ae7 Memory leak bug fixed in the read_mdat() function 2004-10-06 08:58:27 +00:00
Francois-Olivier Devaux
e1278bc691 Small bug corrected: unsigned int to int conversion at line 417 2004-10-06 07:12:36 +00:00
Francois-Olivier Devaux
899439a906 Bug with tk->imagefile pointer fixed 2004-09-09 13:34:20 +00:00
Francois-Olivier Devaux
02e3a4ec77 Modification of stsc_decompact function 2004-09-08 15:12:21 +00:00
Francois-Olivier Devaux
7250ce0668 Bug with sound and hint tracks fixed 2004-09-06 15:53:36 +00:00
Francois-Olivier Devaux
2ebe5f2c92 One component input image handled 2004-09-06 15:47:09 +00:00
Francois-Olivier Devaux
3c730a804b Order of data written to jp2_struct->cl inversed in jp2_read_ftyp function 2004-08-31 09:17:06 +00:00
Francois-Olivier Devaux
313975debf Pointer values initialized to zero 2004-08-27 14:22:33 +00:00
Francois-Olivier Devaux
0abe8e1997 Fixed bugs. Thanks to Dereck ! 2004-08-24 13:36:45 +00:00
Antonin Descampe
bc5c5115cb * Inserted tool for memory leaks fixing in debug mode
* Fixed some memory leaks in the decoder (some are still present when multiple tiles!)
2004-08-06 14:13:51 +00:00
Antonin Descampe
61ac18531a Help updated 2004-08-04 10:06:50 +00:00
Francois-Olivier Devaux
0ee21bdbfe Bug fixed in lossless mode 2004-08-03 14:20:04 +00:00
Antonin Descampe
d116ca5d10 Better indentation 2004-08-03 14:14:44 +00:00
Antonin Descampe
26a630dad2 Bug fixed in lossless mode 2004-08-03 14:06:10 +00:00
Francois-Olivier Devaux
2c2730280e Deleted system("pause") at the end of main function 2004-08-02 15:23:22 +00:00
Antonin Descampe
2e2ba14c53 Bug fixed in pgx-file reading 2004-07-30 09:22:22 +00:00
Antonin Descampe
9fa68ca811 Bug fixed in MQ decoder initialization (keyword comment : initbug1) 2004-07-21 05:18:57 +00:00
Antonin Descampe
d38080aa00 * Bug fixed in jpt decoding
* Bug fixed in pcrl progression order (profile-1 compliance)
* Change in tcd_dump
2004-07-20 05:40:55 +00:00
Francois-Olivier Devaux
aa6c1d28ad Error message modification 2004-07-16 15:16:07 +00:00
Antonin Descampe
ba4fd784f5 Converting to DOS-formats 2004-07-16 14:52:25 +00:00
Francois-Olivier Devaux
3d67d80d49 First upload of MJ2 module 2004-07-16 14:10:49 +00:00
Francois-Olivier Devaux
25e97927f9 First upload of mj2.h 2004-07-16 14:09:50 +00:00
227 changed files with 64559 additions and 11068 deletions

77
CMakeLists.txt Normal file
View File

@@ -0,0 +1,77 @@
# Main CMakeLists.txt to build the OpenJPEG project using CMake (www.cmake.org)
# Written by Mathieu Malaterre
# This CMake project will by default create a library called openjpeg
# But if you want to use this project within your own (CMake) project
# you will eventually like to prefix the library to avoid linking confusion
# For this purpose you can define a CMake var: OPENJPEG_NAMESPACE to whatever you like
# e.g.:
# SET(OPENJPEG_NAMESPACE "GDCMOPENJPEG")
PROJECT(OPENJPEG C)
CMAKE_MINIMUM_REQUIRED(VERSION 2.2)
IF(NOT OPENJPEG_NAMESPACE)
SET(OPENJPEG_NAMESPACE "OPENJPEG")
SET(OPENJPEG_STANDALONE 1)
ENDIF(NOT OPENJPEG_NAMESPACE)
# In all cases:
STRING(TOLOWER ${OPENJPEG_NAMESPACE} OPENJPEG_LIBRARY_NAME)
PROJECT(${JPEG_NAMESPACE} C)
# Do full dependency headers.
INCLUDE_REGULAR_EXPRESSION("^.*$")
#-----------------------------------------------------------------------------
# OPENJPEG version number, usefull for packaging and doxygen doc:
SET(OPENJPEG_MAJOR_VERSION 1)
SET(OPENJPEG_MINOR_VERSION 0)
SET(OPENJPEG_BUILD_VERSION 0)
SET(OPENJPEG_VERSION
"${OPENJPEG_MAJOR_VERSION}.${OPENJPEG_MINOR_VERSION}.${OPENJPEG_BUILD_VERSION}")
#-----------------------------------------------------------------------------
# OpenJPEG build configuration options.
OPTION(BUILD_SHARED_LIBS "Build OpenJPEG with shared libraries." OFF)
#-----------------------------------------------------------------------------
# For the codec...
OPTION(BUILD_EXAMPLES "Build the Examples (codec...)." OFF)
# configure name mangling to allow multiple libraries to coexist
# peacefully
IF(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/openjpeg_mangle.h.in)
SET(MANGLE_PREFIX ${OPENJPEG_LIBRARY_NAME})
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/openjpeg_mangle.h.in
${CMAKE_CURRENT_BINARY_DIR}/openjpeg_mangle.h
@ONLY IMMEDIATE)
ENDIF(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/openjpeg_mangle.h.in)
#-----------------------------------------------------------------------------
# Always build the library
INCLUDE_DIRECTORIES(BEFORE ${CMAKE_CURRENT_BINARY_DIR})
SUBDIRS(
libopenjpeg
)
#-----------------------------------------------------------------------------
# Build example only if requested
IF(BUILD_EXAMPLES)
SUBDIRS(codec)
ENDIF(BUILD_EXAMPLES)
#-----------------------------------------------------------------------------
# For openjpeg team if they ever want Dart+CMake
IF(OPJ_STANDALONE)
INCLUDE(Dart)
MARK_AS_ADVANCED(BUILD_TESTING DART_ROOT TCL_TCLSH)
IF(BUILD_TESTING)
ENABLE_TESTING()
SET(BUILDNAME "OpenJPEG-${CMAKE_SYSTEM}-${CMAKE_C_COMPILER}" CACHE STRING "Name of build on the dashboard")
MARK_AS_ADVANCED(BUILDNAME)
ENDIF(BUILD_TESTING)
ENDIF(OPJ_STANDALONE)
# TODO, technically we should add tests, e.g:
# http://www.crc.ricoh.com/~gormish/jpeg2000conformance/

39
CVSROOT/checkCtrlM Executable file
View File

@@ -0,0 +1,39 @@
#!/bin/sh
#
# checkCtrlM checks source code for explicit ctrl-M's
# checks only files with the following extensions: .c, .cxx, .txx, .html, .htm
# exits with 0, if all commited files pass the test.
# exits with 1, if any one of the tests fails
#
# checkCtrlM can be run as a cvs commitinfo command.
# The following commitinfo line (without the #) will run the script
# ALL $CVSROOT/CVSROOT/checkCtrlM
#
failed=0
#
# skip the first arg, the directory
shift 1
for file in "$@"; do
#
# select files with extentions .txx, .cxx, .h, .html, .htm, .c, .txt, .cmake
match=`echo $file | egrep \[\.\]txx\$\|\[\.\]cxx\$\|\[\.\]h\$\|\[\.\]html\$\|\[\.\]htm\$\|\[\.\]c\$\|\[\.\]txt\$\|\[\.\]cmake\$`
if [ "x$match" != "x" ] ; then
count=`grep -n
\$ /dev/null $file|wc -c`
results=`expr $count \| 0`
if [ "$results" != "0" ]; then
echo "=========================================================="
if [ $results -lt 200 ]; then
grep -n
\$ /dev/null $file
fi
echo ""
echo "$file has ^M's. They must be removed before you can commit."
echo "The problem count was $results"
echo "=========================================================="
failed=1
fi
fi
done
exit $failed

32
CVSROOT/checkTabs Executable file
View File

@@ -0,0 +1,32 @@
#!/bin/tcsh
#
# checkTabs checks source code for explicit TABS
# checks only files with the following extensions: .c, .cxx, .txx,
# exits with 0, if all commited files pass the test.
# exits with 1, if any one of the tests fails
#
# checkTabs can be run as a cvs commitinfo command.
# The following commitinfo line (without the #) will run the script
# ALL $CVSROOT/CVSROOT/checkTabs
#
set failed=0
#
# skip the first arg, the directory
foreach file ( $argv[2-] )
#
# select files with extentions .txx, .cxx, .h, .html, .htm
set match=`echo $file | egrep \[\.\]txx\$\|\[\.\]cxx\$\|\[\.\]h\$\|\[\.\]cpp\$\|\[\.\]htm\$\|\[\.\]html\$\|\[\.\]c\$\|\[\.\]mm\$\|\[\.\]h.in\$\|\[\.\]hxx.in\$\|CMakeLists.txt\$\|\[\.\]cmake\$\|\[\.\]cmake.in\$`
if ( $match == "" ) continue;
set count=`grep -n " " /dev/null $file|wc -c`
set results=`expr $count \| 0`
if ( "$results" != "0" ) then
echo "=========================================================="
grep -n " " /dev/null $file
echo ""
echo "$file has explicit TABSs."
echo "They must be converted to SPACES(2 per TAB) before you can commit."
echo "=========================================================="
set failed=1
endif
end
exit $failed

View File

@@ -11,3 +11,5 @@
# [<whitespace>]<filename><whitespace><error message><end-of-line>
#
# comment lines begin with '#'
checkCtrlM cannot check out checkCtrlM
checkTabs cannot check out checkTabs

View File

@@ -13,3 +13,6 @@
#
# If the name "ALL" appears as a regular expression it is always used
# in addition to the first matching regex or "DEFAULT".
ALL $CVSROOT/CVSROOT/checkCtrlM %r/%p %s
# ALL $CVSROOT/CVSROOT/checkTabs %r/%p %s

View File

@@ -24,3 +24,6 @@
# character to interpose another module into the current module. This
# can be useful for creating a module that consists of many directories
# spread out over the entire source repository.
opj-base -l -d . .
openjpeg -a opj-base libopenjpeg codec doc

256
ChangeLog Normal file
View File

@@ -0,0 +1,256 @@
What's New for OpenJPEG
* : fixed
- : removed
! : changed
+ : added
----------------------
MAY 4, 2007
VERSION 1.2.0 RELEASED
----------------------
May 4, 2007
* [FOD] Bugs corrected in decoding of command line (getopt.c), in the handling of 16 bit files (t1.c and tcd.c) and the calculation of elapsed time for multiple tiles parts (tcd.c and tdc.h).
June 2, 2007
+ [GB] OPJViewer opens now BMP, PNG, GIF, PNM, TIFF (with wxWidgets internals); added an encoder settings tab, for future integration with "save file as..." in JPEG 2000 format
May 31, 2007
* [FOD] Fixed the handling of 16bit TIFF files for cinema compression. Modified "convert.c"
* [FOD] Fixed the parameters used for cinema compression (9-7 transform used instead of 5-3). Modified "image_to_j2k.c"
May 24, 2007
* [FOD] Bug fixed by Sylvain Munaut. Change in the reading of the POC marker. Since COD/COC can be anywhere in the header, the decoder cannot always know while decoding the POC marker the value of numlayers and numresolution.
May 23, 2007
! [FOD] Patch suggested by Callum Lerwick <seg@haxxed.com>: "This makes the t1 data arrays dynamic, which greatly reduces cache thrashing. Also, some minor cleanup to prevent unnecessary casts"
May 22, 2007
! [FOD] Patch suggested by Callum Lerwick <seg@haxxed.com>: "Some formatting cleanups, so that the long function definitions and calls fit on screen. Use of prefix increment which is theoretically faster, in practice any sane compiler can optimize a postfix increment but its best not to count on such things. Consolidation of some redundant calculations in the inner loops, which becomes very useful in the future autovectorize patch."
! [FOD] Patch suggested by Callum Lerwick <seg@haxxed.com>: "This changes the flag code in t1 to use a flag_t type, which can then be changed to reduce RAM usage. It is now typedef to a short."
! [FOD] Patch suggested by Callum Lerwick <seg@haxxed.com>: "This patch makes the t1 LUTs static. I actually intend this as a prelude to possibly eliminating some or all of the LUTs entirely."
May 11, 2007
- [FOD] JP3D library Binaries removed from SVN.
! [FOD] MJ2 codec updated from LibOpenJPEG version 0.97 to LibOpenJPEG version 1. Hence, the MJ2 codec will now take advantage of all the improvements and optimizations done on the LibOpenJPEG library.
! [FOD] Possibility to choose to apply MCT (multiple component transform) enabled, and new decoding_limit: DECODE_ALL_BUT_PACKETS (openjpeg.h)
April 26, 2007
+ [gdcm] Add basic steps on how to use CMake for building examples (README.cmake)
April 25, 2007
+ [FOD] Modification of the openjpeg.h file to avoid and ABI break with v1.1, removed the dangerous #IFDEF JPWL and added tcp_mct in cparameters.
April 23, 2007
+ [GB] Enable/disable image decoding in OPJViewer
April 12,2007
* [Parvatha] Fixed Error in tiftoimage(). Modification in convert.c.
April 10,2007
+ [Parvatha] Accepting "j2c" as format for Encoding and Decoding. Modification in image_to_j2k.c.
* [Parvatha] Modified imagetotif() to read images with signed data. Modification in convert.c.
April 5, 2007
! [FOD] fix.h optimized. Thanks a lot to Dzonatas <dzonatas at dzonux.net> !
! [FOD] dwt.c optimized. Thanks a lot to Dzonatas <dzonatas at dzonux.net> !
! [FOD] t1.c optimized. Thanks a lot to Callum Lerwick <seg at haxxed.com> !
April 4,2007
+ [Parvatha] Digital cinema compliance for 4K chosen by "-cinema4K" option. Modification in image_to_j2k.c.
+ [Parvatha] Bit rate limitation for each color component. Modification in image_to_j2k.c, t2.c.
* [Parvatha] Modified and tested Progression order change "-POC" option. Modification in image_to_j2k.c, j2k.c, pi.c.
+ [Parvatha] Function j2k_check_poc_val() to check for possible loss of packets in case of wrong POC declaration. Modification in j2k.c.
+ [Parvatha] Structure T2_MODE. This tells if the t2_encode_packets() is called during Threshold calculation or in Final pass. Modification in j2k.h, tcd.c
March 30, 2007
* [GB] OPJViewer should now work under Linux, at least with not big j2k files. Tested under Suse 10.1 64 bit.
March 29, 2007
* [Parvatha] Enable accepting file names with `-<2D> symbol .Modification getopt.c
* [Parvatha] Rsiz profile name generation to be STD_RSIZ for profiles which are not DCI compliant.Modification in image_to_j2k.c
! [Parvatha] renamed convert_progression_order to j2k_convert_progression_order. Modification j2k.c
* [Parvatha] Calculation of number of tile part in each tile in j2k_calculate_tp. Modification j2k.c
! [Parvatha] j2k_setup_encoder to set bit rate limitation for digital cinema compliance with quality option. Modification in j2k.c
* [Parvatha] Equation to check multiple tile precincts. Modification pi.c
! [Parvatha] array size generation of pi->include in pi_initialise_encode().Modification in pi.c
* [Parvatha] modification in pi_create_encode for tile part generation.Modification in pi.c
+ [Parvatha] In tcd_rateallocate a variable stable_threshold which holds the valid threshold value. This is used to avoid error in case of a wrong threshold value in the last iteration. Modification in tcd.c.
March 28, 2007
* [FOD] Fixed an historical bug in t1.c that leaded to the inclusion of useless 0xFF in the codestream. Thanks to Sylvain, Pascal and Parvatha !
March 27, 2007
+ [GB] Improved parsing in OPJViewer, as well some minor aesthetic modifications; support for image rendering with bit depths lower than 8 bits; can display an arbitrary frame of an MJ2 file (only in B/W, though); can reload a file; better resizing capabilities
* [GB] Following to Herv<72>'s suggestions, all the exit() calls, added by JPWL strict checking in t2.c and j2k.c, have been substituted with (object free'ing + opj_evt_message(EVT_ERROR) + return)
+ [GB] Added linking to TIFF library in the JPWL VC6 workspaces
March 23, 2007
* [antonin] Fixed Makefile.osx and changed Readme.osx accordingly
March 21, 2007
* [Parvatha] Fixed j2k_prog_order_list[]. Modifications in j2k.c.
* [Parvatha] Fixed t1_decode_cblks. Modifications in t1.c.
March 20, 2007
+ [Parvatha] Added feature for generation of tile parts. Modifications in image_to_j2k.c, openjpeg.c, j2k.c, pi.c
+ [Parvatha] Added function j2k_write_tlm(),to generate TLM marker for a Digital cinema compliant codestream. Modifications in j2k.c.
March 14, 2007
* [FOD] Fixed linux makefile, with help from David Fries and Guido
March 7, 2007
+ [Parvatha] Added option for Digital cinema profile compliant codestream. This can be chosen by "-cinema2K" or "-cinema4K" for a 2K and 4K compliance respectively. The feature for tileparts has not been implemented in this version. Modification in image_to_j2k.c
+ [Parvatha] Added the Digital Cinema profiles (CINEMA2K and CINEMA4K) to the list of profiles recognized in the codestream SIZ marker segment. Modification in openjpeg.h,j2k.c
+ [Parvatha] Added feature for constant quality within bitrate defined in Digital cinema standards. Modification in tcd.c
! [Parvatha] Modified the method of generation of buffer length. Modification in cio.c
March 1, 2007
* [FOD] Modified codec projects (*.dsp) and makefile to include the tiff library (modified codec/image_to_j2k.dsp codec/j2k_to_image.dsp and codec/makefile)
+ [GB] Zoom capability and decoder settings dialog in OPJViewer; modified JPWL library .dsp project in order to create a library with embedded JPWL functions
February 28, 2007
+ [Parvatha] Enabled compression of TIF image format to j2k by tifftoimage() and decompression of codestream to TIF image format using imagetotif(). Modifications in image_to_j2k.c, j2k_to_image.c, convert.c, convert.h
* [antonin] fixed a bug in context numerotation that prevented the RESET switch to work correctly : mqc_reset_enc in mqc.c
* [Fod] Corrected codec Makefile by adding the compilation of "compat/getopt.c"
February 27, 2007
* [Parvatha] Made get_file_format function more robust. Modifications in image_to_j2k.c, j2k_to_image.c, getopt.c, getopt.h
February 26, 2007
+ [Parvatha] Option to read images from a Folder whose path is specified in the Input parameters by "-ImgDir" along with output decod format specified by "-OutFor" . Modifications in image_to_j2k.c, j2k_to_image.c, getopt.c, getopt.h
+ [Parvatha] Enabling use of multi character input parameters in the codec. Modifications in image_to_j2k.c, j2k_to_image.c, getopt.c, getopt.h
----------------------
February 23, 2007
VERSION 1.1.1 RELEASED
----------------------
February 23, 2007
* [GB] Fixed a copy-and-paste type assignment error (bool instead of int) in the JPWL section of decoder parameters structure in openjpeg.h; minor type-casting in jpwl_lib.c. As a result, now OPJViewer should run correctly when built against the most current SVN trunk of LibOpenJPEG.lib
+ [GB] Linux makefile for the JPWL module; newlines at end of JPWL files
February 22, 2007
+ [FOD] Added the OPJViewer Module (/OPJViewer), developed by Giuseppe Baruffa of the university of Perugia
February 21, 2007
+ [FOD] Algorithmic optimizations in t1.c, thanks to Guido J. !
February 19, 2007
+ [FOD] Added OPJ_LIMIT_DECODING enabling us to limit the decoding to main header (modified openjpeg.c, openjpeg.h, j2k.c and j2k.h)
February 13, 2007
! [FOD] David Fries suggestions. In image_to_j2k and j2k_to_image, strncpy() functions: instead of specifying the path size macro, let the compiler read the length out of the array entry.
! [FOD] David Fries suggestions. Makefile modified. -fPIC flag used for 64-bit compilation. Move operation (rather than copy) for the dist library creation, and -p flag added.
January 31, 2007
! [FOD] Extra tokens at the end of #endif directive corrected in openjpeg.c, j2k.c and image_to_j2k.c -> no more warnings in linux compilation
! [FOD] Linux Makefile added for the codec
January 30, 2007
! [FOD] Use of OPJ_PATH_LEN (defined as 4096) to be the maximum allowed size for filenames instead of MAX_PATH which is not always defined. This caused some programs using OpenJPEG to crash. Modifications in openjpeg.h j2k_to_image.c and image_to_j2k.c
! [FOD] Correction of the syntax usage in MJ2_codec/mj2_to_frames.c
January 23, 2007
! [FOD] Modification in the context numbers, to reflect what has been specified in standard, in libopenjpeg/t1.h
December 07, 2006
+ [Giuseppe Baruffa] Antonin verified that the MacOS build suffered from a missing definition of the "min" macro; I've added this definition (properly #ifndef'ed) into both jpwl.h and rs.h
December 05, 2006
* [Giuseppe Baruffa] Better fix of the TPH EPBs bug in JPWL module
* [GB] Fixed the UEP bug in JPWL module; now, during a UEP specification, RS protection or CRC check can be switched off for selected range of packets, and consequently reswitched on without confusing the decoder
+ [GB] Added some lines in the help of JPWL_image_to_j2k, specifying that when using error protection on data packets, this must be paired with header protection, i.e. there cannot be packet protection without header protection
December 04, 2006
+ [Francois-Olivier Devaux] New tag: version1.0 (includes codec and libopenjpeg directories)
Total update of JPWL module
- [FOD] removed directories jpwl/decoder, jpwl/encoder, jpwl/decoder_02, jpwl/encoder_02
+ [FOD] added in JPWL directory crc.h, jpwl.h, rs.h, crc.c, jpwl.c, jpwl_lib.c, rs.c, JPWL_image_to_j2k.dsp, JPWL_j2k_to_image.dsp, LibOpenJPEG_JPWL.dsp, JPWL_image_to_j2k.dsw, JPWL_j2k_to_image.dsw
! [FOD] Modifications of libopenjpeg to integrate JPWL module (in libopenjpeg directory): j2k.c, j2k.h, openjpeg.c, openjpeg.h, opj_includes.g, t2.c
! [FOD] Modification of codec to integrate JPWL module (in codec directory): image_to_j2k.c, j2k_to_image.c
* [FOD] Corrected incorrect fprintf() formatting in codec/convert.c
* [FOD] Code optimization usinq vsprintf() command in libopenjpeg/event.c
* [Giuseppe Baruffa] Fixed a bug in TPH EPBs parameters: now, "last in current header" information is correctly signaled
October 31, 2006
* [Antonin] fixed a bug in the computation of the mantissa (mu)
+ [Antonin] added the ability to specify the rate as "float" (before : integer)
August 18, 2006
* [Antonin] fixed a bug in j2k_to_image.c, that prevented the -l option to work correctly.
August 4, 2006
* [Antonin] fixed a bug in pi.c, line 473, that appeared when more than 100 precincts were generated in a resolution level.
July 28, 2006
+ [Antonin Descampe] added a readme in /mj2 to warn people that it only works with opj0.97
July 21, 2006
* [Mathieu Malaterre] Install exe and lib and include correctly
* [Mathieu Malaterre] Fixed mem leaks and greyscale bmp
* [Mathieu Malaterre] Fix pgx name length + random memory access
! [Mathieu Malaterre] API is now const
March 19, 2006
* [Antonin] fixed a bug in t1.c that prevented in some cases a true lossless compression (thanks to Don Mimlitch for reporting this bug)
February 12, 2006
- [Herve Drolon] removed unneeded working variables in opj_tcd_t
February 04, 2006
* [galt] fixed a bug in codec/convert.c::imagetobmp
February 01, 2006
! [Herve Drolon] changed function definitions of INT and FIX modules to 'inline'
+ [Herve Drolon] added a VERSION resource to the DLL version of OpenJPEG
January 31, 2006
* [Mathieu Malaterre] Fix compilation using default openjpeg.dsw
* [Herve Drolon] fixed various minor warnings occuring under icc9 and bcc32
- [Mathieu Malaterre] Remove all references to OPJ_EXPORT, no declspec in header file anymore
+ [Mathieu Malaterre] Add a def.in file which is a template for Module Definition
+ [Herve Drolon] added MSVC project and compiler directives to build a 'standard' WIN32 DLL
! [Mathieu Malaterre] Update CMake to match the new shared lib system (no more def file)
January 27, 2006
* [Antonin Descampe] fixed a two initialization problems in t1.c and tcd.c
January 26, 2006
* [Herve Drolon] fixed various minor warnings occuring under gcc
* [__david__] fixed a segfault in codec/image_to_j2k.c & codec/j2k_to_image.c
* [__david__] fixed help option in codec/j2k_to_image & codec/image_to_j2k
January 25, 2006
! [Mathieu Malaterre] Sync with ITK repository, also add ref to doxygen
! [Mathieu Malaterre] Add a lot of comments on the CMake build system
! [Mathieu Malaterre] Fix MINGW32 and BORLAND compilation problems.
January 25, 2006
* [Antonin Descampe] fixed a problem in convert.c when multiple comments
+ [Antonin Descampe] added cmake files to the project
! [Antonin Descampe] fix.c : replaced "WIN32" by "_MSC_VER" for int64
+ [Antonin Descampe] added "OPJ_EXPORT" in openjpeg.h to generate shared lib with win32
! [Antonin Descampe] removed all CtrlM from files
January 24, 2006
! [Antonin Descampe] event.c : replaced "WIN32" by "_MSC_VER" for i2a
January 20, 2006
* [Antonin Descampe] fixed various minor warnings with gdcm patches
January 19, 2006
* [Herve Drolon] fixed a bug in jp2_read_ihdr (need to allocate jp2->comps)
January 18, 2006
* [Herve Drolon] changed the name of j2k_realloc to opj_realloc
* [Herve Drolon] fixed a bug in opj_cio_open when saving 48-bit images (wrong buffer size calculation)
December 8, 2005
* [Antonin Descampe] fixed a bug when specifying a rate '-r' => no distortion info was available in the index
* [Antonin Descampe] fixed a bug in t1_getwmsedec (stepsize was divided by 8192)
December 5, 2005 - 1.1.0

273
DllOpenJPEG.dsp Normal file
View File

@@ -0,0 +1,273 @@
# Microsoft Developer Studio Project File - Name="DllOpenJPEG" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
CFG=DllOpenJPEG - Win32 Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "DllOpenJPEG.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "DllOpenJPEG.mak" CFG="DllOpenJPEG - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "DllOpenJPEG - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE "DllOpenJPEG - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
MTL=midl.exe
RSC=rc.exe
!IF "$(CFG)" == "DllOpenJPEG - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release"
# PROP Intermediate_Dir "Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "DLLOPENJPEG_EXPORTS" /Yu"stdafx.h" /FD /c
# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "OPJ_EXPORTS" /FD /c
# SUBTRACT CPP /YX /Yc /Yu
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x40c /d "NDEBUG"
# ADD RSC /l 0x40c /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"Release/OpenJPEG.dll"
# Begin Special Build Tool
SOURCE="$(InputPath)"
PostBuild_Cmds=if not exist dist mkdir dist copy libopenjpeg\openjpeg.h dist copy Release\OpenJPEG.dll dist copy Release\OpenJPEG.lib dist
# End Special Build Tool
!ELSEIF "$(CFG)" == "DllOpenJPEG - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "DLLOPENJPEG_EXPORTS" /Yu"stdafx.h" /FD /GZ /c
# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "OPJ_EXPORTS" /FD /GZ /c
# SUBTRACT CPP /YX /Yc /Yu
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x40c /d "_DEBUG"
# ADD RSC /l 0x40c /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"Debug/OpenJPEGd.dll" /pdbtype:sept
# Begin Special Build Tool
SOURCE="$(InputPath)"
PostBuild_Cmds=if not exist dist mkdir dist copy libopenjpeg\openjpeg.h dist copy Debug\OpenJPEGd.dll dist copy Debug\OpenJPEGd.lib dist
# End Special Build Tool
!ENDIF
# Begin Target
# Name "DllOpenJPEG - Win32 Release"
# Name "DllOpenJPEG - Win32 Debug"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=.\libopenjpeg\bio.c
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\cio.c
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\dwt.c
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\event.c
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\image.c
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\j2k.c
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\j2k_lib.c
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\jp2.c
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\jpt.c
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\mct.c
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\mqc.c
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\openjpeg.c
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\pi.c
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\raw.c
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\t1.c
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\t2.c
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\tcd.c
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\tgt.c
# End Source File
# End Group
# Begin Group "Header Files"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# Begin Source File
SOURCE=.\libopenjpeg\bio.h
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\cio.h
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\dwt.h
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\event.h
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\fix.h
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\image.h
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\int.h
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\j2k.h
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\j2k_lib.h
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\jp2.h
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\jpt.h
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\mct.h
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\mqc.h
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\openjpeg.h
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\opj_includes.h
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\pi.h
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\raw.h
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\t1.h
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\t2.h
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\tcd.h
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\tgt.h
# End Source File
# End Group
# Begin Group "Resource Files"
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# Begin Source File
SOURCE=.\OpenJPEG.rc
# End Source File
# End Group
# End Target
# End Project

262
LibOpenJPEG.dsp Normal file
View File

@@ -0,0 +1,262 @@
# Microsoft Developer Studio Project File - Name="LibOpenJPEG" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Static Library" 0x0104
CFG=LibOpenJPEG - Win32 Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "LibOpenJPEG.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "LibOpenJPEG.mak" CFG="LibOpenJPEG - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "LibOpenJPEG - Win32 Release" (based on "Win32 (x86) Static Library")
!MESSAGE "LibOpenJPEG - Win32 Debug" (based on "Win32 (x86) Static Library")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
RSC=rc.exe
!IF "$(CFG)" == "LibOpenJPEG - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release"
# PROP Intermediate_Dir "Release"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "OPJ_STATIC" /FD /c
# SUBTRACT CPP /YX
# ADD BASE RSC /l 0x40c /d "NDEBUG"
# ADD RSC /l 0x40c /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
# ADD LIB32 /nologo
# Begin Special Build Tool
SOURCE="$(InputPath)"
PostBuild_Cmds=if not exist dist mkdir dist copy Release\LibOpenJPEG.lib dist copy libopenjpeg\openjpeg.h dist
# End Special Build Tool
!ELSEIF "$(CFG)" == "LibOpenJPEG - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "OPJ_STATIC" /FD /GZ /c
# SUBTRACT CPP /YX
# ADD BASE RSC /l 0x40c /d "_DEBUG"
# ADD RSC /l 0x40c /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
# ADD LIB32 /nologo /out:"Debug\LibOpenJPEGd.lib"
# Begin Special Build Tool
SOURCE="$(InputPath)"
PostBuild_Cmds=if not exist dist mkdir dist copy Debug\LibOpenJPEGd.lib dist copy libopenjpeg\openjpeg.h dist
# End Special Build Tool
!ENDIF
# Begin Target
# Name "LibOpenJPEG - Win32 Release"
# Name "LibOpenJPEG - Win32 Debug"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=libopenjpeg\bio.c
# End Source File
# Begin Source File
SOURCE=libopenjpeg\cio.c
# End Source File
# Begin Source File
SOURCE=libopenjpeg\dwt.c
# End Source File
# Begin Source File
SOURCE=libopenjpeg\event.c
# End Source File
# Begin Source File
SOURCE=libopenjpeg\image.c
# End Source File
# Begin Source File
SOURCE=libopenjpeg\j2k.c
# End Source File
# Begin Source File
SOURCE=libopenjpeg\j2k_lib.c
# End Source File
# Begin Source File
SOURCE=libopenjpeg\jp2.c
# End Source File
# Begin Source File
SOURCE=libopenjpeg\jpt.c
# End Source File
# Begin Source File
SOURCE=libopenjpeg\mct.c
# End Source File
# Begin Source File
SOURCE=libopenjpeg\mqc.c
# End Source File
# Begin Source File
SOURCE=libopenjpeg\openjpeg.c
# End Source File
# Begin Source File
SOURCE=libopenjpeg\pi.c
# End Source File
# Begin Source File
SOURCE=libopenjpeg\raw.c
# End Source File
# Begin Source File
SOURCE=libopenjpeg\t1.c
# End Source File
# Begin Source File
SOURCE=libopenjpeg\t2.c
# End Source File
# Begin Source File
SOURCE=libopenjpeg\tcd.c
# End Source File
# Begin Source File
SOURCE=libopenjpeg\tgt.c
# End Source File
# End Group
# Begin Group "Header Files"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# Begin Source File
SOURCE=libopenjpeg\bio.h
# End Source File
# Begin Source File
SOURCE=libopenjpeg\cio.h
# End Source File
# Begin Source File
SOURCE=libopenjpeg\dwt.h
# End Source File
# Begin Source File
SOURCE=libopenjpeg\event.h
# End Source File
# Begin Source File
SOURCE=libopenjpeg\fix.h
# End Source File
# Begin Source File
SOURCE=libopenjpeg\image.h
# End Source File
# Begin Source File
SOURCE=libopenjpeg\int.h
# End Source File
# Begin Source File
SOURCE=libopenjpeg\j2k.h
# End Source File
# Begin Source File
SOURCE=libopenjpeg\j2k_lib.h
# End Source File
# Begin Source File
SOURCE=libopenjpeg\jp2.h
# End Source File
# Begin Source File
SOURCE=libopenjpeg\jpt.h
# End Source File
# Begin Source File
SOURCE=libopenjpeg\mct.h
# End Source File
# Begin Source File
SOURCE=libopenjpeg\mqc.h
# End Source File
# Begin Source File
SOURCE=libopenjpeg\openjpeg.h
# End Source File
# Begin Source File
SOURCE=libopenjpeg\opj_includes.h
# End Source File
# Begin Source File
SOURCE=libopenjpeg\pi.h
# End Source File
# Begin Source File
SOURCE=libopenjpeg\raw.h
# End Source File
# Begin Source File
SOURCE=libopenjpeg\t1.h
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\t1_luts.h
# End Source File
# Begin Source File
SOURCE=libopenjpeg\t2.h
# End Source File
# Begin Source File
SOURCE=libopenjpeg\tcd.h
# End Source File
# Begin Source File
SOURCE=libopenjpeg\tgt.h
# End Source File
# End Group
# End Target
# End Project

41
LibOpenJPEG.dsw Normal file
View File

@@ -0,0 +1,41 @@
Microsoft Developer Studio Workspace File, Format Version 6.00
# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
###############################################################################
Project: "DllOpenJPEG"=.\DllOpenJPEG.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
}}}
###############################################################################
Project: "LibOpenJPEG"=.\LibOpenJPEG.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
}}}
###############################################################################
Global:
Package=<5>
{{{
}}}
Package=<3>
{{{
}}}
###############################################################################

78
Makefile Normal file
View File

@@ -0,0 +1,78 @@
# Linux makefile for OpenJPEG
VER_MAJOR = 2
VER_MINOR = 1.2.0
SRCS = ./libopenjpeg/bio.c ./libopenjpeg/cio.c ./libopenjpeg/dwt.c ./libopenjpeg/event.c ./libopenjpeg/image.c ./libopenjpeg/j2k.c ./libopenjpeg/j2k_lib.c ./libopenjpeg/jp2.c ./libopenjpeg/jpt.c ./libopenjpeg/mct.c ./libopenjpeg/mqc.c ./libopenjpeg/openjpeg.c ./libopenjpeg/pi.c ./libopenjpeg/raw.c ./libopenjpeg/t1.c ./libopenjpeg/t2.c ./libopenjpeg/tcd.c ./libopenjpeg/tgt.c
INCLS = ./libopenjpeg/bio.h ./libopenjpeg/cio.h ./libopenjpeg/dwt.h ./libopenjpeg/event.h ./libopenjpeg/fix.h ./libopenjpeg/image.h ./libopenjpeg/int.h ./libopenjpeg/j2k.h ./libopenjpeg/j2k_lib.h ./libopenjpeg/jp2.h ./libopenjpeg/jpt.h ./libopenjpeg/mct.h ./libopenjpeg/mqc.h ./libopenjpeg/openjpeg.h ./libopenjpeg/pi.h ./libopenjpeg/raw.h ./libopenjpeg/t1.h ./libopenjpeg/t2.h ./libopenjpeg/tcd.h ./libopenjpeg/tgt.h ./libopenjpeg/opj_includes.h
INCLUDE = -Ilibopenjpeg
# General configuration variables:
CC = gcc
AR = ar
PREFIX = /usr
INSTALL_LIBDIR = $(PREFIX)/lib
INSTALL_INCLUDE = $(PREFIX)/include
# Converts cr/lf to just lf
DOS2UNIX = dos2unix
COMPILERFLAGS = -O3 -fPIC
LIBRARIES = -lstdc++
MODULES = $(SRCS:.c=.o)
CFLAGS = $(COMPILERFLAGS) $(INCLUDE)
TARGET = openjpeg
STATICLIB = lib$(TARGET).a
SHAREDLIB = lib$(TARGET)-$(VER_MAJOR).$(VER_MINOR).so
LIBNAME = lib$(TARGET).so.$(VER_MAJOR)
default: all
all: OpenJPEG
dist: OpenJPEG
install -d dist
install -m 644 $(STATICLIB) dist
install -m 755 $(SHAREDLIB) dist
ln -sf $(SHAREDLIB) dist/$(LIBNAME)
install libopenjpeg/openjpeg.h dist
dos2unix:
@$(DOS2UNIX) $(SRCS) $(INCLS)
OpenJPEG: $(STATICLIB) $(SHAREDLIB)
.c.o:
$(CC) $(CFLAGS) -c $< -o $@
$(STATICLIB): $(MODULES)
$(AR) r $@ $(MODULES)
$(SHAREDLIB): $(MODULES)
$(CC) -s -shared -Wl,-soname,$(LIBNAME) -o $@ $(MODULES) $(LIBRARIES)
install: OpenJPEG
install -d '$(DESTDIR)$(INSTALL_LIBDIR)' '$(DESTDIR)$(INSTALL_INCLUDE)'
install -m 644 -o root -g root $(STATICLIB) '$(DESTDIR)$(INSTALL_LIBDIR)'
ranlib '$(DESTDIR)$(INSTALL_LIBDIR)/$(STATICLIB)'
install -m 755 -o root -g root $(SHAREDLIB) '$(DESTDIR)$(INSTALL_LIBDIR)'
ln -sf $(SHAREDLIB) '$(DESTDIR)$(INSTALL_LIBDIR)/$(LIBNAME)'
install -m 644 -o root -g root libopenjpeg/openjpeg.h '$(DESTDIR)$(INSTALL_INCLUDE)'
-ldconfig
clean:
rm -rf core dist/ u2dtmp* $(MODULES) $(STATICLIB) $(SHAREDLIB) $(LIBNAME)
osx:
make -f Makefile.osx
osxinstall:
make -f Makefile.osx install
osxclean:
make -f Makefile.osx clean

66
Makefile.osx Normal file
View File

@@ -0,0 +1,66 @@
# MacOSX makefile for OpenJPEG
VER_MAJOR = 1
VER_MINOR = 1.1
SRCS = ./libopenjpeg/bio.c ./libopenjpeg/cio.c ./libopenjpeg/dwt.c ./libopenjpeg/event.c ./libopenjpeg/image.c ./libopenjpeg/j2k.c ./libopenjpeg/j2k_lib.c ./libopenjpeg/jp2.c ./libopenjpeg/jpt.c ./libopenjpeg/mct.c ./libopenjpeg/mqc.c ./libopenjpeg/openjpeg.c ./libopenjpeg/pi.c ./libopenjpeg/raw.c ./libopenjpeg/t1.c ./libopenjpeg/t2.c ./libopenjpeg/tcd.c ./libopenjpeg/tgt.c
INCLS = ./libopenjpeg/bio.h ./libopenjpeg/cio.h ./libopenjpeg/dwt.h ./libopenjpeg/event.h ./libopenjpeg/fix.h ./libopenjpeg/image.h ./libopenjpeg/int.h ./libopenjpeg/j2k.h ./libopenjpeg/j2k_lib.h ./libopenjpeg/jp2.h ./libopenjpeg/jpt.h ./libopenjpeg/mct.h ./libopenjpeg/mqc.h ./libopenjpeg/openjpeg.h ./libopenjpeg/pi.h ./libopenjpeg/raw.h ./libopenjpeg/t1.h ./libopenjpeg/t2.h ./libopenjpeg/tcd.h ./libopenjpeg/tgt.h ./libopenjpeg/opj_includes.h
INCLUDE = -Ilibopenjpeg
# General configuration variables:
CC = gcc
LIBTOOLSTAT = libtool
LIBTOOLDYN = gcc
PREFIX = /usr
INSTALL_LIBDIR = $(PREFIX)/lib
INSTALL_INCLUDE = $(PREFIX)/include
COMPILERFLAGS = -O3 -fPIC
MODULES = $(SRCS:.c=.o)
CFLAGS = $(COMPILERFLAGS) $(INCLUDE)
TARGET = openjpeg
STATICLIB = lib$(TARGET).a
SHAREDLIB = lib$(TARGET)-$(VER_MAJOR).$(VER_MINOR).dylib
LIBNAME = lib$(TARGET).dylib
default: all
all: OpenJPEG
dos2unix:
@$(DOS2UNIX) $(SRCS) $(INCLS)
dist: OpenJPEG
install -d dist
install -m 644 $(STATICLIB) dist
install -m 755 $(SHAREDLIB) dist
ln -sf $(SHAREDLIB) dist/$(LIBNAME)
install libopenjpeg/openjpeg.h dist
OpenJPEG: $(STATICLIB) $(SHAREDLIB)
.c.o:
$(CC) $(CFLAGS) -c $< -o $@
$(STATICLIB): $(MODULES)
$(LIBTOOLSTAT) -o $@ $(MODULES)
$(SHAREDLIB): $(MODULES)
$(LIBTOOLDYN) -dynamiclib -o $@ $(MODULES)
install:
install -d '$(DESTDIR)$(INSTALL_LIBDIR)' '$(DESTDIR)$(INSTALL_INCLUDE)'
install -m 644 -o root -g wheel $(STATICLIB) '$(DESTDIR)$(INSTALL_LIBDIR)'
ranlib '$(DESTDIR)$(INSTALL_LIBDIR)/$(STATICLIB)'
install -m 755 -o root -g wheel $(SHAREDLIB) '$(DESTDIR)$(INSTALL_LIBDIR)'
ln -sf $(SHAREDLIB) '$(DESTDIR)$(INSTALL_LIBDIR)/$(LIBNAME)'
install -m 644 -o root -g wheel ./libopenjpeg/openjpeg.h '$(DESTDIR)$(INSTALL_INCLUDE)'
clean:
rm -rf core dist/ u2dtmp* $(MODULES) $(STATICLIB) $(SHAREDLIB) $(LIBNAME)

41
OPJViewer/Makefile Normal file
View File

@@ -0,0 +1,41 @@
# Makefile for the main JPWL OpenJPEG codecs: JPWL_ j2k_to_image and JPWL_image_to_j2k
# General configuration variables:
CC = $(shell wx-config-2.8 --cxx)
AR = ar
CFLAGS = -DUSE_JPWL -DwxUSE_LIBOPENJPEG -DwxUSE_GUI=1 -DOPJ_STATIC -DOPJ_HTMLABOUT $(shell wx-config-2.8 --cxxflags) # -g -p -pg -DUSE_JPWL
OPJV_SRCS = source/imagj2k.cpp source/imagmj2.cpp source/wxj2kparser.cpp source/imagjp2.cpp source/OPJViewer.cpp source/wxjp2parser.cpp
MODULES = $(OPJV_SRCS:.cpp=.o)
all: opjviewer lib
.cpp.o:
$(CC) $(CFLAGS) -c $< -o $@
lib:
cd ../jpwl; make
opjviewer: $(OPJV_SRCS) lib
$(CC) $(CFLAGS) -I .. $(OPJV_SRCS) -o OPJViewer -L ../jpwl -lopenjpeg_JPWL -lm -lstdc++ -ltiff $(shell wx-config-2.8 --libs)
clean:
rm -f OPJViewer *.o *.a
cd ../libopenjpeg; rm -f *.o
#.cpp.o :
# $(CXX) -g -c `wx-config-2.8 --cxxflags` -I ../.. -D wxUSE_LIBOPENJPEG -D wxHACK_BOOLEAN -o $@ $<
#all: $(PROGRAM)
#$(PROGRAM): $(OBJECTS)
# $(CXX) -o $(PROGRAM) $(OBJECTS) -lopenjpeg -L ../.. `wx-config-2.8 --libs`
#clean:
# rm -f *.o $(PROGRAM)

193
OPJViewer/OPJViewer.dsp Normal file
View File

@@ -0,0 +1,193 @@
# Microsoft Developer Studio Project File - Name="OPJViewer" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
CFG=OPJVIEWER - WIN32 RELEASE
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "OPJViewer.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "OPJViewer.mak" CFG="OPJVIEWER - WIN32 RELEASE"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "OPJViewer - Win32 Release" (based on "Win32 (x86) Console Application")
!MESSAGE "OPJViewer - Win32 Debug" (based on "Win32 (x86) Console Application")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
RSC=rc.exe
!IF "$(CFG)" == "OPJViewer - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release"
# PROP Intermediate_Dir "Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD CPP /nologo /G6 /MD /W3 /GX /O2 /I "c:\programmi\wxWidgets-2.8.0\lib\vc_lib\msw" /I "c:\programmi\wxWidgets-2.8.0\include" /I ".." /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_WINDOWS" /D WINVER=0x400 /D "_MT" /D wxUSE_GUI=1 /D "wxUSE_LIBOPENJPEG" /D "OPJ_STATIC" /D "USE_JPWL" /D "OPJ_HTMLABOUT" /D "OPJ_MANYFORMATS" /FR /FD /c
# ADD BASE RSC /l 0x410 /d "NDEBUG"
# ADD RSC /l 0x409 /i "c:\programmi\wxWidgets-2.8.0\include" /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib comctl32.lib rpcrt4.lib wsock32.lib wxzlib.lib wxregex.lib wxpng.lib wxjpeg.lib wxbase28.lib wxmsw28_core.lib wxmsw28_html.lib wxmsw28_adv.lib wxmsw28_core.lib wxbase28.lib wxtiff.lib wxjpeg.lib wxpng.lib wxzlib.lib wxregex.lib wxexpat.lib LibOpenJPEG_JPWL.lib /nologo /subsystem:windows /machine:I386 /nodefaultlib:"libcmt.lib" /libpath:"c:\programmi\wxWidgets-2.8.0\lib\vc_lib" /libpath:"..\jpwl\Release" /IGNORE:4089
# SUBTRACT LINK32 /pdb:none
!ELSEIF "$(CFG)" == "OPJViewer - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "OPJViewer___Win32_Debug"
# PROP BASE Intermediate_Dir "OPJViewer___Win32_Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "d:\Programmi\wxWidgets-2.8.0\INCLUDE" /I "d:\programmi\wxWidgets-2.8.0\lib\vc_lib\msw" /I "d:\programmi\wxWidgets-2.8.0\include" /I ".." /D "_DEBUG" /D "__WXDEBUG__" /D WXDEBUG=1 /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_WINDOWS" /D WINVER=0x400 /D "_MT" /D wxUSE_GUI=1 /D "wxUSE_LIBOPENJPEG" /D "OPJ_STATIC" /D "USE_JPWL" /D "OPJ_HTMLABOUT" /FR /FD /GZ /c
# ADD BASE RSC /l 0x410 /d "_DEBUG"
# ADD RSC /l 0x410 /i "d:\programmi\wxWidgets-2.8.0\include" /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib comctl32.lib rpcrt4.lib wsock32.lib wxzlibd.lib wxregexd.lib wxpngd.lib wxjpegd.lib wxtiffd.lib wxbase28d.lib wxmsw28d_core.lib wxmsw28d_html.lib wxmsw28d_adv.lib LibOpenJPEG_JPWLd.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcmtd.lib" /pdbtype:sept /libpath:"d:\programmi\wxWidgets-2.8.0\lib\vc_lib" /libpath:"..\jpwl\Debug"
# SUBTRACT LINK32 /pdb:none
!ENDIF
# Begin Target
# Name "OPJViewer - Win32 Release"
# Name "OPJViewer - Win32 Debug"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=.\source\imagj2k.cpp
# End Source File
# Begin Source File
SOURCE=.\source\imagjp2.cpp
# End Source File
# Begin Source File
SOURCE=.\source\imagjpeg2000.cpp
# PROP Exclude_From_Build 1
# End Source File
# Begin Source File
SOURCE=.\source\imagmj2.cpp
# End Source File
# Begin Source File
SOURCE=.\source\OPJViewer.cpp
# End Source File
# Begin Source File
SOURCE=.\source\wxj2kparser.cpp
# End Source File
# Begin Source File
SOURCE=.\source\wxjp2parser.cpp
# End Source File
# End Group
# Begin Group "Header Files"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# Begin Source File
SOURCE=.\source\about_htm.h
# End Source File
# Begin Source File
SOURCE=.\source\imagj2k.h
# End Source File
# Begin Source File
SOURCE=.\source\imagjp2.h
# End Source File
# Begin Source File
SOURCE=.\source\imagmj2.h
# End Source File
# Begin Source File
SOURCE=.\source\OPJViewer.h
# End Source File
# End Group
# Begin Group "Resource Files"
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# Begin Source File
SOURCE=.\source\icon1.xpm
# End Source File
# Begin Source File
SOURCE=.\source\icon2.xpm
# End Source File
# Begin Source File
SOURCE=.\source\icon3.xpm
# End Source File
# Begin Source File
SOURCE=.\source\icon4.xpm
# End Source File
# Begin Source File
SOURCE=.\source\icon5.xpm
# End Source File
# Begin Source File
SOURCE=.\source\opj_logo.xpm
# End Source File
# Begin Source File
SOURCE=.\source\OPJChild.ico
# End Source File
# Begin Source File
SOURCE=.\source\OPJChild16.xpm
# End Source File
# Begin Source File
SOURCE=.\source\OPJViewer.ico
# End Source File
# Begin Source File
SOURCE=.\source\OPJViewer.rc
# End Source File
# Begin Source File
SOURCE=.\source\OPJViewer16.xpm
# End Source File
# End Group
# End Target
# End Project

44
OPJViewer/OPJViewer.dsw Normal file
View File

@@ -0,0 +1,44 @@
Microsoft Developer Studio Workspace File, Format Version 6.00
# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
###############################################################################
Project: "LibOpenJPEG_JPWL"=..\jpwl\LibOpenJPEG_JPWL.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
}}}
###############################################################################
Project: "OPJViewer"=.\OPJViewer.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
Begin Project Dependency
Project_Dep_Name LibOpenJPEG_JPWL
End Project Dependency
}}}
###############################################################################
Global:
Package=<5>
{{{
}}}
Package=<3>
{{{
}}}
###############################################################################

44
OPJViewer/OPJViewer.iss Normal file
View File

@@ -0,0 +1,44 @@
; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
[Setup]
AppName=OPJViewer
AppVerName=OPJViewer 0.3 alpha
AppPublisher=OpenJPEG
AppPublisherURL=http://www.openjpeg.org
AppSupportURL=http://www.openjpeg.org
AppUpdatesURL=http://www.openjpeg.org
DefaultDirName={pf}\OPJViewer
DefaultGroupName=OPJViewer
OutputDir=setup
OutputBaseFilename=OPJViewer03alpha_setup
Compression=lzma
SolidCompression=true
InfoBeforeFile=source\readmebefore.txt
InfoAfterFile=source\readmeafter.txt
LicenseFile=source\license.txt
VersionInfoVersion=0.3.0.0
VersionInfoCompany=OpenJPEG
VersionInfoDescription=JPEG 2000 viewer
ShowLanguageDialog=yes
SetupIconFile=source\OPJViewer.ico
[Languages]
Name: english; MessagesFile: compiler:Default.isl
[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked
[Files]
Source: Release\OPJViewer.exe; DestDir: {app}; Flags: ignoreversion
;Source: about\about.htm; DestDir: {app}/about; Flags: ignoreversion
;Source: about\opj_logo.png; DestDir: {app}/about; Flags: ignoreversion
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
[Icons]
Name: {group}\OPJViewer; Filename: {app}\OPJViewer.exe; WorkingDir: {app}; IconIndex: 0
Name: {group}\{cm:UninstallProgram,OPJViewer}; Filename: {uninstallexe}
Name: {userdesktop}\OPJViewer; Filename: {app}\OPJViewer.exe; Tasks: desktopicon; WorkingDir: {app}; IconIndex: 0
[Run]
Filename: {app}\OPJViewer.exe; Description: {cm:LaunchProgram,OPJViewer}; Flags: nowait postinstall skipifsilent; WorkingDir: {app}

101
OPJViewer/Readme.txt Normal file
View File

@@ -0,0 +1,101 @@
===============================================================================
JPEG2000 Visualization Software - OPJViewer
Version 0.1 alpha
===============================================================================
1. Scope
=============
This document describes the installation and use of the OPJViewer in the framework of OpenJPEG library.
This implementation has been developed using the OpenJPEG library as decoding engine and wxWidgets 2.8.0 as GUI engine.
If you find some bugs or if you have problems using the viewer, please send an e-mail to jpwl@diei.unipg.it
2. Installing the viewer
==========================
There are two options available, at the moment:
a) compile from source code
b) download a precompiled binary.
In order to use option a), it is mandatory to have compiled and built the LibOpenJPEG_JPWL library and the wxWidgets 2.8.0 framework (you have to download it from http://www.wxwidgets.org/ and compile the wx* libraries).
2.1. Compiling the source code in Windows
-------------------------------------------
The steps required to compile the viewer under windows are:
a) Download at least the libopenjpeg, jpwl, and opjviewer folders from the SVN trunk.
b) Open the OPJViewer.dsw workspace with Visual C++ 6 and activate the "OPJViewer - Win32 Release" configuration.
c) In the configuration settings, go to the C++ tab and modify the wxWidgets paths in order to reflect your wx* install configuration (Preprocessor -> Additional include directories): simply update each instance of the two wx paths, do not remove or add them.
d) In the configuration settings, go to the Link tab and modify the wxWidgets path in order to reflect your wx* install configuration (Input -> Additional library path): simply update the wx path.
e) In the configuration settings, go to the Resources tab and modify the wxWidgets path in order to reflect your wx* install configuration (Additional resource include directories): simply update the wx path.
f) Build!
g) Run!
h) (OPTIONAL) Prepare an installer by compiling the InnoSetup script OPJViewer.iss (you need to download InnoSetup from http://www.jrsoftware.org/isinfo.php).
2.2. Compiling the source code in Unix-like systems
-----------------------------------------------------
The porting is possible and under way.
3. General information on the viewer
====================================
This viewer is conceived to open and display information and image content of J2K, JP2,
and MJ2 files.
The viewer application interface is divided into three main panels:
- a browsing pane;
- a viewing pane;
- a log/peek pane.
The browsing pane will present the markers or boxes hierarchy, with position (byte number where marker/box starts and stops) and length information (i.e., inner length as signalled by marker/box and total length, with marker/box sign included), in the following form:
filename
|
|_ #000: Marker/Box short name (Hex code)
| |
| |_ *** Marker/Box long name ***
| |_ startbyte > stopbyte, inner_length + marker/box sign length (total length)
| |_ Additional info, depending on the marker/box type
| |_ ...
|
|_ #001: Marker/Box short name (Hex code)
| |
| |_ ...
|
...
The viewing pane will display the decoded image contained in the JPEG 2000 file.
It should display correctly images as large as 4000x2000, provided that a couple of GB of RAM are available. Nothing is known about the display of larger sizes: let us know if you manage to get it working.
The log/peek pane is shared among two different subpanels:
- the log panel will report a lot of debugging info coming out from the wx GUI as well as from the openjpeg library
- the peek pane tries to give a peek on the codestream/file portion which is currently selected in the browsing pane. It shows both hex and ascii values corresponding to the marker/box section.
4. Known bugs and limitations
===============================
4.1. Bugs
-----------
*
4.2. Limitations
------------------
* For mj2 files, rendering is only in B/W

36
OPJViewer/about/about.htm Normal file
View File

@@ -0,0 +1,36 @@
<html>
<body bgcolor="#FFFFFF">
<table cellspacing=7 cellpadding=1 border=0 width="100%">
<tr>
<td rowspan=3 valign=top align=center width=70>
<img src="opj_logo.png"><br><br>
</td>
<td align=center>
<font size=+2 color="#000000"><b>OPJViewer v0.2 alpha</b></font><br>
<font size=+0 color="#000000"><b>A JPEG 2000 image viewer</b></font>
</td>
</tr>
<tr height=3 valign=center>
<td valign=center bgcolor=#cc3300></td>
</tr>
<tr>
<td align=justify>
<center><font size=+0 color="#000000"><a href="http://www.openjpeg.org/">OpenJPEG</a></font></center>
<font size=-1 color="#000000">The OpenJPEG library is an open-source JPEG 2000 codec written in C language.
In addition to the basic codec, various other features are under development,
among them the JP2 and MJ2 (Motion JPEG 2000) file formats, an indexing tool
useful for the JPIP protocol, JPWL-tools for error-resilience, ...</font>
</td>
</tr>
<tr>
<td colspan=2 bgcolor="#CC3300" height=3 valign=center></td>
</tr>
<tr>
<td colspan=2>
<font size=-2 color="#444444">OpenJPEG is &copy; 2002-2007 <a href="http://www.tele.ucl.ac.be/">TELE</a> - <a href="http://www.uclouvain.be/">Universit<EFBFBD> Catholique de Louvain</a></font><br>
<font size=-2 color="#444444">OPJViewer is also &copy; 2005-2007 <a href="http://dsplab.diei.unipg.it/">DSPLab</a> - <a href="http://www.unipg.it/">Universit<EFBFBD> degli studi di Perugia</a></font>
</td>
</tr>
</table>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -0,0 +1,28 @@
/* XPM */
static char *OPJChild16[] = {
/* columns rows colors chars-per-pixel */
"16 16 6 1",
" c black",
". c #008000",
"X c red",
"o c #800080",
"O c gray100",
"+ c None",
/* pixels */
"++++++++++++++++",
"+OOOOOOOOOOOOOO+",
"+OooooooooooooO+",
"+OooooooooooooO+",
"+OooOOOOOOOOOoO+",
"+OooO.......OoO+",
"+OooO.......OoO+",
"+OooO..OOO..OoO+",
"+OooO..OXO..OoO+",
"+OooO..OOO..OoO+",
"+OooO.......OoO+",
"+OooO.......OoO+",
"+OooOOOOOOOOOoO+",
"+OooooooooooooO+",
"+OOOOOOOOOOOOOO+",
"++++++++++++++++"
};

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,659 @@
/*
* Copyright (c) 2007, Digital Signal Processing Laboratory, Universit<69> degli studi di Perugia (UPG), Italy
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
/////////////////////////////////////////////////////////////////////////////
// Name: sashtest.h
// Purpose: Layout window/sash sample
// Author: Julian Smart
// Modified by:
// Created: 04/01/98
// RCS-ID: $Id: sashtest.h,v 1.5 2005/06/02 12:04:24 JS Exp $
// Copyright: (c) Julian Smart
// Licence: wxWindows license
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// Name: treectrl.h
// Purpose: wxTreeCtrl sample
// Author: Julian Smart
// Modified by:
// Created: 04/01/98
// RCS-ID: $Id: treetest.h,v 1.50 2006/11/04 11:26:51 VZ Exp $
// Copyright: (c) Julian Smart
// Licence: wxWindows license
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// Name: dialogs.h
// Purpose: Common dialogs demo
// Author: Julian Smart
// Modified by: ABX (2004) - adjustementd for conditional building
// Created: 04/01/98
// RCS-ID: $Id: dialogs.h,v 1.50 2006/10/08 14:12:59 VZ Exp $
// Copyright: (c) Julian Smart
// Licence: wxWindows license
/////////////////////////////////////////////////////////////////////////////
#ifndef __OPJ_VIEWER_H__
#define __OPJ_VIEWER_H__
// For compilers that support precompilation, includes "wx/wx.h".
#include "wx/wxprec.h"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#ifndef WX_PRECOMP
#include "wx/wx.h"
#include "wx/mdi.h"
#endif
#include "wx/toolbar.h"
#include "wx/laywin.h"
#include "wx/treectrl.h"
#include "icon1.xpm"
#include "icon2.xpm"
#include "icon3.xpm"
#include "icon4.xpm"
#include "icon5.xpm"
#include "wx/filedlg.h"
#include "wx/toolbar.h"
#include <wx/filename.h>
#include <wx/busyinfo.h>
#include <wx/cmdline.h>
#include <wx/file.h>
#include "wx/notebook.h"
#include <wx/numdlg.h>
#include "wx/propdlg.h"
#include "wx/spinctrl.h"
#include <wx/dnd.h>
#include "wx/wxhtml.h"
#include "wx/statline.h"
#include <wx/fs_mem.h>
#include <wx/imaglist.h>
#include "libopenjpeg/openjpeg.h"
#include "imagj2k.h"
#include "imagjp2.h"
#include "imagmj2.h"
#ifdef __WXMSW__
typedef unsigned __int64 int8byte;
#endif // __WXMSW__
#ifdef __WXGTK__
typedef unsigned long long int8byte;
#endif // __WXGTK__
#define USE_GENERIC_TREECTRL 0
#define USE_PENCIL_ON_CANVAS 0
#if USE_GENERIC_TREECTRL
#include "wx/generic/treectlg.h"
#ifndef wxTreeCtrl
#define wxTreeCtrl wxGenericTreeCtrl
#define sm_classwxTreeCtrl sm_classwxGenericTreeCtrl
#endif
#endif
#define OPJ_APPLICATION wxT("OPJViewer")
#define OPJ_APPLICATION_NAME wxT("OpenJPEG Viewer")
#define OPJ_APPLICATION_VERSION wxT("0.3 alpha")
#define OPJ_APPLICATION_TITLEBAR OPJ_APPLICATION_NAME wxT(" ") OPJ_APPLICATION_VERSION
#define OPJ_APPLICATION_COPYRIGHT wxT("(C) 2007, Giuseppe Baruffa")
#ifdef __WXMSW__
#define OPJ_APPLICATION_PLATFORM wxT("Windows")
#endif
#ifdef __WXGTK__
#define OPJ_APPLICATION_PLATFORM wxT("Linux")
#endif
#define OPJ_CANVAS_BORDER 10
#define OPJ_CANVAS_COLOUR *wxWHITE
class OPJDecoThread;
class OPJParseThread;
WX_DEFINE_ARRAY_PTR(wxThread *, wxArrayThread);
class OPJChildFrame;
//////////////////////////////////
// this is our main application //
//////////////////////////////////
class OPJViewerApp: public wxApp
{
// public methods and variables
public:
// class constructor
OPJViewerApp() { m_showImages = true; m_showButtons = false; }
// other methods
bool OnInit(void);
void SetShowImages(bool show) { m_showImages = show; }
bool ShowImages() const { return m_showImages; }
void ShowCmdLine(const wxCmdLineParser& parser);
// all the threads currently alive - as soon as the thread terminates, it's
// removed from the array
wxArrayThread m_deco_threads, m_parse_threads;
// crit section protects access to all of the arrays below
wxCriticalSection m_deco_critsect, m_parse_critsect;
// semaphore used to wait for the threads to exit, see OPJFrame::OnQuit()
wxSemaphore m_deco_semAllDone, m_parse_semAllDone;
// the last exiting thread should post to m_semAllDone if this is true
// (protected by the same m_critsect)
bool m_deco_waitingUntilAllDone, m_parse_waitingUntilAllDone;
// the list of all filenames written in the command line
wxArrayString m_filelist;
// displaying engine parameters
int m_resizemethod;
// decoding engine parameters
bool m_enabledeco;
int m_reducefactor, m_qualitylayers, m_components, m_framenum;
#ifdef USE_JPWL
bool m_enablejpwl;
int m_expcomps, m_maxtiles;
#endif // USE_JPWL
// private methods and variables
private:
bool m_showImages, m_showButtons;
};
DECLARE_APP(OPJViewerApp)
///////////////////////////////////////////
// this canvas is used to draw the image //
///////////////////////////////////////////
class OPJCanvas: public wxScrolledWindow
{
// public methods and variables
public:
// class constructor
OPJCanvas(wxFileName fname, wxWindow *parent, const wxPoint& pos, const wxSize& size);
virtual void OnDraw(wxDC& dc);
void OnEvent(wxMouseEvent& event);
void WriteText(const wxString& text) {
#ifndef __WXGTK__
wxMutexGuiEnter();
#endif //__WXGTK__
wxLogMessage(text);
#ifndef __WXGTK__
wxMutexGuiLeave();
#endif //__WXGTK__
}
OPJDecoThread *CreateDecoThread(void);
OPJChildFrame *m_childframe;
wxBitmap m_image, m_image100;
wxFileName m_fname;
long m_zooml;
DECLARE_EVENT_TABLE()
};
///////////////////////////////////////////////////
// the data associated to each tree leaf or node //
///////////////////////////////////////////////////
class OPJMarkerData : public wxTreeItemData
{
// public methods and variables
public:
// class constructor
OPJMarkerData(const wxString& desc, const wxString& fname = wxT(""), wxFileOffset start = 0, wxFileOffset length = 0) : m_desc(desc), m_filestring(fname) { m_start = start; m_length = length; }
void ShowInfo(wxTreeCtrl *tree);
const wxChar *GetDesc1() const { return m_desc.c_str(); }
const wxChar *GetDesc2() const { return m_filestring.c_str(); }
wxFileOffset m_start, m_length;
// private methods and variables
private:
wxString m_desc;
wxString m_filestring;
};
class OPJMarkerTree : public wxTreeCtrl
{
public:
enum
{
TreeCtrlIcon_File,
TreeCtrlIcon_FileSelected,
TreeCtrlIcon_Folder,
TreeCtrlIcon_FolderSelected,
TreeCtrlIcon_FolderOpened
};
OPJMarkerTree() { };
OPJMarkerTree(wxWindow *parent, OPJChildFrame *subframe, wxFileName fname, wxString name, const wxWindowID id,
const wxPoint& pos, const wxSize& size,
long style);
virtual ~OPJMarkerTree(){};
OPJParseThread *CreateParseThread(wxTreeItemId parentid = 0x00, OPJChildFrame *subframe = NULL);
void WriteText(const wxString& text) { wxMutexGuiEnter(); wxLogMessage(text); wxMutexGuiLeave(); }
wxFileName m_fname;
wxTextCtrl *m_peektextCtrl;
OPJChildFrame *m_childframe;
/*void OnBeginDrag(wxTreeEvent& event);
void OnBeginRDrag(wxTreeEvent& event);
void OnEndDrag(wxTreeEvent& event);*/
/*void OnBeginLabelEdit(wxTreeEvent& event);
void OnEndLabelEdit(wxTreeEvent& event);*/
/*void OnDeleteItem(wxTreeEvent& event);*/
/*void OnContextMenu(wxContextMenuEvent& event);*/
void OnItemMenu(wxTreeEvent& event);
/*void OnGetInfo(wxTreeEvent& event);
void OnSetInfo(wxTreeEvent& event);*/
/*void OnItemExpanded(wxTreeEvent& event);*/
void OnItemExpanding(wxTreeEvent& event);
/*void OnItemCollapsed(wxTreeEvent& event);
void OnItemCollapsing(wxTreeEvent& event);*/
void OnSelChanged(wxTreeEvent& event);
/*void OnSelChanging(wxTreeEvent& event);*/
/*void OnTreeKeyDown(wxTreeEvent& event);*/
/*void OnItemActivated(wxTreeEvent& event);*/
/*void OnItemRClick(wxTreeEvent& event);*/
/*void OnRMouseDown(wxMouseEvent& event);
void OnRMouseUp(wxMouseEvent& event);
void OnRMouseDClick(wxMouseEvent& event);*/
/*void GetItemsRecursively(const wxTreeItemId& idParent,
wxTreeItemIdValue cookie = 0);*/
void CreateImageList(int size = 16);
void CreateButtonsImageList(int size = 11);
/*void AddTestItemsToTree(size_t numChildren, size_t depth);*/
/*void DoSortChildren(const wxTreeItemId& item, bool reverse = false)
{ m_reverseSort = reverse; wxTreeCtrl::SortChildren(item); }*/
/*void DoEnsureVisible() { if (m_lastItem.IsOk()) EnsureVisible(m_lastItem); }*/
/*void DoToggleIcon(const wxTreeItemId& item);*/
/*void ShowMenu(wxTreeItemId id, const wxPoint& pt);*/
int ImageSize(void) const { return m_imageSize; }
void SetLastItem(wxTreeItemId id) { m_lastItem = id; }
protected:
/*virtual int OnCompareItems(const wxTreeItemId& i1, const wxTreeItemId& i2);*/
// is this the test item which we use in several event handlers?
/*bool IsTestItem(const wxTreeItemId& item)
{
// the test item is the first child folder
return GetItemParent(item) == GetRootItem() && !GetPrevSibling(item);
}*/
private:
/*void AddItemsRecursively(const wxTreeItemId& idParent,
size_t nChildren,
size_t depth,
size_t folder);*/
void LogEvent(const wxChar *name, const wxTreeEvent& event);
int m_imageSize; // current size of images
bool m_reverseSort; // flag for OnCompareItems
wxTreeItemId m_lastItem, // for OnEnsureVisible()
m_draggedItem; // item being dragged right now
// NB: due to an ugly wxMSW hack you _must_ use DECLARE_DYNAMIC_CLASS()
// if you want your overloaded OnCompareItems() to be called.
// OTOH, if you don't want it you may omit the next line - this will
// make default (alphabetical) sorting much faster under wxMSW.
DECLARE_DYNAMIC_CLASS(OPJMarkerTree)
DECLARE_EVENT_TABLE()
};
// this hash map stores all the trees of currently opened images, with an integer key
WX_DECLARE_HASH_MAP(int, OPJMarkerTree*, wxIntegerHash, wxIntegerEqual, OPJMarkerTreeHash);
// this hash map stores all the children of currently opened images, with an integer key
WX_DECLARE_HASH_MAP(int, OPJChildFrame*, wxIntegerHash, wxIntegerEqual, OPJChildFrameHash);
// Define a new frame
class OPJFrame: public wxMDIParentFrame
{
public:
OPJFrame(wxWindow *parent, const wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, const long style);
~OPJFrame(void);
void OnSize(wxSizeEvent& WXUNUSED(event));
void OnAbout(wxCommandEvent& WXUNUSED(event));
void OnFileOpen(wxCommandEvent& WXUNUSED(event));
void OnQuit(wxCommandEvent& WXUNUSED(event));
void OnClose(wxCommandEvent& WXUNUSED(event));
void OnZoom(wxCommandEvent& WXUNUSED(event));
void OnFit(wxCommandEvent& WXUNUSED(event));
void OnToggleBrowser(wxCommandEvent& WXUNUSED(event));
void OnTogglePeeker(wxCommandEvent& WXUNUSED(event));
void OnReload(wxCommandEvent& event);
void OnSetsEnco(wxCommandEvent& event);
void OnSetsDeco(wxCommandEvent& event);
void OnSashDrag(wxSashEvent& event);
void OpenFiles(wxArrayString paths, wxArrayString filenames);
void OnNotebook(wxNotebookEvent& event);
void Rescale(int scale, OPJChildFrame *child);
OPJMarkerTreeHash m_treehash;
OPJChildFrameHash m_childhash;
wxSashLayoutWindow* markerTreeWindow;
wxSashLayoutWindow* loggingWindow;
void Resize(int number);
wxNotebook *m_bookCtrl;
wxNotebook *m_bookCtrlbottom;
wxTextCtrl *m_textCtrlbrowse;
private:
void TogStyle(int id, long flag);
void DoSort(bool reverse = false);
wxPanel *m_panel;
wxTextCtrl *m_textCtrl;
void DoSetBold(bool bold = true);
protected:
wxSashLayoutWindow* m_topWindow;
wxSashLayoutWindow* m_leftWindow2;
DECLARE_EVENT_TABLE()
};
class OPJChildFrame: public wxMDIChildFrame
{
public:
OPJCanvas *m_canvas;
OPJChildFrame(OPJFrame *parent, wxFileName fname, int winnumber, const wxString& title, const wxPoint& pos, const wxSize& size, const long style);
~OPJChildFrame(void);
void OnActivate(wxActivateEvent& event);
/*void OnQuit(wxCommandEvent& WXUNUSED(event));*/
void OnClose(wxCloseEvent& event);
void OnGotFocus(wxFocusEvent& event);
void OnLostFocus(wxFocusEvent& event);
OPJFrame *m_frame;
wxFileName m_fname;
int m_winnumber;
unsigned long m_twidth, m_theight, m_tx, m_ty;
DECLARE_EVENT_TABLE()
};
// frame and main menu ids
enum {
OPJFRAME_FILEEXIT = wxID_EXIT,
OPJFRAME_HELPABOUT = wxID_ABOUT,
OPJFRAME_FILEOPEN,
OPJFRAME_FILETOGGLEB,
OPJFRAME_FILETOGGLEP,
OPJFRAME_VIEWZOOM,
OPJFRAME_VIEWFIT,
OPJFRAME_VIEWRELOAD,
OPJFRAME_FILECLOSE,
OPJFRAME_SETSENCO,
OPJFRAME_SETSDECO,
OPJFRAME_BROWSEWIN = 10000,
OPJFRAME_LOGWIN
};
// menu and control ids
enum
{
TreeTest_Quit = wxID_EXIT,
TreeTest_About = wxID_ABOUT,
TreeTest_TogButtons = wxID_HIGHEST,
TreeTest_TogTwist,
TreeTest_TogLines,
TreeTest_TogEdit,
TreeTest_TogHideRoot,
TreeTest_TogRootLines,
TreeTest_TogBorder,
TreeTest_TogFullHighlight,
TreeTest_SetFgColour,
TreeTest_SetBgColour,
TreeTest_ResetStyle,
TreeTest_Highlight,
TreeTest_Dump,
TreeTest_DumpSelected,
TreeTest_Count,
TreeTest_CountRec,
TreeTest_Sort,
TreeTest_SortRev,
TreeTest_SetBold,
TreeTest_ClearBold,
TreeTest_Rename,
TreeTest_Delete,
TreeTest_DeleteChildren,
TreeTest_DeleteAll,
TreeTest_Recreate,
TreeTest_ToggleImages,
TreeTest_ToggleButtons,
TreeTest_SetImageSize,
TreeTest_ToggleSel,
TreeTest_CollapseAndReset,
TreeTest_EnsureVisible,
TreeTest_AddItem,
TreeTest_InsertItem,
TreeTest_IncIndent,
TreeTest_DecIndent,
TreeTest_IncSpacing,
TreeTest_DecSpacing,
TreeTest_ToggleIcon,
TreeTest_Select,
TreeTest_Unselect,
TreeTest_SelectRoot,
TreeTest_Ctrl = 1000,
BOTTOM_NOTEBOOK_ID,
LEFT_NOTEBOOK_ID
};
class OPJDecoThread : public wxThread
{
public:
OPJDecoThread(OPJCanvas *canvas);
// thread execution starts here
virtual void *Entry();
// called when the thread exits - whether it terminates normally or is
// stopped with Delete() (but not when it is Kill()ed!)
virtual void OnExit();
// write something to the text control
void WriteText(const wxString& text);
public:
unsigned m_count;
OPJCanvas *m_canvas;
};
class OPJParseThread : public wxThread
{
public:
OPJParseThread(OPJMarkerTree *tree, wxTreeItemId parentid = 0x00);
// thread execution starts here
virtual void *Entry();
// called when the thread exits - whether it terminates normally or is
// stopped with Delete() (but not when it is Kill()ed!)
virtual void OnExit();
// write something to the text control
void WriteText(const wxString& text);
void LoadFile(wxFileName fname);
void ParseJ2KFile(wxFile *m_file, wxFileOffset offset, wxFileOffset length, wxTreeItemId parentid);
void ParseJP2File(wxFile *fileid, wxFileOffset filepoint, wxFileOffset filelimit, wxTreeItemId parentid);
unsigned m_count;
OPJMarkerTree *m_tree;
wxTreeItemId m_parentid;
private:
int jpeg2000parse(wxFile *fileid, wxFileOffset filepoint, wxFileOffset filelimit,
wxTreeItemId parentid, int level, char *scansign, unsigned long int *scanpoint);
int box_handler_function(int boxtype, wxFile *fileid, wxFileOffset filepoint, wxFileOffset filelimit,
wxTreeItemId parentid, int level, char *scansign, unsigned long int *scanpoint);
};
// Drag and drop files target
class OPJDnDFile: public wxFileDropTarget
{
public:
OPJDnDFile(OPJFrame *pOwner) { m_pOwner = pOwner; }
virtual bool OnDropFiles(wxCoord x, wxCoord y, const wxArrayString& filenames);
private:
OPJFrame *m_pOwner;
};
// Property sheet dialog: encoder
class OPJEncoderDialog: public wxPropertySheetDialog
{
DECLARE_CLASS(OPJEncoderDialog)
public:
OPJEncoderDialog(wxWindow* parent, int dialogType);
~OPJEncoderDialog();
wxBookCtrlBase* m_settingsNotebook;
wxPanel* CreateMainSettingsPage(wxWindow* parent);
wxPanel* CreatePart1SettingsPage(wxWindow* parent);
/* wxPanel* CreatePart3SettingsPage(wxWindow* parent);*/
#ifdef USE_JPWL
void OnEnableJPWL(wxCommandEvent& event);
/* wxPanel* CreatePart11SettingsPage(wxWindow* parent);
wxCheckBox *m_enablejpwlCheck;*/
#endif // USE_JPWL
protected:
enum {
OPJENCO_ENABLEJPWL = 100,
OPJENCO_RATEFACTOR,
OPJENCO_QUALITYFACTOR,
OPJENCO_RESNUMBER,
OPJENCO_CODEBLOCKSIZE,
OPJENCO_PRECINCTSIZE,
OPJENCO_TILESIZE,
OPJENCO_PROGRESSION,
OPJENCO_SUBSAMPLING,
OPJENCO_ENABLESOP,
OPJENCO_ENABLEEPH,
OPJENCO_ENABLEBYPASS,
OPJENCO_ENABLERESET,
OPJENCO_ENABLERESTART,
OPJENCO_ENABLEVSC,
OPJENCO_ENABLEERTERM,
OPJENCO_ENABLESEGMARK,
OPJENCO_ROICOMP,
OPJENCO_ROISHIFT,
OPJENCO_IMORIG,
OPJENCO_TILORIG,
OPJENCO_ENABLEIRREV,
OPJENCO_ENABLEINDEX,
OPJENCO_INDEXNAME
};
DECLARE_EVENT_TABLE()
};
// Property sheet dialog: decoder
class OPJDecoderDialog: public wxPropertySheetDialog
{
DECLARE_CLASS(OPJDecoderDialog)
public:
OPJDecoderDialog(wxWindow* parent, int dialogType);
~OPJDecoderDialog();
wxBookCtrlBase* m_settingsNotebook;
wxCheckBox *m_enabledecoCheck;
wxSpinCtrl *m_reduceCtrl, *m_layerCtrl, *m_numcompsCtrl;
wxRadioBox* m_resizeBox;
void OnEnableDeco(wxCommandEvent& event);
wxPanel* CreateMainSettingsPage(wxWindow* parent);
wxPanel* CreatePart1SettingsPage(wxWindow* parent);
wxPanel* CreatePart3SettingsPage(wxWindow* parent);
#ifdef USE_JPWL
void OnEnableJPWL(wxCommandEvent& event);
wxPanel* CreatePart11SettingsPage(wxWindow* parent);
wxSpinCtrl *m_expcompsCtrl, *m_framenumCtrl, *m_maxtilesCtrl;
wxCheckBox *m_enablejpwlCheck;
#endif // USE_JPWL
protected:
enum {
OPJDECO_RESMETHOD = 100,
OPJDECO_REDUCEFACTOR,
OPJDECO_QUALITYLAYERS,
OPJDECO_NUMCOMPS,
OPJDECO_ENABLEDECO,
OPJDECO_ENABLEJPWL,
OPJDECO_EXPCOMPS,
OPJDECO_MAXTILES,
OPJDECO_FRAMENUM
};
DECLARE_EVENT_TABLE()
};
#endif //__OPJ_VIEWER_H__

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -0,0 +1,3 @@
OPJChild16 ICON OPJChild.ico
OPJViewer16 ICON OPJViewer.ico
#include "wx/msw/wx.rc"

View File

@@ -0,0 +1,26 @@
/* XPM */
static char *OPJViewer16[] = {
/* columns rows colors chars-per-pixel */
"16 16 4 1",
" c black",
". c #800000",
"X c red",
"o c None",
/* pixels */
"oooooooooooooooo",
"ooo.XXXXoooooooo",
"ooXXoo .Xooooooo",
"o..oooo .ooooooo",
"oX.oooo ooooooo",
"oX.oooo .ooooooo",
"oXXoooo .ooooooo",
"o.XXoo .oooooooo",
"oo.XXXXooooooooo",
"ooooooooo.Xo .oo",
"ooooooooo X. ooo",
"oooooooooo...ooo",
"oooooooooo XXooo",
"oooooooooo .Xooo",
"oooooooooooooooo",
"oooooooooooooooo"
};

View File

@@ -0,0 +1,47 @@
wxString htmlaboutpage = wxT(
"<html>"
"<body bgcolor=#FFFFFF>"
"<table cellspacing=7 cellpadding=1 border=0 width=100%>"
"<tr>"
"<td rowspan=3 valign=top align=center width=70>"
"<img src=\"memory:opj_logo.xpm\"><br><br>"
"</td>"
"<td align=center>"
"<font size=+0 color=#000000><b>"
OPJ_APPLICATION " " OPJ_APPLICATION_VERSION
"</b></font><br>"
"<font size=-1 color=#000000><b>A JPEG 2000 image viewer</b></font><br>"
"<font size=-2 color=#000000><b>" OPJ_APPLICATION_PLATFORM " version</b></font>"
"</td>"
"</tr>"
"<tr height=3 valign=center>"
"<td valign=center bgcolor=#cc3300></td>"
"</tr>"
"<tr>"
"<td align=justify>"
"<center><font size=+0 color=#000000><a href=\"http://www.openjpeg.org/\">OpenJPEG</a></font></center>"
"<font size=-1 color=#000000>The OpenJPEG library is an open-source JPEG 2000 codec written in C language. "
"In addition to the basic codec, various other features are under development.</font><br>"
"<font size=-2 color=red>* Build: " wxVERSION_STRING ", " __DATE__ ", " __TIME__ "</font><br>"
)
#ifdef USE_JPWL
wxT("<font size=-2 color=green>- Compiled with JPWL support</font><br>")
#endif // USE_JPWL
#ifdef USE_JPSEC
wxT("<font size=-2 color=green>- Compiled with JPSEC support</font>")
#endif // USE_JPSEC
wxT("</td>"
"</tr>"
"<tr>"
"<td colspan=2 bgcolor=#CC3300 height=3 valign=center></td>"
"</tr>"
"<tr>"
"<td colspan=2>"
"<font size=-2 color=#444444>OpenJPEG is &copy; 2002-2007 <a href=\"http://www.tele.ucl.ac.be/\">TELE</a> - <a href=\"http://www.uclouvain.be/\">Universite' Catholique de Louvain</a></font><br>"
"<font size=-2 color=#444444>OPJViewer is also &copy; 2007 <a href=\"http://dsplab.diei.unipg.it/\">DSPLab</a> - <a href=\"http://www.unipg.it/\">Universita' degli studi di Perugia</a></font>"
"</td>"
"</tr>"
"</table>"
"</body>"
"</html>"
);

View File

@@ -0,0 +1,79 @@
/* XPM */
static char *icon1_xpm[] = {
/* columns rows colors chars-per-pixel */
"32 32 41 1",
"> c #97C4E7",
"# c #4381AA",
"d c #FFFFFF",
"< c #71B2DE",
"+ c #538BB1",
"& c #D1E5F5",
"q c #63B3DE",
"6 c #F1F4F7",
"* c #CAE1F3",
"y c #7AC4E5",
"= c #C3DDF1",
"X c #74A1BD",
"- c #BCD9EF",
"5 c #619BC4",
"3 c #E6EAF1",
"2 c #4B8EBF",
"o c #6B97B6",
". c #4B82A8",
" c None",
"w c #54A6D8",
"1 c #71A8D1",
", c #85BBE2",
"t c #EFF6FC",
"7 c #DEEDF8",
"@ c #4388B4",
"a c #F7FBFD",
"$ c #D7E0E9",
"r c #FAFCFE",
"4 c #DAEAF7",
"e c #E9F3FA",
"0 c #76BAE2",
"% c #7FA6C0",
"s c #FDFDFE",
"O c #5896BE",
"p c #B6D5EE",
"8 c #87ABC3",
": c #A5CCEA",
"9 c #E5F0F9",
"; c #AFD1EC",
"i c #F4F9FD",
"u c #8FB0C3",
/* pixels */
" ",
" ",
" ",
" ",
" ",
" .XXXooOO++@#$ ",
" %&*=-;:>>,<123 ",
" %4&*=-;:>>,1>56 ",
" %74&*=-;:>>1*>56 ",
" 89700qqqqwq1e*>X ",
" 8e974&*=-;:1re*>8 ",
" 8te974&*=-;11111# ",
" 8tty000qqqqqww>,+ ",
" uitte974&*=-p:>>+ ",
" uaitte974&*=-p:>O ",
" uaayyyy000qqqqp:O ",
" uraaitte974&*=-po ",
" urraaitte974&*=-o ",
" usryyyyyyy000q*=X ",
" ussrraaitte974&*X ",
" udssrraaitte974&X ",
" uddyyyyyyyyyy074% ",
" udddssrraaitte97% ",
" uddddssrraaitte9% ",
" udddddssrraaitte8 ",
" uddddddssrraaitt8 ",
" uuuuuuuuuuuuuu88u ",
" ",
" ",
" ",
" ",
" "
};

View File

@@ -0,0 +1,53 @@
/* XPM */
static char *icon2_xpm[] = {
/* columns rows colors chars-per-pixel */
"32 32 15 1",
". c Black",
"O c #97C4E7",
"$ c #63B3DE",
"@ c #CAE1F3",
"; c #7AC4E5",
"* c #74A1BD",
"+ c #619BC4",
"o c #4B8EBF",
" c None",
"% c #54A6D8",
"= c #FAFCFE",
"& c #E9F3FA",
"# c #76BAE2",
"X c #C00000",
"- c #87ABC3",
/* pixels */
" ",
" ",
" ",
" ",
" ",
" ............. ",
" .XXXXXXXXXX.o. ",
" .XXXXXXXXXX.O+. ",
" .XXXXXXXXXX.@O+. ",
" .XX##$$$$%$.&@O* ",
" .XXXXXXXXXX.=&@O- ",
" .XXXXXXXXXX...... ",
" .XX;###$$$$$%%XX. ",
" .XXXXXXXXXXXXXXX. ",
" .XXXXXXXXXXXXXXX. ",
" .XX;;;;###$$$$XX. ",
" .XXXXXXXXXXXXXXX. ",
" .XXXXXXXXXXXXXXX. ",
" .XX;;;;;;;###$XX. ",
" .XXXXXXXXXXXXXXX. ",
" .XXXXXXXXXXXXXXX. ",
" .XX;;;;;;;;;;#XX. ",
" .XXXXXXXXXXXXXXX. ",
" .XXXXXXXXXXXXXXX. ",
" .XXXXXXXXXXXXXXX. ",
" .XXXXXXXXXXXXXXX. ",
" ................. ",
" ",
" ",
" ",
" ",
" "
};

View File

@@ -0,0 +1,79 @@
/* XPM */
static char *icon3_xpm[] = {
/* columns rows colors chars-per-pixel */
"32 32 41 1",
"6 c #EDF2FB",
"- c #AAC1E8",
": c #B9CDED",
"X c #295193",
", c #C6D6F0",
"a c #4A7CCE",
"u c #779DDB",
"y c #7FA2DD",
"$ c #3263B4",
"5 c #EAF0FA",
". c #2D59A3",
"o c #6E96D8",
"* c #356AC1",
"r c #F7F9FD",
"> c #BED0EE",
"3 c #E1E9F7",
"7 c #F0F5FC",
"< c #CBD9F1",
"2 c #DAE5F6",
"# c #3161B1",
" c None",
"0 c #FDFEFF",
"= c #9FB9E5",
"e c #AEC5EA",
"t c #89A9DF",
"q c #98B5E4",
"p c #5584D1",
"d c #3A70CA",
"@ c #305FAC",
"i c #5D89D3",
"1 c #D2DFF4",
"% c #3366B9",
"9 c #FAFCFE",
"8 c #F5F8FD",
"s c #4075CC",
"O c #638ED5",
"w c #90AFE2",
"& c #3467BC",
"+ c #2F5DA9",
"; c #B3C8EB",
"4 c #E5EDF9",
/* pixels */
" ",
" ",
" ",
" ",
" ",
" ",
" ......X ",
" .oooooO+ ",
" .ooooooo. ",
" .+@@@##$%%&&&&&****. ",
" .=-;:>,<12345678900. ",
" .q=-;:>,<1234567890. ",
" .wq=-e:>,<12345678r. ",
" .twq=-e:>,<12345678. ",
" .ytwq=-e:>,<1234567. ",
" .uytwq=-e:>,<123456. ",
" .ouytwq=-e:>,<12345. ",
" .Oouytwq=-e;>,<1234. ",
" .iOouytwq=-e;>,<123. ",
" .piOouytwq=-e;>,<12. ",
" .apiOouytwq=-e;>,<1. ",
" .sapiOouytwq=-e;>,<. ",
" .dsapiOouytwq=-e;>,. ",
" ...................# ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
};

View File

@@ -0,0 +1,43 @@
/* XPM */
static char *icon4_xpm[] = {
/* columns rows colors chars-per-pixel */
"32 32 5 1",
". c Black",
"o c #8399B4",
"X c #8DA0B9",
" c None",
"O c #800000",
/* pixels */
" ",
" ",
" ",
" ",
" ",
" ",
" ....... ",
" .XXXXXo. ",
" .XXXXXXX. ",
" .................... ",
" .OOOOOOOOOOOOOOOOOO. ",
" .OOOOOOOOOOOOOOOOOO. ",
" .OOOOOOOOOOOOOOOOOO. ",
" .OOOOOOOOOOOOOOOOOO. ",
" .OOOOOOOOOOOOOOOOOO. ",
" .OOOOOOOOOOOOOOOOOO. ",
" .OOOOOOOOOOOOOOOOOO. ",
" .OOOOOOOOOOOOOOOOOO. ",
" .OOOOOOOOOOOOOOOOOO. ",
" .OOOOOOOOOOOOOOOOOO. ",
" .OOOOOOOOOOOOOOOOOO. ",
" .OOOOOOOOOOOOOOOOOO. ",
" .OOOOOOOOOOOOOOOOOO. ",
" .................... ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
};

View File

@@ -0,0 +1,79 @@
/* XPM */
static char *icon5_xpm[] = {
/* columns rows colors chars-per-pixel */
"32 32 41 1",
"0 c #AAC1E8",
"q c #B9CDED",
"X c #295193",
"e c #C6D6F0",
"a c #4A7CCE",
"& c #779DDB",
"* c #7FA2DD",
"2 c #EAF0FA",
"@ c #2D59A3",
"o c #6E96D8",
"y c #356AC1",
"d c #214279",
"w c #BED0EE",
"= c #85A7DF",
"< c #E1E9F7",
"3 c #F0F5FC",
"s c #CBD9F1",
", c #DAE5F6",
"7 c #3161B1",
" c None",
". c #274D8B",
"6 c #FDFEFF",
"i c #E7EEF9",
"9 c #9FB9E5",
"- c #89A9DF",
"8 c #98B5E4",
"$ c #5584D1",
"+ c #3569BF",
"% c #305FAC",
"O c #5D89D3",
"> c #D2DFF4",
"p c #3366B9",
"5 c #FAFCFE",
"4 c #F5F8FD",
"t c #4075CC",
"u c #638ED5",
"r c #CEDCF2",
"; c #90AFE2",
"# c #2F5DA9",
": c #B3C8EB",
"1 c #E5EDF9",
/* pixels */
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ......X ",
" XoooooO. ",
" Xoooooo+. ",
" Xooooooo@XXXXXXXXXX# ",
" Xoooooooooooooooooo# ",
" Xoooooooooooooooooo# ",
" Xoo$################### ",
" Xoo%O&*=-;:>,<123445667 ",
" XooX890:qwer>,<123445q# ",
" Xoty;890:qwer>,<12344# ",
" Xo%u-;890:qwer>,<i234# ",
" XoX&*-;890:qwer>,<i2r# ",
" Xtpo&*-;890:qwer>,<i# ",
" X%auo&*-;890:qwer>,<# ",
" XX$Ouo&*-;890:qwer>s# ",
" d%a$Ouo&*-;890:qwer# ",
" d+ta$Ouo&*-;890:qwe# ",
" d..................# ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
};

View File

@@ -0,0 +1,264 @@
/*
* Copyright (c) 2007, Digital Signal Processing Laboratory, Universit<69> degli studi di Perugia (UPG), Italy
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
/////////////////////////////////////////////////////////////////////////////
// Name: imagj2k.cpp
// Purpose: wxImage JPEG 2000 codestream handler
// Author: Giuseppe Baruffa - based on imagjpeg.cpp, Vaclav Slavik
// RCS-ID: $Id: imagj2k.cpp,v 0.00 2007/02/08 23:59:00 MW Exp $
// Copyright: (c) Giuseppe Baruffa
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#if wxUSE_IMAGE && wxUSE_LIBOPENJPEG
#include "imagj2k.h"
#ifndef WX_PRECOMP
#include "wx/log.h"
#include "wx/app.h"
#include "wx/intl.h"
#include "wx/bitmap.h"
#include "wx/module.h"
#endif
#include "wx/filefn.h"
#include "wx/wfstream.h"
// ----------------------------------------------------------------------------
// types
// ----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// wxJ2KHandler
//-----------------------------------------------------------------------------
IMPLEMENT_DYNAMIC_CLASS(wxJ2KHandler,wxImageHandler)
#if wxUSE_STREAMS
//------------- JPEG 2000 Data Source Manager
#define J2K_CFMT 0
#define JP2_CFMT 1
#define JPT_CFMT 2
#define MJ2_CFMT 3
#define PXM_DFMT 0
#define PGX_DFMT 1
#define BMP_DFMT 2
#define YUV_DFMT 3
#define MAX_MESSAGE_LEN 200
/* sample error callback expecting a FILE* client object */
void j2k_error_callback(const char *msg, void *client_data) {
int message_len = strlen(msg) - 1;
if (msg[message_len] != '\n')
message_len = MAX_MESSAGE_LEN;
#ifndef __WXGTK__
wxMutexGuiEnter();
#endif /* __WXGTK__ */
wxLogMessage(wxT("[ERROR] %.*s"), message_len, msg);
#ifndef __WXGTK__
wxMutexGuiLeave();
#endif /* __WXGTK__ */
}
/* sample warning callback expecting a FILE* client object */
void j2k_warning_callback(const char *msg, void *client_data) {
int message_len = strlen(msg) - 1;
if (msg[message_len] != '\n')
message_len = MAX_MESSAGE_LEN;
#ifndef __WXGTK__
wxMutexGuiEnter();
#endif /* __WXGTK__ */
wxLogMessage(wxT("[WARNING] %.*s"), message_len, msg);
#ifndef __WXGTK__
wxMutexGuiLeave();
#endif /* __WXGTK__ */
}
/* sample debug callback expecting no client object */
void j2k_info_callback(const char *msg, void *client_data) {
int message_len = strlen(msg) - 1;
if (msg[message_len] != '\n')
message_len = MAX_MESSAGE_LEN;
#ifndef __WXGTK__
wxMutexGuiEnter();
#endif /* __WXGTK__ */
wxLogMessage(wxT("[INFO] %.*s"), message_len, msg);
#ifndef __WXGTK__
wxMutexGuiLeave();
#endif /* __WXGTK__ */
}
// load the j2k codestream
bool wxJ2KHandler::LoadFile(wxImage *image, wxInputStream& stream, bool verbose, int index)
{
opj_dparameters_t parameters; /* decompression parameters */
opj_event_mgr_t event_mgr; /* event manager */
opj_image_t *opjimage = NULL;
unsigned char *src = NULL;
unsigned char *ptr;
int file_length;
// destroy the image
image->Destroy();
/* handle to a decompressor */
opj_dinfo_t* dinfo = NULL;
opj_cio_t *cio = NULL;
/* configure the event callbacks (not required) */
memset(&event_mgr, 0, sizeof(opj_event_mgr_t));
event_mgr.error_handler = j2k_error_callback;
event_mgr.warning_handler = j2k_warning_callback;
event_mgr.info_handler = j2k_info_callback;
/* set decoding parameters to default values */
opj_set_default_decoder_parameters(&parameters);
/* prepare parameters */
strncpy(parameters.infile, "", sizeof(parameters.infile)-1);
strncpy(parameters.outfile, "", sizeof(parameters.outfile)-1);
parameters.decod_format = J2K_CFMT;
parameters.cod_format = BMP_DFMT;
if (m_reducefactor)
parameters.cp_reduce = m_reducefactor;
if (m_qualitylayers)
parameters.cp_layer = m_qualitylayers;
/* JPWL only */
#ifdef USE_JPWL
parameters.jpwl_exp_comps = m_expcomps;
parameters.jpwl_max_tiles = m_maxtiles;
parameters.jpwl_correct = m_enablejpwl;
#endif /* USE_JPWL */
/* get a decoder handle */
dinfo = opj_create_decompress(CODEC_J2K);
/* find length of the stream */
stream.SeekI(0, wxFromEnd);
file_length = (int) stream.TellI();
/* get data */
stream.SeekI(0, wxFromStart);
src = (unsigned char *) malloc(file_length);
stream.Read(src, file_length);
/* catch events using our callbacks and give a local context */
opj_set_event_mgr((opj_common_ptr)dinfo, &event_mgr, stderr);
/* setup the decoder decoding parameters using user parameters */
opj_setup_decoder(dinfo, &parameters);
/* open a byte stream */
cio = opj_cio_open((opj_common_ptr)dinfo, src, file_length);
/* decode the stream and fill the image structure */
opjimage = opj_decode(dinfo, cio);
if (!opjimage) {
#ifndef __WXGTK__
wxMutexGuiEnter();
#endif /* __WXGTK__ */
wxLogError(wxT("J2K: failed to decode image!"));
#ifndef __WXGTK__
wxMutexGuiLeave();
#endif /* __WXGTK__ */
opj_destroy_decompress(dinfo);
opj_cio_close(cio);
opj_image_destroy(opjimage);
free(src);
return false;
}
/* close the byte stream */
opj_cio_close(cio);
/* common rendering method */
#include "imagjpeg2000.cpp"
#ifndef __WXGTK__
wxMutexGuiEnter();
#endif /* __WXGTK__ */
wxLogMessage(wxT("J2K: image loaded."));
#ifndef __WXGTK__
wxMutexGuiLeave();
#endif /* __WXGTK__ */
/* close openjpeg structs */
opj_destroy_decompress(dinfo);
opj_image_destroy(opjimage);
free(src);
if (!image->Ok())
return false;
else
return true;
}
// save the j2k codestream
bool wxJ2KHandler::SaveFile( wxImage *image, wxOutputStream& stream, bool verbose )
{
#ifndef __WXGTK__
wxMutexGuiEnter();
#endif /* __WXGTK__ */
wxLogError(wxT("J2K: Couldn't save image -> not implemented."));
#ifndef __WXGTK__
wxMutexGuiLeave();
#endif /* __WXGTK__ */
return false;
}
#ifdef __VISUALC__
#pragma warning(default:4611)
#endif /* VC++ */
// recognize the 0xFF4F JPEG 2000 SOC marker
bool wxJ2KHandler::DoCanRead( wxInputStream& stream )
{
unsigned char hdr[2];
if ( !stream.Read(hdr, WXSIZEOF(hdr)) )
return false;
return hdr[0] == 0xFF && hdr[1] == 0x4F;
}
#endif // wxUSE_STREAMS
#endif // wxUSE_LIBOPENJPEG

101
OPJViewer/source/imagj2k.h Normal file
View File

@@ -0,0 +1,101 @@
/*
* Copyright (c) 2007, Digital Signal Processing Laboratory, Universit<69> degli studi di Perugia (UPG), Italy
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
/////////////////////////////////////////////////////////////////////////////
// Name: imagj2k.h
// Purpose: wxImage JPEG 2000 raw codestream handler
// Author: G. Baruffa - based on imagjpeg.h, Vaclav Slavik
// RCS-ID: $Id: imagj2k.h,v 0.0 2007/02/08 23:45:00 VZ Exp $
// Copyright: (c) Giuseppe Baruffa
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifndef _WX_IMAGJ2K_H_
#define _WX_IMAGJ2K_H_
#include "wx/defs.h"
//-----------------------------------------------------------------------------
// wxJ2KHandler
//-----------------------------------------------------------------------------
#if wxUSE_LIBOPENJPEG
#include "wx/image.h"
#include "libopenjpeg/openjpeg.h"
#define wxBITMAP_TYPE_J2K 47
#define wxIMAGE_OPTION_REDUCEFACTOR wxString(_T("reducefactor"))
#define wxIMAGE_OPTION_QUALITYLAYERS wxString(_T("qualitylayers"))
#define wxIMAGE_OPTION_MAXCOMPS wxString(_T("maxcomps"))
#ifdef USE_JPWL
#define wxIMAGE_OPTION_ENABLEJPWL wxString(_T("enablejpwl"))
#define wxIMAGE_OPTION_EXPCOMPS wxString(_T("expcomps"))
#define wxIMAGE_OPTION_MAXTILES wxString(_T("maxtiles"))
#endif // USE_JPWL
class WXDLLEXPORT wxJ2KHandler: public wxImageHandler
{
public:
inline wxJ2KHandler()
{
m_name = wxT("JPEG 2000 codestream file");
m_extension = wxT("j2k");
m_type = wxBITMAP_TYPE_J2K;
m_mime = wxT("image/j2k");
m_reducefactor = 0;
m_qualitylayers = 0;
m_components = 0;
#ifdef USE_JPWL
m_enablejpwl = true;
m_expcomps = JPWL_EXPECTED_COMPONENTS;
m_maxtiles = JPWL_MAXIMUM_TILES;
#endif // USE_JPWL
}
// decoding engine parameters
int m_reducefactor, m_qualitylayers, m_components;
#ifdef USE_JPWL
bool m_enablejpwl;
int m_expcomps, m_maxtiles;
#endif // USE_JPWL
#if wxUSE_STREAMS
virtual bool LoadFile( wxImage *image, wxInputStream& stream, bool verbose=true, int index=-1 );
virtual bool SaveFile( wxImage *image, wxOutputStream& stream, bool verbose=true );
protected:
virtual bool DoCanRead( wxInputStream& stream );
#endif
private:
DECLARE_DYNAMIC_CLASS(wxJ2KHandler)
};
#endif // wxUSE_LIBOPENJPEG
#endif // _WX_IMAGJ2K_H_

View File

@@ -0,0 +1,278 @@
/*
* Copyright (c) 2007, Digital Signal Processing Laboratory, Universit<69> degli studi di Perugia (UPG), Italy
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
/////////////////////////////////////////////////////////////////////////////
// Name: imagjp2.cpp
// Purpose: wxImage JPEG 2000 file format handler
// Author: Giuseppe Baruffa - based on imagjpeg.cpp, Vaclav Slavik
// RCS-ID: $Id: imagjp2.cpp,v 0.00 2007/02/08 23:59:00 MW Exp $
// Copyright: (c) Giuseppe Baruffa
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#if wxUSE_IMAGE && wxUSE_LIBOPENJPEG
#include "imagjp2.h"
#ifndef WX_PRECOMP
#include "wx/log.h"
#include "wx/app.h"
#include "wx/intl.h"
#include "wx/bitmap.h"
#include "wx/module.h"
#endif
#include "libopenjpeg/openjpeg.h"
#include "wx/filefn.h"
#include "wx/wfstream.h"
// ----------------------------------------------------------------------------
// types
// ----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// wxJP2Handler
//-----------------------------------------------------------------------------
IMPLEMENT_DYNAMIC_CLASS(wxJP2Handler,wxImageHandler)
#if wxUSE_STREAMS
//------------- JPEG 2000 Data Source Manager
#define J2K_CFMT 0
#define JP2_CFMT 1
#define JPT_CFMT 2
#define MJ2_CFMT 3
#define PXM_DFMT 0
#define PGX_DFMT 1
#define BMP_DFMT 2
#define YUV_DFMT 3
#define MAX_MESSAGE_LEN 200
/* sample error callback expecting a FILE* client object */
void jp2_error_callback(const char *msg, void *client_data) {
int message_len = strlen(msg) - 1;
if (msg[message_len] != '\n')
message_len = MAX_MESSAGE_LEN;
#ifndef __WXGTK__
wxMutexGuiEnter();
#endif /* __WXGTK__ */
wxLogMessage(wxT("[ERROR] %.*s"), message_len, msg);
#ifndef __WXGTK__
wxMutexGuiLeave();
#endif /* __WXGTK__ */
}
/* sample warning callback expecting a FILE* client object */
void jp2_warning_callback(const char *msg, void *client_data) {
int message_len = strlen(msg) - 1;
if (msg[message_len] != '\n')
message_len = MAX_MESSAGE_LEN;
#ifndef __WXGTK__
wxMutexGuiEnter();
#endif /* __WXGTK__ */
wxLogMessage(wxT("[WARNING] %.*s"), message_len, msg);
#ifndef __WXGTK__
wxMutexGuiLeave();
#endif /* __WXGTK__ */
}
/* sample debug callback expecting no client object */
void jp2_info_callback(const char *msg, void *client_data) {
int message_len = strlen(msg) - 1;
if (msg[message_len] != '\n')
message_len = MAX_MESSAGE_LEN;
#ifndef __WXGTK__
wxMutexGuiEnter();
#endif /* __WXGTK__ */
wxLogMessage(wxT("[INFO] %.*s"), message_len, msg);
#ifndef __WXGTK__
wxMutexGuiLeave();
#endif /* __WXGTK__ */
}
// load the jp2 file format
bool wxJP2Handler::LoadFile(wxImage *image, wxInputStream& stream, bool verbose, int index)
{
opj_dparameters_t parameters; /* decompression parameters */
opj_event_mgr_t event_mgr; /* event manager */
opj_image_t *opjimage = NULL;
unsigned char *src = NULL;
unsigned char *ptr;
int file_length;
// destroy the image
image->Destroy();
/* handle to a decompressor */
opj_dinfo_t* dinfo = NULL;
opj_cio_t *cio = NULL;
/* configure the event callbacks (not required) */
memset(&event_mgr, 0, sizeof(opj_event_mgr_t));
event_mgr.error_handler = jp2_error_callback;
event_mgr.warning_handler = jp2_warning_callback;
event_mgr.info_handler = jp2_info_callback;
/* set decoding parameters to default values */
opj_set_default_decoder_parameters(&parameters);
/* prepare parameters */
strncpy(parameters.infile, "", sizeof(parameters.infile)-1);
strncpy(parameters.outfile, "", sizeof(parameters.outfile)-1);
parameters.decod_format = JP2_CFMT;
parameters.cod_format = BMP_DFMT;
if (m_reducefactor)
parameters.cp_reduce = m_reducefactor;
if (m_qualitylayers)
parameters.cp_layer = m_qualitylayers;
/*if (n_components)
parameters. = n_components;*/
/* JPWL only */
#ifdef USE_JPWL
parameters.jpwl_exp_comps = m_expcomps;
parameters.jpwl_max_tiles = m_maxtiles;
parameters.jpwl_correct = m_enablejpwl;
#endif /* USE_JPWL */
/* get a decoder handle */
dinfo = opj_create_decompress(CODEC_JP2);
/* find length of the stream */
stream.SeekI(0, wxFromEnd);
file_length = (int) stream.TellI();
/* get data */
stream.SeekI(0, wxFromStart);
src = (unsigned char *) malloc(file_length);
stream.Read(src, file_length);
/* catch events using our callbacks and give a local context */
opj_set_event_mgr((opj_common_ptr)dinfo, &event_mgr, stderr);
/* setup the decoder decoding parameters using user parameters */
opj_setup_decoder(dinfo, &parameters);
/* open a byte stream */
cio = opj_cio_open((opj_common_ptr)dinfo, src, file_length);
/* decode the stream and fill the image structure */
opjimage = opj_decode(dinfo, cio);
if (!opjimage) {
#ifndef __WXGTK__
wxMutexGuiEnter();
#endif /* __WXGTK__ */
wxLogError(wxT("JP2: failed to decode image!"));
#ifndef __WXGTK__
wxMutexGuiLeave();
#endif /* __WXGTK__ */
opj_destroy_decompress(dinfo);
opj_cio_close(cio);
free(src);
return false;
}
/* close the byte stream */
opj_cio_close(cio);
/* common rendering method */
#include "imagjpeg2000.cpp"
#ifndef __WXGTK__
wxMutexGuiEnter();
#endif /* __WXGTK__ */
wxLogMessage(wxT("JP2: image loaded."));
#ifndef __WXGTK__
wxMutexGuiLeave();
#endif /* __WXGTK__ */
/* close openjpeg structs */
opj_destroy_decompress(dinfo);
opj_image_destroy(opjimage);
free(src);
if (!image->Ok())
return false;
else
return true;
}
// save the jp2 file format
bool wxJP2Handler::SaveFile( wxImage *image, wxOutputStream& stream, bool verbose )
{
#ifndef __WXGTK__
wxMutexGuiEnter();
#endif /* __WXGTK__ */
wxLogError(wxT("JP2: Couldn't save image -> not implemented."));
#ifndef __WXGTK__
wxMutexGuiLeave();
#endif /* __WXGTK__ */
return false;
}
#ifdef __VISUALC__
#pragma warning(default:4611)
#endif /* VC++ */
// recognize the JPEG 2000 starting box
bool wxJP2Handler::DoCanRead( wxInputStream& stream )
{
unsigned char hdr[23];
if ( !stream.Read(hdr, WXSIZEOF(hdr)) )
return false;
return (hdr[0] == 0x00 &&
hdr[1] == 0x00 &&
hdr[2] == 0x00 &&
hdr[3] == 0x0C &&
hdr[4] == 0x6A &&
hdr[5] == 0x50 &&
hdr[6] == 0x20 &&
hdr[7] == 0x20 &&
hdr[20] == 0x6A &&
hdr[21] == 0x70 &&
hdr[22] == 0x32);
}
#endif // wxUSE_STREAMS
#endif // wxUSE_LIBOPENJPEG

View File

@@ -0,0 +1,92 @@
/*
* Copyright (c) 2007, Digital Signal Processing Laboratory, Universit<69> degli studi di Perugia (UPG), Italy
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
/////////////////////////////////////////////////////////////////////////////
// Name: imagjp2.h
// Purpose: wxImage JPEG 2000 file format handler
// Author: G. Baruffa - based on imagjpeg.h, Vaclav Slavik
// RCS-ID: $Id: imagjp2.h,v 0.0 2007/02/08 23:45:00 VZ Exp $
// Copyright: (c) Giuseppe Baruffa
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifndef _WX_IMAGJP2_H_
#define _WX_IMAGJP2_H_
#include "wx/defs.h"
//-----------------------------------------------------------------------------
// wxJP2Handler
//-----------------------------------------------------------------------------
#if wxUSE_LIBOPENJPEG
#include "wx/image.h"
#include "libopenjpeg/openjpeg.h"
#define wxBITMAP_TYPE_JP2 48
class WXDLLEXPORT wxJP2Handler: public wxImageHandler
{
public:
inline wxJP2Handler()
{
m_name = wxT("JPEG 2000 file format");
m_extension = wxT("jp2");
m_type = wxBITMAP_TYPE_JP2;
m_mime = wxT("image/jp2");
m_reducefactor = 0;
m_qualitylayers = 0;
m_components = 0;
#ifdef USE_JPWL
m_enablejpwl = true;
m_expcomps = JPWL_EXPECTED_COMPONENTS;
m_maxtiles = JPWL_MAXIMUM_TILES;
#endif // USE_JPWL
}
// decoding engine parameters
int m_reducefactor, m_qualitylayers, m_components;
#ifdef USE_JPWL
bool m_enablejpwl;
int m_expcomps, m_maxtiles;
#endif // USE_JPWL
#if wxUSE_STREAMS
virtual bool LoadFile( wxImage *image, wxInputStream& stream, bool verbose=true, int index=-1 );
virtual bool SaveFile( wxImage *image, wxOutputStream& stream, bool verbose=true );
protected:
virtual bool DoCanRead( wxInputStream& stream );
#endif
private:
DECLARE_DYNAMIC_CLASS(wxJP2Handler)
};
#endif // wxUSE_LIBOPENJPEG
#endif // _WX_IMAGJP2_H_

View File

@@ -0,0 +1,186 @@
/*
* Copyright (c) 2007, Digital Signal Processing Laboratory, Universit<69> degli studi di Perugia (UPG), Italy
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
/////////////////////////////////////////////////////////////////////////////
// Name: imagjpeg2000.cpp
// Purpose: wxImage JPEG 2000 imagage rendering common functions
// Author: Giuseppe Baruffa
// RCS-ID: $Id: imagjpeg2000.cpp,v 0.00 2007/04/27 22:11:00 MW Exp $
// Copyright: (c) Giuseppe Baruffa
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
/*
- At this point, we have the structure "opjimage" that is filled with decompressed
data, as processed by the OpenJPEG decompression engine
- We need to fill the class "image" with the proper pixel sample values
*/
{
int shiftbpp;
int c, tempcomps;
// check components number
if (m_components > opjimage->numcomps)
m_components = opjimage->numcomps;
// check image depth (only on the first one, for now)
if (m_components)
shiftbpp = opjimage->comps[m_components - 1].prec - 8;
else
shiftbpp = opjimage->comps[0].prec - 8;
// prepare image size
if (m_components)
image->Create(opjimage->comps[m_components - 1].w, opjimage->comps[m_components - 1].h, true);
else
image->Create(opjimage->comps[0].w, opjimage->comps[0].h, true);
// access image raw data
image->SetMask(false);
ptr = image->GetData();
// workaround for components different from 1 or 3
if ((opjimage->numcomps != 1) && (opjimage->numcomps != 3)) {
#ifndef __WXGTK__
wxMutexGuiEnter();
#endif /* __WXGTK__ */
wxLogMessage(wxT("JPEG2000: weird number of components"));
#ifndef __WXGTK__
wxMutexGuiLeave();
#endif /* __WXGTK__ */
tempcomps = 1;
} else
tempcomps = opjimage->numcomps;
// workaround for subsampled components
for (c = 1; c < tempcomps; c++) {
if ((opjimage->comps[c].w != opjimage->comps[c - 1].w) || (opjimage->comps[c].h != opjimage->comps[c - 1].h)) {
tempcomps = 1;
break;
}
}
// workaround for different precision components
for (c = 1; c < tempcomps; c++) {
if (opjimage->comps[c].bpp != opjimage->comps[c - 1].bpp) {
tempcomps = 1;
break;
}
}
// only one component selected
if (m_components)
tempcomps = 1;
// RGB color picture
if (tempcomps == 3) {
int row, col;
int *r = opjimage->comps[0].data;
int *g = opjimage->comps[1].data;
int *b = opjimage->comps[2].data;
if (shiftbpp > 0) {
for (row = 0; row < opjimage->comps[0].h; row++) {
for (col = 0; col < opjimage->comps[0].w; col++) {
*(ptr++) = (*(r++)) >> shiftbpp;
*(ptr++) = (*(g++)) >> shiftbpp;
*(ptr++) = (*(b++)) >> shiftbpp;
}
}
} else if (shiftbpp < 0) {
for (row = 0; row < opjimage->comps[0].h; row++) {
for (col = 0; col < opjimage->comps[0].w; col++) {
*(ptr++) = (*(r++)) << -shiftbpp;
*(ptr++) = (*(g++)) << -shiftbpp;
*(ptr++) = (*(b++)) << -shiftbpp;
}
}
} else {
for (row = 0; row < opjimage->comps[0].h; row++) {
for (col = 0; col < opjimage->comps[0].w; col++) {
*(ptr++) = *(r++);
*(ptr++) = *(g++);
*(ptr++) = *(b++);
}
}
}
}
// B/W picture
if (tempcomps == 1) {
int row, col;
int selcomp;
if (m_components)
selcomp = m_components - 1;
else
selcomp = 0;
int *y = opjimage->comps[selcomp].data;
if (shiftbpp > 0) {
for (row = 0; row < opjimage->comps[selcomp].h; row++) {
for (col = 0; col < opjimage->comps[selcomp].w; col++) {
*(ptr++) = (*(y)) >> shiftbpp;
*(ptr++) = (*(y)) >> shiftbpp;
*(ptr++) = (*(y++)) >> shiftbpp;
}
}
} else if (shiftbpp < 0) {
for (row = 0; row < opjimage->comps[selcomp].h; row++) {
for (col = 0; col < opjimage->comps[selcomp].w; col++) {
*(ptr++) = (*(y)) << -shiftbpp;
*(ptr++) = (*(y)) << -shiftbpp;
*(ptr++) = (*(y++)) << -shiftbpp;
}
}
} else {
for (row = 0; row < opjimage->comps[selcomp].h; row++) {
for (col = 0; col < opjimage->comps[selcomp].w; col++) {
*(ptr++) = *(y);
*(ptr++) = *(y);
*(ptr++) = *(y++);
}
}
}
}
}

View File

@@ -0,0 +1,762 @@
/*
* Copyright (c) 2007, Digital Signal Processing Laboratory, Universit<69> degli studi di Perugia (UPG), Italy
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
/////////////////////////////////////////////////////////////////////////////
// Name: imagmj2.cpp
// Purpose: wxImage Motion JPEG 2000 file format handler
// Author: Giuseppe Baruffa - based on imagjpeg.cpp, Vaclav Slavik
// RCS-ID: $Id: imagmj2.cpp,v 0.00 2007/02/18 23:59:00 MW Exp $
// Copyright: (c) Giuseppe Baruffa
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#if wxUSE_IMAGE && wxUSE_LIBOPENJPEG
#include "imagmj2.h"
#ifndef WX_PRECOMP
#include "wx/log.h"
#include "wx/app.h"
#include "wx/intl.h"
#include "wx/bitmap.h"
#include "wx/module.h"
#endif
#include "libopenjpeg/openjpeg.h"
#include "wx/filefn.h"
#include "wx/wfstream.h"
// ----------------------------------------------------------------------------
// types
// ----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// wxMJ2Handler
//-----------------------------------------------------------------------------
IMPLEMENT_DYNAMIC_CLASS(wxMJ2Handler,wxImageHandler)
#if wxUSE_STREAMS
//------------- JPEG 2000 Data Source Manager
#define J2K_CFMT 0
#define JP2_CFMT 1
#define JPT_CFMT 2
#define MJ2_CFMT 3
#define PXM_DFMT 0
#define PGX_DFMT 1
#define BMP_DFMT 2
#define YUV_DFMT 3
#define MAX_MESSAGE_LEN 200
/* sample error callback expecting a FILE* client object */
void mj2_error_callback(const char *msg, void *client_data) {
int message_len = strlen(msg) - 1;
if (msg[message_len] != '\n')
message_len = MAX_MESSAGE_LEN;
#ifndef __WXGTK__
wxMutexGuiEnter();
#endif /* __WXGTK__ */
wxLogMessage(wxT("[ERROR] %.*s"), message_len, msg);
#ifndef __WXGTK__
wxMutexGuiLeave();
#endif /* __WXGTK__ */
}
/* sample warning callback expecting a FILE* client object */
void mj2_warning_callback(const char *msg, void *client_data) {
int message_len = strlen(msg) - 1;
if (msg[message_len] != '\n')
message_len = MAX_MESSAGE_LEN;
#ifndef __WXGTK__
wxMutexGuiEnter();
#endif /* __WXGTK__ */
wxLogMessage(wxT("[WARNING] %.*s"), message_len, msg);
#ifndef __WXGTK__
wxMutexGuiLeave();
#endif /* __WXGTK__ */
}
/* sample debug callback expecting no client object */
void mj2_info_callback(const char *msg, void *client_data) {
int message_len = strlen(msg) - 1;
if (msg[message_len] != '\n')
message_len = MAX_MESSAGE_LEN;
#ifndef __WXGTK__
wxMutexGuiEnter();
#endif /* __WXGTK__ */
wxLogMessage(wxT("[INFO] %.*s"), message_len, msg);
#ifndef __WXGTK__
wxMutexGuiLeave();
#endif /* __WXGTK__ */
}
/* macro functions */
/* From little endian to big endian, 2 and 4 bytes */
#define BYTE_SWAP2(X) ((X & 0x00FF) << 8) | ((X & 0xFF00) >> 8)
#define BYTE_SWAP4(X) ((X & 0x000000FF) << 24) | ((X & 0x0000FF00) << 8) | ((X & 0x00FF0000) >> 8) | ((X & 0xFF000000) >> 24)
#define BYTE_SWAP8(X) ((X & 0x00000000000000FF) << 56) | ((X & 0x000000000000FF00) << 40) | \
((X & 0x0000000000FF0000) << 24) | ((X & 0x00000000FF000000) << 8) | \
((X & 0x000000FF00000000) >> 8) | ((X & 0x0000FF0000000000) >> 24) | \
((X & 0x00FF000000000000) >> 40) | ((X & 0xFF00000000000000) >> 56)
/* From codestream to int values */
#define STREAM_TO_UINT32(C, P) (((unsigned long int) (C)[(P) + 0] << 24) + \
((unsigned long int) (C)[(P) + 1] << 16) + \
((unsigned long int) (C)[(P) + 2] << 8) + \
((unsigned long int) (C)[(P) + 3] << 0))
#define STREAM_TO_UINT16(C, P) (((unsigned long int) (C)[(P) + 0] << 8) + \
((unsigned long int) (C)[(P) + 1] << 0))
/* defines */
#define SHORT_DESCR_LEN 32
#define LONG_DESCR_LEN 256
/* enumeration for file formats */
#define J2FILENUM 4
typedef enum {
JP2_FILE,
J2K_FILE,
MJ2_FILE,
UNK_FILE
} my_j2filetype;
/* enumeration for the box types */
#define J2BOXNUM 23
typedef enum {
FILE_BOX,
JP_BOX,
FTYP_BOX,
JP2H_BOX,
IHDR_BOX,
COLR_BOX,
JP2C_BOX,
JP2I_BOX,
XML_BOX,
UUID_BOX,
UINF_BOX,
MOOV_BOX,
MVHD_BOX,
TRAK_BOX,
TKHD_BOX,
MDIA_BOX,
MINF_BOX,
STBL_BOX,
STSD_BOX,
MJP2_BOX,
MDAT_BOX,
ANY_BOX,
UNK_BOX
} my_j2boxtype;
/* jp2 family box signatures */
#define FILE_SIGN ""
#define JP_SIGN "jP\040\040"
#define FTYP_SIGN "ftyp"
#define JP2H_SIGN "jp2h"
#define IHDR_SIGN "ihdr"
#define COLR_SIGN "colr"
#define JP2C_SIGN "jp2c"
#define JP2I_SIGN "jp2i"
#define XML_SIGN "xml\040"
#define UUID_SIGN "uuid"
#define UINF_SIGN "uinf"
#define MOOV_SIGN "moov"
#define MVHD_SIGN "mvhd"
#define TRAK_SIGN "trak"
#define TKHD_SIGN "tkhd"
#define MDIA_SIGN "mdia"
#define MINF_SIGN "minf"
#define VMHD_SIGN "vmhd"
#define STBL_SIGN "stbl"
#define STSD_SIGN "stsd"
#define MJP2_SIGN "mjp2"
#define MDAT_SIGN "mdat"
#define ANY_SIGN ""
#define UNK_SIGN ""
/* the box structure itself */
struct my_boxdef {
char value[5]; /* hexadecimal value/string*/
char name[SHORT_DESCR_LEN]; /* short description */
char descr[LONG_DESCR_LEN]; /* long description */
int sbox; /* is it a superbox? */
int req[J2FILENUM]; /* mandatory box */
my_j2boxtype ins; /* contained in box... */
};
/* the possible boxes */
struct my_boxdef j2box[] =
{
/* sign */ {FILE_SIGN,
/* short */ "placeholder for nothing",
/* long */ "Nothing to say",
/* sbox */ 0,
/* req */ {1, 1, 1},
/* ins */ FILE_BOX},
/* sign */ {JP_SIGN,
/* short */ "JPEG 2000 Signature box",
/* long */ "This box uniquely identifies the file as being part of the JPEG 2000 family of files",
/* sbox */ 0,
/* req */ {1, 1, 1},
/* ins */ FILE_BOX},
/* sign */ {FTYP_SIGN,
/* short */ "File Type box",
/* long */ "This box specifies file type, version and compatibility information, including specifying if this file "
"is a conforming JP2 file or if it can be read by a conforming JP2 reader",
/* sbox */ 0,
/* req */ {1, 1, 1},
/* ins */ FILE_BOX},
/* sign */ {JP2H_SIGN,
/* short */ "JP2 Header box",
/* long */ "This box contains a series of boxes that contain header-type information about the file",
/* sbox */ 1,
/* req */ {1, 1, 1},
/* ins */ FILE_BOX},
/* sign */ {IHDR_SIGN,
/* short */ "Image Header box",
/* long */ "This box specifies the size of the image and other related fields",
/* sbox */ 0,
/* req */ {1, 1, 1},
/* ins */ JP2H_BOX},
/* sign */ {COLR_SIGN,
/* short */ "Colour Specification box",
/* long */ "This box specifies the colourspace of the image",
/* sbox */ 0,
/* req */ {1, 1, 1},
/* ins */ JP2H_BOX},
/* sign */ {JP2C_SIGN,
/* short */ "Contiguous Codestream box",
/* long */ "This box contains the codestream as defined by Annex A",
/* sbox */ 0,
/* req */ {1, 1, 1},
/* ins */ FILE_BOX},
/* sign */ {JP2I_SIGN,
/* short */ "Intellectual Property box",
/* long */ "This box contains intellectual property information about the image",
/* sbox */ 0,
/* req */ {0, 0, 0},
/* ins */ FILE_BOX},
/* sign */ {XML_SIGN,
/* short */ "XML box",
/* long */ "This box provides a tool by which vendors can add XML formatted information to a JP2 file",
/* sbox */ 0,
/* req */ {0, 0, 0},
/* ins */ FILE_BOX},
/* sign */ {UUID_SIGN,
/* short */ "UUID box",
/* long */ "This box provides a tool by which vendors can add additional information to a file "
"without risking conflict with other vendors",
/* sbox */ 0,
/* req */ {0, 0, 0},
/* ins */ FILE_BOX},
/* sign */ {UINF_SIGN,
/* short */ "UUID Info box",
/* long */ "This box provides a tool by which a vendor may provide access to additional information associated with a UUID",
/* sbox */ 0,
/* req */ {0, 0, 0},
/* ins */ FILE_BOX},
/* sign */ {MOOV_SIGN,
/* short */ "Movie box",
/* long */ "This box contains the media data. In video tracks, this box would contain JPEG2000 video frames",
/* sbox */ 1,
/* req */ {1, 1, 1},
/* ins */ FILE_BOX},
/* sign */ {MVHD_SIGN,
/* short */ "Movie Header box",
/* long */ "This box defines overall information which is media-independent, and relevant to the entire presentation "
"considered as a whole",
/* sbox */ 0,
/* req */ {1, 1, 1},
/* ins */ MOOV_BOX},
/* sign */ {TRAK_SIGN,
/* short */ "Track box",
/* long */ "This is a container box for a single track of a presentation. A presentation may consist of one or more tracks",
/* sbox */ 1,
/* req */ {1, 1, 1},
/* ins */ MOOV_BOX},
/* sign */ {TKHD_SIGN,
/* short */ "Track Header box",
/* long */ "This box specifies the characteristics of a single track. Exactly one Track Header Box is contained in a track",
/* sbox */ 0,
/* req */ {1, 1, 1},
/* ins */ TRAK_BOX},
/* sign */ {MDIA_SIGN,
/* short */ "Media box",
/* long */ "The media declaration container contains all the objects which declare information about the media data "
"within a track",
/* sbox */ 1,
/* req */ {1, 1, 1},
/* ins */ TRAK_BOX},
/* sign */ {MINF_SIGN,
/* short */ "Media Information box",
/* long */ "This box contains all the objects which declare characteristic information of the media in the track",
/* sbox */ 1,
/* req */ {1, 1, 1},
/* ins */ MDIA_BOX},
/* sign */ {STBL_SIGN,
/* short */ "Sample Table box",
/* long */ "The sample table contains all the time and data indexing of the media samples in a track",
/* sbox */ 1,
/* req */ {1, 1, 1},
/* ins */ MINF_BOX},
/* sign */ {STSD_SIGN,
/* short */ "Sample Description box",
/* long */ "The sample description table gives detailed information about the coding type used, and any initialization "
"information needed for that coding",
/* sbox */ 0,
/* req */ {1, 1, 1},
/* ins */ MINF_BOX},
/* sign */ {MJP2_SIGN,
/* short */ "MJP2 Sample Description box",
/* long */ "The MJP2 sample description table gives detailed information about the coding type used, and any initialization "
"information needed for that coding",
/* sbox */ 0,
/* req */ {1, 1, 1},
/* ins */ MINF_BOX},
/* sign */ {MDAT_SIGN,
/* short */ "Media Data box",
/* long */ "The meta-data for a presentation is stored in the single Movie Box which occurs at the top-level of a file",
/* sbox */ 1,
/* req */ {1, 1, 1},
/* ins */ FILE_BOX},
/* sign */ {ANY_SIGN,
/* short */ "Any box",
/* long */ "All the existing boxes",
/* sbox */ 0,
/* req */ {0, 0, 0},
/* ins */ FILE_BOX},
/* sign */ {UNK_SIGN,
/* short */ "Unknown Type box",
/* long */ "The signature is not recognised to be that of an existing box",
/* sbox */ 0,
/* req */ {0, 0, 0},
/* ins */ ANY_BOX}
};
/* declaration */
int
my_box_handler_function(my_j2boxtype boxtype, wxInputStream& stream, unsigned long int filepoint, unsigned long int filelimit, int level,
char *scansign, unsigned long int *scanpoint);
#ifdef __WXMSW__
typedef unsigned __int64 int8byte;
#endif // __WXMSW__
#ifdef __WXGTK__
typedef unsigned long long int8byte;
#endif // __WXGTK__
/* internal mini-search for a box signature */
int
my_jpeg2000parse(wxInputStream& stream, unsigned long int filepoint, unsigned long int filelimit, int level,
char *scansign, unsigned long int *scanpoint)
{
unsigned long int LBox = 0x00000000;
//int LBox_read;
char TBox[5] = "\0\0\0\0";
//int TBox_read;
int8byte XLBox = 0x0000000000000000;
//int XLBox_read;
unsigned long int box_length = 0;
int last_box = 0, box_num = 0;
int box_type = ANY_BOX;
unsigned char /*onebyte[1], twobytes[2],*/ fourbytes[4];
int box_number = 0;
/* cycle all over the file */
box_num = 0;
last_box = 0;
while (!last_box) {
/* do not exceed file limit */
if (filepoint >= filelimit)
return (0);
/* seek on file */
if (stream.SeekI(filepoint, wxFromStart) == wxInvalidOffset)
return (-1);
/* read the mandatory LBox, 4 bytes */
if (!stream.Read(fourbytes, 4)) {
(wxT("Problem reading LBox from the file (file ended?)"));
return -1;
};
LBox = STREAM_TO_UINT32(fourbytes, 0);
/* read the mandatory TBox, 4 bytes */
if (!stream.Read(TBox, 4)) {
wxLogError(wxT("Problem reading TBox from the file (file ended?)"));
return -1;
};
/* look if scansign is got */
if ((scansign != NULL) && (memcmp(TBox, scansign, 4) == 0)) {
/* hack/exploit */
// stop as soon as you find the level-th codebox
if (box_number == level) {
memcpy(scansign, " ", 4);
*scanpoint = filepoint;
return (0);
} else
box_number++;
};
/* determine the box type */
for (box_type = JP_BOX; box_type < UNK_BOX; box_type++)
if (memcmp(TBox, j2box[box_type].value, 4) == 0)
break;
/* read the optional XLBox, 8 bytes */
if (LBox == 1) {
if (!stream.Read(&XLBox, 8)) {
wxLogError(wxT("Problem reading XLBox from the file (file ended?)"));
return -1;
};
box_length = (unsigned long int) BYTE_SWAP8(XLBox);
} else if (LBox == 0x00000000) {
/* last box in file */
last_box = 1;
box_length = filelimit - filepoint;
} else
box_length = LBox;
/* go deep in the box */
my_box_handler_function((my_j2boxtype) box_type, stream, (LBox == 1) ? (filepoint + 16) : (filepoint + 8), filepoint + box_length, level,
scansign, scanpoint);
/* if it's a superbox go inside it */
if (j2box[box_type].sbox)
my_jpeg2000parse(stream, (LBox == 1) ? (filepoint + 16) : (filepoint + 8), filepoint + box_length,
level, scansign, scanpoint);
/* increment box number and filepoint*/
box_num++;
filepoint += box_length;
};
/* all good */
return (0);
}
// search first contiguos codestream box in an mj2 file
unsigned long int
searchjp2c(wxInputStream& stream, unsigned long int fsize, int number)
{
char scansign[] = "jp2c";
unsigned long int scanpoint = 0L;
wxLogMessage(wxT("MJ2: searching jp2c box... "));
/* do the parsing */
if (my_jpeg2000parse(stream, 0, fsize, number, scansign, &scanpoint) < 0)
wxLogMessage(wxT("MJ2: Unrecoverable error during file parsing: stopping"));
if (strcmp(scansign, " "))
wxLogMessage(wxT("MJ2: not found"));
else {
wxLogMessage(wxString::Format(wxT("MJ2: found at byte %d"), scanpoint));
};
return (scanpoint);
}
// search the jp2h box in the file
unsigned long int
searchjpegheaderbox(wxInputStream& stream, unsigned long int fsize)
{
char scansign[] = "jp2h";
unsigned long int scanpoint = 0L;
wxLogMessage(wxT("MJ2: searching jp2h box... "));
/* do the parsing */
if (my_jpeg2000parse(stream, 0, fsize, 0, scansign, &scanpoint) < 0)
wxLogMessage(wxT("Unrecoverable error during file parsing: stopping"));
if (strcmp(scansign, " "))
wxLogMessage(wxT("MJ2: not found"));
else
wxLogMessage(wxString::Format(wxT("MJ2: found at byte %d"), scanpoint));
return (scanpoint);
}
/* handling functions */
#define ITEM_PER_ROW 10
/* Box handler function */
int
my_box_handler_function(my_j2boxtype boxtype, wxInputStream& stream, unsigned long int filepoint, unsigned long int filelimit, int level,
char *scansign, unsigned long int *scanpoint)
{
switch (boxtype) {
/* Sample Description box */
case (STSD_BOX):
my_jpeg2000parse(stream, filepoint + 8, filelimit, level, scansign, scanpoint);
break;
/* MJP2 Sample Description box */
case (MJP2_BOX):
my_jpeg2000parse(stream, filepoint + 78, filelimit, level, scansign, scanpoint);
break;
/* not yet implemented */
default:
break;
};
return (0);
}
// the jP and ftyp parts of the header
#define my_jPheadSIZE 32
unsigned char my_jPhead[my_jPheadSIZE] = {
0x00, 0x00, 0x00, 0x0C, 'j', 'P', ' ', ' ',
0x0D, 0x0A, 0x87, 0x0A, 0x00, 0x00, 0x00, 0x14,
'f', 't', 'y', 'p', 'j', 'p', '2', ' ',
0x00, 0x00, 0x00, 0x00, 'j', 'p', '2', ' '
};
/////////////////////////////////////////////////
/////////////////////////////////////////////////
// load the mj2 file format
bool wxMJ2Handler::LoadFile(wxImage *image, wxInputStream& stream, bool verbose, int index)
{
opj_dparameters_t parameters; /* decompression parameters */
opj_event_mgr_t event_mgr; /* event manager */
opj_image_t *opjimage = NULL;
unsigned char *src = NULL;
unsigned char *ptr;
int file_length, jp2c_point, jp2h_point;
unsigned long int jp2hboxlen, jp2cboxlen;
// destroy the image
image->Destroy();
/* handle to a decompressor */
opj_dinfo_t* dinfo = NULL;
opj_cio_t *cio = NULL;
/* configure the event callbacks (not required) */
memset(&event_mgr, 0, sizeof(opj_event_mgr_t));
event_mgr.error_handler = mj2_error_callback;
event_mgr.warning_handler = mj2_warning_callback;
event_mgr.info_handler = mj2_info_callback;
/* set decoding parameters to default values */
opj_set_default_decoder_parameters(&parameters);
/* prepare parameters */
strncpy(parameters.infile, "", sizeof(parameters.infile)-1);
strncpy(parameters.outfile, "", sizeof(parameters.outfile)-1);
parameters.decod_format = JP2_CFMT;
parameters.cod_format = BMP_DFMT;
if (m_reducefactor)
parameters.cp_reduce = m_reducefactor;
if (m_qualitylayers)
parameters.cp_layer = m_qualitylayers;
/*if (n_components)
parameters. = n_components;*/
/* JPWL only */
#ifdef USE_JPWL
parameters.jpwl_exp_comps = m_expcomps;
parameters.jpwl_max_tiles = m_maxtiles;
parameters.jpwl_correct = m_enablejpwl;
#endif /* USE_JPWL */
/* get a decoder handle */
dinfo = opj_create_decompress(CODEC_JP2);
/* find length of the stream */
stream.SeekI(0, wxFromEnd);
file_length = (int) stream.TellI();
/* search for the first codestream box and the movie header box */
jp2c_point = searchjp2c(stream, file_length, m_framenum);
jp2h_point = searchjpegheaderbox(stream, file_length);
// read the jp2h box and store it
stream.SeekI(jp2h_point, wxFromStart);
stream.Read(&jp2hboxlen, sizeof(unsigned long int));
jp2hboxlen = BYTE_SWAP4(jp2hboxlen);
// read the jp2c box and store it
stream.SeekI(jp2c_point, wxFromStart);
stream.Read(&jp2cboxlen, sizeof(unsigned long int));
jp2cboxlen = BYTE_SWAP4(jp2cboxlen);
// malloc memory source
src = (unsigned char *) malloc(my_jPheadSIZE + jp2hboxlen + jp2cboxlen);
// copy the jP and ftyp
memcpy(src, my_jPhead, my_jPheadSIZE);
// copy the jp2h
stream.SeekI(jp2h_point, wxFromStart);
stream.Read(&src[my_jPheadSIZE], jp2hboxlen);
// copy the jp2c
stream.SeekI(jp2c_point, wxFromStart);
stream.Read(&src[my_jPheadSIZE + jp2hboxlen], jp2cboxlen);
/* catch events using our callbacks and give a local context */
opj_set_event_mgr((opj_common_ptr)dinfo, &event_mgr, stderr);
/* setup the decoder decoding parameters using user parameters */
opj_setup_decoder(dinfo, &parameters);
/* open a byte stream */
cio = opj_cio_open((opj_common_ptr)dinfo, src, my_jPheadSIZE + jp2hboxlen + jp2cboxlen);
/* decode the stream and fill the image structure */
opjimage = opj_decode(dinfo, cio);
if (!opjimage) {
wxMutexGuiEnter();
wxLogError(wxT("MJ2: failed to decode image!"));
wxMutexGuiLeave();
opj_destroy_decompress(dinfo);
opj_cio_close(cio);
free(src);
return false;
}
/* close the byte stream */
opj_cio_close(cio);
/* common rendering method */
#include "imagjpeg2000.cpp"
wxMutexGuiEnter();
wxLogMessage(wxT("MJ2: image loaded."));
wxMutexGuiLeave();
/* close openjpeg structs */
opj_destroy_decompress(dinfo);
opj_image_destroy(opjimage);
free(src);
if (!image->Ok())
return false;
else
return true;
}
// save the mj2 file format
bool wxMJ2Handler::SaveFile( wxImage *image, wxOutputStream& stream, bool verbose )
{
wxLogError(wxT("MJ2: Couldn't save movie -> not implemented."));
return false;
}
#ifdef __VISUALC__
#pragma warning(default:4611)
#endif /* VC++ */
// recognize the Motion JPEG 2000 starting box
bool wxMJ2Handler::DoCanRead( wxInputStream& stream )
{
unsigned char hdr[24];
if ( !stream.Read(hdr, WXSIZEOF(hdr)) )
return false;
return (hdr[0] == 0x00 &&
hdr[1] == 0x00 &&
hdr[2] == 0x00 &&
hdr[3] == 0x0C &&
hdr[4] == 0x6A &&
hdr[5] == 0x50 &&
hdr[6] == 0x20 &&
hdr[7] == 0x20 &&
hdr[20] == 0x6D &&
hdr[21] == 0x6A &&
hdr[22] == 0x70 &&
hdr[23] == 0x32);
}
#endif // wxUSE_STREAMS
#endif // wxUSE_LIBOPENJPEG

View File

@@ -0,0 +1,92 @@
/*
* Copyright (c) 2007, Digital Signal Processing Laboratory, Universit<69> degli studi di Perugia (UPG), Italy
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
/////////////////////////////////////////////////////////////////////////////
// Name: imagmj2.h
// Purpose: wxImage Motion JPEG 2000 file format handler
// Author: G. Baruffa - based on imagjpeg.h, Vaclav Slavik
// RCS-ID: $Id: imagmj2.h,v 0.0 2007/02/18 23:45:00 VZ Exp $
// Copyright: (c) Giuseppe Baruffa
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifndef _WX_IMAGMJ2_H_
#define _WX_IMAGMJ2_H_
#include "wx/defs.h"
//-----------------------------------------------------------------------------
// wxMJ2Handler
//-----------------------------------------------------------------------------
#if wxUSE_LIBOPENJPEG
#include "wx/image.h"
#include "libopenjpeg/openjpeg.h"
#define wxBITMAP_TYPE_MJ2 49
class WXDLLEXPORT wxMJ2Handler: public wxImageHandler
{
public:
inline wxMJ2Handler()
{
m_name = wxT("Motion JPEG 2000 file format");
m_extension = wxT("mj2");
m_type = wxBITMAP_TYPE_MJ2;
m_mime = wxT("image/mj2");
m_reducefactor = 0;
m_qualitylayers = 0;
m_components = 0;
#ifdef USE_JPWL
m_enablejpwl = true;
m_expcomps = JPWL_EXPECTED_COMPONENTS;
m_maxtiles = JPWL_MAXIMUM_TILES;
#endif // USE_JPWL
}
// decoding engine parameters
int m_reducefactor, m_qualitylayers, m_components, m_framenum;
#ifdef USE_JPWL
bool m_enablejpwl;
int m_expcomps, m_maxtiles;
#endif // USE_JPWL
#if wxUSE_STREAMS
virtual bool LoadFile( wxImage *image, wxInputStream& stream, bool verbose=true, int index=-1 );
virtual bool SaveFile( wxImage *image, wxOutputStream& stream, bool verbose=true );
protected:
virtual bool DoCanRead( wxInputStream& stream );
#endif
private:
DECLARE_DYNAMIC_CLASS(wxMJ2Handler)
};
#endif // wxUSE_LIBOPENJPEG
#endif // _WX_IMAGMJ2_H_

View File

@@ -0,0 +1,14 @@
Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium
Copyright (c) 2002-2007, Professor Benoit Macq
Copyright (c) 2001-2003, David Janssens
Copyright (c) 2002-2003, Yannick Verschueren
Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe
Copyright (c) 2005, Herve Drolon, FreeImage Team
Copyright (c) 2007, Digital Signal Processing Laboratory, Universit<69> degli studi di Perugia (UPG), Italy
All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditionsare met:
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

View File

@@ -0,0 +1,285 @@
/* XPM */
static char *opj_logo[] = {
/* columns rows colors chars-per-pixel */
"90 61 218 2",
" c #BE3D12",
". c #BF461D",
"X c #AD5435",
"o c #B64925",
"O c #B54E2B",
"+ c #BC4620",
"@ c #BB4B25",
"# c #BC4E29",
"$ c #B5502F",
"% c #BD512C",
"& c #B45334",
"* c #B35638",
"= c #B45B3D",
"- c #BB5533",
"; c #BE5937",
": c #BC5C3D",
"> c #9C766A",
", c #AD5D42",
"< c #B55F41",
"1 c #BA5E40",
"2 c #A7634D",
"3 c #A76C57",
"4 c #AA6750",
"5 c #AC6B56",
"6 c #AA6E5A",
"7 c #A4705E",
"8 c #B46045",
"9 c #B1644B",
"0 c #BD6244",
"q c #B96448",
"w c #BC694D",
"e c #B36B53",
"r c #B26E58",
"t c #BB6C52",
"y c #B2725D",
"u c #BD7056",
"i c #BB745C",
"p c #A67566",
"a c #A57B6D",
"s c #AE7562",
"d c #AB7867",
"f c #AA7C6C",
"g c #A07E73",
"h c #AA7F71",
"j c #B37661",
"k c #B47863",
"l c #B27D6B",
"z c #BB7863",
"x c #BA7E69",
"c c #C73605",
"v c #C63A0B",
"b c #CB3300",
"n c #CA3807",
"m c #C93A0A",
"M c #C43E11",
"N c #C93E10",
"B c #C44115",
"V c #C3441A",
"C c #C4481E",
"Z c #CA4113",
"A c #C94519",
"S c #CB481C",
"D c #C24A23",
"F c #C24F28",
"G c #CD4D23",
"H c #C4522D",
"J c #CB532B",
"K c #C25632",
"L c #C35936",
"P c #C25C3B",
"I c #C85630",
"U c #CB5933",
"Y c #CB5E3A",
"T c #D05026",
"R c #CC613D",
"E c #C26343",
"W c #C46748",
"Q c #C1694C",
"! c #CD6744",
"~ c #CA6C4D",
"^ c #C37155",
"/ c #C4755B",
"( c #CB7356",
") c #C8765B",
"_ c #D06D4C",
"` c #D07253",
"' c #D47B5E",
"] c #C37B63",
"[ c #C27E68",
"{ c #C97F68",
"} c #A68175",
"| c #A48479",
" . c #AD8172",
".. c #AD8578",
"X. c #AB897D",
"o. c #B1806F",
"O. c #BA816F",
"+. c #B38373",
"@. c #B58778",
"#. c #B3897B",
"$. c #BA8472",
"%. c #BB8C7C",
"&. c #C2816B",
"*. c #CD846C",
"=. c #C38470",
"-. c #C38976",
";. c #C38D7B",
":. c #CC8973",
">. c #CF8F7A",
",. c #CB907D",
"<. c #D1937F",
"1. c #948E8C",
"2. c #9D8C86",
"3. c #9D8F89",
"4. c #96908E",
"5. c #9C918D",
"6. c #949392",
"7. c #9B9492",
"8. c #9D9997",
"9. c #9D9C9C",
"0. c #A38B83",
"q. c #AA8D83",
"w. c #A4918B",
"e. c #AC9087",
"r. c #AB938C",
"t. c #A49590",
"y. c #A29996",
"u. c #A19D9C",
"i. c #AA9790",
"p. c #AC9994",
"a. c #AC9E99",
"s. c #B18D81",
"d. c #B59084",
"f. c #B49389",
"g. c #BA9184",
"h. c #B89589",
"j. c #BA988D",
"k. c #B29B93",
"l. c #BC9C92",
"z. c #ACA19D",
"x. c #B1A19D",
"c. c #BCA39B",
"v. c #A3A3A3",
"b. c #ABA5A3",
"n. c #AEA9A7",
"m. c #ABABAA",
"M. c #B3A5A1",
"N. c #B3A9A6",
"B. c #B3ADAA",
"V. c #B9A6A0",
"C. c #B9AAA5",
"Z. c #BAADA9",
"A. c #B4B0AF",
"S. c #BAB0AD",
"D. c #B4B3B3",
"F. c #BAB5B3",
"G. c #BDB8B6",
"H. c #BBBBBB",
"J. c #C39384",
"K. c #C0978A",
"L. c #C2998B",
"P. c #CA9483",
"I. c #CD9A8A",
"U. c #C19D92",
"Y. c #D69B89",
"T. c #DB9680",
"R. c #C2A095",
"E. c #C4A69C",
"W. c #CCA193",
"Q. c #C8A599",
"!. c #CBA99D",
"~. c #C6AEA6",
"^. c #CCACA2",
"/. c #CBB2AB",
"(. c #C3B8B5",
"). c #C2BDBC",
"_. c #C9B9B3",
"`. c #D3ADA0",
"'. c #D3B4A9",
"]. c #DCB2A4",
"[. c #DEB6A8",
"{. c #D1BFB9",
"}. c #D9BEB5",
"|. c #C5C0BE",
" X c #CDC0BC",
".X c #D2C1BB",
"XX c #DDC3BB",
"oX c #E0C5BC",
"OX c #E0C8BF",
"+X c #C2C2C2",
"@X c #CBC4C2",
"#X c #CDC8C6",
"$X c #CCCBCB",
"%X c #D2C6C2",
"&X c #D1CECD",
"*X c #DDC8C1",
"=X c #DECFCA",
"-X c #D9D1CE",
";X c #D3D3D3",
":X c #D9D5D4",
">X c #DED9D7",
",X c #DBDBDB",
"<X c #E1CAC3",
"1X c #E2CFC8",
"2X c #E1D3CE",
"3X c #E2D5D0",
"4X c #E5D8D3",
"5X c #E4DDDB",
"6X c #E8DBD6",
"7X c #EADEDA",
"8X c #E6E0DE",
"9X c #EBE0DC",
"0X c #E4E4E4",
"qX c #E8E2E0",
"wX c #EBEBEB",
"eX c #F0EAE8",
"rX c #F3F3F3",
"tX c #FEFEFE",
/* pixels */
"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
"tXtXtXtXtXtXtXtXtXtXtXrXrXtXrXrXrXrXrXrXrXtXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
"tXtXtXtXtXtXtXtXtXrXtXrXrXrXwXwXrXwXrXrXrXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
"tXtXtXtXtXtXtXtXrXrXrXwXwX0X0XqX0X0X0X0XwXwXwXrXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
"tXtXtXtXtXtXtXrXtXrXwXwX2X[.[.].].].].].1XwXrXwXrXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
"tXtXtXtXtXrXrXrXwX0X0XL.J b b b b b b b J '.0X0XwXwXrXrXrXrXrXrXrXrXrXrXtXrXrXrXtXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXtXtXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
"tXtXtXtXtXtXrXrXwX0XXXt m b m B V N b b v >.;X0XwXwXwXwXrXwXwXrXrXrXrXtXrXtXrXrXrXwXrXrXrXrXrXrXrXrXrXrXrXwXrXrXwXrXrXrXtXtXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
"tXtXtXtXrXrXrX0X,X'.S b b P l.z.M.k.w n b b g.;X,X,X,X0X0X0X0X0XwXwXwXwXwXwXwXwXwX0X0X0XwX0X0XwXwXwXwX0X0X0X0X0X0XwXwXwXwXrXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
"tXtXtXrXrXrXwX0X:XT.m b A ] G.D.D.m.$.m b b $.$X&X.X}.XX>XOX}.oXXX<X0X0XwXwXwX0X2XXXoXXXoXOX5X0XwX0X1XoXXX5X*X}.}.oX<XqXrXrXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
"tXtXtXrXrXwX0X,XL.b b D M.H.D.D.D.D.m.L b b W H.Z.# b Y / m b b b Z P.:X:X:X$X:.Z b b b b n :.;X;X;XR b A &.Z b b b b *.wXwXrXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
"tXtXtXtXrXwX0X:X$.b b E B.H.H.D.D.D.D.P b b E H.V.. b U L v v n b b ( #X;X$X~.Y b m N m b b ! {.&X#XI b C R v v n b b ! 0XwXrXrXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
"tXtXtXrXwX0X:X!.A b Z F.H.H.H.H.H.D.m.L b b e b.+.b b V k i.r.t n b b s.H.x v b L q.b.p.D b b t F.$.n b M l a.M.y b b A :X0XwXrXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
"tXtXtXrXwX0X:XL.m b D H.).H.+XH.H.H.D.H b b 6 v.j b b - a.A.m.@.m b b h D.< b b w z.b.b.P b b q B.z b b @ B.D.m...v b G :X,XwXwXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
"tXtXtXwX0X,X&X/ b b , D.H.+X+X+X+XH.f.B b b 5.8.M b M w.v.v.v.r.D b b h l v b b M V v b b q u.X b n @.v.m.v.j b b Q &X,X0XwXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
"tXtXtXwX0X,X$X^ b b , H.H.+X+XH.H.H.s.N b n 7.7.v b B 8.v.v.v.w.M b b g r b b b n n n b b b b e y.O b n X.m.v.n.e b b u &X,X0XrXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
"tXtXtXrX0X,X$X/ b b + F.H.H.H.+XH.d.b b M | 8.> c b @ 9.v.9.u., b b - 3.& b b 7 1.1.4.4.4.6.7.9.w.m b + t.v.m.p.D b b K.;X,X0XwXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
"tXtXtXwX0X,X$X-.b b b i D.H.G.H.J.N b b = 9.9.5 c b B 7.9.v.y.b b m f 4.O b b 3 6.6.6.g 9 4 h u.h b b - b.m.m.s.b b N ~.;X,X0XwXrXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
"tXtXtXwX0X,X;XE.G b b I z ] ] ] W n b H l 9.8.9 b b m e 6 r e b b # 0.y.< b b O 6 p 6 < # ; q.v.t b b 0 n.A.A.+.b b H _.;X,XwXwXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
"tXtXtXwXwX,X;X#Xf.b b b b b b b b b - a.v.v.w.@ b b v b b b b b @ b.m.v.w.M b b b b b b v ..m.n.A b n g.H.H.H.4 b b [ &X,X0XwXrXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
"tXtXtXwXwX0X:X$XZ.Q H v n b m B H E x n.m.m.q.B b v < . v N + E z m.m.m.b.e - M m v M - t k.D.m.; # - V.H.+XH.s # # K.:X,X0XwXrXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
"tXtXtXrXwXwX,X,X$X+XG.Z.Z.B.C.S.F.H.H.H.D.D.j b b q v.b.a.n.B.H.H.+X+X+XH.H.D.Z.C.Z.Z.F.H.H.+X+XH.).H.$X&X&X;X$X#X#X:X,X0XwXrXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
"tXtXtXrXrXwX0X,X;X#X+X+X+XH.H.+X+X+XH.H.H.D.e b n i n.m.D.H.H.+X#X$X$X+X+X+X+XH.H.H.H.+X+X+X$X&X&X&X$X;X;X;X:X;X:X,X,X0XwXwXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
"tXtXtXtXrXrXwXwX,X,X;X;X$X$X$X;X;X&X;X$X#X+XF b v s.H.H.+X$X&X;X;X,X,X,X;X:X;X;X;X;X;X;X:X,X,X,X0X,X0X,X0X0X0X0X0X0X0XwXwXrXtXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
"tXtXtXrXtXrXwXwX0X,X:X;X;X;X;X;X:X;X;X;X$X+XC b B k.+X+X$X$X;X,X,X0X0X0X0X0X;X,X,X,X,X,X,X,X,X0X0X0X0X0X0XwX0X0X0XwXwXrXrXrXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
"tXtXtXtXtXrXrXrXrXwXwXwX0X0X0X0X0X0X0X,X,X:X^.^.!.$X$X;X,X,X0XwXwXwXwXwXwXwXwX0X0X0X0XwXwXwXwXwXwXrXrXwXrXrXrXrXrXrXrXrXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
"tXtXtXtXtXtXrXrXrXrXwXwXwXwX0XwXwXwX0X0X,X:X;X$X&X&X;X,X,X0XwXwXwXrXrXrXrXrXwXwXwXwXwXwXwXrXrXrXwXrXrXrXrXrXrXrXrXrXrXtXrXtXtXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
"tXtXtXtXtXtXtXtXtXrXrXrXrXrXrXrXrXrXwXwXwXwX0X,X0X0X0XwXwXrXrXrXrXrXrXrXrXrXrXrXrXrXrXwXrXrXrXrXrXtXrXrXrXtXrXrXrXrXrXrXrXrXrXtXtXtXrXrXtXtXtXtXrXrXtXrXrXtXrXtXrXtXtXtXtXtXtXtXtXtX",
"tXtXtXtXtXtXtXtXrXtXtXrXtXrXrXrXrXrXrXwXwXwX0XwX0XwXwXwXrXrXrXtXtXrXrXrXrXrXrXrXrXwXrXwXrXwXwXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXtXrXrXtXtXrXrXrXrXrXrXrXrXrXrXtXtXtXtXtXtXtXtXtX",
"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXrXrXwXrXrXrXrXrXrXtXrXtXrXrXrXrXrXwXwXwXwXwX0X0XwX0XwXwXwXwXwXwXwXrXwXwXwX0X0X0X0XwX0XwXwXrXrXrXwXrXwXwXwX0XwX0XwXwXwXrXrXrXrXtXtXtXtXtXtX",
"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXrXrXrXrXrXrXrXtXtXrXrXtXrXrXeX7X7X9XwXwXwX5X3X3X3X2X2X2X5X0XwXwXwXwXwX8X3X3X2X2X2X2X2X3X6X6X7XwXwXwXwXwXwX7X1XXXOXOX1X8XwXwXrXrXrXtXtXtXtXtX",
"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXtXtXtXrXrXrXwXT.T T :.,X,X-X` G G G G G G U _ J.-X,X,X,X[ G G G G G G G G G G _ >XwX0X,X&XI.R N b b b m ! `.5XwXrXrXtXtXtXtXtX",
"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXtXtXtXrXtXrXrXrXwX0X' b b ] >X,X%XJ b b b b b b b b Q {.:X;X:Xq b b b b b b b b b b Y >X0X,X-X'.^ n b b b b b m *.1XwXwXrXtXtXtXtXtX",
"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXrX0X0X%XL b b L.@X+X-.b b M L L L D b b b M V.+X(.N b b D H H H H H U U W.;X&X^.H b b n W -.-.W n b b J &XwXrXtXtXtXtXtX",
"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXwXwX0X XF b b U.+X+X[ b b D z z j P v b b N U.H.S.m b m E Q t ^ ) / ) ) /.$X$X;.m b n A %.H.H.J.N b b N .XwXwXtXtXtXtXtX",
"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXwXwX,X:X!.m b L N.D.m.* b b y v.v.v.v.p.n b M f.m.w b b D u.v.m.m.D.G.H.H.+X).g.b b B j.F.D.D.D.D.l.; F I /.0XwXrXtXtXtXtX",
"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXrXwX,X:XU.n b E B.A.n.$ b b s v.9.v.v.r.n n M r.b.1 b b D u.v.m.m.D.D.H.H.).H.k b b # M.G.D.D.D.D.Z.t w u _.0XwXtXtXtXtXtX",
"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXrXwXwX,X;X$XJ b m h b.v.i.m b M a 5.5.2.p M b c < 8.2.+ b b M o o o o # % j G.H.g.m b A M.D.D.D.B.M.M.M.M.Z.(.:X0XwXrXtXtXtXtX",
"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXrXrXrXrXwX,X,X&X(.n b M 0.v.v.s b b b b b n b b c b M u.v.g M b b b b b b b b b i G.D.0 b b 8 D.D.H.G.P n b b n b U :X,XwXtXtXtXtXtX",
"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXrXrXrXwX0X,X;X$XV.n b M w.v.9.< b b b b b b b b c H r 9.v.a n b * < < w w Q Q g.D.B.: b b r D.D.D.m.C b b b b b ) ;X0XwXrXtXtXtXtX",
"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXrXrXrX6XP.=.K.;X#X+Xx n b D v.u.7.. b b M D . D & 2 q.b.b.v.v.< b b X 6.9.9.b.m.D.D.D.D.n.# b b f D.D.D.b.= 1 * N b n !.;X,XwXtXtXtXtXtX",
"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXtXrXrXwX<X~ P x $X+XH.z b b - v.v.3.M b b < r r r k 0.a.m.m.m.v.# b b , 6.9.v.m.D.D.D.H.D.z.O b b s D.D.D.N.f l 9 v b M ~.;X,XwXrXtXtXtXtX",
"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXtXrXwX0XY.n b e H.H.V.F b b p b.v.h v b v v.m.A.D.H.+X+X+XH.D.p.b b m p 9.v.m.D.D.H.H.H.D.N.- b b - m.A.D.A.m.a.B b b - (.:X0XwXrXtXtXtXtX",
"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXwXwX0XY.n b ; Z.C.$.A b v 0.m.m.l n b M m.D.D.H.+X#X+X+XH.H.r.b b m < d l l l $.;.J.V.H.B.w b b C @.s.a.k.#.j n b b : ).:X,XwXtXtXtXtXtX",
"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXrXwXwX0X'.N b b A B n b n z m.D.B.0 b b 9 H.H.+X$X;X:X;X$X$X+Xl b b b b b b b b b b b s.H.H.B.H b b b n Z Z b b V n b ] $X:X0XwXrXtXtXtXtX",
"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXwX0X,X.XR b b b b b A P d.D.D.C.H b b j H.$X$X;X:X,X,X;X;X+X/ b b b b b b b b b b b a.H.H.D.u G b b b b b B H : v m ;.$X,XwXwXtXtXtXtXtX",
"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXwXwX,X:X Xg.j 5 y s.C.H.H.+X+X|.E.Q.Q. X;X;X,X0XwXwX0X0X,X;X/.U.j.h.g.f.h.j.U.U.U.!.$X$X+X+XH.Z.g.y 4 6 l x.D.A.l.~.#X,X0XwXrXtXtXtXtXtX",
"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXrXrXwX0X:X$XG.k.e.f.B.H.H.+X$X$X$X#X$X$X;X;X,X0XwXwXwXwX0X0X;X$X+XH.D.D.D.F.H.+X+X#X&X$X;X$X$X+X+XA.r.X.e.a.H.H.H.+X+X;X,X0XwXrXtXtXtXtXtX",
"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXrXwX,X,X$X&X$X$X$X$X;X;X,X,X,X,X,X,X0XwXwXwXrXtXrXrXwXwX0X,X;X$X$X+X$X$X$X;X;X:X,X,X,X,X,X;X$X&X#X#X$X$X$X$X$X;X,X,X0XwXrXrXtXtXtXtXtX",
"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXrXwXwX0X,X:X;X;X$X;X;X:X,X,X0X0X,X0X0X0XwXwXwXrXrXtXrXrXwXwX0X;X;X$X&X$X$X&X:X,X,X,X,X0X,X,X:X;X;X$X$X$X$X$X;X:X,X,X0XwXwXrXrXtXtXtXtXtX",
"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXtXrXwXwXwX0X0X0X0X0X0XwXwXwXwXwXwXwXwXrXwXrXtXtXrXtXtXrXrXrXwX0X0X0X0X,X,X0X0X0X0XwXwXwXwXwXwX0X0X0X,X,X,X,X0X0XwXwXwXrXtXrXtXtXtXtXtXtX",
"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXrXrXrXwXwX0X0X0X0X0XwXwXwXrXwXrXrXrXrXrXtXrXtXtXtXtXrXrXrXwXwXwX0X0X0X0X0X0X0XwXwXwXwXwXwXwXwXwX0X0X0X0XwXwXwXwXwXrXrXrXtXtXtXtXtXtXtX",
"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXtXrXrXrXrXrXrXrXrXrXrXtXtXrXtXtXrXtXtXtXtXtXtXtXrXtXrXtXrXrXrXrXwXwXrXrXrXrXrXrXrXtXrXrXrXrXrXrXrXwXrXrXrXrXtXtXtXtXtXtXtXtXtXtXtX",
"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXtXrXrXrXrXrXrXtXtXrXtXrXtXrXrXtXtXtXtXtXtXtXtXtXtXtXrXrXrXrXrXrXrXrXrXrXrXtXtXrXtXrXrXtXrXrXrXrXrXrXrXrXtXrXrXtXtXtXtXtXtXtXtXtX",
"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX"
};

View File

@@ -0,0 +1,34 @@
This viewer is conceived to open and display information and image content of J2K, JP2,
and MJ2 files.
The viewer application interface is divided into three main panels:
- a browsing pane;
- a viewing pane;
- a log/peek pane.
The browsing pane will present the markers or boxes hierarchy, with position (byte number where marker/box starts and stops) and length information (i.e., inner length as signalled by marker/box and total length, with marker/box sign included), in the following form:
filename
|
|_ #000: Marker/Box short name (Hex code)
| |
| |_ *** Marker/Box long name ***
| |_ startbyte > stopbyte, inner_length + marker/box sign length (total length)
| |_ Additional info, depending on the marker/box type
| |_ ...
|
|_ #001: Marker/Box short name (Hex code)
| |
| |_ ...
|
...
The viewing pane will display the decoded image contained in the JPEG 2000 file.
It should display correctly images as large as 4000x2000, provided that a couple of GB of RAM are available. Nothing is known about the display of larger sizes: let us know if you manage to get it working.
The log/peek pane is shared among two different subpanels:
- the log panel will report a lot of debugging info coming out from the wx GUI as well as from the openjpeg library
- the peek pane tries to give a peek on the codestream/file portion which is currently selected in the browsing pane. It shows both hex and ascii values corresponding to the marker/box section.

View File

@@ -0,0 +1,11 @@
What is OpenJPEG ?
==================
The OpenJPEG library is an open-source JPEG 2000 codec written in C language. It has been developed in order to promote the use of JPEG 2000, the new still-image compression standard from the Joint Photographic Experts Group (JPEG). In addition to the basic codec, various other features are under development, among them the JP2 and MJ2 (Motion JPEG 2000) file formats, an indexing tool useful for the JPIP protocol, JPWL-tools for error-resilience, a Java-viewer for j2k-images, ...
Who can use the library ?
=========================
Anybody. As the OpenJPEG library is released under the BSD license, anybody can use or modify the library, even for commercial applications. The only restriction is to retain the copyright in the sources or the binaries documentation.
Who is developing the library ?
===============================
The library is developed by the Communications and Remote Sensing Lab (TELE), in the Universit<69> Catholique de Louvain (UCL). The JPWL module is developped and maintained by the Digital Signal Processing Lab (DSPLab) of the University of Perugia, Italy (UNIPG). As our purpose is to make OpenJPEG really useful for those interested in the image compression field, any feedback/advices are obviously welcome ! We will do our best to handle them quickly.

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,981 @@
/*
* Copyright (c) 2007, Digital Signal Processing Laboratory, Universit<69> degli studi di Perugia (UPG), Italy
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#include "OPJViewer.h"
/* defines */
#define SHORT_DESCR_LEN 32
#define LONG_DESCR_LEN 256
/* enumeration for file formats */
#define J2FILENUM 4
typedef enum {
JP2_FILE,
J2K_FILE,
MJ2_FILE,
UNK_FILE
} j2filetype;
/* enumeration for the box types */
#define j22boxNUM 23
typedef enum {
FILE_BOX,
JP_BOX,
FTYP_BOX,
JP2H_BOX,
IHDR_BOX,
COLR_BOX,
JP2C_BOX,
JP2I_BOX,
XML_BOX,
UUID_BOX,
UINF_BOX,
MOOV_BOX,
MVHD_BOX,
TRAK_BOX,
TKHD_BOX,
MDIA_BOX,
MINF_BOX,
VMHD_BOX,
STBL_BOX,
STSD_BOX,
STSZ_BOX,
MJP2_BOX,
MDAT_BOX,
ANY_BOX,
UNK_BOX
} j22boxtype;
/* the box structure itself */
struct boxdef {
char value[5]; /* hexadecimal value/string*/
char name[SHORT_DESCR_LEN]; /* short description */
char descr[LONG_DESCR_LEN]; /* long description */
int sbox; /* is it a superbox? */
int req[J2FILENUM]; /* mandatory box */
j22boxtype ins; /* contained in box... */
};
/* jp2 family box signatures */
#define FILE_SIGN ""
#define JP_SIGN "jP\040\040"
#define FTYP_SIGN "ftyp"
#define JP2H_SIGN "jp2h"
#define IHDR_SIGN "ihdr"
#define COLR_SIGN "colr"
#define JP2C_SIGN "jp2c"
#define JP2I_SIGN "jp2i"
#define XML_SIGN "xml\040"
#define UUID_SIGN "uuid"
#define UINF_SIGN "uinf"
#define MOOV_SIGN "moov"
#define MVHD_SIGN "mvhd"
#define TRAK_SIGN "trak"
#define TKHD_SIGN "tkhd"
#define MDIA_SIGN "mdia"
#define MINF_SIGN "minf"
#define VMHD_SIGN "vmhd"
#define STBL_SIGN "stbl"
#define STSD_SIGN "stsd"
#define STSZ_SIGN "stsz"
#define MJP2_SIGN "mjp2"
#define MDAT_SIGN "mdat"
#define ANY_SIGN ""
#define UNK_SIGN ""
/* the possible boxes */
struct boxdef j22box[] =
{
/* sign */ {FILE_SIGN,
/* short */ "placeholder for nothing",
/* long */ "Nothing to say",
/* sbox */ 0,
/* req */ {1, 1, 1},
/* ins */ FILE_BOX},
/* sign */ {JP_SIGN,
/* short */ "JPEG 2000 Signature box",
/* long */ "This box uniquely identifies the file as being part of the JPEG 2000 family of files",
/* sbox */ 0,
/* req */ {1, 1, 1},
/* ins */ FILE_BOX},
/* sign */ {FTYP_SIGN,
/* short */ "File Type box",
/* long */ "This box specifies file type, version and compatibility information, including specifying if this file "
"is a conforming JP2 file or if it can be read by a conforming JP2 reader",
/* sbox */ 0,
/* req */ {1, 1, 1},
/* ins */ FILE_BOX},
/* sign */ {JP2H_SIGN,
/* short */ "JP2 Header box",
/* long */ "This box contains a series of boxes that contain header-type information about the file",
/* sbox */ 1,
/* req */ {1, 1, 1},
/* ins */ FILE_BOX},
/* sign */ {IHDR_SIGN,
/* short */ "Image Header box",
/* long */ "This box specifies the size of the image and other related fields",
/* sbox */ 0,
/* req */ {1, 1, 1},
/* ins */ JP2H_BOX},
/* sign */ {COLR_SIGN,
/* short */ "Colour Specification box",
/* long */ "This box specifies the colourspace of the image",
/* sbox */ 0,
/* req */ {1, 1, 1},
/* ins */ JP2H_BOX},
/* sign */ {JP2C_SIGN,
/* short */ "Contiguous Codestream box",
/* long */ "This box contains the codestream as defined by Annex A",
/* sbox */ 0,
/* req */ {1, 1, 1},
/* ins */ FILE_BOX},
/* sign */ {JP2I_SIGN,
/* short */ "Intellectual Property box",
/* long */ "This box contains intellectual property information about the image",
/* sbox */ 0,
/* req */ {0, 0, 0},
/* ins */ FILE_BOX},
/* sign */ {XML_SIGN,
/* short */ "XML box",
/* long */ "This box provides a tool by which vendors can add XML formatted information to a JP2 file",
/* sbox */ 0,
/* req */ {0, 0, 0},
/* ins */ FILE_BOX},
/* sign */ {UUID_SIGN,
/* short */ "UUID box",
/* long */ "This box provides a tool by which vendors can add additional information to a file "
"without risking conflict with other vendors",
/* sbox */ 0,
/* req */ {0, 0, 0},
/* ins */ FILE_BOX},
/* sign */ {UINF_SIGN,
/* short */ "UUID Info box",
/* long */ "This box provides a tool by which a vendor may provide access to additional information associated with a UUID",
/* sbox */ 0,
/* req */ {0, 0, 0},
/* ins */ FILE_BOX},
/* sign */ {MOOV_SIGN,
/* short */ "Movie box",
/* long */ "This box contains the media data. In video tracks, this box would contain JPEG2000 video frames",
/* sbox */ 1,
/* req */ {1, 1, 1},
/* ins */ FILE_BOX},
/* sign */ {MVHD_SIGN,
/* short */ "Movie Header box",
/* long */ "This box defines overall information which is media-independent, and relevant to the entire presentation "
"considered as a whole",
/* sbox */ 0,
/* req */ {1, 1, 1},
/* ins */ MOOV_BOX},
/* sign */ {TRAK_SIGN,
/* short */ "Track box",
/* long */ "This is a container box for a single track of a presentation. A presentation may consist of one or more tracks",
/* sbox */ 1,
/* req */ {1, 1, 1},
/* ins */ MOOV_BOX},
/* sign */ {TKHD_SIGN,
/* short */ "Track Header box",
/* long */ "This box specifies the characteristics of a single track. Exactly one Track Header Box is contained in a track",
/* sbox */ 0,
/* req */ {1, 1, 1},
/* ins */ TRAK_BOX},
/* sign */ {MDIA_SIGN,
/* short */ "Media box",
/* long */ "The media declaration container contains all the objects which declare information about the media data "
"within a track",
/* sbox */ 1,
/* req */ {1, 1, 1},
/* ins */ TRAK_BOX},
/* sign */ {MINF_SIGN,
/* short */ "Media Information box",
/* long */ "This box contains all the objects which declare characteristic information of the media in the track",
/* sbox */ 1,
/* req */ {1, 1, 1},
/* ins */ MDIA_BOX},
/* sign */ {VMHD_SIGN,
/* short */ "Video Media Header box",
/* long */ "The video media header contains general presentation information, independent of the coding, for video media",
/* sbox */ 0,
/* req */ {1, 1, 1},
/* ins */ MINF_BOX},
/* sign */ {STBL_SIGN,
/* short */ "Sample Table box",
/* long */ "The sample table contains all the time and data indexing of the media samples in a track",
/* sbox */ 1,
/* req */ {1, 1, 1},
/* ins */ MINF_BOX},
/* sign */ {STSD_SIGN,
/* short */ "STSD Sample Description box",
/* long */ "The sample description table gives detailed information about the coding type used, and any initialization "
"information needed for that coding",
/* sbox */ 0,
/* req */ {1, 1, 1},
/* ins */ MINF_BOX},
/* sign */ {STSZ_SIGN,
/* short */ "Sample Size box",
/* long */ "This box contains the sample count and a table giving the size of each sample",
/* sbox */ 0,
/* req */ {1, 1, 1},
/* ins */ STBL_BOX},
/* sign */ {MJP2_SIGN,
/* short */ "MJP2 Sample Description box",
/* long */ "The MJP2 sample description table gives detailed information about the coding type used, and any initialization "
"information needed for that coding",
/* sbox */ 0,
/* req */ {1, 1, 1},
/* ins */ MINF_BOX},
/* sign */ {MDAT_SIGN,
/* short */ "Media Data box",
/* long */ "The meta-data for a presentation is stored in the single Movie Box which occurs at the top-level of a file",
/* sbox */ 1,
/* req */ {1, 1, 1},
/* ins */ FILE_BOX},
/* sign */ {ANY_SIGN,
/* short */ "Any box",
/* long */ "All the existing boxes",
/* sbox */ 0,
/* req */ {0, 0, 0},
/* ins */ FILE_BOX},
/* sign */ {UNK_SIGN,
/* short */ "Unknown Type box",
/* long */ "The signature is not recognised to be that of an existing box",
/* sbox */ 0,
/* req */ {0, 0, 0},
/* ins */ ANY_BOX}
};
/* macro functions */
/* From little endian to big endian, 2 and 4 bytes */
#define BYTE_SWAP2(X) ((X & 0x00FF) << 8) | ((X & 0xFF00) >> 8)
#define BYTE_SWAP4(X) ((X & 0x000000FF) << 24) | ((X & 0x0000FF00) << 8) | ((X & 0x00FF0000) >> 8) | ((X & 0xFF000000) >> 24)
#define BYTE_SWAP8(X) (((X & 0x00000000000000FF) << 56) | ((X & 0x000000000000FF00) << 40) | \
((X & 0x0000000000FF0000) << 24) | ((X & 0x00000000FF000000) << 8) | \
((X & 0x000000FF00000000) >> 8) | ((X & 0x0000FF0000000000) >> 24) | \
((X & 0x00FF000000000000) >> 40) | ((X & 0xFF00000000000000) >> 56))
/* From codestream to int values */
#define STREAM_TO_UINT32(C, P) (((unsigned long int) (C)[(P) + 0] << 24) + \
((unsigned long int) (C)[(P) + 1] << 16) + \
((unsigned long int) (C)[(P) + 2] << 8) + \
((unsigned long int) (C)[(P) + 3] << 0))
#define STREAM_TO_UINT16(C, P) (((unsigned long int) (C)[(P) + 0] << 8) + \
((unsigned long int) (C)[(P) + 1] << 0))
#define OPJREAD_LONG(F,L,N) { \
if (F->Read(fourbytes, 4) < 4) { \
wxLogMessage(wxT("Problem reading " N " from the file (file ended?)")); \
return -1; \
}; \
L = STREAM_TO_UINT32(fourbytes, 0); \
}
/* handling functions */
#define ITEM_PER_ROW 10
//#define indprint if (0) printf("%.*s", 2 * level + 9, indent), printf
char indent[] = " "
" "
" "
" ";
void indprint(wxString printout, int level)
{
wxLogMessage(/*wxString::Format(wxT("%.*s"), 2 * level + 9, indent) + */printout);
}
/* Box handler function */
int OPJParseThread::box_handler_function(int boxtype, wxFile *fileid, wxFileOffset filepoint, wxFileOffset filelimit,
wxTreeItemId parentid, int level, char *scansign, unsigned long int *scanpoint)
{
switch ((j22boxtype) boxtype) {
/* JPEG 2000 Signature box */
case (JP_BOX): {
unsigned long int checkdata = 0;
fileid->Read(&checkdata, sizeof(unsigned long int));
checkdata = BYTE_SWAP4(checkdata);
// add info
wxTreeItemId currid = m_tree->AppendItem(parentid,
wxString::Format(wxT("Check data: %X -> %s"), checkdata, (checkdata == 0x0D0A870A) ? wxT("OK") : wxT("KO")),
m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
new OPJMarkerData(wxT("INFO"))
);
};
break;
/* JPEG 2000 codestream box */
case (JP2C_BOX): {
// add info
wxTreeItemId currid = m_tree->AppendItem(parentid,
wxString(wxT("Codestream")),
m_tree->TreeCtrlIcon_Folder, m_tree->TreeCtrlIcon_Folder + 1,
new OPJMarkerData(wxT("INFO-CSTREAM"), m_tree->m_fname.GetFullPath(), filepoint, filelimit)
);
m_tree->SetItemHasChildren(currid);
// parse the file
//ParseJ2KFile(fileid, filepoint, filelimit, currid);
};
break;
/* File Type box */
case (FTYP_BOX): {
char BR[4], CL[4];
unsigned long int MinV, numCL, i;
fileid->Read(BR, sizeof(char) * 4);
fileid->Read(&MinV, sizeof(unsigned long int));
MinV = BYTE_SWAP4(MinV);
numCL = (filelimit - fileid->Tell()) / 4;
// add info
wxTreeItemId currid = m_tree->AppendItem(parentid,
wxT("Brand/Minor version: ") +
wxString::FromAscii(BR).Truncate(4) +
wxString::Format(wxT("/%d"), MinV),
m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
new OPJMarkerData(wxT("INFO"))
);
currid = m_tree->AppendItem(parentid,
wxString::Format(wxT("Compatibility list")),
m_tree->TreeCtrlIcon_Folder, m_tree->TreeCtrlIcon_Folder + 1,
new OPJMarkerData(wxT("INFO"))
);
for (i = 0; i < numCL; i++) {
fileid->Read(CL, sizeof(char) * 4);
m_tree->AppendItem(currid,
wxString::FromAscii(CL).Truncate(4),
m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
new OPJMarkerData(wxT("INFO"))
);
};
};
break;
/* JP2 Header box */
case (IHDR_BOX): {
unsigned long int height, width;
unsigned short int nc;
unsigned char bpc, C, UnkC, IPR;
fileid->Read(&height, sizeof(unsigned long int));
height = BYTE_SWAP4(height);
fileid->Read(&width, sizeof(unsigned long int));
width = BYTE_SWAP4(width);
fileid->Read(&nc, sizeof(unsigned short int));
nc = BYTE_SWAP2(nc);
fileid->Read(&bpc, sizeof(unsigned char));
fileid->Read(&C, sizeof(unsigned char));
fileid->Read(&UnkC, sizeof(unsigned char));
fileid->Read(&IPR, sizeof(unsigned char));
// add info
wxTreeItemId currid = m_tree->AppendItem(parentid,
wxString::Format(wxT("Dimensions: %d x %d x %d @ %d bpc"), width, height, nc, bpc + 1),
m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
new OPJMarkerData(wxT("INFO"))
);
currid = m_tree->AppendItem(parentid,
wxString::Format(wxT("Compression type: %d"), C),
m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
new OPJMarkerData(wxT("INFO"))
);
currid = m_tree->AppendItem(parentid,
wxString::Format(wxT("Colourspace unknown: %d"), UnkC),
m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
new OPJMarkerData(wxT("INFO"))
);
currid = m_tree->AppendItem(parentid,
wxString::Format(wxT("Intellectual Property Rights: %d"), IPR),
m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
new OPJMarkerData(wxT("INFO"))
);
};
break;
/* Colour Specification box */
case (COLR_BOX): {
unsigned char METH, PREC, APPROX;
char methdescr[80], enumcsdescr[80];
unsigned long int EnumCS;
fileid->Read(&METH, sizeof(unsigned char));
switch (METH) {
case 1:
strcpy(methdescr, "Enumerated Colourspace");
break;
case 2:
strcpy(methdescr, "Restricted ICC profile");
break;
default:
strcpy(methdescr, "Unknown");
break;
};
fileid->Read(&PREC, sizeof(unsigned char));
fileid->Read(&APPROX, sizeof(unsigned char));
if (METH != 2) {
fileid->Read(&EnumCS, sizeof(unsigned long int));
EnumCS = BYTE_SWAP4(EnumCS);
switch (EnumCS) {
case 16:
strcpy(enumcsdescr, "sRGB");
break;
case 17:
strcpy(enumcsdescr, "greyscale");
break;
case 18:
strcpy(enumcsdescr, "sYCC");
break;
default:
strcpy(enumcsdescr, "Unknown");
break;
};
};
// add info
wxTreeItemId currid = m_tree->AppendItem(parentid,
wxString::Format(wxT("Specification method: %d ("), METH) +
wxString::FromAscii(methdescr) +
wxT(")"),
m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
new OPJMarkerData(wxT("INFO"))
);
currid = m_tree->AppendItem(parentid,
wxString::Format(wxT("Precedence: %d"), PREC),
m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
new OPJMarkerData(wxT("INFO"))
);
currid = m_tree->AppendItem(parentid,
wxString::Format(wxT("Colourspace approximation: %d"), APPROX),
m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
new OPJMarkerData(wxT("INFO"))
);
if (METH != 2)
currid = m_tree->AppendItem(parentid,
wxString::Format(wxT("Enumerated colourspace: %d ("), EnumCS) +
wxString::FromAscii(enumcsdescr) +
wxT(")"),
m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
new OPJMarkerData(wxT("INFO"))
);
if (METH != 1)
currid = m_tree->AppendItem(parentid,
wxString::Format(wxT("ICC profile: there is one")),
m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
new OPJMarkerData(wxT("INFO"))
);
};
break;
/* Movie Header Box */
case (MVHD_BOX): {
unsigned long int version, rate, matrix[9], next_track_ID;
unsigned short int volume;
fileid->Read(&version, sizeof(unsigned long int));
version = BYTE_SWAP4(version);
if (version == 0) {
unsigned long int creation_time, modification_time, timescale, duration;
fileid->Read(&creation_time, sizeof(unsigned long int));
creation_time = BYTE_SWAP4(creation_time);
fileid->Read(&modification_time, sizeof(unsigned long int));
modification_time = BYTE_SWAP4(modification_time);
fileid->Read(&timescale, sizeof(unsigned long int));
timescale = BYTE_SWAP4(timescale);
fileid->Read(&duration, sizeof(unsigned long int));
duration = BYTE_SWAP4(duration);
const long unix_time = creation_time - 2082844800L;
wxTreeItemId currid = m_tree->AppendItem(parentid,
wxString::Format(wxT("Creation time: %u (%.24s)"), creation_time, ctime(&unix_time)),
m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
new OPJMarkerData(wxT("INFO"))
);
const long unix_time1 = modification_time - 2082844800L;
currid = m_tree->AppendItem(parentid,
wxString::Format(wxT("Modification time: %u (%.24s)"), modification_time, ctime(&unix_time1)),
m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
new OPJMarkerData(wxT("INFO"))
);
currid = m_tree->AppendItem(parentid,
wxString::Format(wxT("Timescale: %u (%.6fs)"), timescale, 1.0 / (float) timescale),
m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
new OPJMarkerData(wxT("INFO"))
);
currid = m_tree->AppendItem(parentid,
wxString::Format(wxT("Duration: %u (%.3fs)"), duration, (float) duration / (float) timescale),
m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
new OPJMarkerData(wxT("INFO"))
);
} else {
int8byte creation_time, modification_time, duration;
unsigned long int timescale;
fileid->Read(&creation_time, sizeof(int8byte));
creation_time = BYTE_SWAP8(creation_time);
fileid->Read(&modification_time, sizeof(int8byte));
modification_time = BYTE_SWAP8(modification_time);
fileid->Read(&timescale, sizeof(unsigned long int));
timescale = BYTE_SWAP4(timescale);
fileid->Read(&duration, sizeof(int8byte));
duration = BYTE_SWAP8(duration);
wxTreeItemId currid = m_tree->AppendItem(parentid,
wxString::Format(wxT("Creation time: %u"), creation_time),
m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
new OPJMarkerData(wxT("INFO"))
);
currid = m_tree->AppendItem(parentid,
wxString::Format(wxT("Modification time: %u"), modification_time),
m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
new OPJMarkerData(wxT("INFO"))
);
currid = m_tree->AppendItem(parentid,
wxString::Format(wxT("Timescale: %u"), timescale),
m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
new OPJMarkerData(wxT("INFO"))
);
currid = m_tree->AppendItem(parentid,
wxString::Format(wxT("Duration: %u"), duration),
m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
new OPJMarkerData(wxT("INFO"))
);
};
fileid->Read(&rate, sizeof(unsigned long int));
rate = BYTE_SWAP4(rate);
fileid->Read(&volume, sizeof(unsigned short int));
volume = BYTE_SWAP2(volume);
fileid->Seek(6, wxFromCurrent);
fileid->Read(&matrix, sizeof(unsigned char) * 9);
fileid->Seek(4, wxFromCurrent);
fileid->Read(&next_track_ID, sizeof(unsigned long int));
next_track_ID = BYTE_SWAP4(next_track_ID);
wxTreeItemId currid = m_tree->AppendItem(parentid,
wxString::Format(wxT("Rate: %d (%d.%d)"), rate, rate >> 16, rate & 0x0000FFFF),
m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
new OPJMarkerData(wxT("INFO"))
);
currid = m_tree->AppendItem(parentid,
wxString::Format(wxT("Volume: %d (%d.%d)"), volume, volume >> 8, volume & 0x00FF),
m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
new OPJMarkerData(wxT("INFO"))
);
currid = m_tree->AppendItem(parentid,
wxString::Format(wxT("Next track ID: %d"), next_track_ID),
m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
new OPJMarkerData(wxT("INFO"))
);
};
break;
/* Sample Description box */
case (STSD_BOX): {
unsigned long int version, entry_count;
fileid->Read(&version, sizeof(unsigned long int));
version = BYTE_SWAP4(version);
fileid->Read(&entry_count, sizeof(unsigned long int));
entry_count = BYTE_SWAP4(entry_count);
wxTreeItemId currid = m_tree->AppendItem(parentid,
wxString::Format(wxT("Entry count: %d"), entry_count),
m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
new OPJMarkerData(wxT("INFO"), m_tree->m_fname.GetFullPath(), filepoint, filelimit)
);
jpeg2000parse(fileid, filepoint + 8, filelimit, parentid, level + 1, scansign, scanpoint);
};
break;
/* Sample Size box */
case (STSZ_BOX): {
unsigned long int version, sample_size, sample_count, entry_size;
fileid->Read(&version, sizeof(unsigned long int));
version = BYTE_SWAP4(version);
fileid->Read(&sample_size, sizeof(unsigned long int));
sample_size = BYTE_SWAP4(sample_size);
if (sample_size == 0) {
fileid->Read(&sample_count, sizeof(unsigned long int));
sample_count = BYTE_SWAP4(sample_count);
wxTreeItemId currid = m_tree->AppendItem(parentid,
wxString::Format(wxT("Sample count: %d"), sample_count),
m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
new OPJMarkerData(wxT("INFO"), m_tree->m_fname.GetFullPath(), filepoint, filelimit)
);
currid = m_tree->AppendItem(parentid,
wxT("Entries size (bytes)"),
m_tree->TreeCtrlIcon_Folder, m_tree->TreeCtrlIcon_Folder + 1,
new OPJMarkerData(wxT("INFO"), m_tree->m_fname.GetFullPath(), filepoint, filelimit)
);
wxString text;
for (unsigned int s = 0; s < sample_count; s++) {
fileid->Read(&entry_size, sizeof(unsigned long int));
entry_size = BYTE_SWAP4(entry_size);
text << wxString::Format(wxT("%d, "), entry_size);
if (((s % 10) == (ITEM_PER_ROW - 1)) || (s == (sample_count - 1))) {
m_tree->AppendItem(currid,
text,
m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
new OPJMarkerData(wxT("INFO"), m_tree->m_fname.GetFullPath(), filepoint, filelimit)
);
text = wxT("");
}
}
}
};
break;
/* Video Media Header box */
case (VMHD_BOX): {
unsigned long int version;
unsigned short int graphicsmode, opcolor[3];
char graphicsdescr[100];
fileid->Read(&version, sizeof(unsigned long int));
version = BYTE_SWAP4(version);
fileid->Read(&graphicsmode, sizeof(unsigned short int));
graphicsmode = BYTE_SWAP2(graphicsmode);
switch (graphicsmode) {
case (0x00):
strcpy(graphicsdescr, "copy");
break;
case (0x24):
strcpy(graphicsdescr, "transparent");
break;
case (0x0100):
strcpy(graphicsdescr, "alpha");
break;
case (0x0101):
strcpy(graphicsdescr, "whitealpha");
break;
case (0x0102):
strcpy(graphicsdescr, "blackalpha");
break;
default:
strcpy(graphicsdescr, "unknown");
break;
};
fileid->Read(opcolor, 3 * sizeof(unsigned short int));
opcolor[0] = BYTE_SWAP2(opcolor[0]);
opcolor[1] = BYTE_SWAP2(opcolor[1]);
opcolor[2] = BYTE_SWAP2(opcolor[2]);
wxTreeItemId currid = m_tree->AppendItem(parentid,
wxString::Format(wxT("Composition mode: %d (")) +
wxString::FromAscii(graphicsdescr) +
wxT(")"),
m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
new OPJMarkerData(wxT("INFO"), m_tree->m_fname.GetFullPath(), filepoint, filelimit)
);
currid = m_tree->AppendItem(parentid,
wxString::Format(wxT("OP color: %d %d %d"), opcolor[0], opcolor[1], opcolor[2]),
m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
new OPJMarkerData(wxT("INFO"), m_tree->m_fname.GetFullPath(), filepoint, filelimit)
);
};
break;
/* MJP2 Sample Description box */
case (MJP2_BOX): {
unsigned short int height, width, depth;
unsigned long int horizresolution, vertresolution;
char compressor_name[32];
fileid->Seek(24, wxFromCurrent);
fileid->Read(&width, sizeof(unsigned short int));
width = BYTE_SWAP2(width);
fileid->Read(&height, sizeof(unsigned short int));
height = BYTE_SWAP2(height);
fileid->Read(&horizresolution, sizeof(unsigned long int));
horizresolution = BYTE_SWAP4(horizresolution);
fileid->Read(&vertresolution, sizeof(unsigned long int));
vertresolution = BYTE_SWAP4(vertresolution);
fileid->Seek(6, wxFromCurrent);
fileid->Read(compressor_name, sizeof(char) * 32);
fileid->Read(&depth, sizeof(unsigned short int));
depth = BYTE_SWAP2(depth);
wxTreeItemId currid = m_tree->AppendItem(parentid,
wxString::Format(wxT("Dimensions: %d x %d @ %d bpp"), width, height, depth),
m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
new OPJMarkerData(wxT("INFO"), m_tree->m_fname.GetFullPath(), filepoint, filelimit)
);
currid = m_tree->AppendItem(parentid,
wxString::Format(wxT("Resolution: %d.%d x %d.%d"), horizresolution >> 16, horizresolution & 0x0000FFFF,
vertresolution >> 16, vertresolution & 0x0000FFFF),
m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
new OPJMarkerData(wxT("INFO"))
);
currid = m_tree->AppendItem(parentid,
wxString::Format(wxT("Compressor: %.32s"), compressor_name),
m_tree->TreeCtrlIcon_File, m_tree->TreeCtrlIcon_File + 1,
new OPJMarkerData(wxT("INFO"))
);
jpeg2000parse(fileid, filepoint + 78, filelimit, parentid, level + 1, scansign, scanpoint);
};
break;
/* not yet implemented */
default:
break;
};
return (0);
}
void OPJParseThread::ParseJP2File(wxFile *fileid, wxFileOffset filepoint, wxFileOffset filelimit, wxTreeItemId parentid)
{
unsigned long int scanpoint;
jpeg2000parse(fileid, filepoint, filelimit, parentid, 0, NULL, &scanpoint);
}
/* the parsing function itself */
/*
fileid = fid of the file to scan (you should open it by yourself)
filepoint = first byte where to start to scan from (usually 0)
filelimit = first byte where to stop to scan from (usually the file size)
level = set this to 0
scansign = signature to scan for (NULL avoids search, returns " " if successful)
scanpoint = point where the scan signature lies
*/
int OPJParseThread::jpeg2000parse(wxFile *fileid, wxFileOffset filepoint, wxFileOffset filelimit,
wxTreeItemId parentid, int level, char *scansign, unsigned long int *scanpoint)
{
unsigned long int LBox = 0x00000000;
//int LBox_read;
char TBox[5] = "\0\0\0\0";
//int TBox_read;
int8byte XLBox = 0x0000000000000000;
//int XLBox_read;
unsigned long int box_length = 0;
int last_box = 0, box_num = 0;
int box_type = ANY_BOX;
unsigned char /*onebyte[1], twobytes[2],*/ fourbytes[4];
/* cycle all over the file */
box_num = 0;
last_box = 0;
while (!last_box) {
/* do not exceed file limit */
if (filepoint >= filelimit)
return (0);
/* seek on file */
if (fileid->Seek(filepoint, wxFromStart) == wxInvalidOffset)
return (-1);
/* read the mandatory LBox, 4 bytes */
if (fileid->Read(fourbytes, 4) < 4) {
WriteText(wxT("Problem reading LBox from the file (file ended?)"));
return -1;
};
LBox = STREAM_TO_UINT32(fourbytes, 0);
/* read the mandatory TBox, 4 bytes */
if (fileid->Read(TBox, 4) < 4) {
WriteText(wxT("Problem reading TBox from the file (file ended?)"));
return -1;
};
/* look if scansign is got */
if ((scansign != NULL) && (memcmp(TBox, scansign, 4) == 0)) {
memcpy(scansign, " ", 4);
*scanpoint = filepoint;
/* hack/exploit */
// stop as soon as you find the codebox
return (0);
};
/* determine the box type */
for (box_type = JP_BOX; box_type < UNK_BOX; box_type++)
if (memcmp(TBox, j22box[box_type].value, 4) == 0)
break;
/* read the optional XLBox, 8 bytes */
if (LBox == 1) {
if (fileid->Read(&XLBox, 8) < 8) {
WriteText(wxT("Problem reading XLBox from the file (file ended?)"));
return -1;
};
box_length = (unsigned long int) BYTE_SWAP8(XLBox);
} else if (LBox == 0x00000000) {
/* last box in file */
last_box = 1;
box_length = filelimit - filepoint;
} else
box_length = LBox;
/* show box info */
// append the marker
int image, imageSel;
image = m_tree->TreeCtrlIcon_Folder;
imageSel = image + 1;
wxTreeItemId currid = m_tree->AppendItem(parentid,
wxString::Format(wxT("%03d: "), box_num) +
wxString::FromAscii(TBox) +
wxString::Format(wxT(" (0x%04X)"),
((unsigned long int) TBox[3]) + ((unsigned long int) TBox[2] << 8) +
((unsigned long int) TBox[1] << 16) + ((unsigned long int) TBox[0] << 24)
),
image, imageSel,
new OPJMarkerData(wxT("BOX"), m_tree->m_fname.GetFullPath(), filepoint, filepoint + box_length)
);
// append some info
image = m_tree->TreeCtrlIcon_File;
imageSel = image + 1;
// box name
wxTreeItemId subcurrid1 = m_tree->AppendItem(currid,
wxT("*** ") + wxString::FromAscii(j22box[box_type].name) + wxT(" ***"),
image, imageSel,
new OPJMarkerData(wxT("INFO"))
);
m_tree->SetItemFont(subcurrid1, *wxITALIC_FONT);
// position and length
wxTreeItemId subcurrid2 = m_tree->AppendItem(currid,
wxLongLong(filepoint).ToString() + wxT(" > ") + wxLongLong(filepoint + box_length - 1).ToString() +
wxT(", ") + wxString::Format(wxT("%d + 8 (%d)"), box_length, box_length + 8),
image, imageSel,
new OPJMarkerData(wxT("INFO"))
);
/* go deep in the box */
box_handler_function((int) box_type, fileid, (LBox == 1) ? (filepoint + 16) : (filepoint + 8), filepoint + box_length,
currid, level, scansign, scanpoint);
/* if it's a superbox go inside it */
if (j22box[box_type].sbox)
jpeg2000parse(fileid, (LBox == 1) ? (filepoint + 16) : (filepoint + 8), filepoint + box_length,
currid, level + 1, scansign, scanpoint);
/* increment box number and filepoint*/
box_num++;
filepoint += box_length;
};
/* all good */
return (0);
}

109
OpenJPEG.rc Normal file
View File

@@ -0,0 +1,109 @@
//Microsoft Developer Studio generated resource script.
//
#include "resource.h"
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "afxres.h"
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// French (France) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_FRA)
#ifdef _WIN32
LANGUAGE LANG_FRENCH, SUBLANG_FRENCH
#pragma code_page(1252)
#endif //_WIN32
#ifndef _MAC
/////////////////////////////////////////////////////////////////////////////
//
// Version
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,1,0,0
PRODUCTVERSION 1,1,0,0
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x40004L
FILETYPE 0x2L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "000004b0"
BEGIN
VALUE "Comments", "The OpenJPEG library is an open-source JPEG 2000 codec. \0"
VALUE "CompanyName", "OpenJPEG\0"
VALUE "FileDescription", "OpenJPEG\0"
VALUE "FileVersion", "1, 1, 0, 0\0"
VALUE "InternalName", "OpenJPEG\0"
VALUE "LegalCopyright", "Copyright <20> 2002-2006, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium\0"
VALUE "LegalTrademarks", "See http://www.openjpeg.org for details\0"
VALUE "OriginalFilename", "OpenJPEG.dll\0"
VALUE "PrivateBuild", "\0"
VALUE "ProductName", "OpenJPEG\0"
VALUE "ProductVersion", "1, 1, 0, 0\0"
VALUE "SpecialBuild", "\0"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x0, 1200
END
END
#endif // !_MAC
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE DISCARDABLE
BEGIN
"resource.h\0"
END
2 TEXTINCLUDE DISCARDABLE
BEGIN
"#include ""afxres.h""\r\n"
"\0"
END
3 TEXTINCLUDE DISCARDABLE
BEGIN
"\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
#endif // French (France) resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED

9
README.cmake Normal file
View File

@@ -0,0 +1,9 @@
Basic instructions on how to build using CMake (CMake 2.4.5 or newer is required)
svn co http://www.openjpeg.org/svn/trunk
cd trunk
mkdir bin
cd bin
cmake .. -DBUILD_EXAMPLES:BOOL=ON
make
./codec/j2k_to_image

33
README.linux Normal file
View File

@@ -0,0 +1,33 @@
Release Notes
--------------
This version of the library has been tested under the following OS:
- RedHat Linux 9.0
You should be able to link progams with the -lopenjpeg option after the library is compiled and installed.
You can also statically link with libopenjpeg.a.
If you use a really old version of gcc and it chokes on the CRs in the file, you can type 'make dos2unix'
to run all of the files through dos2unix which converts CRLF to LF. This no longer appears to be required
for RedHat 7.3 or 9.
Please let us know how this works for you under other Linux distributions or any other *nix.
Installation
------------
Note: You will need to have root privileges in order to install the library in
/usr/include and /usr/lib directories.
The installation process is as simple as this :
1) Enter the OpenJPEG directory
2) Build the distribution :
make
make install
3) Clean all files produced during the build process
make clean
Simple codec compilation
------------------------
Once you've built the library, you might want to test it with a basic codec. To do this, go to the codec directory and use one of the following commands to build an encoder and decoder respectively:
gcc convert.c image_to_j2k.c -o image_to_j2k -lopenjpeg -I ../libopenjpeg/ -lm -ltiff
gcc convert.c j2k_to_image.c -o j2k_to_image -lopenjpeg -I ../libopenjpeg/ -lm -ltiff
You should add '-L..' to those lines if you did not use the 'install' target (and the 'clean' target neither...).

40
README.msvc Normal file
View File

@@ -0,0 +1,40 @@
How to compile the library under MS VC++ 6.0
--------------------------------------------
The library comes in two versions :
- a static library that can be linked against any C/C++ program
- a Dynamic Link Library (Windows DLL) that can be used in any C/C++ program and in most interpreted languages (e.g. VB, C#, ...).
In order to compile the library version *or* the DLL version, you will have to :
1) Open the MSVC workspace named LibOpenJPEG.dsw
2) Set the choosen target as the active project, that means :
a) Go to the Menu 'Build -> Set Active Configuration'
b) Choose one of the following configuration :
- DllOpenJPEG - Win32 Release => creates a DLL in release mode named OpenJPEG.dll
- DllOpenJPEG - Win32 Debug => creates a DLL in debug mode named OpenJPEGd.dll
- LibOpenJPEG - Win32 Release => creates a static library in release mode named LibOpenJPEG.lib
- LibOpenJPEG - Win32 Debug => creates a static library in debug mode named LibOpenJPEGd.lib
3) Build the project : Menu -> Build -> Rebuild All
The build process will create a directory named 'dist' that will contain all you need in order to use the library.
Simple codec compilation
------------------------
Once you've built the library, you might want to test it with a basic codec. To do this, go to the codec directory and use one of the following projects to build an encoder and decoder respectively:
- image_to_j2k.dsw
- j2k_to_image.dsw
IMPORTANT NOTE :
----------------
The encoder and decoder samples are configured to use the static version of the library. A link to the LibOpenJPEG static project is included in these projects so that you can build both a codec and the library in a single pass.
However, you MUST NOTE that in order to use LibOpenJPEG as a static library in your program, you NEED to add the following compiler directive to your project : OPJ_STATIC
Look at the menu 'Project -> Settings -> C/C++ tab -> preprocessor definition' to see how this is configured.
When using OpenJPEG as a DLL, this compiler directive MUST NOT be used.

26
README.osx Normal file
View File

@@ -0,0 +1,26 @@
Release Notes
--------------
This version of the library has been tested under OSX 10.3 using gcc 3.3.
While the makefiles will make a .dylib and a .a, it is recommended to simply staticly link with the .a file.
Installation
------------
Note: You will need to have root privileges in order to install the library in
/usr/include and /usr/lib directories.
The installation process is as simple as this :
1) Enter the OpenJPEG directory
2) Build the distribution :
make osx
make osxinstall
3) Clean all files produced during the build process
make osxclean
Simple codec compilation
------------------------
Once you've built the library, you might want to test it with a basic codec. To do this, go to the codec directory and use one of the following commands to build an encoder and decoder respectively:
gcc convert.c image_to_j2k.c -o image_to_j2k -lopenjpeg -I ../libopenjpeg/ -lm -ltiff
gcc convert.c j2k_to_image.c -o j2k_to_image -lopenjpeg -I ../libopenjpeg/ -lm -ltiff
You should add '-L..' and to those lines if you did not use the 'install' target (and the 'clean' target neither...).

25
clean.bat Normal file
View File

@@ -0,0 +1,25 @@
rd Release /s /q
rd Debug /s /q
rd codec\Debug /s /q
rd codec\Release /s /q
rd dist /s /q
del *.pch /s /q
del *.ncb /s /q
del *.opt /s /q
del *.plg /s /q
del *.obj /s /q
del *.dll /s /q
del *.exe /s /q
del *.bsc /s /q
del *.bak /s /q
del *.pdb /s /q
del *.sql /s /q
del *.mdb /s /q
del *.lib /s /q
del *.exp /s /q
del *.ilk /s /q
del *.idb /s /q
del *.aps /s /q
del *.suo /s /q /a:h
del *.o /s /q

View File

@@ -1,6 +0,0 @@
obj
obj.w32
bin
bin.w32
lib
lib.w32

53
codec/CMakeLists.txt Normal file
View File

@@ -0,0 +1,53 @@
# Build the demo app, small examples
# First thing define the common source:
SET(common_SRCS
convert.c
)
# Then check if getopt is present:
INCLUDE (${CMAKE_ROOT}/Modules/CheckIncludeFile.cmake)
SET(DONT_HAVE_GETOPT 1)
IF(UNIX) #I am pretty sure only *nix sys have this anyway
CHECK_INCLUDE_FILE("getopt.h" CMAKE_HAVE_GETOPT_H)
# Seems like we need the contrary:
IF(CMAKE_HAVE_GETOPT_H)
SET(DONT_HAVE_GETOPT 0)
ENDIF(CMAKE_HAVE_GETOPT_H)
ENDIF(UNIX)
# If not getopt was found then add it to the lib:
IF(DONT_HAVE_GETOPT)
ADD_DEFINITIONS(-DDONT_HAVE_GETOPT)
SET(common_SRCS
${common_SRCS}
compat/getopt.c
)
ENDIF(DONT_HAVE_GETOPT)
# Headers file are located here:
INCLUDE_DIRECTORIES(
${OPENJPEG_SOURCE_DIR}/libopenjpeg
)
# Do the proper thing when building static...if only there was configured
# headers or def files instead
IF(NOT BUILD_SHARED_LIBS)
ADD_DEFINITIONS(-DOPJ_STATIC)
ENDIF(NOT BUILD_SHARED_LIBS)
FIND_PACKAGE(TIFF REQUIRED)
# Loop over all executables:
FOREACH(exe j2k_to_image image_to_j2k)
ADD_EXECUTABLE(${exe} ${exe}.c ${common_SRCS})
TARGET_LINK_LIBRARIES(${exe} ${OPJ_PREFIX}openjpeg ${TIFF_LIBRARIES})
# On unix you need to link to the math library:
IF(UNIX)
TARGET_LINK_LIBRARIES(${exe} -lm)
ENDIF(UNIX)
# Install exe
INSTALL_TARGETS(/bin/ ${exe})
ENDFOREACH(exe)

View File

@@ -1,94 +1,14 @@
# $Id$
#
# makefile for OpenJPEG codec
# Makefile for the main OpenJPEG codecs: j2k_to_image and image_to_j2k
OPENJPEG_DIR = ../libopenjpeg
CFLAGS = -O3 -lstdc++ # -g -p -pg
ifndef DEBUG
LDFLAGS = -s -lm
else
LDFLAGS = -lm
endif
all: j2k_to_image image_to_j2k
CFLAGS = -Wall -O3 -fno-strength-reduce -fomit-frame-pointer -I$(OPENJPEG_DIR)
j2k_to_image: j2k_to_image.c ../libopenjpeg.a
gcc $(CFLAGS) compat/getopt.c convert.c j2k_to_image.c -o j2k_to_image -L.. -lopenjpeg -I ../libopenjpeg/ -lm -ltiff
OBJ_DIR_W32 = obj.w32
BIN_DIR_W32 = bin.w32
LIB_DIR_W32 = $(OPENJPEG_DIR)/lib.w32
ifdef MINGW32
CC = i386-mingw32-gcc
CFLAGS += -DDONT_HAVE_GETOPT
OBJ_DIR = $(OBJ_DIR_W32)
BIN_DIR = $(BIN_DIR_W32)
LIB_DIR = lib.w32
all: $(BIN_DIR) $(OBJ_DIR) $(LIB_DIR) \
$(addprefix $(BIN_DIR)/,j2k_to_image.exe image_to_j2k.exe)
else
CC = gcc
OBJ_DIR = obj
BIN_DIR = bin
LIB_DIR = lib
all: $(BIN_DIR) $(OBJ_DIR) $(LIB_DIR) \
$(addprefix $(BIN_DIR)/,j2k_to_image image_to_j2k)
endif
ifdef DYNAMIC
ifdef MINGW32
LIB_OPENJPEG = $(LIB_DIR)/libopenjpeg.dll
LDFLAGS += -L$(LIB_DIR) -lopenjpeg
else
LIB_OPENJPEG = $(OPENJPEG_DIR)/$(LIB_DIR)/libopenjpeg.so
LDFLAGS += -L$(OPENJPEG_DIR)/$(LIB_DIR) -lopenjpeg
endif
else
LIB_OPENJPEG = $(OPENJPEG_DIR)/$(LIB_DIR)/libopenjpeg.a
LDFLAGS += $(LIB_OPENJPEG)
endif
$(BIN_DIR):
mkdir $(BIN_DIR)
$(OBJ_DIR):
mkdir $(OBJ_DIR)
$(LIB_DIR):
mkdir $(LIB_DIR)
$(LIB_DIR)/libopenjpeg.dll: $(OPENJPEG_DIR)/$(LIB_DIR)/libopenjpeg.dll
ln -sf ../$< $@
$(OPENJPEG_DIR)/$(LIB_DIR)/libopenjpeg.dll:
cd $(OPENJPEG_DIR) && \
$(MAKE) $(OBJ_DIR) $(LIB_DIR) $(LIB_DIR)/libopenjpeg.dll
$(OPENJPEG_DIR)/$(LIB_DIR)/libopenjpeg.a:
cd $(OPENJPEG_DIR) && \
$(MAKE) $(OBJ_DIR) $(LIB_DIR) $(LIB_DIR)/libopenjpeg.a
$(OPENJPEG_DIR)/$(LIB_DIR)/libopenjpeg.so:
cd $(OPENJPEG_DIR) && \
$(MAKE) $(LIB_DIR) $(LIB_DIR)/libopenjpeg.so
$(OBJ_DIR)/%.o:
$(CC) -c $(CFLAGS) $(CPPFLAGS) -o $@ $<
$(OBJ_DIR)/getopt.o: compat/getopt.c
$(OBJ_DIR)/convert.o: convert.c
$(OBJ_DIR)/j2k_to_image.o: j2k_to_image.c
$(OBJ_DIR)/image_to_j2k.o: image_to_j2k.c convert.h
J2I_OBJS = $(addprefix $(OBJ_DIR)/,j2k_to_image.o)
I2J_OBJS = $(addprefix $(OBJ_DIR)/,image_to_j2k.o convert.o)
$(BIN_DIR)/j2k_to_image: $(J2I_OBJS) $(LIB_OPENJPEG)
${CC} -o $@ $(J2I_OBJS) ${LDFLAGS}
$(BIN_DIR)/image_to_j2k: $(I2J_OBJS) $(LIB_OPENJPEG)
${CC} -o $@ $(I2J_OBJS) ${LDFLAGS}
$(BIN_DIR)/j2k_to_image.exe: $(J2I_OBJS) $(LIB_OPENJPEG)
${CC} -o $@ $(J2I_OBJS) ${LDFLAGS}
$(BIN_DIR)/image_to_j2k.exe: $(I2J_OBJS) $(LIB_OPENJPEG) $(OBJ_DIR)/getopt.o
${CC} -o $@ $(I2J_OBJS) ${LDFLAGS} $(OBJ_DIR)/getopt.o
image_to_j2k: image_to_j2k.c ../libopenjpeg.a
gcc $(CFLAGS) compat/getopt.c convert.c image_to_j2k.c -o image_to_j2k -L.. -lopenjpeg -I ../libopenjpeg/ -lm -ltiff
clean:
rm -f $(BIN_DIR_W32)/* $(BIN_DIR)/* $(OBJ_DIR_W32)/* $(OBJ_DIR)/*
rm -f j2k_to_image image_to_j2k

View File

@@ -45,23 +45,29 @@ int opterr = 1, /* if error message should be printed */
optind = 1, /* index into parent argv vector */
optopt, /* character checked for validity */
optreset; /* reset getopt */
char *optarg; /* argument associated with option */
const char *optarg; /* argument associated with option */
typedef struct option
{
char *name;
int has_arg;
int *flag;
int val;
}option_t;
#define BADCH (int)'?'
#define BADARG (int)':'
#define EMSG ""
/*
* getopt --
* Parse argc/argv argument vector.
*/
int getopt(nargc, nargv, ostr)
int nargc;
char *const *nargv;
const char *ostr;
{
int getopt(int nargc, char *const *nargv, const char *ostr) {
# define __progname nargv[0]
static char *place = EMSG; /* option letter processing */
static const char *place = EMSG; /* option letter processing */
char *oli; /* option letter list index */
if (optreset || !*place) { /* update scanning pointer */
@@ -86,10 +92,11 @@ const char *ostr;
return (-1);
if (!*place)
++optind;
if (opterr && *ostr != ':')
(void) fprintf(stderr,
if (opterr && *ostr != ':') {
fprintf(stderr,
"%s: illegal option -- %c\n", __progname, optopt);
return (BADCH);
return (BADCH);
}
}
if (*++oli != ':') { /* don't need argument */
optarg = NULL;
@@ -102,11 +109,12 @@ const char *ostr;
place = EMSG;
if (*ostr == ':')
return (BADARG);
if (opterr)
(void) fprintf(stderr,
if (opterr) {
fprintf(stderr,
"%s: option requires an argument -- %c\n",
__progname, optopt);
return (BADCH);
return (BADCH);
}
} else /* white space */
optarg = nargv[optind];
place = EMSG;
@@ -114,3 +122,136 @@ const char *ostr;
}
return (optopt); /* dump back option letter */
}
int getopt_long(int argc, char * const argv[], const char *optstring,
struct option *longopts, int totlen) {
static int lastidx,lastofs;
char *tmp;
int i,len;
char param = 1;
again:
if (optind>argc || !argv[optind] || *argv[optind]!='-')
return -1;
if (argv[optind][0]=='-' && argv[optind][1]==0) {
if(optind >= (argc - 1)){ /* no more input parameters */
param = 0;
}
else{ /* more input parameters */
if(argv[optind + 1][0] == '-'){
param = 0; /* Missing parameter after '-' */
}
else{
param = 2;
}
}
}
if (param == 0) {
++optind;
return (BADCH);
}
if (argv[optind][0]=='-') { /* long option */
char* arg=argv[optind]+1;
const struct option* o;
o=longopts;
len=sizeof(longopts[0]);
if (param > 1){
arg = argv[optind+1];
optind++;
}
else
arg = argv[optind]+1;
if(strlen(arg)>1){
for (i=0;i<totlen;i=i+len,o++) {
if (!strcmp(o->name,arg)) { /* match */
if (o->has_arg == 0) {
if ((argv[optind+1])&&(!(argv[optind+1][0]=='-'))){
fprintf(stderr,"%s: option does not require an argument. Ignoring %s\n",arg,argv[optind+1]);
++optind;
}
}else{
optarg=argv[optind+1];
if(optarg){
if (optarg[0] == '-'){ /* Has read next input parameter: No arg for current parameter */
if (opterr) {
fprintf(stderr,"%s: option requires an argument\n",arg);
return (BADCH);
}
}
}
if (!optarg && o->has_arg==1) { /* no argument there */
if (opterr) {
fprintf(stderr,"%s: option requires an argument \n",arg);
return (BADCH);
}
}
++optind;
}
++optind;
if (o->flag)
*(o->flag)=o->val;
else
return o->val;
return 0;
}
}//(end for)String not found in the list
fprintf(stderr,"Invalid option %s\n",arg);
++optind;
return (BADCH);
}else{ /*Single character input parameter*/
if (*optstring==':') return ':';
if (lastidx!=optind) {
lastidx=optind; lastofs=0;
}
optopt=argv[optind][lastofs+1];
if ((tmp=strchr(optstring,optopt))) {/*Found input parameter in list*/
if (*tmp==0) { /* apparently, we looked for \0, i.e. end of argument */
++optind;
goto again;
}
if (tmp[1]==':') { /* argument expected */
if (tmp[2]==':' || argv[optind][lastofs+2]) { /* "-foo", return "oo" as optarg */
if (!*(optarg=argv[optind]+lastofs+2)) optarg=0;
goto found;
}
optarg=argv[optind+1];
if(optarg){
if (optarg[0] == '-'){ /* Has read next input parameter: No arg for current parameter */
if (opterr) {
fprintf(stderr,"%s: option requires an argument\n",arg);
return (BADCH);
}
}
}
if (!optarg) { /* missing argument */
if (opterr) {
fprintf(stderr,"%s: option requires an argument\n",arg);
return (BADCH);
}
}
++optind;
}else {/*Argument not expected*/
++lastofs;
return optopt;
}
found:
++optind;
return optopt;
} else { /* not found */
fprintf(stderr,"Invalid option %s\n",arg);
++optind;
return (BADCH);
}//end of not found
}// end of single character
}//end '-'
fprintf(stderr,"Invalid option %s\n");
++optind;
return (BADCH);;
}//end function

View File

@@ -3,6 +3,18 @@
#ifndef _GETOPT_H_
#define _GETOPT_H_
typedef struct option
{
char *name;
int has_arg;
int *flag;
int val;
}option_t;
#define NO_ARG 0
#define REQ_ARG 1
#define OPT_ARG 2
extern int opterr;
extern int optind;
extern int optopt;
@@ -10,5 +22,8 @@ extern int optreset;
extern char *optarg;
extern int getopt(int nargc, char *const *nargv, const char *ostr);
extern int getopt_long(int argc, char * const argv[], const char *optstring,
const struct option *longopts, int totlen);
#endif /* _GETOPT_H_ */

File diff suppressed because it is too large Load Diff

View File

@@ -1,7 +1,10 @@
/*
* Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium
* Copyright (c) 2002-2007, Professor Benoit Macq
* Copyright (c) 2001-2003, David Janssens
* Copyright (c) 2002-2003, Yannick Verschueren
* Copyright (c) 2002-2003, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
* Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe
* Copyright (c) 2005, Herve Drolon, FreeImage Team
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -25,15 +28,29 @@
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef __J2K_CONVERT_H
#define __J2K_CONVERT_H
#include "j2k.h"
opj_image_t* bmptoimage(const char *filename, opj_cparameters_t *parameters);
int bmptoimage(char *filename, j2k_image_t * img, int subsampling_dx,
int subsampling_dy, int Dim[2]);
int imagetobmp(opj_image_t *image, const char *outfile);
int pgxtoimage(char *filename, j2k_image_t * img, int tdy,
int subsampling_dx, int subsampling_dy, int Dim[2],
j2k_cp_t cp);
/* TIFF to image conversion*/
opj_image_t* tiftoimage(const char *filename, opj_cparameters_t *parameters);
int imagetotif(opj_image_t *image, const char *outfile);
/**
Load a single image component encoded in PGX file format
@param filename Name of the PGX file to load
@param parameters *List ?*
@return Returns a greyscale image if successful, returns NULL otherwise
*/
opj_image_t* pgxtoimage(const char *filename, opj_cparameters_t *parameters);
int imagetopgx(opj_image_t *image, const char *outfile);
opj_image_t* pnmtoimage(const char *filename, opj_cparameters_t *parameters);
int imagetopnm(opj_image_t *image, const char *outfile);
#endif /* __J2K_CONVERT_H */
int pnmtoimage(char *filename, j2k_image_t * img, int subsampling_dx,
int subsampling_dy, int Dim[2]);

677
codec/dirent.h Normal file
View File

@@ -0,0 +1,677 @@
/*
* uce-dirent.h - operating system independent dirent implementation
*
* Copyright (C) 1998-2002 Toni Ronkko
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* ``Software''), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL TONI RONKKO BE LIABLE FOR ANY CLAIM, DAMAGES OR
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*
*
* May 28 1998, Toni Ronkko <tronkko@messi.uku.fi>
*
* $Id: uce-dirent.h,v 1.7 2002/05/13 10:48:35 tr Exp $
*
* $Log: uce-dirent.h,v $
* Revision 1.7 2002/05/13 10:48:35 tr
* embedded some source code directly to the header so that no source
* modules need to be included in the MS Visual C project using the
* interface, removed all the dependencies to other headers of the `uce'
* library so that the header can be made public
*
* Revision 1.6 2002/04/12 16:22:04 tr
* Unified Compiling Environment (UCE) replaced `std' library
*
* Revision 1.5 2001/07/20 16:33:40 tr
* moved to `std' library and re-named defines accordingly
*
* Revision 1.4 2001/07/10 16:47:18 tronkko
* revised comments
*
* Revision 1.3 2001/01/11 13:16:43 tr
* using ``uce-machine.h'' for finding out defines such as `FREEBSD'
*
* Revision 1.2 2000/10/08 16:00:41 tr
* copy of FreeBSD man page
*
* Revision 1.1 2000/07/10 05:53:16 tr
* Initial revision
*
* Revision 1.2 1998/07/19 18:29:14 tr
* Added error reporting capabilities and some asserts.
*
* Revision 1.1 1998/07/04 16:27:51 tr
* Initial revision
*
*
* MSVC 1.0 scans automatic dependencies incorrectly when your project
* contains this very header. The problem is that MSVC cannot handle
* include directives inside #if..#endif block those are never entered.
* Since this header ought to compile in many different operating systems,
* there had to be several conditional blocks that are compiled only in
* operating systems for what they were designed for. MSVC 1.0 cannot
* handle inclusion of sys/dir.h in a part that is compiled only in Apollo
* operating system. To fix the problem you need to insert DIR.H into
* SYSINCL.DAT located in MSVC\BIN directory and restart visual C++.
* Consult manuals for more informaton about the problem.
*
* Since many UNIX systems have dirent.h we assume to have one also.
* However, if your UNIX system does not have dirent.h you can download one
* for example at: http://ftp.uni-mannheim.de/ftp/GNU/dirent/dirent.tar.gz.
* You can also see if you have one of dirent.h, direct.h, dir.h, ndir.h,
* sys/dir.h and sys/ndir.h somewhere. Try defining HAVE_DIRENT_H,
* HAVE_DIRECT_H, HAVE_DIR_H, HAVE_NDIR_H, HAVE_SYS_DIR_H and
* HAVE_SYS_NDIR_H according to the files found.
*/
#ifndef DIRENT_H
#define DIRENT_H
#define DIRENT_H_INCLUDED
/* find out platform */
#if defined(MSDOS) /* MS-DOS */
#elif defined(__MSDOS__) /* Turbo C/Borland */
# define MSDOS
#elif defined(__DOS__) /* Watcom */
# define MSDOS
#endif
#if defined(WIN32) /* MS-Windows */
#elif defined(__NT__) /* Watcom */
# define WIN32
#elif defined(_WIN32) /* Microsoft */
# define WIN32
#elif defined(__WIN32__) /* Borland */
# define WIN32
#endif
/*
* See what kind of dirent interface we have unless autoconf has already
* determinated that.
*/
#if !defined(HAVE_DIRENT_H) && !defined(HAVE_DIRECT_H) && !defined(HAVE_SYS_DIR_H) && !defined(HAVE_NDIR_H) && !defined(HAVE_SYS_NDIR_H) && !defined(HAVE_DIR_H)
# if defined(_MSC_VER) /* Microsoft C/C++ */
/* no dirent.h */
# elif defined(__BORLANDC__) /* Borland C/C++ */
# define HAVE_DIRENT_H
# define VOID_CLOSEDIR
# elif defined(__TURBOC__) /* Borland Turbo C */
/* no dirent.h */
# elif defined(__WATCOMC__) /* Watcom C/C++ */
# define HAVE_DIRECT_H
# elif defined(__apollo) /* Apollo */
# define HAVE_SYS_DIR_H
# elif defined(__hpux) /* HP-UX */
# define HAVE_DIRENT_H
# elif defined(__alpha) || defined(__alpha__) /* Alpha OSF1 */
# error "not implemented"
# elif defined(__sgi) /* Silicon Graphics */
# define HAVE_DIRENT_H
# elif defined(sun) || defined(_sun) /* Sun Solaris */
# define HAVE_DIRENT_H
# elif defined(__FreeBSD__) /* FreeBSD */
# define HAVE_DIRENT_H
# elif defined(__linux__) /* Linux */
# define HAVE_DIRENT_H
# elif defined(__GNUC__) /* GNU C/C++ */
# define HAVE_DIRENT_H
# else
# error "not implemented"
# endif
#endif
/* include proper interface headers */
#if defined(HAVE_DIRENT_H)
# include <dirent.h>
# ifdef FREEBSD
# define NAMLEN(dp) ((int)((dp)->d_namlen))
# else
# define NAMLEN(dp) ((int)(strlen((dp)->d_name)))
# endif
#elif defined(HAVE_NDIR_H)
# include <ndir.h>
# define NAMLEN(dp) ((int)((dp)->d_namlen))
#elif defined(HAVE_SYS_NDIR_H)
# include <sys/ndir.h>
# define NAMLEN(dp) ((int)((dp)->d_namlen))
#elif defined(HAVE_DIRECT_H)
# include <direct.h>
# define NAMLEN(dp) ((int)((dp)->d_namlen))
#elif defined(HAVE_DIR_H)
# include <dir.h>
# define NAMLEN(dp) ((int)((dp)->d_namlen))
#elif defined(HAVE_SYS_DIR_H)
# include <sys/types.h>
# include <sys/dir.h>
# ifndef dirent
# define dirent direct
# endif
# define NAMLEN(dp) ((int)((dp)->d_namlen))
#elif defined(MSDOS) || defined(WIN32)
/* figure out type of underlaying directory interface to be used */
# if defined(WIN32)
# define DIRENT_WIN32_INTERFACE
# elif defined(MSDOS)
# define DIRENT_MSDOS_INTERFACE
# else
# error "missing native dirent interface"
# endif
/*** WIN32 specifics ***/
# if defined(DIRENT_WIN32_INTERFACE)
# include <windows.h>
# if !defined(DIRENT_MAXNAMLEN)
# define DIRENT_MAXNAMLEN (MAX_PATH)
# endif
/*** MS-DOS specifics ***/
# elif defined(DIRENT_MSDOS_INTERFACE)
# include <dos.h>
/* Borland defines file length macros in dir.h */
# if defined(__BORLANDC__)
# include <dir.h>
# if !defined(DIRENT_MAXNAMLEN)
# define DIRENT_MAXNAMLEN ((MAXFILE)+(MAXEXT))
# endif
# if !defined(_find_t)
# define _find_t find_t
# endif
/* Turbo C defines ffblk structure in dir.h */
# elif defined(__TURBOC__)
# include <dir.h>
# if !defined(DIRENT_MAXNAMLEN)
# define DIRENT_MAXNAMLEN ((MAXFILE)+(MAXEXT))
# endif
# define DIRENT_USE_FFBLK
/* MSVC */
# elif defined(_MSC_VER)
# if !defined(DIRENT_MAXNAMLEN)
# define DIRENT_MAXNAMLEN (12)
# endif
/* Watcom */
# elif defined(__WATCOMC__)
# if !defined(DIRENT_MAXNAMLEN)
# if defined(__OS2__) || defined(__NT__)
# define DIRENT_MAXNAMLEN (255)
# else
# define DIRENT_MAXNAMLEN (12)
# endif
# endif
# endif
# endif
/*** generic MS-DOS and MS-Windows stuff ***/
# if !defined(NAME_MAX) && defined(DIRENT_MAXNAMLEN)
# define NAME_MAX DIRENT_MAXNAMLEN
# endif
# if NAME_MAX < DIRENT_MAXNAMLEN
# error "assertion failed: NAME_MAX >= DIRENT_MAXNAMLEN"
# endif
/*
* Substitute for real dirent structure. Note that `d_name' field is a
* true character array although we have it copied in the implementation
* dependent data. We could save some memory if we had declared `d_name'
* as a pointer refering the name within implementation dependent data.
* We have not done that since some code may rely on sizeof(d_name) to be
* something other than four. Besides, directory entries are typically so
* small that it takes virtually no time to copy them from place to place.
*/
typedef struct dirent {
char d_name[NAME_MAX + 1];
/*** Operating system specific part ***/
# if defined(DIRENT_WIN32_INTERFACE) /*WIN32*/
WIN32_FIND_DATA data;
# elif defined(DIRENT_MSDOS_INTERFACE) /*MSDOS*/
# if defined(DIRENT_USE_FFBLK)
struct ffblk data;
# else
struct _find_t data;
# endif
# endif
} dirent;
/* DIR substitute structure containing directory name. The name is
* essential for the operation of ``rewinndir'' function. */
typedef struct DIR {
char *dirname; /* directory being scanned */
dirent current; /* current entry */
int dirent_filled; /* is current un-processed? */
/*** Operating system specific part ***/
# if defined(DIRENT_WIN32_INTERFACE)
HANDLE search_handle;
# elif defined(DIRENT_MSDOS_INTERFACE)
# endif
} DIR;
# ifdef __cplusplus
extern "C" {
# endif
/* supply prototypes for dirent functions */
static DIR *opendir (const char *dirname);
static struct dirent *readdir (DIR *dirp);
static int closedir (DIR *dirp);
static void rewinddir (DIR *dirp);
/*
* Implement dirent interface as static functions so that the user does not
* need to change his project in any way to use dirent function. With this
* it is sufficient to include this very header from source modules using
* dirent functions and the functions will be pulled in automatically.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <errno.h>
/* use ffblk instead of _find_t if requested */
#if defined(DIRENT_USE_FFBLK)
# define _A_ARCH (FA_ARCH)
# define _A_HIDDEN (FA_HIDDEN)
# define _A_NORMAL (0)
# define _A_RDONLY (FA_RDONLY)
# define _A_SUBDIR (FA_DIREC)
# define _A_SYSTEM (FA_SYSTEM)
# define _A_VOLID (FA_LABEL)
# define _dos_findnext(dest) findnext(dest)
# define _dos_findfirst(name,flags,dest) findfirst(name,dest,flags)
#endif
static int _initdir (DIR *p);
static const char *_getdirname (const struct dirent *dp);
static void _setdirname (struct DIR *dirp);
/*
* <function name="opendir">
* <intro>open directory stream for reading
* <syntax>DIR *opendir (const char *dirname);
*
* <desc>Open named directory stream for read and return pointer to the
* internal working area that is used for retrieving individual directory
* entries. The internal working area has no fields of your interest.
*
* <ret>Returns a pointer to the internal working area or NULL in case the
* directory stream could not be opened. Global `errno' variable will set
* in case of error as follows:
*
* <table>
* [EACESS |Permission denied.
* [EMFILE |Too many open files used by the process.
* [ENFILE |Too many open files in system.
* [ENOENT |Directory does not exist.
* [ENOMEM |Insufficient memory.
* [ENOTDIR |dirname does not refer to directory. This value is not
* reliable on MS-DOS and MS-Windows platforms. Many
* implementations return ENOENT even when the name refers to a
* file.]
* </table>
* </function>
*/
static DIR *opendir(const char *dirname)
{
DIR *dirp;
assert (dirname != NULL);
dirp = (DIR*)malloc (sizeof (struct DIR));
if (dirp != NULL) {
char *p;
/* allocate room for directory name */
dirp->dirname = (char*) malloc (strlen (dirname) + 1 + strlen ("\\*.*"));
if (dirp->dirname == NULL) {
/* failed to duplicate directory name. errno set by malloc() */
free (dirp);
return NULL;
}
/* Copy directory name while appending directory separator and "*.*".
* Directory separator is not appended if the name already ends with
* drive or directory separator. Directory separator is assumed to be
* '/' or '\' and drive separator is assumed to be ':'. */
strcpy (dirp->dirname, dirname);
p = strchr (dirp->dirname, '\0');
if (dirp->dirname < p &&
*(p - 1) != '\\' && *(p - 1) != '/' && *(p - 1) != ':')
{
strcpy (p++, "\\");
}
# ifdef DIRENT_WIN32_INTERFACE
strcpy (p, "*"); /*scan files with and without extension in win32*/
# else
strcpy (p, "*.*"); /*scan files with and without extension in DOS*/
# endif
/* open stream */
if (_initdir (dirp) == 0) {
/* initialization failed */
free (dirp->dirname);
free (dirp);
return NULL;
}
}
return dirp;
}
/*
* <function name="readdir">
* <intro>read a directory entry
* <syntax>struct dirent *readdir (DIR *dirp);
*
* <desc>Read individual directory entry and return pointer to a structure
* containing the name of the entry. Individual directory entries returned
* include normal files, sub-directories, pseudo-directories "." and ".."
* and also volume labels, hidden files and system files in MS-DOS and
* MS-Windows. You might want to use stat(2) function to determinate which
* one are you dealing with. Many dirent implementations already contain
* equivalent information in dirent structure but you cannot depend on
* this.
*
* The dirent structure contains several system dependent fields that
* generally have no interest to you. The only interesting one is char
* d_name[] that is also portable across different systems. The d_name
* field contains the name of the directory entry without leading path.
* While d_name is portable across different systems the actual storage
* capacity of d_name varies from system to system and there is no portable
* way to find out it at compile time as different systems define the
* capacity of d_name with different macros and some systems do not define
* capacity at all (besides actual declaration of the field). If you really
* need to find out storage capacity of d_name then you might want to try
* NAME_MAX macro. The NAME_MAX is defined in POSIX standard althought
* there are many MS-DOS and MS-Windows implementations those do not define
* it. There are also systems that declare d_name as "char d_name[1]" and
* then allocate suitable amount of memory at run-time. Thanks to Alain
* Decamps (Alain.Decamps@advalvas.be) for pointing it out to me.
*
* This all leads to the fact that it is difficult to allocate space
* for the directory names when the very same program is being compiled on
* number of operating systems. Therefore I suggest that you always
* allocate space for directory names dynamically.
*
* <ret>
* Returns a pointer to a structure containing name of the directory entry
* in `d_name' field or NULL if there was an error. In case of an error the
* global `errno' variable will set as follows:
*
* <table>
* [EBADF |dir parameter refers to an invalid directory stream. This value
* is not set reliably on all implementations.]
* </table>
* </function>
*/
static struct dirent *
readdir (DIR *dirp)
{
assert(dirp != NULL);
if (dirp == NULL) {
errno = EBADF;
return NULL;
}
#if defined(DIRENT_WIN32_INTERFACE)
if (dirp->search_handle == INVALID_HANDLE_VALUE) {
/* directory stream was opened/rewound incorrectly or it ended normally */
errno = EBADF;
return NULL;
}
#endif
if (dirp->dirent_filled != 0) {
/*
* Directory entry has already been retrieved and there is no need to
* retrieve a new one. Directory entry will be retrieved in advance
* when the user calls readdir function for the first time. This is so
* because real dirent has separate functions for opening and reading
* the stream whereas Win32 and DOS dirents open the stream
* automatically when we retrieve the first file. Therefore, we have to
* save the first file when opening the stream and later we have to
* return the saved entry when the user tries to read the first entry.
*/
dirp->dirent_filled = 0;
} else {
/* fill in entry and return that */
#if defined(DIRENT_WIN32_INTERFACE)
if (FindNextFile (dirp->search_handle, &dirp->current.data) == FALSE) {
/* Last file has been processed or an error occured */
FindClose (dirp->search_handle);
dirp->search_handle = INVALID_HANDLE_VALUE;
errno = ENOENT;
return NULL;
}
# elif defined(DIRENT_MSDOS_INTERFACE)
if (_dos_findnext (&dirp->current.data) != 0) {
/* _dos_findnext and findnext will set errno to ENOENT when no
* more entries could be retrieved. */
return NULL;
}
# endif
_setdirname (dirp);
assert (dirp->dirent_filled == 0);
}
return &dirp->current;
}
/*
* <function name="closedir">
* <intro>close directory stream.
* <syntax>int closedir (DIR *dirp);
*
* <desc>Close directory stream opened by the `opendir' function. Close of
* directory stream invalidates the DIR structure as well as previously read
* dirent entry.
*
* <ret>The function typically returns 0 on success and -1 on failure but
* the function may be declared to return void on same systems. At least
* Borland C/C++ and some UNIX implementations use void as a return type.
* The dirent wrapper tries to define VOID_CLOSEDIR whenever closedir is
* known to return nothing. The very same definition is made by the GNU
* autoconf if you happen to use it.
*
* The global `errno' variable will set to EBADF in case of error.
* </function>
*/
static int
closedir (DIR *dirp)
{
int retcode = 0;
/* make sure that dirp points to legal structure */
assert (dirp != NULL);
if (dirp == NULL) {
errno = EBADF;
return -1;
}
/* free directory name and search handles */
if (dirp->dirname != NULL) free (dirp->dirname);
#if defined(DIRENT_WIN32_INTERFACE)
if (dirp->search_handle != INVALID_HANDLE_VALUE) {
if (FindClose (dirp->search_handle) == FALSE) {
/* Unknown error */
retcode = -1;
errno = EBADF;
}
}
#endif
/* clear dirp structure to make sure that it cannot be used anymore*/
memset (dirp, 0, sizeof (*dirp));
# if defined(DIRENT_WIN32_INTERFACE)
dirp->search_handle = INVALID_HANDLE_VALUE;
# endif
free (dirp);
return retcode;
}
/*
* <function name="rewinddir">
* <intro>rewind directory stream to the beginning
* <syntax>void rewinddir (DIR *dirp);
*
* <desc>Rewind directory stream to the beginning so that the next call of
* readdir() returns the very first directory entry again. However, note
* that next call of readdir() may not return the same directory entry as it
* did in first time. The directory stream may have been affected by newly
* created files.
*
* Almost every dirent implementation ensure that rewinddir will update
* the directory stream to reflect any changes made to the directory entries
* since the previous ``opendir'' or ``rewinddir'' call. Keep an eye on
* this if your program depends on the feature. I know at least one dirent
* implementation where you are required to close and re-open the stream to
* see the changes.
*
* <ret>Returns nothing. If something went wrong while rewinding, you will
* notice it later when you try to retrieve the first directory entry.
*/
static void
rewinddir (DIR *dirp)
{
/* make sure that dirp is legal */
assert (dirp != NULL);
if (dirp == NULL) {
errno = EBADF;
return;
}
assert (dirp->dirname != NULL);
/* close previous stream */
#if defined(DIRENT_WIN32_INTERFACE)
if (dirp->search_handle != INVALID_HANDLE_VALUE) {
if (FindClose (dirp->search_handle) == FALSE) {
/* Unknown error */
errno = EBADF;
}
}
#endif
/* re-open previous stream */
if (_initdir (dirp) == 0) {
/* initialization failed but we cannot deal with error. User will notice
* error later when she tries to retrieve first directory enty. */
/*EMPTY*/;
}
}
/*
* Open native directory stream object and retrieve first file.
* Be sure to close previous stream before opening new one.
*/
static int
_initdir (DIR *dirp)
{
assert (dirp != NULL);
assert (dirp->dirname != NULL);
dirp->dirent_filled = 0;
# if defined(DIRENT_WIN32_INTERFACE)
/* Open stream and retrieve first file */
dirp->search_handle = FindFirstFile (dirp->dirname, &dirp->current.data);
if (dirp->search_handle == INVALID_HANDLE_VALUE) {
/* something went wrong but we don't know what. GetLastError() could
* give us more information about the error, but then we should map
* the error code into errno. */
errno = ENOENT;
return 0;
}
# elif defined(DIRENT_MSDOS_INTERFACE)
if (_dos_findfirst (dirp->dirname,
_A_SUBDIR | _A_RDONLY | _A_ARCH | _A_SYSTEM | _A_HIDDEN,
&dirp->current.data) != 0)
{
/* _dos_findfirst and findfirst will set errno to ENOENT when no
* more entries could be retrieved. */
return 0;
}
# endif
/* initialize DIR and it's first entry */
_setdirname (dirp);
dirp->dirent_filled = 1;
return 1;
}
/*
* Return implementation dependent name of the current directory entry.
*/
static const char *
_getdirname (const struct dirent *dp)
{
#if defined(DIRENT_WIN32_INTERFACE)
return dp->data.cFileName;
#elif defined(DIRENT_USE_FFBLK)
return dp->data.ff_name;
#else
return dp->data.name;
#endif
}
/*
* Copy name of implementation dependent directory entry to the d_name field.
*/
static void
_setdirname (struct DIR *dirp) {
/* make sure that d_name is long enough */
assert (strlen (_getdirname (&dirp->current)) <= NAME_MAX);
strncpy (dirp->current.d_name,
_getdirname (&dirp->current),
NAME_MAX);
dirp->current.d_name[NAME_MAX] = '\0'; /*char d_name[NAME_MAX+1]*/
}
# ifdef __cplusplus
}
# endif
# define NAMLEN(dp) ((int)(strlen((dp)->d_name)))
#else
# error "missing dirent interface"
#endif
#endif /*DIRENT_H*/

File diff suppressed because it is too large Load Diff

View File

@@ -39,17 +39,20 @@ RSC=rc.exe
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release"
# PROP Intermediate_Dir "Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD CPP /nologo /W3 /GX /O2 /I "../libopenjpeg" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "DONT_HAVE_GETOPT" /YX /FD /c
# ADD BASE RSC /l 0x80c /d "NDEBUG"
# ADD RSC /l 0x80c /i "../libopenjpeg" /d "NDEBUG"
# ADD CPP /nologo /MT /W3 /GX /O2 /I "../libopenjpeg" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "OPJ_STATIC" /FD /c
# SUBTRACT CPP /YX
# ADD BASE RSC /l 0x40c /d "NDEBUG"
# ADD RSC /l 0x40c /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../libs/libtiff/libtiff.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libc"
# SUBTRACT LINK32 /pdb:none
!ELSEIF "$(CFG)" == "image_to_j2k - Win32 Debug"
@@ -65,15 +68,17 @@ LINK32=link.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../libopenjpeg" /D "_DEBUG" /D "DONT_HAVE_GETOPT" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /GZ /c
# ADD BASE RSC /l 0x80c /d "_DEBUG"
# ADD RSC /l 0x80c /d "_DEBUG"
# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../libopenjpeg" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "OPJ_STATIC" /FD /GZ /c
# SUBTRACT CPP /YX
# ADD BASE RSC /l 0x40c /d "_DEBUG"
# ADD RSC /l 0x40c /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../libs/libtiff/libtiff.lib /nologo /subsystem:console /debug /machine:I386 /nodefaultlib:"libc" /pdbtype:sept
# SUBTRACT LINK32 /pdb:none
!ENDIF
@@ -81,108 +86,17 @@ LINK32=link.exe
# Name "image_to_j2k - Win32 Release"
# Name "image_to_j2k - Win32 Debug"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=..\libopenjpeg\bio.c
# End Source File
# Begin Source File
SOURCE=..\libopenjpeg\cio.c
# End Source File
# Begin Source File
SOURCE=.\convert.c
# End Source File
# Begin Source File
SOURCE=..\libopenjpeg\dwt.c
# End Source File
# Begin Source File
SOURCE=..\libopenjpeg\fix.c
# End Source File
# Begin Source File
SOURCE=.\compat\getopt.c
# End Source File
# Begin Source File
SOURCE=.\image_to_j2k.c
# End Source File
# Begin Source File
SOURCE=..\libopenjpeg\int.c
# End Source File
# Begin Source File
SOURCE=..\libopenjpeg\j2k.c
# End Source File
# Begin Source File
SOURCE=..\libopenjpeg\jp2.c
# End Source File
# Begin Source File
SOURCE=..\libopenjpeg\jpt.c
# End Source File
# Begin Source File
SOURCE=..\libopenjpeg\mct.c
# End Source File
# Begin Source File
SOURCE=..\libopenjpeg\mqc.c
# End Source File
# Begin Source File
SOURCE=..\libopenjpeg\pi.c
# End Source File
# Begin Source File
SOURCE=..\libopenjpeg\raw.c
# End Source File
# Begin Source File
SOURCE=..\libopenjpeg\t1.c
# End Source File
# Begin Source File
SOURCE=..\libopenjpeg\t2.c
# End Source File
# Begin Source File
SOURCE=..\libopenjpeg\tcd.c
# End Source File
# Begin Source File
SOURCE=..\libopenjpeg\tgt.c
# End Source File
# End Group
# Begin Group "Header Files"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# Begin Source File
SOURCE=..\libopenjpeg\bio.h
# End Source File
# Begin Source File
SOURCE=..\libopenjpeg\cio.h
# End Source File
# Begin Source File
SOURCE=.\convert.h
# End Source File
# Begin Source File
SOURCE=..\libopenjpeg\dwt.h
# End Source File
# Begin Source File
SOURCE=..\libopenjpeg\fix.h
SOURCE=.\compat\getopt.c
# End Source File
# Begin Source File
@@ -190,60 +104,7 @@ SOURCE=.\compat\getopt.h
# End Source File
# Begin Source File
SOURCE=..\libopenjpeg\int.h
SOURCE=.\image_to_j2k.c
# End Source File
# Begin Source File
SOURCE=..\libopenjpeg\j2k.h
# End Source File
# Begin Source File
SOURCE=..\libopenjpeg\jp2.h
# End Source File
# Begin Source File
SOURCE=..\libopenjpeg\jpt.h
# End Source File
# Begin Source File
SOURCE=..\libopenjpeg\mct.h
# End Source File
# Begin Source File
SOURCE=..\libopenjpeg\mqc.h
# End Source File
# Begin Source File
SOURCE=..\libopenjpeg\openjpeg.h
# End Source File
# Begin Source File
SOURCE=..\libopenjpeg\pi.h
# End Source File
# Begin Source File
SOURCE=..\libopenjpeg\raw.h
# End Source File
# Begin Source File
SOURCE=..\libopenjpeg\t1.h
# End Source File
# Begin Source File
SOURCE=..\libopenjpeg\t2.h
# End Source File
# Begin Source File
SOURCE=..\libopenjpeg\tcd.h
# End Source File
# Begin Source File
SOURCE=..\libopenjpeg\tgt.h
# End Source File
# End Group
# Begin Group "Resource Files"
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# End Group
# End Target
# End Project

44
codec/image_to_j2k.dsw Normal file
View File

@@ -0,0 +1,44 @@
Microsoft Developer Studio Workspace File, Format Version 6.00
# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
###############################################################################
Project: "LibOpenJPEG"=..\LibOpenJPEG.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
}}}
###############################################################################
Project: "image_to_j2k"=.\image_to_j2k.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
Begin Project Dependency
Project_Dep_Name LibOpenJPEG
End Project Dependency
}}}
###############################################################################
Global:
Package=<5>
{{{
}}}
Package=<3>
{{{
}}}
###############################################################################

File diff suppressed because it is too large Load Diff

View File

@@ -39,40 +39,45 @@ RSC=rc.exe
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release"
# PROP Intermediate_Dir "Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD CPP /nologo /W3 /GX /O2 /I "../libopenjpeg" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "DONT_HAVE_GETOPT" /YX /FD /c
# ADD BASE RSC /l 0x80c /d "NDEBUG"
# ADD RSC /l 0x80c /d "NDEBUG"
# ADD CPP /nologo /MT /W3 /GX /O2 /I "../libopenjpeg" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "OPJ_STATIC" /FD /c
# SUBTRACT CPP /YX
# ADD BASE RSC /l 0x40c /d "NDEBUG"
# ADD RSC /l 0x40c /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../libs/libtiff/libtiff.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libc"
# SUBTRACT LINK32 /pdb:none
!ELSEIF "$(CFG)" == "j2k_to_image - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "j2k_to_image___Win32_Debug"
# PROP BASE Intermediate_Dir "j2k_to_image___Win32_Debug"
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "j2k_to_image___Win32_Debug"
# PROP Intermediate_Dir "j2k_to_image___Win32_Debug"
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../libopenjpeg" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "DONT_HAVE_GETOPT" /YX /FD /GZ /c
# ADD BASE RSC /l 0x80c /d "_DEBUG"
# ADD RSC /l 0x80c /d "_DEBUG"
# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../libopenjpeg" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "OPJ_STATIC" /YX /FD /GZ /c
# ADD BASE RSC /l 0x40c /d "_DEBUG"
# ADD RSC /l 0x40c /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../libs/libtiff/libtiff.lib /nologo /subsystem:console /debug /machine:I386 /nodefaultlib:"libc" /pdbtype:sept
# SUBTRACT LINK32 /pdb:none
!ENDIF
@@ -80,24 +85,13 @@ LINK32=link.exe
# Name "j2k_to_image - Win32 Release"
# Name "j2k_to_image - Win32 Debug"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=..\libopenjpeg\bio.c
SOURCE=.\convert.c
# End Source File
# Begin Source File
SOURCE=..\libopenjpeg\cio.c
# End Source File
# Begin Source File
SOURCE=..\libopenjpeg\dwt.c
# End Source File
# Begin Source File
SOURCE=..\libopenjpeg\fix.c
SOURCE=.\convert.h
# End Source File
# Begin Source File
@@ -105,136 +99,11 @@ SOURCE=.\compat\getopt.c
# End Source File
# Begin Source File
SOURCE=..\libopenjpeg\int.c
# End Source File
# Begin Source File
SOURCE=..\libopenjpeg\j2k.c
SOURCE=.\compat\getopt.h
# End Source File
# Begin Source File
SOURCE=.\j2k_to_image.c
# End Source File
# Begin Source File
SOURCE=..\libopenjpeg\jp2.c
# End Source File
# Begin Source File
SOURCE=..\libopenjpeg\jpt.c
# End Source File
# Begin Source File
SOURCE=..\libopenjpeg\mct.c
# End Source File
# Begin Source File
SOURCE=..\libopenjpeg\mqc.c
# End Source File
# Begin Source File
SOURCE=..\libopenjpeg\pi.c
# End Source File
# Begin Source File
SOURCE=..\libopenjpeg\raw.c
# End Source File
# Begin Source File
SOURCE=..\libopenjpeg\t1.c
# End Source File
# Begin Source File
SOURCE=..\libopenjpeg\t2.c
# End Source File
# Begin Source File
SOURCE=..\libopenjpeg\tcd.c
# End Source File
# Begin Source File
SOURCE=..\libopenjpeg\tgt.c
# End Source File
# End Group
# Begin Group "Header Files"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# Begin Source File
SOURCE=..\libopenjpeg\bio.h
# End Source File
# Begin Source File
SOURCE=..\libopenjpeg\cio.h
# End Source File
# Begin Source File
SOURCE=..\libopenjpeg\dwt.h
# End Source File
# Begin Source File
SOURCE=..\libopenjpeg\fix.h
# End Source File
# Begin Source File
SOURCE=.\compat\getopt.h
# End Source File
# Begin Source File
SOURCE=..\libopenjpeg\int.h
# End Source File
# Begin Source File
SOURCE=..\libopenjpeg\j2k.h
# End Source File
# Begin Source File
SOURCE=..\libopenjpeg\jp2.h
# End Source File
# Begin Source File
SOURCE=..\libopenjpeg\jpt.h
# End Source File
# Begin Source File
SOURCE=..\libopenjpeg\mct.h
# End Source File
# Begin Source File
SOURCE=..\libopenjpeg\mqc.h
# End Source File
# Begin Source File
SOURCE=..\libopenjpeg\openjpeg.h
# End Source File
# Begin Source File
SOURCE=..\libopenjpeg\pi.h
# End Source File
# Begin Source File
SOURCE=..\libopenjpeg\raw.h
# End Source File
# Begin Source File
SOURCE=..\libopenjpeg\t1.h
# End Source File
# Begin Source File
SOURCE=..\libopenjpeg\t2.h
# End Source File
# Begin Source File
SOURCE=..\libopenjpeg\tcd.h
# End Source File
# Begin Source File
SOURCE=..\libopenjpeg\tgt.h
# End Source File
# End Group
# Begin Group "Resource Files"
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# End Group
# End Target
# End Project

44
codec/j2k_to_image.dsw Normal file
View File

@@ -0,0 +1,44 @@
Microsoft Developer Studio Workspace File, Format Version 6.00
# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
###############################################################################
Project: "LibOpenJPEG"=..\LibOpenJPEG.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
}}}
###############################################################################
Project: "j2k_to_image"=.\j2k_to_image.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
Begin Project Dependency
Project_Dep_Name LibOpenJPEG
End Project Dependency
}}}
###############################################################################
Global:
Package=<5>
{{{
}}}
Package=<3>
{{{
}}}
###############################################################################

View File

@@ -1,105 +0,0 @@
List of parameters for the coder JPEG 2000 :
Date : June the 25th, 2003
Author : Yannick Verschueren
Contact : verschueren@tele.ucl.ac.be
- the option -help displays the readme.txt file on screen
- The markers COD and QCD are writed both of two in the main_header and never appear in the tile_header. The markers in the main header are : SOC SIZ COD QCD COM.
- This coder can encode mega image, a test was made on a 24000x24000 pixels color image. You need enough disk space memory (twice the original) to encode the image. (i.e. for a 1.5 Gb image you need a minimum of 3Gb of disk memory)
REMARKS :
---------
* the value of rate enter in the code line is the compression factor !
exemple :
-r 20,10,1 means quality 1 : compress 20x, quality 2 : compress 10x and quality 3 : compress 1x = lossless
* The number of resolution can be modified by the program in view to respect profile-0 conditions (Taubman, Marcelin (2002), "JPEG2000, image compression fundamentals, standards and practice", p700)
By default :
------------
* lossless
* 1 tile
* size of precinct 2^15 x 2^15 (means 1 precinct)
* size of code-block 64 x 64
* Number of resolution : 6
* No SOP marker in the codestream
* No EPH marker in the codestream
* No sub-sampling in x and y direction
* No mode switch activated
* progression order : LRCP
* No index file
* No ROI upshifted
* No offset of the origin of the image
* No offset of the origin of the tiles
* Reversible DWT 5-3
Parameters :
------------
-i : source file (-i source.pnm also *.pgm, *.ppm) "required"
-o : destination file (-o dest.j2k) "required"
-r : different rates (-r 20,10,5) "optional"
-n : Number of resolution (-n 3) "optional"
-b : size of code block (-b 32,32) "optional"
-c : size of precinct (-c 128,128) "optional"
-t : size of tile (-t 512,512) "optional"
-p : progression order (-p LRCP) [LRCP, RLCP, RPCL, PCRL, CPRL] "optional"
-s : subsampling factor (-s 2,2) [-s X,Y] "optional"
-SOP : write SOP marker before each packet "optional"
-EPH : write EPH marker after each header packet "optional"
-M : mode switch (-M 3) [1= BYPASS(LAZY) 2=RESET 4=RESTART(TERMALL) 8=VSC 16=ERTERM(SEGTERM) 32=SEGMARK(SEGSYM)] "optional"
for several mode switch you have to add the value of each mode you want
ex : RESTART(4) + RESET(2) + SEGMARK(32) = -M 38
-x : Create an index file *.Idx (-x index_name.Idx) "optional"
-ROI:c=%d,U=%d : quantization indices upshifted for component c=%d [%d = 0,1,2]
with a value of U=%d [0 <= %d <= 37] (i.e. -ROI:c=0,U=25) "optional"
-d : offset of the origin of the image (-d 150,300) "optional"
-T : offset of the origin of the tiles (-T 100,75) "optional"
-I : Use the irreversible DWT 9-7 (-I) "optional"
IMPORTANT :
-----------
* subsampling bigger than 2 can produce error
The index file respect the structure below :
---------------------------------------------
Image_height Image_width
progression order
Tiles_size_X Tiles_size_Y
Components_nb
Layers_nb
decomposition_levels
Precincts_size_X Precincts_size_Y
Main_header_end_position
Codestream_size
Tile0 start_pos end_Theader end_pos
Tile1 " " "
...
TileN " " "
Tpacket_0 Tile layer res. comp. prec. start_pos end_pos
...
Tpacket_M " " " " " " "

233
doc/Doxyfile.dox Normal file
View File

@@ -0,0 +1,233 @@
# Doxyfile 1.4.2
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
PROJECT_NAME = OpenJPEG
PROJECT_NUMBER =
OUTPUT_DIRECTORY = ../
CREATE_SUBDIRS = NO
OUTPUT_LANGUAGE = English
USE_WINDOWS_ENCODING = YES
BRIEF_MEMBER_DESC = YES
REPEAT_BRIEF = YES
ABBREVIATE_BRIEF = "The $name class" \
"The $name widget" \
"The $name file" \
is \
provides \
specifies \
contains \
represents \
a \
an \
the
ALWAYS_DETAILED_SEC = NO
INLINE_INHERITED_MEMB = NO
FULL_PATH_NAMES = NO
STRIP_FROM_PATH = C://
STRIP_FROM_INC_PATH =
SHORT_NAMES = NO
JAVADOC_AUTOBRIEF = YES
MULTILINE_CPP_IS_BRIEF = NO
DETAILS_AT_TOP = YES
INHERIT_DOCS = YES
DISTRIBUTE_GROUP_DOC = NO
SEPARATE_MEMBER_PAGES = NO
TAB_SIZE = 8
ALIASES =
OPTIMIZE_OUTPUT_FOR_C = YES
OPTIMIZE_OUTPUT_JAVA = NO
SUBGROUPING = YES
#---------------------------------------------------------------------------
# Build related configuration options
#---------------------------------------------------------------------------
EXTRACT_ALL = YES
EXTRACT_PRIVATE = YES
EXTRACT_STATIC = YES
EXTRACT_LOCAL_CLASSES = YES
EXTRACT_LOCAL_METHODS = NO
HIDE_UNDOC_MEMBERS = NO
HIDE_UNDOC_CLASSES = NO
HIDE_FRIEND_COMPOUNDS = NO
HIDE_IN_BODY_DOCS = NO
INTERNAL_DOCS = NO
CASE_SENSE_NAMES = NO
HIDE_SCOPE_NAMES = NO
SHOW_INCLUDE_FILES = YES
INLINE_INFO = YES
SORT_MEMBER_DOCS = YES
SORT_BRIEF_DOCS = NO
SORT_BY_SCOPE_NAME = NO
GENERATE_TODOLIST = YES
GENERATE_TESTLIST = YES
GENERATE_BUGLIST = YES
GENERATE_DEPRECATEDLIST= YES
ENABLED_SECTIONS =
MAX_INITIALIZER_LINES = 30
SHOW_USED_FILES = YES
SHOW_DIRECTORIES = NO
FILE_VERSION_FILTER =
#---------------------------------------------------------------------------
# configuration options related to warning and progress messages
#---------------------------------------------------------------------------
QUIET = NO
WARNINGS = YES
WARN_IF_UNDOCUMENTED = YES
WARN_IF_DOC_ERROR = YES
WARN_NO_PARAMDOC = NO
WARN_FORMAT = "$file:$line: $text"
WARN_LOGFILE =
#---------------------------------------------------------------------------
# configuration options related to the input files
#---------------------------------------------------------------------------
INPUT = ../libopenjpeg \
../jpwl
FILE_PATTERNS = *.h \
*.c
RECURSIVE = NO
EXCLUDE =
EXCLUDE_SYMLINKS = NO
EXCLUDE_PATTERNS =
EXAMPLE_PATH =
EXAMPLE_PATTERNS = *
EXAMPLE_RECURSIVE = NO
IMAGE_PATH =
INPUT_FILTER =
FILTER_PATTERNS =
FILTER_SOURCE_FILES = NO
#---------------------------------------------------------------------------
# configuration options related to source browsing
#---------------------------------------------------------------------------
SOURCE_BROWSER = NO
INLINE_SOURCES = NO
STRIP_CODE_COMMENTS = YES
REFERENCED_BY_RELATION = YES
REFERENCES_RELATION = YES
VERBATIM_HEADERS = YES
#---------------------------------------------------------------------------
# configuration options related to the alphabetical class index
#---------------------------------------------------------------------------
ALPHABETICAL_INDEX = NO
COLS_IN_ALPHA_INDEX = 5
IGNORE_PREFIX =
#---------------------------------------------------------------------------
# configuration options related to the HTML output
#---------------------------------------------------------------------------
GENERATE_HTML = YES
HTML_OUTPUT = ./html
HTML_FILE_EXTENSION = .html
HTML_HEADER =
HTML_FOOTER =
HTML_STYLESHEET =
HTML_ALIGN_MEMBERS = YES
GENERATE_HTMLHELP = NO
CHM_FILE =
HHC_LOCATION =
GENERATE_CHI = NO
BINARY_TOC = NO
TOC_EXPAND = NO
DISABLE_INDEX = NO
ENUM_VALUES_PER_LINE = 4
GENERATE_TREEVIEW = NO
TREEVIEW_WIDTH = 250
#---------------------------------------------------------------------------
# configuration options related to the LaTeX output
#---------------------------------------------------------------------------
GENERATE_LATEX = NO
LATEX_OUTPUT = latex
LATEX_CMD_NAME = latex
MAKEINDEX_CMD_NAME = makeindex
COMPACT_LATEX = NO
PAPER_TYPE = a4wide
EXTRA_PACKAGES =
LATEX_HEADER =
PDF_HYPERLINKS = NO
USE_PDFLATEX = NO
LATEX_BATCHMODE = NO
LATEX_HIDE_INDICES = NO
#---------------------------------------------------------------------------
# configuration options related to the RTF output
#---------------------------------------------------------------------------
GENERATE_RTF = NO
RTF_OUTPUT = rtf
COMPACT_RTF = NO
RTF_HYPERLINKS = NO
RTF_STYLESHEET_FILE =
RTF_EXTENSIONS_FILE =
#---------------------------------------------------------------------------
# configuration options related to the man page output
#---------------------------------------------------------------------------
GENERATE_MAN = NO
MAN_OUTPUT = man
MAN_EXTENSION = .3
MAN_LINKS = NO
#---------------------------------------------------------------------------
# configuration options related to the XML output
#---------------------------------------------------------------------------
GENERATE_XML = NO
XML_OUTPUT = xml
XML_SCHEMA =
XML_DTD =
XML_PROGRAMLISTING = YES
#---------------------------------------------------------------------------
# configuration options for the AutoGen Definitions output
#---------------------------------------------------------------------------
GENERATE_AUTOGEN_DEF = NO
#---------------------------------------------------------------------------
# configuration options related to the Perl module output
#---------------------------------------------------------------------------
GENERATE_PERLMOD = NO
PERLMOD_LATEX = NO
PERLMOD_PRETTY = YES
PERLMOD_MAKEVAR_PREFIX =
#---------------------------------------------------------------------------
# Configuration options related to the preprocessor
#---------------------------------------------------------------------------
ENABLE_PREPROCESSING = YES
MACRO_EXPANSION = NO
EXPAND_ONLY_PREDEF = NO
SEARCH_INCLUDES = YES
INCLUDE_PATH =
INCLUDE_FILE_PATTERNS =
PREDEFINED = USE_JPWL
EXPAND_AS_DEFINED =
SKIP_FUNCTION_MACROS = YES
#---------------------------------------------------------------------------
# Configuration::additions related to external references
#---------------------------------------------------------------------------
TAGFILES =
GENERATE_TAGFILE =
ALLEXTERNALS = NO
EXTERNAL_GROUPS = YES
PERL_PATH = /usr/bin/perl
#---------------------------------------------------------------------------
# Configuration options related to the dot tool
#---------------------------------------------------------------------------
CLASS_DIAGRAMS = YES
HIDE_UNDOC_RELATIONS = YES
HAVE_DOT = NO
CLASS_GRAPH = YES
COLLABORATION_GRAPH = YES
GROUP_GRAPHS = YES
UML_LOOK = NO
TEMPLATE_RELATIONS = NO
INCLUDE_GRAPH = YES
INCLUDED_BY_GRAPH = YES
CALL_GRAPH = NO
GRAPHICAL_HIERARCHY = YES
DIRECTORY_GRAPH = YES
DOT_IMAGE_FORMAT = png
DOT_PATH =
DOTFILE_DIRS =
MAX_DOT_GRAPH_WIDTH = 1024
MAX_DOT_GRAPH_HEIGHT = 1024
MAX_DOT_GRAPH_DEPTH = 1000
DOT_TRANSPARENT = NO
DOT_MULTI_TARGETS = NO
GENERATE_LEGEND = YES
DOT_CLEANUP = YES
#---------------------------------------------------------------------------
# Configuration::additions related to the search engine
#---------------------------------------------------------------------------
SEARCHENGINE = NO

273
jp3d/DllJp3dVM.dsp Executable file
View File

@@ -0,0 +1,273 @@
# Microsoft Developer Studio Project File - Name="DllOpenJPEG" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
CFG=DllOpenJPEG - Win32 Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "DllOpenJPEG.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "DllOpenJPEG.mak" CFG="DllOpenJPEG - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "DllOpenJPEG - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE "DllOpenJPEG - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
MTL=midl.exe
RSC=rc.exe
!IF "$(CFG)" == "DllOpenJPEG - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release"
# PROP Intermediate_Dir "Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "DLLOPENJPEG_EXPORTS" /Yu"stdafx.h" /FD /c
# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "OPJ_EXPORTS" /FD /c
# SUBTRACT CPP /YX /Yc /Yu
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x40c /d "NDEBUG"
# ADD RSC /l 0x40c /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"Release/OpenJPEG.dll"
# Begin Special Build Tool
SOURCE="$(InputPath)"
PostBuild_Cmds=if not exist dist mkdir dist copy libopenjpeg\openjpeg.h dist copy Release\OpenJPEG.dll dist copy Release\OpenJPEG.lib dist
# End Special Build Tool
!ELSEIF "$(CFG)" == "DllOpenJPEG - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "DLLOPENJPEG_EXPORTS" /Yu"stdafx.h" /FD /GZ /c
# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "OPJ_EXPORTS" /FD /GZ /c
# SUBTRACT CPP /YX /Yc /Yu
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x40c /d "_DEBUG"
# ADD RSC /l 0x40c /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"Debug/OpenJPEGd.dll" /pdbtype:sept
# Begin Special Build Tool
SOURCE="$(InputPath)"
PostBuild_Cmds=if not exist dist mkdir dist copy libopenjpeg\openjpeg.h dist copy Debug\OpenJPEGd.dll dist copy Debug\OpenJPEGd.lib dist
# End Special Build Tool
!ENDIF
# Begin Target
# Name "DllOpenJPEG - Win32 Release"
# Name "DllOpenJPEG - Win32 Debug"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=.\libopenjpeg\bio.c
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\cio.c
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\dwt.c
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\event.c
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\image.c
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\j2k.c
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\j2k_lib.c
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\jp2.c
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\jpt.c
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\mct.c
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\mqc.c
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\openjpeg.c
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\pi.c
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\raw.c
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\t1.c
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\t2.c
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\tcd.c
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\tgt.c
# End Source File
# End Group
# Begin Group "Header Files"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# Begin Source File
SOURCE=.\libopenjpeg\bio.h
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\cio.h
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\dwt.h
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\event.h
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\fix.h
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\image.h
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\int.h
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\j2k.h
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\j2k_lib.h
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\jp2.h
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\jpt.h
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\mct.h
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\mqc.h
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\openjpeg.h
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\opj_includes.h
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\pi.h
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\raw.h
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\t1.h
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\t2.h
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\tcd.h
# End Source File
# Begin Source File
SOURCE=.\libopenjpeg\tgt.h
# End Source File
# End Group
# Begin Group "Resource Files"
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# Begin Source File
SOURCE=.\OpenJPEG.rc
# End Source File
# End Group
# End Target
# End Project

21
jp3d/DllJp3dVM.sln Executable file
View File

@@ -0,0 +1,21 @@
Microsoft Visual Studio Solution File, Format Version 8.00
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DllOpenJPEG", "DllJp3dVM.vcproj", "{790A6CE5-CE92-4A59-ADF7-54A92760BD6C}"
ProjectSection(ProjectDependencies) = postProject
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfiguration) = preSolution
Debug = Debug
Release = Release
EndGlobalSection
GlobalSection(ProjectConfiguration) = postSolution
{790A6CE5-CE92-4A59-ADF7-54A92760BD6C}.Debug.ActiveCfg = Debug|Win32
{790A6CE5-CE92-4A59-ADF7-54A92760BD6C}.Debug.Build.0 = Debug|Win32
{790A6CE5-CE92-4A59-ADF7-54A92760BD6C}.Release.ActiveCfg = Release|Win32
{790A6CE5-CE92-4A59-ADF7-54A92760BD6C}.Release.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
EndGlobalSection
GlobalSection(ExtensibilityAddIns) = postSolution
EndGlobalSection
EndGlobal

278
jp3d/DllJp3dVM.vcproj Executable file
View File

@@ -0,0 +1,278 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="7.10"
Name="DllOpenJP3D"
ProjectGUID="{790A6CE5-CE92-4A59-ADF7-54A92760BD6C}"
SccProjectName=""
SccLocalPath="">
<Platforms>
<Platform
Name="Win32"/>
</Platforms>
<Configurations>
<Configuration
Name="Release|Win32"
OutputDirectory=".\Release"
IntermediateDirectory=".\Release"
ConfigurationType="2"
UseOfMFC="0"
ATLMinimizesCRunTimeLibraryUsage="FALSE"
CharacterSet="2">
<Tool
Name="VCCLCompilerTool"
Optimization="2"
InlineFunctionExpansion="1"
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;OPJ_EXPORTS"
StringPooling="TRUE"
RuntimeLibrary="0"
EnableFunctionLevelLinking="TRUE"
PrecompiledHeaderFile=".\Release/DllOpenJPEG.pch"
AssemblerListingLocation=".\Release/"
ObjectFile=".\Release/"
ProgramDataBaseFileName=".\Release/"
WarningLevel="3"
SuppressStartupBanner="TRUE"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
OutputFile="Release/OpenJP3D.dll"
LinkIncremental="1"
SuppressStartupBanner="TRUE"
ProgramDatabaseFile=".\Release/OpenJP3D.pdb"
ImportLibrary=".\Release/OpenJP3D.lib"
TargetMachine="1"/>
<Tool
Name="VCMIDLTool"
PreprocessorDefinitions="NDEBUG"
MkTypLibCompatible="TRUE"
SuppressStartupBanner="TRUE"
TargetEnvironment="1"
TypeLibraryName=".\Release/DllOpenJPEG.tlb"
HeaderFileName=""/>
<Tool
Name="VCPostBuildEventTool"
CommandLine="if not exist bin mkdir bin
copy libjp3dvm\openjpeg.h bin
copy Release\OpenJP3D.dll bin
copy Release\OpenJP3D.lib bin
"/>
<Tool
Name="VCPreBuildEventTool"/>
<Tool
Name="VCPreLinkEventTool"/>
<Tool
Name="VCResourceCompilerTool"
PreprocessorDefinitions="NDEBUG"
Culture="1036"/>
<Tool
Name="VCWebServiceProxyGeneratorTool"/>
<Tool
Name="VCXMLDataGeneratorTool"/>
<Tool
Name="VCWebDeploymentTool"/>
<Tool
Name="VCManagedWrapperGeneratorTool"/>
<Tool
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
</Configuration>
<Configuration
Name="Debug|Win32"
OutputDirectory=".\Debug"
IntermediateDirectory=".\Debug"
ConfigurationType="2"
UseOfMFC="0"
ATLMinimizesCRunTimeLibraryUsage="FALSE"
CharacterSet="2">
<Tool
Name="VCCLCompilerTool"
Optimization="0"
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;OPJ_EXPORTS"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
PrecompiledHeaderFile=".\Debug/DllOpenJPEG.pch"
AssemblerListingLocation=".\Debug/"
ObjectFile=".\Debug/"
ProgramDataBaseFileName=".\Debug/"
WarningLevel="3"
SuppressStartupBanner="TRUE"
DebugInformationFormat="4"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
OutputFile="Debug/OpenJP3D.dll"
LinkIncremental="1"
SuppressStartupBanner="TRUE"
GenerateDebugInformation="TRUE"
ProgramDatabaseFile=".\Debug/OpenJP3D.pdb"
ImportLibrary=".\Debug/OpenJP3D.lib"
TargetMachine="1"/>
<Tool
Name="VCMIDLTool"
PreprocessorDefinitions="_DEBUG"
MkTypLibCompatible="TRUE"
SuppressStartupBanner="TRUE"
TargetEnvironment="1"
TypeLibraryName=".\Debug/DllOpenJPEG.tlb"
HeaderFileName=""/>
<Tool
Name="VCPostBuildEventTool"
CommandLine="if not exist bin mkdir bin
copy libjp3dvm\openjpeg.h bin
copy Debug\OpenJP3D.dll bin
"/>
<Tool
Name="VCPreBuildEventTool"/>
<Tool
Name="VCPreLinkEventTool"/>
<Tool
Name="VCResourceCompilerTool"
PreprocessorDefinitions="_DEBUG"
Culture="1034"/>
<Tool
Name="VCWebServiceProxyGeneratorTool"/>
<Tool
Name="VCXMLDataGeneratorTool"/>
<Tool
Name="VCWebDeploymentTool"/>
<Tool
Name="VCManagedWrapperGeneratorTool"/>
<Tool
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<Filter
Name="Source Files"
Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat">
<File
RelativePath=".\libjp3dvm\bio.c">
</File>
<File
RelativePath=".\libjp3dvm\cio.c">
</File>
<File
RelativePath=".\libjp3dvm\dwt.c">
</File>
<File
RelativePath=".\libjp3dvm\event.c">
</File>
<File
RelativePath=".\libjp3dvm\jp3d.c">
</File>
<File
RelativePath=".\libjp3dvm\jp3d_lib.c">
</File>
<File
RelativePath=".\libjp3dvm\mct.c">
</File>
<File
RelativePath=".\libjp3dvm\mqc.c">
</File>
<File
RelativePath=".\libjp3dvm\openjpeg.c">
</File>
<File
RelativePath=".\libjp3dvm\pi.c">
</File>
<File
RelativePath=".\libjp3dvm\raw.c">
</File>
<File
RelativePath=".\libjp3dvm\t1.c">
</File>
<File
RelativePath=".\libjp3dvm\t1_3d.c">
</File>
<File
RelativePath=".\libjp3dvm\t2.c">
</File>
<File
RelativePath=".\libjp3dvm\tcd.c">
</File>
<File
RelativePath=".\libjp3dvm\tgt.c">
</File>
<File
RelativePath=".\libjp3dvm\volume.c">
</File>
</Filter>
<Filter
Name="Header Files"
Filter="h;hpp;hxx;hm;inl">
<File
RelativePath=".\libjp3dvm\bio.h">
</File>
<File
RelativePath=".\libjp3dvm\cio.h">
</File>
<File
RelativePath=".\libjp3dvm\dirent.h">
</File>
<File
RelativePath=".\libjp3dvm\dwt.h">
</File>
<File
RelativePath=".\libjp3dvm\event.h">
</File>
<File
RelativePath=".\libjp3dvm\fix.h">
</File>
<File
RelativePath=".\libjp3dvm\int.h">
</File>
<File
RelativePath=".\libjp3dvm\jp3d.h">
</File>
<File
RelativePath=".\libjp3dvm\jp3d_lib.h">
</File>
<File
RelativePath=".\libjp3dvm\mct.h">
</File>
<File
RelativePath=".\libjp3dvm\mqc.h">
</File>
<File
RelativePath=".\libjp3dvm\openjpeg.h">
</File>
<File
RelativePath=".\libjp3dvm\opj_includes.h">
</File>
<File
RelativePath=".\libjp3dvm\pi.h">
</File>
<File
RelativePath=".\libjp3dvm\raw.h">
</File>
<File
RelativePath=".\libjp3dvm\t1.h">
</File>
<File
RelativePath=".\libjp3dvm\t1_3d.h">
</File>
<File
RelativePath=".\libjp3dvm\t2.h">
</File>
<File
RelativePath=".\libjp3dvm\tcd.h">
</File>
<File
RelativePath=".\libjp3dvm\tgt.h">
</File>
<File
RelativePath=".\libjp3dvm\volume.h">
</File>
</Filter>
<Filter
Name="Resource Files"
Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe">
</Filter>
</Files>
<Globals>
</Globals>
</VisualStudioProject>

30
jp3d/LICENSE.txt Executable file
View File

@@ -0,0 +1,30 @@
/*
* Copyright (c) 2001-2003, David Janssens
* Copyright (c) 2002-2003, Yannick Verschueren
* Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
* Copyright (c) 2005, Herv<72> Drolon, FreeImage Team
* Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
* Copyright (c) 2006, M<>nica D<>ez, Image Processing Laboratory (LPI) - University of Valladolid, Spain
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/

21
jp3d/LibJp3dVM.sln Executable file
View File

@@ -0,0 +1,21 @@
Microsoft Visual Studio Solution File, Format Version 8.00
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LibJp3dVM", "LibJp3dVM.vcproj", "{6F3FB035-8F4E-4794-B091-0F0A20223BE7}"
ProjectSection(ProjectDependencies) = postProject
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfiguration) = preSolution
Debug = Debug
Release = Release
EndGlobalSection
GlobalSection(ProjectConfiguration) = postSolution
{6F3FB035-8F4E-4794-B091-0F0A20223BE7}.Debug.ActiveCfg = Debug|Win32
{6F3FB035-8F4E-4794-B091-0F0A20223BE7}.Debug.Build.0 = Debug|Win32
{6F3FB035-8F4E-4794-B091-0F0A20223BE7}.Release.ActiveCfg = Release|Win32
{6F3FB035-8F4E-4794-B091-0F0A20223BE7}.Release.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
EndGlobalSection
GlobalSection(ExtensibilityAddIns) = postSolution
EndGlobalSection
EndGlobal

249
jp3d/LibJp3dVM.vcproj Executable file
View File

@@ -0,0 +1,249 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="7.10"
Name="LibJp3dVM"
ProjectGUID="{6F3FB035-8F4E-4794-B091-0F0A20223BE7}"
SccProjectName=""
SccLocalPath="">
<Platforms>
<Platform
Name="Win32"/>
</Platforms>
<Configurations>
<Configuration
Name="Release|Win32"
OutputDirectory=".\Release"
IntermediateDirectory=".\Release"
ConfigurationType="4"
UseOfMFC="0"
ATLMinimizesCRunTimeLibraryUsage="FALSE"
CharacterSet="2">
<Tool
Name="VCCLCompilerTool"
Optimization="0"
InlineFunctionExpansion="0"
PreprocessorDefinitions="WIN32;NDEBUG;_LIB;OPJ_STATIC"
StringPooling="TRUE"
BasicRuntimeChecks="3"
RuntimeLibrary="0"
EnableFunctionLevelLinking="TRUE"
PrecompiledHeaderFile=".\Release/LibJp3dVM.pch"
AssemblerListingLocation=".\Release/"
ObjectFile=".\Release/"
ProgramDataBaseFileName=".\Release/"
WarningLevel="3"
SuppressStartupBanner="TRUE"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCLibrarianTool"
OutputFile=".\Release\LibJp3dVM.lib"
SuppressStartupBanner="TRUE"/>
<Tool
Name="VCMIDLTool"/>
<Tool
Name="VCPostBuildEventTool"
CommandLine="if not exist bin mkdir bin
copy Release\LibJp3dVM.lib bin
copy libjp3dvm\openjpeg.h bin
"/>
<Tool
Name="VCPreBuildEventTool"/>
<Tool
Name="VCPreLinkEventTool"/>
<Tool
Name="VCResourceCompilerTool"
PreprocessorDefinitions="NDEBUG"
Culture="1036"/>
<Tool
Name="VCWebServiceProxyGeneratorTool"/>
<Tool
Name="VCXMLDataGeneratorTool"/>
<Tool
Name="VCManagedWrapperGeneratorTool"/>
<Tool
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
</Configuration>
<Configuration
Name="Debug|Win32"
OutputDirectory=".\Debug"
IntermediateDirectory=".\Debug"
ConfigurationType="4"
UseOfMFC="0"
ATLMinimizesCRunTimeLibraryUsage="FALSE"
CharacterSet="2">
<Tool
Name="VCCLCompilerTool"
Optimization="0"
PreprocessorDefinitions="WIN32;_DEBUG;_LIB;OPJ_STATIC"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
PrecompiledHeaderFile=".\Debug/LibJp3dVM.pch"
AssemblerListingLocation=".\Debug/"
ObjectFile=".\Debug/"
ProgramDataBaseFileName=".\Debug/"
WarningLevel="3"
SuppressStartupBanner="TRUE"
DebugInformationFormat="4"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCLibrarianTool"
OutputFile=".\Debug\LibJp3dVM.lib"
SuppressStartupBanner="TRUE"/>
<Tool
Name="VCMIDLTool"/>
<Tool
Name="VCPostBuildEventTool"
CommandLine="if not exist bin mkdir bin
copy Debug\LibJp3dVM.lib bin
copy libjp3dvm\openjpeg.h bin
"/>
<Tool
Name="VCPreBuildEventTool"/>
<Tool
Name="VCPreLinkEventTool"/>
<Tool
Name="VCResourceCompilerTool"
PreprocessorDefinitions="_DEBUG"
Culture="1036"/>
<Tool
Name="VCWebServiceProxyGeneratorTool"/>
<Tool
Name="VCXMLDataGeneratorTool"/>
<Tool
Name="VCManagedWrapperGeneratorTool"/>
<Tool
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<Filter
Name="Source Files"
Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat">
<File
RelativePath=".\libjp3dvm\bio.c">
</File>
<File
RelativePath=".\libjp3dvm\cio.c">
</File>
<File
RelativePath=".\libjp3dvm\dwt.c">
</File>
<File
RelativePath=".\libjp3dvm\event.c">
</File>
<File
RelativePath=".\libjp3dvm\jp3d.c">
</File>
<File
RelativePath=".\libjp3dvm\jp3d_lib.c">
</File>
<File
RelativePath=".\libjp3dvm\mct.c">
</File>
<File
RelativePath=".\libjp3dvm\mqc.c">
</File>
<File
RelativePath=".\libjp3dvm\openjpeg.c">
</File>
<File
RelativePath=".\libjp3dvm\pi.c">
</File>
<File
RelativePath=".\libjp3dvm\raw.c">
</File>
<File
RelativePath=".\libjp3dvm\t1.c">
</File>
<File
RelativePath=".\libjp3dvm\t1_3d.c">
</File>
<File
RelativePath=".\libjp3dvm\t2.c">
</File>
<File
RelativePath=".\libjp3dvm\tcd.c">
</File>
<File
RelativePath=".\libjp3dvm\tgt.c">
</File>
<File
RelativePath=".\libjp3dvm\volume.c">
</File>
</Filter>
<Filter
Name="Header Files"
Filter="h;hpp;hxx;hm;inl">
<File
RelativePath=".\libjp3dvm\bio.h">
</File>
<File
RelativePath=".\libjp3dvm\cio.h">
</File>
<File
RelativePath=".\libjp3dvm\dirent.h">
</File>
<File
RelativePath=".\libjp3dvm\dwt.h">
</File>
<File
RelativePath=".\libjp3dvm\event.h">
</File>
<File
RelativePath=".\libjp3dvm\fix.h">
</File>
<File
RelativePath=".\libjp3dvm\int.h">
</File>
<File
RelativePath=".\libjp3dvm\jp3d.h">
</File>
<File
RelativePath=".\libjp3dvm\jp3d_lib.h">
</File>
<File
RelativePath=".\libjp3dvm\mct.h">
</File>
<File
RelativePath=".\libjp3dvm\mqc.h">
</File>
<File
RelativePath=".\libjp3dvm\openjpeg.h">
</File>
<File
RelativePath=".\libjp3dvm\opj_includes.h">
</File>
<File
RelativePath=".\libjp3dvm\pi.h">
</File>
<File
RelativePath=".\libjp3dvm\raw.h">
</File>
<File
RelativePath=".\libjp3dvm\t1.h">
</File>
<File
RelativePath=".\libjp3dvm\t1_3d.h">
</File>
<File
RelativePath=".\libjp3dvm\t2.h">
</File>
<File
RelativePath=".\libjp3dvm\tcd.h">
</File>
<File
RelativePath=".\libjp3dvm\tgt.h">
</File>
<File
RelativePath=".\libjp3dvm\volume.h">
</File>
</Filter>
</Files>
<Globals>
</Globals>
</VisualStudioProject>

72
jp3d/Makefile Executable file
View File

@@ -0,0 +1,72 @@
# Linux makefile for OpenJPEG
VER_MAJOR = 1
VER_MINOR = 0.0
SRCS = ./libopenjpeg/bio.c ./libopenjpeg/cio.c ./libopenjpeg/dwt.c ./libopenjpeg/event.c ./libopenjpeg/image.c ./libopenjpeg/j2k.c ./libopenjpeg/j2k_lib.c ./libopenjpeg/jp2.c ./libopenjpeg/jpt.c ./libopenjpeg/mct.c ./libopenjpeg/mqc.c ./libopenjpeg/openjpeg.c ./libopenjpeg/pi.c ./libopenjpeg/raw.c ./libopenjpeg/t1.c ./libopenjpeg/t2.c ./libopenjpeg/tcd.c ./libopenjpeg/tgt.c
INCLS = ./libopenjpeg/bio.h ./libopenjpeg/cio.h ./libopenjpeg/dwt.h ./libopenjpeg/event.h ./libopenjpeg/fix.h ./libopenjpeg/image.h ./libopenjpeg/int.h ./libopenjpeg/j2k.h ./libopenjpeg/j2k_lib.h ./libopenjpeg/jp2.h ./libopenjpeg/jpt.h ./libopenjpeg/mct.h ./libopenjpeg/mqc.h ./libopenjpeg/openjpeg.h ./libopenjpeg/pi.h ./libopenjpeg/raw.h ./libopenjpeg/t1.h ./libopenjpeg/t2.h ./libopenjpeg/tcd.h ./libopenjpeg/tgt.h ./libopenjpeg/opj_includes.h
INCLUDE = -Ilibopenjpeg
# General configuration variables:
CC = gcc
AR = ar
INSTALLDIR = /usr/lib
# Converts cr/lf to just lf
DOS2UNIX = dos2unix
COMPILERFLAGS = -O3
LIBRARIES = -lstdc++
MODULES = $(SRCS:.c=.o)
CFLAGS = $(COMPILERFLAGS) $(INCLUDE)
TARGET = openjpeg
STATICLIB = lib$(TARGET).a
SHAREDLIB = lib$(TARGET)-$(VER_MAJOR).$(VER_MINOR).so
LIBNAME = lib$(TARGET).so.$(VER_MAJOR)
default: all
all: dist
dist: OpenJPEG
mkdir dist
cp *.a dist/
cp *.so dist/
cp libopenjpeg/openjpeg.h dist/
dos2unix:
@$(DOS2UNIX) $(SRCS) $(INCLS)
OpenJPEG: $(STATICLIB) $(SHAREDLIB)
.c.o:
$(CC) $(CFLAGS) -c $< -o $@
$(STATICLIB): $(MODULES)
$(AR) r $@ $(MODULES)
$(SHAREDLIB): $(MODULES)
$(CC) -s -shared -Wl,-soname,$(LIBNAME) -o $@ $(MODULES) $(LIBRARIES)
install:
install -m 644 -o root -g root $(STATICLIB) $(INSTALLDIR)
install -m 755 -o root -g root $(SHAREDLIB) $(INSTALLDIR)
ln -sf $(SHAREDLIB) $(INSTALLDIR)/$(LIBNAME)
ldconfig
clean:
rm -rf core dist/ u2dtmp* $(MODULES) $(STATICLIB) $(SHAREDLIB) $(LIBNAME)
osx:
make -f Makefile.osx
osxinstall:
make -f Makefile.osx install
osxclean:
make -f Makefile.osx clean

285
jp3d/README.txt Executable file
View File

@@ -0,0 +1,285 @@
===============================================================================
JPEG2000 Part 10 (ISO/IEC 15444-10 JP3D) Verification Model
Version 1.1
===============================================================================
1. Scope
================
This document describes the installation and the use of the JP3D VM decoder and encoder under several operating systems (Linux, Unix, Windows, ...). Version 1.1 contains a complete JPEG 2000 Part 10 encoder, as well as a decoder.
The supported functionalities are compliant with the JPEG2000 part 10 algorithm as described in the WD 6.0.
The provided encoder and the decoder are compatible also with the International standard IS 15444-1 (core coding system).
This implementation has been developped from OpenJPEG implementation of JPEG2000 standard, and for this reason it is written in C language.
If you find some bugs or if you have problems using the encoder/decoder, please send an e-mail to jp3d@lpi.tel.uva.es
2. Installing the code
======================================================
- After decompressing the zip file provided, you should find
at least the following files in the created 'jp3d_vm' directory:
* libjp3dvm - This directory contains all library related code
* codec - This directory contains all codec related code
* tcltk - This directory contains the API scripts
* README - The file you are reading
* LICENCE - Copyright statement of the JP3D VM software
2.1. Compiling the source code in Windows
-------------------------------------------
This version has been compiled with Visual Studio 2003 using
the projects included in the distribution:
* LibJp3dVM.vcproj - Creates the library with all the JP3D functionalities
* jp3d_vm_enc.vcproj - Test encoder
* jp3d_vm_dec.vcproj - Test decoder
2.2. Compiling the source code in Unix-like systems
-------------------------------------------
Library compilation
------------------------
This version of the library has been tested under the following OS:
- Fedora Core
The installation process is as simple as this :
1) Enter the 'jp3d_vm' directory
2) Build the distribution :
make
make install
3) Clean all files produced during the build process
make clean
Codec compilation
------------------------
Once you've built the library, you should compile the JP3D codec.
1) Go to the 'codec' directory
2) Build the encoder and decoder programs:
gcc convert.c volume_to_jp3d.c -o jp3d_vm_enc -I ../libjp3dvm/ -lm -ljp3dvm
gcc convert.c jp3d_to_volume.c -o jp3d_vm_dec -I ../libjp3dvm/ -lm -ljp3dvm
Note: You should add '-L ../libjp3dvm/' to those lines if you
did not use the 'install' target (and the 'clean' target neither...).
3. Running the JP3D VM
====================================================
3.1. JP3D ENCODER
====================================================
Required arguments
------------------------
* Input file(s): -i Involume [*.bin, *.pgx]
Specifies the volume to compress. Accepted formats are *.BIN (raw binary data) or *.PGX files.
Both formats need some particular settings:
a) BIN format. As it has no header, volume characteristics will be obtained from a .IMG file. Its location will be specified through the following argument:
-m Involumeinfo.IMG
This file shall have the following structure, with the appropiate value in each case (bit per voxel, color map, dimensions in X,Y,Z):
o Bpp %d
o Color Map %d
o Dimensions %d %d %d
b) PGX format. Program will consider it as a volume slice. In order to denote a volume through a sequence of slices, you can define the input filename with the common pattern of the set of PGX files followed by a dash (as a wildcard character for the sequence numbers).
* Output file: -o Outfile [*.jp3d, *j2k]
Specifies the name of the file where the codestream will be saved.
Part 1 compliant codestream will be created when an outfile has .j2k format.
Options
--------
* Rate values : -r 20,10,5
This option offers the possibility to define the compression rate to apply.
Each value is a factor of compression (i.e. 20 : 1) and will generate a different quality layer. A lossless compression will be signified by the value 1.
NOTE : The order used to define the different levels of compression is important and must be from left to right in descending order.
* Quality values : -q 30,35,40
This option offers the possibility to define the quality level to achieve. Each value is a psnr, to be given in dB, and represents a quality layer.
NOTE : The order used to define the different psnr-values is important and must be from left to right in ascending order.
* Number of resolutions : -n 3,3,2
This option offers the possibility to define the number of resolution levels computed for each dimension of the volume through the discret wavelet transform (DWT). Resolution in axial dimension can have a different value than in horizontal and vertical cases, but must be lower.
DEFAULT VALUE : 3,3,1
* Switch modes : -M 3
This option offers the possibility to use a mode switch during the encoding process:
o BYPASS(LAZY) [1]
o RESET [2]
o RESTART(TERMALL) [4]
o VSC [8]
o ERTERM(SEGTERM) [16]
o SEGMARK(SEGSYM) [32]
o 3D_CONTEXT [64]
For several mode switch just sum corresponding values: i.e. -M 38 => RESTART(4) + RESET(2) + SEGMARK(32)
DEFAULT VALUE: 0
* Progression order : -p LRCP
This option offers the possibility to specify the progression order. Possible progression orders are : LRCP, RLCP, RPCL, PCRL and CPRL.
DEFAULT VALUE: LRCP.
* Code-block size : -b 32,32,32
This option offers the possibility to define the size of the code-block. The dimension must respect the constraint defined in the JPEG-2000 standard. The maximum value autorized is 64x64x64.
DEFAULT VALUE: 64,64,64
* Precinct size : -c [128,128,128],[128,128,128],...
This option offers the possibility to define the size of the precincts at each resolution. Multiple records may be supplied, in which case the first record refers to the highest resolution level and subsequent records to lower resolution levels. The last specified record is right-shifted for each remaining lower resolution levels.
NOTE : specified values must be power of 2.
DEFAULT VALUE: 2^15 x 2^15 x 2^15
* Tile size : -t 512,512,512
This option offers the possibility to divide the volume in several tiles. The three values define the width, the heigth and the depth of the tile respectivily.
DEFAULT VALUE: Volume dimensions (one tile)
* Subsampling factor : -s 2,2,2
This option offers the possibility to apply a subsampling factor for X, Y and Z axis. Value higher than 2 can be a source of error !
DEFAULT VALUE: 1,1,1
* SOP marker before each packet : -SOP
This option offers the possibility to add a specific marker before each packet. It is the marker SOP (Start of packet). If the option is not used no SOP marker will be added.
* EPH marker after each packet header : -EPH
This option offers the possibility to add a specific marker at the head of each packet header. It is the marker EPH (End of packet Header). If the option is not used no EPH marker will be added.
* Offset of the volume origin : -d 150,300,10
This option offers the possibility to move the origine of the volume in X, Y and/or Z axis. The division in tile could be modified as the anchor point for tiling will be different than the volume origin.
NOTE : the offset of the volume can not be higher than the tile dimension if the tile option is used.
DEFAULT VALUE: 0,0,0
* Offset of the tile origin : -T 100,75,5
This option offers the possibility to move the anchor point of the volume in X, Y and/or Z axis.
NOTE : the tile anchor point can not be on the volume area.
DEFAULT VALUE: 0,0,0
* Display the help menu : -help
This option displays on screen the content of this page
Additional options
----------------------------------
* Encoding information file: -x index_name.idx
This option offers the possibility to create a text file with some structured information generated through the encoding. The name of the file must be specified, with .idx extension. The information structure is the following:
o Volume size:
+ VolW + VolH + VolD
o Progression Order:
+ Prog
o Tile size:
+ TileW + TileH + TileD
o Number of components:
+ NumComp
o Number of layers:
+ NumLayer
o Number of decompositions (=(number of resolutions - 1)):
+ NumDWTx + NumDWTy + NumDWTz
o Precinct size:
+ [Precinct_width(NumDWT),Precinct_height(NumDWT),Precinct_depth(NumDWT)]
+ [Precinct_width(NumDWT-1),Precinct_height(NumDWT-1),Precinct_depth(NumDWT-1)]
+ ...
+ [Precinct_width(0),Precinct_height(0),Precinct_depth(0)]
o Main Header end position:
+ MH_EndPos
o Codestream size:
+ CSSize
o Tile 0 information:
+ TileNum (0)
+ StartPos
+ TileHeader_EndPos
+ EndPos
+ TotalDisto (this is the sum of the distortion reductions brought by each packet belonging to this tile)
+ NumPix (this is the number of pixels in the tile)
+ MaxMSE (=TotalDisto/NumPix)
o Tile1 information:
+ TileNum (1)
+ ...
o ...
o Tile N information:
+ TileNum (N)
+ ...
o Packet 0 from Tile 0 information:
+ PackNum (0)
+ TileNum (0)
+ LayerNum
+ ResNum
+ CompNum
+ PrecNum
+ StartPos
+ EndPos
+ Disto (distortion reduction brought by this packet)
o Packet 1 from Tile 0 information:
+ PackNum (1)
+ ...
o ...
o Packet M from Tile 0 information
o Packet 0 from Tile 1 information
o ...
o Packet M from Tile N information
o Maximum distortion reduction on the whole volume:
+ MaxDisto
o Total distortion on the whole volume (sum of the distortion reductions from all packets in the volume):
+ TotalDisto
3.2. JP3D DECODER
====================================================
Required arguments
------------------------
* Infile : -i compressed file
Currently accepts JP3D and J2K-files. The file type is identified based on its suffix (*.jp3d, *.j2k).
* Outfile(s) : -o decompressed file(s)
Currently accepts BIN-files and PGX-files. Binary data is written to the file (not ascii).
If a BIN-file is defined, decoder will create automatically the volume characteristic file appending a .IMG extension to the provided output filename.
If a PGX-file is defined, decoder will understand this as a file pattern, appending corresponding indice from 0 to the number of decoded slices.
NOTE : There will be as many output files as there are components: an indice starting from 0 will then be appended to the output filename, just before the extension.
Options available
------------------------
* Reduce factor : -r 1,1,0
Set the number of highest resolution levels to be discarded in each dimension. The decoded volume size is effectively divided by 2 to the power of the number of discarded levels.
NOTE : The reduce factor is limited by the smallest total number of decomposition levels among tiles.
* Layer number : -l 2
Set the maximum number of quality layers to decode. If there are less quality layers than the specified number, all the quality layers are decoded.
* Performance comparisons : -O original-file
This option offers the possibility to compute some quality results for the decompressed volume, like the PSNR value achieved or the global SSIM value. Needs the original file in order to compare with the new one.
NOTE: Only valid when -r option is 0,0,0 (both original and decompressed volumes have same resolutions)
NOTE: If original file is .BIN file, the volume characteristics file shall be defined with the -m option.
(i.e. -O original-BIN-file -m original-IMG-file)
* Byte order (Big-endian / Little-endian) : -BE
This option offers the possibility to save the decompressed volume with a predefined byte order.
DEFAULT VALUE: Little-endian
* Display the help menu : -help
This option displays on screen the content of this page

997
jp3d/codec/convert.c Executable file
View File

@@ -0,0 +1,997 @@
/*
* Copyright (c) 2001-2003, David Janssens
* Copyright (c) 2002-2003, Yannick Verschueren
* Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
* Copyright (c) 2005, Herv<72> Drolon, FreeImage Team
* Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
* Copyright (c) 2006, M<>nica D<>ez Garc<72>a, Image Processing Laboratory, University of Valladolid, Spain
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "openjpeg.h"
#ifdef WIN32
#include "dirent.h"
#else
#include <dirent.h>
#endif /* WIN32 */
void dump_volume(FILE *fd, opj_volume_t * vol) {
int compno;
fprintf(fd, "volume {\n");
fprintf(fd, " x0=%d, y0=%d, z0=%d, x1=%d, y1=%d, z1=%d\n", vol->x0, vol->y0, vol->z0,vol->x1, vol->y1, vol->z1);
fprintf(fd, " numcomps=%d\n", vol->numcomps);
for (compno = 0; compno < vol->numcomps; compno++) {
opj_volume_comp_t *comp = &vol->comps[compno];
fprintf(fd, " comp %d {\n", compno);
fprintf(fd, " dx=%d, dy=%d, dz=%d\n", comp->dx, comp->dy, comp->dz);
fprintf(fd, " prec=%d\n", comp->prec);
fprintf(fd, " sgnd=%d\n", comp->sgnd);
fprintf(fd, " }\n");
}
fprintf(fd, "}\n");
}
/*
* Get logarithm of an integer and round downwards.
*
* log2(a)
*/
static int int_floorlog2(int a) {
int l;
for (l = 0; a > 1; l++) {
a >>= 1;
}
return l;
}
/*
* Divide an integer by a power of 2 and round upwards.
*
* a divided by 2^b
*/
static int int_ceildivpow2(int a, int b) {
return (a + (1 << b) - 1) >> b;
}
/*
* Divide an integer and round upwards.
*
* a divided by b
*/
static int int_ceildiv(int a, int b) {
return (a + b - 1) / b;
}
/* -->> -->> -->> -->>
PGX IMAGE FORMAT
<<-- <<-- <<-- <<-- */
unsigned char readuchar(FILE * f)
{
unsigned char c1;
fread(&c1, 1, 1, f);
return c1;
}
unsigned short readushort(FILE * f, int bigendian)
{
unsigned char c1, c2;
fread(&c1, 1, 1, f);
fread(&c2, 1, 1, f);
if (bigendian)
return (c1 << 8) + c2;
else
return (c2 << 8) + c1;
}
unsigned int readuint(FILE * f, int bigendian)
{
unsigned char c1, c2, c3, c4;
fread(&c1, 1, 1, f);
fread(&c2, 1, 1, f);
fread(&c3, 1, 1, f);
fread(&c4, 1, 1, f);
if (bigendian)
return (c1 << 24) + (c2 << 16) + (c3 << 8) + c4;
else
return (c4 << 24) + (c3 << 16) + (c2 << 8) + c1;
}
/*****************************************/
static unsigned short ShortSwap(unsigned short v)
{
unsigned char c1, c2;
c1 = v & 0xff;
c2 = (v >> 8) & 0xff;
return (c1 << 8) + c2;
}
static unsigned int LongSwap (unsigned int i)
{
unsigned char b1, b2, b3, b4;
b1 = i & 255;
b2 = ( i >> 8 ) & 255;
b3 = ( i>>16 ) & 255;
b4 = ( i>>24 ) & 255;
return ((int)b1 << 24) + ((int)b2 << 16) + ((int)b3 << 8) + b4;
}
/*****************************************/
opj_volume_t* pgxtovolume(char *relpath, opj_cparameters_t *parameters) {
FILE *f = NULL;
int w, h, prec;
unsigned long offset;
int i, s, numcomps, maxvalue, sliceno, slicepos, maxslice = 0;
OPJ_COLOR_SPACE color_space;
opj_volume_cmptparm_t cmptparm; // maximum of 1 component
opj_volume_t * volume = NULL;
char endian1,endian2,sign;
char signtmp[32];
char temp[32];
opj_volume_comp_t *comp = NULL;
DIR *dirp;
struct dirent *direntp;
char *tmp = NULL, *tmp2 = NULL,
*point = NULL, *pgx = NULL;
char tmpdirpath[MAX_PATH];
char dirpath[MAX_PATH];
char pattern[MAX_PATH];
char pgxfiles[MAX_SLICES][MAX_PATH];
int pgxslicepos[MAX_SLICES];
char tmpno[3];
numcomps = 1;
color_space = CLRSPC_GRAY;
sliceno = 0;
maxvalue = 0;
memset(pgxfiles, 0, MAX_SLICES * MAX_PATH * sizeof(char));
memset(&cmptparm, 0, sizeof(opj_volume_cmptparm_t));
/* Separaci<63>n del caso de un <20>nico slice frente al de muchos */
if ((tmp = strrchr(relpath,'-')) == NULL){
//fprintf(stdout,"[INFO] A volume of only one slice....\n");
sliceno = 1;
maxslice = 1;
strcpy(pgxfiles[0],relpath);
} else {
//Fetch only the path
strcpy(tmpdirpath,relpath);
if ((tmp = strrchr(tmpdirpath,'/')) != NULL){
tmp++; *tmp='\0';
strcpy(dirpath,tmpdirpath);
} else {
strcpy(dirpath,"./");
}
//Fetch the pattern of the volume slices
if ((tmp = strrchr (relpath,'/')) != NULL)
tmp++;
else
tmp = relpath;
if ((tmp2 = strrchr(tmp,'-')) != NULL)
*tmp2='\0';
else{
fprintf(stdout, "[ERROR] tmp2 ha dado null. no ha encontrado el * %s %s",tmp,relpath);
return NULL;
}
strcpy(pattern,tmp);
dirp = opendir( dirpath );
if (dirp == NULL){
fprintf(stdout, "[ERROR] Infile must be a .pgx file or a directory that contain pgx files");
return NULL;
}
/*Read all .pgx files of directory */
while ( (direntp = readdir( dirp )) != NULL )
{
/* Found a directory, but ignore . and .. */
if(strcmp(".",direntp->d_name) == 0 || strcmp("..",direntp->d_name) == 0)
continue;
if( ((pgx = strstr(direntp->d_name,pattern)) != NULL) && ((tmp2 = strstr(direntp->d_name,".pgx")) != NULL) ){
strcpy(tmp,dirpath);
tmp = strcat(tmp,direntp->d_name);
//Obtenemos el index de la secuencia de slices
if ((tmp2 = strpbrk (direntp->d_name, "0123456789")) == NULL)
continue;
i = 0;
while (tmp2 != NULL) {
tmpno[i++] = *tmp2;
point = tmp2;
tmp2 = strpbrk (tmp2+1,"0123456789");
}tmpno[i]='\0';
//Comprobamos que no estamos leyendo algo raro como pattern.jp3d
if ((point = strpbrk (point,".")) == NULL){
break;
}
//Slicepos --> index de slice; Sliceno --> no de slices hasta el momento
slicepos = atoi(tmpno);
pgxslicepos[sliceno] = slicepos - 1;
sliceno++;
if (slicepos>maxslice)
maxslice = slicepos;
//Colocamos el slices en su posicion correspondiente
strcpy(pgxfiles[slicepos-1],tmp);
}
}
}/* else if pattern*.pgx */
if (!sliceno) {
fprintf(stdout,"[ERROR] No slices with this pattern founded !! Please check input volume name\n");
return NULL;
}
/*if ( maxslice != sliceno) {
fprintf(stdout,"[ERROR] Slices are not sequentially numbered !! Please rename them accordingly\n");
return NULL;
}*/
for (s=0;s<sliceno;s++)
{
int pos = maxslice == sliceno ? s: pgxslicepos[s];
f = fopen(pgxfiles[pos], "rb");
if (!f) {
fprintf(stdout, "[ERROR] Failed to open %s for reading !\n", pgxfiles[s]);
return NULL;
}
fprintf(stdout, "[INFO] Loading %s \n",pgxfiles[pos]);
fseek(f, 0, SEEK_SET);
fscanf(f, "PG%[ \t]%c%c%[ \t+-]%d%[ \t]%d%[ \t]%d",temp,&endian1,&endian2,signtmp,&prec,temp,&w,temp,&h);
i=0;
sign='+';
while (signtmp[i]!='\0') {
if (signtmp[i]=='-') sign='-';
i++;
}
fgetc(f);
if (endian1=='M' && endian2=='L') {
cmptparm.bigendian = 1;
} else if (endian2=='M' && endian1=='L') {
cmptparm.bigendian = 0;
} else {
fprintf(stdout, "[ERROR] Bad pgx header, please check input file\n");
return NULL;
}
if (s==0){
/* initialize volume component */
cmptparm.x0 = parameters->volume_offset_x0;
cmptparm.y0 = parameters->volume_offset_y0;
cmptparm.z0 = parameters->volume_offset_z0;
cmptparm.w = !cmptparm.x0 ? (w - 1) * parameters->subsampling_dx + 1 : cmptparm.x0 + (w - 1) * parameters->subsampling_dx + 1;
cmptparm.h = !cmptparm.y0 ? (h - 1) * parameters->subsampling_dy + 1 : cmptparm.y0 + (h - 1) * parameters->subsampling_dy + 1;
cmptparm.l = !cmptparm.z0 ? (sliceno - 1) * parameters->subsampling_dz + 1 : cmptparm.z0 + (sliceno - 1) * parameters->subsampling_dz + 1;
if (sign == '-') {
cmptparm.sgnd = 1;
} else {
cmptparm.sgnd = 0;
}
cmptparm.prec = prec;
cmptparm.bpp = prec;
cmptparm.dcoffset = parameters->dcoffset;
cmptparm.dx = parameters->subsampling_dx;
cmptparm.dy = parameters->subsampling_dy;
cmptparm.dz = parameters->subsampling_dz;
/* create the volume */
volume = opj_volume_create(numcomps, &cmptparm, color_space);
if(!volume) {
fclose(f);
return NULL;
}
/* set volume offset and reference grid */
volume->x0 = cmptparm.x0;
volume->y0 = cmptparm.y0;
volume->z0 = cmptparm.z0;
volume->x1 = cmptparm.w;
volume->y1 = cmptparm.h;
volume->z1 = cmptparm.l;
/* set volume data :only one component, that is a volume*/
comp = &volume->comps[0];
}//if sliceno==1
offset = w * h * s;
for (i = 0; i < w * h; i++) {
int v;
if (comp->prec <= 8) {
if (!comp->sgnd) {
v = readuchar(f);
} else {
v = (char) readuchar(f);
}
} else if (comp->prec <= 16) {
if (!comp->sgnd) {
v = readushort(f, cmptparm.bigendian);
} else {
v = (short) readushort(f, cmptparm.bigendian);
}
} else {
if (!comp->sgnd) {
v = readuint(f, cmptparm.bigendian);
} else {
v = (int) readuint(f, cmptparm.bigendian);
}
}
if (v > maxvalue)
maxvalue = v;
comp->data[i + offset] = v;
}
fclose(f);
} // for s --> sliceno
comp->bpp = int_floorlog2(maxvalue) + 1;
if (sliceno != 1)
closedir( dirp );
//dump_volume(stdout, volume);
return volume;
}
int volumetopgx(opj_volume_t * volume, char *outfile) {
int w, wr, wrr, h, hr, hrr, l, lr, lrr;
int i, j, compno, offset, sliceno;
FILE *fdest = NULL;
for (compno = 0; compno < volume->numcomps; compno++) {
opj_volume_comp_t *comp = &volume->comps[compno];
char name[256];
int nbytes = 0;
char *tmp = outfile;
while (*tmp) {
tmp++;
}
while (*tmp!='.') {
tmp--;
}
*tmp='\0';
for(sliceno = 0; sliceno < volume->z1 - volume->z0; sliceno++) {
if (volume->numcomps > 1) {
sprintf(name, "%s%d-%d.pgx", outfile, sliceno+1, compno);
} else if ((volume->z1 - volume->z0) > 1) {
sprintf(name, "%s%d.pgx", outfile, sliceno+1);
} else {
sprintf(name, "%s.pgx", outfile);
}
fdest = fopen(name, "wb");
if (!fdest) {
fprintf(stdout, "[ERROR] Failed to open %s for writing \n", name);
return 1;
}
fprintf(stdout,"[INFO] Writing in %s (%s)\n",name,volume->comps[0].bigendian ? "Bigendian" : "Little-endian");
w = int_ceildiv(volume->x1 - volume->x0, volume->comps[compno].dx);
wr = volume->comps[compno].w;
wrr = int_ceildivpow2(volume->comps[compno].w, volume->comps[compno].factor[0]);
h = int_ceildiv(volume->y1 - volume->y0, volume->comps[compno].dy);
hr = volume->comps[compno].h;
hrr = int_ceildivpow2(volume->comps[compno].h, volume->comps[compno].factor[1]);
l = int_ceildiv(volume->z1 - volume->z0, volume->comps[compno].dz);
lr = volume->comps[compno].l;
lrr = int_ceildivpow2(volume->comps[compno].l, volume->comps[compno].factor[2]);
fprintf(fdest, "PG %c%c %c%d %d %d\n", comp->bigendian ? 'M':'L', comp->bigendian ? 'L':'M',comp->sgnd ? '-' : '+', comp->prec, wr, hr);
if (comp->prec <= 8) {
nbytes = 1;
} else if (comp->prec <= 16) {
nbytes = 2;
} else {
nbytes = 4;
}
offset = (sliceno / lrr * l) + (sliceno % lrr);
offset = wrr * hrr * offset;
//fprintf(stdout,"%d %d %d %d\n",offset,wrr*hrr,wrr,w);
for (i = 0; i < wrr * hrr; i++) {
int v = volume->comps[0].data[(i / wrr * w) + (i % wrr) + offset];
if (volume->comps[0].bigendian) {
for (j = nbytes - 1; j >= 0; j--) {
char byte = (char) ((v >> (j * 8)) & 0xff);
fwrite(&byte, 1, 1, fdest);
}
} else {
for (j = 0; j <= nbytes - 1; j++) {
char byte = (char) ((v >> (j * 8)) & 0xff);
fwrite(&byte, 1, 1, fdest);
}
}
}
fclose(fdest);
}//for sliceno
}//for compno
return 0;
}
/* -->> -->> -->> -->>
BIN IMAGE FORMAT
<<-- <<-- <<-- <<-- */
opj_volume_t* bintovolume(char *filename, char *fileimg, opj_cparameters_t *parameters) {
int subsampling_dx = parameters->subsampling_dx;
int subsampling_dy = parameters->subsampling_dy;
int subsampling_dz = parameters->subsampling_dz;
int i, compno, w, h, l, numcomps = 1;
int prec, max = 0;
// char temp[32];
char line[100];
int bigendian;
FILE *f = NULL;
FILE *fimg = NULL;
OPJ_COLOR_SPACE color_space;
opj_volume_cmptparm_t cmptparm; /* maximum of 1 component */
opj_volume_t * volume = NULL;
opj_volume_comp_t *comp = NULL;
bigendian = 0;
color_space = CLRSPC_GRAY;
fimg = fopen(fileimg,"r");
if (!fimg) {
fprintf(stdout, "[ERROR] Failed to open %s for reading !!\n", fileimg);
return 0;
}
fseek(fimg, 0, SEEK_SET);
while (!feof(fimg)) {
fgets(line,100,fimg);
//fprintf(stdout,"%s %d \n",line,feof(fimg));
if (strncmp(line,"Bpp",3) == 0){
sscanf(line,"%*s%*[ \t]%d",&prec);
} else if (strncmp(line,"Color",5) == 0){
sscanf(line, "%*s%*[ \t]%d",&color_space);
} else if (strncmp(line,"Dim",3) == 0){
sscanf(line, "%*s%*[ \t]%d%*[ \t]%d%*[ \t]%d",&w,&h,&l);
}
}
//fscanf(fimg, "Bpp%[ \t]%d%[ \t\n]",temp,&prec,temp);
//fscanf(fimg, "Color Map%[ \t]%d%[ \n\t]Dimensions%[ \t]%d%[ \t]%d%[ \t]%d%[ \n\t]",temp,&color_space,temp,temp,&w,temp,&h,temp,&l,temp);
//fscanf(fimg, "Resolution(mm)%[ \t]%d%[ \t]%d%[ \t]%d%[ \n\t]",temp,&subsampling_dx,temp,&subsampling_dy,temp,&subsampling_dz,temp);
#ifdef VERBOSE
fprintf(stdout, "[INFO] %d \t %d %d %d \t %3.2f %2.2f %2.2f \t %d \n",color_space,w,h,l,subsampling_dx,subsampling_dy,subsampling_dz,prec);
#endif
fclose(fimg);
/* initialize volume components */
memset(&cmptparm, 0, sizeof(opj_volume_cmptparm_t));
cmptparm.prec = prec;
cmptparm.bpp = prec;
cmptparm.sgnd = 0;
cmptparm.bigendian = bigendian;
cmptparm.dcoffset = parameters->dcoffset;
cmptparm.dx = subsampling_dx;
cmptparm.dy = subsampling_dy;
cmptparm.dz = subsampling_dz;
cmptparm.w = w;
cmptparm.h = h;
cmptparm.l = l;
/* create the volume */
volume = opj_volume_create(numcomps, &cmptparm, color_space);
if(!volume) {
fprintf(stdout,"[ERROR] Unable to create volume");
fclose(f);
return NULL;
}
/* set volume offset and reference grid */
volume->x0 = parameters->volume_offset_x0;
volume->y0 = parameters->volume_offset_y0;
volume->z0 = parameters->volume_offset_z0;
volume->x1 = parameters->volume_offset_x0 + (w - 1) * subsampling_dx + 1;
volume->y1 = parameters->volume_offset_y0 + (h - 1) * subsampling_dy + 1;
volume->z1 = parameters->volume_offset_z0 + (l - 1) * subsampling_dz + 1;
/* set volume data */
f = fopen(filename, "rb");
if (!f) {
fprintf(stdout, "[ERROR] Failed to open %s for reading !!\n", filename);
return 0;
}
/* BINARY */
for (compno = 0; compno < volume->numcomps; compno++) {
int whl = w * h * l;
/* set volume data */
comp = &volume->comps[compno];
/*if (comp->prec <= 8) {
if (!comp->sgnd) {
unsigned char *data = (unsigned char *) malloc(whl * sizeof(unsigned char));
fread(data, 1, whl, f);
for (i = 0; i < whl; i++) {
comp->data[i] = data[i];
if (comp->data[i] > max)
max = comp->data[i];
}
free(data);
} else {
char *data = (char *) malloc(whl);
fread(data, 1, whl, f);
for (i = 0; i < whl; i++) {
comp->data[i] = data[i];
if (comp->data[i] > max)
max = comp->data[i];
}
free(data);
}
} else if (comp->prec <= 16) {
if (!comp->sgnd) {
unsigned short *data = (unsigned short *) malloc(whl * sizeof(unsigned short));
int leido = fread(data, 2, whl, f);
if (!leido) {
free(data); fclose(f);
return NULL;
}
for (i = 0; i < whl; i++) {
if (bigendian) //(c1 << 8) + c2;
comp->data[i] = data[i];
else{ //(c2 << 8) + c1;
comp->data[i] = ShortSwap(data[i]);
}
if (comp->data[i] > max)
max = comp->data[i];
}
free(data);
} else {
short *data = (short *) malloc(whl);
int leido = fread(data, 2, whl, f);
if (!leido) {
free(data); fclose(f);
return NULL;
}
for (i = 0; i < whl; i++) {
if (bigendian){ //(c1 << 8) + c2;
comp->data[i] = data[i];
}else{ //(c2 << 8) + c1;
comp->data[i] = (short) ShortSwap((unsigned short) data[i]);
}
if (comp->data[i] > max)
max = comp->data[i];
}
free(data);
}
} else {
if (!comp->sgnd) {
unsigned int *data = (unsigned int *) malloc(whl * sizeof(unsigned int));
int leido = fread(data, 4, whl, f);
if (!leido) {
free(data); fclose(f);
return NULL;
} for (i = 0; i < whl; i++) {
if (!bigendian)
comp->data[i] = LongSwap(data[i]);
else
comp->data[i] = data[i];
if (comp->data[i] > max)
max = comp->data[i];
}
free(data);
} else {
int leido = fread(comp->data, 4, whl, f);
if (!leido) {
fclose(f);
return NULL;
}
for (i = 0; i < whl; i++) {
if (!bigendian)
comp->data[i] = (int) LongSwap((unsigned int) comp->data[i]);
if (comp->data[i] > max)
max = comp->data[i];
}
}
}*/
for (i = 0; i < whl; i++) {
int v;
if (comp->prec <= 8) {
if (!comp->sgnd) {
v = readuchar(f);
} else {
v = (char) readuchar(f);
}
} else if (comp->prec <= 16) {
if (!comp->sgnd) {
v = readushort(f, bigendian);
} else {
v = (short) readushort(f, bigendian);
}
} else {
if (!comp->sgnd) {
v = readuint(f, bigendian);
} else {
v = (int) readuint(f, bigendian);
}
}
if (v > max)
max = v;
comp->data[i] = v;
}
comp->bpp = int_floorlog2(max) + 1;
}
fclose(f);
return volume;
}
int volumetobin(opj_volume_t * volume, char *outfile) {
int w, wr, wrr, h, hr, hrr, l, lr, lrr, max;
int i,j, compno, nbytes;
int offset, sliceno;
FILE *fdest = NULL;
FILE *fimgdest = NULL;
// char *imgtemp;
char name[256];
for (compno = 0; compno < 1; compno++) { //Only one component
fdest = fopen(outfile, "wb");
if (!fdest) {
fprintf(stdout, "[ERROR] Failed to open %s for writing\n", outfile);
return 1;
}
fprintf(stdout,"[INFO] Writing outfile %s (%s) \n",outfile, volume->comps[0].bigendian ? "Bigendian" : "Little-endian");
w = int_ceildiv(volume->x1 - volume->x0, volume->comps[compno].dx);
wr = volume->comps[compno].w;
wrr = int_ceildivpow2(volume->comps[compno].w, volume->comps[compno].factor[0]);
h = int_ceildiv(volume->y1 - volume->y0, volume->comps[compno].dy);
hr = volume->comps[compno].h;
hrr = int_ceildivpow2(volume->comps[compno].h, volume->comps[compno].factor[1]);
l = int_ceildiv(volume->z1 - volume->z0, volume->comps[compno].dz);
lr = volume->comps[compno].l;
lrr = int_ceildivpow2(volume->comps[compno].l, volume->comps[compno].factor[2]);
max = (volume->comps[compno].prec <= 8) ? 255 : (1 << volume->comps[compno].prec) - 1;
volume->comps[compno].x0 = int_ceildivpow2(volume->comps[compno].x0 - int_ceildiv(volume->x0, volume->comps[compno].dx), volume->comps[compno].factor[0]);
volume->comps[compno].y0 = int_ceildivpow2(volume->comps[compno].y0 - int_ceildiv(volume->y0, volume->comps[compno].dy), volume->comps[compno].factor[1]);
volume->comps[compno].z0 = int_ceildivpow2(volume->comps[compno].z0 - int_ceildiv(volume->z0, volume->comps[compno].dz), volume->comps[compno].factor[2]);
if (volume->comps[0].prec <= 8) {
nbytes = 1;
} else if (volume->comps[0].prec <= 16) {
nbytes = 2;
} else {
nbytes = 4;
}
//fprintf(stdout,"w %d wr %d wrr %d h %d hr %d hrr %d l %d lr %d lrr %d max %d nbytes %d\n Factor %d %d %d",w,wr,wrr,h,hr,hrr,l,lr,lrr,max,nbytes,volume->comps[compno].factor[0],volume->comps[compno].factor[1],volume->comps[compno].factor[2]);
for(sliceno = 0; sliceno < lrr; sliceno++) {
offset = (sliceno / lrr * l) + (sliceno % lrr);
offset = wrr * hrr * offset;
for (i = 0; i < wrr * hrr; i++) {
int v = volume->comps[0].data[(i / wrr * w) + (i % wrr) + offset];
if (volume->comps[0].bigendian) {
for (j = nbytes - 1; j >= 0; j--) {
char byte = (char) ((v >> (j * 8)) & 0xff);
fwrite(&byte, 1, 1, fdest);
}
} else {
for (j = 0; j <= nbytes - 1; j++) {
char byte = (char) ((v >> (j * 8)) & 0xff);
fwrite(&byte, 1, 1, fdest);
}
}
}
}
}
fclose(fdest);
sprintf(name,"%s.img",outfile);
fimgdest = fopen(name, "w");
if (!fimgdest) {
fprintf(stdout, "[ERROR] Failed to open %s for writing\n", name);
return 1;
}
fprintf(fimgdest, "Bpp\t%d\nColor Map\t2\nDimensions\t%d\t%d\t%d\nResolution(mm)\t%d\t%d\t%d\t\n",
volume->comps[0].prec,wrr,hrr,lrr,volume->comps[0].dx,volume->comps[0].dy,volume->comps[0].dz);
fclose(fimgdest);
return 0;
}
/* -->> -->> -->> -->>
IMG IMAGE FORMAT
<<-- <<-- <<-- <<-- */
opj_volume_t* imgtovolume(char *fileimg, opj_cparameters_t *parameters) {
int subsampling_dx = parameters->subsampling_dx;
int subsampling_dy = parameters->subsampling_dy;
int subsampling_dz = parameters->subsampling_dz;
int i, compno, w, h, l, numcomps = 1;
int prec, max = 0, min = 0;
float dx, dy, dz;
char filename[100], tmpdirpath[100], dirpath[100], *tmp;
char line[100], datatype[100];
int bigendian;
FILE *f = NULL;
FILE *fimg = NULL;
OPJ_COLOR_SPACE color_space;
opj_volume_cmptparm_t cmptparm; /* maximum of 1 component */
opj_volume_t * volume = NULL;
opj_volume_comp_t *comp = NULL;
bigendian = 0;
color_space = CLRSPC_GRAY;
fimg = fopen(fileimg,"r");
if (!fimg) {
fprintf(stderr, "[ERROR] Failed to open %s for reading !!\n", fileimg);
return 0;
}
//Fetch only the path
strcpy(tmpdirpath,fileimg);
if ((tmp = strrchr(tmpdirpath,'/')) != NULL){
tmp++; *tmp='\0';
strcpy(dirpath,tmpdirpath);
} else {
strcpy(dirpath,"./");
}
fseek(fimg, 0, SEEK_SET);
while (!feof(fimg)) {
fgets(line,100,fimg);
//fprintf(stdout,"%s %d \n",line,feof(fimg));
if (strncmp(line,"Image",5) == 0){
sscanf(line,"%*s%*[ \t]%s",datatype);
} else if (strncmp(line,"File",4) == 0){
sscanf(line,"%*s %*s%*[ \t]%s",filename);
strcat(dirpath, filename);
strcpy(filename,dirpath);
} else if (strncmp(line,"Min",3) == 0){
sscanf(line,"%*s %*s%*[ \t]%d%*[ \t]%d",&min,&max);
prec = int_floorlog2(max - min + 1);
} else if (strncmp(line,"Bpp",3) == 0){
sscanf(line,"%*s%*[ \t]%d",&prec);
} else if (strncmp(line,"Color",5) == 0){
sscanf(line, "%*s %*s%*[ \t]%d",&color_space);
} else if (strncmp(line,"Dim",3) == 0){
sscanf(line, "%*s%*[ \t]%d%*[ \t]%d%*[ \t]%d",&w,&h,&l);
} else if (strncmp(line,"Res",3) == 0){
sscanf(line,"%*s%*[ \t]%f%*[ \t]%f%*[ \t]%f",&dx,&dy,&dz);
}
}
#ifdef VERBOSE
fprintf(stdout, "[INFO] %s %d \t %d %d %d \t %f %f %f \t %d %d %d \n",filename,color_space,w,h,l,dx,dy,dz,max,min,prec);
#endif
fclose(fimg);
/* error control */
if ( !prec || !w || !h || !l ){
fprintf(stderr,"[ERROR] Unable to read IMG file correctly. Found some null values.");
return NULL;
}
/* initialize volume components */
memset(&cmptparm, 0, sizeof(opj_volume_cmptparm_t));
cmptparm.prec = prec;
cmptparm.bpp = prec;
cmptparm.sgnd = 0;
cmptparm.bigendian = bigendian;
cmptparm.dcoffset = parameters->dcoffset;
cmptparm.dx = subsampling_dx;
cmptparm.dy = subsampling_dy;
cmptparm.dz = subsampling_dz;
cmptparm.w = w;
cmptparm.h = h;
cmptparm.l = l;
/* create the volume */
volume = opj_volume_create(numcomps, &cmptparm, color_space);
if(!volume) {
fprintf(stdout,"[ERROR] Unable to create volume");
return NULL;
}
/* set volume offset and reference grid */
volume->x0 = parameters->volume_offset_x0;
volume->y0 = parameters->volume_offset_y0;
volume->z0 = parameters->volume_offset_z0;
volume->x1 = parameters->volume_offset_x0 + (w - 1) * subsampling_dx + 1;
volume->y1 = parameters->volume_offset_y0 + (h - 1) * subsampling_dy + 1;
volume->z1 = parameters->volume_offset_z0 + (l - 1) * subsampling_dz + 1;
max = 0;
/* set volume data */
f = fopen(filename, "rb");
if (!f) {
fprintf(stderr, "[ERROR] Failed to open %s for reading !!\n", filename);
fclose(f);
return 0;
}
/* BINARY */
for (compno = 0; compno < volume->numcomps; compno++) {
int whl = w * h * l;
/* set volume data */
comp = &volume->comps[compno];
/*if (comp->prec <= 8) {
if (!comp->sgnd) {
unsigned char *data = (unsigned char *) malloc(whl * sizeof(unsigned char));
fread(data, 1, whl, f);
for (i = 0; i < whl; i++) {
comp->data[i] = data[i];
if (comp->data[i] > max)
max = comp->data[i];
}
free(data);
} else {
char *data = (char *) malloc(whl);
fread(data, 1, whl, f);
for (i = 0; i < whl; i++) {
comp->data[i] = data[i];
if (comp->data[i] > max)
max = comp->data[i];
}
free(data);
}
} else if (comp->prec <= 16) {
if (!comp->sgnd) {
unsigned short *data = (unsigned short *) malloc(whl * sizeof(unsigned short));
int leido = fread(data, 2, whl, f);
if (!leido) {
free(data); fclose(f);
return NULL;
}
for (i = 0; i < whl; i++) {
if (bigendian) //(c1 << 8) + c2;
comp->data[i] = data[i];
else{ //(c2 << 8) + c1;
comp->data[i] = ShortSwap(data[i]);
}
if (comp->data[i] > max)
max = comp->data[i];
}
free(data);
} else {
short *data = (short *) malloc(whl);
int leido = fread(data, 2, whl, f);
if (!leido) {
free(data); fclose(f);
return NULL;
}
for (i = 0; i < whl; i++) {
if (bigendian){ //(c1 << 8) + c2;
comp->data[i] = data[i];
}else{ //(c2 << 8) + c1;
comp->data[i] = (short) ShortSwap((unsigned short) data[i]);
}
if (comp->data[i] > max)
max = comp->data[i];
}
free(data);
}
} else {
if (!comp->sgnd) {
unsigned int *data = (unsigned int *) malloc(whl * sizeof(unsigned int));
int leido = fread(data, 4, whl, f);
if (!leido) {
free(data); fclose(f);
return NULL;
} for (i = 0; i < whl; i++) {
if (!bigendian)
comp->data[i] = LongSwap(data[i]);
else
comp->data[i] = data[i];
if (comp->data[i] > max)
max = comp->data[i];
}
free(data);
} else {
int leido = fread(comp->data, 4, whl, f);
if (!leido) {
fclose(f);
return NULL;
}
for (i = 0; i < whl; i++) {
if (!bigendian)
comp->data[i] = (int) LongSwap((unsigned int) comp->data[i]);
if (comp->data[i] > max)
max = comp->data[i];
}
}
}*/
for (i = 0; i < whl; i++) {
int v;
if (comp->prec <= 8) {
if (!comp->sgnd) {
v = readuchar(f);
} else {
v = (char) readuchar(f);
}
} else if (comp->prec <= 16) {
if (!comp->sgnd) {
v = readushort(f, bigendian);
} else {
v = (short) readushort(f, bigendian);
}
} else {
if (!comp->sgnd) {
v = readuint(f, bigendian);
} else {
v = (int) readuint(f, bigendian);
}
}
if (v > max)
max = v;
comp->data[i] = v;
}
comp->bpp = int_floorlog2(max) + 1;
}
fclose(f);
return volume;
}

51
jp3d/codec/convert.h Executable file
View File

@@ -0,0 +1,51 @@
/*
* Copyright (c) 2001-2003, David Janssens
* Copyright (c) 2002-2003, Yannick Verschueren
* Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
* Copyright (c) 2005, Herv<72> Drolon, FreeImage Team
* Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
* Copyright (c) 2006, M<>nica D<>ez Garc<72>a, Image Processing Laboratory, University of Valladolid, Spain
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef __JP3D_CONVERT_H
#define __JP3D_CONVERT_H
/**
Load a single volume component encoded in PGX file format
@param filename Name of the PGX file to load
@param parameters *List ?*
@return Returns a greyscale volume if successful, returns NULL otherwise
*/
opj_volume_t* pgxtovolume(char *filename, opj_cparameters_t *parameters);
int volumetopgx(opj_volume_t *volume, char *outfile);
opj_volume_t* bintovolume(char *filename,char *fileimg, opj_cparameters_t *parameters);
int volumetobin(opj_volume_t *volume, char *outfile);
opj_volume_t* imgtovolume(char *fileimg, opj_cparameters_t *parameters);
#endif /* __J2K_CONVERT_H */

109
jp3d/codec/getopt.c Executable file
View File

@@ -0,0 +1,109 @@
/*
* Copyright (c) 1987, 1993, 1994
* The Regents of the University of California. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
/* last review : october 29th, 2002 */
#if defined(LIBC_SCCS) && !defined(lint)
static char sccsid[] = "@(#)getopt.c 8.3 (Berkeley) 4/27/95";
#endif /* LIBC_SCCS and not lint */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int opterr = 1, /* if error message should be printed */
optind = 1, /* index into parent argv vector */
optopt, /* character checked for validity */
optreset; /* reset getopt */
char *optarg; /* argument associated with option */
#define BADCH (int)'?'
#define BADARG (int)':'
#define EMSG ""
/*
* getopt --
* Parse argc/argv argument vector.
*/
int getopt(int nargc, char *const *nargv, const char *ostr) {
# define __progname nargv[0] /* program name */
static char *place = EMSG; /* option letter processing */
char *oli; /* option letter list index */
if (optreset || !*place) { /* update scanning pointer */
optreset = 0;
if (optind >= nargc || *(place = nargv[optind]) != '-') {
place = EMSG;
return (-1);
}
if (place[1] && *++place == '-') { /* found "--" */
++optind;
place = EMSG;
return (-1);
}
} /* option letter okay? */
if ((optopt = (int) *place++) == (int) ':' || !(oli = strchr(ostr, optopt))) {
/* if the user didn't specify '-' as an option, assume it means -1. */
if (optopt == (int) '-')
return (-1);
if (!*place)
++optind;
if (opterr && *ostr != ':')
(void) fprintf(stdout,"[ERROR] %s: illegal option -- %c\n", __progname, optopt);
return (BADCH);
}
if (*++oli != ':') { /* don't need argument */
optarg = NULL;
if (!*place)
++optind;
} else { /* need an argument */
if (*place) /* no white space */
optarg = place;
else if (nargc <= ++optind) { /* no arg */
place = EMSG;
if (*ostr == ':')
return (BADARG);
if (opterr)
(void) fprintf(stdout, "[ERROR] %s: option requires an argument -- %c\n", __progname, optopt);
return (BADCH);
} else /* white space */
optarg = nargv[optind];
place = EMSG;
++optind;
}
return (optopt); /* dump back option letter */
}

14
jp3d/codec/getopt.h Executable file
View File

@@ -0,0 +1,14 @@
/* last review : october 29th, 2002 */
#ifndef _GETOPT_H_
#define _GETOPT_H_
extern int opterr;
extern int optind;
extern int optopt;
extern int optreset;
extern char *optarg;
extern int getopt(int nargc, char *const *nargv, const char *ostr);
#endif /* _GETOPT_H_ */

535
jp3d/codec/jp3d_to_volume.c Executable file
View File

@@ -0,0 +1,535 @@
/*
* Copyright (c) 2001-2003, David Janssens
* Copyright (c) 2002-2003, Yannick Verschueren
* Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
* Copyright (c) 2005, Herv<72> Drolon, FreeImage Team
* Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
* Copyright (c) 2006, M<>nica D<>ez Garc<72>a, Image Processing Laboratory, University of Valladolid, Spain
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include "openjpeg.h"
#include "getopt.h"
#include "convert.h"
#ifndef WIN32
#define stricmp strcasecmp
#define strnicmp strncasecmp
#endif
/* ----------------------------------------------------------------------- */
static double calc_PSNR(opj_volume_t *original, opj_volume_t *decoded)
{
int max, i, k, compno = 0, size;
double sum, total = 0;
int global = 1;
max = (original->comps[compno].prec <= 8) ? 255 : (1 << original->comps[compno].prec) - 1;
if (global) {
size = (original->x1 - original->x0) * (original->y1 - original->y0) * (original->z1 - original->z0);
for (compno = 0; compno < original->numcomps; compno++) {
for(sum = 0, i = 0; i < size; ++i) {
if ((decoded->comps[compno].data[i] < 0) || (decoded->comps[compno].data[i] > max))
fprintf(stdout,"[WARNING] Data out of range during PSNR computing...\n");
else
sum += (original->comps[compno].data[i] - decoded->comps[compno].data[i]) * (original->comps[compno].data[i] - decoded->comps[compno].data[i]);
}
}
sum /= size;
total = ((sum==0.0) ? 0.0 : 10 * log10(max * max / sum));
} else {
size = (original->x1 - original->x0) * (original->y1 - original->y0);
for (k = 0; k < original->z1 - original->z0; k++) {
int offset = k * size;
for (sum = 0, compno = 0; compno < original->numcomps; compno++) {
for(i = 0; i < size; ++i) {
if ((decoded->comps[compno].data[i + offset] < 0) || (decoded->comps[compno].data[i + offset] > max))
fprintf(stdout,"[WARNING] Data out of range during PSNR computing...\n");
else
sum += (original->comps[compno].data[i + offset] - decoded->comps[compno].data[i + offset]) * (original->comps[compno].data[i + offset] - decoded->comps[compno].data[i + offset]);
}
}
sum /= size;
total = total + ((sum==0.0) ? 0.0 : 10 * log10(max * max / sum));
}
}
if(total == 0) /* perfect reconstruction, PSNR should return infinity */
return -1.0;
return total;
//return 20 * log10((max - 1) / sqrt(sum));
}
static double calc_SSIM(opj_volume_t *original, opj_volume_t *decoded)
{
int max, i, compno = 0, size, sizeM;
double sum;
double mux = 0.0, muy = 0.0, sigmax = 0.0, sigmay = 0.0,
sigmaxy = 0.0, structx = 0.0, structy = 0.0;
double lcomp,ccomp,scomp;
double C1,C2,C3;
max = (original->comps[compno].prec <= 8) ? 255 : (1 << original->comps[compno].prec) - 1;
size = (original->x1 - original->x0) * (original->y1 - original->y0) * (original->z1 - original->z0);
//MSSIM
// sizeM = size / (original->z1 - original->z0);
sizeM = size;
for(sum = 0, i = 0; i < sizeM; ++i) {
// First, the luminance of each signal is compared.
mux += original->comps[compno].data[i];
muy += decoded->comps[compno].data[i];
}
mux /= sizeM;
muy /= sizeM;
//We use the standard deviation (the square root of variance) as an estimate of the signal contrast.
for(sum = 0, i = 0; i < sizeM; ++i) {
// First, the luminance of each signal is compared.
sigmax += (original->comps[compno].data[i] - mux) * (original->comps[compno].data[i] - mux);
sigmay += (decoded->comps[compno].data[i] - muy) * (decoded->comps[compno].data[i] - muy);
sigmaxy += (original->comps[compno].data[i] - mux) * (decoded->comps[compno].data[i] - muy);
}
sigmax /= sizeM - 1;
sigmay /= sizeM - 1;
sigmaxy /= sizeM - 1;
sigmax = sqrt(sigmax);
sigmay = sqrt(sigmay);
sigmaxy = sqrt(sigmaxy);
//Third, the signal is normalized (divided) by its own standard deviation,
//so that the two signals being compared have unit standard deviation.
//Luminance comparison
C1 = (0.01 * max) * (0.01 * max);
lcomp = ((2 * mux * muy) + C1)/((mux*mux) + (muy*mux) + C1);
//Constrast comparison
C2 = (0.03 * max) * (0.03 * max);
ccomp = ((2 * sigmax * sigmay) + C2)/((sigmax*sigmax) + (sigmay*sigmay) + C2);
//Structure comparison
C3 = C2 / 2;
scomp = (sigmaxy + C3) / (sigmax * sigmay + C3);
//Similarity measure
sum = lcomp * ccomp * scomp;
return sum;
}
void decode_help_display() {
fprintf(stdout,"HELP\n----\n\n");
fprintf(stdout,"- the -h option displays this help information on screen\n\n");
fprintf(stdout,"List of parameters for the JPEG 2000 encoder:\n");
fprintf(stdout,"\n");
fprintf(stdout," Required arguments \n");
fprintf(stdout," ---------------------------- \n");
fprintf(stdout," -i <compressed file> ( *.jp3d, *.j3d )\n");
fprintf(stdout," Currently accepts J3D-files. The file type is identified based on its suffix.\n");
fprintf(stdout," -o <decompressed file> ( *.pgx, *.bin )\n");
fprintf(stdout," Currently accepts PGX-files and BIN-files. Binary data is written to the file (not ascii). \n");
fprintf(stdout," If a PGX filename is given, there will be as many output files as slices; \n");
fprintf(stdout," an indice starting from 0 will then be appended to the output filename,\n");
fprintf(stdout," just before the \"pgx\" extension.\n");
fprintf(stdout," -m <characteristics file> ( *.img ) \n");
fprintf(stdout," Required only for BIN-files. Ascii data of volume characteristics is written. \n");
fprintf(stdout,"\n");
fprintf(stdout," Optional \n");
fprintf(stdout," ---------------------------- \n");
fprintf(stdout," -h \n ");
fprintf(stdout," Display the help information\n");
fprintf(stdout," -r <RFx,RFy,RFz>\n");
fprintf(stdout," Set the number of highest resolution levels to be discarded on each dimension. \n");
fprintf(stdout," The volume resolution is effectively divided by 2 to the power of the\n");
fprintf(stdout," number of discarded levels. The reduce factor is limited by the\n");
fprintf(stdout," smallest total number of decomposition levels among tiles.\n");
fprintf(stdout," -l <number of quality layers to decode>\n");
fprintf(stdout," Set the maximum number of quality layers to decode. If there are\n");
fprintf(stdout," less quality layers than the specified number, all the quality layers\n");
fprintf(stdout," are decoded. \n");
fprintf(stdout," -O original-file \n");
fprintf(stdout," This option offers the possibility to compute some quality results \n");
fprintf(stdout," for the decompressed volume, like the PSNR value achieved or the global SSIM value. \n");
fprintf(stdout," Needs the original file in order to compare with the new one.\n");
fprintf(stdout," NOTE: Only valid when -r option is 0,0,0 (both original and decompressed volumes have same resolutions) \n");
fprintf(stdout," NOTE: If original file is .BIN file, the volume characteristics file shall be defined with the -m option. \n");
fprintf(stdout," (i.e. -O original-BIN-file -m original-IMG-file) \n");
fprintf(stdout," -BE \n");
fprintf(stdout," Define that the recovered volume data will be saved with big endian byte order.\n");
fprintf(stdout," By default, little endian byte order is used.\n");
fprintf(stdout,"\n");
}
/* -------------------------------------------------------------------------- */
int get_file_format(char *filename) {
int i;
static const char *extension[] = {"pgx", "bin", "j3d", "jp3d", "j2k", "img"};
static const int format[] = { PGX_DFMT, BIN_DFMT, J3D_CFMT, J3D_CFMT, J2K_CFMT, IMG_DFMT};
char * ext = strrchr(filename, '.') + 1;
for(i = 0; i < sizeof(format); i++) {
if(strnicmp(ext, extension[i], 3) == 0) {
return format[i];
}
}
return -1;
}
/* -------------------------------------------------------------------------- */
int parse_cmdline_decoder(int argc, char **argv, opj_dparameters_t *parameters) {
/* parse the command line */
while (1) {
int c = getopt(argc, argv, "i:o:O:r:l:B:m:h");
if (c == -1)
break;
switch (c) {
case 'i': /* input file */
{
char *infile = optarg;
parameters->decod_format = get_file_format(infile);
switch(parameters->decod_format) {
case J3D_CFMT:
case J2K_CFMT:
break;
default:
fprintf(stdout, "[ERROR] Unknown format for infile %s [only *.j3d]!! \n", infile);
return 1;
break;
}
strncpy(parameters->infile, infile, MAX_PATH);
fprintf(stdout, "[INFO] Infile: %s \n", parameters->infile);
}
break;
case 'm': /* img file */
{
char *imgfile = optarg;
int imgformat = get_file_format(imgfile);
switch(imgformat) {
case IMG_DFMT:
break;
default:
fprintf(stdout, "[ERROR] Unrecognized format for imgfile : %s [accept only *.img] !!\n\n", imgfile);
return 1;
break;
}
strncpy(parameters->imgfile, imgfile, MAX_PATH);
fprintf(stdout, "[INFO] Imgfile: %s Format: %d\n", parameters->imgfile, imgformat);
}
break;
/* ----------------------------------------------------- */
case 'o': /* output file */
{
char *outfile = optarg;
parameters->cod_format = get_file_format(outfile);
switch(parameters->cod_format) {
case PGX_DFMT:
case BIN_DFMT:
break;
default:
fprintf(stdout, "[ERROR] Unrecognized format for outfile : %s [accept only *.pgx or *.bin] !!\n\n", outfile);
return 1;
break;
}
strncpy(parameters->outfile, outfile, MAX_PATH);
fprintf(stdout, "[INFO] Outfile: %s \n", parameters->outfile);
}
break;
/* ----------------------------------------------------- */
case 'O': /* Original image for PSNR computing */
{
char *original = optarg;
parameters->orig_format = get_file_format(original);
switch(parameters->orig_format) {
case PGX_DFMT:
case BIN_DFMT:
break;
default:
fprintf(stdout, "[ERROR] Unrecognized format for original file : %s [accept only *.pgx or *.bin] !!\n\n", original);
return 1;
break;
}
strncpy(parameters->original, original, MAX_PATH);
fprintf(stdout, "[INFO] Original file: %s \n", parameters->original);
}
break;
/* ----------------------------------------------------- */
case 'r': /* reduce option */
{
//sscanf(optarg, "%d, %d, %d", &parameters->cp_reduce[0], &parameters->cp_reduce[1], &parameters->cp_reduce[2]);
int aux;
aux = sscanf(optarg, "%d,%d,%d", &parameters->cp_reduce[0], &parameters->cp_reduce[1], &parameters->cp_reduce[2]);
if (aux == 2)
parameters->cp_reduce[2] = 0;
else if (aux == 1) {
parameters->cp_reduce[1] = parameters->cp_reduce[0];
parameters->cp_reduce[2] = 0;
}else if (aux == 0){
parameters->cp_reduce[0] = 0;
parameters->cp_reduce[1] = 0;
parameters->cp_reduce[2] = 0;
}
}
break;
/* ----------------------------------------------------- */
case 'l': /* layering option */
{
sscanf(optarg, "%d", &parameters->cp_layer);
}
break;
/* ----------------------------------------------------- */
case 'B': /* BIGENDIAN vs. LITTLEENDIAN */
{
parameters->bigendian = 1;
}
break;
/* ----------------------------------------------------- */
case 'L': /* BIGENDIAN vs. LITTLEENDIAN */
{
parameters->decod_format = LSE_CFMT;
}
break;
/* ----------------------------------------------------- */
case 'h': /* display an help description */
{
decode_help_display();
return 1;
}
break;
/* ----------------------------------------------------- */
default:
fprintf(stdout,"[WARNING] This option is not valid \"-%c %s\"\n",c, optarg);
break;
}
}
/* check for possible errors */
if((parameters->infile[0] == 0) || (parameters->outfile[0] == 0)) {
fprintf(stdout,"[ERROR] At least one required argument is missing\n Check jp3d_to_volume -help for usage information\n");
return 1;
}
return 0;
}
/* -------------------------------------------------------------------------- */
/**
sample error callback expecting a FILE* client object
*/
void error_callback(const char *msg, void *client_data) {
FILE *stream = (FILE*)client_data;
fprintf(stream, "[ERROR] %s", msg);
}
/**
sample warning callback expecting a FILE* client object
*/
void warning_callback(const char *msg, void *client_data) {
FILE *stream = (FILE*)client_data;
fprintf(stream, "[WARNING] %s", msg);
}
/**
sample debug callback expecting no client object
*/
void info_callback(const char *msg, void *client_data) {
fprintf(stdout, "[INFO] %s", msg);
}
/* -------------------------------------------------------------------------- */
int main(int argc, char **argv) {
opj_dparameters_t parameters; /* decompression parameters */
opj_event_mgr_t event_mgr; /* event manager */
opj_volume_t *volume = NULL;
opj_volume_t *original = NULL;
opj_cparameters_t cparameters; /* original parameters */
FILE *fsrc = NULL;
unsigned char *src = NULL;
int file_length;
int decodeok;
double psnr, ssim;
opj_dinfo_t* dinfo = NULL; /* handle to a decompressor */
opj_cio_t *cio = NULL;
/* configure the event callbacks (not required) */
memset(&event_mgr, 0, sizeof(opj_event_mgr_t));
event_mgr.error_handler = error_callback;
event_mgr.warning_handler = warning_callback;
event_mgr.info_handler = info_callback;
/* set decoding parameters to default values */
opj_set_default_decoder_parameters(&parameters);
/* parse input and get user decoding parameters */
strcpy(parameters.original,"NULL");
strcpy(parameters.imgfile,"NULL");
if(parse_cmdline_decoder(argc, argv, &parameters) == 1) {
return 0;
}
/* read the input file and put it in memory */
/* ---------------------------------------- */
fprintf(stdout, "[INFO] Loading %s file \n",parameters.decod_format==J3D_CFMT ? ".jp3d" : ".j2k");
fsrc = fopen(parameters.infile, "rb");
if (!fsrc) {
fprintf(stdout, "[ERROR] Failed to open %s for reading\n", parameters.infile);
return 1;
}
fseek(fsrc, 0, SEEK_END);
file_length = ftell(fsrc);
fseek(fsrc, 0, SEEK_SET);
src = (unsigned char *) malloc(file_length);
fread(src, 1, file_length, fsrc);
fclose(fsrc);
/* decode the code-stream */
/* ---------------------- */
if (parameters.decod_format == J3D_CFMT || parameters.decod_format == J2K_CFMT) {
/* get a JP3D or J2K decoder handle */
if (parameters.decod_format == J3D_CFMT)
dinfo = opj_create_decompress(CODEC_J3D);
else if (parameters.decod_format == J2K_CFMT)
dinfo = opj_create_decompress(CODEC_J2K);
/* catch events using our callbacks and give a local context */
opj_set_event_mgr((opj_common_ptr)dinfo, &event_mgr, stderr);
/* setup the decoder decoding parameters using user parameters */
opj_setup_decoder(dinfo, &parameters);
/* open a byte stream */
cio = opj_cio_open((opj_common_ptr)dinfo, src, file_length);
/* decode the stream and fill the volume structure */
volume = opj_decode(dinfo, cio);
if(!volume) {
fprintf(stdout, "[ERROR] jp3d_to_volume: failed to decode volume!\n");
opj_destroy_decompress(dinfo);
opj_cio_close(cio);
return 1;
}
/* close the byte stream */
opj_cio_close(cio);
}
/* free the memory containing the code-stream */
free(src);
src = NULL;
/* create output volume */
/* ------------------- */
switch (parameters.cod_format) {
case PGX_DFMT: /* PGX */
decodeok = volumetopgx(volume, parameters.outfile);
if (decodeok)
fprintf(stdout,"[ERROR] Unable to write decoded volume into pgx files\n");
break;
case BIN_DFMT: /* BMP */
decodeok = volumetobin(volume, parameters.outfile);
if (decodeok)
fprintf(stdout,"[ERROR] Unable to write decoded volume into pgx files\n");
break;
}
switch (parameters.orig_format) {
case PGX_DFMT: /* PGX */
if (strcmp("NULL",parameters.original) != 0){
fprintf(stdout,"Loading original file %s \n",parameters.original);
cparameters.subsampling_dx = 1; cparameters.subsampling_dy = 1; cparameters.subsampling_dz = 1;
cparameters.volume_offset_x0 = 0;cparameters.volume_offset_y0 = 0;cparameters.volume_offset_z0 = 0;
original = pgxtovolume(parameters.original,&cparameters);
}
break;
case BIN_DFMT: /* BMP */
if (strcmp("NULL",parameters.original) != 0 && strcmp("NULL",parameters.imgfile) != 0){
fprintf(stdout,"Loading original file %s %s\n",parameters.original,parameters.imgfile);
cparameters.subsampling_dx = 1; cparameters.subsampling_dy = 1; cparameters.subsampling_dz = 1;
cparameters.volume_offset_x0 = 0;cparameters.volume_offset_y0 = 0;cparameters.volume_offset_z0 = 0;
original = bintovolume(parameters.original,parameters.imgfile,&cparameters);
}
break;
}
fprintf(stdout, "[RESULT] Volume: %d x %d x %d (x %d bpv)\n ",
(volume->comps[0].w >> volume->comps[0].factor[0]),
(volume->comps[0].h >> volume->comps[0].factor[1]),
(volume->comps[0].l >> volume->comps[0].factor[2]),volume->comps[0].prec);
if(original){
psnr = calc_PSNR(original,volume);
ssim = calc_SSIM(original,volume);
if (psnr < 0.0)
fprintf(stdout, " PSNR: Inf , SSMI %f -- Perfect reconstruction!\n",ssim);
else
fprintf(stdout, " PSNR: %f , SSIM %f \n",psnr,ssim);
}
/* free remaining structures */
if(dinfo) {
opj_destroy_decompress(dinfo);
}
/* free volume data structure */
opj_volume_destroy(volume);
return 0;
}

BIN
jp3d/codec/jp3d_vm_dec.ncb Executable file

Binary file not shown.

30
jp3d/codec/jp3d_vm_dec.sln Executable file
View File

@@ -0,0 +1,30 @@
Microsoft Visual Studio Solution File, Format Version 8.00
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "jp3d_vm_dec", "jp3d_vm_dec.vcproj", "{E0C1B905-5B10-4C9A-AF55-2D8144D518AB}"
ProjectSection(ProjectDependencies) = postProject
{6F3FB035-8F4E-4794-B091-0F0A20223BE7} = {6F3FB035-8F4E-4794-B091-0F0A20223BE7}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LibJp3dVM", "..\LibJp3dVM.vcproj", "{6F3FB035-8F4E-4794-B091-0F0A20223BE7}"
ProjectSection(ProjectDependencies) = postProject
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfiguration) = preSolution
Debug = Debug
Release = Release
EndGlobalSection
GlobalSection(ProjectConfiguration) = postSolution
{E0C1B905-5B10-4C9A-AF55-2D8144D518AB}.Debug.ActiveCfg = Debug|Win32
{E0C1B905-5B10-4C9A-AF55-2D8144D518AB}.Debug.Build.0 = Debug|Win32
{E0C1B905-5B10-4C9A-AF55-2D8144D518AB}.Release.ActiveCfg = Release|Win32
{E0C1B905-5B10-4C9A-AF55-2D8144D518AB}.Release.Build.0 = Release|Win32
{6F3FB035-8F4E-4794-B091-0F0A20223BE7}.Debug.ActiveCfg = Debug|Win32
{6F3FB035-8F4E-4794-B091-0F0A20223BE7}.Debug.Build.0 = Debug|Win32
{6F3FB035-8F4E-4794-B091-0F0A20223BE7}.Release.ActiveCfg = Release|Win32
{6F3FB035-8F4E-4794-B091-0F0A20223BE7}.Release.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
EndGlobalSection
GlobalSection(ExtensibilityAddIns) = postSolution
EndGlobalSection
EndGlobal

BIN
jp3d/codec/jp3d_vm_dec.suo Executable file

Binary file not shown.

157
jp3d/codec/jp3d_vm_dec.vcproj Executable file
View File

@@ -0,0 +1,157 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="7.10"
Name="jp3d_vm_dec"
ProjectGUID="{E0C1B905-5B10-4C9A-AF55-2D8144D518AB}"
SccProjectName=""
SccLocalPath="">
<Platforms>
<Platform
Name="Win32"/>
</Platforms>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory=".\Debug"
IntermediateDirectory=".\Debug"
ConfigurationType="1"
UseOfMFC="0"
ATLMinimizesCRunTimeLibraryUsage="FALSE"
CharacterSet="2">
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="../libjp3dvm"
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;OPJ_STATIC"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
UsePrecompiledHeader="2"
PrecompiledHeaderFile=".\Debug/jp3d_vm_dec.pch"
AssemblerListingLocation=".\Debug/"
ObjectFile=".\Debug/"
ProgramDataBaseFileName=".\Debug/"
WarningLevel="3"
SuppressStartupBanner="TRUE"
DebugInformationFormat="4"
CompileAs="0"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
OutputFile=".\Debug/jp3d_vm_dec.exe"
LinkIncremental="0"
SuppressStartupBanner="TRUE"
GenerateDebugInformation="TRUE"
ProgramDatabaseFile=".\Debug/jp3d_vm_dec.pdb"
SubSystem="1"
TargetMachine="1"/>
<Tool
Name="VCMIDLTool"
TypeLibraryName=".\Debug/j2k_to_image.tlb"
HeaderFileName=""/>
<Tool
Name="VCPostBuildEventTool"
CommandLine="copy Debug\jp3d_vm_dec.exe ..\bin"/>
<Tool
Name="VCPreBuildEventTool"/>
<Tool
Name="VCPreLinkEventTool"/>
<Tool
Name="VCResourceCompilerTool"
PreprocessorDefinitions="_DEBUG"
Culture="1036"/>
<Tool
Name="VCWebServiceProxyGeneratorTool"/>
<Tool
Name="VCXMLDataGeneratorTool"/>
<Tool
Name="VCWebDeploymentTool"/>
<Tool
Name="VCManagedWrapperGeneratorTool"/>
<Tool
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory=".\Release"
IntermediateDirectory=".\Release"
ConfigurationType="1"
UseOfMFC="0"
ATLMinimizesCRunTimeLibraryUsage="FALSE"
CharacterSet="2">
<Tool
Name="VCCLCompilerTool"
Optimization="2"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="../libjp3dvm"
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;OPJ_STATIC"
StringPooling="TRUE"
RuntimeLibrary="0"
EnableFunctionLevelLinking="TRUE"
PrecompiledHeaderFile=".\Release/jp3d_vm_dec.pch"
AssemblerListingLocation=".\Release/"
ObjectFile=".\Release/"
ProgramDataBaseFileName=".\Release/"
WarningLevel="3"
SuppressStartupBanner="TRUE"
CompileAs="0"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
OutputFile=".\Release/jp3d_vm_dec.exe"
LinkIncremental="1"
SuppressStartupBanner="TRUE"
ProgramDatabaseFile=".\Release/jp3d_vm_dec.pdb"
SubSystem="1"
TargetMachine="1"/>
<Tool
Name="VCMIDLTool"
TypeLibraryName=".\Release/j2k_to_image.tlb"
HeaderFileName=""/>
<Tool
Name="VCPostBuildEventTool"
CommandLine="copy Release\jp3d_vm_dec.exe ..\bin"/>
<Tool
Name="VCPreBuildEventTool"/>
<Tool
Name="VCPreLinkEventTool"/>
<Tool
Name="VCResourceCompilerTool"
PreprocessorDefinitions="NDEBUG"
Culture="1036"/>
<Tool
Name="VCWebServiceProxyGeneratorTool"/>
<Tool
Name="VCXMLDataGeneratorTool"/>
<Tool
Name="VCWebDeploymentTool"/>
<Tool
Name="VCManagedWrapperGeneratorTool"/>
<Tool
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<File
RelativePath=".\convert.c">
</File>
<File
RelativePath=".\convert.h">
</File>
<File
RelativePath=".\getopt.c">
</File>
<File
RelativePath=".\getopt.h">
</File>
<File
RelativePath=".\jp3d_to_volume.c">
</File>
</Files>
<Globals>
</Globals>
</VisualStudioProject>

BIN
jp3d/codec/jp3d_vm_enc.ncb Executable file

Binary file not shown.

35
jp3d/codec/jp3d_vm_enc.sln Executable file
View File

@@ -0,0 +1,35 @@
Microsoft Visual Studio Solution File, Format Version 8.00
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "jp3d_vm_enc", "jp3d_vm_enc.vcproj", "{A9704A2E-3B93-4BAA-9229-02FC93D27201}"
ProjectSection(ProjectDependencies) = postProject
{6F3FB035-8F4E-4794-B091-0F0A20223BE7} = {6F3FB035-8F4E-4794-B091-0F0A20223BE7}
{6F3FB035-8F4E-4794-B091-0F0A20223BE7} = {6F3FB035-8F4E-4794-B091-0F0A20223BE7}
{6F3FB035-8F4E-4794-B091-0F0A20223BE7} = {6F3FB035-8F4E-4794-B091-0F0A20223BE7}
{6F3FB035-8F4E-4794-B091-0F0A20223BE7} = {6F3FB035-8F4E-4794-B091-0F0A20223BE7}
{6F3FB035-8F4E-4794-B091-0F0A20223BE7} = {6F3FB035-8F4E-4794-B091-0F0A20223BE7}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LibJp3dVM", "..\LibJp3dVM.vcproj", "{6F3FB035-8F4E-4794-B091-0F0A20223BE7}"
ProjectSection(ProjectDependencies) = postProject
{6F3FB035-8F4E-4794-B091-0F0A20223BE7} = {6F3FB035-8F4E-4794-B091-0F0A20223BE7}
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfiguration) = preSolution
Debug = Debug
Release = Release
EndGlobalSection
GlobalSection(ProjectConfiguration) = postSolution
{A9704A2E-3B93-4BAA-9229-02FC93D27201}.Debug.ActiveCfg = Debug|Win32
{A9704A2E-3B93-4BAA-9229-02FC93D27201}.Debug.Build.0 = Debug|Win32
{A9704A2E-3B93-4BAA-9229-02FC93D27201}.Release.ActiveCfg = Release|Win32
{A9704A2E-3B93-4BAA-9229-02FC93D27201}.Release.Build.0 = Release|Win32
{6F3FB035-8F4E-4794-B091-0F0A20223BE7}.Debug.ActiveCfg = Debug|Win32
{6F3FB035-8F4E-4794-B091-0F0A20223BE7}.Debug.Build.0 = Debug|Win32
{6F3FB035-8F4E-4794-B091-0F0A20223BE7}.Release.ActiveCfg = Release|Win32
{6F3FB035-8F4E-4794-B091-0F0A20223BE7}.Release.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
EndGlobalSection
GlobalSection(ExtensibilityAddIns) = postSolution
EndGlobalSection
EndGlobal

BIN
jp3d/codec/jp3d_vm_enc.suo Executable file

Binary file not shown.

157
jp3d/codec/jp3d_vm_enc.vcproj Executable file
View File

@@ -0,0 +1,157 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="7.10"
Name="jp3d_vm_enc"
ProjectGUID="{A9704A2E-3B93-4BAA-9229-02FC93D27201}"
SccProjectName=""
SccLocalPath="">
<Platforms>
<Platform
Name="Win32"/>
</Platforms>
<Configurations>
<Configuration
Name="Release|Win32"
OutputDirectory=".\Release"
IntermediateDirectory=".\Release"
ConfigurationType="1"
UseOfMFC="0"
ATLMinimizesCRunTimeLibraryUsage="FALSE"
CharacterSet="2">
<Tool
Name="VCCLCompilerTool"
Optimization="2"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="../libjp3dvm"
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;OPJ_STATIC"
StringPooling="TRUE"
RuntimeLibrary="0"
EnableFunctionLevelLinking="TRUE"
PrecompiledHeaderFile=".\Release/jp3d_vm_enc.pch"
AssemblerListingLocation=".\Release/"
ObjectFile=".\Release/"
ProgramDataBaseFileName=".\Release/"
WarningLevel="3"
SuppressStartupBanner="TRUE"
CompileAs="0"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
OutputFile=".\Release/jp3d_vm_enc.exe"
LinkIncremental="1"
SuppressStartupBanner="TRUE"
ProgramDatabaseFile=".\Release/jp3d_vm_enc.pdb"
SubSystem="1"
TargetMachine="1"/>
<Tool
Name="VCMIDLTool"
TypeLibraryName=".\Release/image_to_j2k.tlb"
HeaderFileName=""/>
<Tool
Name="VCPostBuildEventTool"
CommandLine="copy Release\jp3d_vm_enc.exe ..\bin"/>
<Tool
Name="VCPreBuildEventTool"/>
<Tool
Name="VCPreLinkEventTool"/>
<Tool
Name="VCResourceCompilerTool"
PreprocessorDefinitions="NDEBUG"
Culture="1036"/>
<Tool
Name="VCWebServiceProxyGeneratorTool"/>
<Tool
Name="VCXMLDataGeneratorTool"/>
<Tool
Name="VCWebDeploymentTool"/>
<Tool
Name="VCManagedWrapperGeneratorTool"/>
<Tool
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
</Configuration>
<Configuration
Name="Debug|Win32"
OutputDirectory=".\Debug"
IntermediateDirectory=".\Debug"
ConfigurationType="1"
UseOfMFC="0"
ATLMinimizesCRunTimeLibraryUsage="FALSE"
CharacterSet="2">
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="../libjp3dvm"
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;OPJ_STATIC"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
PrecompiledHeaderFile=".\Debug/jp3d_vm_enc.pch"
AssemblerListingLocation=".\Debug/"
ObjectFile=".\Debug/"
ProgramDataBaseFileName=".\Debug/"
WarningLevel="3"
SuppressStartupBanner="TRUE"
DebugInformationFormat="4"
CompileAs="0"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
OutputFile=".\Debug/jp3d_vm_enc.exe"
LinkIncremental="0"
SuppressStartupBanner="TRUE"
AdditionalLibraryDirectories=""
GenerateDebugInformation="TRUE"
ProgramDatabaseFile=".\Debug/jp3d_vm_enc.pdb"
SubSystem="1"
TargetMachine="1"/>
<Tool
Name="VCMIDLTool"
TypeLibraryName=".\Debug/image_to_j2k.tlb"
HeaderFileName=""/>
<Tool
Name="VCPostBuildEventTool"
CommandLine="copy Debug\jp3d_vm_enc.exe ..\bin"/>
<Tool
Name="VCPreBuildEventTool"/>
<Tool
Name="VCPreLinkEventTool"/>
<Tool
Name="VCResourceCompilerTool"
PreprocessorDefinitions="_DEBUG"
Culture="1036"/>
<Tool
Name="VCWebServiceProxyGeneratorTool"/>
<Tool
Name="VCXMLDataGeneratorTool"/>
<Tool
Name="VCWebDeploymentTool"/>
<Tool
Name="VCManagedWrapperGeneratorTool"/>
<Tool
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<File
RelativePath=".\convert.c">
</File>
<File
RelativePath=".\convert.h">
</File>
<File
RelativePath=".\getopt.c">
</File>
<File
RelativePath=".\getopt.h">
</File>
<File
RelativePath=".\volume_to_jp3d.c">
</File>
</Files>
<Globals>
</Globals>
</VisualStudioProject>

903
jp3d/codec/volume_to_jp3d.c Executable file
View File

@@ -0,0 +1,903 @@
/*
* Copyright (c) 2001-2003, David Janssens
* Copyright (c) 2002-2003, Yannick Verschueren
* Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
* Copyright (c) 2005, Herv<72> Drolon, FreeImage Team
* Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
* Copyright (c) 2006, M<>nica D<>ez Garc<72>a, Image Processing Laboratory, University of Valladolid, Spain
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "openjpeg.h"
#include "getopt.h"
#include "convert.h"
#ifndef WIN32
#define stricmp strcasecmp
#define strnicmp strncasecmp
#endif
/* ----------------------------------------------------------------------- */
void encode_help_display() {
fprintf(stdout,"List of parameters for the JPEG2000 Part 10 encoder:\n");
fprintf(stdout,"------------\n");
fprintf(stdout,"\n");
fprintf(stdout,"Required Parameters (except with -h):\n");
fprintf(stdout,"\n");
fprintf(stdout,"-i : source file (-i source.bin or source*.pgx) \n");
fprintf(stdout,"\n");
fprintf(stdout,"-m : source characteristics file (-m imgfile.img) \n");
fprintf(stdout,"\n");
fprintf(stdout,"-o : destination file (-o dest.jp3d) \n");
fprintf(stdout,"\n");
fprintf(stdout,"Optional Parameters:\n");
fprintf(stdout,"\n");
fprintf(stdout,"-h : display the help information \n ");
fprintf(stdout,"\n");
fprintf(stdout,"-n : number of resolutions (-n 3,3,3) \n");
fprintf(stdout,"\n");
fprintf(stdout,"-I : use the irreversible transforms: ICT + DWT 9-7 (-I) \n");
fprintf(stdout,"\n");
fprintf(stdout,"-C : coding algorithm (-C 2EB) [2EB, 3EB] \n");
fprintf(stdout,"\n");
fprintf(stdout,"-r : different compression ratios for successive layers (-r 20,10,5)\n ");
fprintf(stdout," - The rate specified for each quality level is the desired compression factor.\n");
fprintf(stdout," - Rate 1 means lossless compression\n");
fprintf(stdout," (options -r and -q cannot be used together)\n ");
fprintf(stdout,"\n");
fprintf(stdout,"-q : different psnr for successive layers (-q 30,40,50) \n ");
fprintf(stdout," (options -r and -q cannot be used together)\n ");
fprintf(stdout,"\n");
fprintf(stdout,"-b : size of code block (-b 32,32,32) \n");
fprintf(stdout,"\n");
fprintf(stdout,"-c : size of precinct (-c 128,128,128) \n");
fprintf(stdout,"\n");
fprintf(stdout,"-t : size of tile (-t 512,512,512) \n");
fprintf(stdout,"\n");
fprintf(stdout,"-p : progression order (-p LRCP) [LRCP, RLCP, RPCL, PCRL, CPRL] \n");
fprintf(stdout,"\n");
fprintf(stdout,"-s : subsampling factor (-s 2,2,2) [-s X,Y,Z] \n");
fprintf(stdout," - Remark: subsampling bigger than 2 can produce error\n");
fprintf(stdout,"\n");
fprintf(stdout,"-SOP : write SOP marker before each packet \n");
fprintf(stdout,"\n");
fprintf(stdout,"-EPH : write EPH marker after each header packet \n");
fprintf(stdout,"\n");
fprintf(stdout,"-M : code-block style (-M 0) [1=BYPASS(LAZY) 2=RESET 4=RESTART(TERMALL)\n");
fprintf(stdout," 8=VSC 16=PTERM 32=SEGSYM 64=3DCTXT] \n");
fprintf(stdout," Indicate multiple modes by adding their values. \n");
fprintf(stdout," ex: RESTART(4) + RESET(2) + SEGMARK(32) = -M 38\n");
fprintf(stdout,"\n");
fprintf(stdout,"-D : define DC offset (-D 12) \n");
fprintf(stdout,"\n");
fprintf(stdout,"-x : create an index file *.Idx (-x index_name.Idx) \n");
fprintf(stdout,"\n");
fprintf(stdout,"-ROI : c=%%d,U=%%d : quantization indices upshifted \n");
fprintf(stdout," for component c=%%d [%%d = 0,1,2]\n");
fprintf(stdout," with a value of U=%%d [0 <= %%d <= 37] (i.e. -ROI:c=0,U=25) \n");
fprintf(stdout,"\n");
fprintf(stdout,"-d : offset of the origin of the volume (-d 150,300,100) \n");
fprintf(stdout,"\n");
fprintf(stdout,"-l : offset of the origin of the tiles (-l 100,75,25) \n");
fprintf(stdout,"\n");
fprintf(stdout,"\n");
fprintf(stdout,"DEFAULT CODING:\n");
fprintf(stdout,"------------\n");
fprintf(stdout,"\n");
fprintf(stdout," * Lossless\n");
fprintf(stdout," * 1 tile\n");
fprintf(stdout," * Size of precinct : 2^15 x 2^15 x 2^15 (means 1 precinct)\n");
fprintf(stdout," * Size of code-block : 64 x 64 x 64\n");
fprintf(stdout," * Number of resolutions in x, y and z axis: 3\n");
fprintf(stdout," * No SOP marker in the codestream\n");
fprintf(stdout," * No EPH marker in the codestream\n");
fprintf(stdout," * No sub-sampling in x, y or z direction\n");
fprintf(stdout," * No mode switch activated\n");
fprintf(stdout," * Progression order: LRCP\n");
fprintf(stdout," * No index file\n");
fprintf(stdout," * No ROI upshifted\n");
fprintf(stdout," * No offset of the origin of the volume\n");
fprintf(stdout," * No offset of the origin of the tiles\n");
fprintf(stdout," * Reversible DWT 5-3 on each 2D slice\n");
fprintf(stdout," * Coding algorithm: 2D-EBCOT \n");
fprintf(stdout,"\n");
fprintf(stdout,"REMARKS:\n");
fprintf(stdout,"---------\n");
fprintf(stdout,"\n");
fprintf(stdout,"- The markers written to the main_header are : SOC SIZ COD QCD COM.\n");
fprintf(stdout,"- COD and QCD markers will never appear in the tile_header.\n");
fprintf(stdout,"\n");
fprintf(stdout,"- You need enough disk space memory (twice the original) to encode \n");
fprintf(stdout,"the volume,i.e. for a 1.5 GB volume you need a minimum of 3GB of disk memory)\n");
fprintf(stdout,"\n");
fprintf(stdout,"- When loading *.pgx files, a relative path to directory is needed for input argument \n");
fprintf(stdout," followed by the common prefix of the slices and a '*' character representing sequential numeration.\n");
fprintf(stdout,"( -i relativepath/slices*.pgx )\n");
fprintf(stdout,"\n");
fprintf(stdout," - The index file has the structure below:\n");
fprintf(stdout,"\n");
fprintf(stdout,"\t Image_height Image_width Image_depth\n");
fprintf(stdout,"\t Progression order: 0 (LRCP)\n");
fprintf(stdout,"\t Tiles_size_X Tiles_size_Y Tiles_size_Z\n");
fprintf(stdout,"\t Components_nb\n");
fprintf(stdout,"\t Layers_nb\n");
fprintf(stdout,"\t Decomposition_levels\n");
fprintf(stdout,"\t [Precincts_size_X_res_Nr Precincts_size_Y_res_Nr Precincts_size_Z_res_Nr]\n\t ...\n");
fprintf(stdout,"\t [Precincts_size_X_res_0 Precincts_size_Y_res_0 Precincts_size_Z_res_0]\n");
fprintf(stdout,"\t Main_header_end_position\n");
fprintf(stdout,"\t Codestream_size\n");
fprintf(stdout,"\t Tile_0 [start_pos end_header end_pos TotalDisto NumPix MaxMSE]\n");
fprintf(stdout,"\t ...\n");
fprintf(stdout,"\t Tile_Nt [ '' '' '' '' '' '' ]\n");
fprintf(stdout,"\t Tpacket_0 [Tile layer res. comp. prec. start_pos end_pos disto]\n");
fprintf(stdout,"\t ...\n");
fprintf(stdout,"\t Tpacket_Np ['' '' '' '' '' '' '' '' ]\n");
fprintf(stdout,"\t MaxDisto\n");
fprintf(stdout,"\t TotalDisto\n\n");
fprintf(stdout,"\n");
}
OPJ_PROG_ORDER give_progression(char progression[4]) {
if(strncmp(progression, "LRCP", 4) == 0) {
return LRCP;
}
if(strncmp(progression, "RLCP", 4) == 0) {
return RLCP;
}
if(strncmp(progression, "RPCL", 4) == 0) {
return RPCL;
}
if(strncmp(progression, "PCRL", 4) == 0) {
return PCRL;
}
if(strncmp(progression, "CPRL", 4) == 0) {
return CPRL;
}
return PROG_UNKNOWN;
}
OPJ_TRANSFORM give_transform(char transform[4]) {
if(strncmp(transform, "2DWT", 4) == 0) {
return TRF_2D_DWT;
}
if(strncmp(transform, "3DWT", 4) == 0) {
return TRF_3D_DWT;
}
return TRF_UNKNOWN;
}
OPJ_ENTROPY_CODING give_coding(char coding[3]) {
if(strncmp(coding, "2EB", 3) == 0) {
return ENCOD_2EB;
}
if(strncmp(coding, "3EB", 3) == 0) {
return ENCOD_3EB;
}
/*if(strncmp(coding, "2GR", 3) == 0) {
return ENCOD_2GR;
}
if(strncmp(coding, "3GR", 3) == 0) {
return ENCOD_3GR;
}*/
return ENCOD_UNKNOWN;
}
int get_file_format(char *filename) {
int i;
static const char *extension[] = {"pgx", "bin", "img", "j3d", "jp3d", "j2k"};
static const int format[] = { PGX_DFMT, BIN_DFMT, IMG_DFMT, J3D_CFMT, J3D_CFMT, J2K_CFMT};
char * ext = strrchr(filename, '.') + 1;
if (ext) {
for(i = 0; i < sizeof(format)/sizeof(*format); i++) {
if(strnicmp(ext, extension[i], 3) == 0) {
return format[i];
}
}
}
return -1;
}
/* ------------------------------------------------------------------------------------ */
int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *parameters) {
int i, value;
/* parse the command line */
while (1) {
int c = getopt(argc, argv, "i:m:o:r:q:f:t:n:c:b:x:p:s:d:hP:S:E:M:D:R:l:T:C:A:I");
if (c == -1)
break;
switch (c) {
case 'i': /* input file */
{
char *infile = optarg;
parameters->decod_format = get_file_format(infile);
switch(parameters->decod_format) {
case PGX_DFMT:
case BIN_DFMT:
case IMG_DFMT:
break;
default:
fprintf(stdout, "[ERROR] Unrecognized format for infile : %s [accept only *.pgx or *.bin] !!\n\n", infile);
return 1;
break;
}
strncpy(parameters->infile, infile, MAX_PATH);
fprintf(stdout, "[INFO] Infile: %s \n", parameters->infile);
}
break;
/* ----------------------------------------------------- */
case 'm': /* input IMG file */
{
char *imgfile = optarg;
int imgformat = get_file_format(imgfile);
switch(imgformat) {
case IMG_DFMT:
break;
default:
fprintf(stdout, "[ERROR] Unrecognized format for imgfile : %s [accept only *.img] !!\n\n", imgfile);
return 1;
break;
}
strncpy(parameters->imgfile, imgfile, MAX_PATH);
fprintf(stdout, "[INFO] Imgfile: %s Format: %d\n", parameters->imgfile, imgformat);
}
break;
/* ----------------------------------------------------- */
case 'o': /* output file */
{
char *outfile = optarg;
parameters->cod_format = get_file_format(outfile);
switch(parameters->cod_format) {
case J3D_CFMT:
case J2K_CFMT:
case LSE_CFMT:
break;
default:
fprintf(stdout, "[ERROR] Unknown output format volume %s [only *.j2k, *.lse3d or *.jp3d]!! \n", outfile);
return 1;
break;
}
strncpy(parameters->outfile, outfile, MAX_PATH);
fprintf(stdout, "[INFO] Outfile: %s \n", parameters->outfile);
}
break;
/* ----------------------------------------------------- */
case 'r': /* define compression rates for each layer */
{
char *s = optarg;
while (sscanf(s, "%f", &parameters->tcp_rates[parameters->tcp_numlayers]) == 1) {
parameters->tcp_numlayers++;
while (*s && *s != ',') {
s++;
}
if (!*s)
break;
s++;
}
parameters->cp_disto_alloc = 1;
}
break;
/* ----------------------------------------------------- */
case 'q': /* define distorsion (PSNR) for each layer */
{
char *s = optarg;
while (sscanf(s, "%f", &parameters->tcp_distoratio[parameters->tcp_numlayers]) == 1) {
parameters->tcp_numlayers++;
while (*s && *s != ',') {
s++;
}
if (!*s)
break;
s++;
}
parameters->cp_fixed_quality = 1;
}
break;
/* ----------------------------------------------------- */
case 'f':
{
fprintf(stdout, "/---------------------------------------------------\\\n");
fprintf(stdout, "| Fixed layer allocation option not implemented !! |\n");
fprintf(stdout, "\\---------------------------------------------------/\n");
/*int *row = NULL, *col = NULL;
int numlayers = 0, matrix_width = 0;
char *s = optarg;
sscanf(s, "%d", &numlayers);
s++;
if (numlayers > 9)
s++;
parameters->tcp_numlayers = numlayers;
matrix_width = parameters->numresolution[0] + parameters->numresolution[1] + parameters->numresolution[2];
parameters->cp_matrice = (int *) malloc(numlayers * matrix_width * sizeof(int));
s = s + 2;
for (i = 0; i < numlayers; i++) {
row = &parameters->cp_matrice[i * matrix_width];
col = row;
parameters->tcp_rates[i] = 1;
sscanf(s, "%d,", &col[0]);
s += 2;
if (col[0] > 9)
s++;
col[1] = 0;
col[2] = 0;
for (j = 1; j < matrix_width; j++) {
col += 3; j+=2;
sscanf(s, "%d,%d,%d", &col[0], &col[1], &col[2]);
s += 6;
if (col[0] > 9)
s++;
if (col[1] > 9)
s++;
if (col[2] > 9)
s++;
}
if (i < numlayers - 1)
s++;
}
parameters->cp_fixed_alloc = 1; */
}
break;
/* ----------------------------------------------------- */
case 't': /* tiles */
{
if (sscanf(optarg, "%d,%d,%d", &parameters->cp_tdx, &parameters->cp_tdy, &parameters->cp_tdz) !=3) {
fprintf(stdout, "[ERROR] '-t' 'dimensions of tiles' argument error ! [-t tdx,tdy,tdz]\n");
return 1;
}
parameters->tile_size_on = true;
}
break;
/* ----------------------------------------------------- */
case 'n': /* resolution */
{
int aux;
aux = sscanf(optarg, "%d,%d,%d", &parameters->numresolution[0], &parameters->numresolution[1], &parameters->numresolution[2]);
if (aux == 2)
parameters->numresolution[2] = 1;
else if (aux == 1) {
parameters->numresolution[1] = parameters->numresolution[0];
parameters->numresolution[2] = 1;
}else if (aux == 0){
parameters->numresolution[0] = 1;
parameters->numresolution[1] = 1;
parameters->numresolution[2] = 1;
}
}
break;
/* ----------------------------------------------------- */
case 'c': /* precinct dimension */
{
char sep;
int res_spec = 0;
int aux;
char *s = optarg;
do {
sep = 0;
aux = sscanf(s, "[%d,%d,%d]%c", &parameters->prct_init[0][res_spec], &parameters->prct_init[1][res_spec], &parameters->prct_init[2][res_spec], &sep);
if (sep == ',' && aux != 4) {
fprintf(stdout, "[ERROR] '-c' 'dimensions of precincts' argument error ! [-c [prcx_res0,prcy_res0,prcz_res0],...,[prcx_resN,prcy_resN,prcz_resN]]\n");
return 1;
}
parameters->csty |= 0x01;
res_spec++;
s = strpbrk(s, "]") + 2;
}
while (sep == ',');
parameters->res_spec = res_spec; /* number of precinct size specifications */
}
break;
/* ----------------------------------------------------- */
case 'b': /* code-block dimension */
{
int cblockw_init = 0, cblockh_init = 0, cblockl_init = 0;
if (sscanf(optarg, "%d,%d,%d", &cblockw_init, &cblockh_init, &cblockl_init) != 3) {
fprintf(stdout, "[ERROR] '-b' 'dimensions of codeblocks' argument error ! [-b cblkx,cblky,cblkz]\n");
return 1;
}
if (cblockw_init * cblockh_init * cblockl_init > (1<<18) || cblockw_init > 1024 || cblockw_init < 4 || cblockh_init > 1024 || cblockh_init < 4 || cblockl_init > 1024 || cblockl_init < 4) {
fprintf(stdout,"[ERROR] Size of code_block error (option -b) !!\n\nRestriction :\n * width*height*length<=4096\n * 4<=width,height,length<= 1024\n\n");
return 1;
}
parameters->cblock_init[0] = cblockw_init;
parameters->cblock_init[1] = cblockh_init;
parameters->cblock_init[2] = cblockl_init;
}
break;
/* ----------------------------------------------------- */
case 'x': /* creation of index file */
{
char *index = optarg;
strncpy(parameters->index, index, MAX_PATH);
parameters->index_on = 1;
}
break;
/* ----------------------------------------------------- */
case 'p': /* progression order */
{
char progression[4];
strncpy(progression, optarg, 4);
parameters->prog_order = give_progression(progression);
if (parameters->prog_order == -1) {
fprintf(stdout, "[ERROR] Unrecognized progression order [LRCP, RLCP, RPCL, PCRL, CPRL] !!\n");
return 1;
}
}
break;
/* ----------------------------------------------------- */
case 's': /* subsampling factor */
{
if (sscanf(optarg, "%d,%d,%d", &parameters->subsampling_dx, &parameters->subsampling_dy, &parameters->subsampling_dz) != 2) {
fprintf(stdout, "[ERROR] '-s' sub-sampling argument error ! [-s dx,dy,dz]\n");
return 1;
}
}
break;
/* ----------------------------------------------------- */
case 'd': /* coordonnate of the reference grid */
{
if (sscanf(optarg, "%d,%d,%d", &parameters->volume_offset_x0, &parameters->volume_offset_y0, &parameters->volume_offset_z0) != 3) {
fprintf(stdout, "[ERROR] -d 'coordonnate of the reference grid' argument error !! [-d x0,y0,z0]\n");
return 1;
}
}
break;
/* ----------------------------------------------------- */
case 'h': /* display an help description */
{
encode_help_display();
return 1;
}
break;
/* ----------------------------------------------------- */
case 'P': /* POC */
{
int numpocs = 0; /* number of progression order change (POC) default 0 */
opj_poc_t *POC = NULL; /* POC : used in case of Progression order change */
char *s = optarg;
POC = parameters->POC;
fprintf(stdout, "/----------------------------------\\\n");
fprintf(stdout, "| POC option not fully tested !! |\n");
fprintf(stdout, "\\----------------------------------/\n");
while (sscanf(s, "T%d=%d,%d,%d,%d,%d,%s", &POC[numpocs].tile,
&POC[numpocs].resno0, &POC[numpocs].compno0,
&POC[numpocs].layno1, &POC[numpocs].resno1,
&POC[numpocs].compno1, POC[numpocs].progorder) == 7) {
POC[numpocs].prg = give_progression(POC[numpocs].progorder);
/* POC[numpocs].tile; */
numpocs++;
while (*s && *s != '/') {
s++;
}
if (!*s) {
break;
}
s++;
}
parameters->numpocs = numpocs;
}
break;
/* ------------------------------------------------------ */
case 'S': /* SOP marker */
{
parameters->csty |= 0x02;
}
break;
/* ------------------------------------------------------ */
case 'E': /* EPH marker */
{
parameters->csty |= 0x04;
}
break;
/* ------------------------------------------------------ */
case 'M': /* Codification mode switch */
{
fprintf(stdout, "[INFO] Mode switch option not fully tested !!\n");
value = 0;
if (sscanf(optarg, "%d", &value) == 1) {
for (i = 0; i <= 6; i++) {
int cache = value & (1 << i);
if (cache)
parameters->mode |= (1 << i);
}
}
}
break;
/* ------------------------------------------------------ */
case 'D': /* DCO */
{
if (sscanf(optarg, "%d", &parameters->dcoffset) != 1) {
fprintf(stdout, "[ERROR] DC offset error !! [-D %d]\n",parameters->dcoffset);
return 1;
}
}
break;
/* ------------------------------------------------------ */
case 'R': /* ROI */
{
if (sscanf(optarg, "OI:c=%d,U=%d", &parameters->roi_compno, &parameters->roi_shift) != 2) {
fprintf(stdout, "[ERROR] ROI error !! [-ROI:c='compno',U='shift']\n");
return 1;
}
}
break;
/* ------------------------------------------------------ */
case 'l': /* Tile offset */
{
if (sscanf(optarg, "%d,%d,%d", &parameters->cp_tx0, &parameters->cp_ty0, &parameters->cp_tz0) != 3) {
fprintf(stdout, "[ERROR] -l 'tile offset' argument error !! [-l X0,Y0,Z0]");
return 1;
}
}
break;
/* ------------------------------------------------------
case 'T': // Tranformation of original data (2D-DWT/3D-DWT/3D-RLS/2D-DWT+1D-RLS)
{
char transform[4];
strncpy(transform, optarg, 4);
parameters->transform_format = give_transform(transform);
if (parameters->transform_format == -1) {
fprintf(stdout, "[ERROR] -T 'Transform domain' argument error !! [-T 2DWT, 3DWT, 3RLS or 3LSE only]");
return 1;
}
}
break;
------------------------------------------------------ */
case 'C': /* Coding of transformed data */
{
char coding[3];
strncpy(coding, optarg, 3);
parameters->encoding_format = give_coding(coding);
if (parameters->encoding_format == -1) {
fprintf(stdout, "[ERROR] -C 'Coding algorithm' argument error !! [-C 2EB, 3EB, 2GR, 3GR or GRI only]");
return 1;
}
}
break;
/* ------------------------------------------------------ */
case 'I': /* reversible or not */
{
parameters->irreversible = 1;
}
break;
default:
fprintf(stdout, "[ERROR] This option is not valid \"-%c %s\"\n", c, optarg);
return 1;
}
}
/* check for possible errors */
if((parameters->infile[0] == 0) || (parameters->outfile[0] == 0)) {
fprintf(stdout, "usage: jp3d_vm_enc -i volume-file -o jp3d-file (+ options)\n");
return 1;
}
if((parameters->decod_format == BIN_DFMT) && (parameters->imgfile[0] == 0)) {
fprintf(stdout, "usage: jp3d_vm_enc -i bin-volume-file -m img-file -o jp3d-file (+ options)\n");
return 1;
}
if((parameters->decod_format != BIN_DFMT) && (parameters->decod_format != PGX_DFMT) && (parameters->decod_format != IMG_DFMT)) {
fprintf(stdout, "usage: jp3d_vm_enc -i input-volume-file [*.bin,*.pgx,*.img] -o jp3d-file [*.jp3d,*.j2k] (+ options)\n");
return 1;
}
if((parameters->cod_format != J3D_CFMT) && (parameters->cod_format != J2K_CFMT)) {
fprintf(stdout, "usage: jp3d_vm_enc -i input-volume-file [*.bin,*.pgx,*.img] -o jp3d-file [*.jp3d,*.j2k] (+ options)\n");
return 1;
}
if((parameters->encoding_format == ENCOD_2GR || parameters->encoding_format == ENCOD_3GR) && parameters->transform_format != TRF_3D_LSE && parameters->transform_format != TRF_3D_RLS) {
fprintf(stdout, "[ERROR] Entropy coding options -C [2GR,3GR] are only compatible with predictive-based transform algorithms: -T [3RLS,3LSE].\n");
return 1;
}
if (parameters->encoding_format == ENCOD_3EB)
parameters->mode |= (1 << 6);
if ((parameters->mode >> 6) & 1) {
parameters->encoding_format = ENCOD_3EB;
}
if((parameters->numresolution[2] == 0 || (parameters->numresolution[1] == 0) || (parameters->numresolution[0] == 0))) {
fprintf(stdout, "[ERROR] -n 'resolution levels' argument error ! Resolutions must be greater than 1 in order to perform DWT.\n");
return 1;
}
if (parameters->numresolution[1] != parameters->numresolution[0]) {
fprintf(stdout, "[ERROR] -n 'resolution levels' argument error ! Resolutions in X and Y axis must be the same in this implementation.\n");
return 1;
}
if (parameters->numresolution[2] > parameters->numresolution[0]) {
fprintf(stdout, "[ERROR] -n 'resolution levels' argument error ! Resolutions in Z axis must be lower than in X-Y axis.\n");
return 1;
}
if (parameters->dcoffset >= 128 && parameters->dcoffset <= -128) {
fprintf(stdout, "[ERROR] -D 'DC offset' argument error ! Value must be -128<=DCO<=128.\n");
return 1;
}
if(parameters->numresolution[2] != 1) {
parameters->transform_format = TRF_3D_DWT;
//fprintf(stdout, "[Warning] Resolution level in axial dim > 1 : 3D-DWT will be performed... \n");
} else if (parameters->numresolution[2] == 1) {
parameters->transform_format = TRF_2D_DWT;
//fprintf(stdout, "[Warning] Resolution level in axial dim == 1 : 2D-DWT will be performed... \n");
}
if ((parameters->cod_format == J2K_CFMT) && (parameters->transform_format != TRF_2D_DWT || parameters->encoding_format != ENCOD_2EB)) {
fprintf(stdout, "[WARNING] Incompatible options -o *.j2k and defined transform or encoding algorithm. Latter will be ignored\n");
parameters->transform_format = TRF_2D_DWT;
parameters->encoding_format = ENCOD_2EB;
}
if ((parameters->cp_disto_alloc || parameters->cp_fixed_alloc || parameters->cp_fixed_quality) && (!(parameters->cp_disto_alloc ^ parameters->cp_fixed_quality))) {
fprintf(stdout, "[ERROR] Options -r and -q cannot be used together !!\n");
return 1;
} /* mod fixed_quality */
/* if no rate entered, lossless by default */
if (parameters->tcp_numlayers == 0) {
parameters->tcp_rates[0] = 0.0; /* MOD antonin : losslessbug */
parameters->tcp_numlayers++;
parameters->cp_disto_alloc = 1;
}
if((parameters->cp_tx0 > parameters->volume_offset_x0) || (parameters->cp_ty0 > parameters->volume_offset_y0) || (parameters->cp_tz0 > parameters->volume_offset_z0)) {
fprintf(stdout, "[ERROR] Tile offset dimension is unnappropriate --> TX0(%d)<=IMG_X0(%d) TYO(%d)<=IMG_Y0(%d) TZO(%d)<=IMG_Z0(%d)\n",
parameters->cp_tx0, parameters->volume_offset_x0, parameters->cp_ty0, parameters->volume_offset_y0,
parameters->cp_tz0, parameters->volume_offset_z0);
return 1;
}
for (i = 0; i < parameters->numpocs; i++) {
if (parameters->POC[i].prg == -1) {
fprintf(stdout,"[ERROR] Unrecognized progression order in option -P (POC n %d) [LRCP, RLCP, RPCL, PCRL, CPRL] !!\n",i + 1);
}
}
return 0;
}
/* -------------------------------------------------------------------------- */
/**
sample error callback expecting a FILE* client object
*/
void error_callback(const char *msg, void *client_data) {
FILE *stream = (FILE*)client_data;
fprintf(stream, "[ERROR] %s", msg);
}
/**
sample warning callback expecting a FILE* client object
*/
void warning_callback(const char *msg, void *client_data) {
FILE *stream = (FILE*)client_data;
fprintf(stream, "[WARNING] %s", msg);
}
/**
sample debug callback expecting a FILE* client object
*/
void info_callback(const char *msg, void *client_data) {
FILE *stream = (FILE*)client_data;
fprintf(stream, "[INFO] %s", msg);
}
/* -------------------------------------------------------------------------- */
int main(int argc, char **argv) {
bool bSuccess;
bool delete_comment = true;
opj_cparameters_t parameters; /* compression parameters */
opj_event_mgr_t event_mgr; /* event manager */
opj_volume_t *volume = NULL;
/*
configure the event callbacks (not required)
setting of each callback is optionnal
*/
memset(&event_mgr, 0, sizeof(opj_event_mgr_t));
event_mgr.error_handler = error_callback;
event_mgr.warning_handler = warning_callback;
event_mgr.info_handler = info_callback;
/* set encoding parameters to default values */
opj_set_default_encoder_parameters(&parameters);
/* parse input and get user encoding parameters */
if(parse_cmdline_encoder(argc, argv, &parameters) == 1) {
return 0;
}
if(parameters.cp_comment == NULL) {
parameters.cp_comment = "Created by OpenJPEG version JP3D";
/* no need to delete parameters.cp_comment on exit */
delete_comment = false;
}
/* encode the destination volume */
/* ---------------------------- */
if (parameters.cod_format == J3D_CFMT || parameters.cod_format == J2K_CFMT) {
int codestream_length, pixels, bitsin;
opj_cio_t *cio = NULL;
FILE *f = NULL;
opj_cinfo_t* cinfo = NULL;
/* decode the source volume */
/* ----------------------- */
switch (parameters.decod_format) {
case PGX_DFMT:
fprintf(stdout, "[INFO] Loading pgx file(s)\n");
volume = pgxtovolume(parameters.infile, &parameters);
if (!volume) {
fprintf(stdout, "[ERROR] Unable to load pgx files\n");
return 1;
}
break;
case BIN_DFMT:
fprintf(stdout, "[INFO] Loading bin file\n");
volume = bintovolume(parameters.infile, parameters.imgfile, &parameters);
if (!volume) {
fprintf(stdout, "[ERROR] Unable to load bin file\n");
return 1;
}
break;
case IMG_DFMT:
fprintf(stdout, "[INFO] Loading img file\n");
volume = imgtovolume(parameters.infile, &parameters);
if (!volume) {
fprintf(stderr, "[ERROR] Unable to load img file\n");
return 1;
}
break;
}
/* get a JP3D or J2K compressor handle */
if (parameters.cod_format == J3D_CFMT)
cinfo = opj_create_compress(CODEC_J3D);
else if (parameters.cod_format == J2K_CFMT)
cinfo = opj_create_compress(CODEC_J2K);
/* catch events using our callbacks and give a local context */
opj_set_event_mgr((opj_common_ptr)cinfo, &event_mgr, stdout);
/* setup the encoder parameters using the current volume and using user parameters */
opj_setup_encoder(cinfo, &parameters, volume);
/* open a byte stream for writing */
/* allocate memory for all tiles */
cio = opj_cio_open((opj_common_ptr)cinfo, NULL, 0);
/* encode the volume */
//fprintf(stdout, "[INFO] Encode the volume\n");
bSuccess = opj_encode(cinfo, cio, volume, parameters.index);
if (!bSuccess) {
opj_cio_close(cio);
fprintf(stdout, "[ERROR] Failed to encode volume\n");
return 1;
}
codestream_length = cio_tell(cio);
pixels =(volume->x1 - volume->x0) * (volume->y1 - volume->y0) * (volume->z1 - volume->z0);
bitsin = pixels * volume->comps[0].prec;
fprintf(stdout, "[RESULT] Volume: %d x %d x %d (x %d bpv)\n Codestream: %d B, Ratio: %5.3f bpv, (%5.3f : 1) \n",
(volume->x1 - volume->x0),(volume->y1 - volume->y0),(volume->z1 - volume->z0),volume->comps[0].prec,
codestream_length, ((double)codestream_length * 8.0/(double)pixels), ((double)bitsin/(8.0*(double)codestream_length)));
/* write the buffer to disk */
f = fopen(parameters.outfile, "wb");
if (!f) {
fprintf(stdout, "[ERROR] Failed to open %s for writing\n", parameters.outfile);
return 1;
}
fwrite(cio->buffer, 1, codestream_length, f);
fclose(f);
/* close and free the byte stream */
opj_cio_close(cio);
/* free remaining compression structures */
opj_destroy_compress(cinfo);
} else {
fprintf(stdout, "[ERROR] Cod_format != JP3d !!! \n");
return 1;
}
/* free user parameters structure */
if(delete_comment) {
if(parameters.cp_comment) free(parameters.cp_comment);
}
if(parameters.cp_matrice) free(parameters.cp_matrice);
/* free volume data */
opj_volume_destroy(volume);
return 0;
}

189
jp3d/libjp3dvm/bio.c Executable file
View File

@@ -0,0 +1,189 @@
/*
* Copyright (c) 2001-2003, David Janssens
* Copyright (c) 2002-2003, Yannick Verschueren
* Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
* Copyright (c) 2005, Herv<72> Drolon, FreeImage Team
* Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#include "opj_includes.h"
/** @defgroup BIO BIO - Individual bit input-output stream */
/*@{*/
/** @name Local static functions */
/*@{*/
/**
Write a bit
@param bio BIO handle
@param b Bit to write (0 or 1)
*/
static void bio_putbit(opj_bio_t *bio, int b);
/**
Read a bit
@param bio BIO handle
@return Returns the read bit
*/
static int bio_getbit(opj_bio_t *bio);
/**
Write a byte
@param bio BIO handle
@return Returns 0 if successful, returns 1 otherwise
*/
static int bio_byteout(opj_bio_t *bio);
/**
Read a byte
@param bio BIO handle
@return Returns 0 if successful, returns 1 otherwise
*/
static int bio_bytein(opj_bio_t *bio);
/*@}*/
/*@}*/
/*
==========================================================
local functions
==========================================================
*/
static int bio_byteout(opj_bio_t *bio) {
bio->buf = (bio->buf << 8) & 0xffff;
bio->ct = bio->buf == 0xff00 ? 7 : 8;
if (bio->bp >= bio->end) {
return 1;
}
*bio->bp++ = bio->buf >> 8;
return 0;
}
static int bio_bytein(opj_bio_t *bio) {
bio->buf = (bio->buf << 8) & 0xffff;
bio->ct = bio->buf == 0xff00 ? 7 : 8;
if (bio->bp >= bio->end) {
return 1;
}
bio->buf |= *bio->bp++;
return 0;
}
static void bio_putbit(opj_bio_t *bio, int b) {
if (bio->ct == 0) {
bio_byteout(bio);
}
bio->ct--;
bio->buf |= b << bio->ct;
}
/* MOD antonin */
static int bio_getbit(opj_bio_t *bio) {
/* DOM */
if (bio->ct == 0) {
bio_bytein(bio);
}
bio->ct--;
return (bio->buf >> bio->ct) & 1;
}
/*
==========================================================
Bit Input/Output interface
==========================================================
*/
opj_bio_t* bio_create() {
opj_bio_t *bio = (opj_bio_t*)opj_malloc(sizeof(opj_bio_t));
return bio;
}
void bio_destroy(opj_bio_t *bio) {
if(bio) {
opj_free(bio);
}
}
int bio_numbytes(opj_bio_t *bio) {
return (bio->bp - bio->start);
}
void bio_init_enc(opj_bio_t *bio, unsigned char *bp, int len) {
bio->start = bp;
bio->end = bp + len;
bio->bp = bp;
bio->buf = 0;
bio->ct = 8;
}
void bio_init_dec(opj_bio_t *bio, unsigned char *bp, int len) {
bio->start = bp;
bio->end = bp + len;
bio->bp = bp;
bio->buf = 0;
bio->ct = 0;
}
void bio_write(opj_bio_t *bio, int v, int n) {
int i;
for (i = n - 1; i >= 0; i--) {
bio_putbit(bio, (v >> i) & 1);
}
}
int bio_read(opj_bio_t *bio, int n) {
int i, v;
v = 0;
for (i = n - 1; i >= 0; i--) {
v += bio_getbit(bio) << i;
}
return v;
}
int bio_flush(opj_bio_t *bio) {
bio->ct = 0;
if (bio_byteout(bio)) {
return 1;
}
if (bio->ct == 7) {
bio->ct = 0;
if (bio_byteout(bio)) {
return 1;
}
}
return 0;
}
int bio_inalign(opj_bio_t *bio) {
bio->ct = 0;
if ((bio->buf & 0xff) == 0xff) {
if (bio_bytein(bio)) {
return 1;
}
bio->ct = 0;
}
return 0;
}

132
jp3d/libjp3dvm/bio.h Executable file
View File

@@ -0,0 +1,132 @@
/*
* Copyright (c) 2001-2003, David Janssens
* Copyright (c) 2002-2003, Yannick Verschueren
* Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
* Copyright (c) 2005, Herv<72> Drolon, FreeImage Team
* Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef __BIO_H
#define __BIO_H
/**
@file bio.h
@brief Implementation of an individual bit input-output (BIO)
The functions in BIO.C have for goal to realize an individual bit input - output.
*/
/** @defgroup BIO BIO - Individual bit input-output stream */
/*@{*/
/**
Individual bit input-output stream (BIO)
*/
typedef struct opj_bio {
/** pointer to the start of the buffer */
unsigned char *start;
/** pointer to the end of the buffer */
unsigned char *end;
/** pointer to the present position in the buffer */
unsigned char *bp;
/** temporary place where each byte is read or written */
unsigned int buf;
/** coder : number of bits free to write. decoder : number of bits read */
int ct;
} opj_bio_t;
/** @name Funciones generales */
/*@{*/
/* ----------------------------------------------------------------------- */
/**
Create a new BIO handle
@return Returns a new BIO handle if successful, returns NULL otherwise
*/
opj_bio_t* bio_create();
/**
Destroy a previously created BIO handle
@param bio BIO handle to destroy
*/
void bio_destroy(opj_bio_t *bio);
/**
Number of bytes written.
@param bio BIO handle
@return Returns the number of bytes written
*/
int bio_numbytes(opj_bio_t *bio);
/**
Init encoder
@param bio BIO handle
@param bp Output buffer
@param len Output buffer length
*/
void bio_init_enc(opj_bio_t *bio, unsigned char *bp, int len);
/**
Init decoder
@param bio BIO handle
@param bp Input buffer
@param len Input buffer length
*/
void bio_init_dec(opj_bio_t *bio, unsigned char *bp, int len);
/**
Write bits
@param bio BIO handle
@param v Value of bits
@param n Number of bits to write
*/
void bio_write(opj_bio_t *bio, int v, int n);
/**
Read bits
@param bio BIO handle
@param n Number of bits to read
@return Returns the corresponding read number
*/
int bio_read(opj_bio_t *bio, int n);
/**
Flush bits
@param bio BIO handle
@return Returns 1 if successful, returns 0 otherwise
*/
int bio_flush(opj_bio_t *bio);
/**
Passes the ending bits (coming from flushing)
@param bio BIO handle
@return Returns 1 if successful, returns 0 otherwise
*/
int bio_inalign(opj_bio_t *bio);
/**
Read a bit
@param bio BIO handle
@return Returns the read bit
*/
/* MOD antonin */
//int bio_getbit(opj_bio_t *bio);
/* DOM */
/* ----------------------------------------------------------------------- */
/*@}*/
/*@}*/
#endif /* __BIO_H */

217
jp3d/libjp3dvm/cio.c Executable file
View File

@@ -0,0 +1,217 @@
/*
* Copyright (c) 2001-2003, David Janssens
* Copyright (c) 2002-2003, Yannick Verschueren
* Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
* Copyright (c) 2005, Herv<72> Drolon, FreeImage Team
* Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#include "opj_includes.h"
/* ----------------------------------------------------------------------- */
opj_cio_t* OPJ_CALLCONV opj_cio_open(opj_common_ptr cinfo, unsigned char *buffer, int length) {
opj_cp_t *cp = NULL;
opj_cio_t *cio = (opj_cio_t*)opj_malloc(sizeof(opj_cio_t));
if(!cio) return NULL;
cio->cinfo = cinfo;
if(buffer && length) {
/* wrap a user buffer containing the encoded image */
cio->openmode = OPJ_STREAM_READ;
cio->buffer = buffer;
cio->length = length;
}
else if(!buffer && !length && cinfo) {
/* allocate a buffer for the encoded image */
cio->openmode = OPJ_STREAM_WRITE;
switch(cinfo->codec_format) {
case CODEC_J3D:
case CODEC_J2K:
cp = ((opj_j3d_t*)cinfo->j3d_handle)->cp;
break;
default:
opj_free(cio);
return NULL;
}
cio->length = cp->tdx * cp->tdy * cp->tdz * cp->tw * cp->th * cp->tl * 4;
cio->buffer = (unsigned char *)opj_malloc(cio->length);
if(!cio->buffer) {
opj_free(cio);
return NULL;
}
}
else {
opj_free(cio);
return NULL;
}
/* Initialize byte IO */
cio->start = cio->buffer;
cio->end = cio->buffer + cio->length;
cio->bp = cio->buffer;
return cio;
}
void OPJ_CALLCONV opj_cio_close(opj_cio_t *cio) {
if(cio) {
if(cio->openmode == OPJ_STREAM_WRITE) {
/* destroy the allocated buffer */
opj_free(cio->buffer);
}
/* destroy the cio */
opj_free(cio);
}
}
/* ----------------------------------------------------------------------- */
/*
* Get position in byte stream.
*/
int OPJ_CALLCONV cio_tell(opj_cio_t *cio) {
return cio->bp - cio->start;
}
/*
* Set position in byte stream.
*
* pos : position, in number of bytes, from the beginning of the stream
*/
void OPJ_CALLCONV cio_seek(opj_cio_t *cio, int pos) {
cio->bp = cio->start + pos;
}
/*
* Number of bytes left before the end of the stream.
*/
int cio_numbytesleft(opj_cio_t *cio) {
return cio->end - cio->bp;
}
/*
* Get pointer to the current position in the stream.
*/
unsigned char *cio_getbp(opj_cio_t *cio) {
return cio->bp;
}
/*
* Write a byte.
*/
bool cio_byteout(opj_cio_t *cio, unsigned char v) {
if (cio->bp >= cio->end) {
opj_event_msg(cio->cinfo, EVT_ERROR, "write error\n");
return false;
}
*cio->bp++ = v;
return true;
}
/*
* Read a byte.
*/
unsigned char cio_bytein(opj_cio_t *cio) {
if (cio->bp >= cio->end) {
opj_event_msg(cio->cinfo, EVT_ERROR, "read error\n");
return 0;
}
return *cio->bp++;
}
/*
* Write some bytes.
*
* v : value to write
* n : number of bytes to write
*/
unsigned int cio_write(opj_cio_t *cio, unsigned int v, int n) {
int i;
for (i = n - 1; i >= 0; i--) {
if( !cio_byteout(cio, (unsigned char) ((v >> (i << 3)) & 0xff)) )
return 0;
}
return n;
}
/*
* Read some bytes.
*
* n : number of bytes to read
*
* return : value of the n bytes read
*/
unsigned int cio_read(opj_cio_t *cio, int n) {
int i;
unsigned int v;
v = 0;
for (i = n - 1; i >= 0; i--) {
v += cio_bytein(cio) << (i << 3);
}
return v;
}
/*
* Skip some bytes.
*
* n : number of bytes to skip
*/
void cio_skip(opj_cio_t *cio, int n) {
cio->bp += n;
}
/*
* Write some bytes.
*
* v : value to write
* n : number of bytes to write
*/
int cio_write_int(opj_cio_t *cio, int v, int n) {
int i;
for (i = n - 1; i >= 0; i--) {
if( !cio_byteout(cio, (char) ((v >> (i << 3)) & 0xff)) )
return 0;
}
return n;
}
/*
* Read some bytes.
*
* n : number of bytes to read
*
* return : value of the n bytes read
*/
int cio_read_int(opj_cio_t *cio, int n) {
int i;
int v;
v = 0;
for (i = n - 1; i >= 0; i--) {
v += cio_bytein(cio) << (i << 3);
}
return v;
}

100
jp3d/libjp3dvm/cio.h Executable file
View File

@@ -0,0 +1,100 @@
/*
* Copyright (c) 2001-2003, David Janssens
* Copyright (c) 2002-2003, Yannick Verschueren
* Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
* Copyright (c) 2005, Herv<72> Drolon, FreeImage Team
* Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef __CIO_H
#define __CIO_H
/**
@file cio.h
@brief Implementation of a byte input-output process (CIO)
The functions in CIO.C have for goal to realize a byte input / output process.
*/
/** @defgroup CIO CIO - byte input-output stream */
/*@{*/
/** @name Funciones generales (see also openjpeg.h) */
/*@{*/
/* ----------------------------------------------------------------------- */
/**
Number of bytes left before the end of the stream
@param cio CIO handle
@return Returns the number of bytes before the end of the stream
*/
int cio_numbytesleft(opj_cio_t *cio);
/**
Get pointer to the current position in the stream
@param cio CIO handle
@return Returns a pointer to the current position
*/
unsigned char *cio_getbp(opj_cio_t *cio);
/**
Write some bytes
@param cio CIO handle
@param v Value to write
@param n Number of bytes to write
@return Returns the number of bytes written or 0 if an error occured
*/
unsigned int cio_write(opj_cio_t *cio, unsigned int v, int n);
/**
Read some bytes
@param cio CIO handle
@param n Number of bytes to read
@return Returns the value of the n bytes read
*/
unsigned int cio_read(opj_cio_t *cio, int n);
/**
Skip some bytes
@param cio CIO handle
@param n Number of bytes to skip
*/
void cio_skip(opj_cio_t *cio, int n);
/**
Write some bytes
@param cio CIO handle
@param v Signed integer value to write
@param n Number of bytes to write
@return Returns the number of bytes written or 0 if an error occured
*/
int cio_write_int(opj_cio_t *cio, int v, int n);
/**
Read some bytes
@param cio CIO handle
@param n Number of bytes to read
@return Returns the value of the n bytes read
*/
int cio_read_int(opj_cio_t *cio, int n);
/* ----------------------------------------------------------------------- */
/*@}*/
/*@}*/
#endif /* __CIO_H */

676
jp3d/libjp3dvm/dirent.h Executable file
View File

@@ -0,0 +1,676 @@
/*
* uce-dirent.h - operating system independent dirent implementation
*
* Copyright (C) 1998-2002 Toni Ronkko
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* ``Software''), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL TONI RONKKO BE LIABLE FOR ANY CLAIM, DAMAGES OR
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*
*
* May 28 1998, Toni Ronkko <tronkko@messi.uku.fi>
*
* $Id: uce-dirent.h,v 1.7 2002/05/13 10:48:35 tr Exp $
*
* $Log: uce-dirent.h,v $
* Revision 1.7 2002/05/13 10:48:35 tr
* embedded some source code directly to the header so that no source
* modules need to be included in the MS Visual C project using the
* interface, removed all the dependencies to other headers of the `uce'
* library so that the header can be made public
*
* Revision 1.6 2002/04/12 16:22:04 tr
* Unified Compiling Environment (UCE) replaced `std' library
*
* Revision 1.5 2001/07/20 16:33:40 tr
* moved to `std' library and re-named defines accordingly
*
* Revision 1.4 2001/07/10 16:47:18 tronkko
* revised comments
*
* Revision 1.3 2001/01/11 13:16:43 tr
* using ``uce-machine.h'' for finding out defines such as `FREEBSD'
*
* Revision 1.2 2000/10/08 16:00:41 tr
* copy of FreeBSD man page
*
* Revision 1.1 2000/07/10 05:53:16 tr
* Initial revision
*
* Revision 1.2 1998/07/19 18:29:14 tr
* Added error reporting capabilities and some asserts.
*
* Revision 1.1 1998/07/04 16:27:51 tr
* Initial revision
*
*
* MSVC 1.0 scans automatic dependencies incorrectly when your project
* contains this very header. The problem is that MSVC cannot handle
* include directives inside #if..#endif block those are never entered.
* Since this header ought to compile in many different operating systems,
* there had to be several conditional blocks that are compiled only in
* operating systems for what they were designed for. MSVC 1.0 cannot
* handle inclusion of sys/dir.h in a part that is compiled only in Apollo
* operating system. To fix the problem you need to insert DIR.H into
* SYSINCL.DAT located in MSVC\BIN directory and restart visual C++.
* Consult manuals for more informaton about the problem.
*
* Since many UNIX systems have dirent.h we assume to have one also.
* However, if your UNIX system does not have dirent.h you can download one
* for example at: http://ftp.uni-mannheim.de/ftp/GNU/dirent/dirent.tar.gz.
* You can also see if you have one of dirent.h, direct.h, dir.h, ndir.h,
* sys/dir.h and sys/ndir.h somewhere. Try defining HAVE_DIRENT_H,
* HAVE_DIRECT_H, HAVE_DIR_H, HAVE_NDIR_H, HAVE_SYS_DIR_H and
* HAVE_SYS_NDIR_H according to the files found.
*/
#ifndef DIRENT_H
#define DIRENT_H
#define DIRENT_H_INCLUDED
/* find out platform */
#if defined(MSDOS) /* MS-DOS */
#elif defined(__MSDOS__) /* Turbo C/Borland */
# define MSDOS
#elif defined(__DOS__) /* Watcom */
# define MSDOS
#endif
#if defined(WIN32) /* MS-Windows */
#elif defined(__NT__) /* Watcom */
# define WIN32
#elif defined(_WIN32) /* Microsoft */
# define WIN32
#elif defined(__WIN32__) /* Borland */
# define WIN32
#endif
/*
* See what kind of dirent interface we have unless autoconf has already
* determinated that.
*/
#if !defined(HAVE_DIRENT_H) && !defined(HAVE_DIRECT_H) && !defined(HAVE_SYS_DIR_H) && !defined(HAVE_NDIR_H) && !defined(HAVE_SYS_NDIR_H) && !defined(HAVE_DIR_H)
# if defined(_MSC_VER) /* Microsoft C/C++ */
/* no dirent.h */
# elif defined(__BORLANDC__) /* Borland C/C++ */
# define HAVE_DIRENT_H
# define VOID_CLOSEDIR
# elif defined(__TURBOC__) /* Borland Turbo C */
/* no dirent.h */
# elif defined(__WATCOMC__) /* Watcom C/C++ */
# define HAVE_DIRECT_H
# elif defined(__apollo) /* Apollo */
# define HAVE_SYS_DIR_H
# elif defined(__hpux) /* HP-UX */
# define HAVE_DIRENT_H
# elif defined(__alpha) || defined(__alpha__) /* Alpha OSF1 */
# error "not implemented"
# elif defined(__sgi) /* Silicon Graphics */
# define HAVE_DIRENT_H
# elif defined(sun) || defined(_sun) /* Sun Solaris */
# define HAVE_DIRENT_H
# elif defined(__FreeBSD__) /* FreeBSD */
# define HAVE_DIRENT_H
# elif defined(__linux__) /* Linux */
# define HAVE_DIRENT_H
# elif defined(__GNUC__) /* GNU C/C++ */
# define HAVE_DIRENT_H
# else
# error "not implemented"
# endif
#endif
/* include proper interface headers */
#if defined(HAVE_DIRENT_H)
# include <dirent.h>
# ifdef FREEBSD
# define NAMLEN(dp) ((int)((dp)->d_namlen))
# else
# define NAMLEN(dp) ((int)(strlen((dp)->d_name)))
# endif
#elif defined(HAVE_NDIR_H)
# include <ndir.h>
# define NAMLEN(dp) ((int)((dp)->d_namlen))
#elif defined(HAVE_SYS_NDIR_H)
# include <sys/ndir.h>
# define NAMLEN(dp) ((int)((dp)->d_namlen))
#elif defined(HAVE_DIRECT_H)
# include <direct.h>
# define NAMLEN(dp) ((int)((dp)->d_namlen))
#elif defined(HAVE_DIR_H)
# include <dir.h>
# define NAMLEN(dp) ((int)((dp)->d_namlen))
#elif defined(HAVE_SYS_DIR_H)
# include <sys/types.h>
# include <sys/dir.h>
# ifndef dirent
# define dirent direct
# endif
# define NAMLEN(dp) ((int)((dp)->d_namlen))
#elif defined(MSDOS) || defined(WIN32)
/* figure out type of underlaying directory interface to be used */
# if defined(WIN32)
# define DIRENT_WIN32_INTERFACE
# elif defined(MSDOS)
# define DIRENT_MSDOS_INTERFACE
# else
# error "missing native dirent interface"
# endif
/*** WIN32 specifics ***/
# if defined(DIRENT_WIN32_INTERFACE)
# include <windows.h>
# if !defined(DIRENT_MAXNAMLEN)
# define DIRENT_MAXNAMLEN (MAX_PATH)
# endif
/*** MS-DOS specifics ***/
# elif defined(DIRENT_MSDOS_INTERFACE)
# include <dos.h>
/* Borland defines file length macros in dir.h */
# if defined(__BORLANDC__)
# include <dir.h>
# if !defined(DIRENT_MAXNAMLEN)
# define DIRENT_MAXNAMLEN ((MAXFILE)+(MAXEXT))
# endif
# if !defined(_find_t)
# define _find_t find_t
# endif
/* Turbo C defines ffblk structure in dir.h */
# elif defined(__TURBOC__)
# include <dir.h>
# if !defined(DIRENT_MAXNAMLEN)
# define DIRENT_MAXNAMLEN ((MAXFILE)+(MAXEXT))
# endif
# define DIRENT_USE_FFBLK
/* MSVC */
# elif defined(_MSC_VER)
# if !defined(DIRENT_MAXNAMLEN)
# define DIRENT_MAXNAMLEN (12)
# endif
/* Watcom */
# elif defined(__WATCOMC__)
# if !defined(DIRENT_MAXNAMLEN)
# if defined(__OS2__) || defined(__NT__)
# define DIRENT_MAXNAMLEN (255)
# else
# define DIRENT_MAXNAMLEN (12)
# endif
# endif
# endif
# endif
/*** generic MS-DOS and MS-Windows stuff ***/
# if !defined(NAME_MAX) && defined(DIRENT_MAXNAMLEN)
# define NAME_MAX DIRENT_MAXNAMLEN
# endif
# if NAME_MAX < DIRENT_MAXNAMLEN
# error "assertion failed: NAME_MAX >= DIRENT_MAXNAMLEN"
# endif
/*
* Substitute for real dirent structure. Note that `d_name' field is a
* true character array although we have it copied in the implementation
* dependent data. We could save some memory if we had declared `d_name'
* as a pointer refering the name within implementation dependent data.
* We have not done that since some code may rely on sizeof(d_name) to be
* something other than four. Besides, directory entries are typically so
* small that it takes virtually no time to copy them from place to place.
*/
typedef struct dirent {
char d_name[NAME_MAX + 1];
/*** Operating system specific part ***/
# if defined(DIRENT_WIN32_INTERFACE) /*WIN32*/
WIN32_FIND_DATA data;
# elif defined(DIRENT_MSDOS_INTERFACE) /*MSDOS*/
# if defined(DIRENT_USE_FFBLK)
struct ffblk data;
# else
struct _find_t data;
# endif
# endif
} dirent;
/* DIR substitute structure containing directory name. The name is
* essential for the operation of ``rewinndir'' function. */
typedef struct DIR {
char *dirname; /* directory being scanned */
dirent current; /* current entry */
int dirent_filled; /* is current un-processed? */
/*** Operating system specific part ***/
# if defined(DIRENT_WIN32_INTERFACE)
HANDLE search_handle;
# elif defined(DIRENT_MSDOS_INTERFACE)
# endif
} DIR;
# ifdef __cplusplus
extern "C" {
# endif
/* supply prototypes for dirent functions */
static DIR *opendir (const char *dirname);
static struct dirent *readdir (DIR *dirp);
static int closedir (DIR *dirp);
static void rewinddir (DIR *dirp);
/*
* Implement dirent interface as static functions so that the user does not
* need to change his project in any way to use dirent function. With this
* it is sufficient to include this very header from source modules using
* dirent functions and the functions will be pulled in automatically.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <errno.h>
/* use ffblk instead of _find_t if requested */
#if defined(DIRENT_USE_FFBLK)
# define _A_ARCH (FA_ARCH)
# define _A_HIDDEN (FA_HIDDEN)
# define _A_NORMAL (0)
# define _A_RDONLY (FA_RDONLY)
# define _A_SUBDIR (FA_DIREC)
# define _A_SYSTEM (FA_SYSTEM)
# define _A_VOLID (FA_LABEL)
# define _dos_findnext(dest) findnext(dest)
# define _dos_findfirst(name,flags,dest) findfirst(name,dest,flags)
#endif
static int _initdir (DIR *p);
static const char *_getdirname (const struct dirent *dp);
static void _setdirname (struct DIR *dirp);
/*
* <function name="opendir">
* <intro>open directory stream for reading
* <syntax>DIR *opendir (const char *dirname);
*
* <desc>Open named directory stream for read and return pointer to the
* internal working area that is used for retrieving individual directory
* entries. The internal working area has no fields of your interest.
*
* <ret>Returns a pointer to the internal working area or NULL in case the
* directory stream could not be opened. Global `errno' variable will set
* in case of error as follows:
*
* <table>
* [EACESS |Permission denied.
* [EMFILE |Too many open files used by the process.
* [ENFILE |Too many open files in system.
* [ENOENT |Directory does not exist.
* [ENOMEM |Insufficient memory.
* [ENOTDIR |dirname does not refer to directory. This value is not
* reliable on MS-DOS and MS-Windows platforms. Many
* implementations return ENOENT even when the name refers to a
* file.]
* </table>
* </function>
*/
static DIR *opendir(const char *dirname)
{
DIR *dirp;
assert (dirname != NULL);
dirp = (DIR*)malloc (sizeof (struct DIR));
if (dirp != NULL) {
char *p;
/* allocate room for directory name */
dirp->dirname = (char*) malloc (strlen (dirname) + 1 + strlen ("\\*.*"));
if (dirp->dirname == NULL) {
/* failed to duplicate directory name. errno set by malloc() */
free (dirp);
return NULL;
}
/* Copy directory name while appending directory separator and "*.*".
* Directory separator is not appended if the name already ends with
* drive or directory separator. Directory separator is assumed to be
* '/' or '\' and drive separator is assumed to be ':'. */
strcpy (dirp->dirname, dirname);
p = strchr (dirp->dirname, '\0');
if (dirp->dirname < p &&
*(p - 1) != '\\' && *(p - 1) != '/' && *(p - 1) != ':')
{
strcpy (p++, "\\");
}
# ifdef DIRENT_WIN32_INTERFACE
strcpy (p, "*"); /*scan files with and without extension in win32*/
# else
strcpy (p, "*.*"); /*scan files with and without extension in DOS*/
# endif
/* open stream */
if (_initdir (dirp) == 0) {
/* initialization failed */
free (dirp->dirname);
free (dirp);
return NULL;
}
}
return dirp;
}
/*
* <function name="readdir">
* <intro>read a directory entry
* <syntax>struct dirent *readdir (DIR *dirp);
*
* <desc>Read individual directory entry and return pointer to a structure
* containing the name of the entry. Individual directory entries returned
* include normal files, sub-directories, pseudo-directories "." and ".."
* and also volume labels, hidden files and system files in MS-DOS and
* MS-Windows. You might want to use stat(2) function to determinate which
* one are you dealing with. Many dirent implementations already contain
* equivalent information in dirent structure but you cannot depend on
* this.
*
* The dirent structure contains several system dependent fields that
* generally have no interest to you. The only interesting one is char
* d_name[] that is also portable across different systems. The d_name
* field contains the name of the directory entry without leading path.
* While d_name is portable across different systems the actual storage
* capacity of d_name varies from system to system and there is no portable
* way to find out it at compile time as different systems define the
* capacity of d_name with different macros and some systems do not define
* capacity at all (besides actual declaration of the field). If you really
* need to find out storage capacity of d_name then you might want to try
* NAME_MAX macro. The NAME_MAX is defined in POSIX standard althought
* there are many MS-DOS and MS-Windows implementations those do not define
* it. There are also systems that declare d_name as "char d_name[1]" and
* then allocate suitable amount of memory at run-time. Thanks to Alain
* Decamps (Alain.Decamps@advalvas.be) for pointing it out to me.
*
* This all leads to the fact that it is difficult to allocate space
* for the directory names when the very same program is being compiled on
* number of operating systems. Therefore I suggest that you always
* allocate space for directory names dynamically.
*
* <ret>
* Returns a pointer to a structure containing name of the directory entry
* in `d_name' field or NULL if there was an error. In case of an error the
* global `errno' variable will set as follows:
*
* <table>
* [EBADF |dir parameter refers to an invalid directory stream. This value
* is not set reliably on all implementations.]
* </table>
* </function>
*/
static struct dirent *
readdir (DIR *dirp)
{
assert(dirp != NULL);
if (dirp == NULL) {
errno = EBADF;
return NULL;
}
#if defined(DIRENT_WIN32_INTERFACE)
if (dirp->search_handle == INVALID_HANDLE_VALUE) {
/* directory stream was opened/rewound incorrectly or it ended normally */
errno = EBADF;
return NULL;
}
#endif
if (dirp->dirent_filled != 0) {
/*
* Directory entry has already been retrieved and there is no need to
* retrieve a new one. Directory entry will be retrieved in advance
* when the user calls readdir function for the first time. This is so
* because real dirent has separate functions for opening and reading
* the stream whereas Win32 and DOS dirents open the stream
* automatically when we retrieve the first file. Therefore, we have to
* save the first file when opening the stream and later we have to
* return the saved entry when the user tries to read the first entry.
*/
dirp->dirent_filled = 0;
} else {
/* fill in entry and return that */
#if defined(DIRENT_WIN32_INTERFACE)
if (FindNextFile (dirp->search_handle, &dirp->current.data) == FALSE) {
/* Last file has been processed or an error occured */
FindClose (dirp->search_handle);
dirp->search_handle = INVALID_HANDLE_VALUE;
errno = ENOENT;
return NULL;
}
# elif defined(DIRENT_MSDOS_INTERFACE)
if (_dos_findnext (&dirp->current.data) != 0) {
/* _dos_findnext and findnext will set errno to ENOENT when no
* more entries could be retrieved. */
return NULL;
}
# endif
_setdirname (dirp);
assert (dirp->dirent_filled == 0);
}
return &dirp->current;
}
/*
* <function name="closedir">
* <intro>close directory stream.
* <syntax>int closedir (DIR *dirp);
*
* <desc>Close directory stream opened by the `opendir' function. Close of
* directory stream invalidates the DIR structure as well as previously read
* dirent entry.
*
* <ret>The function typically returns 0 on success and -1 on failure but
* the function may be declared to return void on same systems. At least
* Borland C/C++ and some UNIX implementations use void as a return type.
* The dirent wrapper tries to define VOID_CLOSEDIR whenever closedir is
* known to return nothing. The very same definition is made by the GNU
* autoconf if you happen to use it.
*
* The global `errno' variable will set to EBADF in case of error.
* </function>
*/
static int
closedir (DIR *dirp)
{
int retcode = 0;
/* make sure that dirp points to legal structure */
assert (dirp != NULL);
if (dirp == NULL) {
errno = EBADF;
return -1;
}
/* free directory name and search handles */
if (dirp->dirname != NULL) free (dirp->dirname);
#if defined(DIRENT_WIN32_INTERFACE)
if (dirp->search_handle != INVALID_HANDLE_VALUE) {
if (FindClose (dirp->search_handle) == FALSE) {
/* Unknown error */
retcode = -1;
errno = EBADF;
}
}
#endif
/* clear dirp structure to make sure that it cannot be used anymore*/
memset (dirp, 0, sizeof (*dirp));
# if defined(DIRENT_WIN32_INTERFACE)
dirp->search_handle = INVALID_HANDLE_VALUE;
# endif
free (dirp);
return retcode;
}
/*
* <function name="rewinddir">
* <intro>rewind directory stream to the beginning
* <syntax>void rewinddir (DIR *dirp);
*
* <desc>Rewind directory stream to the beginning so that the next call of
* readdir() returns the very first directory entry again. However, note
* that next call of readdir() may not return the same directory entry as it
* did in first time. The directory stream may have been affected by newly
* created files.
*
* Almost every dirent implementation ensure that rewinddir will update
* the directory stream to reflect any changes made to the directory entries
* since the previous ``opendir'' or ``rewinddir'' call. Keep an eye on
* this if your program depends on the feature. I know at least one dirent
* implementation where you are required to close and re-open the stream to
* see the changes.
*
* <ret>Returns nothing. If something went wrong while rewinding, you will
* notice it later when you try to retrieve the first directory entry.
*/
static void
rewinddir (DIR *dirp)
{
/* make sure that dirp is legal */
assert (dirp != NULL);
if (dirp == NULL) {
errno = EBADF;
return;
}
assert (dirp->dirname != NULL);
/* close previous stream */
#if defined(DIRENT_WIN32_INTERFACE)
if (dirp->search_handle != INVALID_HANDLE_VALUE) {
if (FindClose (dirp->search_handle) == FALSE) {
/* Unknown error */
errno = EBADF;
}
}
#endif
/* re-open previous stream */
if (_initdir (dirp) == 0) {
/* initialization failed but we cannot deal with error. User will notice
* error later when she tries to retrieve first directory enty. */
/*EMPTY*/;
}
}
/*
* Open native directory stream object and retrieve first file.
* Be sure to close previous stream before opening new one.
*/
static int
_initdir (DIR *dirp)
{
assert (dirp != NULL);
assert (dirp->dirname != NULL);
dirp->dirent_filled = 0;
# if defined(DIRENT_WIN32_INTERFACE)
/* Open stream and retrieve first file */
dirp->search_handle = FindFirstFile (dirp->dirname, &dirp->current.data);
if (dirp->search_handle == INVALID_HANDLE_VALUE) {
/* something went wrong but we don't know what. GetLastError() could
* give us more information about the error, but then we should map
* the error code into errno. */
errno = ENOENT;
return 0;
}
# elif defined(DIRENT_MSDOS_INTERFACE)
if (_dos_findfirst (dirp->dirname,
_A_SUBDIR | _A_RDONLY | _A_ARCH | _A_SYSTEM | _A_HIDDEN,
&dirp->current.data) != 0)
{
/* _dos_findfirst and findfirst will set errno to ENOENT when no
* more entries could be retrieved. */
return 0;
}
# endif
/* initialize DIR and it's first entry */
_setdirname (dirp);
dirp->dirent_filled = 1;
return 1;
}
/*
* Return implementation dependent name of the current directory entry.
*/
static const char *
_getdirname (const struct dirent *dp)
{
#if defined(DIRENT_WIN32_INTERFACE)
return dp->data.cFileName;
#elif defined(DIRENT_USE_FFBLK)
return dp->data.ff_name;
#else
return dp->data.name;
#endif
}
/*
* Copy name of implementation dependent directory entry to the d_name field.
*/
static void
_setdirname (struct DIR *dirp) {
/* make sure that d_name is long enough */
assert (strlen (_getdirname (&dirp->current)) <= NAME_MAX);
strncpy (dirp->current.d_name,
_getdirname (&dirp->current),
NAME_MAX);
dirp->current.d_name[NAME_MAX] = '\0'; /*char d_name[NAME_MAX+1]*/
}
# ifdef __cplusplus
}
# endif
# define NAMLEN(dp) ((int)(strlen((dp)->d_name)))
#else
# error "missing dirent interface"
#endif
#endif /*DIRENT_H*/

1016
jp3d/libjp3dvm/dwt.c Executable file

File diff suppressed because it is too large Load Diff

100
jp3d/libjp3dvm/dwt.h Executable file
View File

@@ -0,0 +1,100 @@
/*
* Copyright (c) 2001-2003, David Janssens
* Copyright (c) 2002-2003, Yannick Verschueren
* Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
* Copyright (c) 2005, Herv<72> Drolon, FreeImage Team
* Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
* Copyrigth (c) 2006, M<>nica D<>ez, LPI-UVA, Spain
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef __DWT_H
#define __DWT_H
/**
@file dwt.h
@brief Implementation of a discrete wavelet transform (DWT)
The functions in DWT.C have for goal to realize forward and inverse discret wavelet
transform with filter 5-3 (reversible) and filter 9-7 (irreversible). The functions in
DWT.C are used by some function in TCD.C.
*/
/** @defgroup DWT DWT - Implementation of a discrete wavelet transform */
/*@{*/
/**
DCCS-LIWT properties
*/
typedef struct opj_wtfilt {
double *LPS;
int lenLPS;
double *HPS;
int lenHPS;
} opj_wtfilt_t;
/** @name Funciones generales */
/*@{*/
/* ----------------------------------------------------------------------- */
/**
Forward 5-3 wavelet tranform in 3-D.
Apply a reversible DWT transform to a component of an volume.
@param tilec Tile component information (current tile)
@param dwtid Number of identification of wavelet kernel(s) used in DWT in each direction
*/
void dwt_encode(opj_tcd_tilecomp_t * tilec, int dwtid[3]);
/**
Inverse 5-3 wavelet tranform in 3-D.
Apply a reversible inverse DWT transform to a component of an volume.
@param tilec Tile component information (current tile)
@param stops Number of decoded resolution levels in each dimension
@param dwtid Number of identification of wavelet kernel(s) used in DWT in each dimension
*/
void dwt_decode(opj_tcd_tilecomp_t * tilec, int stops[3], int dwtid[3]);
/* ----------------------------------------------------------------------- */
/**
Get the gain of a subband for the reversible 3-D DWT.
@param orient Number that identifies the subband (0->LLL, 1->HLL, 2->LHL, 3->HHL, 4->LLH, 5->HLH, 6->LHH, 7->HHH)
@param reversible Wavelet transformation type
@return Returns 0 if orient = 0, returns 1 if orient = 1,2 or 4, returns 2 if orient = 3,5 or 6, returns 3 otherwise
*/
int dwt_getgain(int orient, int reversible);
/**
Get the norm of a wavelet function of a subband at a specified level for the reversible 5-3 DWT or irreversible 9-7 in 3-D.
@param orient Band of the wavelet function
@param level Levels of the wavelet function in X,Y,Z axis
@param dwtid Wavelet transformation identifier
@return Returns the norm of the wavelet function
*/
double dwt_getnorm(int orient, int level[3], int dwtid[3]);
/* ----------------------------------------------------------------------- */
/**
Calcula el valor del escal<61>n de cuantificaci<63>n correspondiente a cada subbanda.
@param tccp Tile component coding parameters
@param prec Precision of data
*/
void dwt_calc_explicit_stepsizes(opj_tccp_t * tccp, int prec);
/*@}*/
#endif /* __DWT_H */

181
jp3d/libjp3dvm/event.c Executable file
View File

@@ -0,0 +1,181 @@
/*
* Copyright (c) 2005, Herv<72> Drolon, FreeImage Team
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#include "opj_includes.h"
// ==========================================================
// Utility functions
// ==========================================================
#ifndef WIN32
static char*
i2a(unsigned i, char *a, unsigned r) {
if (i/r > 0) a = i2a(i/r,a,r);
*a = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[i%r];
return a+1;
}
/**
Transforms integer i into an ascii string and stores the result in a;
string is encoded in the base indicated by r.
@param i Number to be converted
@param a String result
@param r Base of value; must be in the range 2 - 36
@return Returns a
*/
static char *
_itoa(int i, char *a, int r) {
r = ((r < 2) || (r > 36)) ? 10 : r;
if(i < 0) {
*a = '-';
*i2a(-i, a+1, r) = 0;
}
else *i2a(i, a, r) = 0;
return a;
}
#endif // !WIN32
/* ----------------------------------------------------------------------- */
opj_event_mgr_t* OPJ_CALLCONV opj_set_event_mgr(opj_common_ptr cinfo, opj_event_mgr_t *event_mgr, void *context) {
if(cinfo) {
opj_event_mgr_t *previous = cinfo->event_mgr;
cinfo->event_mgr = event_mgr;
cinfo->client_data = context;
return previous;
}
return NULL;
}
bool opj_event_msg(opj_common_ptr cinfo, int event_type, const char *fmt, ...) {
#define MSG_SIZE 512 /* 512 bytes should be more than enough for a short message */
opj_msg_callback msg_handler = NULL;
opj_event_mgr_t *event_mgr = cinfo->event_mgr;
if(event_mgr != NULL) {
switch(event_type) {
case EVT_ERROR:
msg_handler = event_mgr->error_handler;
break;
case EVT_WARNING:
msg_handler = event_mgr->warning_handler;
break;
case EVT_INFO:
msg_handler = event_mgr->info_handler;
break;
default:
break;
}
if(msg_handler == NULL) {
return false;
}
} else {
return false;
}
if ((fmt != NULL) && (event_mgr != NULL)) {
va_list arg;
int str_length, i, j;
char message[MSG_SIZE];
memset(message, 0, MSG_SIZE);
/* initialize the optional parameter list */
va_start(arg, fmt);
/* check the length of the format string */
str_length = (strlen(fmt) > MSG_SIZE) ? MSG_SIZE : strlen(fmt);
/* parse the format string and put the result in 'message' */
for (i = 0, j = 0; i < str_length; ++i) {
if (fmt[i] == '%') {
if (i + 1 < str_length) {
switch(tolower(fmt[i + 1])) {
case '%' :
message[j++] = '%';
break;
case 'o' : /* octal numbers */
{
char tmp[16];
_itoa(va_arg(arg, int), tmp, 8);
strcat(message, tmp);
j += strlen(tmp);
++i;
break;
}
case 'i' : /* decimal numbers */
case 'd' :
{
char tmp[16];
_itoa(va_arg(arg, int), tmp, 10);
strcat(message, tmp);
j += strlen(tmp);
++i;
break;
}
case 'x' : /* hexadecimal numbers */
{
char tmp[16];
_itoa(va_arg(arg, int), tmp, 16);
strcat(message, tmp);
j += strlen(tmp);
++i;
break;
}
case 's' : /* strings */
{
char *tmp = va_arg(arg, char*);
strcat(message, tmp);
j += strlen(tmp);
++i;
break;
}
case 'f' : /* floats */
{
char tmp[16];
double value = va_arg(arg, double);
sprintf(tmp, "%f", value);
strcat(message, tmp);
j += strlen(tmp);
++i;
break;
}
};
} else {
message[j++] = fmt[i];
}
} else {
message[j++] = fmt[i];
};
}
/* deinitialize the optional parameter list */
va_end(arg);
/* output the message to the user program */
msg_handler(message, cinfo->client_data);
}
return true;
}

58
jp3d/libjp3dvm/event.h Executable file
View File

@@ -0,0 +1,58 @@
/*
* Copyright (c) 2005, Herv<72> Drolon, FreeImage Team
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef __EVENT_H
#define __EVENT_H
/**
@file event.h
@brief Implementation of a event callback system
The functions in EVENT.C have for goal to send output messages (errors, warnings, debug) to the user.
*/
#define EVT_ERROR 1 /**< Error event type */
#define EVT_WARNING 2 /**< Warning event type */
#define EVT_INFO 4 /**< Debug event type */
/** @defgroup EVENT EVENT - Implementation of a event callback system */
/*@{*/
/** @name Funciones generales (see also openjpeg.h) */
/*@{*/
/* ----------------------------------------------------------------------- */
/**
Write formatted data to a string and send the string to a user callback.
@param cinfo Codec context info
@param event_type Event type or callback to use to send the message
@param fmt Format-control string (plus optionnal arguments)
@return Returns true if successful, returns false otherwise
*/
bool opj_event_msg(opj_common_ptr cinfo, int event_type, const char *fmt, ...);
/* ----------------------------------------------------------------------- */
/*@}*/
/*@}*/
#endif /* __EVENT_H */

119
libopenjpeg/int.c → jp3d/libjp3dvm/fix.h Normal file → Executable file
View File

@@ -1,5 +1,9 @@
/*
* Copyright (c) 2001-2002, David Janssens
* Copyright (c) 2001-2003, David Janssens
* Copyright (c) 2002-2003, Yannick Verschueren
* Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
* Copyright (c) 2005, Hervé Drolon, FreeImage Team
* Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -23,91 +27,36 @@
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef __FIX_H
#define __FIX_H
/*
* Get the minimum of two integers.
*
* returns a if a < b else b
*/
int int_min(int a, int b)
{
return a < b ? a : b;
#if defined(_MSC_VER) || defined(__BORLANDC__)
#define int64 __int64
#else
#define int64 long long
#endif
/**
@file fix.h
@brief Implementation of operations of specific multiplication (FIX)
The functions in FIX.H have for goal to realize specific multiplication.
*/
/** @defgroup FIX FIX - Implementation of operations of specific multiplication */
/*@{*/
/**
Multiply two fixed-precision rational numbers.
@param a
@param b
@return Returns a * b
*/
static int fix_mul(int a, int b) {
int64 temp = (int64) a * (int64) b >> 12;
return (int) ((temp >> 1) + (temp & 1)) ;
}
/*
* Get the maximum of two integers.
*
* returns a if a > b else b
*/
int int_max(int a, int b)
{
return a > b ? a : b;
}
/*@}*/
/*
* Clamp an integer inside an interval.
*
* return a if (min < a < max)
* return max if (a > max)
* return min if (a < min)
*/
int int_clamp(int a, int min, int max)
{
if (a < min)
return min;
if (a > max)
return max;
return a;
}
/*
* Get absolute value of integer.
*/
int int_abs(int a)
{
return a < 0 ? -a : a;
}
/*
* Divide an integer and round upwards.
*
* a divided by b
*/
int int_ceildiv(int a, int b)
{
return (a + b - 1) / b;
}
/*
* Divide an integer by a power of 2 and round upwards.
*
* a divided by 2^b
*/
int int_ceildivpow2(int a, int b)
{
return (a + (1 << b) - 1) >> b;
}
/*
* Divide an integer by a power of 2 and round downwards.
*
* a divided by 2^b
*/
int int_floordivpow2(int a, int b)
{
return a >> b;
}
/*
* Get logarithm of an integer and round downwards.
*
* log2(a)
*/
int int_floorlog2(int a)
{
int l;
for (l = 0; a > 1; l++) {
a >>= 1;
}
return l;
}
#endif /* __FIX_H */

122
jp3d/libjp3dvm/int.h Executable file
View File

@@ -0,0 +1,122 @@
/*
* Copyright (c) 2001-2003, David Janssens
* Copyright (c) 2002-2003, Yannick Verschueren
* Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
* Copyright (c) 2005, Herv<72> Drolon, FreeImage Team
* Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef __INT_H
#define __INT_H
/**
@file int.h
@brief Implementation of operations on integers (INT)
The functions in INT.H have for goal to realize operations on integers.
*/
/** @defgroup INT INT - Implementation of operations on integers */
/*@{*/
/** @name Funciones generales (see also openjpeg.h) */
/*@{*/
/* ----------------------------------------------------------------------- */
/**
Get the minimum of two integers
@return Returns a if a < b else b
*/
static int int_min(int a, int b) {
return a < b ? a : b;
}
/**
Get the maximum of two integers
@return Returns a if a > b else b
*/
static int int_max(int a, int b) {
return (a > b) ? a : b;
}
/**
Clamp an integer inside an interval
@return
<ul>
<li>Returns a if (min < a < max)
<li>Returns max if (a > max)
<li>Returns min if (a < min)
</ul>
*/
static int int_clamp(int a, int min, int max) {
if (a < min)
return min;
if (a > max)
return max;
return a;
}
/**
@return Get absolute value of integer
*/
static int int_abs(int a) {
return a < 0 ? -a : a;
}
static double dbl_abs(double a) {
return a < 0 ? -a : a;
}
/**
Divide an integer and round upwards
@return Returns a divided by b
*/
static int int_ceildiv(int a, int b) {
return (a + b - 1) / b;
}
/**
Divide an integer by a power of 2 and round upwards
@return Returns a divided by 2^b
*/
static int int_ceildivpow2(int a, int b) {
return (a + (1 << b) - 1) >> b;
}
/**
Divide an integer by a power of 2 and round downwards
@return Returns a divided by 2^b
*/
static int int_floordivpow2(int a, int b) {
return a >> b;
}
/**
Get logarithm of an integer and round downwards
@return Returns log2(a)
*/
static int int_floorlog2(int a) {
int l;
for (l = 0; a > 1; l++) {
a >>= 1;
}
return l;
}
/* ----------------------------------------------------------------------- */
/*@}*/
/*@}*/
#endif

Some files were not shown because too many files have changed in this diff Show More