*/
/* -------------------------------------------------------------------------- */
int main(int argc, char **argv) {
+ FILE *fout = NULL;
- opj_cparameters_t parameters; /* compression parameters */
+ opj_cparameters_t parameters; /* compression parameters */
- opj_stream_t *l_stream = 00;
- opj_codec_t* l_codec = 00;
- opj_image_t *image = NULL;
- raw_cparameters_t raw_cp;
+ opj_stream_t *l_stream = 00;
+ opj_codec_t* l_codec = 00;
+ opj_image_t *image = NULL;
+ raw_cparameters_t raw_cp;
- char indexfilename[OPJ_PATH_LEN]; /* index file name */
+ char indexfilename[OPJ_PATH_LEN]; /* index file name */
- unsigned int i, num_images, imageno;
- img_fol_t img_fol;
- dircnt_t *dirptr = NULL;
+ unsigned int i, num_images, imageno;
+ img_fol_t img_fol;
+ dircnt_t *dirptr = NULL;
- OPJ_BOOL bSuccess;
- OPJ_BOOL bUseTiles = OPJ_FALSE; /* OPJ_TRUE */
- OPJ_UINT32 l_nb_tiles = 4;
+ OPJ_BOOL bSuccess;
+ OPJ_BOOL bUseTiles = OPJ_FALSE; /* OPJ_TRUE */
+ OPJ_UINT32 l_nb_tiles = 4;
- /* set encoding parameters to default values */
- opj_set_default_encoder_parameters(¶meters);
+ /* set encoding parameters to default values */
+ opj_set_default_encoder_parameters(¶meters);
- /* Initialize indexfilename and img_fol */
- *indexfilename = 0;
- memset(&img_fol,0,sizeof(img_fol_t));
+ /* Initialize indexfilename and img_fol */
+ *indexfilename = 0;
+ memset(&img_fol,0,sizeof(img_fol_t));
- /* parse input and get user encoding parameters */
- if(parse_cmdline_encoder(argc, argv, ¶meters,&img_fol, &raw_cp, indexfilename) == 1) {
- return 1;
- }
+ /* parse input and get user encoding parameters */
+ parameters.tcp_mct = -1; /* This will be set later according to the input image or the provided option */
+ if(parse_cmdline_encoder(argc, argv, ¶meters,&img_fol, &raw_cp, indexfilename) == 1) {
+ return 1;
+ }
- if (parameters.cp_cinema){
- img_fol.rates = (float*)malloc(parameters.tcp_numlayers * sizeof(float));
- for(i=0; i< parameters.tcp_numlayers; i++){
- img_fol.rates[i] = parameters.tcp_rates[i];
- }
- cinema_parameters(¶meters);
- }
-
- /* 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>> */
+ /* 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);
+ 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);
+ 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);
- dirptr=(dircnt_t*)malloc(sizeof(dircnt_t));
- if(dirptr){
- dirptr->filename_buf = (char*)malloc(num_images*OPJ_PATH_LEN*sizeof(char)); /* Stores at max 10 image file names*/
- dirptr->filename = (char**) malloc(num_images*sizeof(char*));
- if(!dirptr->filename_buf){
- return 0;
- }
- for(i=0;i<num_images;i++){
- dirptr->filename[i] = dirptr->filename_buf + i*OPJ_PATH_LEN;
- }
- }
- if(load_images(dirptr,img_fol.imgdirpath)==1){
- return 0;
- }
- if (num_images==0){
- fprintf(stdout,"Folder is empty\n");
- return 0;
- }
- }else{
- num_images=1;
- }
- /*Encoding image one by one*/
- for(imageno=0;imageno<num_images;imageno++) {
- image = NULL;
- fprintf(stderr,"\n");
-
- if(img_fol.set_imgdir==1){
- if (get_next_file(imageno, dirptr,&img_fol, ¶meters)) {
- fprintf(stderr,"skipping file...\n");
- continue;
- }
- }
+ /* <<UniPG */
+ }
- switch(parameters.decod_format) {
- case PGX_DFMT:
- break;
- case PXM_DFMT:
- break;
- case BMP_DFMT:
- break;
- case TIF_DFMT:
- break;
- case RAW_DFMT:
- case RAWL_DFMT:
- break;
- case TGA_DFMT:
- break;
- case PNG_DFMT:
- break;
- default:
- fprintf(stderr,"skipping file...\n");
- continue;
- }
+ /* Read directory if necessary */
+ if(img_fol.set_imgdir==1){
+ num_images=get_num_images(img_fol.imgdirpath);
+ dirptr=(dircnt_t*)malloc(sizeof(dircnt_t));
+ if(dirptr){
+ dirptr->filename_buf = (char*)malloc(num_images*OPJ_PATH_LEN*sizeof(char)); /* Stores at max 10 image file names*/
+ dirptr->filename = (char**) malloc(num_images*sizeof(char*));
+ if(!dirptr->filename_buf){
+ return 0;
+ }
+ for(i=0;i<num_images;i++){
+ dirptr->filename[i] = dirptr->filename_buf + i*OPJ_PATH_LEN;
+ }
+ }
+ if(load_images(dirptr,img_fol.imgdirpath)==1){
+ return 0;
+ }
+ if (num_images==0){
+ fprintf(stdout,"Folder is empty\n");
+ return 0;
+ }
+ }else{
+ num_images=1;
+ }
+ /*Encoding image one by one*/
+ for(imageno=0;imageno<num_images;imageno++) {
+ image = NULL;
+ fprintf(stderr,"\n");
+
+ if(img_fol.set_imgdir==1){
+ if (get_next_file((int)imageno, dirptr,&img_fol, ¶meters)) {
+ fprintf(stderr,"skipping file...\n");
+ continue;
+ }
+ }
- /* decode the source image */
- /* ----------------------- */
-
- switch (parameters.decod_format) {
- case PGX_DFMT:
- image = pgxtoimage(parameters.infile, ¶meters);
- if (!image) {
- fprintf(stderr, "Unable to load pgx file\n");
- return 1;
- }
- break;
-
- case PXM_DFMT:
- image = pnmtoimage(parameters.infile, ¶meters);
- if (!image) {
- fprintf(stderr, "Unable to load pnm file\n");
- return 1;
- }
- break;
-
- case BMP_DFMT:
- image = bmptoimage(parameters.infile, ¶meters);
- if (!image) {
- fprintf(stderr, "Unable to load bmp file\n");
- return 1;
- }
- break;
-
- #ifdef HAVE_LIBTIFF
- case TIF_DFMT:
- image = tiftoimage(parameters.infile, ¶meters);
- if (!image) {
- fprintf(stderr, "Unable to load tiff file\n");
- return 1;
- }
- break;
- #endif /* HAVE_LIBTIFF */
-
- case RAW_DFMT:
- image = rawtoimage(parameters.infile, ¶meters, &raw_cp);
- if (!image) {
- fprintf(stderr, "Unable to load raw file\n");
- return 1;
- }
- break;
-
- case RAWL_DFMT:
- image = rawltoimage(parameters.infile, ¶meters, &raw_cp);
- if (!image) {
- fprintf(stderr, "Unable to load raw file\n");
- return 1;
- }
- break;
-
- case TGA_DFMT:
- image = tgatoimage(parameters.infile, ¶meters);
- if (!image) {
- fprintf(stderr, "Unable to load tga file\n");
- return 1;
- }
- break;
-
- #ifdef HAVE_LIBPNG
- case PNG_DFMT:
- image = pngtoimage(parameters.infile, ¶meters);
- if (!image) {
- fprintf(stderr, "Unable to load png file\n");
- return 1;
- }
- break;
- #endif /* HAVE_LIBPNG */
- }
+ switch(parameters.decod_format) {
+ case PGX_DFMT:
+ break;
+ case PXM_DFMT:
+ break;
+ case BMP_DFMT:
+ break;
+ case TIF_DFMT:
+ break;
+ case RAW_DFMT:
+ case RAWL_DFMT:
+ break;
+ case TGA_DFMT:
+ break;
+ case PNG_DFMT:
+ break;
+ default:
+ fprintf(stderr,"skipping file...\n");
+ continue;
+ }
- /* Can happen if input file is TIFF or PNG
- * and HAVE_LIBTIF or HAVE_LIBPNG is undefined
+ /* decode the source image */
+ /* ----------------------- */
+
+ switch (parameters.decod_format) {
+ case PGX_DFMT:
+ image = pgxtoimage(parameters.infile, ¶meters);
+ if (!image) {
+ fprintf(stderr, "Unable to load pgx file\n");
+ return 1;
+ }
+ break;
+
+ case PXM_DFMT:
+ image = pnmtoimage(parameters.infile, ¶meters);
+ if (!image) {
+ fprintf(stderr, "Unable to load pnm file\n");
+ return 1;
+ }
+ break;
+
+ case BMP_DFMT:
+ image = bmptoimage(parameters.infile, ¶meters);
+ if (!image) {
+ fprintf(stderr, "Unable to load bmp file\n");
+ return 1;
+ }
+ break;
+
+ #ifdef OPJ_HAVE_LIBTIFF
+ case TIF_DFMT:
+ image = tiftoimage(parameters.infile, ¶meters);
+ if (!image) {
+ fprintf(stderr, "Unable to load tiff file\n");
+ return 1;
+ }
+ break;
+ #endif /* OPJ_HAVE_LIBTIFF */
+
+ case RAW_DFMT:
+ image = rawtoimage(parameters.infile, ¶meters, &raw_cp);
+ if (!image) {
+ fprintf(stderr, "Unable to load raw file\n");
+ return 1;
+ }
+ break;
+
+ case RAWL_DFMT:
+ image = rawltoimage(parameters.infile, ¶meters, &raw_cp);
+ if (!image) {
+ fprintf(stderr, "Unable to load raw file\n");
+ return 1;
+ }
+ break;
+
+ case TGA_DFMT:
+ image = tgatoimage(parameters.infile, ¶meters);
+ if (!image) {
+ fprintf(stderr, "Unable to load tga file\n");
+ return 1;
+ }
+ break;
+
+ #ifdef OPJ_HAVE_LIBPNG
+ case PNG_DFMT:
+ image = pngtoimage(parameters.infile, ¶meters);
+ if (!image) {
+ fprintf(stderr, "Unable to load png file\n");
+ return 1;
+ }
+ break;
+ #endif /* OPJ_HAVE_LIBPNG */
+ }
+
+ /* Can happen if input file is TIFF or PNG
+ * and OPJ_HAVE_LIBTIF or OPJ_HAVE_LIBPNG is undefined
*/
- if( !image) {
- fprintf(stderr, "Unable to load file: got no image\n");
- return 1;
- }
+ if( !image) {
+ fprintf(stderr, "Unable to load file: got no image\n");
+ return 1;
+ }
- /* Decide if MCT should be used */
- parameters.tcp_mct = image->numcomps == 3 ? 1 : 0;
+ /* Decide if MCT should be used */
+ if (parameters.tcp_mct == -1) { /* mct mode has not been set in commandline */
+ parameters.tcp_mct = image->numcomps >= 3 ? 1 : 0;
+ } else { /* mct mode has been set in commandline */
+ if ((parameters.tcp_mct == 1) && (image->numcomps < 3)){
+ fprintf(stderr, "RGB->YCC conversion cannot be used:\n");
+ fprintf(stderr, "Input image has less than 3 components\n");
+ return 1;
+ }
+ if ((parameters.tcp_mct == 2) && (!parameters.mct_data)){
+ fprintf(stderr, "Custom MCT has been set but no array-based MCT\n");
+ fprintf(stderr, "has been provided. Aborting.\n");
+ return 1;
+ }
+ }
- if(parameters.cp_cinema){
- cinema_setup_encoder(¶meters,image,&img_fol);
- }
+ /* encode the destination image */
+ /* ---------------------------- */
- /* encode the destination image */
- /* ---------------------------- */
-
- switch(parameters.cod_format) {
- case J2K_CFMT: /* JPEG-2000 codestream */
- {
- /* Get a decoder handle */
- l_codec = opj_create_compress(OPJ_CODEC_J2K);
- break;
- }
- case JP2_CFMT: /* JPEG 2000 compressed image data */
- {
- /* Get a decoder handle */
- l_codec = opj_create_compress(OPJ_CODEC_JP2);
- break;
- }
- default:
- fprintf(stderr, "skipping file..\n");
- opj_stream_destroy(l_stream);
- continue;
- }
-
- /* catch events using our callbacks and give a local context */
- opj_set_info_handler(l_codec, info_callback,00);
- opj_set_warning_handler(l_codec, warning_callback,00);
- opj_set_error_handler(l_codec, error_callback,00);
-
- if( bUseTiles ) {
- parameters.cp_tx0 = 0;
- parameters.cp_ty0 = 0;
- parameters.tile_size_on = OPJ_TRUE;
- parameters.cp_tdx = 512;
- parameters.cp_tdy = 512;
- }
- opj_setup_encoder(l_codec, ¶meters, image);
+ switch(parameters.cod_format) {
+ case J2K_CFMT: /* JPEG-2000 codestream */
+ {
+ /* Get a decoder handle */
+ l_codec = opj_create_compress(OPJ_CODEC_J2K);
+ break;
+ }
+ case JP2_CFMT: /* JPEG 2000 compressed image data */
+ {
+ /* Get a decoder handle */
+ l_codec = opj_create_compress(OPJ_CODEC_JP2);
+ break;
+ }
+ default:
+ fprintf(stderr, "skipping file..\n");
- opj_stream_destroy_v3(l_stream);
++ opj_stream_destroy(l_stream);
+ continue;
+ }
+
+ /* catch events using our callbacks and give a local context */
+ opj_set_info_handler(l_codec, info_callback,00);
+ opj_set_warning_handler(l_codec, warning_callback,00);
+ opj_set_error_handler(l_codec, error_callback,00);
+
+ if( bUseTiles ) {
+ parameters.cp_tx0 = 0;
+ parameters.cp_ty0 = 0;
+ parameters.tile_size_on = OPJ_TRUE;
+ parameters.cp_tdx = 512;
+ parameters.cp_tdy = 512;
+ }
+ opj_setup_encoder(l_codec, ¶meters, image);
- /* open a byte stream for writing and allocate memory for all tiles */
- l_stream = opj_stream_create_default_file_stream(fout,OPJ_FALSE);
- if (! l_stream){
- return 1;
- }
+ /* Open the output file*/
+ fout = fopen(parameters.outfile, "wb");
+ if (! fout) {
+ fprintf(stderr, "Not enable to create output file!\n");
+ opj_stream_destroy(l_stream);
+ return 1;
+ }
+
- l_stream = opj_stream_create_default_file_stream_v3(parameters.outfile,OPJ_FALSE);
+ /* open a byte stream for writing and allocate memory for all tiles */
++ l_stream = opj_stream_create_default_file_stream(fout,OPJ_FALSE);
+ if (! l_stream){
+ return 1;
+ }
- /* encode the image */
- bSuccess = opj_start_compress(l_codec,image,l_stream);
- if (!bSuccess) {
- fprintf(stderr, "failed to encode image: opj_start_compress\n");
- }
- if( 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 );
- 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(l_stream);
+ /* encode the image */
+ bSuccess = opj_start_compress(l_codec,image,l_stream);
+ if (!bSuccess) {
+ fprintf(stderr, "failed to encode image: opj_start_compress\n");
+ }
+ if( 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 );
+ 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);
+ fclose(fout);
- opj_destroy_codec(l_codec);
- opj_image_destroy(image);
- return 1;
+ opj_destroy_codec(l_codec);
+ opj_image_destroy(image);
+ return 1;
+ }
+ }
+ free(l_data);
+ }
+ else {
+ bSuccess = bSuccess && opj_encode(l_codec, l_stream);
+ if (!bSuccess) {
+ fprintf(stderr, "failed to encode image: opj_encode\n");
+ }
+ }
+ bSuccess = bSuccess && opj_end_compress(l_codec, l_stream);
+ if (!bSuccess) {
+ fprintf(stderr, "failed to encode image: opj_end_compress\n");
}
- }
- free(l_data);
- }
- else {
- bSuccess = bSuccess && opj_encode(l_codec, l_stream);
- if (!bSuccess) {
- fprintf(stderr, "failed to encode image: opj_encode\n");
- }
- }
- bSuccess = bSuccess && opj_end_compress(l_codec, l_stream);
- if (!bSuccess) {
- fprintf(stderr, "failed to encode image: opj_end_compress\n");
- }
- if (!bSuccess) {
- opj_stream_destroy(l_stream);
- fclose(fout);
- opj_destroy_codec(l_codec);
- opj_image_destroy(image);
- fprintf(stderr, "failed to encode image\n");
- return 1;
- }
+ if (!bSuccess) {
- opj_stream_destroy_v3(l_stream);
++ opj_stream_destroy(l_stream);
++ fclose(fout);
+ opj_destroy_codec(l_codec);
+ opj_image_destroy(image);
+ fprintf(stderr, "failed to encode image\n");
+ return 1;
+ }
- fprintf(stderr,"Generated outfile %s\n",parameters.outfile);
- /* close and free the byte stream */
- opj_stream_destroy(l_stream);
+ fprintf(stderr,"Generated outfile %s\n",parameters.outfile);
+ /* close and free the byte stream */
- opj_stream_destroy_v3(l_stream);
++ opj_stream_destroy(l_stream);
+ fclose(fout);
- /* free remaining compression structures */
- opj_destroy_codec(l_codec);
+ /* free remaining compression structures */
+ opj_destroy_codec(l_codec);
- /* free image data */
- opj_image_destroy(image);
+ /* free image data */
+ opj_image_destroy(image);
- }
+ }
- /* free user parameters structure */
- if(parameters.cp_comment) free(parameters.cp_comment);
- if(parameters.cp_matrice) free(parameters.cp_matrice);
- if(parameters.cp_cinema) free(img_fol.rates);
+ /* free user parameters structure */
+ if(parameters.cp_comment) free(parameters.cp_comment);
+ if(parameters.cp_matrice) free(parameters.cp_matrice);
- return 0;
+ return 0;
}