| 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 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 44 | 44 |
| 45 /** @defgroup J2K J2K - JPEG-2000 codestream reader/writer */ | 45 /** @defgroup J2K J2K - JPEG-2000 codestream reader/writer */ |
| 46 /*@{*/ | 46 /*@{*/ |
| 47 | 47 |
| 48 /** @name Local static functions */ | 48 /** @name Local static functions */ |
| 49 /*@{*/ | 49 /*@{*/ |
| 50 | 50 |
| 51 /** | 51 /** |
| 52 * Sets up the procedures to do on reading header. Developpers wanting to extend
the library can add their own reading procedures. | 52 * Sets up the procedures to do on reading header. Developpers wanting to extend
the library can add their own reading procedures. |
| 53 */ | 53 */ |
| 54 static void opj_j2k_setup_header_reading (opj_j2k_t *p_j2k); | 54 static OPJ_BOOL opj_j2k_setup_header_reading (opj_j2k_t *p_j2k, opj_event_mgr_t
* p_manager); |
| 55 | 55 |
| 56 /** | 56 /** |
| 57 * The read header procedure. | 57 * The read header procedure. |
| 58 */ | 58 */ |
| 59 static OPJ_BOOL opj_j2k_read_header_procedure( opj_j2k_t *p_j2k, | 59 static OPJ_BOOL opj_j2k_read_header_procedure( opj_j2k_t *p_j2k, |
| 60 opj_stream_private_t *p_stream, | 60 opj_stream_private_t *p_stream, |
| 61 opj_event_mgr_t * p_manager); | 61 opj_event_mgr_t * p_manager); |
| 62 | 62 |
| 63 /** | 63 /** |
| 64 * The default encoding validation procedure without any extension. | 64 * The default encoding validation procedure without any extension. |
| (...skipping 18 matching lines...) Expand all Loading... |
| 83 * @return true if the parameters are correct. | 83 * @return true if the parameters are correct. |
| 84 */ | 84 */ |
| 85 static OPJ_BOOL opj_j2k_decoding_validation ( opj_j2k_t * p_j2k, | 85 static OPJ_BOOL opj_j2k_decoding_validation ( opj_j2k_t * p_j2k, |
| 86 opj_stream_private_t *p_stream, | 86 opj_stream_private_t *p_stream, |
| 87 opj_event_mgr_t * p_manager ); | 87 opj_event_mgr_t * p_manager ); |
| 88 | 88 |
| 89 /** | 89 /** |
| 90 * Sets up the validation ,i.e. adds the procedures to lauch to make sure the co
dec parameters | 90 * Sets up the validation ,i.e. adds the procedures to lauch to make sure the co
dec parameters |
| 91 * are valid. Developpers wanting to extend the library can add their own valida
tion procedures. | 91 * are valid. Developpers wanting to extend the library can add their own valida
tion procedures. |
| 92 */ | 92 */ |
| 93 static void opj_j2k_setup_encoding_validation (opj_j2k_t *p_j2k); | 93 static OPJ_BOOL opj_j2k_setup_encoding_validation (opj_j2k_t *p_j2k, opj_event_m
gr_t * p_manager); |
| 94 | 94 |
| 95 /** | 95 /** |
| 96 * Sets up the validation ,i.e. adds the procedures to lauch to make sure the co
dec parameters | 96 * Sets up the validation ,i.e. adds the procedures to lauch to make sure the co
dec parameters |
| 97 * are valid. Developpers wanting to extend the library can add their own valida
tion procedures. | 97 * are valid. Developpers wanting to extend the library can add their own valida
tion procedures. |
| 98 */ | 98 */ |
| 99 static void opj_j2k_setup_decoding_validation (opj_j2k_t *p_j2k); | 99 static OPJ_BOOL opj_j2k_setup_decoding_validation (opj_j2k_t *p_j2k, opj_event_m
gr_t * p_manager); |
| 100 | 100 |
| 101 /** | 101 /** |
| 102 * Sets up the validation ,i.e. adds the procedures to lauch to make sure the co
dec parameters | 102 * Sets up the validation ,i.e. adds the procedures to lauch to make sure the co
dec parameters |
| 103 * are valid. Developpers wanting to extend the library can add their own valida
tion procedures. | 103 * are valid. Developpers wanting to extend the library can add their own valida
tion procedures. |
| 104 */ | 104 */ |
| 105 static void opj_j2k_setup_end_compress (opj_j2k_t *p_j2k); | 105 static OPJ_BOOL opj_j2k_setup_end_compress (opj_j2k_t *p_j2k, opj_event_mgr_t *
p_manager); |
| 106 | 106 |
| 107 /** | 107 /** |
| 108 * The mct encoding validation procedure. | 108 * The mct encoding validation procedure. |
| 109 * | 109 * |
| 110 * @param p_j2k the jpeg2000 codec to validate. | 110 * @param p_j2k the jpeg2000 codec to validate. |
| 111 * @param p_stream the input stream to vali
date. | 111 * @param p_stream the input stream to vali
date. |
| 112 * @param p_manager the user event manager. | 112 * @param p_manager the user event manager. |
| 113 * | 113 * |
| 114 * @return true if the parameters are correct. | 114 * @return true if the parameters are correct. |
| 115 */ | 115 */ |
| (...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 353 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); |
| 354 | 354 |
| 355 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, |
| 356 opj
_stream_private_t *p_stream, | 356 opj
_stream_private_t *p_stream, |
| 357 opj
_event_mgr_t * p_manager ); | 357 opj
_event_mgr_t * p_manager ); |
| 358 | 358 |
| 359 /** | 359 /** |
| 360 * Sets up the procedures to do on writing header. | 360 * Sets up the procedures to do on writing header. |
| 361 * 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
. |
| 362 */ | 362 */ |
| 363 static void opj_j2k_setup_header_writing (opj_j2k_t *p_j2k); | 363 static OPJ_BOOL opj_j2k_setup_header_writing (opj_j2k_t *p_j2k, opj_event_mgr_t
* p_manager); |
| 364 | 364 |
| 365 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, |
| 366
OPJ_BYTE * p_data, | 366
OPJ_BYTE * p_data, |
| 367
OPJ_UINT32 * p_data_written, | 367
OPJ_UINT32 * p_data_written, |
| 368
OPJ_UINT32 p_total_data_size, | 368
OPJ_UINT32 p_total_data_size, |
| 369
opj_stream_private_t *p_stream, | 369
opj_stream_private_t *p_stream, |
| 370
struct opj_event_mgr * p_manager ); | 370
struct opj_event_mgr * p_manager ); |
| 371 | 371 |
| 372 static OPJ_BOOL opj_j2k_write_all_tile_parts( opj_j2k_t *p_j2k, | 372 static OPJ_BOOL opj_j2k_write_all_tile_parts( opj_j2k_t *p_j2k, |
| 373
OPJ_BYTE * p_data, | 373
OPJ_BYTE * p_data, |
| (...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 711 * @param p_header_data the data contained in the PLT box. | 711 * @param p_header_data the data contained in the PLT box. |
| 712 * @param p_j2k the jpeg2000 codec. | 712 * @param p_j2k the jpeg2000 codec. |
| 713 * @param p_header_size the size of the data contained in the PLT marker
. | 713 * @param p_header_size the size of the data contained in the PLT marker
. |
| 714 * @param p_manager the user event manager. | 714 * @param p_manager the user event manager. |
| 715 */ | 715 */ |
| 716 static OPJ_BOOL opj_j2k_read_plt ( opj_j2k_t *p_j2k, | 716 static OPJ_BOOL opj_j2k_read_plt ( opj_j2k_t *p_j2k, |
| 717 OPJ_BYTE * p_header_data, | 717 OPJ_BYTE * p_header_data, |
| 718 OPJ_UINT32 p_header_size, | 718 OPJ_UINT32 p_header_size, |
| 719 opj_event_mgr_t * p_manager ); | 719 opj_event_mgr_t * p_manager ); |
| 720 | 720 |
| 721 #if 0 | |
| 722 /** | 721 /** |
| 723 * Reads a PPM marker (Packed packet headers, main header) | 722 * Reads a PPM marker (Packed headers, main header) |
| 724 * | 723 * |
| 725 * @param p_header_data the data contained in the POC box. | 724 * @param p_header_data the data contained in the POC box. |
| 726 * @param p_j2k the jpeg2000 codec. | 725 * @param p_j2k the jpeg2000 codec. |
| 727 * @param p_header_size the size of the data contained in the POC marker
. | 726 * @param p_header_size the size of the data contained in the POC marker
. |
| 728 * @param p_manager the user event manager. | 727 * @param p_manager the user event manager. |
| 729 */ | 728 */ |
| 730 static OPJ_BOOL j2k_read_ppm_v2 ( | |
| 731 opj_j2k_t *p_j2k, | |
| 732 OPJ_BYTE * p_header_data, | |
| 733 OPJ_UINT32 p_header_size, | |
| 734 struct opj_event_mgr * p_manager | |
| 735 ); | |
| 736 #endif | |
| 737 | 729 |
| 738 static OPJ_BOOL j2k_read_ppm_v3 ( | 730 static OPJ_BOOL opj_j2k_read_ppm ( |
| 739 opj_j2k_t *p_j2k, | 731 » » » » » » » » » »
» » » » » » » » opj_j2k_t *p_j2
k, |
| 740 OPJ_BYTE * p_header_data, | 732 » » » » » » » » » »
» » » » » » » » OPJ_BYTE * p_he
ader_data, |
| 741 OPJ_UINT32 p_header_size, | 733 » » » » » » » » » »
» » » » » » » » OPJ_UINT32 p_he
ader_size, |
| 742 opj_event_mgr_t * p_manager ); | 734 » » » » » » » » » »
» » » » » » » » opj_event_mgr_t
* p_manager ); |
| 735 |
| 736 /** |
| 737 * Merges all PPM markers read (Packed headers, main header) |
| 738 * |
| 739 * @param p_cp main coding parameters. |
| 740 * @param p_manager the user event manager. |
| 741 */ |
| 742 static OPJ_BOOL opj_j2k_merge_ppm ( opj_cp_t *p_cp, opj_event_mgr_t * p_manager
); |
| 743 | 743 |
| 744 /** | 744 /** |
| 745 * Reads a PPT marker (Packed packet headers, tile-part header) | 745 * Reads a PPT marker (Packed packet headers, tile-part header) |
| 746 * | 746 * |
| 747 * @param p_header_data the data contained in the PPT box. | 747 * @param p_header_data the data contained in the PPT box. |
| 748 * @param p_j2k the jpeg2000 codec. | 748 * @param p_j2k the jpeg2000 codec. |
| 749 * @param p_header_size the size of the data contained in the PPT marker
. | 749 * @param p_header_size the size of the data contained in the PPT marker
. |
| 750 * @param p_manager the user event manager. | 750 * @param p_manager the user event manager. |
| 751 */ | 751 */ |
| 752 static OPJ_BOOL opj_j2k_read_ppt ( opj_j2k_t *p_j2k, | 752 static OPJ_BOOL opj_j2k_read_ppt ( opj_j2k_t *p_j2k, |
| 753 OPJ_BYTE * p_header_data, | 753 OPJ_BYTE * p_header_data, |
| 754 OPJ_UINT32 p_header_size, | 754 OPJ_UINT32 p_header_size, |
| 755 opj_event_mgr_t * p_manager ); | 755 opj_event_mgr_t * p_manager ); |
| 756 |
| 757 /** |
| 758 * Merges all PPT markers read (Packed headers, tile-part header) |
| 759 * |
| 760 * @param p_tcp the tile. |
| 761 * @param p_manager the user event manager. |
| 762 */ |
| 763 static OPJ_BOOL opj_j2k_merge_ppt ( opj_tcp_t *p_tcp, |
| 764
opj_event_mgr_t * p_m
anager ); |
| 765 |
| 766 |
| 756 /** | 767 /** |
| 757 * Writes the TLM marker (Tile Length Marker) | 768 * Writes the TLM marker (Tile Length Marker) |
| 758 * | 769 * |
| 759 * @param p_stream the stream to write data
to. | 770 * @param p_stream the stream to write data
to. |
| 760 * @param p_j2k J2K codec. | 771 * @param p_j2k J2K codec. |
| 761 * @param p_manager the user event manager. | 772 * @param p_manager the user event manager. |
| 762 */ | 773 */ |
| 763 static OPJ_BOOL opj_j2k_write_tlm( opj_j2k_t *p_j2k, | 774 static OPJ_BOOL opj_j2k_write_tlm( opj_j2k_t *p_j2k, |
| 764 opj_stre
am_private_t *p_stream, | 775 opj_stre
am_private_t *p_stream, |
| 765 opj_even
t_mgr_t * p_manager ); | 776 opj_even
t_mgr_t * p_manager ); |
| 766 | 777 |
| 767 /** | 778 /** |
| 768 * Writes the SOT marker (Start of tile-part) | 779 * Writes the SOT marker (Start of tile-part) |
| 769 * | 780 * |
| 770 * @param p_j2k J2K codec. | 781 * @param p_j2k J2K codec. |
| 771 * @param p_data FIXME DOC | 782 * @param p_data FIXME DOC |
| 772 * @param p_data_written FIXME DOC | 783 * @param p_data_written FIXME DOC |
| 773 * @param p_stream the stream to write data to. | 784 * @param p_stream the stream to write data to. |
| 774 * @param p_manager the user event manager. | 785 * @param p_manager the user event manager. |
| 775 */ | 786 */ |
| 776 static OPJ_BOOL opj_j2k_write_sot( opj_j2k_t *p_j2k, | 787 static OPJ_BOOL opj_j2k_write_sot( opj_j2k_t *p_j2k, |
| 777 OPJ_BYTE
* p_data, | 788 OPJ_BYTE
* p_data, |
| 778 OPJ_UINT
32 * p_data_written, | 789 OPJ_UINT
32 * p_data_written, |
| 779 const op
j_stream_private_t *p_stream, | 790 const op
j_stream_private_t *p_stream, |
| 780 opj_even
t_mgr_t * p_manager ); | 791 opj_even
t_mgr_t * p_manager ); |
| 781 | 792 |
| 782 /** | 793 /** |
| 783 * Reads a PPT marker (Packed packet headers, tile-part header) | 794 * Reads values from a SOT marker (Start of tile-part) |
| 784 * | 795 * |
| 785 * @param p_header_data the data contained in the PPT box. | 796 * the j2k decoder state is not affected. No side effects, no checks except for
p_header_size. |
| 786 * @param p_j2k the jpeg2000 codec. | 797 * |
| 798 * @param p_header_data the data contained in the SOT marker. |
| 799 * @param p_header_size the size of the data contained in the SOT marker
. |
| 800 * @param p_tile_no Isot. |
| 801 * @param p_tot_len Psot. |
| 802 * @param p_current_part TPsot. |
| 803 * @param p_num_parts TNsot. |
| 804 * @param p_manager the user event manager. |
| 805 */ |
| 806 static OPJ_BOOL opj_j2k_get_sot_values(OPJ_BYTE * p_header_data, |
| 807 » » » » » » » » » »
» » » » » » » » » OPJ_UIN
T32 p_header_size, |
| 808 » » » » » » » » » »
» » » » » » » » » OPJ_UIN
T32* p_tile_no, |
| 809 » » » » » » » » » »
» » » » » » » » » OPJ_UIN
T32* p_tot_len, |
| 810 » » » » » » » » » »
» » » » » » » » » OPJ_UIN
T32* p_current_part, |
| 811 » » » » » » » » » »
» » » » » » » » » OPJ_UIN
T32* p_num_parts, |
| 812 » » » » » » » » » »
» » » » » » » » » opj_eve
nt_mgr_t * p_manager ); |
| 813 /** |
| 814 * Reads a SOT marker (Start of tile-part) |
| 815 * |
| 816 * @param p_header_data the data contained in the SOT marker. |
| 817 * @param p_j2k the jpeg2000 codec. |
| 787 * @param p_header_size the size of the data contained in the PPT marker
. | 818 * @param p_header_size the size of the data contained in the PPT marker
. |
| 788 * @param p_manager the user event manager. | 819 * @param p_manager the user event manager. |
| 789 */ | 820 */ |
| 790 static OPJ_BOOL opj_j2k_read_sot ( opj_j2k_t *p_j2k, | 821 static OPJ_BOOL opj_j2k_read_sot ( opj_j2k_t *p_j2k, |
| 791 OPJ_BYTE * p_header_data, | 822 OPJ_BYTE * p_header_data, |
| 792 OPJ_UINT32 p_header_size, | 823 OPJ_UINT32 p_header_size, |
| 793 opj_event_mgr_t * p_manager ); | 824 opj_event_mgr_t * p_manager ); |
| 794 /** | 825 /** |
| 795 * Writes the SOD marker (Start of data) | 826 * Writes the SOD marker (Start of data) |
| 796 * | 827 * |
| 797 * @param p_j2k J2K codec. | 828 * @param p_j2k J2K codec. |
| 798 * @param p_tile_coder FIXME DOC | 829 * @param p_tile_coder FIXME DOC |
| (...skipping 15 matching lines...) Expand all Loading... |
| 814 * Reads a SOD marker (Start Of Data) | 845 * Reads a SOD marker (Start Of Data) |
| 815 * | 846 * |
| 816 * @param p_j2k the jpeg2000 codec. | 847 * @param p_j2k the jpeg2000 codec. |
| 817 * @param p_stream FIXME DOC | 848 * @param p_stream FIXME DOC |
| 818 * @param p_manager the user event manager. | 849 * @param p_manager the user event manager. |
| 819 */ | 850 */ |
| 820 static OPJ_BOOL opj_j2k_read_sod( opj_j2k_t *p_j2k, | 851 static OPJ_BOOL opj_j2k_read_sod( opj_j2k_t *p_j2k, |
| 821 opj_stream_private_t *p_stream, | 852 opj_stream_private_t *p_stream, |
| 822 opj_event_mgr_t * p_manager ); | 853 opj_event_mgr_t * p_manager ); |
| 823 | 854 |
| 824 void opj_j2k_update_tlm (opj_j2k_t * p_j2k, OPJ_UINT32 p_tile_part_size ) | 855 static void opj_j2k_update_tlm (opj_j2k_t * p_j2k, OPJ_UINT32 p_tile_part_size ) |
| 825 { | 856 { |
| 826 opj_write_bytes(p_j2k->m_specific_param.m_encoder.m_tlm_sot_offsets_curr
ent,p_j2k->m_current_tile_number,1); /* PSOT */ | 857 opj_write_bytes(p_j2k->m_specific_param.m_encoder.m_tlm_sot_offsets_curr
ent,p_j2k->m_current_tile_number,1); /* PSOT */ |
| 827 ++p_j2k->m_specific_param.m_encoder.m_tlm_sot_offsets_current; | 858 ++p_j2k->m_specific_param.m_encoder.m_tlm_sot_offsets_current; |
| 828 | 859 |
| 829 opj_write_bytes(p_j2k->m_specific_param.m_encoder.m_tlm_sot_offsets_curr
ent,p_tile_part_size,4); /* PSOT */ | 860 opj_write_bytes(p_j2k->m_specific_param.m_encoder.m_tlm_sot_offsets_curr
ent,p_tile_part_size,4); /* PSOT */ |
| 830 p_j2k->m_specific_param.m_encoder.m_tlm_sot_offsets_current += 4; | 861 p_j2k->m_specific_param.m_encoder.m_tlm_sot_offsets_current += 4; |
| 831 } | 862 } |
| 832 | 863 |
| 833 /** | 864 /** |
| 834 * Writes the RGN marker (Region Of Interest) | 865 * Writes the RGN marker (Region Of Interest) |
| (...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1172 static OPJ_FLOAT32 opj_j2k_get_tp_stride (opj_tcp_t * p_tcp); | 1203 static OPJ_FLOAT32 opj_j2k_get_tp_stride (opj_tcp_t * p_tcp); |
| 1173 | 1204 |
| 1174 static OPJ_FLOAT32 opj_j2k_get_default_stride (opj_tcp_t * p_tcp); | 1205 static OPJ_FLOAT32 opj_j2k_get_default_stride (opj_tcp_t * p_tcp); |
| 1175 | 1206 |
| 1176 static int opj_j2k_initialise_4K_poc(opj_poc_t *POC, int numres); | 1207 static int opj_j2k_initialise_4K_poc(opj_poc_t *POC, int numres); |
| 1177 | 1208 |
| 1178 static void opj_j2k_set_cinema_parameters(opj_cparameters_t *parameters, opj_ima
ge_t *image, opj_event_mgr_t *p_manager); | 1209 static void opj_j2k_set_cinema_parameters(opj_cparameters_t *parameters, opj_ima
ge_t *image, opj_event_mgr_t *p_manager); |
| 1179 | 1210 |
| 1180 static OPJ_BOOL opj_j2k_is_cinema_compliant(opj_image_t *image, OPJ_UINT16 rsiz,
opj_event_mgr_t *p_manager); | 1211 static OPJ_BOOL opj_j2k_is_cinema_compliant(opj_image_t *image, OPJ_UINT16 rsiz,
opj_event_mgr_t *p_manager); |
| 1181 | 1212 |
| 1213 /** |
| 1214 * Checks for invalid number of tile-parts in SOT marker (TPsot==TNsot). See iss
ue 254. |
| 1215 * |
| 1216 * @param p_stream the stream to read data from. |
| 1217 * @param tile_no tile number we're looking for. |
| 1218 * @param p_correction_needed output value. if true, non conformant codest
ream needs TNsot correction. |
| 1219 * @param p_manager the user event manager. |
| 1220 * |
| 1221 * @return true if the function was successful, false else. |
| 1222 */ |
| 1223 static OPJ_BOOL opj_j2k_need_nb_tile_parts_correction(opj_stream_private_t *p_st
ream, OPJ_UINT32 tile_no, OPJ_BOOL* p_correction_needed, opj_event_mgr_t * p_man
ager ); |
| 1224 |
| 1182 /*@}*/ | 1225 /*@}*/ |
| 1183 | 1226 |
| 1184 /*@}*/ | 1227 /*@}*/ |
| 1185 | 1228 |
| 1186 /* ----------------------------------------------------------------------- */ | 1229 /* ----------------------------------------------------------------------- */ |
| 1187 typedef struct j2k_prog_order{ | 1230 typedef struct j2k_prog_order{ |
| 1188 OPJ_PROG_ORDER enum_prog; | 1231 OPJ_PROG_ORDER enum_prog; |
| 1189 char str_prog[5]; | 1232 char str_prog[5]; |
| 1190 }j2k_prog_order_t; | 1233 }j2k_prog_order_t; |
| 1191 | 1234 |
| 1192 j2k_prog_order_t j2k_prog_order_list[] = { | 1235 static j2k_prog_order_t j2k_prog_order_list[] = { |
| 1193 {OPJ_CPRL, "CPRL"}, | 1236 {OPJ_CPRL, "CPRL"}, |
| 1194 {OPJ_LRCP, "LRCP"}, | 1237 {OPJ_LRCP, "LRCP"}, |
| 1195 {OPJ_PCRL, "PCRL"}, | 1238 {OPJ_PCRL, "PCRL"}, |
| 1196 {OPJ_RLCP, "RLCP"}, | 1239 {OPJ_RLCP, "RLCP"}, |
| 1197 {OPJ_RPCL, "RPCL"}, | 1240 {OPJ_RPCL, "RPCL"}, |
| 1198 {(OPJ_PROG_ORDER)-1, ""} | 1241 {(OPJ_PROG_ORDER)-1, ""} |
| 1199 }; | 1242 }; |
| 1200 | 1243 |
| 1201 /** | 1244 /** |
| 1202 * FIXME DOC | 1245 * FIXME DOC |
| 1203 */ | 1246 */ |
| 1204 static const OPJ_UINT32 MCT_ELEMENT_SIZE [] = | 1247 static const OPJ_UINT32 MCT_ELEMENT_SIZE [] = |
| 1205 { | 1248 { |
| 1206 2, | 1249 2, |
| 1207 4, | 1250 4, |
| 1208 4, | 1251 4, |
| 1209 8 | 1252 8 |
| 1210 }; | 1253 }; |
| 1211 | 1254 |
| 1212 typedef void (* opj_j2k_mct_function) (const void * p_src_data, void * p_dest_da
ta, OPJ_UINT32 p_nb_elem); | 1255 typedef void (* opj_j2k_mct_function) (const void * p_src_data, void * p_dest_da
ta, OPJ_UINT32 p_nb_elem); |
| 1213 | 1256 |
| 1214 const opj_j2k_mct_function j2k_mct_read_functions_to_float [] = | 1257 static const opj_j2k_mct_function j2k_mct_read_functions_to_float [] = |
| 1215 { | 1258 { |
| 1216 opj_j2k_read_int16_to_float, | 1259 opj_j2k_read_int16_to_float, |
| 1217 opj_j2k_read_int32_to_float, | 1260 opj_j2k_read_int32_to_float, |
| 1218 opj_j2k_read_float32_to_float, | 1261 opj_j2k_read_float32_to_float, |
| 1219 opj_j2k_read_float64_to_float | 1262 opj_j2k_read_float64_to_float |
| 1220 }; | 1263 }; |
| 1221 | 1264 |
| 1222 const opj_j2k_mct_function j2k_mct_read_functions_to_int32 [] = | 1265 static const opj_j2k_mct_function j2k_mct_read_functions_to_int32 [] = |
| 1223 { | 1266 { |
| 1224 opj_j2k_read_int16_to_int32, | 1267 opj_j2k_read_int16_to_int32, |
| 1225 opj_j2k_read_int32_to_int32, | 1268 opj_j2k_read_int32_to_int32, |
| 1226 opj_j2k_read_float32_to_int32, | 1269 opj_j2k_read_float32_to_int32, |
| 1227 opj_j2k_read_float64_to_int32 | 1270 opj_j2k_read_float64_to_int32 |
| 1228 }; | 1271 }; |
| 1229 | 1272 |
| 1230 const opj_j2k_mct_function j2k_mct_write_functions_from_float [] = | 1273 static const opj_j2k_mct_function j2k_mct_write_functions_from_float [] = |
| 1231 { | 1274 { |
| 1232 opj_j2k_write_float_to_int16, | 1275 opj_j2k_write_float_to_int16, |
| 1233 opj_j2k_write_float_to_int32, | 1276 opj_j2k_write_float_to_int32, |
| 1234 opj_j2k_write_float_to_float, | 1277 opj_j2k_write_float_to_float, |
| 1235 opj_j2k_write_float_to_float64 | 1278 opj_j2k_write_float_to_float64 |
| 1236 }; | 1279 }; |
| 1237 | 1280 |
| 1238 typedef struct opj_dec_memory_marker_handler | 1281 typedef struct opj_dec_memory_marker_handler |
| 1239 { | 1282 { |
| 1240 /** marker value */ | 1283 /** marker value */ |
| 1241 OPJ_UINT32 id; | 1284 OPJ_UINT32 id; |
| 1242 /** value of the state when the marker can appear */ | 1285 /** value of the state when the marker can appear */ |
| 1243 OPJ_UINT32 states; | 1286 OPJ_UINT32 states; |
| 1244 /** action linked to the marker */ | 1287 /** action linked to the marker */ |
| 1245 OPJ_BOOL (*handler) ( opj_j2k_t *p_j2k, | 1288 OPJ_BOOL (*handler) ( opj_j2k_t *p_j2k, |
| 1246 OPJ_BYTE * p_header_data, | 1289 OPJ_BYTE * p_header_data, |
| 1247 OPJ_UINT32 p_header_size, | 1290 OPJ_UINT32 p_header_size, |
| 1248 opj_event_mgr_t * p_manager ); | 1291 opj_event_mgr_t * p_manager ); |
| 1249 } | 1292 } |
| 1250 opj_dec_memory_marker_handler_t; | 1293 opj_dec_memory_marker_handler_t; |
| 1251 | 1294 |
| 1252 const opj_dec_memory_marker_handler_t j2k_memory_marker_handler_tab [] = | 1295 static const opj_dec_memory_marker_handler_t j2k_memory_marker_handler_tab [] = |
| 1253 { | 1296 { |
| 1254 {J2K_MS_SOT, J2K_STATE_MH | J2K_STATE_TPHSOT, opj_j2k_read_sot}, | 1297 {J2K_MS_SOT, J2K_STATE_MH | J2K_STATE_TPHSOT, opj_j2k_read_sot}, |
| 1255 {J2K_MS_COD, J2K_STATE_MH | J2K_STATE_TPH, opj_j2k_read_cod}, | 1298 {J2K_MS_COD, J2K_STATE_MH | J2K_STATE_TPH, opj_j2k_read_cod}, |
| 1256 {J2K_MS_COC, J2K_STATE_MH | J2K_STATE_TPH, opj_j2k_read_coc}, | 1299 {J2K_MS_COC, J2K_STATE_MH | J2K_STATE_TPH, opj_j2k_read_coc}, |
| 1257 {J2K_MS_RGN, J2K_STATE_MH | J2K_STATE_TPH, opj_j2k_read_rgn}, | 1300 {J2K_MS_RGN, J2K_STATE_MH | J2K_STATE_TPH, opj_j2k_read_rgn}, |
| 1258 {J2K_MS_QCD, J2K_STATE_MH | J2K_STATE_TPH, opj_j2k_read_qcd}, | 1301 {J2K_MS_QCD, J2K_STATE_MH | J2K_STATE_TPH, opj_j2k_read_qcd}, |
| 1259 {J2K_MS_QCC, J2K_STATE_MH | J2K_STATE_TPH, opj_j2k_read_qcc}, | 1302 {J2K_MS_QCC, J2K_STATE_MH | J2K_STATE_TPH, opj_j2k_read_qcc}, |
| 1260 {J2K_MS_POC, J2K_STATE_MH | J2K_STATE_TPH, opj_j2k_read_poc}, | 1303 {J2K_MS_POC, J2K_STATE_MH | J2K_STATE_TPH, opj_j2k_read_poc}, |
| 1261 {J2K_MS_SIZ, J2K_STATE_MHSIZ, opj_j2k_read_siz}, | 1304 {J2K_MS_SIZ, J2K_STATE_MHSIZ, opj_j2k_read_siz}, |
| 1262 {J2K_MS_TLM, J2K_STATE_MH, opj_j2k_read_tlm}, | 1305 {J2K_MS_TLM, J2K_STATE_MH, opj_j2k_read_tlm}, |
| 1263 {J2K_MS_PLM, J2K_STATE_MH, opj_j2k_read_plm}, | 1306 {J2K_MS_PLM, J2K_STATE_MH, opj_j2k_read_plm}, |
| 1264 {J2K_MS_PLT, J2K_STATE_TPH, opj_j2k_read_plt}, | 1307 {J2K_MS_PLT, J2K_STATE_TPH, opj_j2k_read_plt}, |
| 1265 {J2K_MS_PPM, J2K_STATE_MH, j2k_read_ppm_v3}, | 1308 {J2K_MS_PPM, J2K_STATE_MH, opj_j2k_read_ppm}, |
| 1266 {J2K_MS_PPT, J2K_STATE_TPH, opj_j2k_read_ppt}, | 1309 {J2K_MS_PPT, J2K_STATE_TPH, opj_j2k_read_ppt}, |
| 1267 {J2K_MS_SOP, 0, 0}, | 1310 {J2K_MS_SOP, 0, 0}, |
| 1268 {J2K_MS_CRG, J2K_STATE_MH, opj_j2k_read_crg}, | 1311 {J2K_MS_CRG, J2K_STATE_MH, opj_j2k_read_crg}, |
| 1269 {J2K_MS_COM, J2K_STATE_MH | J2K_STATE_TPH, opj_j2k_read_com}, | 1312 {J2K_MS_COM, J2K_STATE_MH | J2K_STATE_TPH, opj_j2k_read_com}, |
| 1270 {J2K_MS_MCT, J2K_STATE_MH | J2K_STATE_TPH, opj_j2k_read_mct}, | 1313 {J2K_MS_MCT, J2K_STATE_MH | J2K_STATE_TPH, opj_j2k_read_mct}, |
| 1271 {J2K_MS_CBD, J2K_STATE_MH , opj_j2k_read_cbd}, | 1314 {J2K_MS_CBD, J2K_STATE_MH , opj_j2k_read_cbd}, |
| 1272 {J2K_MS_MCC, J2K_STATE_MH | J2K_STATE_TPH, opj_j2k_read_mcc}, | 1315 {J2K_MS_MCC, J2K_STATE_MH | J2K_STATE_TPH, opj_j2k_read_mcc}, |
| 1273 {J2K_MS_MCO, J2K_STATE_MH | J2K_STATE_TPH, opj_j2k_read_mco}, | 1316 {J2K_MS_MCO, J2K_STATE_MH | J2K_STATE_TPH, opj_j2k_read_mco}, |
| 1274 #ifdef USE_JPWL | 1317 #ifdef USE_JPWL |
| 1275 #ifdef TODO_MS /* remove these functions which are not commpatible with the v2 A
PI */ | 1318 #ifdef TODO_MS /* remove these functions which are not commpatible with the v2 A
PI */ |
| 1276 {J2K_MS_EPC, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_epc}, | 1319 {J2K_MS_EPC, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_epc}, |
| 1277 {J2K_MS_EPB, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_epb}, | 1320 {J2K_MS_EPB, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_epb}, |
| 1278 {J2K_MS_ESD, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_esd}, | 1321 {J2K_MS_ESD, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_esd}, |
| 1279 {J2K_MS_RED, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_red}, | 1322 {J2K_MS_RED, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_red}, |
| 1280 #endif | 1323 #endif |
| 1281 #endif /* USE_JPWL */ | 1324 #endif /* USE_JPWL */ |
| 1282 #ifdef USE_JPSEC | 1325 #ifdef USE_JPSEC |
| 1283 {J2K_MS_SEC, J2K_DEC_STATE_MH, j2k_read_sec}, | 1326 {J2K_MS_SEC, J2K_DEC_STATE_MH, j2k_read_sec}, |
| 1284 {J2K_MS_INSEC, 0, j2k_read_insec} | 1327 {J2K_MS_INSEC, 0, j2k_read_insec} |
| 1285 #endif /* USE_JPSEC */ | 1328 #endif /* USE_JPSEC */ |
| 1286 {J2K_MS_UNK, J2K_STATE_MH | J2K_STATE_TPH, 0}/*opj_j2k_read_unk is directly us
ed*/ | 1329 {J2K_MS_UNK, J2K_STATE_MH | J2K_STATE_TPH, 0}/*opj_j2k_read_unk is directly us
ed*/ |
| 1287 }; | 1330 }; |
| 1288 | 1331 |
| 1289 void opj_j2k_read_int16_to_float (const void * p_src_data, void * p_dest_data,
OPJ_UINT32 p_nb_elem) | 1332 static void opj_j2k_read_int16_to_float (const void * p_src_data, void * p_dest
_data, OPJ_UINT32 p_nb_elem) |
| 1290 { | 1333 { |
| 1291 OPJ_BYTE * l_src_data = (OPJ_BYTE *) p_src_data; | 1334 OPJ_BYTE * l_src_data = (OPJ_BYTE *) p_src_data; |
| 1292 OPJ_FLOAT32 * l_dest_data = (OPJ_FLOAT32 *) p_dest_data; | 1335 OPJ_FLOAT32 * l_dest_data = (OPJ_FLOAT32 *) p_dest_data; |
| 1293 OPJ_UINT32 i; | 1336 OPJ_UINT32 i; |
| 1294 OPJ_UINT32 l_temp; | 1337 OPJ_UINT32 l_temp; |
| 1295 | 1338 |
| 1296 for (i=0;i<p_nb_elem;++i) { | 1339 for (i=0;i<p_nb_elem;++i) { |
| 1297 opj_read_bytes(l_src_data,&l_temp,2); | 1340 opj_read_bytes(l_src_data,&l_temp,2); |
| 1298 | 1341 |
| 1299 l_src_data+=sizeof(OPJ_INT16); | 1342 l_src_data+=sizeof(OPJ_INT16); |
| 1300 | 1343 |
| 1301 *(l_dest_data++) = (OPJ_FLOAT32) l_temp; | 1344 *(l_dest_data++) = (OPJ_FLOAT32) l_temp; |
| 1302 } | 1345 } |
| 1303 } | 1346 } |
| 1304 | 1347 |
| 1305 void opj_j2k_read_int32_to_float (const void * p_src_data, void * p_dest_data,
OPJ_UINT32 p_nb_elem) | 1348 static void opj_j2k_read_int32_to_float (const void * p_src_data, void * p_dest
_data, OPJ_UINT32 p_nb_elem) |
| 1306 { | 1349 { |
| 1307 OPJ_BYTE * l_src_data = (OPJ_BYTE *) p_src_data; | 1350 OPJ_BYTE * l_src_data = (OPJ_BYTE *) p_src_data; |
| 1308 OPJ_FLOAT32 * l_dest_data = (OPJ_FLOAT32 *) p_dest_data; | 1351 OPJ_FLOAT32 * l_dest_data = (OPJ_FLOAT32 *) p_dest_data; |
| 1309 OPJ_UINT32 i; | 1352 OPJ_UINT32 i; |
| 1310 OPJ_UINT32 l_temp; | 1353 OPJ_UINT32 l_temp; |
| 1311 | 1354 |
| 1312 for (i=0;i<p_nb_elem;++i) { | 1355 for (i=0;i<p_nb_elem;++i) { |
| 1313 opj_read_bytes(l_src_data,&l_temp,4); | 1356 opj_read_bytes(l_src_data,&l_temp,4); |
| 1314 | 1357 |
| 1315 l_src_data+=sizeof(OPJ_INT32); | 1358 l_src_data+=sizeof(OPJ_INT32); |
| 1316 | 1359 |
| 1317 *(l_dest_data++) = (OPJ_FLOAT32) l_temp; | 1360 *(l_dest_data++) = (OPJ_FLOAT32) l_temp; |
| 1318 } | 1361 } |
| 1319 } | 1362 } |
| 1320 | 1363 |
| 1321 void opj_j2k_read_float32_to_float (const void * p_src_data, void * p_dest_data
, OPJ_UINT32 p_nb_elem) | 1364 static void opj_j2k_read_float32_to_float (const void * p_src_data, void * p_de
st_data, OPJ_UINT32 p_nb_elem) |
| 1322 { | 1365 { |
| 1323 OPJ_BYTE * l_src_data = (OPJ_BYTE *) p_src_data; | 1366 OPJ_BYTE * l_src_data = (OPJ_BYTE *) p_src_data; |
| 1324 OPJ_FLOAT32 * l_dest_data = (OPJ_FLOAT32 *) p_dest_data; | 1367 OPJ_FLOAT32 * l_dest_data = (OPJ_FLOAT32 *) p_dest_data; |
| 1325 OPJ_UINT32 i; | 1368 OPJ_UINT32 i; |
| 1326 OPJ_FLOAT32 l_temp; | 1369 OPJ_FLOAT32 l_temp; |
| 1327 | 1370 |
| 1328 for (i=0;i<p_nb_elem;++i) { | 1371 for (i=0;i<p_nb_elem;++i) { |
| 1329 opj_read_float(l_src_data,&l_temp); | 1372 opj_read_float(l_src_data,&l_temp); |
| 1330 | 1373 |
| 1331 l_src_data+=sizeof(OPJ_FLOAT32); | 1374 l_src_data+=sizeof(OPJ_FLOAT32); |
| 1332 | 1375 |
| 1333 *(l_dest_data++) = l_temp; | 1376 *(l_dest_data++) = l_temp; |
| 1334 } | 1377 } |
| 1335 } | 1378 } |
| 1336 | 1379 |
| 1337 void opj_j2k_read_float64_to_float (const void * p_src_data, void * p_dest_data
, OPJ_UINT32 p_nb_elem) | 1380 static void opj_j2k_read_float64_to_float (const void * p_src_data, void * p_de
st_data, OPJ_UINT32 p_nb_elem) |
| 1338 { | 1381 { |
| 1339 OPJ_BYTE * l_src_data = (OPJ_BYTE *) p_src_data; | 1382 OPJ_BYTE * l_src_data = (OPJ_BYTE *) p_src_data; |
| 1340 OPJ_FLOAT32 * l_dest_data = (OPJ_FLOAT32 *) p_dest_data; | 1383 OPJ_FLOAT32 * l_dest_data = (OPJ_FLOAT32 *) p_dest_data; |
| 1341 OPJ_UINT32 i; | 1384 OPJ_UINT32 i; |
| 1342 OPJ_FLOAT64 l_temp; | 1385 OPJ_FLOAT64 l_temp; |
| 1343 | 1386 |
| 1344 for (i=0;i<p_nb_elem;++i) { | 1387 for (i=0;i<p_nb_elem;++i) { |
| 1345 opj_read_double(l_src_data,&l_temp); | 1388 opj_read_double(l_src_data,&l_temp); |
| 1346 | 1389 |
| 1347 l_src_data+=sizeof(OPJ_FLOAT64); | 1390 l_src_data+=sizeof(OPJ_FLOAT64); |
| 1348 | 1391 |
| 1349 *(l_dest_data++) = (OPJ_FLOAT32) l_temp; | 1392 *(l_dest_data++) = (OPJ_FLOAT32) l_temp; |
| 1350 } | 1393 } |
| 1351 } | 1394 } |
| 1352 | 1395 |
| 1353 void opj_j2k_read_int16_to_int32 (const void * p_src_data, void * p_dest_data,
OPJ_UINT32 p_nb_elem) | 1396 static void opj_j2k_read_int16_to_int32 (const void * p_src_data, void * p_dest
_data, OPJ_UINT32 p_nb_elem) |
| 1354 { | 1397 { |
| 1355 OPJ_BYTE * l_src_data = (OPJ_BYTE *) p_src_data; | 1398 OPJ_BYTE * l_src_data = (OPJ_BYTE *) p_src_data; |
| 1356 OPJ_INT32 * l_dest_data = (OPJ_INT32 *) p_dest_data; | 1399 OPJ_INT32 * l_dest_data = (OPJ_INT32 *) p_dest_data; |
| 1357 OPJ_UINT32 i; | 1400 OPJ_UINT32 i; |
| 1358 OPJ_UINT32 l_temp; | 1401 OPJ_UINT32 l_temp; |
| 1359 | 1402 |
| 1360 for (i=0;i<p_nb_elem;++i) { | 1403 for (i=0;i<p_nb_elem;++i) { |
| 1361 opj_read_bytes(l_src_data,&l_temp,2); | 1404 opj_read_bytes(l_src_data,&l_temp,2); |
| 1362 | 1405 |
| 1363 l_src_data+=sizeof(OPJ_INT16); | 1406 l_src_data+=sizeof(OPJ_INT16); |
| 1364 | 1407 |
| 1365 *(l_dest_data++) = (OPJ_INT32) l_temp; | 1408 *(l_dest_data++) = (OPJ_INT32) l_temp; |
| 1366 } | 1409 } |
| 1367 } | 1410 } |
| 1368 | 1411 |
| 1369 void opj_j2k_read_int32_to_int32 (const void * p_src_data, void * p_dest_data,
OPJ_UINT32 p_nb_elem) | 1412 static void opj_j2k_read_int32_to_int32 (const void * p_src_data, void * p_dest
_data, OPJ_UINT32 p_nb_elem) |
| 1370 { | 1413 { |
| 1371 OPJ_BYTE * l_src_data = (OPJ_BYTE *) p_src_data; | 1414 OPJ_BYTE * l_src_data = (OPJ_BYTE *) p_src_data; |
| 1372 OPJ_INT32 * l_dest_data = (OPJ_INT32 *) p_dest_data; | 1415 OPJ_INT32 * l_dest_data = (OPJ_INT32 *) p_dest_data; |
| 1373 OPJ_UINT32 i; | 1416 OPJ_UINT32 i; |
| 1374 OPJ_UINT32 l_temp; | 1417 OPJ_UINT32 l_temp; |
| 1375 | 1418 |
| 1376 for (i=0;i<p_nb_elem;++i) { | 1419 for (i=0;i<p_nb_elem;++i) { |
| 1377 opj_read_bytes(l_src_data,&l_temp,4); | 1420 opj_read_bytes(l_src_data,&l_temp,4); |
| 1378 | 1421 |
| 1379 l_src_data+=sizeof(OPJ_INT32); | 1422 l_src_data+=sizeof(OPJ_INT32); |
| 1380 | 1423 |
| 1381 *(l_dest_data++) = (OPJ_INT32) l_temp; | 1424 *(l_dest_data++) = (OPJ_INT32) l_temp; |
| 1382 } | 1425 } |
| 1383 } | 1426 } |
| 1384 | 1427 |
| 1385 void opj_j2k_read_float32_to_int32 (const void * p_src_data, void * p_dest_data
, OPJ_UINT32 p_nb_elem) | 1428 static void opj_j2k_read_float32_to_int32 (const void * p_src_data, void * p_de
st_data, OPJ_UINT32 p_nb_elem) |
| 1386 { | 1429 { |
| 1387 OPJ_BYTE * l_src_data = (OPJ_BYTE *) p_src_data; | 1430 OPJ_BYTE * l_src_data = (OPJ_BYTE *) p_src_data; |
| 1388 OPJ_INT32 * l_dest_data = (OPJ_INT32 *) p_dest_data; | 1431 OPJ_INT32 * l_dest_data = (OPJ_INT32 *) p_dest_data; |
| 1389 OPJ_UINT32 i; | 1432 OPJ_UINT32 i; |
| 1390 OPJ_FLOAT32 l_temp; | 1433 OPJ_FLOAT32 l_temp; |
| 1391 | 1434 |
| 1392 for (i=0;i<p_nb_elem;++i) { | 1435 for (i=0;i<p_nb_elem;++i) { |
| 1393 opj_read_float(l_src_data,&l_temp); | 1436 opj_read_float(l_src_data,&l_temp); |
| 1394 | 1437 |
| 1395 l_src_data+=sizeof(OPJ_FLOAT32); | 1438 l_src_data+=sizeof(OPJ_FLOAT32); |
| 1396 | 1439 |
| 1397 *(l_dest_data++) = (OPJ_INT32) l_temp; | 1440 *(l_dest_data++) = (OPJ_INT32) l_temp; |
| 1398 } | 1441 } |
| 1399 } | 1442 } |
| 1400 | 1443 |
| 1401 void opj_j2k_read_float64_to_int32 (const void * p_src_data, void * p_dest_data
, OPJ_UINT32 p_nb_elem) | 1444 static void opj_j2k_read_float64_to_int32 (const void * p_src_data, void * p_de
st_data, OPJ_UINT32 p_nb_elem) |
| 1402 { | 1445 { |
| 1403 OPJ_BYTE * l_src_data = (OPJ_BYTE *) p_src_data; | 1446 OPJ_BYTE * l_src_data = (OPJ_BYTE *) p_src_data; |
| 1404 OPJ_INT32 * l_dest_data = (OPJ_INT32 *) p_dest_data; | 1447 OPJ_INT32 * l_dest_data = (OPJ_INT32 *) p_dest_data; |
| 1405 OPJ_UINT32 i; | 1448 OPJ_UINT32 i; |
| 1406 OPJ_FLOAT64 l_temp; | 1449 OPJ_FLOAT64 l_temp; |
| 1407 | 1450 |
| 1408 for (i=0;i<p_nb_elem;++i) { | 1451 for (i=0;i<p_nb_elem;++i) { |
| 1409 opj_read_double(l_src_data,&l_temp); | 1452 opj_read_double(l_src_data,&l_temp); |
| 1410 | 1453 |
| 1411 l_src_data+=sizeof(OPJ_FLOAT64); | 1454 l_src_data+=sizeof(OPJ_FLOAT64); |
| 1412 | 1455 |
| 1413 *(l_dest_data++) = (OPJ_INT32) l_temp; | 1456 *(l_dest_data++) = (OPJ_INT32) l_temp; |
| 1414 } | 1457 } |
| 1415 } | 1458 } |
| 1416 | 1459 |
| 1417 void opj_j2k_write_float_to_int16 (const void * p_src_data, void * p_dest_data,
OPJ_UINT32 p_nb_elem) | 1460 static void opj_j2k_write_float_to_int16 (const void * p_src_data, void * p_des
t_data, OPJ_UINT32 p_nb_elem) |
| 1418 { | 1461 { |
| 1419 OPJ_BYTE * l_dest_data = (OPJ_BYTE *) p_dest_data; | 1462 OPJ_BYTE * l_dest_data = (OPJ_BYTE *) p_dest_data; |
| 1420 OPJ_FLOAT32 * l_src_data = (OPJ_FLOAT32 *) p_src_data; | 1463 OPJ_FLOAT32 * l_src_data = (OPJ_FLOAT32 *) p_src_data; |
| 1421 OPJ_UINT32 i; | 1464 OPJ_UINT32 i; |
| 1422 OPJ_UINT32 l_temp; | 1465 OPJ_UINT32 l_temp; |
| 1423 | 1466 |
| 1424 for (i=0;i<p_nb_elem;++i) { | 1467 for (i=0;i<p_nb_elem;++i) { |
| 1425 l_temp = (OPJ_UINT32) *(l_src_data++); | 1468 l_temp = (OPJ_UINT32) *(l_src_data++); |
| 1426 | 1469 |
| 1427 opj_write_bytes(l_dest_data,l_temp,sizeof(OPJ_INT16)); | 1470 opj_write_bytes(l_dest_data,l_temp,sizeof(OPJ_INT16)); |
| 1428 | 1471 |
| 1429 l_dest_data+=sizeof(OPJ_INT16); | 1472 l_dest_data+=sizeof(OPJ_INT16); |
| 1430 } | 1473 } |
| 1431 } | 1474 } |
| 1432 | 1475 |
| 1433 void opj_j2k_write_float_to_int32 (const void * p_src_data, void * p_dest_data,
OPJ_UINT32 p_nb_elem) | 1476 static void opj_j2k_write_float_to_int32 (const void * p_src_data, void * p_dest
_data, OPJ_UINT32 p_nb_elem) |
| 1434 { | 1477 { |
| 1435 OPJ_BYTE * l_dest_data = (OPJ_BYTE *) p_dest_data; | 1478 OPJ_BYTE * l_dest_data = (OPJ_BYTE *) p_dest_data; |
| 1436 OPJ_FLOAT32 * l_src_data = (OPJ_FLOAT32 *) p_src_data; | 1479 OPJ_FLOAT32 * l_src_data = (OPJ_FLOAT32 *) p_src_data; |
| 1437 OPJ_UINT32 i; | 1480 OPJ_UINT32 i; |
| 1438 OPJ_UINT32 l_temp; | 1481 OPJ_UINT32 l_temp; |
| 1439 | 1482 |
| 1440 for (i=0;i<p_nb_elem;++i) { | 1483 for (i=0;i<p_nb_elem;++i) { |
| 1441 l_temp = (OPJ_UINT32) *(l_src_data++); | 1484 l_temp = (OPJ_UINT32) *(l_src_data++); |
| 1442 | 1485 |
| 1443 opj_write_bytes(l_dest_data,l_temp,sizeof(OPJ_INT32)); | 1486 opj_write_bytes(l_dest_data,l_temp,sizeof(OPJ_INT32)); |
| 1444 | 1487 |
| 1445 l_dest_data+=sizeof(OPJ_INT32); | 1488 l_dest_data+=sizeof(OPJ_INT32); |
| 1446 } | 1489 } |
| 1447 } | 1490 } |
| 1448 | 1491 |
| 1449 void opj_j2k_write_float_to_float (const void * p_src_data, void * p_dest_data,
OPJ_UINT32 p_nb_elem) | 1492 static void opj_j2k_write_float_to_float (const void * p_src_data, void * p_des
t_data, OPJ_UINT32 p_nb_elem) |
| 1450 { | 1493 { |
| 1451 OPJ_BYTE * l_dest_data = (OPJ_BYTE *) p_dest_data; | 1494 OPJ_BYTE * l_dest_data = (OPJ_BYTE *) p_dest_data; |
| 1452 OPJ_FLOAT32 * l_src_data = (OPJ_FLOAT32 *) p_src_data; | 1495 OPJ_FLOAT32 * l_src_data = (OPJ_FLOAT32 *) p_src_data; |
| 1453 OPJ_UINT32 i; | 1496 OPJ_UINT32 i; |
| 1454 OPJ_FLOAT32 l_temp; | 1497 OPJ_FLOAT32 l_temp; |
| 1455 | 1498 |
| 1456 for (i=0;i<p_nb_elem;++i) { | 1499 for (i=0;i<p_nb_elem;++i) { |
| 1457 l_temp = (OPJ_FLOAT32) *(l_src_data++); | 1500 l_temp = (OPJ_FLOAT32) *(l_src_data++); |
| 1458 | 1501 |
| 1459 opj_write_float(l_dest_data,l_temp); | 1502 opj_write_float(l_dest_data,l_temp); |
| 1460 | 1503 |
| 1461 l_dest_data+=sizeof(OPJ_FLOAT32); | 1504 l_dest_data+=sizeof(OPJ_FLOAT32); |
| 1462 } | 1505 } |
| 1463 } | 1506 } |
| 1464 | 1507 |
| 1465 void opj_j2k_write_float_to_float64 (const void * p_src_data, void * p_dest_dat
a, OPJ_UINT32 p_nb_elem) | 1508 static void opj_j2k_write_float_to_float64 (const void * p_src_data, void * p_d
est_data, OPJ_UINT32 p_nb_elem) |
| 1466 { | 1509 { |
| 1467 OPJ_BYTE * l_dest_data = (OPJ_BYTE *) p_dest_data; | 1510 OPJ_BYTE * l_dest_data = (OPJ_BYTE *) p_dest_data; |
| 1468 OPJ_FLOAT32 * l_src_data = (OPJ_FLOAT32 *) p_src_data; | 1511 OPJ_FLOAT32 * l_src_data = (OPJ_FLOAT32 *) p_src_data; |
| 1469 OPJ_UINT32 i; | 1512 OPJ_UINT32 i; |
| 1470 OPJ_FLOAT64 l_temp; | 1513 OPJ_FLOAT64 l_temp; |
| 1471 | 1514 |
| 1472 for (i=0;i<p_nb_elem;++i) { | 1515 for (i=0;i<p_nb_elem;++i) { |
| 1473 l_temp = (OPJ_FLOAT64) *(l_src_data++); | 1516 l_temp = (OPJ_FLOAT64) *(l_src_data++); |
| 1474 | 1517 |
| 1475 opj_write_double(l_dest_data,l_temp); | 1518 opj_write_double(l_dest_data,l_temp); |
| 1476 | 1519 |
| 1477 l_dest_data+=sizeof(OPJ_FLOAT64); | 1520 l_dest_data+=sizeof(OPJ_FLOAT64); |
| 1478 } | 1521 } |
| 1479 } | 1522 } |
| 1480 | 1523 |
| 1481 char *opj_j2k_convert_progression_order(OPJ_PROG_ORDER prg_order){ | 1524 char *opj_j2k_convert_progression_order(OPJ_PROG_ORDER prg_order){ |
| 1482 j2k_prog_order_t *po; | 1525 j2k_prog_order_t *po; |
| 1483 for(po = j2k_prog_order_list; po->enum_prog != -1; po++ ){ | 1526 for(po = j2k_prog_order_list; po->enum_prog != -1; po++ ){ |
| 1484 if(po->enum_prog == prg_order){ | 1527 if(po->enum_prog == prg_order){ |
| 1485 return po->str_prog; | 1528 return po->str_prog; |
| 1486 } | 1529 } |
| 1487 } | 1530 } |
| 1488 return po->str_prog; | 1531 return po->str_prog; |
| 1489 } | 1532 } |
| 1490 | 1533 |
| 1491 OPJ_BOOL opj_j2k_check_poc_val( const opj_poc_t *p_pocs, | 1534 static OPJ_BOOL opj_j2k_check_poc_val( const opj_poc_t *p_pocs, |
| 1492 OPJ_UINT32 p_nb_pocs, | 1535 OPJ_UINT32 p_nb_pocs, |
| 1493 OPJ_UINT32 p_nb_resoluti
ons, | 1536 OPJ_UINT32 p_nb_resoluti
ons, |
| 1494 OPJ_UINT32 p_num_comps, | 1537 OPJ_UINT32 p_num_comps, |
| 1495 OPJ_UINT32 p_num_layers, | 1538 OPJ_UINT32 p_num_layers, |
| 1496 opj_event_mgr_t * p_mana
ger) | 1539 opj_event_mgr_t * p_mana
ger) |
| 1497 { | 1540 { |
| 1498 OPJ_UINT32* packet_array; | 1541 OPJ_UINT32* packet_array; |
| 1499 OPJ_UINT32 index , resno, compno, layno; | 1542 OPJ_UINT32 index , resno, compno, layno; |
| 1500 OPJ_UINT32 i; | 1543 OPJ_UINT32 i; |
| 1501 OPJ_UINT32 step_c = 1; | 1544 OPJ_UINT32 step_c = 1; |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1585 opj_event_msg(p_manager , EVT_ERROR, "Missing packets possible l
oss of data\n"); | 1628 opj_event_msg(p_manager , EVT_ERROR, "Missing packets possible l
oss of data\n"); |
| 1586 } | 1629 } |
| 1587 | 1630 |
| 1588 opj_free(packet_array); | 1631 opj_free(packet_array); |
| 1589 | 1632 |
| 1590 return !loss; | 1633 return !loss; |
| 1591 } | 1634 } |
| 1592 | 1635 |
| 1593 /* ----------------------------------------------------------------------- */ | 1636 /* ----------------------------------------------------------------------- */ |
| 1594 | 1637 |
| 1595 OPJ_UINT32 opj_j2k_get_num_tp(opj_cp_t *cp, OPJ_UINT32 pino, OPJ_UINT32 tileno) | 1638 static OPJ_UINT32 opj_j2k_get_num_tp(opj_cp_t *cp, OPJ_UINT32 pino, OPJ_UINT32 t
ileno) |
| 1596 { | 1639 { |
| 1597 const OPJ_CHAR *prog = 00; | 1640 const OPJ_CHAR *prog = 00; |
| 1598 OPJ_INT32 i; | 1641 OPJ_INT32 i; |
| 1599 OPJ_UINT32 tpnum = 1; | 1642 OPJ_UINT32 tpnum = 1; |
| 1600 opj_tcp_t *tcp = 00; | 1643 opj_tcp_t *tcp = 00; |
| 1601 opj_poc_t * l_current_poc = 00; | 1644 opj_poc_t * l_current_poc = 00; |
| 1602 | 1645 |
| 1603 /* preconditions */ | 1646 /* preconditions */ |
| 1604 assert(tileno < (cp->tw * cp->th)); | 1647 assert(tileno < (cp->tw * cp->th)); |
| 1605 assert(pino < (cp->tcps[tileno].numpocs + 1)); | 1648 assert(pino < (cp->tcps[tileno].numpocs + 1)); |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1643 } | 1686 } |
| 1644 } | 1687 } |
| 1645 } | 1688 } |
| 1646 else { | 1689 else { |
| 1647 tpnum=1; | 1690 tpnum=1; |
| 1648 } | 1691 } |
| 1649 | 1692 |
| 1650 return tpnum; | 1693 return tpnum; |
| 1651 } | 1694 } |
| 1652 | 1695 |
| 1653 OPJ_BOOL opj_j2k_calculate_tp( opj_j2k_t *p_j2k, | 1696 static OPJ_BOOL opj_j2k_calculate_tp( opj_j2k_t *p_j2k, |
| 1654 opj_cp_t *cp, | 1697 opj_cp_t *cp, |
| 1655 OPJ_UINT32 * p_nb_tiles, | 1698 OPJ_UINT32 * p_nb_tiles, |
| 1656 opj_image_t *image, | 1699 opj_image_t *image, |
| 1657 opj_event_mgr_t * p_mana
ger | 1700 opj_event_mgr_t * p_mana
ger |
| 1658 ) | 1701 ) |
| 1659 { | 1702 { |
| 1660 OPJ_UINT32 pino,tileno; | 1703 OPJ_UINT32 pino,tileno; |
| 1661 OPJ_UINT32 l_nb_tiles; | 1704 OPJ_UINT32 l_nb_tiles; |
| 1662 opj_tcp_t *tcp; | 1705 opj_tcp_t *tcp; |
| 1663 | 1706 |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1721 } | 1764 } |
| 1722 tcp->m_nb_tile_parts = cur_totnum_tp; | 1765 tcp->m_nb_tile_parts = cur_totnum_tp; |
| 1723 | 1766 |
| 1724 ++tcp; | 1767 ++tcp; |
| 1725 } | 1768 } |
| 1726 } | 1769 } |
| 1727 | 1770 |
| 1728 return OPJ_TRUE; | 1771 return OPJ_TRUE; |
| 1729 } | 1772 } |
| 1730 | 1773 |
| 1731 OPJ_BOOL opj_j2k_write_soc( opj_j2k_t *p_j2k, | 1774 static OPJ_BOOL opj_j2k_write_soc( opj_j2k_t *p_j2k, |
| 1732 opj_stream_private_t *p_stream, | 1775 opj_stream_private_t *p_stream, |
| 1733 opj_event_mgr_t * p_manager
) | 1776 opj_event_mgr_t * p_manager
) |
| 1734 { | 1777 { |
| 1735 /* 2 bytes will be written */ | 1778 /* 2 bytes will be written */ |
| 1736 OPJ_BYTE * l_start_stream = 00; | 1779 OPJ_BYTE * l_start_stream = 00; |
| 1737 | 1780 |
| 1738 /* preconditions */ | 1781 /* preconditions */ |
| 1739 assert(p_stream != 00); | 1782 assert(p_stream != 00); |
| 1740 assert(p_j2k != 00); | 1783 assert(p_j2k != 00); |
| 1741 assert(p_manager != 00); | 1784 assert(p_manager != 00); |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1799 opj_event_msg(p_manager, EVT_INFO, "Start to read j2k main header (%d).\
n", p_j2k->cstr_index->main_head_start); | 1842 opj_event_msg(p_manager, EVT_INFO, "Start to read j2k main header (%d).\
n", p_j2k->cstr_index->main_head_start); |
| 1800 | 1843 |
| 1801 /* Add the marker to the codestream index*/ | 1844 /* Add the marker to the codestream index*/ |
| 1802 if (OPJ_FALSE == opj_j2k_add_mhmarker(p_j2k->cstr_index, J2K_MS_SOC, p_j
2k->cstr_index->main_head_start, 2)) { | 1845 if (OPJ_FALSE == opj_j2k_add_mhmarker(p_j2k->cstr_index, J2K_MS_SOC, p_j
2k->cstr_index->main_head_start, 2)) { |
| 1803 opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to add mh
marker\n"); | 1846 opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to add mh
marker\n"); |
| 1804 return OPJ_FALSE; | 1847 return OPJ_FALSE; |
| 1805 } | 1848 } |
| 1806 return OPJ_TRUE; | 1849 return OPJ_TRUE; |
| 1807 } | 1850 } |
| 1808 | 1851 |
| 1809 OPJ_BOOL opj_j2k_write_siz( opj_j2k_t *p_j2k, | 1852 static OPJ_BOOL opj_j2k_write_siz( opj_j2k_t *p_j2k, |
| 1810 opj_stream_private_t *p_
stream, | 1853 opj_stream_private_t *p_
stream, |
| 1811 opj_event_mgr_t * p_mana
ger ) | 1854 opj_event_mgr_t * p_mana
ger ) |
| 1812 { | 1855 { |
| 1813 OPJ_UINT32 i; | 1856 OPJ_UINT32 i; |
| 1814 OPJ_UINT32 l_size_len; | 1857 OPJ_UINT32 l_size_len; |
| 1815 OPJ_BYTE * l_current_ptr; | 1858 OPJ_BYTE * l_current_ptr; |
| 1816 opj_image_t * l_image = 00; | 1859 opj_image_t * l_image = 00; |
| 1817 opj_cp_t *cp = 00; | 1860 opj_cp_t *cp = 00; |
| 1818 opj_image_comp_t * l_img_comp = 00; | 1861 opj_image_comp_t * l_img_comp = 00; |
| 1819 | 1862 |
| (...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1992 return OPJ_FALSE; | 2035 return OPJ_FALSE; |
| 1993 } | 2036 } |
| 1994 | 2037 |
| 1995 /* testcase 1610.pdf.SIGSEGV.59c.681 */ | 2038 /* testcase 1610.pdf.SIGSEGV.59c.681 */ |
| 1996 if (((OPJ_UINT64)l_image->x1) * ((OPJ_UINT64)l_image->y1) != (l_image->x
1 * l_image->y1)) { | 2039 if (((OPJ_UINT64)l_image->x1) * ((OPJ_UINT64)l_image->y1) != (l_image->x
1 * l_image->y1)) { |
| 1997 opj_event_msg(p_manager, EVT_ERROR, "Prevent buffer overflow (x1
: %d, y1: %d)\n", l_image->x1, l_image->y1); | 2040 opj_event_msg(p_manager, EVT_ERROR, "Prevent buffer overflow (x1
: %d, y1: %d)\n", l_image->x1, l_image->y1); |
| 1998 return OPJ_FALSE; | 2041 return OPJ_FALSE; |
| 1999 } | 2042 } |
| 2000 | 2043 |
| 2001 /* testcase issue427-illegal-tile-offset.jp2 */ | 2044 /* testcase issue427-illegal-tile-offset.jp2 */ |
| 2002 l_tx1 = l_cp->tx0 + l_cp->tdx; | 2045 l_tx1 = opj_uint_adds(l_cp->tx0, l_cp->tdx); /* manage overflow */ |
| 2003 if (l_tx1 < l_cp->tx0) { /* manage overflow */ | 2046 l_ty1 = opj_uint_adds(l_cp->ty0, l_cp->tdy); /* manage overflow */ |
| 2004 l_tx1 = 0xFFFFFFFFU; | |
| 2005 } | |
| 2006 l_ty1 = l_cp->ty0 + l_cp->tdy; | |
| 2007 if (l_ty1 < l_cp->ty0) { /* manage overflow */ | |
| 2008 l_ty1 = 0xFFFFFFFFU; | |
| 2009 } | |
| 2010 if ((l_cp->tx0 > l_image->x0) || (l_cp->ty0 > l_image->y0) || (l_tx1 <=
l_image->x0) || (l_ty1 <= l_image->y0) ) { | 2047 if ((l_cp->tx0 > l_image->x0) || (l_cp->ty0 > l_image->y0) || (l_tx1 <=
l_image->x0) || (l_ty1 <= l_image->y0) ) { |
| 2011 opj_event_msg(p_manager, EVT_ERROR, "Error with SIZ marker: ille
gal tile offset\n"); | 2048 opj_event_msg(p_manager, EVT_ERROR, "Error with SIZ marker: ille
gal tile offset\n"); |
| 2012 return OPJ_FALSE; | 2049 return OPJ_FALSE; |
| 2013 } | 2050 } |
| 2014 | 2051 |
| 2015 #ifdef USE_JPWL | 2052 #ifdef USE_JPWL |
| 2016 if (l_cp->correct) { | 2053 if (l_cp->correct) { |
| 2017 /* if JPWL is on, we check whether TX errors have damaged | 2054 /* if JPWL is on, we check whether TX errors have damaged |
| 2018 too much the SIZ parameters */ | 2055 too much the SIZ parameters */ |
| 2019 if (!(l_image->x1 * l_image->y1)) { | 2056 if (!(l_image->x1 * l_image->y1)) { |
| (...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2247 | 2284 |
| 2248 ++l_current_tile_param; | 2285 ++l_current_tile_param; |
| 2249 } | 2286 } |
| 2250 | 2287 |
| 2251 p_j2k->m_specific_param.m_decoder.m_state = J2K_STATE_MH; /* FIXME J2K_
DEC_STATE_MH; */ | 2288 p_j2k->m_specific_param.m_decoder.m_state = J2K_STATE_MH; /* FIXME J2K_
DEC_STATE_MH; */ |
| 2252 opj_image_comp_header_update(l_image,l_cp); | 2289 opj_image_comp_header_update(l_image,l_cp); |
| 2253 | 2290 |
| 2254 return OPJ_TRUE; | 2291 return OPJ_TRUE; |
| 2255 } | 2292 } |
| 2256 | 2293 |
| 2257 OPJ_BOOL opj_j2k_write_com( opj_j2k_t *p_j2k, | 2294 static OPJ_BOOL opj_j2k_write_com( opj_j2k_t *p_j2k, |
| 2258 opj_stream_private_t *p_
stream, | 2295 opj_stream_private_t *p_
stream, |
| 2259 opj_event_mgr_t * p_mana
ger | 2296 opj_event_mgr_t * p_mana
ger |
| 2260 ) | 2297 ) |
| 2261 { | 2298 { |
| 2262 OPJ_UINT32 l_comment_size; | 2299 OPJ_UINT32 l_comment_size; |
| 2263 OPJ_UINT32 l_total_com_size; | 2300 OPJ_UINT32 l_total_com_size; |
| 2264 const OPJ_CHAR *l_comment; | 2301 const OPJ_CHAR *l_comment; |
| 2265 OPJ_BYTE * l_current_ptr = 00; | 2302 OPJ_BYTE * l_current_ptr = 00; |
| 2266 | 2303 |
| 2267 /* preconditions */ | 2304 /* preconditions */ |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2321 { | 2358 { |
| 2322 /* preconditions */ | 2359 /* preconditions */ |
| 2323 assert(p_j2k != 00); | 2360 assert(p_j2k != 00); |
| 2324 assert(p_manager != 00); | 2361 assert(p_manager != 00); |
| 2325 assert(p_header_data != 00); | 2362 assert(p_header_data != 00); |
| 2326 (void)p_header_size; | 2363 (void)p_header_size; |
| 2327 | 2364 |
| 2328 return OPJ_TRUE; | 2365 return OPJ_TRUE; |
| 2329 } | 2366 } |
| 2330 | 2367 |
| 2331 OPJ_BOOL opj_j2k_write_cod( opj_j2k_t *p_j2k, | 2368 static OPJ_BOOL opj_j2k_write_cod( opj_j2k_t *p_j2k, |
| 2332 opj_stream_private_t *p_
stream, | 2369 opj_stream_private_t *p_
stream, |
| 2333 opj_event_mgr_t * p_mana
ger ) | 2370 opj_event_mgr_t * p_mana
ger ) |
| 2334 { | 2371 { |
| 2335 opj_cp_t *l_cp = 00; | 2372 opj_cp_t *l_cp = 00; |
| 2336 opj_tcp_t *l_tcp = 00; | 2373 opj_tcp_t *l_tcp = 00; |
| 2337 OPJ_UINT32 l_code_size,l_remaining_size; | 2374 OPJ_UINT32 l_code_size,l_remaining_size; |
| 2338 OPJ_BYTE * l_current_data = 00; | 2375 OPJ_BYTE * l_current_data = 00; |
| 2339 | 2376 |
| 2340 /* preconditions */ | 2377 /* preconditions */ |
| 2341 assert(p_j2k != 00); | 2378 assert(p_j2k != 00); |
| (...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2507 for (i = 0; i < l_image->numcomps; ++i) { | 2544 for (i = 0; i < l_image->numcomps; ++i) { |
| 2508 p_j2k->cstr_info->numdecompos[i] = l_tcp->tccps[i].numre
solutions - 1; | 2545 p_j2k->cstr_info->numdecompos[i] = l_tcp->tccps[i].numre
solutions - 1; |
| 2509 } | 2546 } |
| 2510 } | 2547 } |
| 2511 #endif | 2548 #endif |
| 2512 | 2549 |
| 2513 return OPJ_TRUE; | 2550 return OPJ_TRUE; |
| 2514 } | 2551 } |
| 2515 | 2552 |
| 2516 #if 0 | 2553 #if 0 |
| 2517 OPJ_BOOL opj_j2k_write_coc( opj_j2k_t *p_j2k, | 2554 static OPJ_BOOL opj_j2k_write_coc( opj_j2k_t *p_j2k, |
| 2518 OPJ_UINT32 p_comp_no, | 2555 OPJ_UINT32 p_comp_no, |
| 2519 opj_stream_private_t *p_stream, | 2556 opj_stream_private_t *p_stream, |
| 2520 opj_event_mgr_t * p_manager ) | 2557 opj_event_mgr_t * p_manager ) |
| 2521 { | 2558 { |
| 2522 OPJ_UINT32 l_coc_size,l_remaining_size; | 2559 OPJ_UINT32 l_coc_size,l_remaining_size; |
| 2523 OPJ_UINT32 l_comp_room; | 2560 OPJ_UINT32 l_comp_room; |
| 2524 | 2561 |
| 2525 /* preconditions */ | 2562 /* preconditions */ |
| 2526 assert(p_j2k != 00); | 2563 assert(p_j2k != 00); |
| 2527 assert(p_manager != 00); | 2564 assert(p_manager != 00); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 2554 | 2591 |
| 2555 if (opj_stream_write_data(p_stream,p_j2k->m_specific_param.m_encoder.m_h
eader_tile_data,l_coc_size,p_manager) != l_coc_size) { | 2592 if (opj_stream_write_data(p_stream,p_j2k->m_specific_param.m_encoder.m_h
eader_tile_data,l_coc_size,p_manager) != l_coc_size) { |
| 2556 return OPJ_FALSE; | 2593 return OPJ_FALSE; |
| 2557 } | 2594 } |
| 2558 | 2595 |
| 2559 return OPJ_TRUE; | 2596 return OPJ_TRUE; |
| 2560 } | 2597 } |
| 2561 #endif | 2598 #endif |
| 2562 | 2599 |
| 2563 #if 0 | 2600 #if 0 |
| 2564 void opj_j2k_write_coc_in_memory( opj_j2k_t *p_j2k, | 2601 static void opj_j2k_write_coc_in_memory( opj_j2k_t *p_j2k, |
| 2565 OPJ_UINT32 p_comp_no, | 2602 OPJ_UINT32 p_comp_no, |
| 2566 OPJ_BYTE * p_data, | 2603 OPJ_BYTE * p_data, |
| 2567 OPJ_UINT32 * p_data_written, | 2604 OPJ_UINT32 * p_data_written, |
| 2568 opj_event_mgr_t * p_manager | 2605 opj_event_mgr_t * p_manager |
| 2569 ) | 2606 ) |
| 2570 { | 2607 { |
| 2571 opj_cp_t *l_cp = 00; | 2608 opj_cp_t *l_cp = 00; |
| 2572 opj_tcp_t *l_tcp = 00; | 2609 opj_tcp_t *l_tcp = 00; |
| 2573 OPJ_UINT32 l_coc_size,l_remaining_size; | 2610 OPJ_UINT32 l_coc_size,l_remaining_size; |
| 2574 OPJ_BYTE * l_current_data = 00; | 2611 OPJ_BYTE * l_current_data = 00; |
| (...skipping 25 matching lines...) Expand all Loading... |
| 2600 | 2637 |
| 2601 opj_write_bytes(l_current_data, l_tcp->tccps[p_comp_no].csty, 1);
/* Scoc */ | 2638 opj_write_bytes(l_current_data, l_tcp->tccps[p_comp_no].csty, 1);
/* Scoc */ |
| 2602 ++l_current_data; | 2639 ++l_current_data; |
| 2603 | 2640 |
| 2604 l_remaining_size -= (5 + l_comp_room); | 2641 l_remaining_size -= (5 + l_comp_room); |
| 2605 opj_j2k_write_SPCod_SPCoc(p_j2k,p_j2k->m_current_tile_number,0,l_current
_data,&l_remaining_size,p_manager); | 2642 opj_j2k_write_SPCod_SPCoc(p_j2k,p_j2k->m_current_tile_number,0,l_current
_data,&l_remaining_size,p_manager); |
| 2606 * p_data_written = l_coc_size; | 2643 * p_data_written = l_coc_size; |
| 2607 } | 2644 } |
| 2608 #endif | 2645 #endif |
| 2609 | 2646 |
| 2610 OPJ_UINT32 opj_j2k_get_max_coc_size(opj_j2k_t *p_j2k) | 2647 static OPJ_UINT32 opj_j2k_get_max_coc_size(opj_j2k_t *p_j2k) |
| 2611 { | 2648 { |
| 2612 OPJ_UINT32 i,j; | 2649 OPJ_UINT32 i,j; |
| 2613 OPJ_UINT32 l_nb_comp; | 2650 OPJ_UINT32 l_nb_comp; |
| 2614 OPJ_UINT32 l_nb_tiles; | 2651 OPJ_UINT32 l_nb_tiles; |
| 2615 OPJ_UINT32 l_max = 0; | 2652 OPJ_UINT32 l_max = 0; |
| 2616 | 2653 |
| 2617 /* preconditions */ | 2654 /* preconditions */ |
| 2618 | 2655 |
| 2619 l_nb_tiles = p_j2k->m_cp.tw * p_j2k->m_cp.th ; | 2656 l_nb_tiles = p_j2k->m_cp.tw * p_j2k->m_cp.th ; |
| 2620 l_nb_comp = p_j2k->m_private_image->numcomps; | 2657 l_nb_comp = p_j2k->m_private_image->numcomps; |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2682 return OPJ_FALSE; | 2719 return OPJ_FALSE; |
| 2683 } | 2720 } |
| 2684 | 2721 |
| 2685 if (p_header_size != 0) { | 2722 if (p_header_size != 0) { |
| 2686 opj_event_msg(p_manager, EVT_ERROR, "Error reading COC marker\n"
); | 2723 opj_event_msg(p_manager, EVT_ERROR, "Error reading COC marker\n"
); |
| 2687 return OPJ_FALSE; | 2724 return OPJ_FALSE; |
| 2688 } | 2725 } |
| 2689 return OPJ_TRUE; | 2726 return OPJ_TRUE; |
| 2690 } | 2727 } |
| 2691 | 2728 |
| 2692 OPJ_BOOL opj_j2k_write_qcd( opj_j2k_t *p_j2k, | 2729 static OPJ_BOOL opj_j2k_write_qcd( opj_j2k_t *p_j2k, |
| 2693 opj_stream_private_t *p_
stream, | 2730 opj_stream_private_t *p_
stream, |
| 2694 opj_event_mgr_t * p_mana
ger | 2731 opj_event_mgr_t * p_mana
ger |
| 2695 ) | 2732 ) |
| 2696 { | 2733 { |
| 2697 OPJ_UINT32 l_qcd_size,l_remaining_size; | 2734 OPJ_UINT32 l_qcd_size,l_remaining_size; |
| 2698 OPJ_BYTE * l_current_data = 00; | 2735 OPJ_BYTE * l_current_data = 00; |
| 2699 | 2736 |
| 2700 /* preconditions */ | 2737 /* preconditions */ |
| 2701 assert(p_j2k != 00); | 2738 assert(p_j2k != 00); |
| 2702 assert(p_manager != 00); | 2739 assert(p_manager != 00); |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2773 return OPJ_FALSE; | 2810 return OPJ_FALSE; |
| 2774 } | 2811 } |
| 2775 | 2812 |
| 2776 /* Apply the quantization parameters to other components of the current
tile or the m_default_tcp */ | 2813 /* Apply the quantization parameters to other components of the current
tile or the m_default_tcp */ |
| 2777 opj_j2k_copy_tile_quantization_parameters(p_j2k); | 2814 opj_j2k_copy_tile_quantization_parameters(p_j2k); |
| 2778 | 2815 |
| 2779 return OPJ_TRUE; | 2816 return OPJ_TRUE; |
| 2780 } | 2817 } |
| 2781 | 2818 |
| 2782 #if 0 | 2819 #if 0 |
| 2783 OPJ_BOOL opj_j2k_write_qcc( opj_j2k_t *p_j2k, | 2820 static OPJ_BOOL opj_j2k_write_qcc( opj_j2k_t *p_j2k, |
| 2784 OPJ_UINT32 p_comp_no, | 2821 OPJ_UINT32 p_comp_no, |
| 2785 opj_stream_private_t *p_stream, | 2822 opj_stream_private_t *p_stream, |
| 2786 opj_event_mgr_t * p_manager | 2823 opj_event_mgr_t * p_manager |
| 2787 ) | 2824 ) |
| 2788 { | 2825 { |
| 2789 OPJ_UINT32 l_qcc_size,l_remaining_size; | 2826 OPJ_UINT32 l_qcc_size,l_remaining_size; |
| 2790 | 2827 |
| 2791 /* preconditions */ | 2828 /* preconditions */ |
| 2792 assert(p_j2k != 00); | 2829 assert(p_j2k != 00); |
| 2793 assert(p_manager != 00); | 2830 assert(p_manager != 00); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 2814 | 2851 |
| 2815 if (opj_stream_write_data(p_stream,p_j2k->m_specific_param.m_encoder.m_h
eader_tile_data,l_qcc_size,p_manager) != l_qcc_size) { | 2852 if (opj_stream_write_data(p_stream,p_j2k->m_specific_param.m_encoder.m_h
eader_tile_data,l_qcc_size,p_manager) != l_qcc_size) { |
| 2816 return OPJ_FALSE; | 2853 return OPJ_FALSE; |
| 2817 } | 2854 } |
| 2818 | 2855 |
| 2819 return OPJ_TRUE; | 2856 return OPJ_TRUE; |
| 2820 } | 2857 } |
| 2821 #endif | 2858 #endif |
| 2822 | 2859 |
| 2823 #if 0 | 2860 #if 0 |
| 2824 void opj_j2k_write_qcc_in_memory( opj_j2k_t *p_j2k, | 2861 static void opj_j2k_write_qcc_in_memory( opj_j2k_t *p_j2k, |
| 2825 OPJ_UINT32 p_com
p_no, | 2862 OPJ_UINT32 p_com
p_no, |
| 2826 OPJ_BYTE * p_dat
a, | 2863 OPJ_BYTE * p_dat
a, |
| 2827 OPJ_UINT32 * p_d
ata_written, | 2864 OPJ_UINT32 * p_d
ata_written, |
| 2828 opj_event_mgr_t
* p_manager | 2865 opj_event_mgr_t
* p_manager |
| 2829 ) | 2866 ) |
| 2830 { | 2867 { |
| 2831 OPJ_UINT32 l_qcc_size,l_remaining_size; | 2868 OPJ_UINT32 l_qcc_size,l_remaining_size; |
| 2832 OPJ_BYTE * l_current_data = 00; | 2869 OPJ_BYTE * l_current_data = 00; |
| 2833 | 2870 |
| 2834 /* preconditions */ | 2871 /* preconditions */ |
| (...skipping 29 matching lines...) Expand all Loading... |
| 2864 | 2901 |
| 2865 l_remaining_size -= 6; | 2902 l_remaining_size -= 6; |
| 2866 } | 2903 } |
| 2867 | 2904 |
| 2868 opj_j2k_write_SQcd_SQcc(p_j2k,p_j2k->m_current_tile_number,p_comp_no,l_c
urrent_data,&l_remaining_size,p_manager); | 2905 opj_j2k_write_SQcd_SQcc(p_j2k,p_j2k->m_current_tile_number,p_comp_no,l_c
urrent_data,&l_remaining_size,p_manager); |
| 2869 | 2906 |
| 2870 *p_data_written = l_qcc_size; | 2907 *p_data_written = l_qcc_size; |
| 2871 } | 2908 } |
| 2872 #endif | 2909 #endif |
| 2873 | 2910 |
| 2874 OPJ_UINT32 opj_j2k_get_max_qcc_size (opj_j2k_t *p_j2k) | 2911 static OPJ_UINT32 opj_j2k_get_max_qcc_size (opj_j2k_t *p_j2k) |
| 2875 { | 2912 { |
| 2876 return opj_j2k_get_max_coc_size(p_j2k); | 2913 return opj_j2k_get_max_coc_size(p_j2k); |
| 2877 } | 2914 } |
| 2878 | 2915 |
| 2879 /** | 2916 /** |
| 2880 * Reads a QCC marker (Quantization component) | 2917 * Reads a QCC marker (Quantization component) |
| 2881 * @param p_header_data the data contained in the QCC box. | 2918 * @param p_header_data the data contained in the QCC box. |
| 2882 * @param p_j2k the jpeg2000 codec. | 2919 * @param p_j2k the jpeg2000 codec. |
| 2883 * @param p_header_size the size of the data contained in the QCC marker
. | 2920 * @param p_header_size the size of the data contained in the QCC marker
. |
| 2884 * @param p_manager the user event manager. | 2921 * @param p_manager the user event manager. |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2956 } | 2993 } |
| 2957 | 2994 |
| 2958 if (p_header_size != 0) { | 2995 if (p_header_size != 0) { |
| 2959 opj_event_msg(p_manager, EVT_ERROR, "Error reading QCC marker\n"
); | 2996 opj_event_msg(p_manager, EVT_ERROR, "Error reading QCC marker\n"
); |
| 2960 return OPJ_FALSE; | 2997 return OPJ_FALSE; |
| 2961 } | 2998 } |
| 2962 | 2999 |
| 2963 return OPJ_TRUE; | 3000 return OPJ_TRUE; |
| 2964 } | 3001 } |
| 2965 | 3002 |
| 2966 OPJ_BOOL opj_j2k_write_poc( opj_j2k_t *p_j2k, | 3003 static OPJ_BOOL opj_j2k_write_poc( opj_j2k_t *p_j2k, |
| 2967 opj_stream_private_t *p_
stream, | 3004 opj_stream_private_t *p_
stream, |
| 2968 opj_event_mgr_t * p_mana
ger | 3005 opj_event_mgr_t * p_mana
ger |
| 2969 ) | 3006 ) |
| 2970 { | 3007 { |
| 2971 OPJ_UINT32 l_nb_comp; | 3008 OPJ_UINT32 l_nb_comp; |
| 2972 OPJ_UINT32 l_nb_poc; | 3009 OPJ_UINT32 l_nb_poc; |
| 2973 OPJ_UINT32 l_poc_size; | 3010 OPJ_UINT32 l_poc_size; |
| 2974 OPJ_UINT32 l_written_size = 0; | 3011 OPJ_UINT32 l_written_size = 0; |
| 2975 opj_tcp_t *l_tcp = 00; | 3012 opj_tcp_t *l_tcp = 00; |
| 2976 OPJ_UINT32 l_poc_room; | 3013 OPJ_UINT32 l_poc_room; |
| (...skipping 30 matching lines...) Expand all Loading... |
| 3007 | 3044 |
| 3008 opj_j2k_write_poc_in_memory(p_j2k,p_j2k->m_specific_param.m_encoder.m_he
ader_tile_data,&l_written_size,p_manager); | 3045 opj_j2k_write_poc_in_memory(p_j2k,p_j2k->m_specific_param.m_encoder.m_he
ader_tile_data,&l_written_size,p_manager); |
| 3009 | 3046 |
| 3010 if (opj_stream_write_data(p_stream,p_j2k->m_specific_param.m_encoder.m_h
eader_tile_data,l_poc_size,p_manager) != l_poc_size) { | 3047 if (opj_stream_write_data(p_stream,p_j2k->m_specific_param.m_encoder.m_h
eader_tile_data,l_poc_size,p_manager) != l_poc_size) { |
| 3011 return OPJ_FALSE; | 3048 return OPJ_FALSE; |
| 3012 } | 3049 } |
| 3013 | 3050 |
| 3014 return OPJ_TRUE; | 3051 return OPJ_TRUE; |
| 3015 } | 3052 } |
| 3016 | 3053 |
| 3017 void opj_j2k_write_poc_in_memory( opj_j2k_t *p_j2k, | 3054 static void opj_j2k_write_poc_in_memory( opj_j2k_t *p_j2k, |
| 3018 OPJ_BYTE * p_dat
a, | 3055 OPJ_BYTE * p_dat
a, |
| 3019 OPJ_UINT32 * p_d
ata_written, | 3056 OPJ_UINT32 * p_d
ata_written, |
| 3020 opj_event_mgr_t
* p_manager | 3057 opj_event_mgr_t
* p_manager |
| 3021 ) | 3058 ) |
| 3022 { | 3059 { |
| 3023 OPJ_UINT32 i; | 3060 OPJ_UINT32 i; |
| 3024 OPJ_BYTE * l_current_data = 00; | 3061 OPJ_BYTE * l_current_data = 00; |
| 3025 OPJ_UINT32 l_nb_comp; | 3062 OPJ_UINT32 l_nb_comp; |
| 3026 OPJ_UINT32 l_nb_poc; | 3063 OPJ_UINT32 l_nb_poc; |
| 3027 OPJ_UINT32 l_poc_size; | 3064 OPJ_UINT32 l_poc_size; |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3082 l_current_poc->layno1 = (OPJ_UINT32)opj_int_min((OPJ_INT32)l_cur
rent_poc->layno1, (OPJ_INT32)l_tcp->numlayers); | 3119 l_current_poc->layno1 = (OPJ_UINT32)opj_int_min((OPJ_INT32)l_cur
rent_poc->layno1, (OPJ_INT32)l_tcp->numlayers); |
| 3083 l_current_poc->resno1 = (OPJ_UINT32)opj_int_min((OPJ_INT32)l_cur
rent_poc->resno1, (OPJ_INT32)l_tccp->numresolutions); | 3120 l_current_poc->resno1 = (OPJ_UINT32)opj_int_min((OPJ_INT32)l_cur
rent_poc->resno1, (OPJ_INT32)l_tccp->numresolutions); |
| 3084 l_current_poc->compno1 = (OPJ_UINT32)opj_int_min((OPJ_INT32)l_cu
rrent_poc->compno1, (OPJ_INT32)l_nb_comp); | 3121 l_current_poc->compno1 = (OPJ_UINT32)opj_int_min((OPJ_INT32)l_cu
rrent_poc->compno1, (OPJ_INT32)l_nb_comp); |
| 3085 | 3122 |
| 3086 ++l_current_poc; | 3123 ++l_current_poc; |
| 3087 } | 3124 } |
| 3088 | 3125 |
| 3089 *p_data_written = l_poc_size; | 3126 *p_data_written = l_poc_size; |
| 3090 } | 3127 } |
| 3091 | 3128 |
| 3092 OPJ_UINT32 opj_j2k_get_max_poc_size(opj_j2k_t *p_j2k) | 3129 static OPJ_UINT32 opj_j2k_get_max_poc_size(opj_j2k_t *p_j2k) |
| 3093 { | 3130 { |
| 3094 opj_tcp_t * l_tcp = 00; | 3131 opj_tcp_t * l_tcp = 00; |
| 3095 OPJ_UINT32 l_nb_tiles = 0; | 3132 OPJ_UINT32 l_nb_tiles = 0; |
| 3096 OPJ_UINT32 l_max_poc = 0; | 3133 OPJ_UINT32 l_max_poc = 0; |
| 3097 OPJ_UINT32 i; | 3134 OPJ_UINT32 i; |
| 3098 | 3135 |
| 3099 l_tcp = p_j2k->m_cp.tcps; | 3136 l_tcp = p_j2k->m_cp.tcps; |
| 3100 l_nb_tiles = p_j2k->m_cp.th * p_j2k->m_cp.tw; | 3137 l_nb_tiles = p_j2k->m_cp.th * p_j2k->m_cp.tw; |
| 3101 | 3138 |
| 3102 for (i=0;i<l_nb_tiles;++i) { | 3139 for (i=0;i<l_nb_tiles;++i) { |
| 3103 l_max_poc = opj_uint_max(l_max_poc,l_tcp->numpocs); | 3140 l_max_poc = opj_uint_max(l_max_poc,l_tcp->numpocs); |
| 3104 ++l_tcp; | 3141 ++l_tcp; |
| 3105 } | 3142 } |
| 3106 | 3143 |
| 3107 ++l_max_poc; | 3144 ++l_max_poc; |
| 3108 | 3145 |
| 3109 return 4 + 9 * l_max_poc; | 3146 return 4 + 9 * l_max_poc; |
| 3110 } | 3147 } |
| 3111 | 3148 |
| 3112 OPJ_UINT32 opj_j2k_get_max_toc_size (opj_j2k_t *p_j2k) | 3149 static OPJ_UINT32 opj_j2k_get_max_toc_size (opj_j2k_t *p_j2k) |
| 3113 { | 3150 { |
| 3114 OPJ_UINT32 i; | 3151 OPJ_UINT32 i; |
| 3115 OPJ_UINT32 l_nb_tiles; | 3152 OPJ_UINT32 l_nb_tiles; |
| 3116 OPJ_UINT32 l_max = 0; | 3153 OPJ_UINT32 l_max = 0; |
| 3117 opj_tcp_t * l_tcp = 00; | 3154 opj_tcp_t * l_tcp = 00; |
| 3118 | 3155 |
| 3119 l_tcp = p_j2k->m_cp.tcps; | 3156 l_tcp = p_j2k->m_cp.tcps; |
| 3120 l_nb_tiles = p_j2k->m_cp.tw * p_j2k->m_cp.th ; | 3157 l_nb_tiles = p_j2k->m_cp.tw * p_j2k->m_cp.th ; |
| 3121 | 3158 |
| 3122 for (i=0;i<l_nb_tiles;++i) { | 3159 for (i=0;i<l_nb_tiles;++i) { |
| 3123 l_max = opj_uint_max(l_max,l_tcp->m_nb_tile_parts); | 3160 l_max = opj_uint_max(l_max,l_tcp->m_nb_tile_parts); |
| 3124 | 3161 |
| 3125 ++l_tcp; | 3162 ++l_tcp; |
| 3126 } | 3163 } |
| 3127 | 3164 |
| 3128 return 12 * l_max; | 3165 return 12 * l_max; |
| 3129 } | 3166 } |
| 3130 | 3167 |
| 3131 OPJ_UINT32 opj_j2k_get_specific_header_sizes(opj_j2k_t *p_j2k) | 3168 static OPJ_UINT32 opj_j2k_get_specific_header_sizes(opj_j2k_t *p_j2k) |
| 3132 { | 3169 { |
| 3133 OPJ_UINT32 l_nb_bytes = 0; | 3170 OPJ_UINT32 l_nb_bytes = 0; |
| 3134 OPJ_UINT32 l_nb_comps; | 3171 OPJ_UINT32 l_nb_comps; |
| 3135 OPJ_UINT32 l_coc_bytes,l_qcc_bytes; | 3172 OPJ_UINT32 l_coc_bytes,l_qcc_bytes; |
| 3136 | 3173 |
| 3137 l_nb_comps = p_j2k->m_private_image->numcomps - 1; | 3174 l_nb_comps = p_j2k->m_private_image->numcomps - 1; |
| 3138 l_nb_bytes += opj_j2k_get_max_toc_size(p_j2k); | 3175 l_nb_bytes += opj_j2k_get_max_toc_size(p_j2k); |
| 3139 | 3176 |
| 3140 if (!(OPJ_IS_CINEMA(p_j2k->m_cp.rsiz))) { | 3177 if (!(OPJ_IS_CINEMA(p_j2k->m_cp.rsiz))) { |
| 3141 l_coc_bytes = opj_j2k_get_max_coc_size(p_j2k); | 3178 l_coc_bytes = opj_j2k_get_max_coc_size(p_j2k); |
| (...skipping 309 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3451 } | 3488 } |
| 3452 | 3489 |
| 3453 if (l_packet_len != 0) { | 3490 if (l_packet_len != 0) { |
| 3454 opj_event_msg(p_manager, EVT_ERROR, "Error reading PLT marker\n"
); | 3491 opj_event_msg(p_manager, EVT_ERROR, "Error reading PLT marker\n"
); |
| 3455 return OPJ_FALSE; | 3492 return OPJ_FALSE; |
| 3456 } | 3493 } |
| 3457 | 3494 |
| 3458 return OPJ_TRUE; | 3495 return OPJ_TRUE; |
| 3459 } | 3496 } |
| 3460 | 3497 |
| 3461 #if 0 | 3498 /** |
| 3462 OPJ_BOOL j2k_read_ppm_v2 ( | 3499 * Reads a PPM marker (Packed packet headers, main header) |
| 3463 opj_j2k_t *p_j2k, | 3500 * |
| 3464 OPJ_BYTE * p_header_data, | 3501 * @param p_header_data the data contained in the POC box. |
| 3465 OPJ_UINT32 p_header_size, | 3502 * @param p_j2k the jpeg2000 codec. |
| 3466 struct opj_event_mgr * p_manager | 3503 * @param p_header_size the size of the data contained in the POC marker
. |
| 3467 ) | 3504 * @param p_manager the user event manager. |
| 3505 */ |
| 3506 |
| 3507 static OPJ_BOOL opj_j2k_read_ppm ( |
| 3508 » » » » » » » » » »
» » » » » » » opj_j2k_t *p_j2k, |
| 3509 » » » » » » » » » »
» » » » » » » OPJ_BYTE * p_header_data
, |
| 3510 » » » » » » » » » »
» » » » » » » OPJ_UINT32 p_header_size
, |
| 3511 » » » » » » » » » »
» » » » » » » opj_event_mgr_t * p_mana
ger ) |
| 3468 { | 3512 { |
| 3469 | 3513 » opj_cp_t *l_cp = 00; |
| 3470 opj_cp_t *l_cp = 00; | 3514 » OPJ_UINT32 l_Z_ppm; |
| 3471 OPJ_UINT32 l_remaining_data, l_Z_ppm, l_N_ppm; | 3515 » |
| 3472 | 3516 » /* preconditions */ |
| 3473 /* preconditions */ | 3517 » assert(p_header_data != 00); |
| 3474 assert(p_header_data != 00); | 3518 » assert(p_j2k != 00); |
| 3475 assert(p_j2k != 00); | 3519 » assert(p_manager != 00); |
| 3476 assert(p_manager != 00); | 3520 » |
| 3477 | 3521 » /* We need to have the Z_ppm element + 1 byte of Nppm/Ippm at minimum */ |
| 3478 if (p_header_size < 1) { | 3522 » if (p_header_size < 2) { |
| 3479 opj_event_msg(p_manager, EVT_ERROR, "Error reading PPM marker\n"
); | 3523 » » opj_event_msg(p_manager, EVT_ERROR, "Error reading PPM marker\n"
); |
| 3480 return OPJ_FALSE; | 3524 » » return OPJ_FALSE; |
| 3481 } | 3525 » } |
| 3482 | 3526 » |
| 3483 l_cp = &(p_j2k->m_cp); | 3527 » l_cp = &(p_j2k->m_cp); |
| 3484 l_cp->ppm = 1; | 3528 » l_cp->ppm = 1; |
| 3485 | 3529 » |
| 3486 opj_read_bytes(p_header_data,&l_Z_ppm,1); /* Z_ppm */ | 3530 » opj_read_bytes(p_header_data,&l_Z_ppm,1); /* Z_ppm */ |
| 3487 ++p_header_data; | 3531 » ++p_header_data; |
| 3488 --p_header_size; | 3532 » --p_header_size; |
| 3489 | 3533 » |
| 3490 /* First PPM marker */ | 3534 » /* check allocation needed */ |
| 3491 if (l_Z_ppm == 0) { | 3535 » if (l_cp->ppm_markers == NULL) { /* first PPM marker */ |
| 3492 if (p_header_size < 4) { | 3536 » » OPJ_UINT32 l_newCount = l_Z_ppm + 1U; /* can't overflow, l_Z_ppm
is UINT8 */ |
| 3493 opj_event_msg(p_manager, EVT_ERROR, "Error reading PPM m
arker\n"); | 3537 » » assert(l_cp->ppm_markers_count == 0U); |
| 3494 return OPJ_FALSE; | 3538 » » |
| 3495 } | 3539 » » l_cp->ppm_markers = (opj_ppx *) opj_calloc(l_newCount, sizeof(op
j_ppx)); |
| 3496 | 3540 » » if (l_cp->ppm_markers == NULL) { |
| 3497 opj_read_bytes(p_header_data,&l_N_ppm,4); /* N_ppm
*/ | 3541 » » » opj_event_msg(p_manager, EVT_ERROR, "Not enough memory t
o read PPM marker\n"); |
| 3498 p_header_data+=4; | 3542 » » » return OPJ_FALSE; |
| 3499 p_header_size-=4; | 3543 » » } |
| 3500 | 3544 » » l_cp->ppm_markers_count = l_newCount; |
| 3501 /* First PPM marker: Initialization */ | 3545 » } else if (l_cp->ppm_markers_count <= l_Z_ppm) { |
| 3502 l_cp->ppm_len = l_N_ppm; | 3546 » » OPJ_UINT32 l_newCount = l_Z_ppm + 1U; /* can't overflow, l_Z_ppm
is UINT8 */ |
| 3503 l_cp->ppm_data_size = 0; | 3547 » » opj_ppx *new_ppm_markers; |
| 3504 | 3548 » » new_ppm_markers = (opj_ppx *) opj_realloc(l_cp->ppm_markers, l_n
ewCount * sizeof(opj_ppx)); |
| 3505 l_cp->ppm_buffer = (OPJ_BYTE *) opj_malloc(l_cp->ppm_len); | 3549 » » if (new_ppm_markers == NULL) { |
| 3506 if (l_cp->ppm_buffer == 00) { | 3550 » » » /* clean up to be done on l_cp destruction */ |
| 3507 opj_event_msg(p_manager, EVT_ERROR, "Not enough memory r
eading ppm marker\n"); | 3551 » » » opj_event_msg(p_manager, EVT_ERROR, "Not enough memory t
o read PPM marker\n"); |
| 3508 return OPJ_FALSE; | 3552 » » » return OPJ_FALSE; |
| 3509 } | 3553 » » } |
| 3510 memset(l_cp->ppm_buffer,0,l_cp->ppm_len); | 3554 » » l_cp->ppm_markers = new_ppm_markers; |
| 3511 | 3555 » » memset(l_cp->ppm_markers + l_cp->ppm_markers_count, 0, (l_newCou
nt - l_cp->ppm_markers_count) * sizeof(opj_ppx)); |
| 3512 l_cp->ppm_data = l_cp->ppm_buffer; | 3556 » » l_cp->ppm_markers_count = l_newCount; |
| 3513 } | 3557 » } |
| 3514 | 3558 » |
| 3515 while (1) { | 3559 » if (l_cp->ppm_markers[l_Z_ppm].m_data != NULL) { |
| 3516 if (l_cp->ppm_data_size == l_cp->ppm_len) { | 3560 » » /* clean up to be done on l_cp destruction */ |
| 3517 if (p_header_size >= 4) { | 3561 » » opj_event_msg(p_manager, EVT_ERROR, "Zppm %u already read\n", l_
Z_ppm); |
| 3518 /* read a N_ppm */ | 3562 » » return OPJ_FALSE; |
| 3519 opj_read_bytes(p_header_data,&l_N_ppm,4);
/* N_ppm */ | 3563 » } |
| 3520 p_header_data+=4; | 3564 » |
| 3521 p_header_size-=4; | 3565 » l_cp->ppm_markers[l_Z_ppm].m_data = opj_malloc(p_header_size); |
| 3522 l_cp->ppm_len += l_N_ppm ; | 3566 » if (l_cp->ppm_markers[l_Z_ppm].m_data == NULL) { |
| 3523 | 3567 » » /* clean up to be done on l_cp destruction */ |
| 3524 OPJ_BYTE *new_ppm_buffer = (OPJ_BYTE *) opj_real
loc(l_cp->ppm_buffer, l_cp->ppm_len); | 3568 » » opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to read P
PM marker\n"); |
| 3525 if (! new_ppm_buffer) { | 3569 » » return OPJ_FALSE; |
| 3526 opj_free(l_cp->ppm_buffer); | 3570 » } |
| 3527 l_cp->ppm_buffer = NULL; | 3571 » l_cp->ppm_markers[l_Z_ppm].m_data_size = p_header_size; |
| 3528 l_cp->ppm_len = 0; | 3572 » memcpy(l_cp->ppm_markers[l_Z_ppm].m_data, p_header_data, p_header_size); |
| 3529 l_cp->ppm_data = NULL; | 3573 |
| 3530 opj_event_msg(p_manager, EVT_ERROR, "Not
enough memory reading ppm marker\n"); | 3574 » return OPJ_TRUE; |
| 3531 return OPJ_FALSE; | |
| 3532 } | |
| 3533 l_cp->ppm_buffer = new_ppm_buffer; | |
| 3534 memset(l_cp->ppm_buffer+l_cp->ppm_data_size,0,l_
N_ppm); | |
| 3535 l_cp->ppm_data = l_cp->ppm_buffer; | |
| 3536 } | |
| 3537 else { | |
| 3538 return OPJ_FALSE; | |
| 3539 } | |
| 3540 } | |
| 3541 | |
| 3542 l_remaining_data = l_cp->ppm_len - l_cp->ppm_data_size; | |
| 3543 | |
| 3544 if (l_remaining_data <= p_header_size) { | |
| 3545 /* we must store less information than available in the
packet */ | |
| 3546 memcpy(l_cp->ppm_buffer + l_cp->ppm_data_size , p_header
_data , l_remaining_data); | |
| 3547 l_cp->ppm_data_size = l_cp->ppm_len; | |
| 3548 p_header_size -= l_remaining_data; | |
| 3549 p_header_data += l_remaining_data; | |
| 3550 } | |
| 3551 else { | |
| 3552 memcpy(l_cp->ppm_buffer + l_cp->ppm_data_size , p_header
_data , p_header_size); | |
| 3553 l_cp->ppm_data_size += p_header_size; | |
| 3554 p_header_data += p_header_size; | |
| 3555 p_header_size = 0; | |
| 3556 break; | |
| 3557 } | |
| 3558 } | |
| 3559 | |
| 3560 return OPJ_TRUE; | |
| 3561 } | 3575 } |
| 3562 #endif | 3576 |
| 3563 | 3577 /** |
| 3564 OPJ_BOOL j2k_read_ppm_v3 ( | 3578 * Merges all PPM markers read (Packed headers, main header) |
| 3565 opj_j2k_t *p_j2k, | 3579 * |
| 3566 OPJ_BYTE * p_header_data, | 3580 * @param p_cp main coding parameters. |
| 3567 OPJ_UINT32 p_header_size, | 3581 * @param p_manager the user event manager. |
| 3568 struct opj_event_mgr * p_manager | 3582 */ |
| 3569 ) | 3583 static OPJ_BOOL opj_j2k_merge_ppm ( opj_cp_t *p_cp, opj_event_mgr_t * p_manager
) |
| 3570 { | 3584 { |
| 3571 opj_cp_t *l_cp = 00; | 3585 OPJ_UINT32 i, l_ppm_data_size, l_N_ppm_remaining; |
| 3572 OPJ_UINT32 l_remaining_data, l_Z_ppm, l_N_ppm; | 3586 |
| 3573 | 3587 /* preconditions */ |
| 3574 /* preconditions */ | 3588 assert(p_cp != 00); |
| 3575 assert(p_header_data != 00); | 3589 assert(p_manager != 00); |
| 3576 assert(p_j2k != 00); | 3590 assert(p_cp->ppm_buffer == NULL); |
| 3577 assert(p_manager != 00); | 3591 |
| 3578 | 3592 if (p_cp->ppm == 0U) { |
| 3579 /* Minimum size of PPM marker is equal to the size of Zppm element */ | 3593 return OPJ_TRUE; |
| 3580 if (p_header_size < 1) { | 3594 } |
| 3581 opj_event_msg(p_manager, EVT_ERROR, "Error reading PPM marker\n"
); | 3595 |
| 3582 return OPJ_FALSE; | 3596 l_ppm_data_size = 0U; |
| 3583 } | 3597 l_N_ppm_remaining = 0U; |
| 3584 | 3598 for (i = 0U; i < p_cp->ppm_markers_count; ++i) { |
| 3585 l_cp = &(p_j2k->m_cp); | 3599 if (p_cp->ppm_markers[i].m_data != NULL) { /* standard doesn't s
eem to require contiguous Zppm */ |
| 3586 l_cp->ppm = 1; | 3600 OPJ_UINT32 l_N_ppm; |
| 3587 | 3601 OPJ_UINT32 l_data_size = p_cp->ppm_markers[i].m_data_siz
e; |
| 3588 opj_read_bytes(p_header_data,&l_Z_ppm,1); /* Z_ppm */ | 3602 const OPJ_BYTE* l_data = p_cp->ppm_markers[i].m_data; |
| 3589 ++p_header_data; | 3603 |
| 3590 --p_header_size; | 3604 if (l_N_ppm_remaining >= l_data_size) { |
| 3591 | 3605 l_N_ppm_remaining -= l_data_size; |
| 3592 /* First PPM marker */ | 3606 l_data_size = 0U; |
| 3593 if (l_Z_ppm == 0) { | 3607 } else { |
| 3594 if (l_cp->ppm_data != NULL) { | 3608 l_data += l_N_ppm_remaining; |
| 3595 opj_event_msg(p_manager, EVT_ERROR, "Zppm O already proc
essed. Found twice.\n"); | 3609 l_data_size -= l_N_ppm_remaining; |
| 3596 opj_free(l_cp->ppm_data); | 3610 l_N_ppm_remaining = 0U; |
| 3597 l_cp->ppm_data = NULL; | 3611 } |
| 3598 l_cp->ppm_buffer = NULL; | 3612 |
| 3599 l_cp->ppm = 0; /* do not use PPM */ | 3613 if (l_data_size > 0U) { |
| 3600 return OPJ_FALSE; | 3614 do |
| 3601 } | 3615 { |
| 3602 /* We need now at least the Nppm^0 element */ | 3616 /* read Nppm */ |
| 3603 if (p_header_size < 4) { | 3617 if (l_data_size < 4U) { |
| 3604 opj_event_msg(p_manager, EVT_ERROR, "Error reading PPM m
arker\n"); | 3618 /* clean up to be done on l_cp d
estruction */ |
| 3605 return OPJ_FALSE; | 3619 opj_event_msg(p_manager, EVT_ERR
OR, "Not enough bytes to read Nppm\n"); |
| 3606 } | 3620 return OPJ_FALSE; |
| 3607 | 3621 } |
| 3608 opj_read_bytes(p_header_data,&l_N_ppm,4); /* First
N_ppm */ | 3622 opj_read_bytes(l_data, &l_N_ppm, 4); |
| 3609 p_header_data+=4; | 3623 l_data+=4; |
| 3610 p_header_size-=4; | 3624 l_data_size-=4; |
| 3611 | 3625 l_ppm_data_size += l_N_ppm; /* can't ove
rflow, max 256 markers of max 65536 bytes, that is when PPM markers are not corr
upted which is checked elsewhere */ |
| 3612 /* sanity check: how much bytes is left for Ippm */ | 3626 |
| 3613 if( p_header_size < l_N_ppm ) | 3627 if (l_data_size >= l_N_ppm) { |
| 3614 { | 3628 l_data_size -= l_N_ppm; |
| 3615 opj_event_msg(p_manager, EVT_ERROR, "Not enough bytes (%u) to
hold Ippm series (%u), Index (%d)\n", p_header_size, l_N_ppm, l_Z_ppm ); | 3629 l_data += l_N_ppm; |
| 3616 opj_free(l_cp->ppm_data); | 3630 } else { |
| 3617 l_cp->ppm_data = NULL; | 3631 l_N_ppm_remaining = l_N_ppm - l_
data_size; |
| 3618 l_cp->ppm_buffer = NULL; | 3632 l_data_size = 0U; |
| 3619 l_cp->ppm = 0; /* do not use PPM */ | 3633 } |
| 3620 return OPJ_FALSE; | 3634 } while (l_data_size > 0U); |
| 3621 } | 3635 } |
| 3622 | 3636 } |
| 3623 /* First PPM marker: Initialization */ | 3637 } |
| 3624 l_cp->ppm_len = l_N_ppm; | 3638 |
| 3625 l_cp->ppm_data_read = 0; | 3639 if (l_N_ppm_remaining != 0U) { |
| 3626 | 3640 /* clean up to be done on l_cp destruction */ |
| 3627 l_cp->ppm_data = (OPJ_BYTE *) opj_calloc(1,l_cp->ppm_len); | 3641 opj_event_msg(p_manager, EVT_ERROR, "Corrupted PPM markers\n"); |
| 3628 l_cp->ppm_buffer = l_cp->ppm_data; | 3642 return OPJ_FALSE; |
| 3629 if (l_cp->ppm_data == 00) { | 3643 } |
| 3630 opj_event_msg(p_manager, EVT_ERROR, "Not enough memory t
o read ppm marker\n"); | 3644 |
| 3631 return OPJ_FALSE; | 3645 p_cp->ppm_buffer = (OPJ_BYTE *) opj_malloc(l_ppm_data_size); |
| 3632 } | 3646 if (p_cp->ppm_buffer == 00) { |
| 3633 | 3647 opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to read P
PM marker\n"); |
| 3634 l_cp->ppm_data_current = l_cp->ppm_data; | 3648 return OPJ_FALSE; |
| 3635 | 3649 } |
| 3636 /*l_cp->ppm_data = l_cp->ppm_buffer;*/ | 3650 p_cp->ppm_len = l_ppm_data_size; |
| 3637 } | 3651 l_ppm_data_size = 0U; |
| 3638 else { | 3652 l_N_ppm_remaining = 0U; |
| 3639 if (p_header_size < 4) { | 3653 for (i = 0U; i < p_cp->ppm_markers_count; ++i) { |
| 3640 opj_event_msg(p_manager, EVT_WARNING, "Empty PPM marker\
n"); | 3654 if (p_cp->ppm_markers[i].m_data != NULL) { /* standard doesn't s
eem to require contiguous Zppm */ |
| 3641 return OPJ_TRUE; | 3655 OPJ_UINT32 l_N_ppm; |
| 3642 } | 3656 OPJ_UINT32 l_data_size = p_cp->ppm_markers[i].m_data_siz
e; |
| 3643 else { | 3657 const OPJ_BYTE* l_data = p_cp->ppm_markers[i].m_data; |
| 3644 /* Uncompleted Ippm series in the previous PPM marker?*/ | 3658 |
| 3645 if (l_cp->ppm_data_read < l_cp->ppm_len) { | 3659 if (l_N_ppm_remaining >= l_data_size) { |
| 3646 /* Get the place where add the remaining Ippm se
ries*/ | 3660 memcpy(p_cp->ppm_buffer + l_ppm_data_size, l_dat
a, l_data_size); |
| 3647 l_cp->ppm_data_current = &(l_cp->ppm_data[l_cp->
ppm_data_read]); | 3661 l_ppm_data_size += l_data_size; |
| 3648 l_N_ppm = l_cp->ppm_len - l_cp->ppm_data_read; | 3662 l_N_ppm_remaining -= l_data_size; |
| 3649 } | 3663 l_data_size = 0U; |
| 3650 else { | 3664 } else { |
| 3651 OPJ_BYTE *new_ppm_data; | 3665 memcpy(p_cp->ppm_buffer + l_ppm_data_size, l_dat
a, l_N_ppm_remaining); |
| 3652 opj_read_bytes(p_header_data,&l_N_ppm,4);
/* First N_ppm */ | 3666 l_ppm_data_size += l_N_ppm_remaining; |
| 3653 p_header_data+=4; | 3667 l_data += l_N_ppm_remaining; |
| 3654 p_header_size-=4; | 3668 l_data_size -= l_N_ppm_remaining; |
| 3655 | 3669 l_N_ppm_remaining = 0U; |
| 3656 /* sanity check: how much bytes is left for Ippm
*/ | 3670 } |
| 3657 if( p_header_size < l_N_ppm ) | 3671 |
| 3658 { | 3672 if (l_data_size > 0U) { |
| 3659 opj_event_msg(p_manager, EVT_ERROR, "Not enoug
h bytes (%u) to hold Ippm series (%u), Index (%d)\n", p_header_size, l_N_ppm, l_
Z_ppm ); | 3673 do |
| 3660 opj_free(l_cp->ppm_data); | 3674 { |
| 3661 l_cp->ppm_data = NULL; | 3675 /* read Nppm */ |
| 3662 l_cp->ppm_buffer = NULL; | 3676 if (l_data_size < 4U) { |
| 3663 l_cp->ppm = 0; /* do not use PPM */ | 3677 /* clean up to be done on l_cp d
estruction */ |
| 3664 return OPJ_FALSE; | 3678 opj_event_msg(p_manager, EVT_ERR
OR, "Not enough bytes to read Nppm\n"); |
| 3665 } | 3679 return OPJ_FALSE; |
| 3666 /* Increase the size of ppm_data to add the new
Ippm series*/ | 3680 } |
| 3667 assert(l_cp->ppm_data == l_cp->ppm_buffer && "We
need ppm_data and ppm_buffer to be the same when reallocating"); | 3681 opj_read_bytes(l_data, &l_N_ppm, 4); |
| 3668 new_ppm_data = (OPJ_BYTE *) opj_realloc(l_cp->pp
m_data, l_cp->ppm_len + l_N_ppm); | 3682 l_data+=4; |
| 3669 if (! new_ppm_data) { | 3683 l_data_size-=4; |
| 3670 opj_free(l_cp->ppm_data); | 3684 |
| 3671 l_cp->ppm_data = NULL; | 3685 if (l_data_size >= l_N_ppm) { |
| 3672 l_cp->ppm_buffer = NULL; /* TODO: no ne
ed for a new local variable: ppm_buffer and ppm_data are enough */ | 3686 memcpy(p_cp->ppm_buffer + l_ppm_
data_size, l_data, l_N_ppm); |
| 3673 l_cp->ppm_len = 0; | 3687 l_ppm_data_size += l_N_ppm; |
| 3674 opj_event_msg(p_manager, EVT_ERROR, "Not
enough memory to increase the size of ppm_data to add the new Ippm series\n"); | 3688 l_data_size -= l_N_ppm; |
| 3675 return OPJ_FALSE; | 3689 l_data += l_N_ppm; |
| 3676 } | 3690 } else { |
| 3677 l_cp->ppm_data = new_ppm_data; | 3691 memcpy(p_cp->ppm_buffer + l_ppm_
data_size, l_data, l_data_size); |
| 3678 l_cp->ppm_buffer = l_cp->ppm_data; | 3692 l_ppm_data_size += l_data_size; |
| 3679 | 3693 l_N_ppm_remaining = l_N_ppm - l_
data_size; |
| 3680 /* Keep the position of the place where concaten
ate the new series*/ | 3694 l_data_size = 0U; |
| 3681 l_cp->ppm_data_current = &(l_cp->ppm_data[l_cp->
ppm_len]); | 3695 } |
| 3682 l_cp->ppm_len += l_N_ppm; | 3696 } while (l_data_size > 0U); |
| 3683 } | 3697 } |
| 3684 } | 3698 opj_free(p_cp->ppm_markers[i].m_data); |
| 3685 } | 3699 p_cp->ppm_markers[i].m_data = NULL; |
| 3686 | 3700 p_cp->ppm_markers[i].m_data_size = 0U; |
| 3687 l_remaining_data = p_header_size; | 3701 } |
| 3688 | 3702 } |
| 3689 while (l_remaining_data >= l_N_ppm) { | 3703 |
| 3690 /* read a complete Ippm series*/ | 3704 p_cp->ppm_data = p_cp->ppm_buffer; |
| 3691 memcpy(l_cp->ppm_data_current, p_header_data, l_N_ppm); | 3705 p_cp->ppm_data_size = p_cp->ppm_len; |
| 3692 p_header_size -= l_N_ppm; | 3706 |
| 3693 p_header_data += l_N_ppm; | 3707 p_cp->ppm_markers_count = 0U; |
| 3694 | 3708 opj_free(p_cp->ppm_markers); |
| 3695 l_cp->ppm_data_read += l_N_ppm; /* Increase the number of data r
ead*/ | 3709 p_cp->ppm_markers = NULL; |
| 3696 | 3710 |
| 3697 if (p_header_size) | 3711 return OPJ_TRUE; |
| 3698 { | |
| 3699 if (p_header_size < 4) { | |
| 3700 opj_free(l_cp->ppm_data); | |
| 3701 l_cp->ppm_data = NULL; | |
| 3702 l_cp->ppm_buffer = NULL; /* TODO: no need for a
new local variable: ppm_buffer and ppm_data are enough */ | |
| 3703 l_cp->ppm_len = 0; | |
| 3704 l_cp->ppm = 0; | |
| 3705 opj_event_msg(p_manager, EVT_ERROR, "Error readi
ng PPM marker\n"); | |
| 3706 return OPJ_FALSE; | |
| 3707 } | |
| 3708 opj_read_bytes(p_header_data,&l_N_ppm,4);
/* N_ppm^i */ | |
| 3709 p_header_data+=4; | |
| 3710 p_header_size-=4; | |
| 3711 } | |
| 3712 else { | |
| 3713 l_remaining_data = p_header_size; | |
| 3714 break; | |
| 3715 } | |
| 3716 | |
| 3717 l_remaining_data = p_header_size; | |
| 3718 | |
| 3719 /* Next Ippm series is a complete series ?*/ | |
| 3720 if (l_remaining_data >= l_N_ppm) { | |
| 3721 OPJ_BYTE *new_ppm_data; | |
| 3722 /* Increase the size of ppm_data to add the new Ippm ser
ies*/ | |
| 3723 assert(l_cp->ppm_data == l_cp->ppm_buffer && "We need pp
m_data and ppm_buffer to be the same when reallocating"); | |
| 3724 /* Overflow check */ | |
| 3725 if ((l_cp->ppm_len + l_N_ppm) < l_N_ppm) { | |
| 3726 opj_free(l_cp->ppm_data); | |
| 3727 l_cp->ppm_data = NULL; | |
| 3728 l_cp->ppm_buffer = NULL; /* TODO: no need for a
new local variable: ppm_buffer and ppm_data are enough */ | |
| 3729 l_cp->ppm_len = 0; | |
| 3730 opj_event_msg(p_manager, EVT_ERROR, "Not enough
memory to increase the size of ppm_data to add the new (complete) Ippm series\n"
); | |
| 3731 return OPJ_FALSE; | |
| 3732 } | |
| 3733 new_ppm_data = (OPJ_BYTE *) opj_realloc(l_cp->ppm_data,
l_cp->ppm_len + l_N_ppm); | |
| 3734 if (! new_ppm_data) { | |
| 3735 opj_free(l_cp->ppm_data); | |
| 3736 l_cp->ppm_data = NULL; | |
| 3737 l_cp->ppm_buffer = NULL; /* TODO: no need for a
new local variable: ppm_buffer and ppm_data are enough */ | |
| 3738 l_cp->ppm_len = 0; | |
| 3739 opj_event_msg(p_manager, EVT_ERROR, "Not enough
memory to increase the size of ppm_data to add the new (complete) Ippm series\n"
); | |
| 3740 return OPJ_FALSE; | |
| 3741 } | |
| 3742 l_cp->ppm_data = new_ppm_data; | |
| 3743 l_cp->ppm_buffer = l_cp->ppm_data; | |
| 3744 | |
| 3745 /* Keep the position of the place where concatenate the
new series */ | |
| 3746 l_cp->ppm_data_current = &(l_cp->ppm_data[l_cp->ppm_len]
); | |
| 3747 l_cp->ppm_len += l_N_ppm; | |
| 3748 } | |
| 3749 | |
| 3750 } | |
| 3751 | |
| 3752 /* Need to read an incomplete Ippm series*/ | |
| 3753 if (l_remaining_data) { | |
| 3754 OPJ_BYTE *new_ppm_data; | |
| 3755 assert(l_cp->ppm_data == l_cp->ppm_buffer && "We need ppm_data a
nd ppm_buffer to be the same when reallocating"); | |
| 3756 | |
| 3757 /* Overflow check */ | |
| 3758 if ((l_cp->ppm_len + l_N_ppm) < l_N_ppm) { | |
| 3759 opj_free(l_cp->ppm_data); | |
| 3760 l_cp->ppm_data = NULL; | |
| 3761 l_cp->ppm_buffer = NULL; /* TODO: no need for a new loc
al variable: ppm_buffer and ppm_data are enough */ | |
| 3762 l_cp->ppm_len = 0; | |
| 3763 opj_event_msg(p_manager, EVT_ERROR, "Not enough memory t
o increase the size of ppm_data to add the new (complete) Ippm series\n"); | |
| 3764 return OPJ_FALSE; | |
| 3765 } | |
| 3766 new_ppm_data = (OPJ_BYTE *) opj_realloc(l_cp->ppm_data, l_cp->pp
m_len + l_N_ppm); | |
| 3767 if (! new_ppm_data) { | |
| 3768 opj_free(l_cp->ppm_data); | |
| 3769 l_cp->ppm_data = NULL; | |
| 3770 l_cp->ppm_buffer = NULL; /* TODO: no need for a new loc
al variable: ppm_buffer and ppm_data are enough */ | |
| 3771 l_cp->ppm_len = 0; | |
| 3772 opj_event_msg(p_manager, EVT_ERROR, "Not enough memory t
o increase the size of ppm_data to add the new (incomplete) Ippm series\n"); | |
| 3773 return OPJ_FALSE; | |
| 3774 } | |
| 3775 l_cp->ppm_data = new_ppm_data; | |
| 3776 l_cp->ppm_buffer = l_cp->ppm_data; | |
| 3777 | |
| 3778 /* Keep the position of the place where concatenate the new seri
es*/ | |
| 3779 l_cp->ppm_data_current = &(l_cp->ppm_data[l_cp->ppm_len]); | |
| 3780 l_cp->ppm_len += l_N_ppm; | |
| 3781 | |
| 3782 /* Read incomplete Ippm series*/ | |
| 3783 memcpy(l_cp->ppm_data_current, p_header_data, l_remaining_data); | |
| 3784 p_header_size -= l_remaining_data; | |
| 3785 p_header_data += l_remaining_data; | |
| 3786 | |
| 3787 l_cp->ppm_data_read += l_remaining_data; /* Increase the number
of data read*/ | |
| 3788 } | |
| 3789 | |
| 3790 #ifdef CLEAN_MSD | |
| 3791 | |
| 3792 if (l_cp->ppm_data_size == l_cp->ppm_len) { | |
| 3793 if (p_header_size >= 4) { | |
| 3794 /* read a N_ppm*/ | |
| 3795 opj_read_bytes(p_header_data,&l_N_ppm,4);
/* N_ppm */ | |
| 3796 p_header_data+=4; | |
| 3797 p_header_size-=4; | |
| 3798 l_cp->ppm_len += l_N_ppm ; | |
| 3799 | |
| 3800 OPJ_BYTE *new_ppm_buffer = (OPJ_BYTE *) opj_real
loc(l_cp->ppm_buffer, l_cp->ppm_len); | |
| 3801 if (! new_ppm_buffer) { | |
| 3802 opj_free(l_cp->ppm_buffer); | |
| 3803 l_cp->ppm_buffer = NULL; | |
| 3804 l_cp->ppm_len = 0; | |
| 3805 opj_event_msg(p_manager, EVT_ERROR, "Not
enough memory to read ppm marker\n"); | |
| 3806 return OPJ_FALSE; | |
| 3807 } | |
| 3808 l_cp->ppm_buffer = new_ppm_buffer; | |
| 3809 memset(l_cp->ppm_buffer+l_cp->ppm_data_size,0,l_
N_ppm); | |
| 3810 | |
| 3811 l_cp->ppm_data = l_cp->ppm_buffer; | |
| 3812 } | |
| 3813 else { | |
| 3814 return OPJ_FALSE; | |
| 3815 } | |
| 3816 } | |
| 3817 | |
| 3818 l_remaining_data = l_cp->ppm_len - l_cp->ppm_data_size; | |
| 3819 | |
| 3820 if (l_remaining_data <= p_header_size) { | |
| 3821 /* we must store less information than available in the
packet */ | |
| 3822 memcpy(l_cp->ppm_buffer + l_cp->ppm_data_size , p_header
_data , l_remaining_data); | |
| 3823 l_cp->ppm_data_size = l_cp->ppm_len; | |
| 3824 p_header_size -= l_remaining_data; | |
| 3825 p_header_data += l_remaining_data; | |
| 3826 } | |
| 3827 else { | |
| 3828 memcpy(l_cp->ppm_buffer + l_cp->ppm_data_size , p_header
_data , p_header_size); | |
| 3829 l_cp->ppm_data_size += p_header_size; | |
| 3830 p_header_data += p_header_size; | |
| 3831 p_header_size = 0; | |
| 3832 break; | |
| 3833 } | |
| 3834 } | |
| 3835 #endif | |
| 3836 return OPJ_TRUE; | |
| 3837 } | 3712 } |
| 3838 | 3713 |
| 3839 /** | 3714 /** |
| 3840 * Reads a PPT marker (Packed packet headers, tile-part header) | 3715 * Reads a PPT marker (Packed packet headers, tile-part header) |
| 3841 * | 3716 * |
| 3842 * @param p_header_data the data contained in the PPT box. | 3717 * @param p_header_data the data contained in the PPT box. |
| 3843 * @param p_j2k the jpeg2000 codec. | 3718 * @param p_j2k the jpeg2000 codec. |
| 3844 * @param p_header_size the size of the data contained in the PPT marker
. | 3719 * @param p_header_size the size of the data contained in the PPT marker
. |
| 3845 * @param p_manager the user event manager. | 3720 * @param p_manager the user event manager. |
| 3846 */ | 3721 */ |
| 3847 static OPJ_BOOL opj_j2k_read_ppt ( opj_j2k_t *p_j2k, | 3722 static OPJ_BOOL opj_j2k_read_ppt ( opj_j2k_t *p_j2k, |
| 3848 OPJ_BYTE * p_header_data, | 3723 OPJ_BYTE * p_header_data, |
| 3849 OPJ_UINT32 p_header_size, | 3724 OPJ_UINT32 p_header_size, |
| 3850 opj_event_mgr_t * p_manager | 3725 opj_event_mgr_t * p_manager |
| 3851 ) | 3726 ) |
| 3852 { | 3727 { |
| 3853 opj_cp_t *l_cp = 00; | 3728 » opj_cp_t *l_cp = 00; |
| 3854 opj_tcp_t *l_tcp = 00; | 3729 » opj_tcp_t *l_tcp = 00; |
| 3855 OPJ_UINT32 l_Z_ppt; | 3730 » OPJ_UINT32 l_Z_ppt; |
| 3856 | 3731 |
| 3857 /* preconditions */ | 3732 » /* preconditions */ |
| 3858 assert(p_header_data != 00); | 3733 » assert(p_header_data != 00); |
| 3859 assert(p_j2k != 00); | 3734 » assert(p_j2k != 00); |
| 3860 assert(p_manager != 00); | 3735 » assert(p_manager != 00); |
| 3861 | 3736 |
| 3862 /* We need to have the Z_ppt element at minimum */ | 3737 » /* We need to have the Z_ppt element + 1 byte of Ippt at minimum */ |
| 3863 if (p_header_size < 1) { | 3738 » if (p_header_size < 2) { |
| 3864 opj_event_msg(p_manager, EVT_ERROR, "Error reading PPT marker\n"
); | 3739 » » opj_event_msg(p_manager, EVT_ERROR, "Error reading PPT marker\n"
); |
| 3865 return OPJ_FALSE; | 3740 » » return OPJ_FALSE; |
| 3866 } | 3741 » } |
| 3867 | 3742 |
| 3868 l_cp = &(p_j2k->m_cp); | 3743 » l_cp = &(p_j2k->m_cp); |
| 3869 if (l_cp->ppm){ | 3744 » if (l_cp->ppm){ |
| 3870 opj_event_msg(p_manager, EVT_ERROR, "Error reading PPT marker: p
acket header have been previously found in the main header (PPM marker).\n"); | 3745 » » opj_event_msg(p_manager, EVT_ERROR, "Error reading PPT marker: p
acket header have been previously found in the main header (PPM marker).\n"); |
| 3871 return OPJ_FALSE; | 3746 » » return OPJ_FALSE; |
| 3872 } | 3747 » } |
| 3873 | 3748 |
| 3874 l_tcp = &(l_cp->tcps[p_j2k->m_current_tile_number]); | 3749 » l_tcp = &(l_cp->tcps[p_j2k->m_current_tile_number]); |
| 3875 l_tcp->ppt = 1; | 3750 » l_tcp->ppt = 1; |
| 3876 | 3751 |
| 3877 opj_read_bytes(p_header_data,&l_Z_ppt,1); /* Z_ppt */ | 3752 » opj_read_bytes(p_header_data,&l_Z_ppt,1); /* Z_ppt */ |
| 3878 ++p_header_data; | 3753 » ++p_header_data; |
| 3879 --p_header_size; | 3754 » --p_header_size; |
| 3880 | 3755 » |
| 3881 /* Allocate buffer to read the packet header */ | 3756 » /* check allocation needed */ |
| 3882 if (l_Z_ppt == 0) { | 3757 » if (l_tcp->ppt_markers == NULL) { /* first PPT marker */ |
| 3883 /* First PPT marker */ | 3758 » » OPJ_UINT32 l_newCount = l_Z_ppt + 1U; /* can't overflow, l_Z_ppt
is UINT8 */ |
| 3884 l_tcp->ppt_data_size = 0; | 3759 » » assert(l_tcp->ppt_markers_count == 0U); |
| 3885 l_tcp->ppt_len = p_header_size; | 3760 » » |
| 3886 | 3761 » » l_tcp->ppt_markers = (opj_ppx *) opj_calloc(l_newCount, sizeof(o
pj_ppx)); |
| 3887 opj_free(l_tcp->ppt_buffer); | 3762 » » if (l_tcp->ppt_markers == NULL) { |
| 3888 l_tcp->ppt_buffer = (OPJ_BYTE *) opj_calloc(l_tcp->ppt_len, size
of(OPJ_BYTE) ); | 3763 » » » opj_event_msg(p_manager, EVT_ERROR, "Not enough memory t
o read PPT marker\n"); |
| 3889 if (l_tcp->ppt_buffer == 00) { | 3764 » » » return OPJ_FALSE; |
| 3890 opj_event_msg(p_manager, EVT_ERROR, "Not enough memory t
o read PPT marker\n"); | 3765 » » } |
| 3891 return OPJ_FALSE; | 3766 » » l_tcp->ppt_markers_count = l_newCount; |
| 3892 } | 3767 » } else if (l_tcp->ppt_markers_count <= l_Z_ppt) { |
| 3893 l_tcp->ppt_data = l_tcp->ppt_buffer; | 3768 » » OPJ_UINT32 l_newCount = l_Z_ppt + 1U; /* can't overflow, l_Z_ppt
is UINT8 */ |
| 3894 | 3769 » » opj_ppx *new_ppt_markers; |
| 3895 /* memset(l_tcp->ppt_buffer,0,l_tcp->ppt_len); */ | 3770 » » new_ppt_markers = (opj_ppx *) opj_realloc(l_tcp->ppt_markers, l_
newCount * sizeof(opj_ppx)); |
| 3896 } | 3771 » » if (new_ppt_markers == NULL) { |
| 3897 else { | 3772 » » » /* clean up to be done on l_tcp destruction */ |
| 3898 OPJ_BYTE *new_ppt_buffer; | 3773 » » » opj_event_msg(p_manager, EVT_ERROR, "Not enough memory t
o read PPT marker\n"); |
| 3899 l_tcp->ppt_len += p_header_size; | 3774 » » » return OPJ_FALSE; |
| 3900 | 3775 » » } |
| 3901 new_ppt_buffer = (OPJ_BYTE *) opj_realloc(l_tcp->ppt_buffer, l_t
cp->ppt_len); | 3776 » » l_tcp->ppt_markers = new_ppt_markers; |
| 3902 if (! new_ppt_buffer) { | 3777 » » memset(l_tcp->ppt_markers + l_tcp->ppt_markers_count, 0, (l_newC
ount - l_tcp->ppt_markers_count) * sizeof(opj_ppx)); |
| 3903 opj_free(l_tcp->ppt_buffer); | 3778 » » l_tcp->ppt_markers_count = l_newCount; |
| 3904 l_tcp->ppt_buffer = NULL; | 3779 » } |
| 3905 l_tcp->ppt_len = 0; | 3780 » |
| 3906 opj_event_msg(p_manager, EVT_ERROR, "Not enough memory t
o read PPT marker\n"); | 3781 » if (l_tcp->ppt_markers[l_Z_ppt].m_data != NULL) { |
| 3907 return OPJ_FALSE; | 3782 » » /* clean up to be done on l_tcp destruction */ |
| 3908 } | 3783 » » opj_event_msg(p_manager, EVT_ERROR, "Zppt %u already read\n", l_
Z_ppt); |
| 3909 l_tcp->ppt_buffer = new_ppt_buffer; | 3784 » » return OPJ_FALSE; |
| 3910 l_tcp->ppt_data = l_tcp->ppt_buffer; | 3785 » } |
| 3911 | 3786 » |
| 3912 memset(l_tcp->ppt_buffer+l_tcp->ppt_data_size,0,p_header_size); | 3787 » l_tcp->ppt_markers[l_Z_ppt].m_data = opj_malloc(p_header_size); |
| 3913 } | 3788 » if (l_tcp->ppt_markers[l_Z_ppt].m_data == NULL) { |
| 3914 | 3789 » » /* clean up to be done on l_tcp destruction */ |
| 3915 /* Read packet header from buffer */ | 3790 » » opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to read P
PT marker\n"); |
| 3916 memcpy(l_tcp->ppt_buffer+l_tcp->ppt_data_size,p_header_data,p_header_siz
e); | 3791 » » return OPJ_FALSE; |
| 3917 | 3792 » } |
| 3918 l_tcp->ppt_data_size += p_header_size; | 3793 » l_tcp->ppt_markers[l_Z_ppt].m_data_size = p_header_size; |
| 3919 | 3794 » memcpy(l_tcp->ppt_markers[l_Z_ppt].m_data, p_header_data, p_header_size)
; |
| 3920 return OPJ_TRUE; | 3795 » return OPJ_TRUE; |
| 3921 } | 3796 } |
| 3922 | 3797 |
| 3923 OPJ_BOOL opj_j2k_write_tlm( opj_j2k_t *p_j2k, | 3798 /** |
| 3799 * Merges all PPT markers read (Packed packet headers, tile-part header) |
| 3800 * |
| 3801 * @param p_tcp the tile. |
| 3802 * @param p_manager the user event manager. |
| 3803 */ |
| 3804 static OPJ_BOOL opj_j2k_merge_ppt(opj_tcp_t *p_tcp, opj_event_mgr_t * p_manager) |
| 3805 { |
| 3806 » OPJ_UINT32 i, l_ppt_data_size; |
| 3807 » /* preconditions */ |
| 3808 » assert(p_tcp != 00); |
| 3809 » assert(p_manager != 00); |
| 3810 » assert(p_tcp->ppt_buffer == NULL); |
| 3811 » |
| 3812 » if (p_tcp->ppt == 0U) { |
| 3813 » » return OPJ_TRUE; |
| 3814 » } |
| 3815 » |
| 3816 » l_ppt_data_size = 0U; |
| 3817 » for (i = 0U; i < p_tcp->ppt_markers_count; ++i) { |
| 3818 » » l_ppt_data_size += p_tcp->ppt_markers[i].m_data_size; /* can't o
verflow, max 256 markers of max 65536 bytes */ |
| 3819 » } |
| 3820 » |
| 3821 » p_tcp->ppt_buffer = (OPJ_BYTE *) opj_malloc(l_ppt_data_size); |
| 3822 » if (p_tcp->ppt_buffer == 00) { |
| 3823 » » opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to read P
PT marker\n"); |
| 3824 » » return OPJ_FALSE; |
| 3825 » } |
| 3826 » p_tcp->ppt_len = l_ppt_data_size; |
| 3827 » l_ppt_data_size = 0U; |
| 3828 » for (i = 0U; i < p_tcp->ppt_markers_count; ++i) { |
| 3829 » » if (p_tcp->ppt_markers[i].m_data != NULL) { /* standard doesn't
seem to require contiguous Zppt */ |
| 3830 » » » memcpy(p_tcp->ppt_buffer + l_ppt_data_size, p_tcp->ppt_m
arkers[i].m_data, p_tcp->ppt_markers[i].m_data_size); |
| 3831 » » » l_ppt_data_size += p_tcp->ppt_markers[i].m_data_size; /*
can't overflow, max 256 markers of max 65536 bytes */ |
| 3832 » » » |
| 3833 » » » opj_free(p_tcp->ppt_markers[i].m_data); |
| 3834 » » » p_tcp->ppt_markers[i].m_data = NULL; |
| 3835 » » » p_tcp->ppt_markers[i].m_data_size = 0U; |
| 3836 » » } |
| 3837 » } |
| 3838 » |
| 3839 » p_tcp->ppt_markers_count = 0U; |
| 3840 » opj_free(p_tcp->ppt_markers); |
| 3841 » p_tcp->ppt_markers = NULL; |
| 3842 » |
| 3843 » p_tcp->ppt_data = p_tcp->ppt_buffer; |
| 3844 » p_tcp->ppt_data_size = p_tcp->ppt_len; |
| 3845 » return OPJ_TRUE; |
| 3846 } |
| 3847 |
| 3848 static OPJ_BOOL opj_j2k_write_tlm( opj_j2k_t *p_j2k, |
| 3924 opj_stream_private_t *p_
stream, | 3849 opj_stream_private_t *p_
stream, |
| 3925 opj_event_mgr_t * p_mana
ger | 3850 opj_event_mgr_t * p_mana
ger |
| 3926 ) | 3851 ) |
| 3927 { | 3852 { |
| 3928 OPJ_BYTE * l_current_data = 00; | 3853 OPJ_BYTE * l_current_data = 00; |
| 3929 OPJ_UINT32 l_tlm_size; | 3854 OPJ_UINT32 l_tlm_size; |
| 3930 | 3855 |
| 3931 /* preconditions */ | 3856 /* preconditions */ |
| 3932 assert(p_j2k != 00); | 3857 assert(p_j2k != 00); |
| 3933 assert(p_manager != 00); | 3858 assert(p_manager != 00); |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3967 ++l_current_data; | 3892 ++l_current_data; |
| 3968 | 3893 |
| 3969 /* do nothing on the 5 * l_j2k->m_specific_param.m_encoder.m_total_tile_
parts remaining data */ | 3894 /* do nothing on the 5 * l_j2k->m_specific_param.m_encoder.m_total_tile_
parts remaining data */ |
| 3970 if (opj_stream_write_data(p_stream,p_j2k->m_specific_param.m_encoder.m_h
eader_tile_data,l_tlm_size,p_manager) != l_tlm_size) { | 3895 if (opj_stream_write_data(p_stream,p_j2k->m_specific_param.m_encoder.m_h
eader_tile_data,l_tlm_size,p_manager) != l_tlm_size) { |
| 3971 return OPJ_FALSE; | 3896 return OPJ_FALSE; |
| 3972 } | 3897 } |
| 3973 | 3898 |
| 3974 return OPJ_TRUE; | 3899 return OPJ_TRUE; |
| 3975 } | 3900 } |
| 3976 | 3901 |
| 3977 OPJ_BOOL opj_j2k_write_sot( opj_j2k_t *p_j2k, | 3902 static OPJ_BOOL opj_j2k_write_sot( opj_j2k_t *p_j2k, |
| 3978 OPJ_BYTE * p_data, | 3903 OPJ_BYTE * p_data, |
| 3979 OPJ_UINT32 * p_data_writ
ten, | 3904 OPJ_UINT32 * p_data_writ
ten, |
| 3980 const opj_stream_private
_t *p_stream, | 3905 const opj_stream_private
_t *p_stream, |
| 3981 opj_event_mgr_t * p_mana
ger | 3906 opj_event_mgr_t * p_mana
ger |
| 3982 ) | 3907 ) |
| 3983 { | 3908 { |
| 3984 /* preconditions */ | 3909 /* preconditions */ |
| 3985 assert(p_j2k != 00); | 3910 assert(p_j2k != 00); |
| 3986 assert(p_manager != 00); | 3911 assert(p_manager != 00); |
| 3987 assert(p_stream != 00); | 3912 assert(p_stream != 00); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 4011 OPJ_BOOL res = j2k_add_marker(p_j2k->cstr_info, J2K_MS_SOT, p_j2k->sot_s
tart, len + 2); | 3936 OPJ_BOOL res = j2k_add_marker(p_j2k->cstr_info, J2K_MS_SOT, p_j2k->sot_s
tart, len + 2); |
| 4012 */ | 3937 */ |
| 4013 assert( 0 && "TODO" ); | 3938 assert( 0 && "TODO" ); |
| 4014 #endif /* USE_JPWL */ | 3939 #endif /* USE_JPWL */ |
| 4015 | 3940 |
| 4016 * p_data_written = 12; | 3941 * p_data_written = 12; |
| 4017 | 3942 |
| 4018 return OPJ_TRUE; | 3943 return OPJ_TRUE; |
| 4019 } | 3944 } |
| 4020 | 3945 |
| 4021 OPJ_BOOL opj_j2k_read_sot ( opj_j2k_t *p_j2k, | 3946 static OPJ_BOOL opj_j2k_get_sot_values(OPJ_BYTE * p_header_data, |
| 3947 » » » » » » » » » »
» » » » » » » » » OPJ_UIN
T32 p_header_size, |
| 3948 » » » » » » » » » »
» » » » » » » » » OPJ_UIN
T32* p_tile_no, |
| 3949 » » » » » » » » » »
» » » » » » » » » OPJ_UIN
T32* p_tot_len, |
| 3950 » » » » » » » » » »
» » » » » » » » » OPJ_UIN
T32* p_current_part, |
| 3951 » » » » » » » » » »
» » » » » » » » » OPJ_UIN
T32* p_num_parts, |
| 3952 » » » » » » » » » »
» » » » » » » » » opj_eve
nt_mgr_t * p_manager ) |
| 3953 { |
| 3954 » /* preconditions */ |
| 3955 » assert(p_header_data != 00); |
| 3956 » assert(p_manager != 00); |
| 3957 » |
| 3958 » /* Size of this marker is fixed = 12 (we have already read marker and it
s size)*/ |
| 3959 » if (p_header_size != 8) { |
| 3960 » » opj_event_msg(p_manager, EVT_ERROR, "Error reading SOT marker\n"
); |
| 3961 » » return OPJ_FALSE; |
| 3962 » } |
| 3963 » |
| 3964 » opj_read_bytes(p_header_data,p_tile_no,2); /* Isot */ |
| 3965 » p_header_data+=2; |
| 3966 » opj_read_bytes(p_header_data,p_tot_len,4); /* Psot */ |
| 3967 » p_header_data+=4; |
| 3968 » opj_read_bytes(p_header_data,p_current_part,1); /* TPsot */ |
| 3969 » ++p_header_data; |
| 3970 » opj_read_bytes(p_header_data,p_num_parts ,1); /* TNsot */ |
| 3971 » ++p_header_data; |
| 3972 » return OPJ_TRUE; |
| 3973 } |
| 3974 |
| 3975 static OPJ_BOOL opj_j2k_read_sot ( opj_j2k_t *p_j2k, |
| 4022 OPJ_BYTE * p_header_data, | 3976 OPJ_BYTE * p_header_data, |
| 4023 OPJ_UINT32 p_header_size, | 3977 OPJ_UINT32 p_header_size, |
| 4024 opj_event_mgr_t * p_manager ) | 3978 opj_event_mgr_t * p_manager ) |
| 4025 { | 3979 { |
| 4026 opj_cp_t *l_cp = 00; | 3980 opj_cp_t *l_cp = 00; |
| 4027 opj_tcp_t *l_tcp = 00; | 3981 opj_tcp_t *l_tcp = 00; |
| 4028 OPJ_UINT32 l_tot_len, l_num_parts = 0; | 3982 OPJ_UINT32 l_tot_len, l_num_parts = 0; |
| 4029 OPJ_UINT32 l_current_part; | 3983 OPJ_UINT32 l_current_part; |
| 4030 OPJ_UINT32 l_tile_x,l_tile_y; | 3984 OPJ_UINT32 l_tile_x,l_tile_y; |
| 4031 | 3985 |
| 4032 /* preconditions */ | 3986 /* preconditions */ |
| 4033 assert(p_header_data != 00); | 3987 » |
| 4034 assert(p_j2k != 00); | 3988 assert(p_j2k != 00); |
| 4035 assert(p_manager != 00); | 3989 assert(p_manager != 00); |
| 4036 | 3990 » |
| 4037 /* Size of this marker is fixed = 12 (we have already read marker and it
s size)*/ | 3991 if (! opj_j2k_get_sot_values(p_header_data, p_header_size, &(p_j2k->m_cu
rrent_tile_number), &l_tot_len, &l_current_part, &l_num_parts, p_manager)) { |
| 4038 if (p_header_size != 8) { | |
| 4039 opj_event_msg(p_manager, EVT_ERROR, "Error reading SOT marker\n"
); | 3992 opj_event_msg(p_manager, EVT_ERROR, "Error reading SOT marker\n"
); |
| 4040 return OPJ_FALSE; | 3993 return OPJ_FALSE; |
| 4041 } | 3994 } |
| 4042 | 3995 |
| 4043 l_cp = &(p_j2k->m_cp); | 3996 l_cp = &(p_j2k->m_cp); |
| 4044 opj_read_bytes(p_header_data,&(p_j2k->m_current_tile_number),2);
/* Isot */ | |
| 4045 p_header_data+=2; | |
| 4046 | 3997 |
| 4047 /* testcase 2.pdf.SIGFPE.706.1112 */ | 3998 /* testcase 2.pdf.SIGFPE.706.1112 */ |
| 4048 if (p_j2k->m_current_tile_number >= l_cp->tw * l_cp->th) { | 3999 if (p_j2k->m_current_tile_number >= l_cp->tw * l_cp->th) { |
| 4049 opj_event_msg(p_manager, EVT_ERROR, "Invalid tile number %d\n",
p_j2k->m_current_tile_number); | 4000 opj_event_msg(p_manager, EVT_ERROR, "Invalid tile number %d\n",
p_j2k->m_current_tile_number); |
| 4050 return OPJ_FALSE; | 4001 return OPJ_FALSE; |
| 4051 } | 4002 } |
| 4052 | 4003 |
| 4053 l_tcp = &l_cp->tcps[p_j2k->m_current_tile_number]; | 4004 l_tcp = &l_cp->tcps[p_j2k->m_current_tile_number]; |
| 4054 l_tile_x = p_j2k->m_current_tile_number % l_cp->tw; | 4005 l_tile_x = p_j2k->m_current_tile_number % l_cp->tw; |
| 4055 l_tile_y = p_j2k->m_current_tile_number / l_cp->tw; | 4006 l_tile_y = p_j2k->m_current_tile_number / l_cp->tw; |
| (...skipping 22 matching lines...) Expand all Loading... |
| 4078 | 4029 |
| 4079 /* keep your private count of tiles */ | 4030 /* keep your private count of tiles */ |
| 4080 backup_tileno++; | 4031 backup_tileno++; |
| 4081 }; | 4032 }; |
| 4082 #endif /* USE_JPWL */ | 4033 #endif /* USE_JPWL */ |
| 4083 | 4034 |
| 4084 /* look for the tile in the list of already processed tile (in parts). *
/ | 4035 /* look for the tile in the list of already processed tile (in parts). *
/ |
| 4085 /* Optimization possible here with a more complex data structure and wit
h the removing of tiles */ | 4036 /* Optimization possible here with a more complex data structure and wit
h the removing of tiles */ |
| 4086 /* since the time taken by this function can only grow at the time */ | 4037 /* since the time taken by this function can only grow at the time */ |
| 4087 | 4038 |
| 4088 opj_read_bytes(p_header_data,&l_tot_len,4); /* Psot */ | |
| 4089 p_header_data+=4; | |
| 4090 | |
| 4091 /* PSot should be equal to zero or >=14 or <= 2^32-1 */ | 4039 /* PSot should be equal to zero or >=14 or <= 2^32-1 */ |
| 4092 if ((l_tot_len !=0 ) && (l_tot_len < 14) ) | 4040 if ((l_tot_len !=0 ) && (l_tot_len < 14) ) |
| 4093 { | 4041 { |
| 4094 if (l_tot_len == 12 ) /* MSD: Special case for the PHR data which ar
e read by kakadu*/ | 4042 if (l_tot_len == 12 ) /* MSD: Special case for the PHR data which ar
e read by kakadu*/ |
| 4095 { | 4043 { |
| 4096 opj_event_msg(p_manager, EVT_WARNING, "Empty SOT marker detected
: Psot=%d.\n", l_tot_len); | 4044 opj_event_msg(p_manager, EVT_WARNING, "Empty SOT marker detected
: Psot=%d.\n", l_tot_len); |
| 4097 } | 4045 } |
| 4098 else | 4046 else |
| 4099 { | 4047 { |
| 4100 opj_event_msg(p_manager, EVT_ERROR, "Psot value is not correct r
egards to the JPEG2000 norm: %d.\n", l_tot_len); | 4048 opj_event_msg(p_manager, EVT_ERROR, "Psot value is not correct r
egards to the JPEG2000 norm: %d.\n", l_tot_len); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 4123 }; | 4071 }; |
| 4124 #endif /* USE_JPWL */ | 4072 #endif /* USE_JPWL */ |
| 4125 | 4073 |
| 4126 /* Ref A.4.2: Psot could be equal zero if it is the last tile-pa
rt of the codestream.*/ | 4074 /* Ref A.4.2: Psot could be equal zero if it is the last tile-pa
rt of the codestream.*/ |
| 4127 if (!l_tot_len) { | 4075 if (!l_tot_len) { |
| 4128 opj_event_msg(p_manager, EVT_INFO, "Psot value of the cu
rrent tile-part is equal to zero, " | 4076 opj_event_msg(p_manager, EVT_INFO, "Psot value of the cu
rrent tile-part is equal to zero, " |
| 4129 "we assuming it is the last tile-part of
the codestream.\n"); | 4077 "we assuming it is the last tile-part of
the codestream.\n"); |
| 4130 p_j2k->m_specific_param.m_decoder.m_last_tile_part = 1; | 4078 p_j2k->m_specific_param.m_decoder.m_last_tile_part = 1; |
| 4131 } | 4079 } |
| 4132 | 4080 |
| 4133 opj_read_bytes(p_header_data,&l_current_part ,1); /* TPsot
*/ | |
| 4134 ++p_header_data; | |
| 4135 | |
| 4136 opj_read_bytes(p_header_data,&l_num_parts ,1); /* TNsot
*/ | |
| 4137 ++p_header_data; | |
| 4138 | |
| 4139 if (l_num_parts != 0) { /* Number of tile-part header is provide
d by this tile-part header */ | 4081 if (l_num_parts != 0) { /* Number of tile-part header is provide
d by this tile-part header */ |
| 4082 l_num_parts += p_j2k->m_specific_param.m_decoder.m_nb_ti
le_parts_correction; |
| 4140 /* Useful to manage the case of textGBR.jp2 file because
two values of TNSot are allowed: the correct numbers of | 4083 /* Useful to manage the case of textGBR.jp2 file because
two values of TNSot are allowed: the correct numbers of |
| 4141 * tile-parts for that tile and zero (A.4.2 of 15444-1 :
2002). */ | 4084 * tile-parts for that tile and zero (A.4.2 of 15444-1 :
2002). */ |
| 4142 if (l_tcp->m_nb_tile_parts) { | 4085 if (l_tcp->m_nb_tile_parts) { |
| 4143 if (l_current_part >= l_tcp->m_nb_tile_parts){ | 4086 if (l_current_part >= l_tcp->m_nb_tile_parts){ |
| 4144 opj_event_msg(p_manager, EVT_ERROR, "In
SOT marker, TPSot (%d) is not valid regards to the current " | 4087 opj_event_msg(p_manager, EVT_ERROR, "In
SOT marker, TPSot (%d) is not valid regards to the current " |
| 4145 "number of tile-part (%d
), giving up\n", l_current_part, l_tcp->m_nb_tile_parts ); | 4088 "number of tile-part (%d
), giving up\n", l_current_part, l_tcp->m_nb_tile_parts ); |
| 4146 p_j2k->m_specific_param.m_decoder.m_last
_tile_part = 1; | 4089 p_j2k->m_specific_param.m_decoder.m_last
_tile_part = 1; |
| 4147 return OPJ_FALSE; | 4090 return OPJ_FALSE; |
| 4148 } | 4091 } |
| 4149 } | 4092 } |
| (...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4279 p_j2k->cstr_info->tile[tileno].end_pos += totlen; | 4222 p_j2k->cstr_info->tile[tileno].end_pos += totlen; |
| 4280 } | 4223 } |
| 4281 | 4224 |
| 4282 p_j2k->cstr_info->tile[tileno].tp[partno].tp_start_pos = p_st
ream_tell(p_stream) - 12; | 4225 p_j2k->cstr_info->tile[tileno].tp[partno].tp_start_pos = p_st
ream_tell(p_stream) - 12; |
| 4283 p_j2k->cstr_info->tile[tileno].tp[partno].tp_end_pos = | 4226 p_j2k->cstr_info->tile[tileno].tp[partno].tp_end_pos = |
| 4284 p_j2k->cstr_info->tile[tileno].tp[partno].tp_start_pos + totl
en - 1; | 4227 p_j2k->cstr_info->tile[tileno].tp[partno].tp_start_pos + totl
en - 1; |
| 4285 }*/ | 4228 }*/ |
| 4286 return OPJ_TRUE; | 4229 return OPJ_TRUE; |
| 4287 } | 4230 } |
| 4288 | 4231 |
| 4289 OPJ_BOOL opj_j2k_write_sod( opj_j2k_t *p_j2k, | 4232 static OPJ_BOOL opj_j2k_write_sod( opj_j2k_t *p_j2k, |
| 4290 opj_tcd_t * p_tile_coder
, | 4233 opj_tcd_t * p_tile_coder
, |
| 4291 OPJ_BYTE * p_data, | 4234 OPJ_BYTE * p_data, |
| 4292 OPJ_UINT32 * p_data_writ
ten, | 4235 OPJ_UINT32 * p_data_writ
ten, |
| 4293 OPJ_UINT32 p_total_data_
size, | 4236 OPJ_UINT32 p_total_data_
size, |
| 4294 const opj_stream_private
_t *p_stream, | 4237 const opj_stream_private
_t *p_stream, |
| 4295 opj_event_mgr_t * p_mana
ger | 4238 opj_event_mgr_t * p_mana
ger |
| 4296 ) | 4239 ) |
| 4297 { | 4240 { |
| 4298 opj_codestream_info_t *l_cstr_info = 00; | 4241 opj_codestream_info_t *l_cstr_info = 00; |
| 4299 OPJ_UINT32 l_remaining_data; | 4242 OPJ_UINT32 l_remaining_data; |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4353 if (! opj_tcd_encode_tile(p_tile_coder, p_j2k->m_current_tile_number, p_
data, p_data_written, l_remaining_data , l_cstr_info)) { | 4296 if (! opj_tcd_encode_tile(p_tile_coder, p_j2k->m_current_tile_number, p_
data, p_data_written, l_remaining_data , l_cstr_info)) { |
| 4354 opj_event_msg(p_manager, EVT_ERROR, "Cannot encode tile\n"); | 4297 opj_event_msg(p_manager, EVT_ERROR, "Cannot encode tile\n"); |
| 4355 return OPJ_FALSE; | 4298 return OPJ_FALSE; |
| 4356 } | 4299 } |
| 4357 | 4300 |
| 4358 *p_data_written += 2; | 4301 *p_data_written += 2; |
| 4359 | 4302 |
| 4360 return OPJ_TRUE; | 4303 return OPJ_TRUE; |
| 4361 } | 4304 } |
| 4362 | 4305 |
| 4363 OPJ_BOOL opj_j2k_read_sod (opj_j2k_t *p_j2k, | 4306 static OPJ_BOOL opj_j2k_read_sod (opj_j2k_t *p_j2k, |
| 4364 opj_stream_private_t *p_stream, | 4307 opj_stream_private_t *p_stream, |
| 4365 opj_event_mgr_t * p_manager | 4308 opj_event_mgr_t * p_manager |
| 4366 ) | 4309 ) |
| 4367 { | 4310 { |
| 4368 OPJ_SIZE_T l_current_read_size; | 4311 OPJ_SIZE_T l_current_read_size; |
| 4369 opj_codestream_index_t * l_cstr_index = 00; | 4312 opj_codestream_index_t * l_cstr_index = 00; |
| 4370 OPJ_BYTE ** l_current_data = 00; | 4313 OPJ_BYTE ** l_current_data = 00; |
| 4371 opj_tcp_t * l_tcp = 00; | 4314 opj_tcp_t * l_tcp = 00; |
| 4372 OPJ_UINT32 * l_tile_len = 00; | 4315 OPJ_UINT32 * l_tile_len = 00; |
| 4373 OPJ_BOOL l_sot_length_pb_detected = OPJ_FALSE; | 4316 OPJ_BOOL l_sot_length_pb_detected = OPJ_FALSE; |
| (...skipping 27 matching lines...) Expand all Loading... |
| 4401 /* Patch to support new PHR data */ | 4344 /* Patch to support new PHR data */ |
| 4402 if (p_j2k->m_specific_param.m_decoder.m_sot_length) { | 4345 if (p_j2k->m_specific_param.m_decoder.m_sot_length) { |
| 4403 /* If we are here, we'll try to read the data after allocation */ | 4346 /* If we are here, we'll try to read the data after allocation */ |
| 4404 /* Check enough bytes left in stream before allocation */ | 4347 /* Check enough bytes left in stream before allocation */ |
| 4405 if ((OPJ_OFF_T)p_j2k->m_specific_param.m_decoder.m_sot_length > opj_
stream_get_number_byte_left(p_stream)) { | 4348 if ((OPJ_OFF_T)p_j2k->m_specific_param.m_decoder.m_sot_length > opj_
stream_get_number_byte_left(p_stream)) { |
| 4406 opj_event_msg(p_manager, EVT_ERROR, "Tile part length size incon
sistent with stream length\n"); | 4349 opj_event_msg(p_manager, EVT_ERROR, "Tile part length size incon
sistent with stream length\n"); |
| 4407 return OPJ_FALSE; | 4350 return OPJ_FALSE; |
| 4408 } | 4351 } |
| 4409 if (! *l_current_data) { | 4352 if (! *l_current_data) { |
| 4410 /* LH: oddly enough, in this path, l_tile_len!=0. | 4353 /* LH: oddly enough, in this path, l_tile_len!=0. |
| 4411 * TODO: If this was consistant, we could simplify the code to o
nly use realloc(), as realloc(0,...) default to malloc(0,...). | 4354 * TODO: If this was consistent, we could simplify the code to o
nly use realloc(), as realloc(0,...) default to malloc(0,...). |
| 4412 */ | 4355 */ |
| 4413 *l_current_data = (OPJ_BYTE*) opj_malloc(p_j2k->m_specific_param
.m_decoder.m_sot_length); | 4356 *l_current_data = (OPJ_BYTE*) opj_malloc(p_j2k->m_specific_param
.m_decoder.m_sot_length); |
| 4414 } | 4357 } |
| 4415 else { | 4358 else { |
| 4416 OPJ_BYTE *l_new_current_data = (OPJ_BYTE *) opj_realloc(*l_curre
nt_data, *l_tile_len + p_j2k->m_specific_param.m_decoder.m_sot_length); | 4359 OPJ_BYTE *l_new_current_data = (OPJ_BYTE *) opj_realloc(*l_curre
nt_data, *l_tile_len + p_j2k->m_specific_param.m_decoder.m_sot_length); |
| 4417 if (! l_new_current_data) { | 4360 if (! l_new_current_data) { |
| 4418 opj_free(*l_current_data); | 4361 opj_free(*l_current_data); |
| 4419 /*nothing more is done as l_current_data will be set to
null, and just | 4362 /*nothing more is done as l_current_data will be set to
null, and just |
| 4420 afterward we enter in the error path | 4363 afterward we enter in the error path |
| 4421 and the actual tile_len is updated (committed) at the
end of the | 4364 and the actual tile_len is updated (committed) at the
end of the |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4474 } | 4417 } |
| 4475 else { | 4418 else { |
| 4476 p_j2k->m_specific_param.m_decoder.m_state = J2K_STATE_TPHSOT; | 4419 p_j2k->m_specific_param.m_decoder.m_state = J2K_STATE_TPHSOT; |
| 4477 } | 4420 } |
| 4478 | 4421 |
| 4479 *l_tile_len += (OPJ_UINT32)l_current_read_size; | 4422 *l_tile_len += (OPJ_UINT32)l_current_read_size; |
| 4480 | 4423 |
| 4481 return OPJ_TRUE; | 4424 return OPJ_TRUE; |
| 4482 } | 4425 } |
| 4483 | 4426 |
| 4484 OPJ_BOOL opj_j2k_write_rgn(opj_j2k_t *p_j2k, | 4427 static OPJ_BOOL opj_j2k_write_rgn(opj_j2k_t *p_j2k, |
| 4485 OPJ_UINT32 p_tile_no, | 4428 OPJ_UINT32 p_tile_no, |
| 4486 OPJ_UINT32 p_comp_no, | 4429 OPJ_UINT32 p_comp_no, |
| 4487 OPJ_UINT32 nb_comps, | 4430 OPJ_UINT32 nb_comps, |
| 4488 opj_stream_private_t *p_stream, | 4431 opj_stream_private_t *p_stream, |
| 4489 opj_event_mgr_t * p_manager | 4432 opj_event_mgr_t * p_manager |
| 4490 ) | 4433 ) |
| 4491 { | 4434 { |
| 4492 OPJ_BYTE * l_current_data = 00; | 4435 OPJ_BYTE * l_current_data = 00; |
| 4493 OPJ_UINT32 l_rgn_size; | 4436 OPJ_UINT32 l_rgn_size; |
| 4494 opj_cp_t *l_cp = 00; | 4437 opj_cp_t *l_cp = 00; |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4531 opj_write_bytes(l_current_data, (OPJ_UINT32)l_tccp->roishift,1);
/* SPrgn */ | 4474 opj_write_bytes(l_current_data, (OPJ_UINT32)l_tccp->roishift,1);
/* SPrgn */ |
| 4532 ++l_current_data; | 4475 ++l_current_data; |
| 4533 | 4476 |
| 4534 if (opj_stream_write_data(p_stream,p_j2k->m_specific_param.m_encoder.m_h
eader_tile_data,l_rgn_size,p_manager) != l_rgn_size) { | 4477 if (opj_stream_write_data(p_stream,p_j2k->m_specific_param.m_encoder.m_h
eader_tile_data,l_rgn_size,p_manager) != l_rgn_size) { |
| 4535 return OPJ_FALSE; | 4478 return OPJ_FALSE; |
| 4536 } | 4479 } |
| 4537 | 4480 |
| 4538 return OPJ_TRUE; | 4481 return OPJ_TRUE; |
| 4539 } | 4482 } |
| 4540 | 4483 |
| 4541 OPJ_BOOL opj_j2k_write_eoc( opj_j2k_t *p_j2k, | 4484 static OPJ_BOOL opj_j2k_write_eoc( opj_j2k_t *p_j2k, |
| 4542 opj_stream_private_t *p_stream, | 4485 opj_stream_private_t *p_stream, |
| 4543 opj_event_mgr_t * p_manager | 4486 opj_event_mgr_t * p_manager |
| 4544 ) | 4487 ) |
| 4545 { | 4488 { |
| 4546 /* preconditions */ | 4489 /* preconditions */ |
| 4547 assert(p_j2k != 00); | 4490 assert(p_j2k != 00); |
| 4548 assert(p_manager != 00); | 4491 assert(p_manager != 00); |
| 4549 assert(p_stream != 00); | 4492 assert(p_stream != 00); |
| 4550 | 4493 |
| 4551 opj_write_bytes(p_j2k->m_specific_param.m_encoder.m_header_tile_data,J2K
_MS_EOC,2); /* EOC */ | 4494 opj_write_bytes(p_j2k->m_specific_param.m_encoder.m_header_tile_data,J2K
_MS_EOC,2); /* EOC */ |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4641 return OPJ_FALSE; | 4584 return OPJ_FALSE; |
| 4642 } | 4585 } |
| 4643 | 4586 |
| 4644 opj_read_bytes(p_header_data,(OPJ_UINT32 *) (&(l_tcp->tccps[l_comp_no].r
oishift)),1); /* SPrgn */ | 4587 opj_read_bytes(p_header_data,(OPJ_UINT32 *) (&(l_tcp->tccps[l_comp_no].r
oishift)),1); /* SPrgn */ |
| 4645 ++p_header_data; | 4588 ++p_header_data; |
| 4646 | 4589 |
| 4647 return OPJ_TRUE; | 4590 return OPJ_TRUE; |
| 4648 | 4591 |
| 4649 } | 4592 } |
| 4650 | 4593 |
| 4651 OPJ_FLOAT32 opj_j2k_get_tp_stride (opj_tcp_t * p_tcp) | 4594 static OPJ_FLOAT32 opj_j2k_get_tp_stride (opj_tcp_t * p_tcp) |
| 4652 { | 4595 { |
| 4653 return (OPJ_FLOAT32) ((p_tcp->m_nb_tile_parts - 1) * 14); | 4596 return (OPJ_FLOAT32) ((p_tcp->m_nb_tile_parts - 1) * 14); |
| 4654 } | 4597 } |
| 4655 | 4598 |
| 4656 OPJ_FLOAT32 opj_j2k_get_default_stride (opj_tcp_t * p_tcp) | 4599 static OPJ_FLOAT32 opj_j2k_get_default_stride (opj_tcp_t * p_tcp) |
| 4657 { | 4600 { |
| 4658 (void)p_tcp; | 4601 (void)p_tcp; |
| 4659 return 0; | 4602 return 0; |
| 4660 } | 4603 } |
| 4661 | 4604 |
| 4662 OPJ_BOOL opj_j2k_update_rates( opj_j2k_t *p_j2k, | 4605 static OPJ_BOOL opj_j2k_update_rates( opj_j2k_t *p_j2k, |
| 4663 opj_stream_private_t
*p_stream, | 4606 opj_stream_private_t
*p_stream, |
| 4664 opj_event_mgr_t * p_
manager ) | 4607 opj_event_mgr_t * p_
manager ) |
| 4665 { | 4608 { |
| 4666 opj_cp_t * l_cp = 00; | 4609 opj_cp_t * l_cp = 00; |
| 4667 opj_image_t * l_image = 00; | 4610 opj_image_t * l_image = 00; |
| 4668 opj_tcp_t * l_tcp = 00; | 4611 opj_tcp_t * l_tcp = 00; |
| 4669 opj_image_comp_t * l_img_comp = 00; | 4612 opj_image_comp_t * l_img_comp = 00; |
| 4670 | 4613 |
| 4671 OPJ_UINT32 i,j,k; | 4614 OPJ_UINT32 i,j,k; |
| 4672 OPJ_INT32 l_x0,l_y0,l_x1,l_y1; | 4615 OPJ_INT32 l_x0,l_y0,l_x1,l_y1; |
| (...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4815 } | 4758 } |
| 4816 | 4759 |
| 4817 p_j2k->m_specific_param.m_encoder.m_tlm_sot_offsets_current = | 4760 p_j2k->m_specific_param.m_encoder.m_tlm_sot_offsets_current = |
| 4818 p_j2k->m_specific_param.m_encoder.m_tlm_sot_offs
ets_buffer; | 4761 p_j2k->m_specific_param.m_encoder.m_tlm_sot_offs
ets_buffer; |
| 4819 } | 4762 } |
| 4820 | 4763 |
| 4821 return OPJ_TRUE; | 4764 return OPJ_TRUE; |
| 4822 } | 4765 } |
| 4823 | 4766 |
| 4824 #if 0 | 4767 #if 0 |
| 4825 OPJ_BOOL opj_j2k_read_eoc ( opj_j2k_t *p_j2k, | 4768 static OPJ_BOOL opj_j2k_read_eoc ( opj_j2k_t *p_j2k, |
| 4826 opj_stream_private_t *p_
stream, | 4769 opj_stream_private_t *p_
stream, |
| 4827 opj_event_mgr_t * p_mana
ger ) | 4770 opj_event_mgr_t * p_mana
ger ) |
| 4828 { | 4771 { |
| 4829 OPJ_UINT32 i; | 4772 OPJ_UINT32 i; |
| 4830 opj_tcd_t * l_tcd = 00; | 4773 opj_tcd_t * l_tcd = 00; |
| 4831 OPJ_UINT32 l_nb_tiles; | 4774 OPJ_UINT32 l_nb_tiles; |
| 4832 opj_tcp_t * l_tcp = 00; | 4775 opj_tcp_t * l_tcp = 00; |
| 4833 OPJ_BOOL l_success; | 4776 OPJ_BOOL l_success; |
| 4834 | 4777 |
| 4835 /* preconditions */ | 4778 /* preconditions */ |
| (...skipping 29 matching lines...) Expand all Loading... |
| 4865 | 4808 |
| 4866 opj_j2k_tcp_destroy(l_tcp); | 4809 opj_j2k_tcp_destroy(l_tcp); |
| 4867 ++l_tcp; | 4810 ++l_tcp; |
| 4868 } | 4811 } |
| 4869 | 4812 |
| 4870 opj_tcd_destroy(l_tcd); | 4813 opj_tcd_destroy(l_tcd); |
| 4871 return OPJ_TRUE; | 4814 return OPJ_TRUE; |
| 4872 } | 4815 } |
| 4873 #endif | 4816 #endif |
| 4874 | 4817 |
| 4875 OPJ_BOOL opj_j2k_get_end_header(opj_j2k_t *p_j2k, | 4818 static OPJ_BOOL opj_j2k_get_end_header(opj_j2k_t *p_j2k, |
| 4876 struct opj_stream_privat
e *p_stream, | 4819 struct opj_stream_privat
e *p_stream, |
| 4877 struct opj_event_mgr * p
_manager ) | 4820 struct opj_event_mgr * p
_manager ) |
| 4878 { | 4821 { |
| 4879 /* preconditions */ | 4822 /* preconditions */ |
| 4880 assert(p_j2k != 00); | 4823 assert(p_j2k != 00); |
| 4881 assert(p_manager != 00); | 4824 assert(p_manager != 00); |
| 4882 assert(p_stream != 00); | 4825 assert(p_stream != 00); |
| 4883 | 4826 |
| 4884 p_j2k->cstr_index->main_head_end = opj_stream_tell(p_stream); | 4827 p_j2k->cstr_index->main_head_end = opj_stream_tell(p_stream); |
| 4885 | 4828 |
| 4886 return OPJ_TRUE; | 4829 return OPJ_TRUE; |
| 4887 } | 4830 } |
| 4888 | 4831 |
| 4889 OPJ_BOOL opj_j2k_write_mct_data_group( opj_j2k_t *p_j2k, | 4832 static OPJ_BOOL opj_j2k_write_mct_data_group( opj_j2k_t *p_j2k, |
| 4890 struct o
pj_stream_private *p_stream, | 4833 struct o
pj_stream_private *p_stream, |
| 4891 struct o
pj_event_mgr * p_manager ) | 4834 struct o
pj_event_mgr * p_manager ) |
| 4892 { | 4835 { |
| 4893 OPJ_UINT32 i; | 4836 OPJ_UINT32 i; |
| 4894 opj_simple_mcc_decorrelation_data_t * l_mcc_record; | 4837 opj_simple_mcc_decorrelation_data_t * l_mcc_record; |
| 4895 opj_mct_data_t * l_mct_record; | 4838 opj_mct_data_t * l_mct_record; |
| 4896 opj_tcp_t * l_tcp; | 4839 opj_tcp_t * l_tcp; |
| 4897 | 4840 |
| 4898 /* preconditions */ | 4841 /* preconditions */ |
| 4899 assert(p_j2k != 00); | 4842 assert(p_j2k != 00); |
| (...skipping 28 matching lines...) Expand all Loading... |
| 4928 } | 4871 } |
| 4929 | 4872 |
| 4930 if (! opj_j2k_write_mco(p_j2k,p_stream,p_manager)) { | 4873 if (! opj_j2k_write_mco(p_j2k,p_stream,p_manager)) { |
| 4931 return OPJ_FALSE; | 4874 return OPJ_FALSE; |
| 4932 } | 4875 } |
| 4933 | 4876 |
| 4934 return OPJ_TRUE; | 4877 return OPJ_TRUE; |
| 4935 } | 4878 } |
| 4936 | 4879 |
| 4937 #if 0 | 4880 #if 0 |
| 4938 OPJ_BOOL opj_j2k_write_all_coc(opj_j2k_t *p_j2k, | 4881 static OPJ_BOOL opj_j2k_write_all_coc(opj_j2k_t *p_j2k, |
| 4939 struct o
pj_stream_private *p_stream, | 4882 struct o
pj_stream_private *p_stream, |
| 4940 struct o
pj_event_mgr * p_manager ) | 4883 struct o
pj_event_mgr * p_manager ) |
| 4941 { | 4884 { |
| 4942 OPJ_UINT32 compno; | 4885 OPJ_UINT32 compno; |
| 4943 | 4886 |
| 4944 /* preconditions */ | 4887 /* preconditions */ |
| 4945 assert(p_j2k != 00); | 4888 assert(p_j2k != 00); |
| 4946 assert(p_manager != 00); | 4889 assert(p_manager != 00); |
| 4947 assert(p_stream != 00); | 4890 assert(p_stream != 00); |
| 4948 | 4891 |
| 4949 for (compno = 0; compno < p_j2k->m_private_image->numcomps; ++compno) | 4892 for (compno = 0; compno < p_j2k->m_private_image->numcomps; ++compno) |
| 4950 { | 4893 { |
| 4951 if (! opj_j2k_write_coc(p_j2k,compno,p_stream, p_manager)) { | 4894 if (! opj_j2k_write_coc(p_j2k,compno,p_stream, p_manager)) { |
| 4952 return OPJ_FALSE; | 4895 return OPJ_FALSE; |
| 4953 } | 4896 } |
| 4954 } | 4897 } |
| 4955 | 4898 |
| 4956 return OPJ_TRUE; | 4899 return OPJ_TRUE; |
| 4957 } | 4900 } |
| 4958 #endif | 4901 #endif |
| 4959 | 4902 |
| 4960 #if 0 | 4903 #if 0 |
| 4961 OPJ_BOOL opj_j2k_write_all_qcc(opj_j2k_t *p_j2k, | 4904 static OPJ_BOOL opj_j2k_write_all_qcc(opj_j2k_t *p_j2k, |
| 4962 struct o
pj_stream_private *p_stream, | 4905 struct o
pj_stream_private *p_stream, |
| 4963 struct o
pj_event_mgr * p_manager ) | 4906 struct o
pj_event_mgr * p_manager ) |
| 4964 { | 4907 { |
| 4965 OPJ_UINT32 compno; | 4908 OPJ_UINT32 compno; |
| 4966 | 4909 |
| 4967 /* preconditions */ | 4910 /* preconditions */ |
| 4968 assert(p_j2k != 00); | 4911 assert(p_j2k != 00); |
| 4969 assert(p_manager != 00); | 4912 assert(p_manager != 00); |
| 4970 assert(p_stream != 00); | 4913 assert(p_stream != 00); |
| 4971 | 4914 |
| 4972 for (compno = 0; compno < p_j2k->m_private_image->numcomps; ++compno) | 4915 for (compno = 0; compno < p_j2k->m_private_image->numcomps; ++compno) |
| 4973 { | 4916 { |
| 4974 if (! opj_j2k_write_qcc(p_j2k,compno,p_stream, p_manager)) { | 4917 if (! opj_j2k_write_qcc(p_j2k,compno,p_stream, p_manager)) { |
| 4975 return OPJ_FALSE; | 4918 return OPJ_FALSE; |
| 4976 } | 4919 } |
| 4977 } | 4920 } |
| 4978 | 4921 |
| 4979 return OPJ_TRUE; | 4922 return OPJ_TRUE; |
| 4980 } | 4923 } |
| 4981 #endif | 4924 #endif |
| 4982 | 4925 |
| 4983 | 4926 |
| 4984 OPJ_BOOL opj_j2k_write_regions( opj_j2k_t *p_j2k, | 4927 static OPJ_BOOL opj_j2k_write_regions( opj_j2k_t *p_j2k, |
| 4985 struct opj_stream_privat
e *p_stream, | 4928 struct opj_stream_privat
e *p_stream, |
| 4986 struct opj_event_mgr * p
_manager ) | 4929 struct opj_event_mgr * p
_manager ) |
| 4987 { | 4930 { |
| 4988 OPJ_UINT32 compno; | 4931 OPJ_UINT32 compno; |
| 4989 const opj_tccp_t *l_tccp = 00; | 4932 const opj_tccp_t *l_tccp = 00; |
| 4990 | 4933 |
| 4991 /* preconditions */ | 4934 /* preconditions */ |
| 4992 assert(p_j2k != 00); | 4935 assert(p_j2k != 00); |
| 4993 assert(p_manager != 00); | 4936 assert(p_manager != 00); |
| 4994 assert(p_stream != 00); | 4937 assert(p_stream != 00); |
| 4995 | 4938 |
| 4996 l_tccp = p_j2k->m_cp.tcps->tccps; | 4939 l_tccp = p_j2k->m_cp.tcps->tccps; |
| 4997 | 4940 |
| 4998 for (compno = 0; compno < p_j2k->m_private_image->numcomps; ++compno
) { | 4941 for (compno = 0; compno < p_j2k->m_private_image->numcomps; ++compno) { |
| 4999 if (l_tccp->roishift) { | 4942 if (l_tccp->roishift) { |
| 5000 | 4943 |
| 5001 if (! opj_j2k_write_rgn(p_j2k,0,compno,p_j2k->m_private_
image->numcomps,p_stream,p_manager)) { | 4944 if (! opj_j2k_write_rgn(p_j2k,0,compno,p_j2k->m_private_
image->numcomps,p_stream,p_manager)) { |
| 5002 return OPJ_FALSE; | 4945 return OPJ_FALSE; |
| 5003 } | 4946 } |
| 5004 } | 4947 } |
| 5005 | 4948 |
| 5006 ++l_tccp; | 4949 ++l_tccp; |
| 5007 } | 4950 } |
| 5008 | 4951 |
| 5009 return OPJ_TRUE; | 4952 return OPJ_TRUE; |
| 5010 } | 4953 } |
| 5011 | 4954 |
| 5012 OPJ_BOOL opj_j2k_write_epc( opj_j2k_t *p_j2k, | 4955 static OPJ_BOOL opj_j2k_write_epc( opj_j2k_t *p_j2k, |
| 5013 struct opj_stream_private *p_str
eam, | 4956 struct opj_stream_private *p_str
eam, |
| 5014 struct opj_event_mgr * p_manager
) | 4957 struct opj_event_mgr * p_manager
) |
| 5015 { | 4958 { |
| 5016 opj_codestream_index_t * l_cstr_index = 00; | 4959 opj_codestream_index_t * l_cstr_index = 00; |
| 5017 | 4960 |
| 5018 /* preconditions */ | 4961 /* preconditions */ |
| 5019 assert(p_j2k != 00); | 4962 assert(p_j2k != 00); |
| 5020 assert(p_manager != 00); | 4963 assert(p_manager != 00); |
| 5021 assert(p_stream != 00); | 4964 assert(p_stream != 00); |
| 5022 | 4965 |
| (...skipping 17 matching lines...) Expand all Loading... |
| 5040 jpwl_encode(p_j2k, p_stream, image); | 4983 jpwl_encode(p_j2k, p_stream, image); |
| 5041 | 4984 |
| 5042 } | 4985 } |
| 5043 #endif | 4986 #endif |
| 5044 assert( 0 && "TODO" ); | 4987 assert( 0 && "TODO" ); |
| 5045 #endif /* USE_JPWL */ | 4988 #endif /* USE_JPWL */ |
| 5046 | 4989 |
| 5047 return OPJ_TRUE; | 4990 return OPJ_TRUE; |
| 5048 } | 4991 } |
| 5049 | 4992 |
| 5050 OPJ_BOOL opj_j2k_read_unk ( opj_j2k_t *p_j2k, | 4993 static OPJ_BOOL opj_j2k_read_unk ( opj_j2k_t *p_j2k, |
| 5051 opj_stream_private_t *p_
stream, | 4994 opj_stream_private_t *p_
stream, |
| 5052 OPJ_UINT32 *output_marke
r, | 4995 OPJ_UINT32 *output_marke
r, |
| 5053 opj_event_mgr_t * p_mana
ger | 4996 opj_event_mgr_t * p_mana
ger |
| 5054 ) | 4997 ) |
| 5055 { | 4998 { |
| 5056 OPJ_UINT32 l_unknown_marker; | 4999 OPJ_UINT32 l_unknown_marker; |
| 5057 const opj_dec_memory_marker_handler_t * l_marker_handler; | 5000 const opj_dec_memory_marker_handler_t * l_marker_handler; |
| 5058 OPJ_UINT32 l_size_unk = 2; | 5001 OPJ_UINT32 l_size_unk = 2; |
| 5059 | 5002 |
| 5060 /* preconditions*/ | 5003 /* preconditions*/ |
| 5061 assert(p_j2k != 00); | 5004 assert(p_j2k != 00); |
| 5062 assert(p_manager != 00); | 5005 assert(p_manager != 00); |
| 5063 assert(p_stream != 00); | 5006 assert(p_stream != 00); |
| 5064 | 5007 |
| 5065 opj_event_msg(p_manager, EVT_WARNING, "Unknown marker\n"); | 5008 opj_event_msg(p_manager, EVT_WARNING, "Unknown marker\n"); |
| 5066 | 5009 |
| 5067 while(1) { | 5010 » » for (;;) { |
| 5068 /* Try to read 2 bytes (the next marker ID) from stream and copy
them into the buffer*/ | 5011 /* Try to read 2 bytes (the next marker ID) from stream and copy
them into the buffer*/ |
| 5069 if (opj_stream_read_data(p_stream,p_j2k->m_specific_param.m_deco
der.m_header_data,2,p_manager) != 2) { | 5012 if (opj_stream_read_data(p_stream,p_j2k->m_specific_param.m_deco
der.m_header_data,2,p_manager) != 2) { |
| 5070 opj_event_msg(p_manager, EVT_ERROR, "Stream too short\n"
); | 5013 opj_event_msg(p_manager, EVT_ERROR, "Stream too short\n"
); |
| 5071 return OPJ_FALSE; | 5014 return OPJ_FALSE; |
| 5072 } | 5015 } |
| 5073 | 5016 |
| 5074 /* read 2 bytes as the new marker ID*/ | 5017 /* read 2 bytes as the new marker ID*/ |
| 5075 opj_read_bytes(p_j2k->m_specific_param.m_decoder.m_header_data,&
l_unknown_marker,2); | 5018 opj_read_bytes(p_j2k->m_specific_param.m_decoder.m_header_data,&
l_unknown_marker,2); |
| 5076 | 5019 |
| 5077 if (!(l_unknown_marker < 0xff00)) { | 5020 if (!(l_unknown_marker < 0xff00)) { |
| (...skipping 24 matching lines...) Expand all Loading... |
| 5102 l_size_unk += 2; | 5045 l_size_unk += 2; |
| 5103 } | 5046 } |
| 5104 } | 5047 } |
| 5105 } | 5048 } |
| 5106 | 5049 |
| 5107 *output_marker = l_marker_handler->id ; | 5050 *output_marker = l_marker_handler->id ; |
| 5108 | 5051 |
| 5109 return OPJ_TRUE; | 5052 return OPJ_TRUE; |
| 5110 } | 5053 } |
| 5111 | 5054 |
| 5112 OPJ_BOOL opj_j2k_write_mct_record( opj_j2k_t *p_j2k, | 5055 static OPJ_BOOL opj_j2k_write_mct_record( opj_j2k_t *p_j2k, |
| 5113 opj_mct_data_t *
p_mct_record, | 5056 opj_mct_data_t *
p_mct_record, |
| 5114 struct opj_strea
m_private *p_stream, | 5057 struct opj_strea
m_private *p_stream, |
| 5115 struct opj_event
_mgr * p_manager ) | 5058 struct opj_event
_mgr * p_manager ) |
| 5116 { | 5059 { |
| 5117 OPJ_UINT32 l_mct_size; | 5060 OPJ_UINT32 l_mct_size; |
| 5118 OPJ_BYTE * l_current_data = 00; | 5061 OPJ_BYTE * l_current_data = 00; |
| 5119 OPJ_UINT32 l_tmp; | 5062 OPJ_UINT32 l_tmp; |
| 5120 | 5063 |
| 5121 /* preconditions */ | 5064 /* preconditions */ |
| 5122 assert(p_j2k != 00); | 5065 assert(p_j2k != 00); |
| (...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5274 opj_event_msg(p_manager, EVT_ERROR, "Error reading MCT marker\n"
); | 5217 opj_event_msg(p_manager, EVT_ERROR, "Error reading MCT marker\n"
); |
| 5275 return OPJ_FALSE; | 5218 return OPJ_FALSE; |
| 5276 } | 5219 } |
| 5277 memcpy(l_mct_data->m_data,p_header_data,p_header_size); | 5220 memcpy(l_mct_data->m_data,p_header_data,p_header_size); |
| 5278 | 5221 |
| 5279 l_mct_data->m_data_size = p_header_size; | 5222 l_mct_data->m_data_size = p_header_size; |
| 5280 | 5223 |
| 5281 return OPJ_TRUE; | 5224 return OPJ_TRUE; |
| 5282 } | 5225 } |
| 5283 | 5226 |
| 5284 OPJ_BOOL opj_j2k_write_mcc_record( opj_j2k_t *p_j2k, | 5227 static OPJ_BOOL opj_j2k_write_mcc_record( opj_j2k_t *p_j2k, |
| 5285 struct opj_simpl
e_mcc_decorrelation_data * p_mcc_record, | 5228 struct opj_simpl
e_mcc_decorrelation_data * p_mcc_record, |
| 5286 struct opj_strea
m_private *p_stream, | 5229 struct opj_strea
m_private *p_stream, |
| 5287 struct opj_event
_mgr * p_manager ) | 5230 struct opj_event
_mgr * p_manager ) |
| 5288 { | 5231 { |
| 5289 OPJ_UINT32 i; | 5232 OPJ_UINT32 i; |
| 5290 OPJ_UINT32 l_mcc_size; | 5233 OPJ_UINT32 l_mcc_size; |
| 5291 OPJ_BYTE * l_current_data = 00; | 5234 OPJ_BYTE * l_current_data = 00; |
| 5292 OPJ_UINT32 l_nb_bytes_for_comp; | 5235 OPJ_UINT32 l_nb_bytes_for_comp; |
| 5293 OPJ_UINT32 l_mask; | 5236 OPJ_UINT32 l_mask; |
| 5294 OPJ_UINT32 l_tmcc; | 5237 OPJ_UINT32 l_tmcc; |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5377 opj_write_bytes(l_current_data,l_tmcc,3); /* Tmcci : use MCT defin
ed as number 1 and irreversible array based. */ | 5320 opj_write_bytes(l_current_data,l_tmcc,3); /* Tmcci : use MCT defin
ed as number 1 and irreversible array based. */ |
| 5378 l_current_data+=3; | 5321 l_current_data+=3; |
| 5379 | 5322 |
| 5380 if (opj_stream_write_data(p_stream,p_j2k->m_specific_param.m_encoder.m_h
eader_tile_data,l_mcc_size,p_manager) != l_mcc_size) { | 5323 if (opj_stream_write_data(p_stream,p_j2k->m_specific_param.m_encoder.m_h
eader_tile_data,l_mcc_size,p_manager) != l_mcc_size) { |
| 5381 return OPJ_FALSE; | 5324 return OPJ_FALSE; |
| 5382 } | 5325 } |
| 5383 | 5326 |
| 5384 return OPJ_TRUE; | 5327 return OPJ_TRUE; |
| 5385 } | 5328 } |
| 5386 | 5329 |
| 5387 OPJ_BOOL opj_j2k_read_mcc ( opj_j2k_t *p_j2k, | 5330 static OPJ_BOOL opj_j2k_read_mcc ( opj_j2k_t *p_j2k, |
| 5388 OPJ_BYTE * p_header_data, | 5331 OPJ_BYTE * p_header_data, |
| 5389 OPJ_UINT32 p_header_size, | 5332 OPJ_UINT32 p_header_size, |
| 5390 opj_event_mgr_t * p_manager ) | 5333 opj_event_mgr_t * p_manager ) |
| 5391 { | 5334 { |
| 5392 OPJ_UINT32 i,j; | 5335 OPJ_UINT32 i,j; |
| 5393 OPJ_UINT32 l_tmp; | 5336 OPJ_UINT32 l_tmp; |
| 5394 OPJ_UINT32 l_indix; | 5337 OPJ_UINT32 l_indix; |
| 5395 opj_tcp_t * l_tcp; | 5338 opj_tcp_t * l_tcp; |
| 5396 opj_simple_mcc_decorrelation_data_t * l_mcc_record; | 5339 opj_simple_mcc_decorrelation_data_t * l_mcc_record; |
| 5397 opj_mct_data_t * l_mct_data; | 5340 opj_mct_data_t * l_mct_data; |
| (...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5592 if (p_header_size != 0) { | 5535 if (p_header_size != 0) { |
| 5593 opj_event_msg(p_manager, EVT_ERROR, "Error reading MCC marker\n"
); | 5536 opj_event_msg(p_manager, EVT_ERROR, "Error reading MCC marker\n"
); |
| 5594 return OPJ_FALSE; | 5537 return OPJ_FALSE; |
| 5595 } | 5538 } |
| 5596 | 5539 |
| 5597 ++l_tcp->m_nb_mcc_records; | 5540 ++l_tcp->m_nb_mcc_records; |
| 5598 | 5541 |
| 5599 return OPJ_TRUE; | 5542 return OPJ_TRUE; |
| 5600 } | 5543 } |
| 5601 | 5544 |
| 5602 OPJ_BOOL opj_j2k_write_mco( opj_j2k_t *p_j2k, | 5545 static OPJ_BOOL opj_j2k_write_mco( opj_j2k_t *p_j2k, |
| 5603 struct opj_stream_private *p_str
eam, | 5546 struct opj_stream_private *p_str
eam, |
| 5604 struct opj_event_mgr * p_manager | 5547 struct opj_event_mgr * p_manager |
| 5605 ) | 5548 ) |
| 5606 { | 5549 { |
| 5607 OPJ_BYTE * l_current_data = 00; | 5550 OPJ_BYTE * l_current_data = 00; |
| 5608 OPJ_UINT32 l_mco_size; | 5551 OPJ_UINT32 l_mco_size; |
| 5609 opj_tcp_t * l_tcp = 00; | 5552 opj_tcp_t * l_tcp = 00; |
| 5610 opj_simple_mcc_decorrelation_data_t * l_mcc_record; | 5553 opj_simple_mcc_decorrelation_data_t * l_mcc_record; |
| 5611 OPJ_UINT32 i; | 5554 OPJ_UINT32 i; |
| 5612 | 5555 |
| 5613 /* preconditions */ | 5556 /* preconditions */ |
| 5614 assert(p_j2k != 00); | 5557 assert(p_j2k != 00); |
| 5615 assert(p_manager != 00); | 5558 assert(p_manager != 00); |
| 5616 assert(p_stream != 00); | 5559 assert(p_stream != 00); |
| 5617 | 5560 |
| 5618 l_tcp =&(p_j2k->m_cp.tcps[p_j2k->m_current_tile_number]); | 5561 l_tcp =&(p_j2k->m_cp.tcps[p_j2k->m_current_tile_number]); |
| 5619 l_current_data = p_j2k->m_specific_param.m_encoder.m_header_tile_data; | 5562 » |
| 5620 | |
| 5621 l_mco_size = 5 + l_tcp->m_nb_mcc_records; | 5563 l_mco_size = 5 + l_tcp->m_nb_mcc_records; |
| 5622 if (l_mco_size > p_j2k->m_specific_param.m_encoder.m_header_tile_data_si
ze) { | 5564 if (l_mco_size > p_j2k->m_specific_param.m_encoder.m_header_tile_data_si
ze) { |
| 5623 | 5565 |
| 5624 OPJ_BYTE *new_header_tile_data = (OPJ_BYTE *) opj_realloc(p_j2k-
>m_specific_param.m_encoder.m_header_tile_data, l_mco_size); | 5566 OPJ_BYTE *new_header_tile_data = (OPJ_BYTE *) opj_realloc(p_j2k-
>m_specific_param.m_encoder.m_header_tile_data, l_mco_size); |
| 5625 if (! new_header_tile_data) { | 5567 if (! new_header_tile_data) { |
| 5626 opj_free(p_j2k->m_specific_param.m_encoder.m_header_tile
_data); | 5568 opj_free(p_j2k->m_specific_param.m_encoder.m_header_tile
_data); |
| 5627 p_j2k->m_specific_param.m_encoder.m_header_tile_data = N
ULL; | 5569 p_j2k->m_specific_param.m_encoder.m_header_tile_data = N
ULL; |
| 5628 p_j2k->m_specific_param.m_encoder.m_header_tile_data_siz
e = 0; | 5570 p_j2k->m_specific_param.m_encoder.m_header_tile_data_siz
e = 0; |
| 5629 opj_event_msg(p_manager, EVT_ERROR, "Not enough memory t
o write MCO marker\n"); | 5571 opj_event_msg(p_manager, EVT_ERROR, "Not enough memory t
o write MCO marker\n"); |
| 5630 return OPJ_FALSE; | 5572 return OPJ_FALSE; |
| 5631 } | 5573 } |
| 5632 p_j2k->m_specific_param.m_encoder.m_header_tile_data = new_heade
r_tile_data; | 5574 p_j2k->m_specific_param.m_encoder.m_header_tile_data = new_heade
r_tile_data; |
| 5633 p_j2k->m_specific_param.m_encoder.m_header_tile_data_size = l_mc
o_size; | 5575 p_j2k->m_specific_param.m_encoder.m_header_tile_data_size = l_mc
o_size; |
| 5634 } | 5576 } |
| 5577 l_current_data = p_j2k->m_specific_param.m_encoder.m_header_tile_data; |
| 5578 |
| 5635 | 5579 |
| 5636 opj_write_bytes(l_current_data,J2K_MS_MCO,2); /* MCO *
/ | 5580 opj_write_bytes(l_current_data,J2K_MS_MCO,2); /* MCO *
/ |
| 5637 l_current_data += 2; | 5581 l_current_data += 2; |
| 5638 | 5582 |
| 5639 opj_write_bytes(l_current_data,l_mco_size-2,2); /* Lmco
*/ | 5583 opj_write_bytes(l_current_data,l_mco_size-2,2); /* Lmco
*/ |
| 5640 l_current_data += 2; | 5584 l_current_data += 2; |
| 5641 | 5585 |
| 5642 opj_write_bytes(l_current_data,l_tcp->m_nb_mcc_records,1); /* Nmco
: only one tranform stage*/ | 5586 opj_write_bytes(l_current_data,l_tcp->m_nb_mcc_records,1); /* Nmco
: only one transform stage*/ |
| 5643 ++l_current_data; | 5587 ++l_current_data; |
| 5644 | 5588 |
| 5645 l_mcc_record = l_tcp->m_mcc_records; | 5589 l_mcc_record = l_tcp->m_mcc_records; |
| 5646 for (i=0;i<l_tcp->m_nb_mcc_records;++i) { | 5590 for (i=0;i<l_tcp->m_nb_mcc_records;++i) { |
| 5647 opj_write_bytes(l_current_data,l_mcc_record->m_index,1);/* Imco
-> use the mcc indicated by 1*/ | 5591 opj_write_bytes(l_current_data,l_mcc_record->m_index,1);/* Imco
-> use the mcc indicated by 1*/ |
| 5648 ++l_current_data; | 5592 ++l_current_data; |
| 5649 | |
| 5650 ++l_mcc_record; | 5593 ++l_mcc_record; |
| 5651 } | 5594 } |
| 5652 | 5595 |
| 5653 if (opj_stream_write_data(p_stream,p_j2k->m_specific_param.m_encoder.m_h
eader_tile_data,l_mco_size,p_manager) != l_mco_size) { | 5596 if (opj_stream_write_data(p_stream,p_j2k->m_specific_param.m_encoder.m_h
eader_tile_data,l_mco_size,p_manager) != l_mco_size) { |
| 5654 return OPJ_FALSE; | 5597 return OPJ_FALSE; |
| 5655 } | 5598 } |
| 5656 | 5599 |
| 5657 return OPJ_TRUE; | 5600 return OPJ_TRUE; |
| 5658 } | 5601 } |
| 5659 | 5602 |
| (...skipping 25 matching lines...) Expand all Loading... |
| 5685 l_image = p_j2k->m_private_image; | 5628 l_image = p_j2k->m_private_image; |
| 5686 l_tcp = p_j2k->m_specific_param.m_decoder.m_state == J2K_STATE_TPH ? | 5629 l_tcp = p_j2k->m_specific_param.m_decoder.m_state == J2K_STATE_TPH ? |
| 5687 &p_j2k->m_cp.tcps[p_j2k->m_current_tile_number] : | 5630 &p_j2k->m_cp.tcps[p_j2k->m_current_tile_number] : |
| 5688 p_j2k->m_specific_param.m_decoder.m_default_tcp; | 5631 p_j2k->m_specific_param.m_decoder.m_default_tcp; |
| 5689 | 5632 |
| 5690 if (p_header_size < 1) { | 5633 if (p_header_size < 1) { |
| 5691 opj_event_msg(p_manager, EVT_ERROR, "Error reading MCO marker\n"
); | 5634 opj_event_msg(p_manager, EVT_ERROR, "Error reading MCO marker\n"
); |
| 5692 return OPJ_FALSE; | 5635 return OPJ_FALSE; |
| 5693 } | 5636 } |
| 5694 | 5637 |
| 5695 opj_read_bytes(p_header_data,&l_nb_stages,1);
/* Nmco : only one tranform stage*/ | 5638 opj_read_bytes(p_header_data,&l_nb_stages,1);
/* Nmco : only one transform stage*/ |
| 5696 ++p_header_data; | 5639 ++p_header_data; |
| 5697 | 5640 |
| 5698 if (l_nb_stages > 1) { | 5641 if (l_nb_stages > 1) { |
| 5699 opj_event_msg(p_manager, EVT_WARNING, "Cannot take in charge mul
tiple transformation stages.\n"); | 5642 opj_event_msg(p_manager, EVT_WARNING, "Cannot take in charge mul
tiple transformation stages.\n"); |
| 5700 return OPJ_TRUE; | 5643 return OPJ_TRUE; |
| 5701 } | 5644 } |
| 5702 | 5645 |
| 5703 if (p_header_size != l_nb_stages + 1) { | 5646 if (p_header_size != l_nb_stages + 1) { |
| 5704 opj_event_msg(p_manager, EVT_WARNING, "Error reading MCO marker\
n"); | 5647 opj_event_msg(p_manager, EVT_WARNING, "Error reading MCO marker\
n"); |
| 5705 return OPJ_FALSE; | 5648 return OPJ_FALSE; |
| (...skipping 16 matching lines...) Expand all Loading... |
| 5722 ++p_header_data; | 5665 ++p_header_data; |
| 5723 | 5666 |
| 5724 if (! opj_j2k_add_mct(l_tcp,p_j2k->m_private_image,l_tmp)) { | 5667 if (! opj_j2k_add_mct(l_tcp,p_j2k->m_private_image,l_tmp)) { |
| 5725 return OPJ_FALSE; | 5668 return OPJ_FALSE; |
| 5726 } | 5669 } |
| 5727 } | 5670 } |
| 5728 | 5671 |
| 5729 return OPJ_TRUE; | 5672 return OPJ_TRUE; |
| 5730 } | 5673 } |
| 5731 | 5674 |
| 5732 OPJ_BOOL opj_j2k_add_mct(opj_tcp_t * p_tcp, opj_image_t * p_image, OPJ_UINT32 p_
index) | 5675 static OPJ_BOOL opj_j2k_add_mct(opj_tcp_t * p_tcp, opj_image_t * p_image, OPJ_UI
NT32 p_index) |
| 5733 { | 5676 { |
| 5734 OPJ_UINT32 i; | 5677 OPJ_UINT32 i; |
| 5735 opj_simple_mcc_decorrelation_data_t * l_mcc_record; | 5678 opj_simple_mcc_decorrelation_data_t * l_mcc_record; |
| 5736 opj_mct_data_t * l_deco_array, * l_offset_array; | 5679 opj_mct_data_t * l_deco_array, * l_offset_array; |
| 5737 OPJ_UINT32 l_data_size,l_mct_size, l_offset_size; | 5680 OPJ_UINT32 l_data_size,l_mct_size, l_offset_size; |
| 5738 OPJ_UINT32 l_nb_elem; | 5681 OPJ_UINT32 l_nb_elem; |
| 5739 OPJ_UINT32 * l_offset_data, * l_current_offset_data; | 5682 OPJ_UINT32 * l_offset_data, * l_current_offset_data; |
| 5740 opj_tccp_t * l_tccp; | 5683 opj_tccp_t * l_tccp; |
| 5741 | 5684 |
| 5742 /* preconditions */ | 5685 /* preconditions */ |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5804 l_tccp->m_dc_level_shift = (OPJ_INT32)*(l_current_offset
_data++); | 5747 l_tccp->m_dc_level_shift = (OPJ_INT32)*(l_current_offset
_data++); |
| 5805 ++l_tccp; | 5748 ++l_tccp; |
| 5806 } | 5749 } |
| 5807 | 5750 |
| 5808 opj_free(l_offset_data); | 5751 opj_free(l_offset_data); |
| 5809 } | 5752 } |
| 5810 | 5753 |
| 5811 return OPJ_TRUE; | 5754 return OPJ_TRUE; |
| 5812 } | 5755 } |
| 5813 | 5756 |
| 5814 OPJ_BOOL opj_j2k_write_cbd( opj_j2k_t *p_j2k, | 5757 static OPJ_BOOL opj_j2k_write_cbd( opj_j2k_t *p_j2k, |
| 5815 struct opj_stream_private *p_str
eam, | 5758 struct opj_stream_private *p_str
eam, |
| 5816 struct opj_event_mgr * p_manager
) | 5759 struct opj_event_mgr * p_manager
) |
| 5817 { | 5760 { |
| 5818 OPJ_UINT32 i; | 5761 OPJ_UINT32 i; |
| 5819 OPJ_UINT32 l_cbd_size; | 5762 OPJ_UINT32 l_cbd_size; |
| 5820 OPJ_BYTE * l_current_data = 00; | 5763 OPJ_BYTE * l_current_data = 00; |
| 5821 opj_image_t *l_image = 00; | 5764 opj_image_t *l_image = 00; |
| 5822 opj_image_comp_t * l_comp = 00; | 5765 opj_image_comp_t * l_comp = 00; |
| 5823 | 5766 |
| 5824 /* preconditions */ | 5767 /* preconditions */ |
| (...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5970 /* execution list creation*/ | 5913 /* execution list creation*/ |
| 5971 l_j2k->m_procedure_list = opj_procedure_list_create(); | 5914 l_j2k->m_procedure_list = opj_procedure_list_create(); |
| 5972 if (! l_j2k->m_procedure_list) { | 5915 if (! l_j2k->m_procedure_list) { |
| 5973 opj_j2k_destroy(l_j2k); | 5916 opj_j2k_destroy(l_j2k); |
| 5974 return NULL; | 5917 return NULL; |
| 5975 } | 5918 } |
| 5976 | 5919 |
| 5977 return l_j2k; | 5920 return l_j2k; |
| 5978 } | 5921 } |
| 5979 | 5922 |
| 5980 int opj_j2k_initialise_4K_poc(opj_poc_t *POC, int numres){ | 5923 static int opj_j2k_initialise_4K_poc(opj_poc_t *POC, int numres){ |
| 5981 POC[0].tile = 1; | 5924 POC[0].tile = 1; |
| 5982 POC[0].resno0 = 0; | 5925 POC[0].resno0 = 0; |
| 5983 POC[0].compno0 = 0; | 5926 POC[0].compno0 = 0; |
| 5984 POC[0].layno1 = 1; | 5927 POC[0].layno1 = 1; |
| 5985 POC[0].resno1 = (OPJ_UINT32)(numres-1); | 5928 POC[0].resno1 = (OPJ_UINT32)(numres-1); |
| 5986 POC[0].compno1 = 3; | 5929 POC[0].compno1 = 3; |
| 5987 POC[0].prg1 = OPJ_CPRL; | 5930 POC[0].prg1 = OPJ_CPRL; |
| 5988 POC[1].tile = 1; | 5931 POC[1].tile = 1; |
| 5989 POC[1].resno0 = (OPJ_UINT32)(numres-1); | 5932 POC[1].resno0 = (OPJ_UINT32)(numres-1); |
| 5990 POC[1].compno0 = 0; | 5933 POC[1].compno0 = 0; |
| 5991 POC[1].layno1 = 1; | 5934 POC[1].layno1 = 1; |
| 5992 POC[1].resno1 = (OPJ_UINT32)numres; | 5935 POC[1].resno1 = (OPJ_UINT32)numres; |
| 5993 POC[1].compno1 = 3; | 5936 POC[1].compno1 = 3; |
| 5994 POC[1].prg1 = OPJ_CPRL; | 5937 POC[1].prg1 = OPJ_CPRL; |
| 5995 return 2; | 5938 return 2; |
| 5996 } | 5939 } |
| 5997 | 5940 |
| 5998 void opj_j2k_set_cinema_parameters(opj_cparameters_t *parameters, opj_image_t *i
mage, opj_event_mgr_t *p_manager) | 5941 static void opj_j2k_set_cinema_parameters(opj_cparameters_t *parameters, opj_ima
ge_t *image, opj_event_mgr_t *p_manager) |
| 5999 { | 5942 { |
| 6000 /* Configure cinema parameters */ | 5943 /* Configure cinema parameters */ |
| 6001 int i; | 5944 int i; |
| 6002 | 5945 |
| 6003 /* No tiling */ | 5946 /* No tiling */ |
| 6004 parameters->tile_size_on = OPJ_FALSE; | 5947 parameters->tile_size_on = OPJ_FALSE; |
| 6005 parameters->cp_tdx=1; | 5948 parameters->cp_tdx=1; |
| 6006 parameters->cp_tdy=1; | 5949 parameters->cp_tdy=1; |
| 6007 | 5950 |
| 6008 /* One tile part for each component */ | 5951 /* One tile part for each component */ |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6125 "Maximum 1041666 compressed bytes @ 24fps\n" | 6068 "Maximum 1041666 compressed bytes @ 24fps\n" |
| 6126 "-> Specified rate exceeds this limit. Rate will be forced
to 1041666 bytes.\n"); | 6069 "-> Specified rate exceeds this limit. Rate will be forced
to 1041666 bytes.\n"); |
| 6127 parameters->max_comp_size = OPJ_CINEMA_24_COMP; | 6070 parameters->max_comp_size = OPJ_CINEMA_24_COMP; |
| 6128 } | 6071 } |
| 6129 | 6072 |
| 6130 parameters->tcp_rates[0] = (OPJ_FLOAT32) (image->numcomps * image->comps[0].
w * image->comps[0].h * image->comps[0].prec)/ | 6073 parameters->tcp_rates[0] = (OPJ_FLOAT32) (image->numcomps * image->comps[0].
w * image->comps[0].h * image->comps[0].prec)/ |
| 6131 (OPJ_FLOAT32)(((OPJ_UINT32)parameters->max_cs_size) * 8 * image->com
ps[0].dx * image->comps[0].dy); | 6074 (OPJ_FLOAT32)(((OPJ_UINT32)parameters->max_cs_size) * 8 * image->com
ps[0].dx * image->comps[0].dy); |
| 6132 | 6075 |
| 6133 } | 6076 } |
| 6134 | 6077 |
| 6135 OPJ_BOOL opj_j2k_is_cinema_compliant(opj_image_t *image, OPJ_UINT16 rsiz, opj_ev
ent_mgr_t *p_manager) | 6078 static OPJ_BOOL opj_j2k_is_cinema_compliant(opj_image_t *image, OPJ_UINT16 rsiz,
opj_event_mgr_t *p_manager) |
| 6136 { | 6079 { |
| 6137 OPJ_UINT32 i; | 6080 OPJ_UINT32 i; |
| 6138 | 6081 |
| 6139 /* Number of components */ | 6082 /* Number of components */ |
| 6140 if (image->numcomps != 3){ | 6083 if (image->numcomps != 3){ |
| 6141 opj_event_msg(p_manager, EVT_WARNING, | 6084 opj_event_msg(p_manager, EVT_WARNING, |
| 6142 "JPEG 2000 Profile-3 (2k dc profile) requires:\n" | 6085 "JPEG 2000 Profile-3 (2k dc profile) requires:\n" |
| 6143 "3 components" | 6086 "3 components" |
| 6144 "-> Number of components of input image (%d) is not compliant\n" | 6087 "-> Number of components of input image (%d) is not compliant\n" |
| 6145 "-> Non-profile-3 codestream will be generated\n", | 6088 "-> Non-profile-3 codestream will be generated\n", |
| (...skipping 644 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6790 assert(p_stream != 00); | 6733 assert(p_stream != 00); |
| 6791 assert(p_manager != 00); | 6734 assert(p_manager != 00); |
| 6792 | 6735 |
| 6793 /* create an empty image header */ | 6736 /* create an empty image header */ |
| 6794 p_j2k->m_private_image = opj_image_create0(); | 6737 p_j2k->m_private_image = opj_image_create0(); |
| 6795 if (! p_j2k->m_private_image) { | 6738 if (! p_j2k->m_private_image) { |
| 6796 return OPJ_FALSE; | 6739 return OPJ_FALSE; |
| 6797 } | 6740 } |
| 6798 | 6741 |
| 6799 /* customization of the validation */ | 6742 /* customization of the validation */ |
| 6800 opj_j2k_setup_decoding_validation(p_j2k); | 6743 if (! opj_j2k_setup_decoding_validation(p_j2k, p_manager)) { |
| 6744 opj_image_destroy(p_j2k->m_private_image); |
| 6745 p_j2k->m_private_image = NULL; |
| 6746 return OPJ_FALSE; |
| 6747 } |
| 6801 | 6748 |
| 6802 /* validation of the parameters codec */ | 6749 /* validation of the parameters codec */ |
| 6803 if (! opj_j2k_exec(p_j2k, p_j2k->m_validation_list, p_stream,p_manager))
{ | 6750 if (! opj_j2k_exec(p_j2k, p_j2k->m_validation_list, p_stream,p_manager))
{ |
| 6804 opj_image_destroy(p_j2k->m_private_image); | 6751 opj_image_destroy(p_j2k->m_private_image); |
| 6805 p_j2k->m_private_image = NULL; | 6752 p_j2k->m_private_image = NULL; |
| 6806 return OPJ_FALSE; | 6753 return OPJ_FALSE; |
| 6807 } | 6754 } |
| 6808 | 6755 |
| 6809 /* customization of the encoding */ | 6756 /* customization of the encoding */ |
| 6810 opj_j2k_setup_header_reading(p_j2k); | 6757 if (! opj_j2k_setup_header_reading(p_j2k, p_manager)) { |
| 6758 opj_image_destroy(p_j2k->m_private_image); |
| 6759 p_j2k->m_private_image = NULL; |
| 6760 return OPJ_FALSE; |
| 6761 } |
| 6811 | 6762 |
| 6812 /* read header */ | 6763 /* read header */ |
| 6813 if (! opj_j2k_exec (p_j2k,p_j2k->m_procedure_list,p_stream,p_manager)) { | 6764 if (! opj_j2k_exec (p_j2k,p_j2k->m_procedure_list,p_stream,p_manager)) { |
| 6814 opj_image_destroy(p_j2k->m_private_image); | 6765 opj_image_destroy(p_j2k->m_private_image); |
| 6815 p_j2k->m_private_image = NULL; | 6766 p_j2k->m_private_image = NULL; |
| 6816 return OPJ_FALSE; | 6767 return OPJ_FALSE; |
| 6817 } | 6768 } |
| 6818 | 6769 |
| 6819 *p_image = opj_image_create0(); | 6770 *p_image = opj_image_create0(); |
| 6820 if (! (*p_image)) { | 6771 if (! (*p_image)) { |
| 6821 return OPJ_FALSE; | 6772 return OPJ_FALSE; |
| 6822 } | 6773 } |
| 6823 | 6774 |
| 6824 /* Copy codestream image information to the output image */ | 6775 /* Copy codestream image information to the output image */ |
| 6825 opj_copy_image_header(p_j2k->m_private_image, *p_image); | 6776 opj_copy_image_header(p_j2k->m_private_image, *p_image); |
| 6826 | 6777 |
| 6827 /*Allocate and initialize some elements of codestrem index*/ | 6778 /*Allocate and initialize some elements of codestrem index*/ |
| 6828 if (!opj_j2k_allocate_tile_element_cstr_index(p_j2k)){ | 6779 if (!opj_j2k_allocate_tile_element_cstr_index(p_j2k)){ |
| 6829 return OPJ_FALSE; | 6780 return OPJ_FALSE; |
| 6830 } | 6781 } |
| 6831 | 6782 |
| 6832 return OPJ_TRUE; | 6783 return OPJ_TRUE; |
| 6833 } | 6784 } |
| 6834 | 6785 |
| 6835 void opj_j2k_setup_header_reading (opj_j2k_t *p_j2k) | 6786 static OPJ_BOOL opj_j2k_setup_header_reading (opj_j2k_t *p_j2k, opj_event_mgr_t
* p_manager) |
| 6836 { | 6787 { |
| 6837 /* preconditions*/ | 6788 /* preconditions*/ |
| 6838 assert(p_j2k != 00); | 6789 assert(p_j2k != 00); |
| 6790 assert(p_manager != 00); |
| 6839 | 6791 |
| 6840 opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(opj_procedure)
opj_j2k_read_header_procedure); | 6792 if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(opj_proc
edure)opj_j2k_read_header_procedure, p_manager)) { |
| 6793 return OPJ_FALSE; |
| 6794 } |
| 6841 | 6795 |
| 6842 /* DEVELOPER CORNER, add your custom procedures */ | 6796 /* DEVELOPER CORNER, add your custom procedures */ |
| 6843 opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(opj_procedure)
opj_j2k_copy_default_tcp_and_create_tcd); | 6797 if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(opj_proc
edure)opj_j2k_copy_default_tcp_and_create_tcd, p_manager)) { |
| 6844 | 6798 return OPJ_FALSE; |
| 6799 } |
| 6800 » |
| 6801 return OPJ_TRUE; |
| 6845 } | 6802 } |
| 6846 | 6803 |
| 6847 void opj_j2k_setup_decoding_validation (opj_j2k_t *p_j2k) | 6804 static OPJ_BOOL opj_j2k_setup_decoding_validation (opj_j2k_t *p_j2k, opj_event_m
gr_t * p_manager) |
| 6848 { | 6805 { |
| 6849 /* preconditions*/ | 6806 /* preconditions*/ |
| 6850 assert(p_j2k != 00); | 6807 assert(p_j2k != 00); |
| 6808 assert(p_manager != 00); |
| 6851 | 6809 |
| 6852 opj_procedure_list_add_procedure(p_j2k->m_validation_list, (opj_procedur
e)opj_j2k_build_decoder); | 6810 if (! opj_procedure_list_add_procedure(p_j2k->m_validation_list,(opj_pro
cedure)opj_j2k_build_decoder, p_manager)) { |
| 6853 opj_procedure_list_add_procedure(p_j2k->m_validation_list, (opj_procedur
e)opj_j2k_decoding_validation); | 6811 return OPJ_FALSE; |
| 6812 } |
| 6813 if (! opj_procedure_list_add_procedure(p_j2k->m_validation_list,(opj_pro
cedure)opj_j2k_decoding_validation, p_manager)) { |
| 6814 return OPJ_FALSE; |
| 6815 } |
| 6816 |
| 6854 /* DEVELOPER CORNER, add your custom validation procedure */ | 6817 /* DEVELOPER CORNER, add your custom validation procedure */ |
| 6855 | 6818 return OPJ_TRUE; |
| 6856 } | 6819 } |
| 6857 | 6820 |
| 6858 OPJ_BOOL opj_j2k_mct_validation ( opj_j2k_t * p_j2k, | 6821 static OPJ_BOOL opj_j2k_mct_validation ( opj_j2k_t * p_j2k, |
| 6859 opj_stream_priva
te_t *p_stream, | 6822 opj_stream_priva
te_t *p_stream, |
| 6860 opj_event_mgr_t
* p_manager ) | 6823 opj_event_mgr_t
* p_manager ) |
| 6861 { | 6824 { |
| 6862 OPJ_BOOL l_is_valid = OPJ_TRUE; | 6825 OPJ_BOOL l_is_valid = OPJ_TRUE; |
| 6863 OPJ_UINT32 i,j; | 6826 OPJ_UINT32 i,j; |
| 6864 | 6827 |
| 6865 /* preconditions */ | 6828 /* preconditions */ |
| 6866 assert(p_j2k != 00); | 6829 assert(p_j2k != 00); |
| 6867 assert(p_stream != 00); | 6830 assert(p_stream != 00); |
| 6868 assert(p_manager != 00); | 6831 assert(p_manager != 00); |
| (...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7034 l_mcc_data->m_decorrelation_array = l_mct_deco_data; | 6997 l_mcc_data->m_decorrelation_array = l_mct_deco_data; |
| 7035 l_mcc_data->m_is_irreversible = 1; | 6998 l_mcc_data->m_is_irreversible = 1; |
| 7036 l_mcc_data->m_nb_comps = p_image->numcomps; | 6999 l_mcc_data->m_nb_comps = p_image->numcomps; |
| 7037 l_mcc_data->m_index = l_indix++; | 7000 l_mcc_data->m_index = l_indix++; |
| 7038 l_mcc_data->m_offset_array = l_mct_offset_data; | 7001 l_mcc_data->m_offset_array = l_mct_offset_data; |
| 7039 ++p_tcp->m_nb_mcc_records; | 7002 ++p_tcp->m_nb_mcc_records; |
| 7040 | 7003 |
| 7041 return OPJ_TRUE; | 7004 return OPJ_TRUE; |
| 7042 } | 7005 } |
| 7043 | 7006 |
| 7044 OPJ_BOOL opj_j2k_build_decoder (opj_j2k_t * p_j2k, | 7007 static OPJ_BOOL opj_j2k_build_decoder (opj_j2k_t * p_j2k, |
| 7045 opj_stream_private_t
*p_stream, | 7008 opj_stream_private_t
*p_stream, |
| 7046 opj_event_mgr_t * p_
manager ) | 7009 opj_event_mgr_t * p_
manager ) |
| 7047 { | 7010 { |
| 7048 /* add here initialization of cp | 7011 /* add here initialization of cp |
| 7049 copy paste of setup_decoder */ | 7012 copy paste of setup_decoder */ |
| 7050 (void)p_j2k; | 7013 (void)p_j2k; |
| 7051 (void)p_stream; | 7014 (void)p_stream; |
| 7052 (void)p_manager; | 7015 (void)p_manager; |
| 7053 return OPJ_TRUE; | 7016 return OPJ_TRUE; |
| 7054 } | 7017 } |
| 7055 | 7018 |
| 7056 OPJ_BOOL opj_j2k_build_encoder (opj_j2k_t * p_j2k, | 7019 static OPJ_BOOL opj_j2k_build_encoder (opj_j2k_t * p_j2k, |
| 7057 opj_stream_private_t *p_
stream, | 7020 opj_stream_private_t *p_
stream, |
| 7058 opj_event_mgr_t * p_mana
ger ) | 7021 opj_event_mgr_t * p_mana
ger ) |
| 7059 { | 7022 { |
| 7060 /* add here initialization of cp | 7023 /* add here initialization of cp |
| 7061 copy paste of setup_encoder */ | 7024 copy paste of setup_encoder */ |
| 7062 (void)p_j2k; | 7025 (void)p_j2k; |
| 7063 (void)p_stream; | 7026 (void)p_stream; |
| 7064 (void)p_manager; | 7027 (void)p_manager; |
| 7065 return OPJ_TRUE; | 7028 return OPJ_TRUE; |
| 7066 } | 7029 } |
| 7067 | 7030 |
| 7068 OPJ_BOOL opj_j2k_encoding_validation ( opj_j2k_t * p_j2k, | 7031 static OPJ_BOOL opj_j2k_encoding_validation ( opj_j2k_t * p_j2k, |
| 7069 opj_
stream_private_t *p_stream, | 7032 opj_
stream_private_t *p_stream, |
| 7070 opj_
event_mgr_t * p_manager ) | 7033 opj_
event_mgr_t * p_manager ) |
| 7071 { | 7034 { |
| 7072 OPJ_BOOL l_is_valid = OPJ_TRUE; | 7035 OPJ_BOOL l_is_valid = OPJ_TRUE; |
| 7073 | 7036 |
| 7074 /* preconditions */ | 7037 /* preconditions */ |
| 7075 assert(p_j2k != 00); | 7038 assert(p_j2k != 00); |
| 7076 assert(p_stream != 00); | 7039 assert(p_stream != 00); |
| 7077 assert(p_manager != 00); | 7040 assert(p_manager != 00); |
| 7078 | 7041 |
| (...skipping 22 matching lines...) Expand all Loading... |
| 7101 | 7064 |
| 7102 if ((p_j2k->m_cp.tdy) < (OPJ_UINT32) (1 << (p_j2k->m_cp.tcps->tccps->num
resolutions - 1U))) { | 7065 if ((p_j2k->m_cp.tdy) < (OPJ_UINT32) (1 << (p_j2k->m_cp.tcps->tccps->num
resolutions - 1U))) { |
| 7103 opj_event_msg(p_manager, EVT_ERROR, "Number of resolutions is to
o high in comparison to the size of tiles\n"); | 7066 opj_event_msg(p_manager, EVT_ERROR, "Number of resolutions is to
o high in comparison to the size of tiles\n"); |
| 7104 return OPJ_FALSE; | 7067 return OPJ_FALSE; |
| 7105 } | 7068 } |
| 7106 | 7069 |
| 7107 /* PARAMETER VALIDATION */ | 7070 /* PARAMETER VALIDATION */ |
| 7108 return l_is_valid; | 7071 return l_is_valid; |
| 7109 } | 7072 } |
| 7110 | 7073 |
| 7111 OPJ_BOOL opj_j2k_decoding_validation ( opj_j2k_t *p_j2k, | 7074 static OPJ_BOOL opj_j2k_decoding_validation ( opj_j2k_t *p_j2k, |
| 7112 opj_stream_private_t *p_stream, | 7075 opj_stream_private_t *p_stream, |
| 7113 opj_event_mgr_t * p_manager | 7076 opj_event_mgr_t * p_manager |
| 7114 ) | 7077 ) |
| 7115 { | 7078 { |
| 7116 OPJ_BOOL l_is_valid = OPJ_TRUE; | 7079 OPJ_BOOL l_is_valid = OPJ_TRUE; |
| 7117 | 7080 |
| 7118 /* preconditions*/ | 7081 /* preconditions*/ |
| 7119 assert(p_j2k != 00); | 7082 assert(p_j2k != 00); |
| 7120 assert(p_stream != 00); | 7083 assert(p_stream != 00); |
| 7121 assert(p_manager != 00); | 7084 assert(p_manager != 00); |
| 7122 | 7085 |
| 7123 /* STATE checking */ | 7086 /* STATE checking */ |
| 7124 /* make sure the state is at 0 */ | 7087 /* make sure the state is at 0 */ |
| 7125 #ifdef TODO_MSD | 7088 #ifdef TODO_MSD |
| 7126 l_is_valid &= (p_j2k->m_specific_param.m_decoder.m_state == J2K_DEC_STAT
E_NONE); | 7089 l_is_valid &= (p_j2k->m_specific_param.m_decoder.m_state == J2K_DEC_STAT
E_NONE); |
| 7127 #endif | 7090 #endif |
| 7128 l_is_valid &= (p_j2k->m_specific_param.m_decoder.m_state == 0x0000); | 7091 l_is_valid &= (p_j2k->m_specific_param.m_decoder.m_state == 0x0000); |
| 7129 | 7092 |
| 7130 /* POINTER validation */ | 7093 /* POINTER validation */ |
| 7131 /* make sure a p_j2k codec is present */ | 7094 /* make sure a p_j2k codec is present */ |
| 7132 /* make sure a procedure list is present */ | 7095 /* make sure a procedure list is present */ |
| 7133 l_is_valid &= (p_j2k->m_procedure_list != 00); | 7096 l_is_valid &= (p_j2k->m_procedure_list != 00); |
| 7134 /* make sure a validation list is present */ | 7097 /* make sure a validation list is present */ |
| 7135 l_is_valid &= (p_j2k->m_validation_list != 00); | 7098 l_is_valid &= (p_j2k->m_validation_list != 00); |
| 7136 | 7099 |
| 7137 /* PARAMETER VALIDATION */ | 7100 /* PARAMETER VALIDATION */ |
| 7138 return l_is_valid; | 7101 return l_is_valid; |
| 7139 } | 7102 } |
| 7140 | 7103 |
| 7141 OPJ_BOOL opj_j2k_read_header_procedure( opj_j2k_t *p_j2k, | 7104 static OPJ_BOOL opj_j2k_read_header_procedure( opj_j2k_t *p_j2k, |
| 7142 opj_
stream_private_t *p_stream, | 7105 opj_
stream_private_t *p_stream, |
| 7143 opj_
event_mgr_t * p_manager) | 7106 opj_
event_mgr_t * p_manager) |
| 7144 { | 7107 { |
| 7145 OPJ_UINT32 l_current_marker; | 7108 OPJ_UINT32 l_current_marker; |
| 7146 OPJ_UINT32 l_marker_size; | 7109 OPJ_UINT32 l_marker_size; |
| 7147 const opj_dec_memory_marker_handler_t * l_marker_handler = 00; | 7110 const opj_dec_memory_marker_handler_t * l_marker_handler = 00; |
| 7148 OPJ_BOOL l_has_siz = 0; | 7111 OPJ_BOOL l_has_siz = 0; |
| 7149 OPJ_BOOL l_has_cod = 0; | 7112 OPJ_BOOL l_has_cod = 0; |
| 7150 OPJ_BOOL l_has_qcd = 0; | 7113 OPJ_BOOL l_has_qcd = 0; |
| 7151 | 7114 |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7277 return OPJ_FALSE; | 7240 return OPJ_FALSE; |
| 7278 } | 7241 } |
| 7279 if (l_has_cod == 0) { | 7242 if (l_has_cod == 0) { |
| 7280 opj_event_msg(p_manager, EVT_ERROR, "required COD marker not found i
n main header\n"); | 7243 opj_event_msg(p_manager, EVT_ERROR, "required COD marker not found i
n main header\n"); |
| 7281 return OPJ_FALSE; | 7244 return OPJ_FALSE; |
| 7282 } | 7245 } |
| 7283 if (l_has_qcd == 0) { | 7246 if (l_has_qcd == 0) { |
| 7284 opj_event_msg(p_manager, EVT_ERROR, "required QCD marker not found i
n main header\n"); | 7247 opj_event_msg(p_manager, EVT_ERROR, "required QCD marker not found i
n main header\n"); |
| 7285 return OPJ_FALSE; | 7248 return OPJ_FALSE; |
| 7286 } | 7249 } |
| 7250 |
| 7251 if (! opj_j2k_merge_ppm(&(p_j2k->m_cp), p_manager)) { |
| 7252 opj_event_msg(p_manager, EVT_ERROR, "Failed to merge PPM data\n"); |
| 7253 return OPJ_FALSE; |
| 7254 } |
| 7287 | 7255 |
| 7288 opj_event_msg(p_manager, EVT_INFO, "Main header has been correctly decod
ed.\n"); | 7256 opj_event_msg(p_manager, EVT_INFO, "Main header has been correctly decod
ed.\n"); |
| 7289 | 7257 |
| 7290 /* Position of the last element if the main header */ | 7258 /* Position of the last element if the main header */ |
| 7291 p_j2k->cstr_index->main_head_end = (OPJ_UINT32) opj_stream_tell(p_stream
) - 2; | 7259 p_j2k->cstr_index->main_head_end = (OPJ_UINT32) opj_stream_tell(p_stream
) - 2; |
| 7292 | 7260 |
| 7293 /* Next step: read a tile-part header */ | 7261 /* Next step: read a tile-part header */ |
| 7294 p_j2k->m_specific_param.m_decoder.m_state = J2K_STATE_TPHSOT; | 7262 p_j2k->m_specific_param.m_decoder.m_state = J2K_STATE_TPHSOT; |
| 7295 | 7263 |
| 7296 return OPJ_TRUE; | 7264 return OPJ_TRUE; |
| 7297 } | 7265 } |
| 7298 | 7266 |
| 7299 OPJ_BOOL opj_j2k_exec ( opj_j2k_t * p_j2k, | 7267 static OPJ_BOOL opj_j2k_exec ( opj_j2k_t * p_j2k, |
| 7300 opj_procedure_list_t * p_procedure_list, | 7268 opj_procedure_list_t * p_procedure_list, |
| 7301 opj_stream_private_t *p_stream, | 7269 opj_stream_private_t *p_stream, |
| 7302 opj_event_mgr_t * p_manager ) | 7270 opj_event_mgr_t * p_manager ) |
| 7303 { | 7271 { |
| 7304 OPJ_BOOL (** l_procedure) (opj_j2k_t * ,opj_stream_private_t *,opj_event
_mgr_t *) = 00; | 7272 OPJ_BOOL (** l_procedure) (opj_j2k_t * ,opj_stream_private_t *,opj_event
_mgr_t *) = 00; |
| 7305 OPJ_BOOL l_result = OPJ_TRUE; | 7273 OPJ_BOOL l_result = OPJ_TRUE; |
| 7306 OPJ_UINT32 l_nb_proc, i; | 7274 OPJ_UINT32 l_nb_proc, i; |
| 7307 | 7275 |
| 7308 /* preconditions*/ | 7276 /* preconditions*/ |
| 7309 assert(p_procedure_list != 00); | 7277 assert(p_procedure_list != 00); |
| (...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7457 if ( !opj_tcd_init(p_j2k->m_tcd, l_image, &(p_j2k->m_cp)) ) { | 7425 if ( !opj_tcd_init(p_j2k->m_tcd, l_image, &(p_j2k->m_cp)) ) { |
| 7458 opj_tcd_destroy(p_j2k->m_tcd); | 7426 opj_tcd_destroy(p_j2k->m_tcd); |
| 7459 p_j2k->m_tcd = 00; | 7427 p_j2k->m_tcd = 00; |
| 7460 opj_event_msg(p_manager, EVT_ERROR, "Cannot decode tile, memory
error\n"); | 7428 opj_event_msg(p_manager, EVT_ERROR, "Cannot decode tile, memory
error\n"); |
| 7461 return OPJ_FALSE; | 7429 return OPJ_FALSE; |
| 7462 } | 7430 } |
| 7463 | 7431 |
| 7464 return OPJ_TRUE; | 7432 return OPJ_TRUE; |
| 7465 } | 7433 } |
| 7466 | 7434 |
| 7467 const opj_dec_memory_marker_handler_t * opj_j2k_get_marker_handler (OPJ_UINT32 p
_id) | 7435 static const opj_dec_memory_marker_handler_t * opj_j2k_get_marker_handler (OPJ_U
INT32 p_id) |
| 7468 { | 7436 { |
| 7469 const opj_dec_memory_marker_handler_t *e; | 7437 const opj_dec_memory_marker_handler_t *e; |
| 7470 for (e = j2k_memory_marker_handler_tab; e->id != 0; ++e) { | 7438 for (e = j2k_memory_marker_handler_tab; e->id != 0; ++e) { |
| 7471 if (e->id == p_id) { | 7439 if (e->id == p_id) { |
| 7472 break; /* we find a handler corresponding to the marker
ID*/ | 7440 break; /* we find a handler corresponding to the marker
ID*/ |
| 7473 } | 7441 } |
| 7474 } | 7442 } |
| 7475 return e; | 7443 return e; |
| 7476 } | 7444 } |
| 7477 | 7445 |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7570 } | 7538 } |
| 7571 | 7539 |
| 7572 opj_free( p_cstr_ind->tile_index); | 7540 opj_free( p_cstr_ind->tile_index); |
| 7573 p_cstr_ind->tile_index = NULL; | 7541 p_cstr_ind->tile_index = NULL; |
| 7574 } | 7542 } |
| 7575 | 7543 |
| 7576 opj_free(p_cstr_ind); | 7544 opj_free(p_cstr_ind); |
| 7577 } | 7545 } |
| 7578 } | 7546 } |
| 7579 | 7547 |
| 7580 void opj_j2k_tcp_destroy (opj_tcp_t *p_tcp) | 7548 static void opj_j2k_tcp_destroy (opj_tcp_t *p_tcp) |
| 7581 { | 7549 { |
| 7582 if (p_tcp == 00) { | 7550 » if (p_tcp == 00) { |
| 7583 return; | 7551 » » return; |
| 7584 } | 7552 » } |
| 7553 » |
| 7554 » if (p_tcp->ppt_markers != 00) { |
| 7555 » » OPJ_UINT32 i; |
| 7556 » » for (i = 0U; i < p_tcp->ppt_markers_count; ++i) { |
| 7557 » » » if (p_tcp->ppt_markers[i].m_data != NULL) { |
| 7558 » » » » opj_free(p_tcp->ppt_markers[i].m_data); |
| 7559 » » » } |
| 7560 » » } |
| 7561 » » p_tcp->ppt_markers_count = 0U; |
| 7562 » » opj_free(p_tcp->ppt_markers); |
| 7563 » » p_tcp->ppt_markers = NULL; |
| 7564 » } |
| 7565 » |
| 7566 » if (p_tcp->ppt_buffer != 00) { |
| 7567 » » opj_free(p_tcp->ppt_buffer); |
| 7568 » » p_tcp->ppt_buffer = 00; |
| 7569 » } |
| 7570 » |
| 7571 » if (p_tcp->tccps != 00) { |
| 7572 » » opj_free(p_tcp->tccps); |
| 7573 » » p_tcp->tccps = 00; |
| 7574 » } |
| 7575 » |
| 7576 » if (p_tcp->m_mct_coding_matrix != 00) { |
| 7577 » » opj_free(p_tcp->m_mct_coding_matrix); |
| 7578 » » p_tcp->m_mct_coding_matrix = 00; |
| 7579 » } |
| 7580 » |
| 7581 » if (p_tcp->m_mct_decoding_matrix != 00) { |
| 7582 » » opj_free(p_tcp->m_mct_decoding_matrix); |
| 7583 » » p_tcp->m_mct_decoding_matrix = 00; |
| 7584 » } |
| 7585 » |
| 7586 » if (p_tcp->m_mcc_records) { |
| 7587 » » opj_free(p_tcp->m_mcc_records); |
| 7588 » » p_tcp->m_mcc_records = 00; |
| 7589 » » p_tcp->m_nb_max_mcc_records = 0; |
| 7590 » » p_tcp->m_nb_mcc_records = 0; |
| 7591 » } |
| 7592 » |
| 7593 » if (p_tcp->m_mct_records) { |
| 7594 » » opj_mct_data_t * l_mct_data = p_tcp->m_mct_records; |
| 7595 » » OPJ_UINT32 i; |
| 7596 » » |
| 7597 » » for (i=0;i<p_tcp->m_nb_mct_records;++i) { |
| 7598 » » » if (l_mct_data->m_data) { |
| 7599 » » » » opj_free(l_mct_data->m_data); |
| 7600 » » » » l_mct_data->m_data = 00; |
| 7601 » » » } |
| 7602 » » » |
| 7603 » » » ++l_mct_data; |
| 7604 » » } |
| 7605 » » |
| 7606 » » opj_free(p_tcp->m_mct_records); |
| 7607 » » p_tcp->m_mct_records = 00; |
| 7608 » } |
| 7585 | 7609 |
| 7586 if (p_tcp->ppt_buffer != 00) { | 7610 » if (p_tcp->mct_norms != 00) { |
| 7587 opj_free(p_tcp->ppt_buffer); | 7611 » » opj_free(p_tcp->mct_norms); |
| 7588 p_tcp->ppt_buffer = 00; | 7612 » » p_tcp->mct_norms = 00; |
| 7589 } | 7613 » } |
| 7590 | 7614 |
| 7591 if (p_tcp->tccps != 00) { | 7615 » opj_j2k_tcp_data_destroy(p_tcp); |
| 7592 opj_free(p_tcp->tccps); | |
| 7593 p_tcp->tccps = 00; | |
| 7594 } | |
| 7595 | |
| 7596 if (p_tcp->m_mct_coding_matrix != 00) { | |
| 7597 opj_free(p_tcp->m_mct_coding_matrix); | |
| 7598 p_tcp->m_mct_coding_matrix = 00; | |
| 7599 } | |
| 7600 | |
| 7601 if (p_tcp->m_mct_decoding_matrix != 00) { | |
| 7602 opj_free(p_tcp->m_mct_decoding_matrix); | |
| 7603 p_tcp->m_mct_decoding_matrix = 00; | |
| 7604 } | |
| 7605 | |
| 7606 if (p_tcp->m_mcc_records) { | |
| 7607 opj_free(p_tcp->m_mcc_records); | |
| 7608 p_tcp->m_mcc_records = 00; | |
| 7609 p_tcp->m_nb_max_mcc_records = 0; | |
| 7610 p_tcp->m_nb_mcc_records = 0; | |
| 7611 } | |
| 7612 | |
| 7613 if (p_tcp->m_mct_records) { | |
| 7614 opj_mct_data_t * l_mct_data = p_tcp->m_mct_records; | |
| 7615 OPJ_UINT32 i; | |
| 7616 | |
| 7617 for (i=0;i<p_tcp->m_nb_mct_records;++i) { | |
| 7618 if (l_mct_data->m_data) { | |
| 7619 opj_free(l_mct_data->m_data); | |
| 7620 l_mct_data->m_data = 00; | |
| 7621 } | |
| 7622 | |
| 7623 ++l_mct_data; | |
| 7624 } | |
| 7625 | |
| 7626 opj_free(p_tcp->m_mct_records); | |
| 7627 p_tcp->m_mct_records = 00; | |
| 7628 } | |
| 7629 | |
| 7630 if (p_tcp->mct_norms != 00) { | |
| 7631 opj_free(p_tcp->mct_norms); | |
| 7632 p_tcp->mct_norms = 00; | |
| 7633 } | |
| 7634 | |
| 7635 opj_j2k_tcp_data_destroy(p_tcp); | |
| 7636 | 7616 |
| 7637 } | 7617 } |
| 7638 | 7618 |
| 7639 void opj_j2k_tcp_data_destroy (opj_tcp_t *p_tcp) | 7619 static void opj_j2k_tcp_data_destroy (opj_tcp_t *p_tcp) |
| 7640 { | 7620 { |
| 7641 if (p_tcp->m_data) { | 7621 if (p_tcp->m_data) { |
| 7642 opj_free(p_tcp->m_data); | 7622 opj_free(p_tcp->m_data); |
| 7643 p_tcp->m_data = NULL; | 7623 p_tcp->m_data = NULL; |
| 7644 p_tcp->m_data_size = 0; | 7624 p_tcp->m_data_size = 0; |
| 7645 } | 7625 } |
| 7646 } | 7626 } |
| 7647 | 7627 |
| 7648 void opj_j2k_cp_destroy (opj_cp_t *p_cp) | 7628 static void opj_j2k_cp_destroy (opj_cp_t *p_cp) |
| 7649 { | 7629 { |
| 7650 OPJ_UINT32 l_nb_tiles; | 7630 » OPJ_UINT32 l_nb_tiles; |
| 7651 opj_tcp_t * l_current_tile = 00; | 7631 » opj_tcp_t * l_current_tile = 00; |
| 7652 OPJ_UINT32 i; | |
| 7653 | 7632 |
| 7654 if (p_cp == 00) | 7633 » if (p_cp == 00) |
| 7655 { | 7634 » { |
| 7656 return; | 7635 » » return; |
| 7657 } | 7636 » } |
| 7658 if (p_cp->tcps != 00) | 7637 » if (p_cp->tcps != 00) |
| 7659 { | 7638 » { |
| 7660 l_current_tile = p_cp->tcps; | 7639 » » OPJ_UINT32 i; |
| 7661 l_nb_tiles = p_cp->th * p_cp->tw; | 7640 » » l_current_tile = p_cp->tcps; |
| 7641 » » l_nb_tiles = p_cp->th * p_cp->tw; |
| 7642 » » |
| 7643 » » for (i = 0U; i < l_nb_tiles; ++i) |
| 7644 » » { |
| 7645 » » » opj_j2k_tcp_destroy(l_current_tile); |
| 7646 » » » ++l_current_tile; |
| 7647 » » } |
| 7648 » » opj_free(p_cp->tcps); |
| 7649 » » p_cp->tcps = 00; |
| 7650 » } |
| 7651 » if (p_cp->ppm_markers != 00) { |
| 7652 » » OPJ_UINT32 i; |
| 7653 » » for (i = 0U; i < p_cp->ppm_markers_count; ++i) { |
| 7654 » » » if (p_cp->ppm_markers[i].m_data != NULL) { |
| 7655 » » » » opj_free(p_cp->ppm_markers[i].m_data); |
| 7656 » » » } |
| 7657 » » } |
| 7658 » » p_cp->ppm_markers_count = 0U; |
| 7659 » » opj_free(p_cp->ppm_markers); |
| 7660 » » p_cp->ppm_markers = NULL; |
| 7661 » } |
| 7662 » opj_free(p_cp->ppm_buffer); |
| 7663 » p_cp->ppm_buffer = 00; |
| 7664 » p_cp->ppm_data = NULL; /* ppm_data belongs to the allocated buffer point
ed by ppm_buffer */ |
| 7665 » opj_free(p_cp->comment); |
| 7666 » p_cp->comment = 00; |
| 7667 » if (! p_cp->m_is_decoder) |
| 7668 » { |
| 7669 » » opj_free(p_cp->m_specific_param.m_enc.m_matrice); |
| 7670 » » p_cp->m_specific_param.m_enc.m_matrice = 00; |
| 7671 » } |
| 7672 } |
| 7662 | 7673 |
| 7663 for (i = 0; i < l_nb_tiles; ++i) | 7674 static OPJ_BOOL opj_j2k_need_nb_tile_parts_correction(opj_stream_private_t *p_st
ream, OPJ_UINT32 tile_no, OPJ_BOOL* p_correction_needed, opj_event_mgr_t * p_man
ager ) |
| 7664 { | 7675 { |
| 7665 opj_j2k_tcp_destroy(l_current_tile); | 7676 » OPJ_BYTE l_header_data[10]; |
| 7666 ++l_current_tile; | 7677 » OPJ_OFF_T l_stream_pos_backup; |
| 7667 } | 7678 » OPJ_UINT32 l_current_marker; |
| 7668 opj_free(p_cp->tcps); | 7679 » OPJ_UINT32 l_marker_size; |
| 7669 p_cp->tcps = 00; | 7680 » OPJ_UINT32 l_tile_no, l_tot_len, l_current_part, l_num_parts; |
| 7670 } | 7681 » |
| 7671 opj_free(p_cp->ppm_buffer); | 7682 » /* initialize to no correction needed */ |
| 7672 p_cp->ppm_buffer = 00; | 7683 » *p_correction_needed = OPJ_FALSE; |
| 7673 p_cp->ppm_data = NULL; /* ppm_data belongs to the allocated buffer point
ed by ppm_buffer */ | 7684 » |
| 7674 opj_free(p_cp->comment); | 7685 » l_stream_pos_backup = opj_stream_tell(p_stream); |
| 7675 p_cp->comment = 00; | 7686 » if (l_stream_pos_backup == -1) { |
| 7676 if (! p_cp->m_is_decoder) | 7687 » » /* let's do nothing */ |
| 7677 { | 7688 » » return OPJ_TRUE; |
| 7678 opj_free(p_cp->m_specific_param.m_enc.m_matrice); | 7689 » } |
| 7679 p_cp->m_specific_param.m_enc.m_matrice = 00; | 7690 » |
| 7680 } | 7691 » for (;;) { |
| 7692 » » /* Try to read 2 bytes (the next marker ID) from stream and copy
them into the buffer */ |
| 7693 » » if (opj_stream_read_data(p_stream,l_header_data, 2, p_manager) !
= 2) { |
| 7694 » » » /* assume all is OK */ |
| 7695 » » » if (! opj_stream_seek(p_stream, l_stream_pos_backup, p_m
anager)) { |
| 7696 » » » » return OPJ_FALSE; |
| 7697 » » » } |
| 7698 » » » return OPJ_TRUE; |
| 7699 » » } |
| 7700 » » |
| 7701 » » /* Read 2 bytes from buffer as the new marker ID */ |
| 7702 » » opj_read_bytes(l_header_data, &l_current_marker, 2); |
| 7703 » » |
| 7704 » » if (l_current_marker != J2K_MS_SOT) { |
| 7705 » » » /* assume all is OK */ |
| 7706 » » » if (! opj_stream_seek(p_stream, l_stream_pos_backup, p_m
anager)) { |
| 7707 » » » » return OPJ_FALSE; |
| 7708 » » » } |
| 7709 » » » return OPJ_TRUE; |
| 7710 » » } |
| 7711 » » |
| 7712 » » /* Try to read 2 bytes (the marker size) from stream and copy th
em into the buffer */ |
| 7713 » » if (opj_stream_read_data(p_stream, l_header_data, 2, p_manager)
!= 2) { |
| 7714 » » » opj_event_msg(p_manager, EVT_ERROR, "Stream too short\n"
); |
| 7715 » » » return OPJ_FALSE; |
| 7716 » » } |
| 7717 » » |
| 7718 » » /* Read 2 bytes from the buffer as the marker size */ |
| 7719 » » opj_read_bytes(l_header_data, &l_marker_size, 2); |
| 7720 » » |
| 7721 » » /* Check marker size for SOT Marker */ |
| 7722 » » if (l_marker_size != 10) { |
| 7723 » » » opj_event_msg(p_manager, EVT_ERROR, "Inconsistent marker
size\n"); |
| 7724 » » » return OPJ_FALSE; |
| 7725 » » } |
| 7726 » » l_marker_size -= 2; |
| 7727 » » |
| 7728 » » if (opj_stream_read_data(p_stream, l_header_data, l_marker_size,
p_manager) != l_marker_size) { |
| 7729 » » » opj_event_msg(p_manager, EVT_ERROR, "Stream too short\n"
); |
| 7730 » » » return OPJ_FALSE; |
| 7731 » » } |
| 7732 » » |
| 7733 » » if (! opj_j2k_get_sot_values(l_header_data, l_marker_size, &l_ti
le_no, &l_tot_len, &l_current_part, &l_num_parts, p_manager)) { |
| 7734 » » » return OPJ_FALSE; |
| 7735 » » } |
| 7736 » » |
| 7737 » » if (l_tile_no == tile_no) { |
| 7738 » » » /* we found what we were looking for */ |
| 7739 » » » break; |
| 7740 » » } |
| 7741 » » |
| 7742 » » if ((l_tot_len == 0U) || (l_tot_len < 14U)) { |
| 7743 » » » /* last SOT until EOC or invalid Psot value */ |
| 7744 » » » /* assume all is OK */ |
| 7745 » » » if (! opj_stream_seek(p_stream, l_stream_pos_backup, p_m
anager)) { |
| 7746 » » » » return OPJ_FALSE; |
| 7747 » » » } |
| 7748 » » » return OPJ_TRUE; |
| 7749 » » } |
| 7750 » » l_tot_len -= 12U; |
| 7751 » » /* look for next SOT marker */ |
| 7752 » » if (opj_stream_skip(p_stream, (OPJ_OFF_T)(l_tot_len), p_manager)
!= (OPJ_OFF_T)(l_tot_len)) { |
| 7753 » » » /* assume all is OK */ |
| 7754 » » » if (! opj_stream_seek(p_stream, l_stream_pos_backup, p_m
anager)) { |
| 7755 » » » » return OPJ_FALSE; |
| 7756 » » » } |
| 7757 » » » return OPJ_TRUE; |
| 7758 » » } |
| 7759 » } |
| 7760 » |
| 7761 » /* check for correction */ |
| 7762 » if (l_current_part == l_num_parts) { |
| 7763 » » *p_correction_needed = OPJ_TRUE; |
| 7764 » } |
| 7765 » |
| 7766 » if (! opj_stream_seek(p_stream, l_stream_pos_backup, p_manager)) { |
| 7767 » » return OPJ_FALSE; |
| 7768 » } |
| 7769 » return OPJ_TRUE; |
| 7681 } | 7770 } |
| 7682 | 7771 |
| 7683 OPJ_BOOL opj_j2k_read_tile_header( opj_j2k_t * p_j2k, | 7772 OPJ_BOOL opj_j2k_read_tile_header( opj_j2k_t * p_j2k, |
| 7684 OPJ_UINT32 *
p_tile_index, | 7773 OPJ_UINT32 *
p_tile_index, |
| 7685 OPJ_UINT32 *
p_data_size, | 7774 OPJ_UINT32 *
p_data_size, |
| 7686 OPJ_INT32 *
p_tile_x0, OPJ_INT32 * p_tile_y0, | 7775 OPJ_INT32 *
p_tile_x0, OPJ_INT32 * p_tile_y0, |
| 7687 OPJ_INT32 *
p_tile_x1, OPJ_INT32 * p_tile_y1, | 7776 OPJ_INT32 *
p_tile_x1, OPJ_INT32 * p_tile_y1, |
| 7688 OPJ_UINT32 *
p_nb_comps, | 7777 OPJ_UINT32 *
p_nb_comps, |
| 7689 OPJ_BOOL * p
_go_on, | 7778 OPJ_BOOL * p
_go_on, |
| 7690 opj_stream_p
rivate_t *p_stream, | 7779 opj_stream_p
rivate_t *p_stream, |
| 7691 opj_event_mg
r_t * p_manager ) | 7780 opj_event_mg
r_t * p_manager ) |
| 7692 { | 7781 { |
| 7693 OPJ_UINT32 l_current_marker = J2K_MS_SOT; | 7782 OPJ_UINT32 l_current_marker = J2K_MS_SOT; |
| 7694 OPJ_UINT32 l_marker_size; | 7783 OPJ_UINT32 l_marker_size; |
| 7695 const opj_dec_memory_marker_handler_t * l_marker_handler = 00; | 7784 const opj_dec_memory_marker_handler_t * l_marker_handler = 00; |
| 7696 opj_tcp_t * l_tcp = NULL; | 7785 opj_tcp_t * l_tcp = NULL; |
| 7697 OPJ_UINT32 l_nb_tiles; | |
| 7698 | 7786 |
| 7699 /* preconditions */ | 7787 /* preconditions */ |
| 7700 assert(p_stream != 00); | 7788 assert(p_stream != 00); |
| 7701 assert(p_j2k != 00); | 7789 assert(p_j2k != 00); |
| 7702 assert(p_manager != 00); | 7790 assert(p_manager != 00); |
| 7703 | 7791 |
| 7704 /* Reach the End Of Codestream ?*/ | 7792 /* Reach the End Of Codestream ?*/ |
| 7705 if (p_j2k->m_specific_param.m_decoder.m_state == J2K_STATE_EOC){ | 7793 if (p_j2k->m_specific_param.m_decoder.m_state == J2K_STATE_EOC){ |
| 7706 l_current_marker = J2K_MS_EOC; | 7794 l_current_marker = J2K_MS_EOC; |
| 7707 } | 7795 } |
| (...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7837 if(opj_stream_get_number_byte_left(p_stream) == 0 | 7925 if(opj_stream_get_number_byte_left(p_stream) == 0 |
| 7838 && p_j2k->m_specific_param.m_decoder.m_state == J2K_STATE_NE
OC) | 7926 && p_j2k->m_specific_param.m_decoder.m_state == J2K_STATE_NE
OC) |
| 7839 break; | 7927 break; |
| 7840 | 7928 |
| 7841 /* If we didn't skip data before, we need to read the SOD marker
*/ | 7929 /* If we didn't skip data before, we need to read the SOD marker
*/ |
| 7842 if (! p_j2k->m_specific_param.m_decoder.m_skip_data) { | 7930 if (! p_j2k->m_specific_param.m_decoder.m_skip_data) { |
| 7843 /* Try to read the SOD marker and skip data ? FIXME */ | 7931 /* Try to read the SOD marker and skip data ? FIXME */ |
| 7844 if (! opj_j2k_read_sod(p_j2k, p_stream, p_manager)) { | 7932 if (! opj_j2k_read_sod(p_j2k, p_stream, p_manager)) { |
| 7845 return OPJ_FALSE; | 7933 return OPJ_FALSE; |
| 7846 } | 7934 } |
| 7935 if (p_j2k->m_specific_param.m_decoder.m_can_decode && !p
_j2k->m_specific_param.m_decoder.m_nb_tile_parts_correction_checked) { |
| 7936 /* Issue 254 */ |
| 7937 OPJ_BOOL l_correction_needed; |
| 7938
|
| 7939 p_j2k->m_specific_param.m_decoder.m_nb_tile_part
s_correction_checked = 1; |
| 7940 if(!opj_j2k_need_nb_tile_parts_correction(p_stre
am, p_j2k->m_current_tile_number, &l_correction_needed, p_manager)) { |
| 7941 opj_event_msg(p_manager, EVT_ERROR, "opj
_j2k_apply_nb_tile_parts_correction error\n"); |
| 7942 return OPJ_FALSE; |
| 7943 } |
| 7944 if (l_correction_needed) { |
| 7945 OPJ_UINT32 l_nb_tiles = p_j2k->m_cp.tw *
p_j2k->m_cp.th; |
| 7946 OPJ_UINT32 l_tile_no; |
| 7847 | 7947 |
| 7948 p_j2k->m_specific_param.m_decoder.m_can_
decode = 0; |
| 7949 p_j2k->m_specific_param.m_decoder.m_nb_t
ile_parts_correction = 1; |
| 7950 /* correct tiles */ |
| 7951 for (l_tile_no = 0U; l_tile_no < l_nb_ti
les; ++l_tile_no) { |
| 7952 if (p_j2k->m_cp.tcps[l_tile_no].
m_nb_tile_parts != 0U) { |
| 7953 p_j2k->m_cp.tcps[l_tile_
no].m_nb_tile_parts+=1; |
| 7954 } |
| 7955 } |
| 7956 opj_event_msg(p_manager, EVT_WARNING, "N
on conformant codestream TPsot==TNsot.\n"); |
| 7957 } |
| 7958 } |
| 7848 if (! p_j2k->m_specific_param.m_decoder.m_can_decode){ | 7959 if (! p_j2k->m_specific_param.m_decoder.m_can_decode){ |
| 7849 /* Try to read 2 bytes (the next marker ID) from
stream and copy them into the buffer */ | 7960 /* Try to read 2 bytes (the next marker ID) from
stream and copy them into the buffer */ |
| 7850 if (opj_stream_read_data(p_stream,p_j2k->m_speci
fic_param.m_decoder.m_header_data,2,p_manager) != 2) { | 7961 if (opj_stream_read_data(p_stream,p_j2k->m_speci
fic_param.m_decoder.m_header_data,2,p_manager) != 2) { |
| 7851 opj_event_msg(p_manager, EVT_ERROR, "Str
eam too short\n"); | 7962 opj_event_msg(p_manager, EVT_ERROR, "Str
eam too short\n"); |
| 7852 return OPJ_FALSE; | 7963 return OPJ_FALSE; |
| 7853 } | 7964 } |
| 7854 | 7965 |
| 7855 /* Read 2 bytes from buffer as the new marker ID
*/ | 7966 /* Read 2 bytes from buffer as the new marker ID
*/ |
| 7856 opj_read_bytes(p_j2k->m_specific_param.m_decoder
.m_header_data,&l_current_marker,2); | 7967 opj_read_bytes(p_j2k->m_specific_param.m_decoder
.m_header_data,&l_current_marker,2); |
| 7857 } | 7968 } |
| (...skipping 18 matching lines...) Expand all Loading... |
| 7876 /* Current marker is the EOC marker ?*/ | 7987 /* Current marker is the EOC marker ?*/ |
| 7877 if (l_current_marker == J2K_MS_EOC) { | 7988 if (l_current_marker == J2K_MS_EOC) { |
| 7878 if (p_j2k->m_specific_param.m_decoder.m_state != J2K_STATE_EOC )
{ | 7989 if (p_j2k->m_specific_param.m_decoder.m_state != J2K_STATE_EOC )
{ |
| 7879 p_j2k->m_current_tile_number = 0; | 7990 p_j2k->m_current_tile_number = 0; |
| 7880 p_j2k->m_specific_param.m_decoder.m_state = J2K_STATE_EO
C; | 7991 p_j2k->m_specific_param.m_decoder.m_state = J2K_STATE_EO
C; |
| 7881 } | 7992 } |
| 7882 } | 7993 } |
| 7883 | 7994 |
| 7884 /* FIXME DOC ???*/ | 7995 /* FIXME DOC ???*/ |
| 7885 if ( ! p_j2k->m_specific_param.m_decoder.m_can_decode) { | 7996 if ( ! p_j2k->m_specific_param.m_decoder.m_can_decode) { |
| 7997 OPJ_UINT32 l_nb_tiles = p_j2k->m_cp.th * p_j2k->m_cp.tw; |
| 7886 l_tcp = p_j2k->m_cp.tcps + p_j2k->m_current_tile_number; | 7998 l_tcp = p_j2k->m_cp.tcps + p_j2k->m_current_tile_number; |
| 7887 l_nb_tiles = p_j2k->m_cp.th * p_j2k->m_cp.tw; | |
| 7888 | 7999 |
| 7889 while( (p_j2k->m_current_tile_number < l_nb_tiles) && (l_tcp->m_
data == 00) ) { | 8000 while( (p_j2k->m_current_tile_number < l_nb_tiles) && (l_tcp->m_
data == 00) ) { |
| 7890 ++p_j2k->m_current_tile_number; | 8001 ++p_j2k->m_current_tile_number; |
| 7891 ++l_tcp; | 8002 ++l_tcp; |
| 7892 } | 8003 } |
| 7893 | 8004 |
| 7894 if (p_j2k->m_current_tile_number == l_nb_tiles) { | 8005 if (p_j2k->m_current_tile_number == l_nb_tiles) { |
| 7895 *p_go_on = OPJ_FALSE; | 8006 *p_go_on = OPJ_FALSE; |
| 7896 return OPJ_TRUE; | 8007 return OPJ_TRUE; |
| 7897 } | 8008 } |
| 7898 } | 8009 } |
| 7899 | 8010 |
| 8011 if (! opj_j2k_merge_ppt(p_j2k->m_cp.tcps + p_j2k->m_current_tile_number,
p_manager)) { |
| 8012 opj_event_msg(p_manager, EVT_ERROR, "Failed to merge PPT data\n"
); |
| 8013 return OPJ_FALSE; |
| 8014 } |
| 7900 /*FIXME ???*/ | 8015 /*FIXME ???*/ |
| 7901 if (! opj_tcd_init_decode_tile(p_j2k->m_tcd, p_j2k->m_current_tile_numbe
r)) { | 8016 if (! opj_tcd_init_decode_tile(p_j2k->m_tcd, p_j2k->m_current_tile_numbe
r, p_manager)) { |
| 7902 opj_event_msg(p_manager, EVT_ERROR, "Cannot decode tile, memory
error\n"); | 8017 opj_event_msg(p_manager, EVT_ERROR, "Cannot decode tile, memory
error\n"); |
| 7903 return OPJ_FALSE; | 8018 return OPJ_FALSE; |
| 7904 } | 8019 } |
| 7905 | 8020 |
| 7906 opj_event_msg(p_manager, EVT_INFO, "Header of tile %d / %d has been read
.\n", | 8021 opj_event_msg(p_manager, EVT_INFO, "Header of tile %d / %d has been read
.\n", |
| 7907 p_j2k->m_current_tile_number+1, (p_j2k->m_cp.th * p_j2k-
>m_cp.tw)); | 8022 p_j2k->m_current_tile_number+1, (p_j2k->m_cp.th * p_j2k-
>m_cp.tw)); |
| 7908 | 8023 |
| 7909 *p_tile_index = p_j2k->m_current_tile_number; | 8024 *p_tile_index = p_j2k->m_current_tile_number; |
| 7910 *p_go_on = OPJ_TRUE; | 8025 *p_go_on = OPJ_TRUE; |
| 7911 *p_data_size = opj_tcd_get_decoded_tile_size(p_j2k->m_tcd); | 8026 *p_data_size = opj_tcd_get_decoded_tile_size(p_j2k->m_tcd); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7944 l_tcp = &(p_j2k->m_cp.tcps[p_tile_index]); | 8059 l_tcp = &(p_j2k->m_cp.tcps[p_tile_index]); |
| 7945 if (! l_tcp->m_data) { | 8060 if (! l_tcp->m_data) { |
| 7946 opj_j2k_tcp_destroy(l_tcp); | 8061 opj_j2k_tcp_destroy(l_tcp); |
| 7947 return OPJ_FALSE; | 8062 return OPJ_FALSE; |
| 7948 } | 8063 } |
| 7949 | 8064 |
| 7950 if (! opj_tcd_decode_tile( p_j2k->m_tcd, | 8065 if (! opj_tcd_decode_tile( p_j2k->m_tcd, |
| 7951 l_tcp->m_data, | 8066 l_tcp->m_data, |
| 7952 l_tcp->m_data_si
ze, | 8067 l_tcp->m_data_si
ze, |
| 7953 p_tile_index, | 8068 p_tile_index, |
| 7954 p_j2k->cstr_inde
x) ) { | 8069 p_j2k->cstr_inde
x, p_manager) ) { |
| 7955 opj_j2k_tcp_destroy(l_tcp); | 8070 opj_j2k_tcp_destroy(l_tcp); |
| 7956 p_j2k->m_specific_param.m_decoder.m_state |= 0x8000;/*FIXME J2K_
DEC_STATE_ERR;*/ | 8071 p_j2k->m_specific_param.m_decoder.m_state |= 0x8000;/*FIXME J2K_
DEC_STATE_ERR;*/ |
| 7957 opj_event_msg(p_manager, EVT_ERROR, "Failed to decode.\n"); | 8072 opj_event_msg(p_manager, EVT_ERROR, "Failed to decode.\n"); |
| 7958 return OPJ_FALSE; | 8073 return OPJ_FALSE; |
| 7959 } | 8074 } |
| 7960 | 8075 |
| 7961 if (! opj_tcd_update_tile_data(p_j2k->m_tcd,p_data,p_data_size)) { | 8076 if (! opj_tcd_update_tile_data(p_j2k->m_tcd,p_data,p_data_size)) { |
| 7962 return OPJ_FALSE; | 8077 return OPJ_FALSE; |
| 7963 } | 8078 } |
| 7964 | 8079 |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7996 return OPJ_TRUE; | 8111 return OPJ_TRUE; |
| 7997 } | 8112 } |
| 7998 opj_event_msg(p_manager, EVT_ERROR, "Stream too short, e
xpected SOT\n"); | 8113 opj_event_msg(p_manager, EVT_ERROR, "Stream too short, e
xpected SOT\n"); |
| 7999 return OPJ_FALSE; | 8114 return OPJ_FALSE; |
| 8000 } | 8115 } |
| 8001 } | 8116 } |
| 8002 | 8117 |
| 8003 return OPJ_TRUE; | 8118 return OPJ_TRUE; |
| 8004 } | 8119 } |
| 8005 | 8120 |
| 8006 OPJ_BOOL opj_j2k_update_image_data (opj_tcd_t * p_tcd, OPJ_BYTE * p_data, opj_im
age_t* p_output_image) | 8121 static OPJ_BOOL opj_j2k_update_image_data (opj_tcd_t * p_tcd, OPJ_BYTE * p_data,
opj_image_t* p_output_image) |
| 8007 { | 8122 { |
| 8008 OPJ_UINT32 i,j,k = 0; | 8123 OPJ_UINT32 i,j,k = 0; |
| 8009 OPJ_UINT32 l_width_src,l_height_src; | 8124 OPJ_UINT32 l_width_src,l_height_src; |
| 8010 OPJ_UINT32 l_width_dest,l_height_dest; | 8125 OPJ_UINT32 l_width_dest,l_height_dest; |
| 8011 OPJ_INT32 l_offset_x0_src, l_offset_y0_src, l_offset_x1_src, l_offset_y1
_src; | 8126 OPJ_INT32 l_offset_x0_src, l_offset_y0_src, l_offset_x1_src, l_offset_y1
_src; |
| 8012 OPJ_INT32 l_start_offset_src, l_line_offset_src, l_end_offset_src ; | 8127 OPJ_SIZE_T l_start_offset_src, l_line_offset_src, l_end_offset_src ; |
| 8013 OPJ_UINT32 l_start_x_dest , l_start_y_dest; | 8128 OPJ_UINT32 l_start_x_dest , l_start_y_dest; |
| 8014 OPJ_UINT32 l_x0_dest, l_y0_dest, l_x1_dest, l_y1_dest; | 8129 OPJ_UINT32 l_x0_dest, l_y0_dest, l_x1_dest, l_y1_dest; |
| 8015 OPJ_INT32 l_start_offset_dest, l_line_offset_dest; | 8130 OPJ_SIZE_T l_start_offset_dest, l_line_offset_dest; |
| 8016 | 8131 |
| 8017 opj_image_comp_t * l_img_comp_src = 00; | 8132 opj_image_comp_t * l_img_comp_src = 00; |
| 8018 opj_image_comp_t * l_img_comp_dest = 00; | 8133 opj_image_comp_t * l_img_comp_dest = 00; |
| 8019 | 8134 |
| 8020 opj_tcd_tilecomp_t * l_tilec = 00; | 8135 opj_tcd_tilecomp_t * l_tilec = 00; |
| 8021 opj_image_t * l_image_src = 00; | 8136 opj_image_t * l_image_src = 00; |
| 8022 OPJ_UINT32 l_size_comp, l_remaining; | 8137 OPJ_UINT32 l_size_comp, l_remaining; |
| 8023 OPJ_INT32 * l_dest_ptr; | 8138 OPJ_INT32 * l_dest_ptr; |
| 8024 opj_tcd_resolution_t* l_res= 00; | 8139 opj_tcd_resolution_t* l_res= 00; |
| 8025 | 8140 |
| 8026 l_tilec = p_tcd->tcd_image->tiles->comps; | 8141 l_tilec = p_tcd->tcd_image->tiles->comps; |
| 8027 l_image_src = p_tcd->image; | 8142 l_image_src = p_tcd->image; |
| 8028 l_img_comp_src = l_image_src->comps; | 8143 l_img_comp_src = l_image_src->comps; |
| 8029 | 8144 |
| 8030 l_img_comp_dest = p_output_image->comps; | 8145 l_img_comp_dest = p_output_image->comps; |
| 8031 | 8146 |
| 8032 for (i=0; i<l_image_src->numcomps; i++) { | 8147 for (i=0; i<l_image_src->numcomps; i++) { |
| 8033 | 8148 |
| 8034 /* Allocate output component buffer if necessary */ | 8149 /* Allocate output component buffer if necessary */ |
| 8035 if (!l_img_comp_dest->data) { | 8150 if (!l_img_comp_dest->data) { |
| 8036 OPJ_UINT32 width = l_img_comp_dest->w; | 8151 OPJ_UINT32 width = l_img_comp_dest->w; |
| 8037 OPJ_UINT32 height = l_img_comp_dest->h; | 8152 OPJ_UINT32 height = l_img_comp_dest->h; |
| 8038 const OPJ_UINT32 MAX_SIZE = UINT32_MAX / sizeof(OPJ_INT32); | 8153 const OPJ_UINT32 MAX_SIZE = UINT32_MAX / sizeof(OPJ_INT32); |
| 8039 if (height == 0 || width > MAX_SIZE / height) { | 8154 if (height == 0 || width > MAX_SIZE / height) { |
| 8040 return OPJ_FALSE; | 8155 return OPJ_FALSE; |
| 8041 } | 8156 } |
| 8042 l_img_comp_dest->data = (OPJ_INT32*) opj_calloc(width * heig
ht, sizeof(OPJ_INT32)); | 8157 l_img_comp_dest->data = (OPJ_INT32*)opj_calloc(width * heigh
t, sizeof(OPJ_INT32)); |
| 8043 if (!l_img_comp_dest->data) { | 8158 if (!l_img_comp_dest->data) { |
| 8044 return OPJ_FALSE; | 8159 return OPJ_FALSE; |
| 8045 } | 8160 } |
| 8046 } | 8161 } |
| 8047 | 8162 |
| 8048 /* Copy info from decoded comp image to output image */ | 8163 /* Copy info from decoded comp image to output image */ |
| 8049 l_img_comp_dest->resno_decoded = l_img_comp_src->resno_decoded; | 8164 l_img_comp_dest->resno_decoded = l_img_comp_src->resno_decoded; |
| 8050 | 8165 |
| 8051 /*-----*/ | 8166 /*-----*/ |
| 8052 /* Compute the precision of the output buffer */ | 8167 /* Compute the precision of the output buffer */ |
| (...skipping 13 matching lines...) Expand all Loading... |
| 8066 /* Current tile component size*/ | 8181 /* Current tile component size*/ |
| 8067 /*if (i == 0) { | 8182 /*if (i == 0) { |
| 8068 fprintf(stdout, "SRC: l_res_x0=%d, l_res_x1=%d, l_res_y0=%d, l_r
es_y1=%d\n", | 8183 fprintf(stdout, "SRC: l_res_x0=%d, l_res_x1=%d, l_res_y0=%d, l_r
es_y1=%d\n", |
| 8069 l_res->x0, l_res->x1, l_res->y0, l_res->y1); | 8184 l_res->x0, l_res->x1, l_res->y0, l_res->y1); |
| 8070 }*/ | 8185 }*/ |
| 8071 | 8186 |
| 8072 l_width_src = (OPJ_UINT32)(l_res->x1 - l_res->x0); | 8187 l_width_src = (OPJ_UINT32)(l_res->x1 - l_res->x0); |
| 8073 l_height_src = (OPJ_UINT32)(l_res->y1 - l_res->y0); | 8188 l_height_src = (OPJ_UINT32)(l_res->y1 - l_res->y0); |
| 8074 | 8189 |
| 8075 /* Border of the current output component*/ | 8190 /* Border of the current output component*/ |
| 8076 l_x0_dest = (OPJ_UINT32)opj_int_ceildivpow2((OPJ_INT32)l_img_com
p_dest->x0, (OPJ_INT32)l_img_comp_dest->factor); | 8191 l_x0_dest = opj_uint_ceildivpow2(l_img_comp_dest->x0, l_img_comp
_dest->factor); |
| 8077 l_y0_dest = (OPJ_UINT32)opj_int_ceildivpow2((OPJ_INT32)l_img_com
p_dest->y0, (OPJ_INT32)l_img_comp_dest->factor); | 8192 l_y0_dest = opj_uint_ceildivpow2(l_img_comp_dest->y0, l_img_comp
_dest->factor); |
| 8078 l_x1_dest = l_x0_dest + l_img_comp_dest->w; | 8193 l_x1_dest = l_x0_dest + l_img_comp_dest->w; /* can't overflow gi
ven that image->x1 is uint32 */ |
| 8079 l_y1_dest = l_y0_dest + l_img_comp_dest->h; | 8194 l_y1_dest = l_y0_dest + l_img_comp_dest->h; |
| 8080 | 8195 |
| 8081 /*if (i == 0) { | 8196 /*if (i == 0) { |
| 8082 fprintf(stdout, "DEST: l_x0_dest=%d, l_x1_dest=%d, l_y0_dest=%d,
l_y1_dest=%d (%d)\n", | 8197 fprintf(stdout, "DEST: l_x0_dest=%d, l_x1_dest=%d, l_y0_dest=%d,
l_y1_dest=%d (%d)\n", |
| 8083 l_x0_dest, l_x1_dest, l_y0_dest, l_y1_dest, l_im
g_comp_dest->factor ); | 8198 l_x0_dest, l_x1_dest, l_y0_dest, l_y1_dest, l_im
g_comp_dest->factor ); |
| 8084 }*/ | 8199 }*/ |
| 8085 | 8200 |
| 8086 /*-----*/ | 8201 /*-----*/ |
| 8087 /* Compute the area (l_offset_x0_src, l_offset_y0_src, l_offset_
x1_src, l_offset_y1_src) | 8202 /* Compute the area (l_offset_x0_src, l_offset_y0_src, l_offset_
x1_src, l_offset_y1_src) |
| 8088 * of the input buffer (decoded tile component) which will be mo
ve | 8203 * of the input buffer (decoded tile component) which will be mo
ve |
| (...skipping 10 matching lines...) Expand all Loading... |
| 8099 if ( l_x1_dest >= (OPJ_UINT32)l_res->x1 ) { | 8214 if ( l_x1_dest >= (OPJ_UINT32)l_res->x1 ) { |
| 8100 l_width_dest = l_width_src; | 8215 l_width_dest = l_width_src; |
| 8101 l_offset_x1_src = 0; | 8216 l_offset_x1_src = 0; |
| 8102 } | 8217 } |
| 8103 else { | 8218 else { |
| 8104 l_width_dest = l_x1_dest - (OPJ_UINT32)l_res->x0
; | 8219 l_width_dest = l_x1_dest - (OPJ_UINT32)l_res->x0
; |
| 8105 l_offset_x1_src = (OPJ_INT32)(l_width_src - l_wi
dth_dest); | 8220 l_offset_x1_src = (OPJ_INT32)(l_width_src - l_wi
dth_dest); |
| 8106 } | 8221 } |
| 8107 } | 8222 } |
| 8108 else { | 8223 else { |
| 8109 l_start_x_dest = 0 ; | 8224 l_start_x_dest = 0U; |
| 8110 l_offset_x0_src = (OPJ_INT32)l_x0_dest - l_res->x0; | 8225 l_offset_x0_src = (OPJ_INT32)l_x0_dest - l_res->x0; |
| 8111 | 8226 |
| 8112 if ( l_x1_dest >= (OPJ_UINT32)l_res->x1 ) { | 8227 if ( l_x1_dest >= (OPJ_UINT32)l_res->x1 ) { |
| 8113 l_width_dest = l_width_src - (OPJ_UINT32)l_offse
t_x0_src; | 8228 l_width_dest = l_width_src - (OPJ_UINT32)l_offse
t_x0_src; |
| 8114 l_offset_x1_src = 0; | 8229 l_offset_x1_src = 0; |
| 8115 } | 8230 } |
| 8116 else { | 8231 else { |
| 8117 l_width_dest = l_img_comp_dest->w ; | 8232 l_width_dest = l_img_comp_dest->w ; |
| 8118 l_offset_x1_src = l_res->x1 - (OPJ_INT32)l_x1_de
st; | 8233 l_offset_x1_src = l_res->x1 - (OPJ_INT32)l_x1_de
st; |
| 8119 } | 8234 } |
| 8120 } | 8235 } |
| 8121 | 8236 |
| 8122 if ( l_y0_dest < (OPJ_UINT32)l_res->y0 ) { | 8237 if ( l_y0_dest < (OPJ_UINT32)l_res->y0 ) { |
| 8123 l_start_y_dest = (OPJ_UINT32)l_res->y0 - l_y0_dest; | 8238 l_start_y_dest = (OPJ_UINT32)l_res->y0 - l_y0_dest; |
| 8124 l_offset_y0_src = 0; | 8239 l_offset_y0_src = 0; |
| 8125 | 8240 |
| 8126 if ( l_y1_dest >= (OPJ_UINT32)l_res->y1 ) { | 8241 if ( l_y1_dest >= (OPJ_UINT32)l_res->y1 ) { |
| 8127 l_height_dest = l_height_src; | 8242 l_height_dest = l_height_src; |
| 8128 l_offset_y1_src = 0; | 8243 l_offset_y1_src = 0; |
| 8129 } | 8244 } |
| 8130 else { | 8245 else { |
| 8131 l_height_dest = l_y1_dest - (OPJ_UINT32)l_res->y
0 ; | 8246 l_height_dest = l_y1_dest - (OPJ_UINT32)l_res->y
0 ; |
| 8132 l_offset_y1_src = (OPJ_INT32)(l_height_src - l_
height_dest); | 8247 l_offset_y1_src = (OPJ_INT32)(l_height_src - l_
height_dest); |
| 8133 } | 8248 } |
| 8134 } | 8249 } |
| 8135 else { | 8250 else { |
| 8136 l_start_y_dest = 0 ; | 8251 l_start_y_dest = 0U; |
| 8137 l_offset_y0_src = (OPJ_INT32)l_y0_dest - l_res->y0; | 8252 l_offset_y0_src = (OPJ_INT32)l_y0_dest - l_res->y0; |
| 8138 | 8253 |
| 8139 if ( l_y1_dest >= (OPJ_UINT32)l_res->y1 ) { | 8254 if ( l_y1_dest >= (OPJ_UINT32)l_res->y1 ) { |
| 8140 l_height_dest = l_height_src - (OPJ_UINT32)l_off
set_y0_src; | 8255 l_height_dest = l_height_src - (OPJ_UINT32)l_off
set_y0_src; |
| 8141 l_offset_y1_src = 0; | 8256 l_offset_y1_src = 0; |
| 8142 } | 8257 } |
| 8143 else { | 8258 else { |
| 8144 l_height_dest = l_img_comp_dest->h ; | 8259 l_height_dest = l_img_comp_dest->h ; |
| 8145 l_offset_y1_src = l_res->y1 - (OPJ_INT32)l_y1_de
st; | 8260 l_offset_y1_src = l_res->y1 - (OPJ_INT32)l_y1_de
st; |
| 8146 } | 8261 } |
| 8147 } | 8262 } |
| 8148 | 8263 |
| 8149 if( (l_offset_x0_src < 0 ) || (l_offset_y0_src < 0 ) || (l_offse
t_x1_src < 0 ) || (l_offset_y1_src < 0 ) ){ | 8264 if( (l_offset_x0_src < 0 ) || (l_offset_y0_src < 0 ) || (l_offse
t_x1_src < 0 ) || (l_offset_y1_src < 0 ) ){ |
| 8150 return OPJ_FALSE; | 8265 return OPJ_FALSE; |
| 8151 } | 8266 } |
| 8152 /* testcase 2977.pdf.asan.67.2198 */ | 8267 /* testcase 2977.pdf.asan.67.2198 */ |
| 8153 if ((OPJ_INT32)l_width_dest < 0 || (OPJ_INT32)l_height_dest < 0)
{ | 8268 if ((OPJ_INT32)l_width_dest < 0 || (OPJ_INT32)l_height_dest < 0)
{ |
| 8154 return OPJ_FALSE; | 8269 return OPJ_FALSE; |
| 8155 } | 8270 } |
| 8156 /*-----*/ | 8271 /*-----*/ |
| 8157 | 8272 |
| 8158 /* Compute the input buffer offset */ | 8273 /* Compute the input buffer offset */ |
| 8159 l_start_offset_src = l_offset_x0_src + l_offset_y0_src * (OPJ_IN
T32)l_width_src; | 8274 l_start_offset_src = (OPJ_SIZE_T)l_offset_x0_src + (OPJ_SIZE_T)l
_offset_y0_src * (OPJ_SIZE_T)l_width_src; |
| 8160 l_line_offset_src = l_offset_x1_src + l_offset_x0_src; | 8275 l_line_offset_src = (OPJ_SIZE_T)l_offset_x1_src + (OPJ_SIZE_T)l
_offset_x0_src; |
| 8161 l_end_offset_src = l_offset_y1_src * (OPJ_INT32)l_width_src - l_
offset_x0_src; | 8276 l_end_offset_src = (OPJ_SIZE_T)l_offset_y1_src * (OPJ_SIZE_T)l
_width_src - (OPJ_SIZE_T)l_offset_x0_src; |
| 8162 | 8277 |
| 8163 /* Compute the output buffer offset */ | 8278 /* Compute the output buffer offset */ |
| 8164 l_start_offset_dest = (OPJ_INT32)(l_start_x_dest + l_start_y_des
t * l_img_comp_dest->w); | 8279 l_start_offset_dest = (OPJ_SIZE_T)l_start_x_dest + (OPJ_SIZE_T)l
_start_y_dest * (OPJ_SIZE_T)l_img_comp_dest->w; |
| 8165 l_line_offset_dest = (OPJ_INT32)(l_img_comp_dest->w - l_width_de
st); | 8280 l_line_offset_dest = (OPJ_SIZE_T)l_img_comp_dest->w - (OPJ_SIZE
_T)l_width_dest; |
| 8166 | 8281 |
| 8167 /* Move the output buffer to the first place where we will write
*/ | 8282 /* Move the output buffer to the first place where we will write
*/ |
| 8168 l_dest_ptr = l_img_comp_dest->data + l_start_offset_dest; | 8283 l_dest_ptr = l_img_comp_dest->data + l_start_offset_dest; |
| 8169 | 8284 |
| 8170 /*if (i == 0) { | 8285 /*if (i == 0) { |
| 8171 fprintf(stdout, "COMPO[%d]:\n",i); | 8286 fprintf(stdout, "COMPO[%d]:\n",i); |
| 8172 fprintf(stdout, "SRC: l_start_x_src=%d, l_start_y_src=%d
, l_width_src=%d, l_height_src=%d\n" | 8287 fprintf(stdout, "SRC: l_start_x_src=%d, l_start_y_src=%d
, l_width_src=%d, l_height_src=%d\n" |
| 8173 "\t tile offset:%d, %d, %d, %d\n" | 8288 "\t tile offset:%d, %d, %d, %d\n" |
| 8174 "\t buffer offset: %d; %d, %d\n", | 8289 "\t buffer offset: %d; %d, %d\n", |
| 8175 l_res->x0, l_res->y0, l_width_src, l_hei
ght_src, | 8290 l_res->x0, l_res->y0, l_width_src, l_hei
ght_src, |
| (...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8429 opj_j2k_t* opj_j2k_create_decompress(void) | 8544 opj_j2k_t* opj_j2k_create_decompress(void) |
| 8430 { | 8545 { |
| 8431 opj_j2k_t *l_j2k = (opj_j2k_t*) opj_calloc(1,sizeof(opj_j2k_t)); | 8546 opj_j2k_t *l_j2k = (opj_j2k_t*) opj_calloc(1,sizeof(opj_j2k_t)); |
| 8432 if (!l_j2k) { | 8547 if (!l_j2k) { |
| 8433 return 00; | 8548 return 00; |
| 8434 } | 8549 } |
| 8435 | 8550 |
| 8436 l_j2k->m_is_decoder = 1; | 8551 l_j2k->m_is_decoder = 1; |
| 8437 l_j2k->m_cp.m_is_decoder = 1; | 8552 l_j2k->m_cp.m_is_decoder = 1; |
| 8438 | 8553 |
| 8554 #ifdef OPJ_DISABLE_TPSOT_FIX |
| 8555 l_j2k->m_specific_param.m_decoder.m_nb_tile_parts_correction_checked = 1
; |
| 8556 #endif |
| 8557 |
| 8439 l_j2k->m_specific_param.m_decoder.m_default_tcp = (opj_tcp_t*) opj_callo
c(1,sizeof(opj_tcp_t)); | 8558 l_j2k->m_specific_param.m_decoder.m_default_tcp = (opj_tcp_t*) opj_callo
c(1,sizeof(opj_tcp_t)); |
| 8440 if (!l_j2k->m_specific_param.m_decoder.m_default_tcp) { | 8559 if (!l_j2k->m_specific_param.m_decoder.m_default_tcp) { |
| 8441 opj_j2k_destroy(l_j2k); | 8560 opj_j2k_destroy(l_j2k); |
| 8442 return 00; | 8561 return 00; |
| 8443 } | 8562 } |
| 8444 | 8563 |
| 8445 l_j2k->m_specific_param.m_decoder.m_header_data = (OPJ_BYTE *) opj_callo
c(1,OPJ_J2K_DEFAULT_HEADER_SIZE); | 8564 l_j2k->m_specific_param.m_decoder.m_header_data = (OPJ_BYTE *) opj_callo
c(1,OPJ_J2K_DEFAULT_HEADER_SIZE); |
| 8446 if (! l_j2k->m_specific_param.m_decoder.m_header_data) { | 8565 if (! l_j2k->m_specific_param.m_decoder.m_header_data) { |
| 8447 opj_j2k_destroy(l_j2k); | 8566 opj_j2k_destroy(l_j2k); |
| 8448 return 00; | 8567 return 00; |
| (...skipping 22 matching lines...) Expand all Loading... |
| 8471 /* execution list creation */ | 8590 /* execution list creation */ |
| 8472 l_j2k->m_procedure_list = opj_procedure_list_create(); | 8591 l_j2k->m_procedure_list = opj_procedure_list_create(); |
| 8473 if (! l_j2k->m_procedure_list) { | 8592 if (! l_j2k->m_procedure_list) { |
| 8474 opj_j2k_destroy(l_j2k); | 8593 opj_j2k_destroy(l_j2k); |
| 8475 return 00; | 8594 return 00; |
| 8476 } | 8595 } |
| 8477 | 8596 |
| 8478 return l_j2k; | 8597 return l_j2k; |
| 8479 } | 8598 } |
| 8480 | 8599 |
| 8481 opj_codestream_index_t* opj_j2k_create_cstr_index(void) | 8600 static opj_codestream_index_t* opj_j2k_create_cstr_index(void) |
| 8482 { | 8601 { |
| 8483 opj_codestream_index_t* cstr_index = (opj_codestream_index_t*) | 8602 opj_codestream_index_t* cstr_index = (opj_codestream_index_t*) |
| 8484 opj_calloc(1,sizeof(opj_codestream_index_t)); | 8603 opj_calloc(1,sizeof(opj_codestream_index_t)); |
| 8485 if (!cstr_index) | 8604 if (!cstr_index) |
| 8486 return NULL; | 8605 return NULL; |
| 8487 | 8606 |
| 8488 cstr_index->maxmarknum = 100; | 8607 cstr_index->maxmarknum = 100; |
| 8489 cstr_index->marknum = 0; | 8608 cstr_index->marknum = 0; |
| 8490 cstr_index->marker = (opj_marker_info_t*) | 8609 cstr_index->marker = (opj_marker_info_t*) |
| 8491 opj_calloc(cstr_index->maxmarknum, sizeof(opj_marker_inf
o_t)); | 8610 opj_calloc(cstr_index->maxmarknum, sizeof(opj_marker_inf
o_t)); |
| 8492 if (!cstr_index-> marker) | 8611 if (!cstr_index-> marker) { |
| 8612 opj_free(cstr_index); |
| 8493 return NULL; | 8613 return NULL; |
| 8614 } |
| 8494 | 8615 |
| 8495 cstr_index->tile_index = NULL; | 8616 cstr_index->tile_index = NULL; |
| 8496 | 8617 |
| 8497 return cstr_index; | 8618 return cstr_index; |
| 8498 } | 8619 } |
| 8499 | 8620 |
| 8500 OPJ_UINT32 opj_j2k_get_SPCod_SPCoc_size ( opj_j2k_t *p_j2k, | 8621 static OPJ_UINT32 opj_j2k_get_SPCod_SPCoc_size ( opj_j2k_t *p_j2k, |
| 8501
OPJ_UINT32 p_tile_no, | 8622
OPJ_UINT32 p_tile_no, |
| 8502
OPJ_UINT32 p_comp_no ) | 8623
OPJ_UINT32 p_comp_no ) |
| 8503 { | 8624 { |
| 8504 opj_cp_t *l_cp = 00; | 8625 opj_cp_t *l_cp = 00; |
| 8505 opj_tcp_t *l_tcp = 00; | 8626 opj_tcp_t *l_tcp = 00; |
| 8506 opj_tccp_t *l_tccp = 00; | 8627 opj_tccp_t *l_tccp = 00; |
| 8507 | 8628 |
| 8508 /* preconditions */ | 8629 /* preconditions */ |
| 8509 assert(p_j2k != 00); | 8630 assert(p_j2k != 00); |
| 8510 | 8631 |
| 8511 l_cp = &(p_j2k->m_cp); | 8632 l_cp = &(p_j2k->m_cp); |
| 8512 l_tcp = &l_cp->tcps[p_tile_no]; | 8633 l_tcp = &l_cp->tcps[p_tile_no]; |
| 8513 l_tccp = &l_tcp->tccps[p_comp_no]; | 8634 l_tccp = &l_tcp->tccps[p_comp_no]; |
| 8514 | 8635 |
| 8515 /* preconditions again */ | 8636 /* preconditions again */ |
| 8516 assert(p_tile_no < (l_cp->tw * l_cp->th)); | 8637 assert(p_tile_no < (l_cp->tw * l_cp->th)); |
| 8517 assert(p_comp_no < p_j2k->m_private_image->numcomps); | 8638 assert(p_comp_no < p_j2k->m_private_image->numcomps); |
| 8518 | 8639 |
| 8519 if (l_tccp->csty & J2K_CCP_CSTY_PRT) { | 8640 if (l_tccp->csty & J2K_CCP_CSTY_PRT) { |
| 8520 return 5 + l_tccp->numresolutions; | 8641 return 5 + l_tccp->numresolutions; |
| 8521 } | 8642 } |
| 8522 else { | 8643 else { |
| 8523 return 5; | 8644 return 5; |
| 8524 } | 8645 } |
| 8525 } | 8646 } |
| 8526 | 8647 |
| 8527 OPJ_BOOL opj_j2k_write_SPCod_SPCoc( opj_j2k_t *p_j2k, | 8648 static OPJ_BOOL opj_j2k_write_SPCod_SPCoc( opj_j2k_t *p_j2k, |
| 8528 OPJ_UINT32 p
_tile_no, | 8649 OPJ_UINT32 p
_tile_no, |
| 8529 OPJ_UINT32 p
_comp_no, | 8650 OPJ_UINT32 p
_comp_no, |
| 8530 OPJ_BYTE * p
_data, | 8651 OPJ_BYTE * p
_data, |
| 8531 OPJ_UINT32 *
p_header_size, | 8652 OPJ_UINT32 *
p_header_size, |
| 8532 struct opj_e
vent_mgr * p_manager ) | 8653 struct opj_e
vent_mgr * p_manager ) |
| 8533 { | 8654 { |
| 8534 OPJ_UINT32 i; | 8655 OPJ_UINT32 i; |
| 8535 opj_cp_t *l_cp = 00; | 8656 opj_cp_t *l_cp = 00; |
| 8536 opj_tcp_t *l_tcp = 00; | 8657 opj_tcp_t *l_tcp = 00; |
| 8537 opj_tccp_t *l_tccp = 00; | 8658 opj_tccp_t *l_tccp = 00; |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8583 opj_write_bytes(p_data,l_tccp->prcw[i] + (l_tccp->prch[i
] << 4), 1); /* SPcoc (I_i) */ | 8704 opj_write_bytes(p_data,l_tccp->prcw[i] + (l_tccp->prch[i
] << 4), 1); /* SPcoc (I_i) */ |
| 8584 ++p_data; | 8705 ++p_data; |
| 8585 } | 8706 } |
| 8586 | 8707 |
| 8587 *p_header_size = *p_header_size - l_tccp->numresolutions; | 8708 *p_header_size = *p_header_size - l_tccp->numresolutions; |
| 8588 } | 8709 } |
| 8589 | 8710 |
| 8590 return OPJ_TRUE; | 8711 return OPJ_TRUE; |
| 8591 } | 8712 } |
| 8592 | 8713 |
| 8593 OPJ_BOOL opj_j2k_read_SPCod_SPCoc( opj_j2k_t *p_j2k, | 8714 static OPJ_BOOL opj_j2k_read_SPCod_SPCoc( opj_j2k_t *p_j2k, |
| 8594 OPJ_UINT32 compn
o, | 8715 OPJ_UINT32 compn
o, |
| 8595 OPJ_BYTE * p_hea
der_data, | 8716 OPJ_BYTE * p_hea
der_data, |
| 8596 OPJ_UINT32 * p_h
eader_size, | 8717 OPJ_UINT32 * p_h
eader_size, |
| 8597 opj_event_mgr_t
* p_manager) | 8718 opj_event_mgr_t
* p_manager) |
| 8598 { | 8719 { |
| 8599 OPJ_UINT32 i, l_tmp; | 8720 OPJ_UINT32 i, l_tmp; |
| 8600 opj_cp_t *l_cp = NULL; | 8721 opj_cp_t *l_cp = NULL; |
| 8601 opj_tcp_t *l_tcp = NULL; | 8722 opj_tcp_t *l_tcp = NULL; |
| 8602 opj_tccp_t *l_tccp = NULL; | 8723 opj_tccp_t *l_tccp = NULL; |
| 8603 OPJ_BYTE * l_current_ptr = NULL; | 8724 OPJ_BYTE * l_current_ptr = NULL; |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8706 | 8827 |
| 8707 memcpy(p_j2k->cstr_info->tile[p_j2k->m_current_tile_number].pdx,
l_tccp->prcw, l_data_size); | 8828 memcpy(p_j2k->cstr_info->tile[p_j2k->m_current_tile_number].pdx,
l_tccp->prcw, l_data_size); |
| 8708 memcpy(p_j2k->cstr_info->tile[p_j2k->m_current_tile_number].pdy,
l_tccp->prch, l_data_size); | 8829 memcpy(p_j2k->cstr_info->tile[p_j2k->m_current_tile_number].pdy,
l_tccp->prch, l_data_size); |
| 8709 } | 8830 } |
| 8710 /* << INDEX */ | 8831 /* << INDEX */ |
| 8711 #endif | 8832 #endif |
| 8712 | 8833 |
| 8713 return OPJ_TRUE; | 8834 return OPJ_TRUE; |
| 8714 } | 8835 } |
| 8715 | 8836 |
| 8716 void opj_j2k_copy_tile_component_parameters( opj_j2k_t *p_j2k ) | 8837 static void opj_j2k_copy_tile_component_parameters( opj_j2k_t *p_j2k ) |
| 8717 { | 8838 { |
| 8718 /* loop */ | 8839 /* loop */ |
| 8719 OPJ_UINT32 i; | 8840 OPJ_UINT32 i; |
| 8720 opj_cp_t *l_cp = NULL; | 8841 opj_cp_t *l_cp = NULL; |
| 8721 opj_tcp_t *l_tcp = NULL; | 8842 opj_tcp_t *l_tcp = NULL; |
| 8722 opj_tccp_t *l_ref_tccp = NULL, *l_copied_tccp = NULL; | 8843 opj_tccp_t *l_ref_tccp = NULL, *l_copied_tccp = NULL; |
| 8723 OPJ_UINT32 l_prc_size; | 8844 OPJ_UINT32 l_prc_size; |
| 8724 | 8845 |
| 8725 /* preconditions */ | 8846 /* preconditions */ |
| 8726 assert(p_j2k != 00); | 8847 assert(p_j2k != 00); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 8739 l_copied_tccp->cblkw = l_ref_tccp->cblkw; | 8860 l_copied_tccp->cblkw = l_ref_tccp->cblkw; |
| 8740 l_copied_tccp->cblkh = l_ref_tccp->cblkh; | 8861 l_copied_tccp->cblkh = l_ref_tccp->cblkh; |
| 8741 l_copied_tccp->cblksty = l_ref_tccp->cblksty; | 8862 l_copied_tccp->cblksty = l_ref_tccp->cblksty; |
| 8742 l_copied_tccp->qmfbid = l_ref_tccp->qmfbid; | 8863 l_copied_tccp->qmfbid = l_ref_tccp->qmfbid; |
| 8743 memcpy(l_copied_tccp->prcw,l_ref_tccp->prcw,l_prc_size); | 8864 memcpy(l_copied_tccp->prcw,l_ref_tccp->prcw,l_prc_size); |
| 8744 memcpy(l_copied_tccp->prch,l_ref_tccp->prch,l_prc_size); | 8865 memcpy(l_copied_tccp->prch,l_ref_tccp->prch,l_prc_size); |
| 8745 ++l_copied_tccp; | 8866 ++l_copied_tccp; |
| 8746 } | 8867 } |
| 8747 } | 8868 } |
| 8748 | 8869 |
| 8749 OPJ_UINT32 opj_j2k_get_SQcd_SQcc_size ( opj_j2k_t *p_j2k, | 8870 static OPJ_UINT32 opj_j2k_get_SQcd_SQcc_size ( opj_j2k_t *p_j2k, |
| 8750 OPJ_UINT
32 p_tile_no, | 8871 OPJ_UINT
32 p_tile_no, |
| 8751 OPJ_UINT
32 p_comp_no ) | 8872 OPJ_UINT
32 p_comp_no ) |
| 8752 { | 8873 { |
| 8753 OPJ_UINT32 l_num_bands; | 8874 OPJ_UINT32 l_num_bands; |
| 8754 | 8875 |
| 8755 opj_cp_t *l_cp = 00; | 8876 opj_cp_t *l_cp = 00; |
| 8756 opj_tcp_t *l_tcp = 00; | 8877 opj_tcp_t *l_tcp = 00; |
| 8757 opj_tccp_t *l_tccp = 00; | 8878 opj_tccp_t *l_tccp = 00; |
| 8758 | 8879 |
| 8759 /* preconditions */ | 8880 /* preconditions */ |
| (...skipping 10 matching lines...) Expand all Loading... |
| 8770 l_num_bands = (l_tccp->qntsty == J2K_CCP_QNTSTY_SIQNT) ? 1 : (l_tccp->nu
mresolutions * 3 - 2); | 8891 l_num_bands = (l_tccp->qntsty == J2K_CCP_QNTSTY_SIQNT) ? 1 : (l_tccp->nu
mresolutions * 3 - 2); |
| 8771 | 8892 |
| 8772 if (l_tccp->qntsty == J2K_CCP_QNTSTY_NOQNT) { | 8893 if (l_tccp->qntsty == J2K_CCP_QNTSTY_NOQNT) { |
| 8773 return 1 + l_num_bands; | 8894 return 1 + l_num_bands; |
| 8774 } | 8895 } |
| 8775 else { | 8896 else { |
| 8776 return 1 + 2*l_num_bands; | 8897 return 1 + 2*l_num_bands; |
| 8777 } | 8898 } |
| 8778 } | 8899 } |
| 8779 | 8900 |
| 8780 OPJ_BOOL opj_j2k_write_SQcd_SQcc( opj_j2k_t *p_j2k, | 8901 static OPJ_BOOL opj_j2k_write_SQcd_SQcc( opj_j2k_t *p_j2k, |
| 8781 OPJ_UINT32 p_til
e_no, | 8902 OPJ_UINT32 p_til
e_no, |
| 8782 OPJ_UINT32 p_com
p_no, | 8903 OPJ_UINT32 p_com
p_no, |
| 8783 OPJ_BYTE * p_dat
a, | 8904 OPJ_BYTE * p_dat
a, |
| 8784 OPJ_UINT32 * p_h
eader_size, | 8905 OPJ_UINT32 * p_h
eader_size, |
| 8785 struct opj_event
_mgr * p_manager ) | 8906 struct opj_event
_mgr * p_manager ) |
| 8786 { | 8907 { |
| 8787 OPJ_UINT32 l_header_size; | 8908 OPJ_UINT32 l_header_size; |
| 8788 OPJ_UINT32 l_band_no, l_num_bands; | 8909 OPJ_UINT32 l_band_no, l_num_bands; |
| 8789 OPJ_UINT32 l_expn,l_mant; | 8910 OPJ_UINT32 l_expn,l_mant; |
| 8790 | 8911 |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8843 opj_write_bytes(p_data, (l_expn << 11) + l_mant, 2);
/* SPqcx_i */ | 8964 opj_write_bytes(p_data, (l_expn << 11) + l_mant, 2);
/* SPqcx_i */ |
| 8844 p_data += 2; | 8965 p_data += 2; |
| 8845 } | 8966 } |
| 8846 } | 8967 } |
| 8847 | 8968 |
| 8848 *p_header_size = *p_header_size - l_header_size; | 8969 *p_header_size = *p_header_size - l_header_size; |
| 8849 | 8970 |
| 8850 return OPJ_TRUE; | 8971 return OPJ_TRUE; |
| 8851 } | 8972 } |
| 8852 | 8973 |
| 8853 OPJ_BOOL opj_j2k_read_SQcd_SQcc(opj_j2k_t *p_j2k, | 8974 static OPJ_BOOL opj_j2k_read_SQcd_SQcc(opj_j2k_t *p_j2k, |
| 8854 OPJ_UINT32 p_comp_no
, | 8975 OPJ_UINT32 p_comp_no
, |
| 8855 OPJ_BYTE* p_header_d
ata, | 8976 OPJ_BYTE* p_header_d
ata, |
| 8856 OPJ_UINT32 * p_heade
r_size, | 8977 OPJ_UINT32 * p_heade
r_size, |
| 8857 opj_event_mgr_t * p_
manager | 8978 opj_event_mgr_t * p_
manager |
| 8858 ) | 8979 ) |
| 8859 { | 8980 { |
| 8860 /* loop*/ | 8981 /* loop*/ |
| 8861 OPJ_UINT32 l_band_no; | 8982 OPJ_UINT32 l_band_no; |
| 8862 opj_cp_t *l_cp = 00; | 8983 opj_cp_t *l_cp = 00; |
| 8863 opj_tcp_t *l_tcp = 00; | 8984 opj_tcp_t *l_tcp = 00; |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8960 l_tccp->stepsizes[l_band_no].expn = | 9081 l_tccp->stepsizes[l_band_no].expn = |
| 8961 ((OPJ_INT32)(l_tccp->stepsizes[0].expn) - (OPJ_I
NT32)((l_band_no - 1) / 3) > 0) ? | 9082 ((OPJ_INT32)(l_tccp->stepsizes[0].expn) - (OPJ_I
NT32)((l_band_no - 1) / 3) > 0) ? |
| 8962 (OPJ_INT32)(l_tccp->stepsizes[0].expn) -
(OPJ_INT32)((l_band_no - 1) / 3) : 0; | 9083 (OPJ_INT32)(l_tccp->stepsizes[0].expn) -
(OPJ_INT32)((l_band_no - 1) / 3) : 0; |
| 8963 l_tccp->stepsizes[l_band_no].mant = l_tccp->stepsizes[0]
.mant; | 9084 l_tccp->stepsizes[l_band_no].mant = l_tccp->stepsizes[0]
.mant; |
| 8964 } | 9085 } |
| 8965 } | 9086 } |
| 8966 | 9087 |
| 8967 return OPJ_TRUE; | 9088 return OPJ_TRUE; |
| 8968 } | 9089 } |
| 8969 | 9090 |
| 8970 void opj_j2k_copy_tile_quantization_parameters( opj_j2k_t *p_j2k ) | 9091 static void opj_j2k_copy_tile_quantization_parameters( opj_j2k_t *p_j2k ) |
| 8971 { | 9092 { |
| 8972 OPJ_UINT32 i; | 9093 OPJ_UINT32 i; |
| 8973 opj_cp_t *l_cp = NULL; | 9094 opj_cp_t *l_cp = NULL; |
| 8974 opj_tcp_t *l_tcp = NULL; | 9095 opj_tcp_t *l_tcp = NULL; |
| 8975 opj_tccp_t *l_ref_tccp = NULL; | 9096 opj_tccp_t *l_ref_tccp = NULL; |
| 8976 opj_tccp_t *l_copied_tccp = NULL; | 9097 opj_tccp_t *l_copied_tccp = NULL; |
| 8977 OPJ_UINT32 l_size; | 9098 OPJ_UINT32 l_size; |
| 8978 | 9099 |
| 8979 /* preconditions */ | 9100 /* preconditions */ |
| 8980 assert(p_j2k != 00); | 9101 assert(p_j2k != 00); |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9087 opj_j2k_dump_MH_index(p_j2k, out_stream); | 9208 opj_j2k_dump_MH_index(p_j2k, out_stream); |
| 9088 } | 9209 } |
| 9089 | 9210 |
| 9090 /* Dump the codestream index of the current tile */ | 9211 /* Dump the codestream index of the current tile */ |
| 9091 if (flag & OPJ_J2K_TH_IND){ | 9212 if (flag & OPJ_J2K_TH_IND){ |
| 9092 | 9213 |
| 9093 } | 9214 } |
| 9094 | 9215 |
| 9095 } | 9216 } |
| 9096 | 9217 |
| 9097 void opj_j2k_dump_MH_index(opj_j2k_t* p_j2k, FILE* out_stream) | 9218 static void opj_j2k_dump_MH_index(opj_j2k_t* p_j2k, FILE* out_stream) |
| 9098 { | 9219 { |
| 9099 opj_codestream_index_t* cstr_index = p_j2k->cstr_index; | 9220 opj_codestream_index_t* cstr_index = p_j2k->cstr_index; |
| 9100 OPJ_UINT32 it_marker, it_tile, it_tile_part; | 9221 OPJ_UINT32 it_marker, it_tile, it_tile_part; |
| 9101 | 9222 |
| 9102 fprintf(out_stream, "Codestream index from main header: {\n"); | 9223 fprintf(out_stream, "Codestream index from main header: {\n"); |
| 9103 | 9224 |
| 9104 fprintf(out_stream, "\t Main header start position=%" PRIi64 "\n" | 9225 fprintf(out_stream, "\t Main header start position=%" PRIi64 "\n" |
| 9105 "\t Main header end position=%" PRIi64 "\n", | 9226 "\t Main header end position=%" PRIi64 "\n", |
| 9106 cstr_index->main_head_start, cstr_index->main_head_end); | 9227 cstr_index->main_head_start, cstr_index->main_head_end); |
| 9107 | 9228 |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9156 } | 9277 } |
| 9157 fprintf(out_stream,"\t }\n"); | 9278 fprintf(out_stream,"\t }\n"); |
| 9158 } | 9279 } |
| 9159 } | 9280 } |
| 9160 | 9281 |
| 9161 fprintf(out_stream,"}\n"); | 9282 fprintf(out_stream,"}\n"); |
| 9162 | 9283 |
| 9163 } | 9284 } |
| 9164 | 9285 |
| 9165 | 9286 |
| 9166 void opj_j2k_dump_MH_info(opj_j2k_t* p_j2k, FILE* out_stream) | 9287 static void opj_j2k_dump_MH_info(opj_j2k_t* p_j2k, FILE* out_stream) |
| 9167 { | 9288 { |
| 9168 | 9289 |
| 9169 fprintf(out_stream, "Codestream info from main header: {\n"); | 9290 fprintf(out_stream, "Codestream info from main header: {\n"); |
| 9170 | 9291 |
| 9171 fprintf(out_stream, "\t tx0=%d, ty0=%d\n", p_j2k->m_cp.tx0, p_j2k->m_cp.
ty0); | 9292 fprintf(out_stream, "\t tx0=%d, ty0=%d\n", p_j2k->m_cp.tx0, p_j2k->m_cp.
ty0); |
| 9172 fprintf(out_stream, "\t tdx=%d, tdy=%d\n", p_j2k->m_cp.tdx, p_j2k->m_cp.
tdy); | 9293 fprintf(out_stream, "\t tdx=%d, tdy=%d\n", p_j2k->m_cp.tdx, p_j2k->m_cp.
tdy); |
| 9173 fprintf(out_stream, "\t tw=%d, th=%d\n", p_j2k->m_cp.tw, p_j2k->m_cp.th)
; | 9294 fprintf(out_stream, "\t tw=%d, th=%d\n", p_j2k->m_cp.tw, p_j2k->m_cp.th)
; |
| 9174 opj_j2k_dump_tile_info(p_j2k->m_specific_param.m_decoder.m_default_tcp,(
OPJ_INT32)p_j2k->m_private_image->numcomps, out_stream); | 9295 opj_j2k_dump_tile_info(p_j2k->m_specific_param.m_decoder.m_default_tcp,(
OPJ_INT32)p_j2k->m_private_image->numcomps, out_stream); |
| 9175 fprintf(out_stream, "}\n"); | 9296 fprintf(out_stream, "}\n"); |
| 9176 } | 9297 } |
| (...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9396 /* Packet index (NOT USED)*/ | 9517 /* Packet index (NOT USED)*/ |
| 9397 l_cstr_index->tile_index[it_tile].nb_packet = 0; | 9518 l_cstr_index->tile_index[it_tile].nb_packet = 0; |
| 9398 l_cstr_index->tile_index[it_tile].packet_index = NULL; | 9519 l_cstr_index->tile_index[it_tile].packet_index = NULL; |
| 9399 | 9520 |
| 9400 } | 9521 } |
| 9401 } | 9522 } |
| 9402 | 9523 |
| 9403 return l_cstr_index; | 9524 return l_cstr_index; |
| 9404 } | 9525 } |
| 9405 | 9526 |
| 9406 OPJ_BOOL opj_j2k_allocate_tile_element_cstr_index(opj_j2k_t *p_j2k) | 9527 static OPJ_BOOL opj_j2k_allocate_tile_element_cstr_index(opj_j2k_t *p_j2k) |
| 9407 { | 9528 { |
| 9408 OPJ_UINT32 it_tile=0; | 9529 OPJ_UINT32 it_tile=0; |
| 9409 | 9530 |
| 9410 p_j2k->cstr_index->nb_of_tiles = p_j2k->m_cp.tw * p_j2k->m_cp.th; | 9531 p_j2k->cstr_index->nb_of_tiles = p_j2k->m_cp.tw * p_j2k->m_cp.th; |
| 9411 p_j2k->cstr_index->tile_index = (opj_tile_index_t*)opj_calloc(p_j2k->cst
r_index->nb_of_tiles, sizeof(opj_tile_index_t)); | 9532 p_j2k->cstr_index->tile_index = (opj_tile_index_t*)opj_calloc(p_j2k->cst
r_index->nb_of_tiles, sizeof(opj_tile_index_t)); |
| 9412 if (!p_j2k->cstr_index->tile_index) | 9533 if (!p_j2k->cstr_index->tile_index) |
| 9413 return OPJ_FALSE; | 9534 return OPJ_FALSE; |
| 9414 | 9535 |
| 9415 for (it_tile=0; it_tile < p_j2k->cstr_index->nb_of_tiles; it_tile++){ | 9536 for (it_tile=0; it_tile < p_j2k->cstr_index->nb_of_tiles; it_tile++){ |
| 9416 p_j2k->cstr_index->tile_index[it_tile].maxmarknum = 100; | 9537 p_j2k->cstr_index->tile_index[it_tile].maxmarknum = 100; |
| 9417 p_j2k->cstr_index->tile_index[it_tile].marknum = 0; | 9538 p_j2k->cstr_index->tile_index[it_tile].marknum = 0; |
| 9418 p_j2k->cstr_index->tile_index[it_tile].marker = (opj_marker_info
_t*) | 9539 p_j2k->cstr_index->tile_index[it_tile].marker = (opj_marker_info
_t*) |
| 9419 opj_calloc(p_j2k->cstr_index->tile_index[it_tile
].maxmarknum, sizeof(opj_marker_info_t)); | 9540 opj_calloc(p_j2k->cstr_index->tile_index[it_tile
].maxmarknum, sizeof(opj_marker_info_t)); |
| 9420 if (!p_j2k->cstr_index->tile_index[it_tile].marker) | 9541 if (!p_j2k->cstr_index->tile_index[it_tile].marker) |
| 9421 return OPJ_FALSE; | 9542 return OPJ_FALSE; |
| 9422 } | 9543 } |
| 9423 | 9544 |
| 9424 return OPJ_TRUE; | 9545 return OPJ_TRUE; |
| 9425 } | 9546 } |
| 9426 | 9547 |
| 9427 OPJ_BOOL opj_j2k_decode_tiles ( opj_j2k_t *p_j2k, | 9548 static OPJ_BOOL opj_j2k_decode_tiles ( opj_j2k_t *p_j2k, |
| 9428 opj_stream_private_t
*p_stream, | 9549 opj_stream_private_t
*p_stream, |
| 9429 opj_event_mgr_t * p_
manager) | 9550 opj_event_mgr_t * p_
manager) |
| 9430 { | 9551 { |
| 9431 OPJ_BOOL l_go_on = OPJ_TRUE; | 9552 OPJ_BOOL l_go_on = OPJ_TRUE; |
| 9432 OPJ_UINT32 l_current_tile_no; | 9553 OPJ_UINT32 l_current_tile_no; |
| 9433 OPJ_UINT32 l_data_size,l_max_data_size; | 9554 OPJ_UINT32 l_data_size,l_max_data_size; |
| 9434 OPJ_INT32 l_tile_x0,l_tile_y0,l_tile_x1,l_tile_y1; | 9555 OPJ_INT32 l_tile_x0,l_tile_y0,l_tile_x1,l_tile_y1; |
| 9435 OPJ_UINT32 l_nb_comps; | 9556 OPJ_UINT32 l_nb_comps; |
| 9436 OPJ_BYTE * l_current_data; | 9557 OPJ_BYTE * l_current_data; |
| 9437 OPJ_UINT32 nr_tiles = 0; | 9558 OPJ_UINT32 nr_tiles = 0; |
| 9438 | 9559 |
| 9439 l_current_data = (OPJ_BYTE*)opj_malloc(1000); | 9560 l_current_data = (OPJ_BYTE*)opj_malloc(1000); |
| 9440 if (! l_current_data) { | 9561 if (! l_current_data) { |
| 9441 opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to decode
tiles\n"); | 9562 opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to decode
tiles\n"); |
| 9442 return OPJ_FALSE; | 9563 return OPJ_FALSE; |
| 9443 } | 9564 } |
| 9444 l_max_data_size = 1000; | 9565 l_max_data_size = 1000; |
| 9445 | 9566 |
| 9446 while (OPJ_TRUE) { | 9567 » » for (;;) { |
| 9447 if (! opj_j2k_read_tile_header( p_j2k, | 9568 if (! opj_j2k_read_tile_header( p_j2k, |
| 9448 &l_current_tile_no, | 9569 &l_current_tile_no, |
| 9449 &l_data_size, | 9570 &l_data_size, |
| 9450 &l_tile_x0, &l_tile_y0, | 9571 &l_tile_x0, &l_tile_y0, |
| 9451 &l_tile_x1, &l_tile_y1, | 9572 &l_tile_x1, &l_tile_y1, |
| 9452 &l_nb_comps, | 9573 &l_nb_comps, |
| 9453 &l_go_on, | 9574 &l_go_on, |
| 9454 p_stream, | 9575 p_stream, |
| 9455 p_manager)) { | 9576 p_manager)) { |
| 9456 opj_free(l_current_data); | 9577 opj_free(l_current_data); |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9493 } | 9614 } |
| 9494 | 9615 |
| 9495 opj_free(l_current_data); | 9616 opj_free(l_current_data); |
| 9496 | 9617 |
| 9497 return OPJ_TRUE; | 9618 return OPJ_TRUE; |
| 9498 } | 9619 } |
| 9499 | 9620 |
| 9500 /** | 9621 /** |
| 9501 * Sets up the procedures to do on decoding data. Developpers wanting to extend
the library can add their own reading procedures. | 9622 * Sets up the procedures to do on decoding data. Developpers wanting to extend
the library can add their own reading procedures. |
| 9502 */ | 9623 */ |
| 9503 static void opj_j2k_setup_decoding (opj_j2k_t *p_j2k) | 9624 static OPJ_BOOL opj_j2k_setup_decoding (opj_j2k_t *p_j2k, opj_event_mgr_t * p_ma
nager) |
| 9504 { | 9625 { |
| 9505 /* preconditions*/ | 9626 /* preconditions*/ |
| 9506 assert(p_j2k != 00); | 9627 assert(p_j2k != 00); |
| 9628 assert(p_manager != 00); |
| 9507 | 9629 |
| 9508 opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(opj_procedure)
opj_j2k_decode_tiles); | 9630 if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(opj_proc
edure)opj_j2k_decode_tiles, p_manager)) { |
| 9631 return OPJ_FALSE; |
| 9632 } |
| 9509 /* DEVELOPER CORNER, add your custom procedures */ | 9633 /* DEVELOPER CORNER, add your custom procedures */ |
| 9510 | 9634 |
| 9635 return OPJ_TRUE; |
| 9511 } | 9636 } |
| 9512 | 9637 |
| 9513 /* | 9638 /* |
| 9514 * Read and decode one tile. | 9639 * Read and decode one tile. |
| 9515 */ | 9640 */ |
| 9516 static OPJ_BOOL opj_j2k_decode_one_tile ( opj_j2k_t *p_j2k, | 9641 static OPJ_BOOL opj_j2k_decode_one_tile ( opj_j2k_t *p_j2k, |
| 9517 opj_
stream_private_t *p_stream, | 9642 opj_
stream_private_t *p_stream, |
| 9518 opj_
event_mgr_t * p_manager) | 9643 opj_
event_mgr_t * p_manager) |
| 9519 { | 9644 { |
| 9520 OPJ_BOOL l_go_on = OPJ_TRUE; | 9645 OPJ_BOOL l_go_on = OPJ_TRUE; |
| (...skipping 22 matching lines...) Expand all Loading... |
| 9543 /* Move into the codestream to the first SOT used to decode the desired
tile */ | 9668 /* Move into the codestream to the first SOT used to decode the desired
tile */ |
| 9544 l_tile_no_to_dec = (OPJ_UINT32)p_j2k->m_specific_param.m_decoder.m_tile_
ind_to_dec; | 9669 l_tile_no_to_dec = (OPJ_UINT32)p_j2k->m_specific_param.m_decoder.m_tile_
ind_to_dec; |
| 9545 if (p_j2k->cstr_index->tile_index) | 9670 if (p_j2k->cstr_index->tile_index) |
| 9546 if(p_j2k->cstr_index->tile_index->tp_index) | 9671 if(p_j2k->cstr_index->tile_index->tp_index) |
| 9547 { | 9672 { |
| 9548 if ( ! p_j2k->cstr_index->tile_index[l_tile_no_to_dec].n
b_tps) { | 9673 if ( ! p_j2k->cstr_index->tile_index[l_tile_no_to_dec].n
b_tps) { |
| 9549 /* the index for this tile has not been built, | 9674 /* the index for this tile has not been built, |
| 9550 * so move to the last SOT read */ | 9675 * so move to the last SOT read */ |
| 9551 if ( !(opj_stream_read_seek(p_stream, p_j2k->m_s
pecific_param.m_decoder.m_last_sot_read_pos+2, p_manager)) ){ | 9676 if ( !(opj_stream_read_seek(p_stream, p_j2k->m_s
pecific_param.m_decoder.m_last_sot_read_pos+2, p_manager)) ){ |
| 9552 opj_event_msg(p_manager, EVT_ERROR, "Pro
blem with seek function\n"); | 9677 opj_event_msg(p_manager, EVT_ERROR, "Pro
blem with seek function\n"); |
| 9553 opj_free(l_current_data); | 9678 opj_free(l_current_data); |
| 9554 return OPJ_FALSE; | 9679 return OPJ_FALSE; |
| 9555 } | 9680 } |
| 9556 } | 9681 } |
| 9557 else{ | 9682 else{ |
| 9558 if ( !(opj_stream_read_seek(p_stream, p_j2k->cst
r_index->tile_index[l_tile_no_to_dec].tp_index[0].start_pos+2, p_manager)) ) { | 9683 if ( !(opj_stream_read_seek(p_stream, p_j2k->cst
r_index->tile_index[l_tile_no_to_dec].tp_index[0].start_pos+2, p_manager)) ) { |
| 9559 opj_event_msg(p_manager, EVT_ERROR, "Pro
blem with seek function\n"); | 9684 opj_event_msg(p_manager, EVT_ERROR, "Pro
blem with seek function\n"); |
| 9560 opj_free(l_current_data); | 9685 opj_free(l_current_data); |
| 9561 return OPJ_FALSE; | 9686 return OPJ_FALSE; |
| 9562 } | 9687 } |
| 9563 } | 9688 } |
| 9564 /* Special case if we have previously read the EOC marke
r (if the previous tile getted is the last ) */ | 9689 /* Special case if we have previously read the EOC marke
r (if the previous tile getted is the last ) */ |
| 9565 if(p_j2k->m_specific_param.m_decoder.m_state == J2K_STAT
E_EOC) | 9690 if(p_j2k->m_specific_param.m_decoder.m_state == J2K_STAT
E_EOC) |
| 9566 p_j2k->m_specific_param.m_decoder.m_state = J2K_
STATE_TPHSOT; | 9691 p_j2k->m_specific_param.m_decoder.m_state = J2K_
STATE_TPHSOT; |
| 9567 } | 9692 } |
| 9568 | 9693 |
| 9569 while (OPJ_TRUE) { | 9694 » » for (;;) { |
| 9570 if (! opj_j2k_read_tile_header( p_j2k, | 9695 if (! opj_j2k_read_tile_header( p_j2k, |
| 9571 &l_current_tile_no, | 9696 &l_current_tile_no, |
| 9572 &l_data_size, | 9697 &l_data_size, |
| 9573 &l_tile_x0, &l_tile_y0, | 9698 &l_tile_x0, &l_tile_y0, |
| 9574 &l_tile_x1, &l_tile_y1, | 9699 &l_tile_x1, &l_tile_y1, |
| 9575 &l_nb_comps, | 9700 &l_nb_comps, |
| 9576 &l_go_on, | 9701 &l_go_on, |
| 9577 p_stream, | 9702 p_stream, |
| 9578 p_manager)) { | 9703 p_manager)) { |
| 9579 opj_free(l_current_data); | 9704 opj_free(l_current_data); |
| (...skipping 28 matching lines...) Expand all Loading... |
| 9608 opj_free(l_current_data); | 9733 opj_free(l_current_data); |
| 9609 return OPJ_FALSE; | 9734 return OPJ_FALSE; |
| 9610 } | 9735 } |
| 9611 opj_event_msg(p_manager, EVT_INFO, "Image data has been updated
with tile %d.\n\n", l_current_tile_no); | 9736 opj_event_msg(p_manager, EVT_INFO, "Image data has been updated
with tile %d.\n\n", l_current_tile_no); |
| 9612 | 9737 |
| 9613 if(l_current_tile_no == l_tile_no_to_dec) | 9738 if(l_current_tile_no == l_tile_no_to_dec) |
| 9614 { | 9739 { |
| 9615 /* move into the codestream to the the first SOT (FIXME
or not move?)*/ | 9740 /* move into the codestream to the the first SOT (FIXME
or not move?)*/ |
| 9616 if (!(opj_stream_read_seek(p_stream, p_j2k->cstr_index->
main_head_end + 2, p_manager) ) ) { | 9741 if (!(opj_stream_read_seek(p_stream, p_j2k->cstr_index->
main_head_end + 2, p_manager) ) ) { |
| 9617 opj_event_msg(p_manager, EVT_ERROR, "Problem wit
h seek function\n"); | 9742 opj_event_msg(p_manager, EVT_ERROR, "Problem wit
h seek function\n"); |
| 9743 opj_free(l_current_data); |
| 9618 return OPJ_FALSE; | 9744 return OPJ_FALSE; |
| 9619 } | 9745 } |
| 9620 break; | 9746 break; |
| 9621 } | 9747 } |
| 9622 else { | 9748 else { |
| 9623 opj_event_msg(p_manager, EVT_WARNING, "Tile read, decode
and updated is not the desired (%d vs %d).\n", l_current_tile_no, l_tile_no_to_
dec); | 9749 opj_event_msg(p_manager, EVT_WARNING, "Tile read, decode
and updated is not the desired (%d vs %d).\n", l_current_tile_no, l_tile_no_to_
dec); |
| 9624 } | 9750 } |
| 9625 | 9751 |
| 9626 } | 9752 } |
| 9627 | 9753 |
| 9628 opj_free(l_current_data); | 9754 opj_free(l_current_data); |
| 9629 | 9755 |
| 9630 return OPJ_TRUE; | 9756 return OPJ_TRUE; |
| 9631 } | 9757 } |
| 9632 | 9758 |
| 9633 /** | 9759 /** |
| 9634 * Sets up the procedures to do on decoding one tile. Developpers wanting to ext
end the library can add their own reading procedures. | 9760 * Sets up the procedures to do on decoding one tile. Developpers wanting to ext
end the library can add their own reading procedures. |
| 9635 */ | 9761 */ |
| 9636 static void opj_j2k_setup_decoding_tile (opj_j2k_t *p_j2k) | 9762 static OPJ_BOOL opj_j2k_setup_decoding_tile (opj_j2k_t *p_j2k, opj_event_mgr_t *
p_manager) |
| 9637 { | 9763 { |
| 9638 /* preconditions*/ | 9764 /* preconditions*/ |
| 9639 assert(p_j2k != 00); | 9765 assert(p_j2k != 00); |
| 9766 assert(p_manager != 00); |
| 9640 | 9767 |
| 9641 opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(opj_procedure)
opj_j2k_decode_one_tile); | 9768 if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(opj_proc
edure)opj_j2k_decode_one_tile, p_manager)) { |
| 9769 return OPJ_FALSE; |
| 9770 } |
| 9642 /* DEVELOPER CORNER, add your custom procedures */ | 9771 /* DEVELOPER CORNER, add your custom procedures */ |
| 9643 | 9772 |
| 9773 return OPJ_TRUE; |
| 9644 } | 9774 } |
| 9645 | 9775 |
| 9646 OPJ_BOOL opj_j2k_decode(opj_j2k_t * p_j2k, | 9776 OPJ_BOOL opj_j2k_decode(opj_j2k_t * p_j2k, |
| 9647 opj_stream_private_t * p_stream, | 9777 opj_stream_private_t * p_stream, |
| 9648 opj_image_t * p_image, | 9778 opj_image_t * p_image, |
| 9649 opj_event_mgr_t * p_manager) | 9779 opj_event_mgr_t * p_manager) |
| 9650 { | 9780 { |
| 9651 OPJ_UINT32 compno; | 9781 OPJ_UINT32 compno; |
| 9652 | 9782 |
| 9653 if (!p_image) | 9783 if (!p_image) |
| 9654 return OPJ_FALSE; | 9784 return OPJ_FALSE; |
| 9655 | 9785 » |
| 9656 p_j2k->m_output_image = opj_image_create0(); | 9786 p_j2k->m_output_image = opj_image_create0(); |
| 9657 if (! (p_j2k->m_output_image)) { | 9787 if (! (p_j2k->m_output_image)) { |
| 9658 return OPJ_FALSE; | 9788 return OPJ_FALSE; |
| 9659 } | 9789 } |
| 9660 opj_copy_image_header(p_image, p_j2k->m_output_image); | 9790 opj_copy_image_header(p_image, p_j2k->m_output_image); |
| 9661 | 9791 |
| 9662 /* customization of the decoding */ | 9792 /* customization of the decoding */ |
| 9663 opj_j2k_setup_decoding(p_j2k); | 9793 opj_j2k_setup_decoding(p_j2k, p_manager); |
| 9664 | 9794 |
| 9665 /* Decode the codestream */ | 9795 /* Decode the codestream */ |
| 9666 if (! opj_j2k_exec (p_j2k,p_j2k->m_procedure_list,p_stream,p_manager)) { | 9796 if (! opj_j2k_exec (p_j2k,p_j2k->m_procedure_list,p_stream,p_manager)) { |
| 9667 opj_image_destroy(p_j2k->m_private_image); | 9797 opj_image_destroy(p_j2k->m_private_image); |
| 9668 p_j2k->m_private_image = NULL; | 9798 p_j2k->m_private_image = NULL; |
| 9669 return OPJ_FALSE; | 9799 return OPJ_FALSE; |
| 9670 } | 9800 } |
| 9671 | 9801 |
| 9672 /* Move data and copy one information from codec to output image*/ | 9802 /* Move data and copy one information from codec to output image*/ |
| 9673 for (compno = 0; compno < p_image->numcomps; compno++) { | 9803 for (compno = 0; compno < p_image->numcomps; compno++) { |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9749 /* Create the ouput image from the information previously computed*/ | 9879 /* Create the ouput image from the information previously computed*/ |
| 9750 p_j2k->m_output_image = opj_image_create0(); | 9880 p_j2k->m_output_image = opj_image_create0(); |
| 9751 if (! (p_j2k->m_output_image)) { | 9881 if (! (p_j2k->m_output_image)) { |
| 9752 return OPJ_FALSE; | 9882 return OPJ_FALSE; |
| 9753 } | 9883 } |
| 9754 opj_copy_image_header(p_image, p_j2k->m_output_image); | 9884 opj_copy_image_header(p_image, p_j2k->m_output_image); |
| 9755 | 9885 |
| 9756 p_j2k->m_specific_param.m_decoder.m_tile_ind_to_dec = (OPJ_INT32)tile_in
dex; | 9886 p_j2k->m_specific_param.m_decoder.m_tile_ind_to_dec = (OPJ_INT32)tile_in
dex; |
| 9757 | 9887 |
| 9758 /* customization of the decoding */ | 9888 /* customization of the decoding */ |
| 9759 opj_j2k_setup_decoding_tile(p_j2k); | 9889 opj_j2k_setup_decoding_tile(p_j2k, p_manager); |
| 9760 | 9890 |
| 9761 /* Decode the codestream */ | 9891 /* Decode the codestream */ |
| 9762 if (! opj_j2k_exec (p_j2k,p_j2k->m_procedure_list,p_stream,p_manager)) { | 9892 if (! opj_j2k_exec (p_j2k,p_j2k->m_procedure_list,p_stream,p_manager)) { |
| 9763 opj_image_destroy(p_j2k->m_private_image); | 9893 opj_image_destroy(p_j2k->m_private_image); |
| 9764 p_j2k->m_private_image = NULL; | 9894 p_j2k->m_private_image = NULL; |
| 9765 return OPJ_FALSE; | 9895 return OPJ_FALSE; |
| 9766 } | 9896 } |
| 9767 | 9897 |
| 9768 /* Move data and copy one information from codec to output image*/ | 9898 /* Move data and copy one information from codec to output image*/ |
| 9769 for (compno = 0; compno < p_image->numcomps; compno++) { | 9899 for (compno = 0; compno < p_image->numcomps; compno++) { |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9844
l_tilec->data = l_img_comp->data; | 9974
l_tilec->data = l_img_comp->data; |
| 9845
l_tilec->ownsData = OPJ_FALSE; | 9975
l_tilec->ownsData = OPJ_FALSE; |
| 9846 } else { | 9976 } else { |
| 9847
if(! opj_alloc_tile_component_data(l_tilec)) { | 9977
if(! opj_alloc_tile_component_data(l_tilec)) { |
| 9848
opj_event_msg(p_manager, EVT_ERROR, "Error alloc
ating tile component data." ); | 9978
opj_event_msg(p_manager, EVT_ERROR, "Error alloc
ating tile component data." ); |
| 9849
if (l_current_data) { | 9979
if (l_current_data) { |
| 9850
opj_free(l_current_data); | 9980
opj_free(l_current_data); |
| 9851
} | 9981
} |
| 9852
return OPJ_FALSE; | 9982
return OPJ_FALSE; |
| 9853
} | 9983
} |
| 9854
opj_alloc_tile_component_data(l_tilec); | |
| 9855 } | 9984 } |
| 9856 } | 9985 } |
| 9857 l_current_tile_size = opj_tcd_get_encoded_tile_size(p_j2k->m_tcd
); | 9986 l_current_tile_size = opj_tcd_get_encoded_tile_size(p_j2k->m_tcd
); |
| 9858 if (l_nb_tiles > 1) { | 9987 if (l_nb_tiles > 1) { |
| 9859 if (l_current_tile_size > l_max_tile_size) { | 9988 if (l_current_tile_size > l_max_tile_size) { |
| 9860
OPJ_BYTE *l_new_current_data = (OPJ_BYTE *) opj_realloc(
l_current_data, l_current_tile_size); | 9989
OPJ_BYTE *l_new_current_data = (OPJ_BYTE *) opj_realloc(
l_current_data, l_current_tile_size); |
| 9861
if (! l_new_current_data) { | 9990
if (! l_new_current_data) { |
| 9862
if (l_current_data) { | 9991
if (l_current_data) { |
| 9863
opj_free(l_current_data); | 9992
opj_free(l_current_data); |
| 9864
} | 9993
} |
| 9865
opj_event_msg(p_manager, EVT_ERROR, "Not enough
memory to encode all tiles\n"); | 9994
opj_event_msg(p_manager, EVT_ERROR, "Not enough
memory to encode all tiles\n"); |
| 9866
return OPJ_FALSE; | 9995
return OPJ_FALSE; |
| 9867
} | 9996
} |
| 9868
l_current_data = l_new_current_d
ata; | 9997
l_current_data = l_new_current_d
ata; |
| 9869
l_max_tile_size = l_current_tile
_size; | 9998
l_max_tile_size = l_current_tile
_size; |
| 9870 } | 9999 } |
| 9871 | 10000 |
| 9872 /* copy image data (32 bit) to l_current_data as contigu
ous, all-component, zero offset buffer */ | 10001 /* copy image data (32 bit) to l_current_data as contigu
ous, all-component, zero offset buffer */ |
| 9873 /* 32 bit components @ 8 bit precision get converted to
8 bit */ | 10002 /* 32 bit components @ 8 bit precision get converted to
8 bit */ |
| 9874 /* 32 bit components @ 16 bit precision get converted to
16 bit */ | 10003 /* 32 bit components @ 16 bit precision get converted to
16 bit */ |
| 9875 opj_j2k_get_tile_data(p_j2k->m_tcd,l_current_data); | 10004 opj_j2k_get_tile_data(p_j2k->m_tcd,l_current_data); |
| 9876 | 10005 |
| 9877 /* now copy this data into the tile component */ | 10006 /* now copy this data into the tile component */ |
| 9878 if (! opj_tcd_copy_tile_data(p_j2k->m_tcd,l_current_data
,l_current_tile_size)) { | 10007 if (! opj_tcd_copy_tile_data(p_j2k->m_tcd,l_current_data
,l_current_tile_size)) { |
| 9879
opj_event_msg(p_manager, EVT_ERR
OR, "Size mismatch between tile data and sent data." ); | 10008
opj_event_msg(p_manager, EVT_ERR
OR, "Size mismatch between tile data and sent data." ); |
| 10009
opj_free(l_current_data); |
| 9880
return OPJ_FALSE; | 10010
return OPJ_FALSE; |
| 9881 } | 10011 } |
| 9882 } | 10012 } |
| 9883 | 10013 |
| 9884 if (! opj_j2k_post_write_tile (p_j2k,p_stream,p_manager)) { | 10014 if (! opj_j2k_post_write_tile (p_j2k,p_stream,p_manager)) { |
| 10015 if (l_current_data) { |
| 10016 opj_free(l_current_data); |
| 10017 } |
| 9885 return OPJ_FALSE; | 10018 return OPJ_FALSE; |
| 9886 } | 10019 } |
| 9887 } | 10020 } |
| 9888 | 10021 |
| 9889 if (l_current_data) { | 10022 if (l_current_data) { |
| 9890 opj_free(l_current_data); | 10023 opj_free(l_current_data); |
| 9891 } | 10024 } |
| 9892 return OPJ_TRUE; | 10025 return OPJ_TRUE; |
| 9893 } | 10026 } |
| 9894 | 10027 |
| 9895 OPJ_BOOL opj_j2k_end_compress( opj_j2k_t *p_j2k, | 10028 OPJ_BOOL opj_j2k_end_compress( opj_j2k_t *p_j2k, |
| 9896 opj_stream_private_t *p_
stream, | 10029 opj_stream_private_t *p_
stream, |
| 9897 opj_event_mgr_t * p_mana
ger) | 10030 opj_event_mgr_t * p_mana
ger) |
| 9898 { | 10031 { |
| 9899 /* customization of the encoding */ | 10032 /* customization of the encoding */ |
| 9900 opj_j2k_setup_end_compress(p_j2k); | 10033 if (! opj_j2k_setup_end_compress(p_j2k, p_manager)) { |
| 10034 return OPJ_FALSE; |
| 10035 } |
| 9901 | 10036 |
| 9902 if (! opj_j2k_exec (p_j2k, p_j2k->m_procedure_list, p_stream, p_manager)
) | 10037 if (! opj_j2k_exec (p_j2k, p_j2k->m_procedure_list, p_stream, p_manager)
) |
| 9903 { | 10038 { |
| 9904 return OPJ_FALSE; | 10039 return OPJ_FALSE; |
| 9905 } | 10040 } |
| 9906 | 10041 |
| 9907 return OPJ_TRUE; | 10042 return OPJ_TRUE; |
| 9908 } | 10043 } |
| 9909 | 10044 |
| 9910 OPJ_BOOL opj_j2k_start_compress(opj_j2k_t *p_j2k, | 10045 OPJ_BOOL opj_j2k_start_compress(opj_j2k_t *p_j2k, |
| (...skipping 19 matching lines...) Expand all Loading... |
| 9930 for (it_comp = 0 ; it_comp < p_image->numcomps; it_comp++) { | 10065 for (it_comp = 0 ; it_comp < p_image->numcomps; it_comp++) { |
| 9931 if (p_image->comps[it_comp].data) { | 10066 if (p_image->comps[it_comp].data) { |
| 9932 p_j2k->m_private_image->comps[it_comp].data =p_i
mage->comps[it_comp].data; | 10067 p_j2k->m_private_image->comps[it_comp].data =p_i
mage->comps[it_comp].data; |
| 9933 p_image->comps[it_comp].data = NULL; | 10068 p_image->comps[it_comp].data = NULL; |
| 9934 | 10069 |
| 9935 } | 10070 } |
| 9936 } | 10071 } |
| 9937 } | 10072 } |
| 9938 | 10073 |
| 9939 /* customization of the validation */ | 10074 /* customization of the validation */ |
| 9940 opj_j2k_setup_encoding_validation (p_j2k); | 10075 if (! opj_j2k_setup_encoding_validation (p_j2k, p_manager)) { |
| 10076 return OPJ_FALSE; |
| 10077 } |
| 9941 | 10078 |
| 9942 /* validation of the parameters codec */ | 10079 /* validation of the parameters codec */ |
| 9943 if (! opj_j2k_exec(p_j2k,p_j2k->m_validation_list,p_stream,p_manager)) { | 10080 if (! opj_j2k_exec(p_j2k,p_j2k->m_validation_list,p_stream,p_manager)) { |
| 9944 return OPJ_FALSE; | 10081 return OPJ_FALSE; |
| 9945 } | 10082 } |
| 9946 | 10083 |
| 9947 /* customization of the encoding */ | 10084 /* customization of the encoding */ |
| 9948 opj_j2k_setup_header_writing(p_j2k); | 10085 if (! opj_j2k_setup_header_writing(p_j2k, p_manager)) { |
| 10086 return OPJ_FALSE; |
| 10087 } |
| 9949 | 10088 |
| 9950 /* write header */ | 10089 /* write header */ |
| 9951 if (! opj_j2k_exec (p_j2k,p_j2k->m_procedure_list,p_stream,p_manager)) { | 10090 if (! opj_j2k_exec (p_j2k,p_j2k->m_procedure_list,p_stream,p_manager)) { |
| 9952 return OPJ_FALSE; | 10091 return OPJ_FALSE; |
| 9953 } | 10092 } |
| 9954 | 10093 |
| 9955 return OPJ_TRUE; | 10094 return OPJ_TRUE; |
| 9956 } | 10095 } |
| 9957 | 10096 |
| 9958 OPJ_BOOL opj_j2k_pre_write_tile ( opj_j2k_t * p_j2k, | 10097 static OPJ_BOOL opj_j2k_pre_write_tile ( opj_j2k_t * p_j2k, |
| 9959 OPJ_UINT32 p_til
e_index, | 10098 OPJ_UINT32 p_til
e_index, |
| 9960 opj_stream_priva
te_t *p_stream, | 10099 opj_stream_priva
te_t *p_stream, |
| 9961 opj_event_mgr_t
* p_manager ) | 10100 opj_event_mgr_t
* p_manager ) |
| 9962 { | 10101 { |
| 9963 (void)p_stream; | 10102 (void)p_stream; |
| 9964 if (p_tile_index != p_j2k->m_current_tile_number) { | 10103 if (p_tile_index != p_j2k->m_current_tile_number) { |
| 9965 opj_event_msg(p_manager, EVT_ERROR, "The given tile index does n
ot match." ); | 10104 opj_event_msg(p_manager, EVT_ERROR, "The given tile index does n
ot match." ); |
| 9966 return OPJ_FALSE; | 10105 return OPJ_FALSE; |
| 9967 } | 10106 } |
| 9968 | 10107 |
| 9969 opj_event_msg(p_manager, EVT_INFO, "tile number %d / %d\n", p_j2k->m_cur
rent_tile_number + 1, p_j2k->m_cp.tw * p_j2k->m_cp.th); | 10108 opj_event_msg(p_manager, EVT_INFO, "tile number %d / %d\n", p_j2k->m_cur
rent_tile_number + 1, p_j2k->m_cp.tw * p_j2k->m_cp.th); |
| 9970 | 10109 |
| 9971 p_j2k->m_specific_param.m_encoder.m_current_tile_part_number = 0; | 10110 p_j2k->m_specific_param.m_encoder.m_current_tile_part_number = 0; |
| 9972 p_j2k->m_tcd->cur_totnum_tp = p_j2k->m_cp.tcps[p_tile_index].m_nb_tile_p
arts; | 10111 p_j2k->m_tcd->cur_totnum_tp = p_j2k->m_cp.tcps[p_tile_index].m_nb_tile_p
arts; |
| 9973 p_j2k->m_specific_param.m_encoder.m_current_poc_tile_part_number = 0; | 10112 p_j2k->m_specific_param.m_encoder.m_current_poc_tile_part_number = 0; |
| 9974 | 10113 |
| 9975 /* initialisation before tile encoding */ | 10114 /* initialisation before tile encoding */ |
| 9976 if (! opj_tcd_init_encode_tile(p_j2k->m_tcd, p_j2k->m_current_tile_numbe
r)) { | 10115 if (! opj_tcd_init_encode_tile(p_j2k->m_tcd, p_j2k->m_current_tile_numbe
r, p_manager)) { |
| 9977 return OPJ_FALSE; | 10116 return OPJ_FALSE; |
| 9978 } | 10117 } |
| 9979 | 10118 |
| 9980 return OPJ_TRUE; | 10119 return OPJ_TRUE; |
| 9981 } | 10120 } |
| 9982 | 10121 |
| 9983 void opj_get_tile_dimensions(opj_image_t * l_image, | 10122 static void opj_get_tile_dimensions(opj_image_t * l_image, |
| 9984 opj_tcd_tilecomp_t * l_tilec, | 10123 opj_tcd_tilecomp_t * l_tilec, |
| 9985 opj_image_comp_t * l_img_comp, | 10124 opj_image_comp_t * l_img_comp, |
| 9986 OPJ_UINT32* l_size_comp, | 10125 OPJ_UINT32* l_size_comp, |
| 9987 OPJ_UINT32* l_width, | 10126 OPJ_UINT32* l_width, |
| 9988 OPJ_UINT32* l_height, | 10127 OPJ_UINT32* l_height, |
| 9989 OPJ_UINT32* l_offset_x, | 10128 OPJ_UINT32* l_offset_x, |
| 9990 OPJ_UINT32* l_offset_y, | 10129 OPJ_UINT32* l_offset_y, |
| 9991 OPJ_UINT32* l_image_width, | 10130 OPJ_UINT32* l_image_width, |
| 9992 OPJ_UINT32* l_stride, | 10131 OPJ_UINT32* l_stride, |
| 9993 OPJ_UINT32* l_tile_offset) { | 10132 OPJ_UINT32* l_tile_offset) { |
| (...skipping 10 matching lines...) Expand all Loading... |
| 10004 | 10143 |
| 10005 *l_width = (OPJ_UINT32)(l_tilec->x1 - l_tilec->x0); | 10144 *l_width = (OPJ_UINT32)(l_tilec->x1 - l_tilec->x0); |
| 10006 *l_height = (OPJ_UINT32)(l_tilec->y1 - l_tilec->y0); | 10145 *l_height = (OPJ_UINT32)(l_tilec->y1 - l_tilec->y0); |
| 10007 *l_offset_x = (OPJ_UINT32)opj_int_ceildiv((OPJ_INT32)l_image->x0, (OPJ_I
NT32)l_img_comp->dx); | 10146 *l_offset_x = (OPJ_UINT32)opj_int_ceildiv((OPJ_INT32)l_image->x0, (OPJ_I
NT32)l_img_comp->dx); |
| 10008 *l_offset_y = (OPJ_UINT32)opj_int_ceildiv((OPJ_INT32)l_image->y0, (OPJ_I
NT32)l_img_comp->dy); | 10147 *l_offset_y = (OPJ_UINT32)opj_int_ceildiv((OPJ_INT32)l_image->y0, (OPJ_I
NT32)l_img_comp->dy); |
| 10009 *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); | 10148 *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); |
| 10010 *l_stride = *l_image_width - *l_width; | 10149 *l_stride = *l_image_width - *l_width; |
| 10011 *l_tile_offset = ((OPJ_UINT32)l_tilec->x0 - *l_offset_x) + ((OPJ_UINT32)
l_tilec->y0 - *l_offset_y) * *l_image_width; | 10150 *l_tile_offset = ((OPJ_UINT32)l_tilec->x0 - *l_offset_x) + ((OPJ_UINT32)
l_tilec->y0 - *l_offset_y) * *l_image_width; |
| 10012 } | 10151 } |
| 10013 | 10152 |
| 10014 void opj_j2k_get_tile_data (opj_tcd_t * p_tcd, OPJ_BYTE * p_data) | 10153 static void opj_j2k_get_tile_data (opj_tcd_t * p_tcd, OPJ_BYTE * p_data) |
| 10015 { | 10154 { |
| 10016 OPJ_UINT32 i,j,k = 0; | 10155 OPJ_UINT32 i,j,k = 0; |
| 10017 | 10156 |
| 10018 for (i=0;i<p_tcd->image->numcomps;++i) { | 10157 for (i=0;i<p_tcd->image->numcomps;++i) { |
| 10019 opj_image_t * l_image = p_tcd->image; | 10158 opj_image_t * l_image = p_tcd->image; |
| 10020 OPJ_INT32 * l_src_ptr; | 10159 OPJ_INT32 * l_src_ptr; |
| 10021 opj_tcd_tilecomp_t * l_tilec = p_tcd->tcd_image->tiles->comps +
i; | 10160 opj_tcd_tilecomp_t * l_tilec = p_tcd->tcd_image->tiles->comps +
i; |
| 10022 opj_image_comp_t * l_img_comp = l_image->comps + i; | 10161 opj_image_comp_t * l_img_comp = l_image->comps + i; |
| 10023 OPJ_UINT32 l_size_comp,l_width,l_height,l_offset_x,l_offset_y, l
_image_width,l_stride,l_tile_offset; | 10162 OPJ_UINT32 l_size_comp,l_width,l_height,l_offset_x,l_offset_y, l
_image_width,l_stride,l_tile_offset; |
| 10024 | 10163 |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10097 l_src_ptr += l_stride; | 10236 l_src_ptr += l_stride; |
| 10098 } | 10237 } |
| 10099 | 10238 |
| 10100 p_data = (OPJ_BYTE*) l_dest_ptr; | 10239 p_data = (OPJ_BYTE*) l_dest_ptr; |
| 10101 } | 10240 } |
| 10102 break; | 10241 break; |
| 10103 } | 10242 } |
| 10104 } | 10243 } |
| 10105 } | 10244 } |
| 10106 | 10245 |
| 10107 OPJ_BOOL opj_j2k_post_write_tile ( opj_j2k_t * p_j2k, | 10246 static OPJ_BOOL opj_j2k_post_write_tile ( opj_j2k_t * p_j2k, |
| 10108 opj_stream_priva
te_t *p_stream, | 10247 opj_stream_priva
te_t *p_stream, |
| 10109 opj_event_mgr_t
* p_manager ) | 10248 opj_event_mgr_t
* p_manager ) |
| 10110 { | 10249 { |
| 10111 OPJ_UINT32 l_nb_bytes_written; | 10250 OPJ_UINT32 l_nb_bytes_written; |
| 10112 OPJ_BYTE * l_current_data = 00; | 10251 OPJ_BYTE * l_current_data = 00; |
| 10113 OPJ_UINT32 l_tile_size = 0; | 10252 OPJ_UINT32 l_tile_size = 0; |
| 10114 OPJ_UINT32 l_available_data; | 10253 OPJ_UINT32 l_available_data; |
| 10115 | 10254 |
| 10116 /* preconditions */ | 10255 /* preconditions */ |
| 10117 assert(p_j2k->m_specific_param.m_encoder.m_encoded_tile_data); | 10256 assert(p_j2k->m_specific_param.m_encoder.m_encoded_tile_data); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 10139 p_j2k->m_specifi
c_param.m_encoder.m_encoded_tile_data, | 10278 p_j2k->m_specifi
c_param.m_encoder.m_encoded_tile_data, |
| 10140 l_nb_bytes_writt
en,p_manager) != l_nb_bytes_written) { | 10279 l_nb_bytes_writt
en,p_manager) != l_nb_bytes_written) { |
| 10141 return OPJ_FALSE; | 10280 return OPJ_FALSE; |
| 10142 } | 10281 } |
| 10143 | 10282 |
| 10144 ++p_j2k->m_current_tile_number; | 10283 ++p_j2k->m_current_tile_number; |
| 10145 | 10284 |
| 10146 return OPJ_TRUE; | 10285 return OPJ_TRUE; |
| 10147 } | 10286 } |
| 10148 | 10287 |
| 10149 void opj_j2k_setup_end_compress (opj_j2k_t *p_j2k) | 10288 static OPJ_BOOL opj_j2k_setup_end_compress (opj_j2k_t *p_j2k, opj_event_mgr_t *
p_manager) |
| 10150 { | 10289 { |
| 10151 /* preconditions */ | 10290 /* preconditions */ |
| 10152 assert(p_j2k != 00); | 10291 assert(p_j2k != 00); |
| 10292 assert(p_manager != 00); |
| 10153 | 10293 |
| 10154 /* DEVELOPER CORNER, insert your custom procedures */ | 10294 /* DEVELOPER CORNER, insert your custom procedures */ |
| 10155 opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(opj_procedure)
opj_j2k_write_eoc ); | 10295 if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(opj_proc
edure)opj_j2k_write_eoc, p_manager)) { |
| 10296 return OPJ_FALSE; |
| 10297 } |
| 10156 | 10298 |
| 10157 if (OPJ_IS_CINEMA(p_j2k->m_cp.rsiz)) { | 10299 if (OPJ_IS_CINEMA(p_j2k->m_cp.rsiz)) { |
| 10158 opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(opj_pr
ocedure)opj_j2k_write_updated_tlm); | 10300 if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(
opj_procedure)opj_j2k_write_updated_tlm, p_manager)) { |
| 10301 return OPJ_FALSE; |
| 10302 } |
| 10159 } | 10303 } |
| 10160 | 10304 |
| 10161 opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(opj_procedure)
opj_j2k_write_epc ); | 10305 if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(opj_proc
edure)opj_j2k_write_epc, p_manager)) { |
| 10162 opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(opj_procedure)
opj_j2k_end_encoding ); | 10306 return OPJ_FALSE; |
| 10163 opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(opj_procedure)
opj_j2k_destroy_header_memory); | 10307 } |
| 10308 if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(opj_proc
edure)opj_j2k_end_encoding, p_manager)) { |
| 10309 return OPJ_FALSE; |
| 10310 } |
| 10311 if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(opj_proc
edure)opj_j2k_destroy_header_memory, p_manager)) { |
| 10312 return OPJ_FALSE; |
| 10313 } |
| 10314 return OPJ_TRUE; |
| 10164 } | 10315 } |
| 10165 | 10316 |
| 10166 void opj_j2k_setup_encoding_validation (opj_j2k_t *p_j2k) | 10317 static OPJ_BOOL opj_j2k_setup_encoding_validation (opj_j2k_t *p_j2k, opj_event_m
gr_t * p_manager) |
| 10167 { | 10318 { |
| 10168 /* preconditions */ | 10319 /* preconditions */ |
| 10169 assert(p_j2k != 00); | 10320 assert(p_j2k != 00); |
| 10321 assert(p_manager != 00); |
| 10170 | 10322 |
| 10171 opj_procedure_list_add_procedure(p_j2k->m_validation_list, (opj_procedur
e)opj_j2k_build_encoder); | 10323 if (! opj_procedure_list_add_procedure(p_j2k->m_validation_list, (opj_pr
ocedure)opj_j2k_build_encoder, p_manager)) { |
| 10172 opj_procedure_list_add_procedure(p_j2k->m_validation_list, (opj_procedur
e)opj_j2k_encoding_validation); | 10324 return OPJ_FALSE; |
| 10325 } |
| 10326 if (! opj_procedure_list_add_procedure(p_j2k->m_validation_list, (opj_pr
ocedure)opj_j2k_encoding_validation, p_manager)) { |
| 10327 return OPJ_FALSE; |
| 10328 » » » » } |
| 10173 | 10329 |
| 10174 /* DEVELOPER CORNER, add your custom validation procedure */ | 10330 /* DEVELOPER CORNER, add your custom validation procedure */ |
| 10175 opj_procedure_list_add_procedure(p_j2k->m_validation_list, (opj_procedur
e)opj_j2k_mct_validation); | 10331 if (! opj_procedure_list_add_procedure(p_j2k->m_validation_list, (opj_pr
ocedure)opj_j2k_mct_validation, p_manager)) { |
| 10332 return OPJ_FALSE; |
| 10333 } |
| 10334 » |
| 10335 return OPJ_TRUE; |
| 10176 } | 10336 } |
| 10177 | 10337 |
| 10178 void opj_j2k_setup_header_writing (opj_j2k_t *p_j2k) | 10338 static OPJ_BOOL opj_j2k_setup_header_writing (opj_j2k_t *p_j2k, opj_event_mgr_t
* p_manager) |
| 10179 { | 10339 { |
| 10180 /* preconditions */ | 10340 /* preconditions */ |
| 10181 assert(p_j2k != 00); | 10341 assert(p_j2k != 00); |
| 10342 assert(p_manager != 00); |
| 10182 | 10343 |
| 10183 opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(opj_procedure)
opj_j2k_init_info ); | 10344 if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(opj_proc
edure)opj_j2k_init_info, p_manager)) { |
| 10184 opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(opj_procedure)
opj_j2k_write_soc ); | 10345 return OPJ_FALSE; |
| 10185 opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(opj_procedure)
opj_j2k_write_siz ); | 10346 } |
| 10186 opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(opj_procedure)
opj_j2k_write_cod ); | 10347 if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(opj_proc
edure)opj_j2k_write_soc, p_manager)) { |
| 10187 opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(opj_procedure)
opj_j2k_write_qcd ); | 10348 return OPJ_FALSE; |
| 10349 } |
| 10350 if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(opj_proc
edure)opj_j2k_write_siz, p_manager)) { |
| 10351 return OPJ_FALSE; |
| 10352 } |
| 10353 if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(opj_proc
edure)opj_j2k_write_cod, p_manager)) { |
| 10354 return OPJ_FALSE; |
| 10355 } |
| 10356 if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(opj_proc
edure)opj_j2k_write_qcd, p_manager)) { |
| 10357 return OPJ_FALSE; |
| 10358 } |
| 10188 | 10359 |
| 10189 if (OPJ_IS_CINEMA(p_j2k->m_cp.rsiz)) { | 10360 if (OPJ_IS_CINEMA(p_j2k->m_cp.rsiz)) { |
| 10190 /* No need for COC or QCC, QCD and COD are used | 10361 /* No need for COC or QCC, QCD and COD are used |
| 10191 opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(opj_pr
ocedure)opj_j2k_write_all_coc ); | 10362 if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(
opj_procedure)opj_j2k_write_all_coc, p_manager)) { |
| 10192 opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(opj_pr
ocedure)opj_j2k_write_all_qcc ); | 10363 return OPJ_FALSE; |
| 10364 } |
| 10365 if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(
opj_procedure)opj_j2k_write_all_qcc, p_manager)) { |
| 10366 return OPJ_FALSE; |
| 10367 } |
| 10193 */ | 10368 */ |
| 10194 opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(opj_pr
ocedure)opj_j2k_write_tlm ); | 10369 if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(
opj_procedure)opj_j2k_write_tlm, p_manager)) { |
| 10370 return OPJ_FALSE; |
| 10371 } |
| 10195 | 10372 |
| 10196 if (p_j2k->m_cp.rsiz == OPJ_PROFILE_CINEMA_4K) { | 10373 if (p_j2k->m_cp.rsiz == OPJ_PROFILE_CINEMA_4K) { |
| 10197 opj_procedure_list_add_procedure(p_j2k->m_procedure_list
,(opj_procedure)opj_j2k_write_poc ); | 10374 if (! opj_procedure_list_add_procedure(p_j2k->m_procedur
e_list,(opj_procedure)opj_j2k_write_poc, p_manager)) { |
| 10375 return OPJ_FALSE; |
| 10376 } |
| 10198 } | 10377 } |
| 10199 } | 10378 } |
| 10200 | 10379 |
| 10201 opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(opj_procedure)
opj_j2k_write_regions); | 10380 if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(opj_proc
edure)opj_j2k_write_regions, p_manager)) { |
| 10381 return OPJ_FALSE; |
| 10382 } |
| 10202 | 10383 |
| 10203 if (p_j2k->m_cp.comment != 00) { | 10384 if (p_j2k->m_cp.comment != 00) { |
| 10204 opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(opj_pr
ocedure)opj_j2k_write_com); | 10385 if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(
opj_procedure)opj_j2k_write_com, p_manager)) { |
| 10386 return OPJ_FALSE; |
| 10387 } |
| 10205 } | 10388 } |
| 10206 | 10389 |
| 10207 /* DEVELOPER CORNER, insert your custom procedures */ | 10390 /* DEVELOPER CORNER, insert your custom procedures */ |
| 10208 if (p_j2k->m_cp.rsiz & OPJ_EXTENSION_MCT) { | 10391 if (p_j2k->m_cp.rsiz & OPJ_EXTENSION_MCT) { |
| 10209 opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(opj_pr
ocedure)opj_j2k_write_mct_data_group ); | 10392 if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(
opj_procedure)opj_j2k_write_mct_data_group, p_manager)) { |
| 10393 return OPJ_FALSE; |
| 10394 } |
| 10210 } | 10395 } |
| 10211 /* End of Developer Corner */ | 10396 /* End of Developer Corner */ |
| 10212 | 10397 |
| 10213 if (p_j2k->cstr_index) { | 10398 if (p_j2k->cstr_index) { |
| 10214 opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(opj_pr
ocedure)opj_j2k_get_end_header ); | 10399 if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(
opj_procedure)opj_j2k_get_end_header, p_manager)) { |
| 10400 return OPJ_FALSE; |
| 10401 } |
| 10215 } | 10402 } |
| 10216 | 10403 |
| 10217 opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(opj_procedure)
opj_j2k_create_tcd); | 10404 if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(opj_proc
edure)opj_j2k_create_tcd, p_manager)) { |
| 10218 opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(opj_procedure)
opj_j2k_update_rates); | 10405 return OPJ_FALSE; |
| 10406 } |
| 10407 if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(opj_proc
edure)opj_j2k_update_rates, p_manager)) { |
| 10408 return OPJ_FALSE; |
| 10409 } |
| 10410 |
| 10411 return OPJ_TRUE; |
| 10219 } | 10412 } |
| 10220 | 10413 |
| 10221 OPJ_BOOL opj_j2k_write_first_tile_part (opj_j2k_t *p_j2k, | 10414 static OPJ_BOOL opj_j2k_write_first_tile_part (opj_j2k_t *p_j2k, |
| 10222 OPJ_BYTE
* p_data, | 10415 OPJ_BYTE
* p_data, |
| 10223 OPJ_UINT
32 * p_data_written, | 10416 OPJ_UINT
32 * p_data_written, |
| 10224 OPJ_UINT
32 p_total_data_size, | 10417 OPJ_UINT
32 p_total_data_size, |
| 10225 opj_stre
am_private_t *p_stream, | 10418 opj_stre
am_private_t *p_stream, |
| 10226 struct o
pj_event_mgr * p_manager ) | 10419 struct o
pj_event_mgr * p_manager ) |
| 10227 { | 10420 { |
| 10228 OPJ_UINT32 l_nb_bytes_written = 0; | 10421 OPJ_UINT32 l_nb_bytes_written = 0; |
| 10229 OPJ_UINT32 l_current_nb_bytes_written; | 10422 OPJ_UINT32 l_current_nb_bytes_written; |
| 10230 OPJ_BYTE * l_begin_data = 00; | 10423 OPJ_BYTE * l_begin_data = 00; |
| 10231 | 10424 |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10291 /* Writing Psot in SOT marker */ | 10484 /* Writing Psot in SOT marker */ |
| 10292 opj_write_bytes(l_begin_data + 6,l_nb_bytes_written,4);
/* PSOT */ | 10485 opj_write_bytes(l_begin_data + 6,l_nb_bytes_written,4);
/* PSOT */ |
| 10293 | 10486 |
| 10294 if (OPJ_IS_CINEMA(l_cp->rsiz)){ | 10487 if (OPJ_IS_CINEMA(l_cp->rsiz)){ |
| 10295 opj_j2k_update_tlm(p_j2k,l_nb_bytes_written); | 10488 opj_j2k_update_tlm(p_j2k,l_nb_bytes_written); |
| 10296 } | 10489 } |
| 10297 | 10490 |
| 10298 return OPJ_TRUE; | 10491 return OPJ_TRUE; |
| 10299 } | 10492 } |
| 10300 | 10493 |
| 10301 OPJ_BOOL opj_j2k_write_all_tile_parts( opj_j2k_t *p_j2k, | 10494 static OPJ_BOOL opj_j2k_write_all_tile_parts( opj_j2k_t *p_j2k, |
| 10302 OPJ_BYTE
* p_data, | 10495 OPJ_BYTE
* p_data, |
| 10303 OPJ_UINT
32 * p_data_written, | 10496 OPJ_UINT
32 * p_data_written, |
| 10304 OPJ_UINT
32 p_total_data_size, | 10497 OPJ_UINT
32 p_total_data_size, |
| 10305 opj_stre
am_private_t *p_stream, | 10498 opj_stre
am_private_t *p_stream, |
| 10306 struct o
pj_event_mgr * p_manager | 10499 struct o
pj_event_mgr * p_manager |
| 10307 ) | 10500 ) |
| 10308 { | 10501 { |
| 10309 OPJ_UINT32 tilepartno=0; | 10502 OPJ_UINT32 tilepartno=0; |
| 10310 OPJ_UINT32 l_nb_bytes_written = 0; | 10503 OPJ_UINT32 l_nb_bytes_written = 0; |
| 10311 OPJ_UINT32 l_current_nb_bytes_written; | 10504 OPJ_UINT32 l_current_nb_bytes_written; |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10402 | 10595 |
| 10403 ++p_j2k->m_specific_param.m_encoder.m_current_tile_part_
number; | 10596 ++p_j2k->m_specific_param.m_encoder.m_current_tile_part_
number; |
| 10404 } | 10597 } |
| 10405 } | 10598 } |
| 10406 | 10599 |
| 10407 *p_data_written = l_nb_bytes_written; | 10600 *p_data_written = l_nb_bytes_written; |
| 10408 | 10601 |
| 10409 return OPJ_TRUE; | 10602 return OPJ_TRUE; |
| 10410 } | 10603 } |
| 10411 | 10604 |
| 10412 OPJ_BOOL opj_j2k_write_updated_tlm( opj_j2k_t *p_j2k, | 10605 static OPJ_BOOL opj_j2k_write_updated_tlm( opj_j2k_t *p_j2k, |
| 10413 struct opj_s
tream_private *p_stream, | 10606 struct opj_s
tream_private *p_stream, |
| 10414 struct opj_e
vent_mgr * p_manager ) | 10607 struct opj_e
vent_mgr * p_manager ) |
| 10415 { | 10608 { |
| 10416 OPJ_UINT32 l_tlm_size; | 10609 OPJ_UINT32 l_tlm_size; |
| 10417 OPJ_OFF_T l_tlm_position, l_current_position; | 10610 OPJ_OFF_T l_tlm_position, l_current_position; |
| 10418 | 10611 |
| 10419 /* preconditions */ | 10612 /* preconditions */ |
| 10420 assert(p_j2k != 00); | 10613 assert(p_j2k != 00); |
| 10421 assert(p_manager != 00); | 10614 assert(p_manager != 00); |
| 10422 assert(p_stream != 00); | 10615 assert(p_stream != 00); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 10433 return OPJ_FALSE; | 10626 return OPJ_FALSE; |
| 10434 } | 10627 } |
| 10435 | 10628 |
| 10436 if (! opj_stream_seek(p_stream,l_current_position,p_manager)) { | 10629 if (! opj_stream_seek(p_stream,l_current_position,p_manager)) { |
| 10437 return OPJ_FALSE; | 10630 return OPJ_FALSE; |
| 10438 } | 10631 } |
| 10439 | 10632 |
| 10440 return OPJ_TRUE; | 10633 return OPJ_TRUE; |
| 10441 } | 10634 } |
| 10442 | 10635 |
| 10443 OPJ_BOOL opj_j2k_end_encoding( opj_j2k_t *p_j2k, | 10636 static OPJ_BOOL opj_j2k_end_encoding( opj_j2k_t *p_j2k, |
| 10444 struct opj_stream_privat
e *p_stream, | 10637 struct opj_stream_privat
e *p_stream, |
| 10445 struct opj_event_mgr * p
_manager ) | 10638 struct opj_event_mgr * p
_manager ) |
| 10446 { | 10639 { |
| 10447 /* preconditions */ | 10640 /* preconditions */ |
| 10448 assert(p_j2k != 00); | 10641 assert(p_j2k != 00); |
| 10449 assert(p_manager != 00); | 10642 assert(p_manager != 00); |
| 10450 assert(p_stream != 00); | 10643 assert(p_stream != 00); |
| 10451 | 10644 |
| 10452 opj_tcd_destroy(p_j2k->m_tcd); | 10645 opj_tcd_destroy(p_j2k->m_tcd); |
| 10453 p_j2k->m_tcd = 00; | 10646 p_j2k->m_tcd = 00; |
| (...skipping 30 matching lines...) Expand all Loading... |
| 10484 if (p_j2k->m_specific_param.m_encoder.m_header_tile_data) { | 10677 if (p_j2k->m_specific_param.m_encoder.m_header_tile_data) { |
| 10485 opj_free(p_j2k->m_specific_param.m_encoder.m_header_tile_data); | 10678 opj_free(p_j2k->m_specific_param.m_encoder.m_header_tile_data); |
| 10486 p_j2k->m_specific_param.m_encoder.m_header_tile_data = 0; | 10679 p_j2k->m_specific_param.m_encoder.m_header_tile_data = 0; |
| 10487 } | 10680 } |
| 10488 | 10681 |
| 10489 p_j2k->m_specific_param.m_encoder.m_header_tile_data_size = 0; | 10682 p_j2k->m_specific_param.m_encoder.m_header_tile_data_size = 0; |
| 10490 | 10683 |
| 10491 return OPJ_TRUE; | 10684 return OPJ_TRUE; |
| 10492 } | 10685 } |
| 10493 | 10686 |
| 10494 OPJ_BOOL opj_j2k_init_info( opj_j2k_t *p_j2k, | 10687 static OPJ_BOOL opj_j2k_init_info( opj_j2k_t *p_j2k, |
| 10495 struct opj_stream_private *p_str
eam, | 10688 struct opj_stream_private *p_str
eam, |
| 10496 struct opj_event_mgr * p_manager
) | 10689 struct opj_event_mgr * p_manager
) |
| 10497 { | 10690 { |
| 10498 opj_codestream_info_t * l_cstr_info = 00; | 10691 opj_codestream_info_t * l_cstr_info = 00; |
| 10499 | 10692 |
| 10500 /* preconditions */ | 10693 /* preconditions */ |
| 10501 assert(p_j2k != 00); | 10694 assert(p_j2k != 00); |
| 10502 assert(p_manager != 00); | 10695 assert(p_manager != 00); |
| 10503 assert(p_stream != 00); | 10696 assert(p_stream != 00); |
| 10504 (void)l_cstr_info; | 10697 (void)l_cstr_info; |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10607 return OPJ_FALSE; | 10800 return OPJ_FALSE; |
| 10608 } | 10801 } |
| 10609 if (! opj_j2k_post_write_tile(p_j2k,p_stream,p_manager)) { | 10802 if (! opj_j2k_post_write_tile(p_j2k,p_stream,p_manager)) { |
| 10610 opj_event_msg(p_manager, EVT_ERROR, "Error while opj_j2k
_post_write_tile with tile index = %d\n", p_tile_index); | 10803 opj_event_msg(p_manager, EVT_ERROR, "Error while opj_j2k
_post_write_tile with tile index = %d\n", p_tile_index); |
| 10611 return OPJ_FALSE; | 10804 return OPJ_FALSE; |
| 10612 } | 10805 } |
| 10613 } | 10806 } |
| 10614 | 10807 |
| 10615 return OPJ_TRUE; | 10808 return OPJ_TRUE; |
| 10616 } | 10809 } |
| OLD | NEW |