Build conditionally the java binding
[openjpeg.git] / applications / JavaOpenJPEG / JavaOpenJPEG.c
index b1f03028c587e1964f9776cba7c5b71b2687b9f5..3f8e2ee722dc20405e4a9f3db7567d0a49c5f150 100644 (file)
@@ -37,7 +37,7 @@
 #include <math.h>\r
 \r
 #include "openjpeg.h"\r
-#include "getopt.h"\r
+#include "opj_getopt.h"\r
 #include "convert.h"\r
 #include "index.h"\r
 #include "dirent.h"\r
@@ -204,6 +204,8 @@ void encode_help_display() {
        fprintf(stdout,"                 Indicate multiple modes by adding their values. \n");\r
        fprintf(stdout,"                 ex: RESTART(4) + RESET(2) + SEGMARK(32) = -M 38\n");\r
        fprintf(stdout,"\n");\r
+       fprintf(stdout,"-TP          : devide packets of every tile into tile-parts (-TP R) [R, L, C]\n");\r
+       fprintf(stdout,"\n");\r
        fprintf(stdout,"-x           : create an index file *.Idx (-x index_name.Idx) \n");\r
        fprintf(stdout,"\n");\r
        fprintf(stdout,"-ROI         : c=%%d,U=%%d : quantization indices upshifted \n");\r
@@ -216,6 +218,9 @@ void encode_help_display() {
        fprintf(stdout,"\n");\r
        fprintf(stdout,"-I           : use the irreversible DWT 9-7 (-I) \n");\r
        fprintf(stdout,"\n");\r
+       fprintf(stdout,"-jpip        : write jpip codestream index box in JP2 output file\n");\r
+       fprintf(stdout,"               NOTICE: currently supports only RPCL order\n");\r
+       fprintf(stdout,"\n");\r
 /* UniPG>> */\r
 #ifdef USE_JPWL\r
        fprintf(stdout,"-W           : adoption of JPWL (Part 11) capabilities (-W params)\n");\r
@@ -375,7 +380,7 @@ static int initialise_4K_poc(opj_poc_t *POC, int numres){
 }\r
 \r
 void cinema_parameters(opj_cparameters_t *parameters){\r
-       parameters->tile_size_on = false;\r
+       parameters->tile_size_on = OPJ_FALSE;\r
        parameters->cp_tdx=1;\r
        parameters->cp_tdy=1;\r
        \r
@@ -492,21 +497,22 @@ void cinema_setup_encoder(opj_cparameters_t *parameters,opj_image_t *image, img_
 int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *parameters,\r
                                                                                                        img_fol_t *img_fol, char *indexfilename) {\r
        int i, j,totlen;\r
-       option_t long_option[]={\r
+       opj_option_t long_option[]={\r
                {"cinema2K",REQ_ARG, NULL ,'w'},\r
                {"cinema4K",NO_ARG, NULL ,'y'},\r
                {"ImgDir",REQ_ARG, NULL ,'z'},\r
-               {"TP",REQ_ARG, NULL ,'v'},\r
+               {"TP",REQ_ARG, NULL ,'u'},\r
                {"SOP",NO_ARG, NULL ,'S'},\r
                {"EPH",NO_ARG, NULL ,'E'},\r
                {"OutFor",REQ_ARG, NULL ,'O'},\r
                {"POC",REQ_ARG, NULL ,'P'},\r
                {"ROI",REQ_ARG, NULL ,'R'},\r
+               {"jpip",NO_ARG, NULL, 'J'}\r
        };\r
 \r
        /* parse the command line */\r
 /* UniPG>> */\r
-       const char optlist[] = "i:o:hr:q:n:b:c:t:p:s:SEM:x:R:d:T:If:P:C:F:"\r
+       const char optlist[] = "i:o:hr:q:n:b:c:t:p:s:SEM:x:R:d:T:If:P:C:F:u:J"\r
 #ifdef USE_JPWL\r
                "W:"\r
 #endif /* USE_JPWL */\r
@@ -523,7 +529,7 @@ int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *parameters,
        reset_options_reading();\r
 \r
        while (1) {\r
-    int c = getopt_long(argc, argv, optlist,long_option,totlen);\r
+    int c = opj_getopt_long(argc, argv, optlist,long_option,totlen);\r
                if (c == -1)\r
                        break;\r
                switch (c) {\r
@@ -532,7 +538,7 @@ int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *parameters,
 \r
                        case 'o':                       /* output file */\r
                        {\r
-                               char *outfile = optarg;\r
+                               char *outfile = opj_optarg;\r
                                parameters->cod_format = get_file_format(outfile);\r
                                switch(parameters->cod_format) {\r
                                        case J2K_CFMT:\r
@@ -550,14 +556,14 @@ int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *parameters,
                        case 'O':                       /* output format */\r
                                {\r
                                        char outformat[50];\r
-                                       char *of = optarg;\r
+                                       char *of = opj_optarg;\r
                                        sprintf(outformat,".%s",of);\r
                                        img_fol->set_out_format = 1;\r
                                        parameters->cod_format = get_file_format(outformat);\r
                                        switch(parameters->cod_format) {\r
                                                case J2K_CFMT:\r
                                                case JP2_CFMT:\r
-                                                       img_fol->out_format = optarg;\r
+                                                       img_fol->out_format = opj_optarg;\r
                                                        break;\r
                                                default:\r
                                                        fprintf(stderr, "Unknown output format image [only j2k, j2c, jp2]!! \n");\r
@@ -572,7 +578,7 @@ int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *parameters,
 \r
                        case 'r':                       /* rates rates/distorsion */\r
                        {\r
-                               char *s = optarg;\r
+                               char *s = opj_optarg;\r
                                while (sscanf(s, "%f", &parameters->tcp_rates[parameters->tcp_numlayers]) == 1) {\r
                                        parameters->tcp_numlayers++;\r
                                        while (*s && *s != ',') {\r
@@ -590,7 +596,7 @@ int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *parameters,
 \r
                        case 'q':                       /* add fixed_quality */\r
                        {\r
-                               char *s = optarg;\r
+                               char *s = opj_optarg;\r
                                while (sscanf(s, "%f", &parameters->tcp_distoratio[parameters->tcp_numlayers]) == 1) {\r
                                        parameters->tcp_numlayers++;\r
                                        while (*s && *s != ',') {\r
@@ -612,7 +618,7 @@ int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *parameters,
                                int *row = NULL, *col = NULL;\r
                                int numlayers = 0, numresolution = 0, matrix_width = 0;\r
 \r
-                               char *s = optarg;\r
+                               char *s = opj_optarg;\r
                                sscanf(s, "%d", &numlayers);\r
                                s++;\r
                                if (numlayers > 9)\r
@@ -656,8 +662,8 @@ int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *parameters,
 \r
                        case 't':                       /* tiles */\r
                        {\r
-                               sscanf(optarg, "%d,%d", &parameters->cp_tdx, &parameters->cp_tdy);\r
-                               parameters->tile_size_on = true;\r
+                               sscanf(opj_optarg, "%d,%d", &parameters->cp_tdx, &parameters->cp_tdy);\r
+                               parameters->tile_size_on = OPJ_TRUE;\r
                        }\r
                        break;\r
 \r
@@ -665,7 +671,7 @@ int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *parameters,
 \r
                        case 'n':                       /* resolution */\r
                        {\r
-                               sscanf(optarg, "%d", &parameters->numresolution);\r
+                               sscanf(opj_optarg, "%d", &parameters->numresolution);\r
                        }\r
                        break;\r
 \r
@@ -675,7 +681,7 @@ int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *parameters,
                                char sep;\r
                                int res_spec = 0;\r
 \r
-                               char *s = optarg;\r
+                               char *s = opj_optarg;\r
                                do {\r
                                        sep = 0;\r
                                        sscanf(s, "[%d,%d]%c", &parameters->prcw_init[res_spec],\r
@@ -694,7 +700,7 @@ int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *parameters,
                        case 'b':                       /* code-block dimension */\r
                        {\r
                                int cblockw_init = 0, cblockh_init = 0;\r
-                               sscanf(optarg, "%d,%d", &cblockw_init, &cblockh_init);\r
+                               sscanf(opj_optarg, "%d,%d", &cblockw_init, &cblockh_init);\r
                                if (cblockw_init * cblockh_init > 4096 || cblockw_init > 1024\r
                                        || cblockw_init < 4 || cblockh_init > 1024 || cblockh_init < 4) {\r
                                        fprintf(stderr,\r
@@ -711,7 +717,7 @@ int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *parameters,
 \r
                        case 'x':                       /* creation of index file */\r
                        {\r
-                               char *index = optarg;\r
+                               char *index = opj_optarg;\r
                                strncpy(indexfilename, index, OPJ_PATH_LEN);\r
                        }\r
                        break;\r
@@ -722,7 +728,7 @@ int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *parameters,
                        {\r
                                char progression[4];\r
 \r
-                               strncpy(progression, optarg, 4);\r
+                               strncpy(progression, opj_optarg, 4);\r
                                parameters->prog_order = give_progression(progression);\r
                                if (parameters->prog_order == -1) {\r
                                        fprintf(stderr, "Unrecognized progression order "\r
@@ -736,7 +742,7 @@ int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *parameters,
 \r
                        case 's':                       /* subsampling factor */\r
                        {\r
-                               if (sscanf(optarg, "%d,%d", &parameters->subsampling_dx,\r
+                               if (sscanf(opj_optarg, "%d,%d", &parameters->subsampling_dx,\r
                                     &parameters->subsampling_dy) != 2) {\r
                                        fprintf(stderr, "'-s' sub-sampling argument error !  [-s dx,dy]\n");\r
                                        return 1;\r
@@ -748,7 +754,7 @@ int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *parameters,
 \r
                        case 'd':                       /* coordonnate of the reference grid */\r
                        {\r
-                               if (sscanf(optarg, "%d,%d", &parameters->image_offset_x0,\r
+                               if (sscanf(opj_optarg, "%d,%d", &parameters->image_offset_x0,\r
                                     &parameters->image_offset_y0) != 2) {\r
                                        fprintf(stderr, "-d 'coordonnate of the reference grid' argument "\r
             "error !! [-d x0,y0]\n");\r
@@ -770,7 +776,7 @@ int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *parameters,
                                int numpocs = 0;                /* number of progression order change (POC) default 0 */\r
                                opj_poc_t *POC = NULL;  /* POC : used in case of Progression order change */\r
 \r
-                               char *s = optarg;\r
+                               char *s = opj_optarg;\r
                                POC = parameters->POC;\r
 \r
                                while (sscanf(s, "T%d=%d,%d,%d,%d,%d,%4s", &POC[numpocs].tile,\r
@@ -812,7 +818,7 @@ int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *parameters,
                        case 'M':                       /* Mode switch pas tous au point !! */\r
                        {\r
                                int value = 0;\r
-                               if (sscanf(optarg, "%d", &value) == 1) {\r
+                               if (sscanf(opj_optarg, "%d", &value) == 1) {\r
                                        for (i = 0; i <= 5; i++) {\r
                                                int cache = value & (1 << i);\r
                                                if (cache)\r
@@ -826,7 +832,7 @@ int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *parameters,
 \r
                        case 'R':                       /* ROI */\r
                        {\r
-                               if (sscanf(optarg, "c=%d,U=%d", &parameters->roi_compno,\r
+                               if (sscanf(opj_optarg, "c=%d,U=%d", &parameters->roi_compno,\r
                                            &parameters->roi_shift) != 2) {\r
                                        fprintf(stderr, "ROI error !! [-ROI c='compno',U='shift']\n");\r
                                        return 1;\r
@@ -838,7 +844,7 @@ int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *parameters,
 \r
                        case 'T':                       /* Tile offset */\r
                        {\r
-                               if (sscanf(optarg, "%d,%d", &parameters->cp_tx0, &parameters->cp_ty0) != 2) {\r
+                               if (sscanf(opj_optarg, "%d,%d", &parameters->cp_tx0, &parameters->cp_ty0) != 2) {\r
                                        fprintf(stderr, "-T 'tile offset' argument error !! [-T X0,Y0]");\r
                                        return 1;\r
                                }\r
@@ -849,9 +855,9 @@ int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *parameters,
 \r
                        case 'C':                       /* add a comment */\r
                        {\r
-                               parameters->cp_comment = (char*)malloc(strlen(optarg) + 1);\r
+                               parameters->cp_comment = (char*)malloc(strlen(opj_optarg) + 1);\r
                                if(parameters->cp_comment) {\r
-                                       strcpy(parameters->cp_comment, optarg);\r
+                                       strcpy(parameters->cp_comment, opj_optarg);\r
                                }\r
                        }\r
                        break;\r
@@ -867,9 +873,9 @@ int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *parameters,
 \r
                        /* ------------------------------------------------------ */\r
                        \r
-                       case 'v':                       /* Tile part generation*/\r
+                       case 'u':                       /* Tile part generation*/\r
                        {\r
-                               parameters->tp_flag = optarg[0];\r
+                               parameters->tp_flag = opj_optarg[0];\r
                                parameters->tp_on = 1;\r
                        }\r
                        break;  \r
@@ -878,8 +884,8 @@ int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *parameters,
                        \r
                        case 'z':                       /* Image Directory path */\r
                        {\r
-                               img_fol->imgdirpath = (char*)malloc(strlen(optarg) + 1);\r
-                               strcpy(img_fol->imgdirpath,optarg);\r
+                               img_fol->imgdirpath = (char*)malloc(strlen(opj_optarg) + 1);\r
+                               strcpy(img_fol->imgdirpath,opj_optarg);\r
                                img_fol->set_imgdir=1;\r
                        }\r
                        break;\r
@@ -889,7 +895,7 @@ int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *parameters,
                        case 'w':                       /* Digital Cinema 2K profile compliance*/\r
                        {\r
                                int fps=0;\r
-                               sscanf(optarg,"%d",&fps);\r
+                               sscanf(opj_optarg,"%d",&fps);\r
                                if(fps == 24){\r
                                        parameters->cp_cinema = CINEMA2K_24;\r
                                }else if(fps == 48 ){\r
@@ -933,7 +939,7 @@ int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *parameters,
                                /* search for different protection methods */\r
 \r
                                /* break the option in comma points and parse the result */\r
-                               token = strtok(optarg, ",");\r
+                               token = strtok(opj_optarg, ",");\r
                                while(token != NULL) {\r
 \r
                                        /* search header error protection method */\r
@@ -1238,7 +1244,13 @@ int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *parameters,
                        break;\r
 #endif /* USE_JPWL */\r
 /* <<UniPG */\r
-\r
+/* ------------------------------------------------------ */\r
+                       \r
+                       case 'J':                       /* jpip on */\r
+                       {\r
+                         parameters->jpip_on = OPJ_TRUE;\r
+                       }\r
+                       break;\r
                                /* ------------------------------------------------------ */\r
 \r
                        default:\r
@@ -1616,7 +1628,7 @@ opj_image_t* loadImage(opj_cparameters_t *parameters, JNIEnv *env, jobject obj,
        jbyte           *jbBody;\r
        jshort          *jsBody;\r
        jint            *jiBody;\r
-       boolean         isCopy;\r
+       jboolean                isCopy;\r
 \r
        // Image width, height and depth\r
        fid = (*env)->GetFieldID(env, cls,"width", "I");\r
@@ -1764,7 +1776,7 @@ opj_image_t* loadImage(opj_cparameters_t *parameters, JNIEnv *env, jobject obj,
 JNIEXPORT jlong JNICALL Java_org_openJpeg_OpenJPEGJavaEncoder_internalEncodeImageToJ2K(JNIEnv *env, jobject obj, jobjectArray javaParameters) {\r
        int argc;               /* To simulate the command line parameters (taken from the javaParameters variable) and be able to re-use the */\r
        char **argv;    /*  'parse_cmdline_decoder' method taken from the j2k_to_image project */\r
-       bool bSuccess;\r
+       opj_bool bSuccess;\r
        opj_cparameters_t parameters;   /* compression parameters */\r
        img_fol_t img_fol;\r
        opj_event_mgr_t event_mgr;              /* event manager */\r
@@ -1898,7 +1910,7 @@ JNIEXPORT jlong JNICALL Java_org_openJpeg_OpenJPEGJavaEncoder_internalEncodeImag
                if (parameters.cod_format == J2K_CFMT) {        /* J2K format output */\r
                        cinfo = opj_create_compress(CODEC_J2K);\r
                } else {                                                                        /* JP2 format output */\r
-                       cinfo = opj_create_compress(CODEC_JP2);\r
+                   cinfo = opj_create_compress(CODEC_JP2);\r
                }\r
                /* catch events using our callbacks and give a local context */\r
                opj_set_event_mgr((opj_common_ptr)cinfo, &event_mgr, &msgErrorCallback_vars);\r