X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=tests%2Ftest_tile_encoder.c;h=89b5f9018cb4301ee18f96791f661da14404ceee;hb=0c80fcff2a880aef6bc2757fcb374ab57512d7eb;hp=ee125b104cc8fceaea5944f92c565b39fc632bbe;hpb=80c23d451930e76cecab7a36bb73c460d59b9871;p=openjpeg.git diff --git a/tests/test_tile_encoder.c b/tests/test_tile_encoder.c index ee125b10..89b5f901 100644 --- a/tests/test_tile_encoder.c +++ b/tests/test_tile_encoder.c @@ -29,79 +29,47 @@ #include #include - -#ifdef _WIN32 -#include -#else -#include -#define _stricmp strcasecmp -#define _strnicmp strncasecmp -#endif /* _WIN32 */ - #include "opj_config.h" #include "openjpeg.h" #include "stdlib.h" - - -#define NUM_COMPS 3 -#define IMAGE_WIDTH 2000 -#define IMAGE_HEIGHT 2000 -#define TILE_WIDTH 1000 -#define TILE_HEIGHT 1000 -#define COMP_PREC 8 -#define OUTPUT_FILE "test.j2k" - /* -------------------------------------------------------------------------- */ -/** -sample error callback expecting a FILE* client object -*/ -void error_callback_file(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_file(const char *msg, void *client_data) { - FILE *stream = (FILE*)client_data; - fprintf(stream, "[WARNING] %s", msg); -} /** sample error debug callback expecting no client object */ -void error_callback(const char *msg, void *client_data) { +static void error_callback(const char *msg, void *client_data) { (void)client_data; fprintf(stdout, "[ERROR] %s", msg); } /** sample warning debug callback expecting no client object */ -void warning_callback(const char *msg, void *client_data) { +static void warning_callback(const char *msg, void *client_data) { (void)client_data; fprintf(stdout, "[WARNING] %s", msg); } /** sample debug callback expecting no client object */ -void info_callback(const char *msg, void *client_data) { +static void info_callback(const char *msg, void *client_data) { (void)client_data; fprintf(stdout, "[INFO] %s", msg); } /* -------------------------------------------------------------------------- */ -int main () +#define NUM_COMPS_MAX 4 +int main (int argc, char *argv[]) { opj_cparameters_t l_param; opj_codec_t * l_codec; opj_image_t * l_image; - opj_image_cmptparm_t l_params [NUM_COMPS]; - FILE * l_file; + opj_image_cmptparm_t l_params [NUM_COMPS_MAX]; opj_stream_t * l_stream; - OPJ_UINT32 l_nb_tiles = (IMAGE_WIDTH/TILE_WIDTH) * (IMAGE_HEIGHT/TILE_HEIGHT); - OPJ_UINT32 l_data_size = TILE_WIDTH * TILE_HEIGHT * NUM_COMPS * (COMP_PREC/8); + OPJ_UINT32 l_nb_tiles; + OPJ_UINT32 l_data_size; + unsigned char len; #ifdef USING_MCT const OPJ_FLOAT32 l_mct [] = @@ -121,12 +89,50 @@ int main () OPJ_UINT32 i; OPJ_BYTE *l_data; - //PROFINIT(); - l_data = (OPJ_BYTE*) malloc(TILE_WIDTH * TILE_HEIGHT * NUM_COMPS * (COMP_PREC/8) * sizeof(OPJ_BYTE)); + OPJ_UINT32 num_comps; + int image_width; + int image_height; + int tile_width; + int tile_height; + int comp_prec; + int irreversible; + char output_file[64]; + + /* should be test_tile_encoder 3 2000 2000 1000 1000 8 tte1.j2k */ + if( argc == 9 ) + { + num_comps = atoi( argv[1] ); + image_width = atoi( argv[2] ); + image_height = atoi( argv[3] ); + tile_width = atoi( argv[4] ); + tile_height = atoi( argv[5] ); + comp_prec = atoi( argv[6] ); + irreversible = atoi( argv[7] ); + strcpy(output_file, argv[8] ); + } + else + { + num_comps = 3; + image_width = 2000; + image_height = 2000; + tile_width = 1000; + tile_height = 1000; + comp_prec = 8; + irreversible = 1; + strcpy(output_file, "test.j2k" ); + } + if( num_comps > NUM_COMPS_MAX ) + { + return 1; + } + l_nb_tiles = (image_width/tile_width) * (image_height/tile_height); + l_data_size = tile_width * tile_height * num_comps * (comp_prec/8); + + l_data = (OPJ_BYTE*) malloc(tile_width * tile_height * num_comps * (comp_prec/8) * sizeof(OPJ_BYTE)); fprintf(stdout, "Encoding random values -> keep in mind that this is very hard to compress\n"); for (i=0;ibpp = COMP_PREC;*/ l_current_param_ptr->dx = 1; l_current_param_ptr->dy = 1; - l_current_param_ptr->h = IMAGE_HEIGHT; - l_current_param_ptr->w = IMAGE_WIDTH; + l_current_param_ptr->h = image_height; + l_current_param_ptr->w = image_width; l_current_param_ptr->sgnd = 0; - l_current_param_ptr->prec = COMP_PREC; + l_current_param_ptr->prec = comp_prec; l_current_param_ptr->x0 = 0; l_current_param_ptr->y0 = 0; @@ -219,7 +225,16 @@ int main () ++l_current_param_ptr; } - l_codec = opj_create_compress_v2(CODEC_J2K); + /* should we do j2k or jp2 ?*/ + len = (unsigned char)strlen( output_file ); + if( strcmp( output_file + len - 4, ".jp2" ) == 0 ) + { + l_codec = opj_create_compress(OPJ_CODEC_JP2); + } + else + { + l_codec = opj_create_compress(OPJ_CODEC_J2K); + } if (!l_codec) { return 1; } @@ -229,7 +244,7 @@ int main () opj_set_warning_handler(l_codec, warning_callback,00); opj_set_error_handler(l_codec, error_callback,00); - l_image = opj_image_tile_create(NUM_COMPS,l_params,CLRSPC_SRGB); + l_image = opj_image_tile_create(num_comps,l_params,OPJ_CLRSPC_SRGB); if (! l_image) { opj_destroy_codec(l_codec); return 1; @@ -237,31 +252,28 @@ int main () l_image->x0 = 0; l_image->y0 = 0; - l_image->x1 = IMAGE_WIDTH; - l_image->y1 = IMAGE_HEIGHT; - l_image->color_space = CLRSPC_SRGB; + l_image->x1 = image_width; + l_image->y1 = image_height; + l_image->color_space = OPJ_CLRSPC_SRGB; - if (! opj_setup_encoder_v2(l_codec,&l_param,l_image)) { + if (! opj_setup_encoder(l_codec,&l_param,l_image)) { fprintf(stderr, "ERROR -> test_tile_encoder: failed to setup the codec!\n"); opj_destroy_codec(l_codec); opj_image_destroy(l_image); return 1; } - l_file = fopen(OUTPUT_FILE,"wb"); - if (! l_file) { - fprintf(stderr, "ERROR -> test_tile_encoder: failed to create the output file!\n"); + l_stream = opj_stream_create_default_file_stream_v3(output_file, OPJ_FALSE); + if (! l_stream) { + fprintf(stderr, "ERROR -> test_tile_encoder: failed to create the stream from the output file %s !\n",output_file ); opj_destroy_codec(l_codec); opj_image_destroy(l_image); return 1; } - l_stream = opj_stream_create_default_file_stream(l_file, OPJ_FALSE); - if (! opj_start_compress(l_codec,l_image,l_stream)) { fprintf(stderr, "ERROR -> test_tile_encoder: failed to start compress!\n"); - opj_stream_destroy(l_stream); - fclose(l_file); + opj_stream_destroy_v3(l_stream); opj_destroy_codec(l_codec); opj_image_destroy(l_image); return 1; @@ -270,8 +282,7 @@ int main () for (i=0;i test_tile_encoder: failed to write the tile %d!\n",i); - opj_stream_destroy(l_stream); - fclose(l_file); + opj_stream_destroy_v3(l_stream); opj_destroy_codec(l_codec); opj_image_destroy(l_image); return 1; @@ -280,20 +291,20 @@ int main () if (! opj_end_compress(l_codec,l_stream)) { fprintf(stderr, "ERROR -> test_tile_encoder: failed to end compress!\n"); - opj_stream_destroy(l_stream); - fclose(l_file); + opj_stream_destroy_v3(l_stream); opj_destroy_codec(l_codec); opj_image_destroy(l_image); return 1; } - opj_stream_destroy(l_stream); - fclose(l_file); + opj_stream_destroy_v3(l_stream); opj_destroy_codec(l_codec); opj_image_destroy(l_image); - // Print profiling - //PROFPRINT(); + free(l_data); + + /* Print profiling*/ + /*PROFPRINT();*/ return 0; }