OLD | NEW |
1 /* | 1 /* |
2 * The copyright in this software is being made available under the 2-clauses | 2 * The copyright in this software is being made available under the 2-clauses |
3 * BSD License, included below. This software may be subject to other third | 3 * BSD License, included below. This software may be subject to other third |
4 * party and contributor rights, including patent rights, and no such rights | 4 * party and contributor rights, including patent rights, and no such rights |
5 * are granted under this license. | 5 * are granted under this license. |
6 * | 6 * |
7 * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium | 7 * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium |
8 * Copyright (c) 2002-2014, Professor Benoit Macq | 8 * Copyright (c) 2002-2014, Professor Benoit Macq |
9 * Copyright (c) 2001-2003, David Janssens | 9 * Copyright (c) 2001-2003, David Janssens |
10 * Copyright (c) 2002-2003, Yannick Verschueren | 10 * Copyright (c) 2002-2003, Yannick Verschueren |
(...skipping 320 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
331 opj_stream_private_t *p_stream, | 331 opj_stream_private_t *p_stream, |
332 opj_event_mgr_t * p_manager); | 332 opj_event_mgr_t * p_manager); |
333 | 333 |
334 static OPJ_BOOL opj_j2k_pre_write_tile ( opj_j2k_t * p_j2k, | 334 static OPJ_BOOL opj_j2k_pre_write_tile ( opj_j2k_t * p_j2k, |
335 OPJ
_UINT32 p_tile_index, | 335 OPJ
_UINT32 p_tile_index, |
336 opj
_stream_private_t *p_stream, | 336 opj
_stream_private_t *p_stream, |
337 opj
_event_mgr_t * p_manager ); | 337 opj
_event_mgr_t * p_manager ); |
338 | 338 |
339 static OPJ_BOOL opj_j2k_update_image_data (opj_tcd_t * p_tcd, OPJ_BYTE * p_data,
opj_image_t* p_output_image); | 339 static OPJ_BOOL opj_j2k_update_image_data (opj_tcd_t * p_tcd, OPJ_BYTE * p_data,
opj_image_t* p_output_image); |
340 | 340 |
| 341 static void opj_get_tile_dimensions(opj_image_t * l_image, |
| 342
opj_tcd_tilecomp
_t * l_tilec, |
| 343
opj_image_comp_t
* l_img_comp, |
| 344
OPJ_UINT32* l_si
ze_comp, |
| 345
OPJ_UINT32* l_wi
dth, |
| 346
OPJ_UINT32* l_he
ight, |
| 347
OPJ_UINT32* l_of
fset_x, |
| 348
OPJ_UINT32* l_of
fset_y, |
| 349
OPJ_UINT32* l_im
age_width, |
| 350
OPJ_UINT32* l_st
ride, |
| 351
OPJ_UINT32* l_ti
le_offset); |
| 352 |
341 static void opj_j2k_get_tile_data (opj_tcd_t * p_tcd, OPJ_BYTE * p_data); | 353 static void opj_j2k_get_tile_data (opj_tcd_t * p_tcd, OPJ_BYTE * p_data); |
342 | 354 |
343 static OPJ_BOOL opj_j2k_post_write_tile (opj_j2k_t * p_j2k, | 355 static OPJ_BOOL opj_j2k_post_write_tile (opj_j2k_t * p_j2k, |
344 OPJ
_BYTE * p_data, | |
345 OPJ
_UINT32 p_data_size, | |
346 opj
_stream_private_t *p_stream, | 356 opj
_stream_private_t *p_stream, |
347 opj
_event_mgr_t * p_manager ); | 357 opj
_event_mgr_t * p_manager ); |
348 | 358 |
349 /** | 359 /** |
350 * Sets up the procedures to do on writing header. | 360 * Sets up the procedures to do on writing header. |
351 * Developers wanting to extend the library can add their own writing procedures
. | 361 * Developers wanting to extend the library can add their own writing procedures
. |
352 */ | 362 */ |
353 static void opj_j2k_setup_header_writing (opj_j2k_t *p_j2k); | 363 static void opj_j2k_setup_header_writing (opj_j2k_t *p_j2k); |
354 | 364 |
355 static OPJ_BOOL opj_j2k_write_first_tile_part( opj_j2k_t *p_j2k, | 365 static OPJ_BOOL opj_j2k_write_first_tile_part( opj_j2k_t *p_j2k, |
(...skipping 9393 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9749 } | 9759 } |
9750 } | 9760 } |
9751 | 9761 |
9752 return OPJ_FALSE; | 9762 return OPJ_FALSE; |
9753 } | 9763 } |
9754 | 9764 |
9755 OPJ_BOOL opj_j2k_encode(opj_j2k_t * p_j2k, | 9765 OPJ_BOOL opj_j2k_encode(opj_j2k_t * p_j2k, |
9756 opj_stream_private_t *p_stream, | 9766 opj_stream_private_t *p_stream, |
9757 opj_event_mgr_t * p_manager ) | 9767 opj_event_mgr_t * p_manager ) |
9758 { | 9768 { |
9759 OPJ_UINT32 i; | 9769 OPJ_UINT32 i, j; |
9760 OPJ_UINT32 l_nb_tiles; | 9770 OPJ_UINT32 l_nb_tiles; |
9761 OPJ_UINT32 l_max_tile_size, l_current_tile_size; | 9771 OPJ_UINT32 l_max_tile_size = 0, l_current_tile_size; |
9762 OPJ_BYTE * l_current_data; | 9772 OPJ_BYTE * l_current_data = 00; |
| 9773 opj_tcd_t* p_tcd = 00; |
9763 | 9774 |
9764 /* preconditions */ | 9775 /* preconditions */ |
9765 assert(p_j2k != 00); | 9776 assert(p_j2k != 00); |
9766 assert(p_stream != 00); | 9777 assert(p_stream != 00); |
9767 assert(p_manager != 00); | 9778 assert(p_manager != 00); |
9768 | 9779 |
9769 l_current_data = (OPJ_BYTE*)opj_malloc(1000); | 9780 p_tcd = p_j2k->m_tcd; |
9770 if (! l_current_data) { | |
9771 opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to encode
all tiles\n"); | |
9772 return OPJ_FALSE; | |
9773 } | |
9774 l_max_tile_size = 1000; | |
9775 | 9781 |
9776 l_nb_tiles = p_j2k->m_cp.th * p_j2k->m_cp.tw; | 9782 l_nb_tiles = p_j2k->m_cp.th * p_j2k->m_cp.tw; |
9777 for (i=0;i<l_nb_tiles;++i) { | 9783 for (i=0;i<l_nb_tiles;++i) { |
9778 if (! opj_j2k_pre_write_tile(p_j2k,i,p_stream,p_manager)) { | 9784 if (! opj_j2k_pre_write_tile(p_j2k,i,p_stream,p_manager)) { |
9779 opj_free(l_current_data); | 9785 if (l_current_data) { |
| 9786 opj_free(l_current_data); |
| 9787 } |
9780 return OPJ_FALSE; | 9788 return OPJ_FALSE; |
9781 } | 9789 } |
9782 | 9790 |
| 9791 /* if we only have one tile, then simply set tile component data
equal to image component data */ |
| 9792 /* otherwise, allocate the data */ |
| 9793 for (j=0;j<p_j2k->m_tcd->image->numcomps;++j) { |
| 9794 opj_tcd_tilecomp_t* l_tilec = p_tcd->tcd_image->tiles->c
omps + j; |
| 9795 if (l_nb_tiles == 1) { |
| 9796
opj_image_comp_t * l_img_comp = p_tcd->image->comps + j; |
| 9797
l_tilec->data = l_img_comp->data; |
| 9798
l_tilec->ownsData = OPJ_FALSE; |
| 9799 } else { |
| 9800
if(! opj_alloc_tile_component_data(l_tilec)) { |
| 9801
opj_event_msg(p_manager, EVT_ERROR, "Error alloc
ating tile component data." ); |
| 9802
if (l_current_data) { |
| 9803
opj_free(l_current_data); |
| 9804
} |
| 9805
return OPJ_FALSE; |
| 9806
} |
| 9807
opj_alloc_tile_component_data(l_tilec); |
| 9808 } |
| 9809 } |
9783 l_current_tile_size = opj_tcd_get_encoded_tile_size(p_j2k->m_tcd
); | 9810 l_current_tile_size = opj_tcd_get_encoded_tile_size(p_j2k->m_tcd
); |
9784 if (l_current_tile_size > l_max_tile_size) { | 9811 if (l_nb_tiles > 1) { |
9785 OPJ_BYTE *l_new_current_data = (OPJ_BYTE *) opj_realloc(
l_current_data, l_current_tile_size); | 9812 if (l_current_tile_size > l_max_tile_size) { |
9786 if (! l_new_current_data) { | 9813 » » » » » » » » » »
» » OPJ_BYTE *l_new_current_data = (OPJ_BYTE *) opj_realloc(
l_current_data, l_current_tile_size); |
9787 opj_free(l_current_data); | 9814 » » » » » » » » » »
» » if (! l_new_current_data) { |
9788 opj_event_msg(p_manager, EVT_ERROR, "Not enough
memory to encode all tiles\n"); | 9815 » » » » » » » » » »
» » if (l_current_data) { |
9789 return OPJ_FALSE; | 9816 » » » » » » » » » »
» » opj_free(l_current_data); |
| 9817 » » » » » » » » » »
» » } |
| 9818 » » » » » » » » » »
» » opj_event_msg(p_manager, EVT_ERROR, "Not enough
memory to encode all tiles\n"); |
| 9819 » » » » » » » » » »
» » return OPJ_FALSE; |
| 9820 » » » » » » » » » »
» » » » » » } |
| 9821 » » » » » » » » » »
» » » » » » l_current_data = l_new_current_d
ata; |
| 9822 » » » » » » » » » »
» » » » » » l_max_tile_size = l_current_tile
_size; |
9790 } | 9823 } |
9791 l_current_data = l_new_current_data; | 9824 |
9792 l_max_tile_size = l_current_tile_size; | 9825 /* copy image data (32 bit) to l_current_data as contigu
ous, all-component, zero offset buffer */ |
| 9826 /* 32 bit components @ 8 bit precision get converted to
8 bit */ |
| 9827 /* 32 bit components @ 16 bit precision get converted to
16 bit */ |
| 9828 opj_j2k_get_tile_data(p_j2k->m_tcd,l_current_data); |
| 9829 |
| 9830 /* now copy this data into the tile component */ |
| 9831 if (! opj_tcd_copy_tile_data(p_j2k->m_tcd,l_current_data
,l_current_tile_size)) { |
| 9832 » » » » » » » » » »
» » » » » » opj_event_msg(p_manager, EVT_ERR
OR, "Size mismatch between tile data and sent data." ); |
| 9833 » » » » » » » » » »
» » » » » » return OPJ_FALSE; |
| 9834 } |
9793 } | 9835 } |
9794 | 9836 |
9795 opj_j2k_get_tile_data(p_j2k->m_tcd,l_current_data); | 9837 if (! opj_j2k_post_write_tile (p_j2k,p_stream,p_manager)) { |
9796 | |
9797 if (! opj_j2k_post_write_tile (p_j2k,l_current_data,l_current_ti
le_size,p_stream,p_manager)) { | |
9798 return OPJ_FALSE; | 9838 return OPJ_FALSE; |
9799 } | 9839 } |
9800 } | 9840 } |
9801 | 9841 |
9802 opj_free(l_current_data); | 9842 if (l_current_data) { |
| 9843 opj_free(l_current_data); |
| 9844 } |
9803 return OPJ_TRUE; | 9845 return OPJ_TRUE; |
9804 } | 9846 } |
9805 | 9847 |
9806 OPJ_BOOL opj_j2k_end_compress( opj_j2k_t *p_j2k, | 9848 OPJ_BOOL opj_j2k_end_compress( opj_j2k_t *p_j2k, |
9807 opj_stream_private_t *p_
stream, | 9849 opj_stream_private_t *p_
stream, |
9808 opj_event_mgr_t * p_mana
ger) | 9850 opj_event_mgr_t * p_mana
ger) |
9809 { | 9851 { |
9810 /* customization of the encoding */ | 9852 /* customization of the encoding */ |
9811 opj_j2k_setup_end_compress(p_j2k); | 9853 opj_j2k_setup_end_compress(p_j2k); |
9812 | 9854 |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9884 p_j2k->m_specific_param.m_encoder.m_current_poc_tile_part_number = 0; | 9926 p_j2k->m_specific_param.m_encoder.m_current_poc_tile_part_number = 0; |
9885 | 9927 |
9886 /* initialisation before tile encoding */ | 9928 /* initialisation before tile encoding */ |
9887 if (! opj_tcd_init_encode_tile(p_j2k->m_tcd, p_j2k->m_current_tile_numbe
r)) { | 9929 if (! opj_tcd_init_encode_tile(p_j2k->m_tcd, p_j2k->m_current_tile_numbe
r)) { |
9888 return OPJ_FALSE; | 9930 return OPJ_FALSE; |
9889 } | 9931 } |
9890 | 9932 |
9891 return OPJ_TRUE; | 9933 return OPJ_TRUE; |
9892 } | 9934 } |
9893 | 9935 |
| 9936 void opj_get_tile_dimensions(opj_image_t * l_image, |
| 9937 opj_tcd_tilecomp_t * l_tilec, |
| 9938 opj_image_comp_t * l_img_comp, |
| 9939 OPJ_UINT32* l_size_comp, |
| 9940 OPJ_UINT32* l_width, |
| 9941 OPJ_UINT32* l_height, |
| 9942 OPJ_UINT32* l_offset_x, |
| 9943 OPJ_UINT32* l_offset_y, |
| 9944 OPJ_UINT32* l_image_width, |
| 9945 OPJ_UINT32* l_stride, |
| 9946 OPJ_UINT32* l_tile_offset) { |
| 9947 OPJ_UINT32 l_remaining; |
| 9948 *l_size_comp = l_img_comp->prec >> 3; /* (/8) */ |
| 9949 l_remaining = l_img_comp->prec & 7; /* (%8) */ |
| 9950 if (l_remaining) { |
| 9951 *l_size_comp += 1; |
| 9952 } |
| 9953 |
| 9954 if (*l_size_comp == 3) { |
| 9955 *l_size_comp = 4; |
| 9956 } |
| 9957 |
| 9958 *l_width = (OPJ_UINT32)(l_tilec->x1 - l_tilec->x0); |
| 9959 *l_height = (OPJ_UINT32)(l_tilec->y1 - l_tilec->y0); |
| 9960 *l_offset_x = (OPJ_UINT32)opj_int_ceildiv((OPJ_INT32)l_image->x0, (OPJ_I
NT32)l_img_comp->dx); |
| 9961 *l_offset_y = (OPJ_UINT32)opj_int_ceildiv((OPJ_INT32)l_image->y0, (OPJ_I
NT32)l_img_comp->dy); |
| 9962 *l_image_width = (OPJ_UINT32)opj_int_ceildiv((OPJ_INT32)l_image->x1 - (O
PJ_INT32)l_image->x0, (OPJ_INT32)l_img_comp->dx); |
| 9963 *l_stride = *l_image_width - *l_width; |
| 9964 *l_tile_offset = ((OPJ_UINT32)l_tilec->x0 - *l_offset_x) + ((OPJ_UINT32)
l_tilec->y0 - *l_offset_y) * *l_image_width; |
| 9965 } |
| 9966 |
9894 void opj_j2k_get_tile_data (opj_tcd_t * p_tcd, OPJ_BYTE * p_data) | 9967 void opj_j2k_get_tile_data (opj_tcd_t * p_tcd, OPJ_BYTE * p_data) |
9895 { | 9968 { |
9896 OPJ_UINT32 i,j,k = 0; | 9969 OPJ_UINT32 i,j,k = 0; |
9897 OPJ_UINT32 l_width,l_height,l_stride, l_offset_x,l_offset_y, l_image_wid
th; | |
9898 opj_image_comp_t * l_img_comp = 00; | |
9899 opj_tcd_tilecomp_t * l_tilec = 00; | |
9900 opj_image_t * l_image = 00; | |
9901 OPJ_UINT32 l_size_comp, l_remaining; | |
9902 OPJ_INT32 * l_src_ptr; | |
9903 l_tilec = p_tcd->tcd_image->tiles->comps; | |
9904 l_image = p_tcd->image; | |
9905 l_img_comp = l_image->comps; | |
9906 | 9970 |
9907 for (i=0;i<p_tcd->image->numcomps;++i) { | 9971 for (i=0;i<p_tcd->image->numcomps;++i) { |
9908 l_size_comp = l_img_comp->prec >> 3; /* (/8) */ | 9972 opj_image_t * l_image = p_tcd->image; |
9909 l_remaining = l_img_comp->prec & 7; /* (%8) */ | 9973 OPJ_INT32 * l_src_ptr; |
9910 if (l_remaining) { | 9974 opj_tcd_tilecomp_t * l_tilec = p_tcd->tcd_image->tiles->comps +
i; |
9911 ++l_size_comp; | 9975 opj_image_comp_t * l_img_comp = l_image->comps + i; |
9912 } | 9976 OPJ_UINT32 l_size_comp,l_width,l_height,l_offset_x,l_offset_y, l
_image_width,l_stride,l_tile_offset; |
9913 | 9977 |
9914 if (l_size_comp == 3) { | 9978 opj_get_tile_dimensions(l_image, |
9915 l_size_comp = 4; | 9979 l_tilec, |
9916 } | 9980 l_img_comp, |
| 9981 &l_size_comp, |
| 9982 &l_width, |
| 9983 &l_height, |
| 9984 &l_offset_x, |
| 9985 &l_offset_y, |
| 9986 &l_image_width, |
| 9987 &l_stride, |
| 9988 &l_tile_offset); |
9917 | 9989 |
9918 l_width = (OPJ_UINT32)(l_tilec->x1 - l_tilec->x0); | 9990 l_src_ptr = l_img_comp->data + l_tile_offset; |
9919 l_height = (OPJ_UINT32)(l_tilec->y1 - l_tilec->y0); | |
9920 l_offset_x = (OPJ_UINT32)opj_int_ceildiv((OPJ_INT32)l_image->x0,
(OPJ_INT32)l_img_comp->dx); | |
9921 l_offset_y = (OPJ_UINT32)opj_int_ceildiv((OPJ_INT32)l_image->y0,
(OPJ_INT32)l_img_comp->dy); | |
9922 l_image_width = (OPJ_UINT32)opj_int_ceildiv((OPJ_INT32)l_image->
x1 - (OPJ_INT32)l_image->x0, (OPJ_INT32)l_img_comp->dx); | |
9923 l_stride = l_image_width - l_width; | |
9924 l_src_ptr = l_img_comp->data + ((OPJ_UINT32)l_tilec->x0 - l_offs
et_x) + ((OPJ_UINT32)l_tilec->y0 - l_offset_y) * l_image_width; | |
9925 | 9991 |
9926 switch (l_size_comp) { | 9992 switch (l_size_comp) { |
9927 case 1: | 9993 case 1: |
9928 { | 9994 { |
9929 OPJ_CHAR * l_dest_ptr = (OPJ_CHAR*) p_da
ta; | 9995 OPJ_CHAR * l_dest_ptr = (OPJ_CHAR*) p_da
ta; |
9930 if (l_img_comp->sgnd) { | 9996 if (l_img_comp->sgnd) { |
9931 for (j=0;j<l_height;++j) { | 9997 for (j=0;j<l_height;++j) { |
9932 for (k=0;k<l_width;++k)
{ | 9998 for (k=0;k<l_width;++k)
{ |
9933 *(l_dest_ptr) =
(OPJ_CHAR) (*l_src_ptr); | 9999 *(l_dest_ptr) =
(OPJ_CHAR) (*l_src_ptr); |
9934 ++l_dest_ptr; | 10000 ++l_dest_ptr; |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9981 for (k=0;k<l_width;++k) { | 10047 for (k=0;k<l_width;++k) { |
9982 *(l_dest_ptr++) = *(l_sr
c_ptr++); | 10048 *(l_dest_ptr++) = *(l_sr
c_ptr++); |
9983 } | 10049 } |
9984 l_src_ptr += l_stride; | 10050 l_src_ptr += l_stride; |
9985 } | 10051 } |
9986 | 10052 |
9987 p_data = (OPJ_BYTE*) l_dest_ptr; | 10053 p_data = (OPJ_BYTE*) l_dest_ptr; |
9988 } | 10054 } |
9989 break; | 10055 break; |
9990 } | 10056 } |
9991 | |
9992 ++l_img_comp; | |
9993 ++l_tilec; | |
9994 } | 10057 } |
9995 } | 10058 } |
9996 | 10059 |
9997 OPJ_BOOL opj_j2k_post_write_tile ( opj_j2k_t * p_j2k, | 10060 OPJ_BOOL opj_j2k_post_write_tile ( opj_j2k_t * p_j2k, |
9998 OPJ_BYTE * p_dat
a, | |
9999 OPJ_UINT32 p_dat
a_size, | |
10000 opj_stream_priva
te_t *p_stream, | 10061 opj_stream_priva
te_t *p_stream, |
10001 opj_event_mgr_t
* p_manager ) | 10062 opj_event_mgr_t
* p_manager ) |
10002 { | 10063 { |
10003 opj_tcd_t * l_tcd = 00; | |
10004 OPJ_UINT32 l_nb_bytes_written; | 10064 OPJ_UINT32 l_nb_bytes_written; |
10005 OPJ_BYTE * l_current_data = 00; | 10065 OPJ_BYTE * l_current_data = 00; |
10006 OPJ_UINT32 l_tile_size = 0; | 10066 OPJ_UINT32 l_tile_size = 0; |
10007 OPJ_UINT32 l_available_data; | 10067 OPJ_UINT32 l_available_data; |
10008 | 10068 |
10009 /* preconditions */ | 10069 /* preconditions */ |
10010 assert(p_j2k->m_specific_param.m_encoder.m_encoded_tile_data); | 10070 assert(p_j2k->m_specific_param.m_encoder.m_encoded_tile_data); |
10011 | 10071 |
10012 l_tcd = p_j2k->m_tcd; | |
10013 | |
10014 l_tile_size = p_j2k->m_specific_param.m_encoder.m_encoded_tile_size; | 10072 l_tile_size = p_j2k->m_specific_param.m_encoder.m_encoded_tile_size; |
10015 l_available_data = l_tile_size; | 10073 l_available_data = l_tile_size; |
10016 l_current_data = p_j2k->m_specific_param.m_encoder.m_encoded_tile_data; | 10074 l_current_data = p_j2k->m_specific_param.m_encoder.m_encoded_tile_data; |
10017 | 10075 |
10018 if (! opj_tcd_copy_tile_data(l_tcd,p_data,p_data_size)) { | |
10019 opj_event_msg(p_manager, EVT_ERROR, "Size mismatch between tile
data and sent data." ); | |
10020 return OPJ_FALSE; | |
10021 } | |
10022 | |
10023 l_nb_bytes_written = 0; | 10076 l_nb_bytes_written = 0; |
10024 if (! opj_j2k_write_first_tile_part(p_j2k,l_current_data,&l_nb_bytes_wri
tten,l_available_data,p_stream,p_manager)) { | 10077 if (! opj_j2k_write_first_tile_part(p_j2k,l_current_data,&l_nb_bytes_wri
tten,l_available_data,p_stream,p_manager)) { |
10025 return OPJ_FALSE; | 10078 return OPJ_FALSE; |
10026 } | 10079 } |
10027 l_current_data += l_nb_bytes_written; | 10080 l_current_data += l_nb_bytes_written; |
10028 l_available_data -= l_nb_bytes_written; | 10081 l_available_data -= l_nb_bytes_written; |
10029 | 10082 |
10030 l_nb_bytes_written = 0; | 10083 l_nb_bytes_written = 0; |
10031 if (! opj_j2k_write_all_tile_parts(p_j2k,l_current_data,&l_nb_bytes_writ
ten,l_available_data,p_stream,p_manager)) { | 10084 if (! opj_j2k_write_all_tile_parts(p_j2k,l_current_data,&l_nb_bytes_writ
ten,l_available_data,p_stream,p_manager)) { |
10032 return OPJ_FALSE; | 10085 return OPJ_FALSE; |
(...skipping 450 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10483 OPJ_BYTE * p_data, | 10536 OPJ_BYTE * p_data, |
10484 OPJ_UINT32 p_data_size, | 10537 OPJ_UINT32 p_data_size, |
10485 opj_stream_private_t *p_stream, | 10538 opj_stream_private_t *p_stream, |
10486 opj_event_mgr_t * p_manager ) | 10539 opj_event_mgr_t * p_manager ) |
10487 { | 10540 { |
10488 if (! opj_j2k_pre_write_tile(p_j2k,p_tile_index,p_stream,p_manager)) { | 10541 if (! opj_j2k_pre_write_tile(p_j2k,p_tile_index,p_stream,p_manager)) { |
10489 opj_event_msg(p_manager, EVT_ERROR, "Error while opj_j2k_pre_wri
te_tile with tile index = %d\n", p_tile_index); | 10542 opj_event_msg(p_manager, EVT_ERROR, "Error while opj_j2k_pre_wri
te_tile with tile index = %d\n", p_tile_index); |
10490 return OPJ_FALSE; | 10543 return OPJ_FALSE; |
10491 } | 10544 } |
10492 else { | 10545 else { |
10493 if (! opj_j2k_post_write_tile(p_j2k,p_data,p_data_size,p_stream,
p_manager)) { | 10546 OPJ_UINT32 j; |
| 10547 /* Allocate data */ |
| 10548 for (j=0;j<p_j2k->m_tcd->image->numcomps;++j) { |
| 10549 opj_tcd_tilecomp_t* l_tilec = p_j2k->m_tcd->tcd_image->t
iles->comps + j; |
| 10550 |
| 10551 if(! opj_alloc_tile_component_data(l_tilec)) { |
| 10552 » » » » » » » » » »
» » opj_event_msg(p_manager, EVT_ERROR, "Error allocating ti
le component data." ); |
| 10553 return OPJ_FALSE; |
| 10554 } |
| 10555 } |
| 10556 |
| 10557 /* now copy data into the the tile component */ |
| 10558 if (! opj_tcd_copy_tile_data(p_j2k->m_tcd,p_data,p_data_size)) { |
| 10559 opj_event_msg(p_manager, EVT_ERROR, "Size mismatch betwe
en tile data and sent data." ); |
| 10560 return OPJ_FALSE; |
| 10561 } |
| 10562 if (! opj_j2k_post_write_tile(p_j2k,p_stream,p_manager)) { |
10494 opj_event_msg(p_manager, EVT_ERROR, "Error while opj_j2k
_post_write_tile with tile index = %d\n", p_tile_index); | 10563 opj_event_msg(p_manager, EVT_ERROR, "Error while opj_j2k
_post_write_tile with tile index = %d\n", p_tile_index); |
10495 return OPJ_FALSE; | 10564 return OPJ_FALSE; |
10496 } | 10565 } |
10497 } | 10566 } |
10498 | 10567 |
10499 return OPJ_TRUE; | 10568 return OPJ_TRUE; |
10500 } | 10569 } |
OLD | NEW |