- 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;
- }
-
- if (! opj_start_compress(l_codec,l_image,l_stream)) {
- fprintf(stderr, "ERROR -> test_tile_encoder: failed to start compress!\n");
- opj_stream_destroy_v3(l_stream);
- opj_destroy_codec(l_codec);
- opj_image_destroy(l_image);
- return 1;
- }
-
- 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_destroy_codec(l_codec);
- opj_image_destroy(l_image);
- return 1;
- }
- }
-
- if (! opj_end_compress(l_codec,l_stream)) {
- fprintf(stderr, "ERROR -> test_tile_encoder: failed to end compress!\n");
- opj_stream_destroy_v3(l_stream);
- opj_destroy_codec(l_codec);
- opj_image_destroy(l_image);
- return 1;
- }
-
- opj_stream_destroy_v3(l_stream);
- opj_destroy_codec(l_codec);
- opj_image_destroy(l_image);
-
- free(l_data);
-
- /* Print profiling*/
- /*PROFPRINT();*/
-
- return 0;
+ 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);
+ free(l_data);
+ return 1;
+ }
+
+ 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);
+ opj_destroy_codec(l_codec);
+ opj_image_destroy(l_image);
+ free(l_data);
+ return 1;
+ }
+
+ for (i = 0; i < l_nb_tiles; ++i) {
+ OPJ_UINT32 tile_y = i / l_nb_tiles_width;
+ OPJ_UINT32 tile_x = i % l_nb_tiles_width;
+ OPJ_UINT32 tile_x0 = opj_uint_max(l_image->x0, tile_x * (OPJ_UINT32)tile_width);
+ OPJ_UINT32 tile_y0 = opj_uint_max(l_image->y0,
+ tile_y * (OPJ_UINT32)tile_height);
+ OPJ_UINT32 tile_x1 = opj_uint_min(l_image->x1,
+ (tile_x + 1) * (OPJ_UINT32)tile_width);
+ OPJ_UINT32 tile_y1 = opj_uint_min(l_image->y1,
+ (tile_y + 1) * (OPJ_UINT32)tile_height);
+ OPJ_UINT32 tilesize = (tile_x1 - tile_x0) * (tile_y1 - tile_y0) *
+ (OPJ_UINT32)num_comps * (OPJ_UINT32)(comp_prec / 8);
+ if (! opj_write_tile(l_codec, i, l_data, tilesize, l_stream)) {
+ fprintf(stderr, "ERROR -> test_tile_encoder: failed to write the tile %d!\n",
+ i);
+ opj_stream_destroy(l_stream);
+ opj_destroy_codec(l_codec);
+ opj_image_destroy(l_image);
+ free(l_data);
+ return 1;
+ }
+ }
+
+ if (! opj_end_compress(l_codec, l_stream)) {
+ fprintf(stderr, "ERROR -> test_tile_encoder: failed to end compress!\n");
+ opj_stream_destroy(l_stream);
+ opj_destroy_codec(l_codec);
+ opj_image_destroy(l_image);
+ free(l_data);
+ return 1;
+ }
+
+ opj_stream_destroy(l_stream);
+ opj_destroy_codec(l_codec);
+ opj_image_destroy(l_image);
+
+ free(l_data);
+
+ /* Print profiling*/
+ /*PROFPRINT();*/
+
+ return 0;