}img_fol_t;
static void encode_help_display(void) {
- fprintf(stdout,"HELP for opj_compress\n----\n\n");
- fprintf(stdout,"- the -h option displays this help information on screen\n\n");
+ fprintf(stdout,"\nThis is the opj_compress utility from the OpenJPEG project.\n"
+ "It compresses various image formats with the JPEG 2000 algorithm.\n"
+ "It has been compiled against openjp2 library v%s.\n\n",opj_version());
- /* UniPG>> */
- fprintf(stdout,"List of parameters for the JPEG 2000 "
- #ifdef USE_JPWL
- "+ JPWL "
- #endif /* USE_JPWL */
- "encoder:\n");
- /* <<UniPG */
- 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 never appear in the tile_header.\n");
- fprintf(stdout,"\n");
- fprintf(stdout,"By default:\n");
- fprintf(stdout,"------------\n");
+ fprintf(stdout,"Default encoding options:\n");
+ fprintf(stdout,"-------------------------\n");
fprintf(stdout,"\n");
fprintf(stdout," * Lossless\n");
fprintf(stdout," * 1 tile\n");
fprintf(stdout," * No sub-sampling in x or y direction\n");
fprintf(stdout," * No mode switch activated\n");
fprintf(stdout," * Progression order: LRCP\n");
+ #ifdef FIXME_INDEX
fprintf(stdout," * No index file\n");
+ #endif /* FIXME_INDEX */
fprintf(stdout," * No ROI upshifted\n");
fprintf(stdout," * No offset of the origin of the image\n");
fprintf(stdout," * No offset of the origin of the tiles\n");
#endif /* USE_JPWL */
/* <<UniPG */
fprintf(stdout,"\n");
+
+ fprintf(stdout,"Note:\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 never appear in the tile_header.\n");
+ fprintf(stdout,"\n");
+
fprintf(stdout,"Parameters:\n");
- fprintf(stdout,"------------\n");
+ fprintf(stdout,"-----------\n");
fprintf(stdout,"\n");
fprintf(stdout,"Required Parameters (except with -h):\n");
fprintf(stdout,"One of the two options -ImgDir or -i must be used\n");
fprintf(stdout,"\n");
- fprintf(stdout,"-ImgDir : Image file Directory path (example ../Images) \n");
+ fprintf(stdout,"-i <file>\n");
+ fprintf(stdout," Input file\n");
+ fprintf(stdout," Known extensions are <PBM|PGM|PPM|PNM|PAM|PGX|PNG|BMP|TIF|RAW|RAWL|TGA>\n");
+ fprintf(stdout," If used, '-o <file>' must be provided\n");
+ fprintf(stdout,"-o <compressed file>\n");
+ fprintf(stdout," Output file (accepted extensions are j2k or jp2).\n");
+ fprintf(stdout,"-ImgDir <dir>\n");
+ fprintf(stdout," Image file Directory path (example ../Images) \n");
fprintf(stdout," When using this option -OutFor must be used\n");
- fprintf(stdout,"\n");
- fprintf(stdout,"-OutFor \n");
- fprintf(stdout," REQUIRED only if -ImgDir is used\n");
- fprintf(stdout," Need to specify only format without filename <BMP> \n");
- fprintf(stdout," Currently accepts PBM, PGM, PPM, PNM, PAM, PGX, PNG, BMP, TIF, RAW (MSB), RAWL (LSB) and TGA formats\n");
- fprintf(stdout,"\n");
- fprintf(stdout,"-i : source file (-i source.pnm also *pbm, *.pgm, *.ppm, *.pam, *.pgx, *png, *.bmp, *.tif, *.raw, *.tga) \n");
- fprintf(stdout," When using this option -o must be used\n");
- fprintf(stdout,"\n");
- fprintf(stdout,"-o : destination file (-o dest.j2k or .jp2) \n");
+ fprintf(stdout,"-OutFor <J2K|J2C|JP2>\n");
+ fprintf(stdout," Output format for compressed files.\n");
+ fprintf(stdout," Required only if -ImgDir is used\n");
+ fprintf(stdout,"-F <width>,<height>,<ncomp>,<bitdepth>,{s,u}@<dx1>x<dy1>:...:<dxn>x<dyn>\n");
+ fprintf(stdout," Characteristics of the raw input image\n");
+ fprintf(stdout," If subsampling is omitted, 1x1 is assumed for all components\n");
+ fprintf(stdout," Example: -F 512,512,3,8,u@1x1:2x2:2x2\n");
+ fprintf(stdout," for raw 512x512 image with 4:2:0 subsampling\n");
+ fprintf(stdout," Required only if RAW or RAWL input file is provided.\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,"-cinema2K : Digital Cinema 2K profile compliant codestream for 2K resolution.(-CINEMA2K 24 or 48) \n");
- fprintf(stdout," Need to specify the frames per second for a 2K resolution. Only 24 or 48 fps is allowed\n");
- fprintf(stdout,"\n");
- fprintf(stdout,"-cinema4K : Digital Cinema 4K profile compliant codestream for 4K resolution \n");
- fprintf(stdout," Frames per second not required. Default value is 24fps\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 \n");
- fprintf(stdout," compression factor.\n");
- fprintf(stdout," Example: -r 20,10,1 means quality 1: compress 20x, \n");
- fprintf(stdout," quality 2: compress 10x and quality 3: compress lossless\n");
- fprintf(stdout,"\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,"-n : number of resolutions (-n 3) \n");
- fprintf(stdout,"\n");
- fprintf(stdout,"-b : size of code block (-b 32,32) \n");
- fprintf(stdout,"\n");
- fprintf(stdout,"-c : size of precinct (-c 128,128) \n");
- fprintf(stdout,"\n");
- fprintf(stdout,"-t : size of tile (-t 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) [-s X,Y] \n");
- fprintf(stdout," Remark: subsampling bigger than 2 can produce error\n");
- fprintf(stdout,"\n");
- fprintf(stdout,"-POC : Progression order change (-POC T1=0,0,1,5,3,CPRL/T1=5,0,1,6,3,CPRL) \n");
- fprintf(stdout," Example: T1=0,0,1,5,3,CPRL \n");
- fprintf(stdout," : Ttilenumber=Resolution num start,Component num start,Layer num end,Resolution num end,Component num end,Progression order\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 : mode switch (-M 3) [1=BYPASS(LAZY) 2=RESET 4=RESTART(TERMALL)\n");
- fprintf(stdout," 8=VSC 16=ERTERM(SEGTERM) 32=SEGMARK(SEGSYM)] \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,"-TP : divide packets of every tile into tile-parts (-TP R) [R, L, C]\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 image (-d 150,300) \n");
- fprintf(stdout,"\n");
- fprintf(stdout,"-T : offset of the origin of the tiles (-T 100,75) \n");
- fprintf(stdout,"\n");
- fprintf(stdout,"-I : use the irreversible DWT 9-7 (-I) \n");
- fprintf(stdout,"\n");
- fprintf(stdout,"-F : characteristics of the raw input image\n");
- fprintf(stdout," -F rawWidth,rawHeight,rawComp,rawBitDepth,s/u (Signed/Unsigned)\n");
- fprintf(stdout," Example: -i lena.raw -o lena.j2k -F 512,512,3,8,u\n");
- fprintf(stdout,"\n");
- fprintf(stdout,"-mct {0,1,2} : explicitely specifies if a Multiple Component Transform has to be used.\n");
- fprintf(stdout," 0: no MCT ; 1: RGB->YCC conversion ; 2: custom MCT.\n");
- fprintf(stdout," If custom MCT, \"-m\" option has to be used (see hereunder).\n");
- fprintf(stdout," By default, RGB->YCC conversion is used if there are 3 components or more,\n");
- fprintf(stdout," no conversion otherwise.\n");
- fprintf(stdout,"-m <file> : use array-based MCT, values are coma separated, line by line\n");
- fprintf(stdout," no specific separators between lines, no space allowed between values\n");
- fprintf(stdout," If this option is used, it automatically sets \"-mct\" option to 2.\n");
- fprintf(stdout,"-jpip : write jpip codestream index box in JP2 output file\n");
- fprintf(stdout," NOTICE: currently supports only RPCL order\n");
- fprintf(stdout,"\n");
+ fprintf(stdout,"-h\n");
+ fprintf(stdout," Display the help information.\n");
+ fprintf(stdout,"-r <compression ratio>,<compression ratio>,...\n");
+ fprintf(stdout," Different compression ratios for successive layers.\n");
+ fprintf(stdout," The rate specified for each quality level is the desired\n");
+ fprintf(stdout," compression factor.\n");
+ fprintf(stdout," Decreasing ratios required.\n");
+ fprintf(stdout," Example: -r 20,10,1 means \n");
+ fprintf(stdout," quality layer 1: compress 20x, \n");
+ fprintf(stdout," quality layer 2: compress 10x \n");
+ fprintf(stdout," quality layer 3: compress lossless\n");
+ fprintf(stdout," Options -r and -q cannot be used together.\n");
+ fprintf(stdout,"-q <psnr value>,<psnr value>,<psnr value>,...\n");
+ fprintf(stdout," Different psnr for successive layers (-q 30,40,50).\n");
+ fprintf(stdout," Increasing PSNR values required.\n");
+ fprintf(stdout," Options -r and -q cannot be used together.\n");
+ fprintf(stdout,"-n <number of resolutions>\n");
+ fprintf(stdout," Number of resolutions.\n");
+ fprintf(stdout," It corresponds to the number of DWT decompositions +1. \n");
+ fprintf(stdout," Default: 6.\n");
+ fprintf(stdout,"-b <cblk width>,<cblk height>\n");
+ fprintf(stdout," Code-block size. The dimension must respect the constraint \n");
+ fprintf(stdout," defined in the JPEG-2000 standard (no dimension smaller than 4 \n");
+ fprintf(stdout," or greater than 1024, no code-block with more than 4096 coefficients).\n");
+ fprintf(stdout," The maximum value authorized is 64x64. \n");
+ fprintf(stdout," Default: 64x64.\n");
+ fprintf(stdout,"-c [<prec width>,<prec height>],[<prec width>,<prec height>],...\n");
+ fprintf(stdout," Precinct size. Values specified must be power of 2. \n");
+ fprintf(stdout," Multiple records may be supplied, in which case the first record refers\n");
+ fprintf(stdout," to the highest resolution level and subsequent records to lower \n");
+ fprintf(stdout," resolution levels. The last specified record is right-shifted for each \n");
+ fprintf(stdout," remaining lower resolution levels.\n");
+ fprintf(stdout," Default: 215x215 at each resolution.\n");
+ fprintf(stdout,"-t <tile width>,<tile height>\n");
+ fprintf(stdout," Tile size.\n");
+ fprintf(stdout," Default: the dimension of the whole image, thus only one tile.\n");
+ fprintf(stdout,"-p <LRCP|RLCP|RPCL|PCRL|CPRL>\n");
+ fprintf(stdout," Progression order.\n");
+ fprintf(stdout," Default: LRCP.\n");
+ fprintf(stdout,"-s <subX,subY>\n");
+ fprintf(stdout," Subsampling factor.\n");
+ fprintf(stdout," Subsampling bigger than 2 can produce error\n");
+ fprintf(stdout," Default: no subsampling.\n");
+ fprintf(stdout,"-POC <progression order change>/<progression order change>/...\n");
+ fprintf(stdout," Progression order change.\n");
+ fprintf(stdout," The syntax of a progression order change is the following:\n");
+ fprintf(stdout," T<tile>=<resStart>,<compStart>,<layerEnd>,<resEnd>,<compEnd>,<progOrder>\n");
+ fprintf(stdout," Example: -POC T1=0,0,1,5,3,CPRL/T1=5,0,1,6,3,CPRL\n");
+ fprintf(stdout,"-SOP\n");
+ fprintf(stdout," Write SOP marker before each packet.\n");
+ fprintf(stdout,"-EPH\n");
+ fprintf(stdout," Write EPH marker after each header packet.\n");
+ fprintf(stdout,"-M <key value>\n");
+ fprintf(stdout," Mode switch.\n");
+ fprintf(stdout," [1=BYPASS(LAZY) 2=RESET 4=RESTART(TERMALL)\n");
+ fprintf(stdout," 8=VSC 16=ERTERM(SEGTERM) 32=SEGMARK(SEGSYM)]\n");
+ fprintf(stdout," Indicate multiple modes by adding their values.\n");
+ fprintf(stdout," Example: RESTART(4) + RESET(2) + SEGMARK(32) => -M 38\n");
+ fprintf(stdout,"-TP <R|L|C>\n");
+ fprintf(stdout," Divide packets of every tile into tile-parts.\n");
+ fprintf(stdout," Division is made by grouping Resolutions (R), Layers (L)\n");
+ fprintf(stdout," or Components (C).\n");
+ #ifdef FIXME_INDEX
+ fprintf(stdout,"-x <index file>\n");
+ fprintf(stdout," Create an index file.\n");
+ #endif /*FIXME_INDEX*/
+ fprintf(stdout,"-ROI c=<component index>,U=<upshifting value>\n");
+ fprintf(stdout," Quantization indices upshifted for a component. \n");
+ fprintf(stdout," Warning: This option does not implement the usual ROI (Region of Interest).\n");
+ fprintf(stdout," It should be understood as a 'Component of Interest'. It offers the \n");
+ fprintf(stdout," possibility to upshift the value of a component during quantization step.\n");
+ fprintf(stdout," The value after c= is the component number [0, 1, 2, ...] and the value \n");
+ fprintf(stdout," after U= is the value of upshifting. U must be in the range [0, 37].\n");
+ fprintf(stdout,"-d <image offset X,image offset Y>\n");
+ fprintf(stdout," Offset of the origin of the image.\n");
+ fprintf(stdout,"-T <tile offset X,tile offset Y>\n");
+ fprintf(stdout," Offset of the origin of the tiles.\n");
+ fprintf(stdout,"-I\n");
+ fprintf(stdout," Use the irreversible DWT 9-7.\n");
+ fprintf(stdout,"-mct <0|1|2>\n");
+ fprintf(stdout," Explicitely specifies if a Multiple Component Transform has to be used.\n");
+ fprintf(stdout," 0: no MCT ; 1: RGB->YCC conversion ; 2: custom MCT.\n");
+ fprintf(stdout," If custom MCT, \"-m\" option has to be used (see hereunder).\n");
+ fprintf(stdout," By default, RGB->YCC conversion is used if there are 3 components or more,\n");
+ fprintf(stdout," no conversion otherwise.\n");
+ fprintf(stdout,"-m <file>\n");
+ fprintf(stdout," Use array-based MCT, values are coma separated, line by line\n");
+ fprintf(stdout," No specific separators between lines, no space allowed between values.\n");
+ fprintf(stdout," If this option is used, it automatically sets \"-mct\" option to 2.\n");
+ fprintf(stdout,"-cinema2K <24|48>\n");
+ fprintf(stdout," Digital Cinema 2K profile compliant codestream.\n");
+ fprintf(stdout," Need to specify the frames per second for a 2K resolution.\n");
+ fprintf(stdout," Only 24 or 48 fps are currently allowed.\n");
+ fprintf(stdout,"-cinema4K\n");
+ fprintf(stdout," Digital Cinema 4K profile compliant codestream.\n");
+ fprintf(stdout," Frames per second not required. Default value is 24fps.\n");
+ fprintf(stdout,"-jpip\n");
+ fprintf(stdout," Write jpip codestream index box in JP2 output file.\n");
+ fprintf(stdout," Currently supports only RPCL order.\n");
+ fprintf(stdout,"-C <comment>\n");
+ fprintf(stdout," Add <comment> in the comment marker segment.\n");
/* UniPG>> */
#ifdef USE_JPWL
- fprintf(stdout,"-W : adoption of JPWL (Part 11) capabilities (-W params)\n");
- fprintf(stdout," The parameters can be written and repeated in any order:\n");
- fprintf(stdout," [h<tilepart><=type>,s<tilepart><=method>,a=<addr>,...\n");
- fprintf(stdout," ...,z=<size>,g=<range>,p<tilepart:pack><=type>]\n");
- fprintf(stdout,"\n");
- fprintf(stdout," h selects the header error protection (EPB): 'type' can be\n");
- fprintf(stdout," [0=none 1,absent=predefined 16=CRC-16 32=CRC-32 37-128=RS]\n");
- fprintf(stdout," if 'tilepart' is absent, it is for main and tile headers\n");
- fprintf(stdout," if 'tilepart' is present, it applies from that tile\n");
- fprintf(stdout," onwards, up to the next h<> spec, or to the last tilepart\n");
- fprintf(stdout," in the codestream (max. %d specs)\n", JPWL_MAX_NO_TILESPECS);
- fprintf(stdout,"\n");
- fprintf(stdout," p selects the packet error protection (EEP/UEP with EPBs)\n");
- fprintf(stdout," to be applied to raw data: 'type' can be\n");
- fprintf(stdout," [0=none 1,absent=predefined 16=CRC-16 32=CRC-32 37-128=RS]\n");
- fprintf(stdout," if 'tilepart:pack' is absent, it is from tile 0, packet 0\n");
- fprintf(stdout," if 'tilepart:pack' is present, it applies from that tile\n");
- fprintf(stdout," and that packet onwards, up to the next packet spec\n");
- fprintf(stdout," or to the last packet in the last tilepart in the stream\n");
- fprintf(stdout," (max. %d specs)\n", JPWL_MAX_NO_PACKSPECS);
- fprintf(stdout,"\n");
- fprintf(stdout," s enables sensitivity data insertion (ESD): 'method' can be\n");
- fprintf(stdout," [-1=NO ESD 0=RELATIVE ERROR 1=MSE 2=MSE REDUCTION 3=PSNR\n");
- fprintf(stdout," 4=PSNR INCREMENT 5=MAXERR 6=TSE 7=RESERVED]\n");
- fprintf(stdout," if 'tilepart' is absent, it is for main header only\n");
- fprintf(stdout," if 'tilepart' is present, it applies from that tile\n");
- fprintf(stdout," onwards, up to the next s<> spec, or to the last tilepart\n");
- fprintf(stdout," in the codestream (max. %d specs)\n", JPWL_MAX_NO_TILESPECS);
- fprintf(stdout,"\n");
- fprintf(stdout," g determines the addressing mode: <range> can be\n");
- fprintf(stdout," [0=PACKET 1=BYTE RANGE 2=PACKET RANGE]\n");
- fprintf(stdout,"\n");
- fprintf(stdout," a determines the size of data addressing: <addr> can be\n");
- fprintf(stdout," 2/4 bytes (small/large codestreams). If not set, auto-mode\n");
- fprintf(stdout,"\n");
- fprintf(stdout," z determines the size of sensitivity values: <size> can be\n");
- fprintf(stdout," 1/2 bytes, for the transformed pseudo-floating point value\n");
- fprintf(stdout,"\n");
- fprintf(stdout," ex.:\n");
- fprintf(stdout," h,h0=64,h3=16,h5=32,p0=78,p0:24=56,p1,p3:0=0,p3:20=32,s=0,\n");
- fprintf(stdout," s0=6,s3=-1,a=0,g=1,z=1\n");
- fprintf(stdout," means\n");
- fprintf(stdout," predefined EPB in MH, rs(64,32) from TPH 0 to TPH 2,\n");
- fprintf(stdout," CRC-16 in TPH 3 and TPH 4, CRC-32 in remaining TPHs,\n");
- fprintf(stdout," UEP rs(78,32) for packets 0 to 23 of tile 0,\n");
- fprintf(stdout," UEP rs(56,32) for packs. 24 to the last of tilepart 0,\n");
- fprintf(stdout," UEP rs default for packets of tilepart 1,\n");
- fprintf(stdout," no UEP for packets 0 to 19 of tilepart 3,\n");
- fprintf(stdout," UEP CRC-32 for packs. 20 of tilepart 3 to last tilepart,\n");
- fprintf(stdout," relative sensitivity ESD for MH,\n");
- fprintf(stdout," TSE ESD from TPH 0 to TPH 2, byte range with automatic\n");
- fprintf(stdout," size of addresses and 1 byte for each sensitivity value\n");
- fprintf(stdout,"\n");
- fprintf(stdout," ex.:\n");
- fprintf(stdout," h,s,p\n");
- fprintf(stdout," means\n");
- fprintf(stdout," default protection to headers (MH and TPHs) as well as\n");
- fprintf(stdout," data packets, one ESD in MH\n");
- fprintf(stdout,"\n");
- fprintf(stdout," N.B.: use the following recommendations when specifying\n");
- fprintf(stdout," the JPWL parameters list\n");
- fprintf(stdout," - when you use UEP, always pair the 'p' option with 'h'\n");
- fprintf(stdout," \n");
+ fprintf(stdout,"-W <params>\n");
+ fprintf(stdout," Adoption of JPWL (Part 11) capabilities (-W params)\n");
+ fprintf(stdout," The <params> field can be written and repeated in any order:\n");
+ fprintf(stdout," [h<tilepart><=type>,s<tilepart><=method>,a=<addr>,...\n");
+ fprintf(stdout," ...,z=<size>,g=<range>,p<tilepart:pack><=type>]\n");
+ fprintf(stdout," h selects the header error protection (EPB): 'type' can be\n");
+ fprintf(stdout," [0=none 1,absent=predefined 16=CRC-16 32=CRC-32 37-128=RS]\n");
+ fprintf(stdout," if 'tilepart' is absent, it is for main and tile headers\n");
+ fprintf(stdout," if 'tilepart' is present, it applies from that tile\n");
+ fprintf(stdout," onwards, up to the next h<> spec, or to the last tilepart\n");
+ fprintf(stdout," in the codestream (max. %d specs)\n", JPWL_MAX_NO_TILESPECS);
+ fprintf(stdout," p selects the packet error protection (EEP/UEP with EPBs)\n");
+ fprintf(stdout," to be applied to raw data: 'type' can be\n");
+ fprintf(stdout," [0=none 1,absent=predefined 16=CRC-16 32=CRC-32 37-128=RS]\n");
+ fprintf(stdout," if 'tilepart:pack' is absent, it is from tile 0, packet 0\n");
+ fprintf(stdout," if 'tilepart:pack' is present, it applies from that tile\n");
+ fprintf(stdout," and that packet onwards, up to the next packet spec\n");
+ fprintf(stdout," or to the last packet in the last tilepart in the stream\n");
+ fprintf(stdout," (max. %d specs)\n", JPWL_MAX_NO_PACKSPECS);
+ fprintf(stdout," s enables sensitivity data insertion (ESD): 'method' can be\n");
+ fprintf(stdout," [-1=NO ESD 0=RELATIVE ERROR 1=MSE 2=MSE REDUCTION 3=PSNR\n");
+ fprintf(stdout," 4=PSNR INCREMENT 5=MAXERR 6=TSE 7=RESERVED]\n");
+ fprintf(stdout," if 'tilepart' is absent, it is for main header only\n");
+ fprintf(stdout," if 'tilepart' is present, it applies from that tile\n");
+ fprintf(stdout," onwards, up to the next s<> spec, or to the last tilepart\n");
+ fprintf(stdout," in the codestream (max. %d specs)\n", JPWL_MAX_NO_TILESPECS);
+ fprintf(stdout," g determines the addressing mode: <range> can be\n");
+ fprintf(stdout," [0=PACKET 1=BYTE RANGE 2=PACKET RANGE]\n");
+ fprintf(stdout," a determines the size of data addressing: <addr> can be\n");
+ fprintf(stdout," 2/4 bytes (small/large codestreams). If not set, auto-mode\n");
+ fprintf(stdout," z determines the size of sensitivity values: <size> can be\n");
+ fprintf(stdout," 1/2 bytes, for the transformed pseudo-floating point value\n");
+ fprintf(stdout," ex.:\n");
+ fprintf(stdout," h,h0=64,h3=16,h5=32,p0=78,p0:24=56,p1,p3:0=0,p3:20=32,s=0,\n");
+ fprintf(stdout," s0=6,s3=-1,a=0,g=1,z=1\n");
+ fprintf(stdout," means\n");
+ fprintf(stdout," predefined EPB in MH, rs(64,32) from TPH 0 to TPH 2,\n");
+ fprintf(stdout," CRC-16 in TPH 3 and TPH 4, CRC-32 in remaining TPHs,\n");
+ fprintf(stdout," UEP rs(78,32) for packets 0 to 23 of tile 0,\n");
+ fprintf(stdout," UEP rs(56,32) for packs. 24 to the last of tilepart 0,\n");
+ fprintf(stdout," UEP rs default for packets of tilepart 1,\n");
+ fprintf(stdout," no UEP for packets 0 to 19 of tilepart 3,\n");
+ fprintf(stdout," UEP CRC-32 for packs. 20 of tilepart 3 to last tilepart,\n");
+ fprintf(stdout," relative sensitivity ESD for MH,\n");
+ fprintf(stdout," TSE ESD from TPH 0 to TPH 2, byte range with automatic\n");
+ fprintf(stdout," size of addresses and 1 byte for each sensitivity value\n");
+ fprintf(stdout," ex.:\n");
+ fprintf(stdout," h,s,p\n");
+ fprintf(stdout," means\n");
+ fprintf(stdout," default protection to headers (MH and TPHs) as well as\n");
+ fprintf(stdout," data packets, one ESD in MH\n");
+ fprintf(stdout," N.B.: use the following recommendations when specifying\n");
+ fprintf(stdout," the JPWL parameters list\n");
+ fprintf(stdout," - when you use UEP, always pair the 'p' option with 'h'\n");
#endif /* USE_JPWL */
/* <<UniPG */
- fprintf(stdout,"IMPORTANT:\n");
- fprintf(stdout,"-----------\n");
fprintf(stdout,"\n");
- fprintf(stdout,"The index file has the structure below:\n");
- fprintf(stdout,"---------------------------------------\n");
+#ifdef FIXME_INDEX
+ fprintf(stdout,"Index structure:\n");
+ fprintf(stdout,"----------------\n");
fprintf(stdout,"\n");
fprintf(stdout,"Image_height Image_width\n");
fprintf(stdout,"progression order\n");
fprintf(stdout,"Tpacket_0 Tile layer res. comp. prec. start_pos end_pos disto\n");
fprintf(stdout,"...\n");
fprintf(stdout,"Tpacket_Np '' '' '' '' '' '' '' ''\n");
-
fprintf(stdout,"MaxDisto\n");
-
fprintf(stdout,"TotalDisto\n\n");
+#endif /*FIXME_INDEX*/
}
static OPJ_PROG_ORDER give_progression(const char progression[4]) {
{"POC",REQ_ARG, NULL ,'P'},
{"ROI",REQ_ARG, NULL ,'R'},
{"jpip",NO_ARG, NULL, 'J'},
- {"mct",REQ_ARG, NULL, 'Y'},
- {"version",NO_ARG, NULL, 'v'}
+ {"mct",REQ_ARG, NULL, 'Y'}
};
/* parse the command line */
#ifdef USE_JPWL
"W:"
#endif /* USE_JPWL */
- "hv";
+ "h";
totlen=sizeof(long_option);
img_fol->set_out_format=0;
OPJ_UINT32 numlayers = 0, numresolution = 0, matrix_width = 0;
char *s = opj_optarg;
- sscanf(s, "%ud", &numlayers);
+ sscanf(s, "%u", &numlayers);
s++;
if (numlayers > 9)
s++;
{
char *index = opj_optarg;
strncpy(indexfilename, index, OPJ_PATH_LEN);
+ /* FIXME ADE INDEX >> */
+ fprintf(stderr,
+ "[WARNING] Index file generation is currently broken.\n"
+ " '-x' option ignored.\n");
+ /* << FIXME ADE INDEX */
}
break;
/* ----------------------------------------------------- */
- case 'v': /* display the openjpeg library version in use */
- fprintf(stdout,"This is the opj_compress utility from the OpenJPEG project.\n"
- "It has been compiled against openjp2 library v%s.\n",opj_version());
- return 1;
-
- /* ----------------------------------------------------- */
-
case 'P': /* POC */
{
int numpocs = 0; /* number of progression order change (POC) default 0 */
char *s = opj_optarg;
POC = parameters->POC;
- while (sscanf(s, "T%ud=%ud,%ud,%ud,%ud,%ud,%4s", &POC[numpocs].tile,
+ while (sscanf(s, "T%u=%u,%u,%u,%u,%u,%4s", &POC[numpocs].tile,
&POC[numpocs].resno0, &POC[numpocs].compno0,
&POC[numpocs].layno1, &POC[numpocs].resno1,
&POC[numpocs].compno1, POC[numpocs].progorder) == 7) {
}else{
if((parameters->infile[0] == 0) || (parameters->outfile[0] == 0)) {
fprintf(stderr, "[ERROR] Required parameters are missing\n"
- "Example: %s -i image.j2k -o image.pgm\n",argv[0]);
+ "Example: %s -i image.pgm -o image.j2k\n",argv[0]);
fprintf(stderr, " Help: %s -h\n",argv[0]);
return 1;
}
}
}
+ /* If subsampled image is provided, automatically disable MCT */
+ if ( ((parameters->decod_format == RAW_DFMT) || (parameters->decod_format == RAWL_DFMT))
+ && ( ((raw_cp->rawComp > 1 ) && ((raw_cp->rawComps[1].dx > 1) || (raw_cp->rawComps[1].dy > 1)))
+ || ((raw_cp->rawComp > 2 ) && ((raw_cp->rawComps[2].dx > 1) || (raw_cp->rawComps[2].dy > 1)))
+ )) {
+ parameters->tcp_mct = 0;
+ }
+
return 0;
}
return 1;
}
- /* Create comment for codestream */
- if(parameters.cp_comment == NULL) {
- const char comment[] = "Created by OpenJPEG version ";
- const size_t clen = strlen(comment);
- const char *version = opj_version();
- /* UniPG>> */
-#ifdef USE_JPWL
- parameters.cp_comment = (char*)malloc(clen+strlen(version)+11);
- sprintf(parameters.cp_comment,"%s%s with JPWL", comment, version);
-#else
- parameters.cp_comment = (char*)malloc(clen+strlen(version)+1);
- sprintf(parameters.cp_comment,"%s%s", comment, version);
-#endif
- /* <<UniPG */
- }
-
/* Read directory if necessary */
if(img_fol.set_imgdir==1){
num_images=get_num_images(img_fol.imgdirpath);
}
default:
fprintf(stderr, "skipping file..\n");
- opj_stream_destroy_v3(l_stream);
+ opj_stream_destroy(l_stream);
continue;
}
parameters.cp_tdx = 512;
parameters.cp_tdy = 512;
}
- opj_setup_encoder(l_codec, ¶meters, image);
+ if (! opj_setup_encoder(l_codec, ¶meters, image)) {
+ fprintf(stderr, "failed to encode image: opj_setup_encoder\n");
+ opj_destroy_codec(l_codec);
+ opj_image_destroy(image);
+ return 1;
+ }
/* open a byte stream for writing and allocate memory for all tiles */
- l_stream = opj_stream_create_default_file_stream_v3(parameters.outfile,OPJ_FALSE);
+ l_stream = opj_stream_create_default_file_stream(parameters.outfile,OPJ_FALSE);
if (! l_stream){
return 1;
}
if (!bSuccess) {
fprintf(stderr, "failed to encode image: opj_start_compress\n");
}
- if( bUseTiles ) {
+ if( bSuccess && bUseTiles ) {
OPJ_BYTE *l_data;
OPJ_UINT32 l_data_size = 512*512*3;
- l_data = (OPJ_BYTE*) malloc( l_data_size * sizeof(OPJ_BYTE));
- memset(l_data, 0, l_data_size );
+ l_data = (OPJ_BYTE*) calloc( 1,l_data_size);
assert( l_data );
for (i=0;i<l_nb_tiles;++i) {
if (! opj_write_tile(l_codec,i,l_data,l_data_size,l_stream)) {
fprintf(stderr, "ERROR -> test_tile_encoder: failed to write the tile %d!\n",i);
- opj_stream_destroy_v3(l_stream);
+ opj_stream_destroy(l_stream);
opj_destroy_codec(l_codec);
opj_image_destroy(image);
return 1;
}
if (!bSuccess) {
- opj_stream_destroy_v3(l_stream);
+ opj_stream_destroy(l_stream);
opj_destroy_codec(l_codec);
opj_image_destroy(image);
fprintf(stderr, "failed to encode image\n");
+ remove(parameters.outfile);
return 1;
}
fprintf(stdout,"[INFO] Generated outfile %s\n",parameters.outfile);
/* close and free the byte stream */
- opj_stream_destroy_v3(l_stream);
+ opj_stream_destroy(l_stream);
/* free remaining compression structures */
opj_destroy_codec(l_codec);