Enable accepting file names with `-ยด symbol .Modification getopt.c
[openjpeg.git] / OPJViewer / source / imagj2k.cpp
index 16bcdd1631a0dbb0eaa1874f89234ad7f6fc7eac..4a7ed492d515fa86fbd06c3944cd31bb1998a8e0 100644 (file)
     #include "wx/module.h"\r
 #endif\r
 \r
-\r
-#include "libopenjpeg/openjpeg.h"\r
-\r
-\r
 #include "wx/filefn.h"\r
 #include "wx/wfstream.h"\r
 \r
@@ -86,35 +82,29 @@ IMPLEMENT_DYNAMIC_CLASS(wxJ2KHandler,wxImageHandler)
 \r
 /* sample error callback expecting a FILE* client object */\r
 void j2k_error_callback(const char *msg, void *client_data) {\r
-       char m_msg[MAX_MESSAGE_LEN];\r
        int message_len = strlen(msg) - 1;\r
        if (msg[message_len] != '\n')\r
                message_len = MAX_MESSAGE_LEN;\r
-       sprintf(m_msg, "[ERROR] %.*s", message_len, msg);\r
     wxMutexGuiEnter();\r
-       wxLogMessage(m_msg);\r
+       wxLogMessage(wxT("[ERROR] %.*s"), message_len, msg);\r
     wxMutexGuiLeave();\r
 }\r
 /* sample warning callback expecting a FILE* client object */\r
 void j2k_warning_callback(const char *msg, void *client_data) {\r
-       char m_msg[MAX_MESSAGE_LEN];\r
        int message_len = strlen(msg) - 1;\r
        if (msg[message_len] != '\n')\r
                message_len = MAX_MESSAGE_LEN;\r
-       sprintf(m_msg, "[WARNING] %.*s", message_len, msg);\r
     wxMutexGuiEnter();\r
-       wxLogMessage(m_msg);\r
+       wxLogMessage(wxT("[WARNING] %.*s"), message_len, msg);\r
     wxMutexGuiLeave();\r
 }\r
 /* sample debug callback expecting no client object */\r
 void j2k_info_callback(const char *msg, void *client_data) {\r
-       char m_msg[MAX_MESSAGE_LEN];\r
        int message_len = strlen(msg) - 1;\r
        if (msg[message_len] != '\n')\r
                message_len = MAX_MESSAGE_LEN;\r
-       sprintf(m_msg, "[INFO] %.*s", message_len, msg);\r
     wxMutexGuiEnter();\r
-       wxLogMessage(m_msg);\r
+       wxLogMessage(wxT("[INFO] %.*s"), message_len, msg);\r
     wxMutexGuiLeave();\r
 }\r
 \r
@@ -150,12 +140,18 @@ bool wxJ2KHandler::LoadFile(wxImage *image, wxInputStream& stream, bool verbose,
        strncpy(parameters.outfile, "", sizeof(parameters.outfile)-1);\r
        parameters.decod_format = J2K_CFMT;\r
        parameters.cod_format = BMP_DFMT;\r
+       if (m_reducefactor)\r
+               parameters.cp_reduce = m_reducefactor;\r
+       if (m_qualitylayers)\r
+               parameters.cp_layer = m_qualitylayers;\r
+       /*if (n_components)\r
+               parameters. = n_components;*/\r
 \r
        /* JPWL only */\r
 #ifdef USE_JPWL\r
-       parameters.jpwl_exp_comps = JPWL_EXPECTED_COMPONENTS;\r
-       parameters.jpwl_max_tiles = JPWL_MAXIMUM_TILES;\r
-       parameters.jpwl_correct = true;\r
+       parameters.jpwl_exp_comps = m_expcomps;\r
+       parameters.jpwl_max_tiles = m_maxtiles;\r
+       parameters.jpwl_correct = m_enablejpwl;\r
 #endif /* USE_JPWL */\r
 \r
        /* get a decoder handle */\r
@@ -183,7 +179,7 @@ bool wxJ2KHandler::LoadFile(wxImage *image, wxInputStream& stream, bool verbose,
        opjimage = opj_decode(dinfo, cio);\r
        if (!opjimage) {\r
                wxMutexGuiEnter();\r
-               wxLogError("J2K: failed to decode image!");\r
+               wxLogError(wxT("J2K: failed to decode image!"));\r
                wxMutexGuiLeave();\r
                opj_destroy_decompress(dinfo);\r
                opj_cio_close(cio);\r
@@ -198,7 +194,7 @@ bool wxJ2KHandler::LoadFile(wxImage *image, wxInputStream& stream, bool verbose,
        // check image components\r
        if ((opjimage->numcomps != 1) && (opjimage->numcomps != 3)) {\r
                wxMutexGuiEnter();\r
-               wxLogError("J2K: weird number of components");\r
+               wxLogError(wxT("J2K: weird number of components"));\r
                wxMutexGuiLeave();\r
                opj_destroy_decompress(dinfo);\r
                free(src);\r
@@ -231,14 +227,26 @@ bool wxJ2KHandler::LoadFile(wxImage *image, wxInputStream& stream, bool verbose,
 \r
                                }\r
                        }\r
-               } else {\r
+\r
+               } else if (shiftbpp < 0) {\r
                        for (row = 0; row < opjimage->comps[0].h; row++) {\r
                                for (col = 0; col < opjimage->comps[0].w; col++) {\r
                                        \r
+                                       *(ptr++) = (*(r++)) << -shiftbpp;\r
+                                       *(ptr++) = (*(g++)) << -shiftbpp;\r
+                                       *(ptr++) = (*(b++)) << -shiftbpp;\r
+\r
+                               }\r
+                       }\r
+                       \r
+               } else {\r
+                       for (row = 0; row < opjimage->comps[0].h; row++) {\r
+                               for (col = 0; col < opjimage->comps[0].w; col++) {\r
+\r
                                        *(ptr++) = *(r++);\r
                                        *(ptr++) = *(g++);\r
                                        *(ptr++) = *(b++);\r
-\r
+                               \r
                                }\r
                        }\r
                }\r
@@ -256,6 +264,16 @@ bool wxJ2KHandler::LoadFile(wxImage *image, wxInputStream& stream, bool verbose,
                                        *(ptr++) = (*(y)) >> shiftbpp;\r
                                        *(ptr++) = (*(y++)) >> shiftbpp;\r
 \r
+                               }\r
+                       }\r
+               } else if (shiftbpp < 0) {\r
+                       for (row = 0; row < opjimage->comps[0].h; row++) {\r
+                               for (col = 0; col < opjimage->comps[0].w; col++) {\r
+                                       \r
+                                       *(ptr++) = (*(y)) << -shiftbpp;\r
+                                       *(ptr++) = (*(y)) << -shiftbpp;\r
+                                       *(ptr++) = (*(y++)) << -shiftbpp;\r
+\r
                                }\r
                        }\r
                } else {\r