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 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
99 static OPJ_BOOL opj_jp2_read_bpcc( opj_jp2_t *jp2, | 99 static OPJ_BOOL opj_jp2_read_bpcc( opj_jp2_t *jp2, |
100 OPJ_BYTE * p_bpc_header_data, | 100 OPJ_BYTE * p_bpc_header_data, |
101 OPJ_UINT32 p_bpc_header_size, | 101 OPJ_UINT32 p_bpc_header_size, |
102 opj_event_mgr_t * p_manager ); | 102 opj_event_mgr_t * p_manager ); |
103 | 103 |
104 static OPJ_BOOL opj_jp2_read_cdef( opj_jp2_t * jp2, | 104 static OPJ_BOOL opj_jp2_read_cdef( opj_jp2_t * jp2, |
105 OPJ_BYTE * p_cdef_header_data, | 105 OPJ_BYTE * p_cdef_header_data, |
106 OPJ_UINT
32 p_cdef_header_size, | 106 OPJ_UINT
32 p_cdef_header_size, |
107 opj_even
t_mgr_t * p_manager ); | 107 opj_even
t_mgr_t * p_manager ); |
108 | 108 |
109 static void opj_jp2_apply_cdef(opj_image_t *image, opj_jp2_color_t *color); | 109 static void opj_jp2_apply_cdef(opj_image_t *image, opj_jp2_color_t *color, opj_e
vent_mgr_t *); |
110 | 110 |
111 /** | 111 /** |
112 * Writes the Channel Definition box. | 112 * Writes the Channel Definition box. |
113 * | 113 * |
114 * @param jp2 jpeg2000 file codec. | 114 * @param jp2 jpeg2000 file codec. |
115 * @param p_nb_bytes_written pointer to store the nb of bytes written by the
function. | 115 * @param p_nb_bytes_written pointer to store the nb of bytes written by the
function. |
116 * | 116 * |
117 * @return the data being copied. | 117 * @return the data being copied. |
118 */ | 118 */ |
119 static OPJ_BYTE * opj_jp2_write_cdef( opj_jp2_t *jp2, | 119 static OPJ_BYTE * opj_jp2_write_cdef( opj_jp2_t *jp2, |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
151 * @param p_header_size the size of the data contained in the FTYP box. | 151 * @param p_header_size the size of the data contained in the FTYP box. |
152 * @param p_manager the user event manager. | 152 * @param p_manager the user event manager. |
153 * | 153 * |
154 * @return true if the FTYP box is valid. | 154 * @return true if the FTYP box is valid. |
155 */ | 155 */ |
156 static OPJ_BOOL opj_jp2_read_ftyp( opj_jp2_t *jp2, | 156 static OPJ_BOOL opj_jp2_read_ftyp( opj_jp2_t *jp2, |
157 OPJ_BYTE
* p_header_data, | 157 OPJ_BYTE
* p_header_data, |
158 OPJ_UINT
32 p_header_size, | 158 OPJ_UINT
32 p_header_size, |
159 opj_even
t_mgr_t * p_manager ); | 159 opj_even
t_mgr_t * p_manager ); |
160 | 160 |
161 OPJ_BOOL opj_jp2_skip_jp2c(» opj_jp2_t *jp2, | 161 static OPJ_BOOL opj_jp2_skip_jp2c(» opj_jp2_t *jp2, |
162 opj_stream_private_t *cio, | 162 opj_stream_private_t *cio, |
163 opj_event_mgr_t * p_manager
); | 163 opj_event_mgr_t * p_manager
); |
164 | 164 |
165 /** | 165 /** |
166 * Reads the Jpeg2000 file Header box - JP2 Header box (warning, this is a super
box). | 166 * Reads the Jpeg2000 file Header box - JP2 Header box (warning, this is a super
box). |
167 * | 167 * |
168 * @param p_header_data the data contained in the file header box. | 168 * @param p_header_data the data contained in the file header box. |
169 * @param jp2 the jpeg2000 file codec. | 169 * @param jp2 the jpeg2000 file codec. |
170 * @param p_header_size the size of the data contained in the file heade
r box. | 170 * @param p_header_size the size of the data contained in the file heade
r box. |
171 * @param p_manager the user event manager. | 171 * @param p_manager the user event manager. |
172 * | 172 * |
173 * @return true if the JP2 Header box was successfully reconized. | 173 * @return true if the JP2 Header box was successfully recognized. |
174 */ | 174 */ |
175 static OPJ_BOOL opj_jp2_read_jp2h( opj_jp2_t *jp2, | 175 static OPJ_BOOL opj_jp2_read_jp2h( opj_jp2_t *jp2, |
176 OPJ_BYTE *p_header_data, | 176 OPJ_BYTE *p_header_data, |
177 OPJ_UINT32 p_header_size, | 177 OPJ_UINT32 p_header_size, |
178 opj_event_mgr_t * p_manager ); | 178 opj_event_mgr_t * p_manager ); |
179 | 179 |
180 /** | 180 /** |
| 181 * Writes the Jpeg2000 file Header box - JP2 Header box (warning, this is a supe
r box). |
| 182 * |
| 183 * @param jp2 the jpeg2000 file codec. |
| 184 * @param stream the stream to write data to. |
| 185 * @param p_manager user event manager. |
| 186 * |
| 187 * @return true if writing was successful. |
| 188 */ |
| 189 static OPJ_BOOL opj_jp2_write_jp2h(opj_jp2_t *jp2, |
| 190
opj_stream_private_t *stream, |
| 191
opj_event_mgr_t * p_manager ); |
| 192 |
| 193 /** |
181 * Writes the Jpeg2000 codestream Header box - JP2C Header box. This function mu
st be called AFTER the coding has been done. | 194 * Writes the Jpeg2000 codestream Header box - JP2C Header box. This function mu
st be called AFTER the coding has been done. |
182 * | 195 * |
183 * @param cio the stream to write data to. | 196 * @param cio the stream to write data to. |
184 * @param jp2 the jpeg2000 file codec. | 197 * @param jp2 the jpeg2000 file codec. |
185 * @param p_manager user event manager. | 198 * @param p_manager user event manager. |
186 * | 199 * |
187 * @return true if writing was successful. | 200 * @return true if writing was successful. |
188 */ | 201 */ |
189 static OPJ_BOOL opj_jp2_write_jp2c( opj_jp2_t *jp2, | 202 static OPJ_BOOL opj_jp2_write_jp2c( opj_jp2_t *jp2, |
190 opj_stream_p
rivate_t *cio, | 203 opj_stream_p
rivate_t *cio, |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
306 opj_event_mgr_t * p_manager ); | 319 opj_event_mgr_t * p_manager ); |
307 | 320 |
308 /*@}*/ | 321 /*@}*/ |
309 | 322 |
310 /*@}*/ | 323 /*@}*/ |
311 | 324 |
312 /** | 325 /** |
313 * Sets up the procedures to do on writing header after the codestream. | 326 * Sets up the procedures to do on writing header after the codestream. |
314 * Developpers wanting to extend the library can add their own writing procedure
s. | 327 * Developpers wanting to extend the library can add their own writing procedure
s. |
315 */ | 328 */ |
316 static void opj_jp2_setup_end_header_writing (opj_jp2_t *jp2); | 329 static OPJ_BOOL opj_jp2_setup_end_header_writing (opj_jp2_t *jp2, opj_event_mgr_
t * p_manager); |
317 | 330 |
318 /** | 331 /** |
319 * Sets up the procedures to do on reading header after the codestream. | 332 * Sets up the procedures to do on reading header after the codestream. |
320 * Developpers wanting to extend the library can add their own writing procedure
s. | 333 * Developpers wanting to extend the library can add their own writing procedure
s. |
321 */ | 334 */ |
322 static void opj_jp2_setup_end_header_reading (opj_jp2_t *jp2); | 335 static OPJ_BOOL opj_jp2_setup_end_header_reading (opj_jp2_t *jp2, opj_event_mgr_
t * p_manager); |
323 | 336 |
324 /** | 337 /** |
325 * Reads a jpeg2000 file header structure. | 338 * Reads a jpeg2000 file header structure. |
326 * | 339 * |
327 * @param jp2 the jpeg2000 file header structure. | 340 * @param jp2 the jpeg2000 file header structure. |
328 * @param stream the stream to read data from. | 341 * @param stream the stream to read data from. |
329 * @param p_manager the user event manager. | 342 * @param p_manager the user event manager. |
330 * | 343 * |
331 * @return true if the box is valid. | 344 * @return true if the box is valid. |
332 */ | 345 */ |
(...skipping 17 matching lines...) Expand all Loading... |
350 opj_event_mgr_t * p_manager ); | 363 opj_event_mgr_t * p_manager ); |
351 | 364 |
352 /** | 365 /** |
353 * Reads a box header. The box is the way data is packed inside a jpeg2000 file
structure. | 366 * Reads a box header. The box is the way data is packed inside a jpeg2000 file
structure. |
354 * | 367 * |
355 * @param cio the input stream
to read data from. | 368 * @param cio the input stream
to read data from. |
356 * @param box the box structur
e to fill. | 369 * @param box the box structur
e to fill. |
357 * @param p_number_bytes_read pointer to an int that will stor
e the number of bytes read from the stream (shoul usually be 2). | 370 * @param p_number_bytes_read pointer to an int that will stor
e the number of bytes read from the stream (shoul usually be 2). |
358 * @param p_manager user event manager. | 371 * @param p_manager user event manager. |
359 * | 372 * |
360 * @return» true if the box is reconized, false otherwise | 373 * @return» true if the box is recognized, false otherwise |
361 */ | 374 */ |
362 static OPJ_BOOL opj_jp2_read_boxhdr(opj_jp2_box_t *box, | 375 static OPJ_BOOL opj_jp2_read_boxhdr(opj_jp2_box_t *box, |
363 OPJ_UINT32 * p_number_bytes_read, | 376 OPJ_UINT32 * p_number_bytes_read, |
364 opj_stream_private_t *cio, | 377 opj_stream_private_t *cio, |
365 opj_event_mgr_t * p_manager); | 378 opj_event_mgr_t * p_manager); |
366 | 379 |
367 /** | 380 /** |
368 * Sets up the validation ,i.e. adds the procedures to lauch to make sure the co
dec parameters | 381 * Sets up the validation ,i.e. adds the procedures to lauch to make sure the co
dec parameters |
369 * are valid. Developpers wanting to extend the library can add their own valida
tion procedures. | 382 * are valid. Developpers wanting to extend the library can add their own valida
tion procedures. |
370 */ | 383 */ |
371 static void opj_jp2_setup_encoding_validation (opj_jp2_t *jp2); | 384 static OPJ_BOOL opj_jp2_setup_encoding_validation (opj_jp2_t *jp2, opj_event_mgr
_t * p_manager); |
372 | 385 |
373 /** | 386 /** |
374 * Sets up the procedures to do on writing header. Developpers wanting to extend
the library can add their own writing procedures. | 387 * Sets up the procedures to do on writing header. Developpers wanting to extend
the library can add their own writing procedures. |
375 */ | 388 */ |
376 static void opj_jp2_setup_header_writing (opj_jp2_t *jp2); | 389 static OPJ_BOOL opj_jp2_setup_header_writing (opj_jp2_t *jp2, opj_event_mgr_t *
p_manager); |
377 | 390 |
378 OPJ_BOOL opj_jp2_default_validation (» opj_jp2_t * jp2, | 391 static OPJ_BOOL opj_jp2_default_validation (» opj_jp2_t * jp2, |
379 opj_stream_private_t *cio, | 392 opj_stream_private_t *cio, |
380 opj_event_mgr_t * p_manager ); | 393 opj_event_mgr_t * p_manager ); |
381 | 394 |
382 /** | 395 /** |
383 * Finds the image execution function related to the given box id. | 396 * Finds the image execution function related to the given box id. |
384 * | 397 * |
385 * @param p_id the id of the handler to fetch. | 398 * @param p_id the id of the handler to fetch. |
386 * | 399 * |
387 * @return the given handler or NULL if it could not be found. | 400 * @return the given handler or NULL if it could not be found. |
388 */ | 401 */ |
389 static const opj_jp2_header_handler_t * opj_jp2_img_find_handler (OPJ_UINT32 p_i
d); | 402 static const opj_jp2_header_handler_t * opj_jp2_img_find_handler (OPJ_UINT32 p_i
d); |
390 | 403 |
391 /** | 404 /** |
392 * Finds the execution function related to the given box id. | 405 * Finds the execution function related to the given box id. |
393 * | 406 * |
394 * @param p_id the id of the handler to fetch. | 407 * @param p_id the id of the handler to fetch. |
395 * | 408 * |
396 * @return the given handler or NULL if it could not be found. | 409 * @return the given handler or NULL if it could not be found. |
397 */ | 410 */ |
398 static const opj_jp2_header_handler_t * opj_jp2_find_handler (OPJ_UINT32 p_id ); | 411 static const opj_jp2_header_handler_t * opj_jp2_find_handler (OPJ_UINT32 p_id ); |
399 | 412 |
400 const opj_jp2_header_handler_t jp2_header [] = | 413 static const opj_jp2_header_handler_t jp2_header [] = |
401 { | 414 { |
402 {JP2_JP,opj_jp2_read_jp}, | 415 {JP2_JP,opj_jp2_read_jp}, |
403 {JP2_FTYP,opj_jp2_read_ftyp}, | 416 {JP2_FTYP,opj_jp2_read_ftyp}, |
404 {JP2_JP2H,opj_jp2_read_jp2h} | 417 {JP2_JP2H,opj_jp2_read_jp2h} |
405 }; | 418 }; |
406 | 419 |
407 const opj_jp2_header_handler_t jp2_img_header [] = | 420 static const opj_jp2_header_handler_t jp2_img_header [] = |
408 { | 421 { |
409 {JP2_IHDR,opj_jp2_read_ihdr}, | 422 {JP2_IHDR,opj_jp2_read_ihdr}, |
410 {JP2_COLR,opj_jp2_read_colr}, | 423 {JP2_COLR,opj_jp2_read_colr}, |
411 {JP2_BPCC,opj_jp2_read_bpcc}, | 424 {JP2_BPCC,opj_jp2_read_bpcc}, |
412 {JP2_PCLR,opj_jp2_read_pclr}, | 425 {JP2_PCLR,opj_jp2_read_pclr}, |
413 {JP2_CMAP,opj_jp2_read_cmap}, | 426 {JP2_CMAP,opj_jp2_read_cmap}, |
414 {JP2_CDEF,opj_jp2_read_cdef} | 427 {JP2_CDEF,opj_jp2_read_cdef} |
415 | 428 |
416 }; | 429 }; |
417 | 430 |
418 /** | 431 /** |
419 * Reads a box header. The box is the way data is packed inside a jpeg2000 file
structure. Data is read from a character string | 432 * Reads a box header. The box is the way data is packed inside a jpeg2000 file
structure. Data is read from a character string |
420 * | 433 * |
421 * @param box the box structur
e to fill. | 434 * @param box the box structur
e to fill. |
422 * @param p_data the character string to
read data from. | 435 * @param p_data the character string to
read data from. |
423 * @param p_number_bytes_read pointer to an int that will stor
e the number of bytes read from the stream (shoul usually be 2). | 436 * @param p_number_bytes_read pointer to an int that will stor
e the number of bytes read from the stream (shoul usually be 2). |
424 * @param p_box_max_size the maximum number of bytes in t
he box. | 437 * @param p_box_max_size the maximum number of bytes in t
he box. |
425 * @param p_manager FIXME DOC | 438 * @param p_manager FIXME DOC |
426 * | 439 * |
427 * @return» true if the box is reconized, false otherwise | 440 * @return» true if the box is recognized, false otherwise |
428 */ | 441 */ |
429 static OPJ_BOOL opj_jp2_read_boxhdr_char( opj_jp2_box_t *box, | 442 static OPJ_BOOL opj_jp2_read_boxhdr_char( opj_jp2_box_t *box, |
430 OPJ_BYTE * p_data, | 443 OPJ_BYTE * p_data, |
431 OPJ_UINT32 * p_number_bytes_read, | 444 OPJ_UINT32 * p_number_bytes_read, |
432 OPJ_UINT32 p_box_max_size, | 445 OPJ_UINT32 p_box_max_size, |
433 opj_event_mgr_t * p_manager ); | 446 opj_event_mgr_t * p_manager ); |
434 | 447 |
435 /** | 448 /** |
436 * Sets up the validation ,i.e. adds the procedures to lauch to make sure the co
dec parameters | 449 * Sets up the validation ,i.e. adds the procedures to lauch to make sure the co
dec parameters |
437 * are valid. Developpers wanting to extend the library can add their own valida
tion procedures. | 450 * are valid. Developpers wanting to extend the library can add their own valida
tion procedures. |
438 */ | 451 */ |
439 static void opj_jp2_setup_decoding_validation (opj_jp2_t *jp2); | 452 static OPJ_BOOL opj_jp2_setup_decoding_validation (opj_jp2_t *jp2, opj_event_mgr
_t * p_manager); |
440 | 453 |
441 /** | 454 /** |
442 * Sets up the procedures to do on reading header. | 455 * Sets up the procedures to do on reading header. |
443 * Developpers wanting to extend the library can add their own writing procedure
s. | 456 * Developpers wanting to extend the library can add their own writing procedure
s. |
444 */ | 457 */ |
445 static void opj_jp2_setup_header_reading (opj_jp2_t *jp2); | 458 static OPJ_BOOL opj_jp2_setup_header_reading (opj_jp2_t *jp2, opj_event_mgr_t *
p_manager); |
446 | 459 |
447 /* ----------------------------------------------------------------------- */ | 460 /* ----------------------------------------------------------------------- */ |
448 OPJ_BOOL opj_jp2_read_boxhdr(opj_jp2_box_t *box, | 461 static OPJ_BOOL opj_jp2_read_boxhdr(opj_jp2_box_t *box, |
449 OPJ_UINT32 * p_number_bytes_read, | 462 OPJ_UINT32 * p_number_bytes_read, |
450 opj_stream_private_t *cio, | 463 opj_stream_private_t *cio, |
451 opj_event_mgr_t * p_manager ) | 464 opj_event_mgr_t * p_manager ) |
452 { | 465 { |
453 /* read header from file */ | 466 /* read header from file */ |
454 OPJ_BYTE l_data_header [8]; | 467 OPJ_BYTE l_data_header [8]; |
455 | 468 |
456 /* preconditions */ | 469 /* preconditions */ |
457 assert(cio != 00); | 470 assert(cio != 00); |
458 assert(box != 00); | 471 assert(box != 00); |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
518 } | 531 } |
519 } | 532 } |
520 | 533 |
521 box.length = cio_tell(cio) - box.init_pos; | 534 box.length = cio_tell(cio) - box.init_pos; |
522 cio_seek(cio, box.init_pos); | 535 cio_seek(cio, box.init_pos); |
523 cio_write(cio, box.length, 4); /* L */ | 536 cio_write(cio, box.length, 4); /* L */ |
524 cio_seek(cio, box.init_pos + box.length); | 537 cio_seek(cio, box.init_pos + box.length); |
525 } | 538 } |
526 #endif | 539 #endif |
527 | 540 |
528 OPJ_BOOL opj_jp2_read_ihdr( opj_jp2_t *jp2, | 541 static OPJ_BOOL opj_jp2_read_ihdr( opj_jp2_t *jp2, |
529 OPJ_BYTE *p_image_header_data, | 542 OPJ_BYTE *p_image_header_data, |
530 OPJ_UINT32 p_image_header_size, | 543 OPJ_UINT32 p_image_header_size, |
531 opj_event_mgr_t * p_manager ) | 544 opj_event_mgr_t * p_manager ) |
532 { | 545 { |
533 /* preconditions */ | 546 /* preconditions */ |
534 assert(p_image_header_data != 00); | 547 assert(p_image_header_data != 00); |
535 assert(jp2 != 00); | 548 assert(jp2 != 00); |
536 assert(p_manager != 00); | 549 assert(p_manager != 00); |
537 | 550 |
538 if (p_image_header_size != 14) { | 551 if (p_image_header_size != 14) { |
(...skipping 27 matching lines...) Expand all Loading... |
566 } | 579 } |
567 | 580 |
568 opj_read_bytes(p_image_header_data,&(jp2->UnkC),1);
/* UnkC */ | 581 opj_read_bytes(p_image_header_data,&(jp2->UnkC),1);
/* UnkC */ |
569 ++ p_image_header_data; | 582 ++ p_image_header_data; |
570 opj_read_bytes(p_image_header_data,&(jp2->IPR),1);
/* IPR */ | 583 opj_read_bytes(p_image_header_data,&(jp2->IPR),1);
/* IPR */ |
571 ++ p_image_header_data; | 584 ++ p_image_header_data; |
572 | 585 |
573 return OPJ_TRUE; | 586 return OPJ_TRUE; |
574 } | 587 } |
575 | 588 |
576 OPJ_BYTE * opj_jp2_write_ihdr(opj_jp2_t *jp2, | 589 static OPJ_BYTE * opj_jp2_write_ihdr(opj_jp2_t *jp2, |
577 OPJ_UINT32 * p_nb_bytes_written | 590 OPJ_UINT32 * p_nb_bytes_written |
578 ) | 591 ) |
579 { | 592 { |
580 OPJ_BYTE * l_ihdr_data,* l_current_ihdr_ptr; | 593 OPJ_BYTE * l_ihdr_data,* l_current_ihdr_ptr; |
581 | 594 |
582 /* preconditions */ | 595 /* preconditions */ |
583 assert(jp2 != 00); | 596 assert(jp2 != 00); |
584 assert(p_nb_bytes_written != 00); | 597 assert(p_nb_bytes_written != 00); |
585 | 598 |
586 /* default image header is 22 bytes wide */ | 599 /* default image header is 22 bytes wide */ |
(...skipping 29 matching lines...) Expand all Loading... |
616 ++l_current_ihdr_ptr; | 629 ++l_current_ihdr_ptr; |
617 | 630 |
618 opj_write_bytes(l_current_ihdr_ptr, jp2->IPR, 1); /* IPR,
no intellectual property */ | 631 opj_write_bytes(l_current_ihdr_ptr, jp2->IPR, 1); /* IPR,
no intellectual property */ |
619 ++l_current_ihdr_ptr; | 632 ++l_current_ihdr_ptr; |
620 | 633 |
621 *p_nb_bytes_written = 22; | 634 *p_nb_bytes_written = 22; |
622 | 635 |
623 return l_ihdr_data; | 636 return l_ihdr_data; |
624 } | 637 } |
625 | 638 |
626 OPJ_BYTE * opj_jp2_write_bpcc(» opj_jp2_t *jp2, | 639 static OPJ_BYTE * opj_jp2_write_bpcc(» opj_jp2_t *jp2, |
627 OPJ_UINT32 * p_nb_bytes_
written | 640 OPJ_UINT32 * p_nb_bytes_
written |
628 ) | 641 ) |
629 { | 642 { |
630 OPJ_UINT32 i; | 643 OPJ_UINT32 i; |
631 /* room for 8 bytes for box and 1 byte for each component */ | 644 /* room for 8 bytes for box and 1 byte for each component */ |
632 OPJ_UINT32 l_bpcc_size = 8 + jp2->numcomps; | 645 OPJ_UINT32 l_bpcc_size = 8 + jp2->numcomps; |
633 OPJ_BYTE * l_bpcc_data,* l_current_bpcc_ptr; | 646 OPJ_BYTE * l_bpcc_data,* l_current_bpcc_ptr; |
634 | 647 |
635 /* preconditions */ | 648 /* preconditions */ |
636 assert(jp2 != 00); | 649 assert(jp2 != 00); |
(...skipping 15 matching lines...) Expand all Loading... |
652 for (i = 0; i < jp2->numcomps; ++i) { | 665 for (i = 0; i < jp2->numcomps; ++i) { |
653 opj_write_bytes(l_current_bpcc_ptr, jp2->comps[i].bpcc, 1); /* w
rite each component information */ | 666 opj_write_bytes(l_current_bpcc_ptr, jp2->comps[i].bpcc, 1); /* w
rite each component information */ |
654 ++l_current_bpcc_ptr; | 667 ++l_current_bpcc_ptr; |
655 } | 668 } |
656 | 669 |
657 *p_nb_bytes_written = l_bpcc_size; | 670 *p_nb_bytes_written = l_bpcc_size; |
658 | 671 |
659 return l_bpcc_data; | 672 return l_bpcc_data; |
660 } | 673 } |
661 | 674 |
662 OPJ_BOOL opj_jp2_read_bpcc( opj_jp2_t *jp2, | 675 static OPJ_BOOL opj_jp2_read_bpcc( opj_jp2_t *jp2, |
663 OPJ_BYTE * p_bpc_header_data, | 676 OPJ_BYTE * p_bpc_header_data, |
664 OPJ_UINT32 p_bpc_header_size, | 677 OPJ_UINT32 p_bpc_header_size, |
665 opj_event_mgr_t * p_manager | 678 opj_event_mgr_t * p_manager |
666 ) | 679 ) |
667 { | 680 { |
668 OPJ_UINT32 i; | 681 OPJ_UINT32 i; |
669 | 682 |
670 /* preconditions */ | 683 /* preconditions */ |
671 assert(p_bpc_header_data != 00); | 684 assert(p_bpc_header_data != 00); |
672 assert(jp2 != 00); | 685 assert(jp2 != 00); |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
734 l_current_cdef_ptr += 2; | 747 l_current_cdef_ptr += 2; |
735 l_value = jp2->color.jp2_cdef->info[i].asoc; | 748 l_value = jp2->color.jp2_cdef->info[i].asoc; |
736 opj_write_bytes(l_current_cdef_ptr,l_value,2);
/* Asoci */ | 749 opj_write_bytes(l_current_cdef_ptr,l_value,2);
/* Asoci */ |
737 l_current_cdef_ptr += 2; | 750 l_current_cdef_ptr += 2; |
738 } | 751 } |
739 *p_nb_bytes_written = l_cdef_size; | 752 *p_nb_bytes_written = l_cdef_size; |
740 | 753 |
741 return l_cdef_data; | 754 return l_cdef_data; |
742 } | 755 } |
743 | 756 |
744 OPJ_BYTE * opj_jp2_write_colr( opj_jp2_t *jp2, | 757 static OPJ_BYTE * opj_jp2_write_colr( opj_jp2_t *jp2, |
745 OPJ_UINT32 * p_nb_by
tes_written | 758 OPJ_UINT32 * p_nb_by
tes_written |
746 ) | 759 ) |
747 { | 760 { |
748 /* room for 8 bytes for box 3 for common data and variable upon profile*
/ | 761 /* room for 8 bytes for box 3 for common data and variable upon profile*
/ |
749 OPJ_UINT32 l_colr_size = 11; | 762 OPJ_UINT32 l_colr_size = 11; |
750 OPJ_BYTE * l_colr_data,* l_current_colr_ptr; | 763 OPJ_BYTE * l_colr_data,* l_current_colr_ptr; |
751 | 764 |
752 /* preconditions */ | 765 /* preconditions */ |
753 assert(jp2 != 00); | 766 assert(jp2 != 00); |
754 assert(p_nb_bytes_written != 00); | 767 assert(p_nb_bytes_written != 00); |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
798 ++l_current_colr_ptr; | 811 ++l_current_colr_ptr; |
799 } | 812 } |
800 } | 813 } |
801 } | 814 } |
802 | 815 |
803 *p_nb_bytes_written = l_colr_size; | 816 *p_nb_bytes_written = l_colr_size; |
804 | 817 |
805 return l_colr_data; | 818 return l_colr_data; |
806 } | 819 } |
807 | 820 |
808 void opj_jp2_free_pclr(opj_jp2_color_t *color) | 821 static void opj_jp2_free_pclr(opj_jp2_color_t *color) |
809 { | 822 { |
810 opj_free(color->jp2_pclr->channel_sign); | 823 opj_free(color->jp2_pclr->channel_sign); |
811 opj_free(color->jp2_pclr->channel_size); | 824 opj_free(color->jp2_pclr->channel_size); |
812 opj_free(color->jp2_pclr->entries); | 825 opj_free(color->jp2_pclr->entries); |
813 | 826 |
814 if(color->jp2_pclr->cmap) opj_free(color->jp2_pclr->cmap); | 827 if(color->jp2_pclr->cmap) opj_free(color->jp2_pclr->cmap); |
815 | 828 |
816 opj_free(color->jp2_pclr); color->jp2_pclr = NULL; | 829 opj_free(color->jp2_pclr); color->jp2_pclr = NULL; |
817 } | 830 } |
818 | 831 |
(...skipping 10 matching lines...) Expand all Loading... |
829 /* cdef applies to cmap channels if any */ | 842 /* cdef applies to cmap channels if any */ |
830 if (color->jp2_pclr && color->jp2_pclr->cmap) { | 843 if (color->jp2_pclr && color->jp2_pclr->cmap) { |
831 nr_channels = (OPJ_UINT32)color->jp2_pclr->nr_channels; | 844 nr_channels = (OPJ_UINT32)color->jp2_pclr->nr_channels; |
832 } | 845 } |
833 | 846 |
834 for (i = 0; i < n; i++) { | 847 for (i = 0; i < n; i++) { |
835 if (info[i].cn >= nr_channels) { | 848 if (info[i].cn >= nr_channels) { |
836 opj_event_msg(p_manager, EVT_ERROR, "Invalid com
ponent index %d (>= %d).\n", info[i].cn, nr_channels); | 849 opj_event_msg(p_manager, EVT_ERROR, "Invalid com
ponent index %d (>= %d).\n", info[i].cn, nr_channels); |
837 return OPJ_FALSE; | 850 return OPJ_FALSE; |
838 } | 851 } |
| 852 if (info[i].asoc == 65535U) continue; |
| 853 |
839 if (info[i].asoc > 0 && (OPJ_UINT32)(info[i].asoc - 1) >
= nr_channels) { | 854 if (info[i].asoc > 0 && (OPJ_UINT32)(info[i].asoc - 1) >
= nr_channels) { |
840 opj_event_msg(p_manager, EVT_ERROR, "Invalid com
ponent index %d (>= %d).\n", info[i].asoc - 1, nr_channels); | 855 opj_event_msg(p_manager, EVT_ERROR, "Invalid com
ponent index %d (>= %d).\n", info[i].asoc - 1, nr_channels); |
841 return OPJ_FALSE; | 856 return OPJ_FALSE; |
842 } | 857 } |
843 } | 858 } |
844 | 859 |
845 /* issue 397 */ | 860 /* issue 397 */ |
846 /* ISO 15444-1 states that if cdef is present, it shall contain
a complete list of channel definitions. */ | 861 /* ISO 15444-1 states that if cdef is present, it shall contain
a complete list of channel definitions. */ |
847 while (nr_channels > 0) | 862 while (nr_channels > 0) |
848 { | 863 { |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
900 else | 915 else |
901 pcol_usage[pcol] = OPJ_TRUE; | 916 pcol_usage[pcol] = OPJ_TRUE; |
902 } | 917 } |
903 /* verify that all components are targeted at least once */ | 918 /* verify that all components are targeted at least once */ |
904 for (i = 0; i < nr_channels; i++) { | 919 for (i = 0; i < nr_channels; i++) { |
905 if (!pcol_usage[i] && cmap[i].mtyp != 0) { | 920 if (!pcol_usage[i] && cmap[i].mtyp != 0) { |
906 opj_event_msg(p_manager, EVT_ERROR, "Component %
d doesn't have a mapping.\n", i); | 921 opj_event_msg(p_manager, EVT_ERROR, "Component %
d doesn't have a mapping.\n", i); |
907 is_sane = OPJ_FALSE; | 922 is_sane = OPJ_FALSE; |
908 } | 923 } |
909 } | 924 } |
| 925 /* Issue 235/447 weird cmap */ |
| 926 if (1 && is_sane && (image->numcomps==1U)) { |
| 927 for (i = 0; i < nr_channels; i++) { |
| 928 if (!pcol_usage[i]) { |
| 929 is_sane = 0U; |
| 930 opj_event_msg(p_manager, EVT_WARNING, "C
omponent mapping seems wrong. Trying to correct.\n", i); |
| 931 break; |
| 932 } |
| 933 } |
| 934 if (!is_sane) { |
| 935 is_sane = OPJ_TRUE; |
| 936 for (i = 0; i < nr_channels; i++) { |
| 937 cmap[i].mtyp = 1U; |
| 938 cmap[i].pcol = (OPJ_BYTE) i; |
| 939 } |
| 940 } |
| 941 } |
910 opj_free(pcol_usage); | 942 opj_free(pcol_usage); |
911 if (!is_sane) { | 943 if (!is_sane) { |
912 return OPJ_FALSE; | 944 return OPJ_FALSE; |
913 } | 945 } |
914 } | 946 } |
915 | 947 |
916 return OPJ_TRUE; | 948 return OPJ_TRUE; |
917 } | 949 } |
918 | 950 |
919 /* file9.jp2 */ | 951 /* file9.jp2 */ |
920 void opj_jp2_apply_pclr(opj_image_t *image, opj_jp2_color_t *color) | 952 static void opj_jp2_apply_pclr(opj_image_t *image, opj_jp2_color_t *color) |
921 { | 953 { |
922 opj_image_comp_t *old_comps, *new_comps; | 954 opj_image_comp_t *old_comps, *new_comps; |
923 OPJ_BYTE *channel_size, *channel_sign; | 955 OPJ_BYTE *channel_size, *channel_sign; |
924 OPJ_UINT32 *entries; | 956 OPJ_UINT32 *entries; |
925 opj_jp2_cmap_comp_t *cmap; | 957 opj_jp2_cmap_comp_t *cmap; |
926 OPJ_INT32 *src, *dst; | 958 OPJ_INT32 *src, *dst; |
927 OPJ_UINT32 j, max; | 959 OPJ_UINT32 j, max; |
928 OPJ_UINT16 i, nr_channels, cmp, pcol; | 960 OPJ_UINT16 i, nr_channels, cmp, pcol; |
929 OPJ_INT32 k, top_k; | 961 OPJ_INT32 k, top_k; |
930 | 962 |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1006 } | 1038 } |
1007 | 1039 |
1008 opj_free(old_comps); | 1040 opj_free(old_comps); |
1009 image->comps = new_comps; | 1041 image->comps = new_comps; |
1010 image->numcomps = nr_channels; | 1042 image->numcomps = nr_channels; |
1011 | 1043 |
1012 opj_jp2_free_pclr(color); | 1044 opj_jp2_free_pclr(color); |
1013 | 1045 |
1014 }/* apply_pclr() */ | 1046 }/* apply_pclr() */ |
1015 | 1047 |
1016 OPJ_BOOL opj_jp2_read_pclr(» opj_jp2_t *jp2, | 1048 static OPJ_BOOL opj_jp2_read_pclr(» opj_jp2_t *jp2, |
1017 OPJ_BYTE * p_pclr_header_data, | 1049 OPJ_BYTE * p_pclr_header_data, |
1018 OPJ_UINT32 p_pclr_header_size, | 1050 OPJ_UINT32 p_pclr_header_size, |
1019 opj_event_mgr_t * p_manager | 1051 opj_event_mgr_t * p_manager |
1020 ) | 1052 ) |
1021 { | 1053 { |
1022 opj_jp2_pclr_t *jp2_pclr; | 1054 opj_jp2_pclr_t *jp2_pclr; |
1023 OPJ_BYTE *channel_size, *channel_sign; | 1055 OPJ_BYTE *channel_size, *channel_sign; |
1024 OPJ_UINT32 *entries; | 1056 OPJ_UINT32 *entries; |
1025 OPJ_UINT16 nr_entries,nr_channels; | 1057 OPJ_UINT16 nr_entries,nr_channels; |
1026 OPJ_UINT16 i, j; | 1058 OPJ_UINT16 i, j; |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1113 opj_read_bytes(p_pclr_header_data, &l_value , bytes_to_r
ead); /* Cji */ | 1145 opj_read_bytes(p_pclr_header_data, &l_value , bytes_to_r
ead); /* Cji */ |
1114 p_pclr_header_data += bytes_to_read; | 1146 p_pclr_header_data += bytes_to_read; |
1115 *entries = (OPJ_UINT32) l_value; | 1147 *entries = (OPJ_UINT32) l_value; |
1116 entries++; | 1148 entries++; |
1117 } | 1149 } |
1118 } | 1150 } |
1119 | 1151 |
1120 return OPJ_TRUE; | 1152 return OPJ_TRUE; |
1121 } | 1153 } |
1122 | 1154 |
1123 OPJ_BOOL opj_jp2_read_cmap(» opj_jp2_t * jp2, | 1155 static OPJ_BOOL opj_jp2_read_cmap(» opj_jp2_t * jp2, |
1124 OPJ_BYTE * p_cmap_header_data, | 1156 OPJ_BYTE * p_cmap_header_data, |
1125 OPJ_UINT32 p_cmap_header_size, | 1157 OPJ_UINT32 p_cmap_header_size, |
1126 opj_event_mgr_t * p_manager | 1158 opj_event_mgr_t * p_manager |
1127 ) | 1159 ) |
1128 { | 1160 { |
1129 opj_jp2_cmap_comp_t *cmap; | 1161 opj_jp2_cmap_comp_t *cmap; |
1130 OPJ_BYTE i, nr_channels; | 1162 OPJ_BYTE i, nr_channels; |
1131 OPJ_UINT32 l_value; | 1163 OPJ_UINT32 l_value; |
1132 | 1164 |
1133 /* preconditions */ | 1165 /* preconditions */ |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1173 opj_read_bytes(p_cmap_header_data, &l_value, 1);
/* PCOL^i */ | 1205 opj_read_bytes(p_cmap_header_data, &l_value, 1);
/* PCOL^i */ |
1174 ++p_cmap_header_data; | 1206 ++p_cmap_header_data; |
1175 cmap[i].pcol = (OPJ_BYTE) l_value; | 1207 cmap[i].pcol = (OPJ_BYTE) l_value; |
1176 } | 1208 } |
1177 | 1209 |
1178 jp2->color.jp2_pclr->cmap = cmap; | 1210 jp2->color.jp2_pclr->cmap = cmap; |
1179 | 1211 |
1180 return OPJ_TRUE; | 1212 return OPJ_TRUE; |
1181 } | 1213 } |
1182 | 1214 |
1183 void opj_jp2_apply_cdef(opj_image_t *image, opj_jp2_color_t *color) | 1215 static void opj_jp2_apply_cdef(opj_image_t *image, opj_jp2_color_t *color, opj_e
vent_mgr_t *manager) |
1184 { | 1216 { |
1185 opj_jp2_cdef_info_t *info; | 1217 opj_jp2_cdef_info_t *info; |
1186 OPJ_UINT16 i, n, cn, asoc, acn; | 1218 OPJ_UINT16 i, n, cn, asoc, acn; |
1187 | 1219 |
1188 info = color->jp2_cdef->info; | 1220 info = color->jp2_cdef->info; |
1189 n = color->jp2_cdef->n; | 1221 n = color->jp2_cdef->n; |
1190 | 1222 |
1191 for(i = 0; i < n; ++i) | 1223 for(i = 0; i < n; ++i) |
1192 { | 1224 { |
1193 /* WATCH: acn = asoc - 1 ! */ | 1225 /* WATCH: acn = asoc - 1 ! */ |
1194 asoc = info[i].asoc; | 1226 asoc = info[i].asoc; |
1195 cn = info[i].cn; | 1227 cn = info[i].cn; |
1196 | 1228 |
1197 if( cn >= image->numcomps) | 1229 if( cn >= image->numcomps) |
1198 { | 1230 { |
1199 » » » fprintf(stderr, "cn=%d, numcomps=%d\n", cn, image->numco
mps); | 1231 » » » opj_event_msg(manager, EVT_WARNING, "opj_jp2_apply_cdef:
cn=%d, numcomps=%d\n", cn, image->numcomps); |
1200 continue; | 1232 continue; |
1201 } | 1233 } |
1202 if(asoc == 0 || asoc == 65535) | 1234 if(asoc == 0 || asoc == 65535) |
1203 { | 1235 { |
1204 image->comps[cn].alpha = info[i].typ; | 1236 image->comps[cn].alpha = info[i].typ; |
1205 continue; | 1237 continue; |
1206 } | 1238 } |
1207 | 1239 |
1208 acn = (OPJ_UINT16)(asoc - 1); | 1240 acn = (OPJ_UINT16)(asoc - 1); |
1209 if( acn >= image->numcomps ) | 1241 if( acn >= image->numcomps ) |
1210 { | 1242 { |
1211 » » » fprintf(stderr, "acn=%d, numcomps=%d\n", acn, image->num
comps); | 1243 » » » opj_event_msg(manager, EVT_WARNING, "opj_jp2_apply_cdef:
acn=%d, numcomps=%d\n", acn, image->numcomps); |
1212 continue; | 1244 continue; |
1213 } | 1245 } |
1214 | 1246 |
1215 /* Swap only if color channel */ | 1247 /* Swap only if color channel */ |
1216 if((cn != acn) && (info[i].typ == 0)) | 1248 if((cn != acn) && (info[i].typ == 0)) |
1217 { | 1249 { |
1218 opj_image_comp_t saved; | 1250 opj_image_comp_t saved; |
1219 OPJ_UINT16 j; | 1251 OPJ_UINT16 j; |
1220 | 1252 |
1221 memcpy(&saved, &image->comps[cn], sizeof(opj_image_comp_
t)); | 1253 memcpy(&saved, &image->comps[cn], sizeof(opj_image_comp_
t)); |
(...skipping 15 matching lines...) Expand all Loading... |
1237 | 1269 |
1238 image->comps[cn].alpha = info[i].typ; | 1270 image->comps[cn].alpha = info[i].typ; |
1239 } | 1271 } |
1240 | 1272 |
1241 if(color->jp2_cdef->info) opj_free(color->jp2_cdef->info); | 1273 if(color->jp2_cdef->info) opj_free(color->jp2_cdef->info); |
1242 | 1274 |
1243 opj_free(color->jp2_cdef); color->jp2_cdef = NULL; | 1275 opj_free(color->jp2_cdef); color->jp2_cdef = NULL; |
1244 | 1276 |
1245 }/* jp2_apply_cdef() */ | 1277 }/* jp2_apply_cdef() */ |
1246 | 1278 |
1247 OPJ_BOOL opj_jp2_read_cdef(» opj_jp2_t * jp2, | 1279 static OPJ_BOOL opj_jp2_read_cdef(» opj_jp2_t * jp2, |
1248 OPJ_BYTE * p_cdef_header_data, | 1280 OPJ_BYTE * p_cdef_header_data, |
1249 OPJ_UINT32 p_cdef_header
_size, | 1281 OPJ_UINT32 p_cdef_header
_size, |
1250 opj_event_mgr_t * p_mana
ger | 1282 opj_event_mgr_t * p_mana
ger |
1251 ) | 1283 ) |
1252 { | 1284 { |
1253 opj_jp2_cdef_info_t *cdef_info; | 1285 opj_jp2_cdef_info_t *cdef_info; |
1254 OPJ_UINT16 i; | 1286 OPJ_UINT16 i; |
1255 OPJ_UINT32 l_value; | 1287 OPJ_UINT32 l_value; |
1256 | 1288 |
1257 /* preconditions */ | 1289 /* preconditions */ |
(...skipping 18 matching lines...) Expand all Loading... |
1276 opj_event_msg(p_manager, EVT_ERROR, "Number of channel descripti
on is equal to zero in CDEF box.\n"); | 1308 opj_event_msg(p_manager, EVT_ERROR, "Number of channel descripti
on is equal to zero in CDEF box.\n"); |
1277 return OPJ_FALSE; | 1309 return OPJ_FALSE; |
1278 } | 1310 } |
1279 | 1311 |
1280 if (p_cdef_header_size < 2 + (OPJ_UINT32)(OPJ_UINT16)l_value * 6) { | 1312 if (p_cdef_header_size < 2 + (OPJ_UINT32)(OPJ_UINT16)l_value * 6) { |
1281 opj_event_msg(p_manager, EVT_ERROR, "Insufficient data for CDEF
box.\n"); | 1313 opj_event_msg(p_manager, EVT_ERROR, "Insufficient data for CDEF
box.\n"); |
1282 return OPJ_FALSE; | 1314 return OPJ_FALSE; |
1283 } | 1315 } |
1284 | 1316 |
1285 cdef_info = (opj_jp2_cdef_info_t*) opj_malloc(l_value * sizeof(opj_jp2_c
def_info_t)); | 1317 cdef_info = (opj_jp2_cdef_info_t*) opj_malloc(l_value * sizeof(opj_jp2_c
def_info_t)); |
1286 if (!cdef_info) | 1318 » if (!cdef_info) |
1287 return OPJ_FALSE; | 1319 » » return OPJ_FALSE; |
1288 | 1320 |
1289 jp2->color.jp2_cdef = (opj_jp2_cdef_t*)opj_malloc(sizeof(opj_jp2_cdef_t)
); | 1321 jp2->color.jp2_cdef = (opj_jp2_cdef_t*)opj_malloc(sizeof(opj_jp2_cdef_t)
); |
1290 if(!jp2->color.jp2_cdef) | 1322 » if(!jp2->color.jp2_cdef) |
1291 { | 1323 » { |
1292 opj_free(cdef_info); | 1324 » » opj_free(cdef_info); |
1293 return OPJ_FALSE; | 1325 » » return OPJ_FALSE; |
1294 } | 1326 » } |
1295 jp2->color.jp2_cdef->info = cdef_info; | 1327 jp2->color.jp2_cdef->info = cdef_info; |
1296 jp2->color.jp2_cdef->n = (OPJ_UINT16) l_value; | 1328 jp2->color.jp2_cdef->n = (OPJ_UINT16) l_value; |
1297 | 1329 |
1298 for(i = 0; i < jp2->color.jp2_cdef->n; ++i) { | 1330 for(i = 0; i < jp2->color.jp2_cdef->n; ++i) { |
1299 opj_read_bytes(p_cdef_header_data, &l_value, 2);
/* Cn^i */ | 1331 opj_read_bytes(p_cdef_header_data, &l_value, 2);
/* Cn^i */ |
1300 p_cdef_header_data +=2; | 1332 p_cdef_header_data +=2; |
1301 cdef_info[i].cn = (OPJ_UINT16) l_value; | 1333 cdef_info[i].cn = (OPJ_UINT16) l_value; |
1302 | 1334 |
1303 opj_read_bytes(p_cdef_header_data, &l_value, 2);
/* Typ^i */ | 1335 opj_read_bytes(p_cdef_header_data, &l_value, 2);
/* Typ^i */ |
1304 p_cdef_header_data +=2; | 1336 p_cdef_header_data +=2; |
1305 cdef_info[i].typ = (OPJ_UINT16) l_value; | 1337 cdef_info[i].typ = (OPJ_UINT16) l_value; |
1306 | 1338 |
1307 opj_read_bytes(p_cdef_header_data, &l_value, 2);
/* Asoc^i */ | 1339 opj_read_bytes(p_cdef_header_data, &l_value, 2);
/* Asoc^i */ |
1308 p_cdef_header_data +=2; | 1340 p_cdef_header_data +=2; |
1309 cdef_info[i].asoc = (OPJ_UINT16) l_value; | 1341 cdef_info[i].asoc = (OPJ_UINT16) l_value; |
1310 } | 1342 } |
1311 | 1343 |
1312 return OPJ_TRUE; | 1344 return OPJ_TRUE; |
1313 } | 1345 } |
1314 | 1346 |
1315 OPJ_BOOL opj_jp2_read_colr( opj_jp2_t *jp2, | 1347 static OPJ_BOOL opj_jp2_read_colr( opj_jp2_t *jp2, |
1316 OPJ_BYTE * p_colr_header_data, | 1348 OPJ_BYTE * p_colr_header_data, |
1317 OPJ_UINT32 p_colr_header_size, | 1349 OPJ_UINT32 p_colr_header_size, |
1318 opj_event_mgr_t * p_manager | 1350 opj_event_mgr_t * p_manager |
1319 ) | 1351 ) |
1320 { | 1352 { |
1321 OPJ_UINT32 l_value; | 1353 OPJ_UINT32 l_value; |
1322 | 1354 |
1323 /* preconditions */ | 1355 /* preconditions */ |
1324 assert(jp2 != 00); | 1356 assert(jp2 != 00); |
1325 assert(p_colr_header_data != 00); | 1357 assert(p_colr_header_data != 00); |
(...skipping 20 matching lines...) Expand all Loading... |
1346 ++p_colr_header_data; | 1378 ++p_colr_header_data; |
1347 | 1379 |
1348 opj_read_bytes(p_colr_header_data,&jp2->approx ,1);
/* APPROX */ | 1380 opj_read_bytes(p_colr_header_data,&jp2->approx ,1);
/* APPROX */ |
1349 ++p_colr_header_data; | 1381 ++p_colr_header_data; |
1350 | 1382 |
1351 if (jp2->meth == 1) { | 1383 if (jp2->meth == 1) { |
1352 if (p_colr_header_size < 7) { | 1384 if (p_colr_header_size < 7) { |
1353 opj_event_msg(p_manager, EVT_ERROR, "Bad COLR header box
(bad size: %d)\n", p_colr_header_size); | 1385 opj_event_msg(p_manager, EVT_ERROR, "Bad COLR header box
(bad size: %d)\n", p_colr_header_size); |
1354 return OPJ_FALSE; | 1386 return OPJ_FALSE; |
1355 } | 1387 } |
1356 » » if (p_colr_header_size > 7) { | 1388 » » if ((p_colr_header_size > 7) && (jp2->enumcs != 14)) { /* handle
d below for CIELab) */ |
1357 /* testcase Altona_Technical_v20_x4.pdf */ | 1389 /* testcase Altona_Technical_v20_x4.pdf */ |
1358 opj_event_msg(p_manager, EVT_WARNING, "Bad COLR header b
ox (bad size: %d)\n", p_colr_header_size); | 1390 opj_event_msg(p_manager, EVT_WARNING, "Bad COLR header b
ox (bad size: %d)\n", p_colr_header_size); |
1359 } | 1391 } |
1360 | 1392 |
1361 opj_read_bytes(p_colr_header_data,&jp2->enumcs ,4);
/* EnumCS */ | 1393 opj_read_bytes(p_colr_header_data,&jp2->enumcs ,4);
/* EnumCS */ |
1362 | 1394 |
1363 jp2->color.jp2_has_colr = 1; | 1395 » » p_colr_header_data += 4; |
| 1396 |
| 1397 » » if(jp2->enumcs == 14)/* CIELab */ |
| 1398 » » { |
| 1399 » » » OPJ_UINT32 *cielab; |
| 1400 » » » OPJ_UINT32 rl, ol, ra, oa, rb, ob, il; |
| 1401 |
| 1402 » » » cielab = (OPJ_UINT32*)opj_malloc(9 * sizeof(OPJ_UINT32))
; |
| 1403 » » » cielab[0] = 14; /* enumcs */ |
| 1404 » » » |
| 1405 » » » /* default values */ |
| 1406 » » » rl = ra = rb = ol = oa = ob = 0; |
| 1407 » » » il = 0x00443530; /* D50 */ |
| 1408 » » » cielab[1] = 0x44454600;/* DEF */ |
| 1409 |
| 1410 » » » if(p_colr_header_size == 35) |
| 1411 » » » { |
| 1412 » » » » opj_read_bytes(p_colr_header_data, &rl, 4); |
| 1413 » » » » p_colr_header_data += 4; |
| 1414 » » » » opj_read_bytes(p_colr_header_data, &ol, 4); |
| 1415 » » » » p_colr_header_data += 4; |
| 1416 » » » » opj_read_bytes(p_colr_header_data, &ra, 4); |
| 1417 » » » » p_colr_header_data += 4; |
| 1418 » » » » opj_read_bytes(p_colr_header_data, &oa, 4); |
| 1419 » » » » p_colr_header_data += 4; |
| 1420 » » » » opj_read_bytes(p_colr_header_data, &rb, 4); |
| 1421 » » » » p_colr_header_data += 4; |
| 1422 » » » » opj_read_bytes(p_colr_header_data, &ob, 4); |
| 1423 » » » » p_colr_header_data += 4; |
| 1424 » » » » opj_read_bytes(p_colr_header_data, &il, 4); |
| 1425 » » » » p_colr_header_data += 4; |
| 1426 » » » » |
| 1427 » » » » cielab[1] = 0; |
| 1428 » » » } |
| 1429 » » » else if(p_colr_header_size != 7) |
| 1430 » » » { |
| 1431 » » » » opj_event_msg(p_manager, EVT_WARNING, "Bad COLR
header box (CIELab, bad size: %d)\n", p_colr_header_size); |
| 1432 » » » } |
| 1433 » » » cielab[2] = rl; cielab[4] = ra; cielab[6] = rb; |
| 1434 » » » cielab[3] = ol; cielab[5] = oa; cielab[7] = ob; |
| 1435 » » » cielab[8] = il; |
| 1436 |
| 1437 » » » jp2->color.icc_profile_buf = (OPJ_BYTE*)cielab; |
| 1438 » » » jp2->color.icc_profile_len = 0; |
| 1439 » » } |
| 1440 » » jp2->color.jp2_has_colr = 1; |
1364 } | 1441 } |
1365 else if (jp2->meth == 2) { | 1442 else if (jp2->meth == 2) { |
1366 /* ICC profile */ | 1443 /* ICC profile */ |
1367 OPJ_INT32 it_icc_value = 0; | 1444 OPJ_INT32 it_icc_value = 0; |
1368 OPJ_INT32 icc_len = (OPJ_INT32)p_colr_header_size - 3; | 1445 OPJ_INT32 icc_len = (OPJ_INT32)p_colr_header_size - 3; |
1369 | 1446 |
1370 jp2->color.icc_profile_len = (OPJ_UINT32)icc_len; | 1447 jp2->color.icc_profile_len = (OPJ_UINT32)icc_len; |
1371 jp2->color.icc_profile_buf = (OPJ_BYTE*) opj_calloc(1,(size_t)ic
c_len); | 1448 jp2->color.icc_profile_buf = (OPJ_BYTE*) opj_calloc(1,(size_t)ic
c_len); |
1372 if (!jp2->color.icc_profile_buf) | 1449 » » if (!jp2->color.icc_profile_buf) |
1373 { | 1450 » » { |
1374 jp2->color.icc_profile_len = 0; | 1451 » » » jp2->color.icc_profile_len = 0; |
1375 return OPJ_FALSE; | 1452 » » » return OPJ_FALSE; |
1376 } | 1453 » » } |
1377 | 1454 |
1378 for (it_icc_value = 0; it_icc_value < icc_len; ++it_icc_value) | 1455 for (it_icc_value = 0; it_icc_value < icc_len; ++it_icc_value) |
1379 { | 1456 { |
1380 opj_read_bytes(p_colr_header_data,&l_value,1);
/* icc values */ | 1457 opj_read_bytes(p_colr_header_data,&l_value,1);
/* icc values */ |
1381 ++p_colr_header_data; | 1458 ++p_colr_header_data; |
1382 jp2->color.icc_profile_buf[it_icc_value] = (OPJ_BYTE) l_
value; | 1459 jp2->color.icc_profile_buf[it_icc_value] = (OPJ_BYTE) l_
value; |
1383 } | 1460 } |
1384 | 1461 |
1385 jp2->color.jp2_has_colr = 1; | 1462 » » jp2->color.jp2_has_colr = 1; |
1386 } | 1463 } |
1387 else if (jp2->meth > 2) | 1464 else if (jp2->meth > 2) |
1388 { | 1465 » { |
1389 /*» ISO/IEC 15444-1:2004 (E), Table I.9 Legal METH values: | 1466 » » /*» ISO/IEC 15444-1:2004 (E), Table I.9 Legal METH values: |
1390 conforming JP2 reader shall ignore the entire Colour Specification box.*
/ | 1467 » » conforming JP2 reader shall ignore the entire Colour Specificati
on box.*/ |
1391 opj_event_msg(p_manager, EVT_INFO, "COLR BOX meth value is not a regular
value (%d), " | 1468 » » opj_event_msg(p_manager, EVT_INFO, "COLR BOX meth value is not a
regular value (%d), " |
1392 "so we will ignore the entire Colour Specification box. \n", jp2->me
th); | 1469 » » » "so we will ignore the entire Colour Specification box.
\n", jp2->meth); |
1393 } | 1470 » } |
1394 return OPJ_TRUE; | 1471 » return OPJ_TRUE; |
1395 } | 1472 } |
1396 | 1473 |
1397 OPJ_BOOL opj_jp2_decode(opj_jp2_t *jp2, | 1474 OPJ_BOOL opj_jp2_decode(opj_jp2_t *jp2, |
1398 opj_stream_private_t *p_stream, | 1475 opj_stream_private_t *p_stream, |
1399 opj_image_t* p_image, | 1476 opj_image_t* p_image, |
1400 opj_event_mgr_t * p_manager) | 1477 opj_event_mgr_t * p_manager) |
1401 { | 1478 { |
1402 if (!p_image) | 1479 if (!p_image) |
1403 return OPJ_FALSE; | 1480 return OPJ_FALSE; |
1404 | 1481 |
1405 /* J2K decoding */ | 1482 /* J2K decoding */ |
1406 if( ! opj_j2k_decode(jp2->j2k, p_stream, p_image, p_manager) ) { | 1483 if( ! opj_j2k_decode(jp2->j2k, p_stream, p_image, p_manager) ) { |
1407 opj_event_msg(p_manager, EVT_ERROR, "Failed to decode the codest
ream in the JP2 file\n"); | 1484 opj_event_msg(p_manager, EVT_ERROR, "Failed to decode the codest
ream in the JP2 file\n"); |
1408 return OPJ_FALSE; | 1485 return OPJ_FALSE; |
1409 } | 1486 } |
1410 | 1487 |
1411 if (!jp2->ignore_pclr_cmap_cdef){ | 1488 » if (!jp2->ignore_pclr_cmap_cdef){ |
1412 » if (!opj_jp2_check_color(p_image, &(jp2->color), p_manager)) { | 1489 » » if (!opj_jp2_check_color(p_image, &(jp2->color), p_manager)) { |
1413 » » return OPJ_FALSE; | 1490 » » » return OPJ_FALSE; |
1414 » } | 1491 » » } |
1415 | 1492 |
1416 » /* Set Image Color Space */ | 1493 » » /* Set Image Color Space */ |
1417 » if (jp2->enumcs == 16) | 1494 » » if (jp2->enumcs == 16) |
1418 » » p_image->color_space = OPJ_CLRSPC_SRGB; | 1495 » » » p_image->color_space = OPJ_CLRSPC_SRGB; |
1419 » else if (jp2->enumcs == 17) | 1496 » » else if (jp2->enumcs == 17) |
1420 » » p_image->color_space = OPJ_CLRSPC_GRAY; | 1497 » » » p_image->color_space = OPJ_CLRSPC_GRAY; |
1421 » else if (jp2->enumcs == 18) | 1498 » » else if (jp2->enumcs == 18) |
1422 » » p_image->color_space = OPJ_CLRSPC_SYCC; | 1499 » » » p_image->color_space = OPJ_CLRSPC_SYCC; |
1423 else if (jp2->enumcs == 24) | 1500 » » else if (jp2->enumcs == 24) |
1424 p_image->color_space = OPJ_CLRSPC_EYCC; | 1501 » » » p_image->color_space = OPJ_CLRSPC_EYCC; |
1425 » else | 1502 » » else if (jp2->enumcs == 12) |
1426 » » p_image->color_space = OPJ_CLRSPC_UNKNOWN; | 1503 » » » p_image->color_space = OPJ_CLRSPC_CMYK; |
| 1504 » » else |
| 1505 » » » p_image->color_space = OPJ_CLRSPC_UNKNOWN; |
1427 | 1506 |
1428 » if(jp2->color.jp2_pclr) { | 1507 » » if(jp2->color.jp2_pclr) { |
1429 » » /* Part 1, I.5.3.4: Either both or none : */ | 1508 » » » /* Part 1, I.5.3.4: Either both or none : */ |
1430 » » if( !jp2->color.jp2_pclr->cmap) | 1509 » » » if( !jp2->color.jp2_pclr->cmap) |
1431 » » » opj_jp2_free_pclr(&(jp2->color)); | 1510 » » » » opj_jp2_free_pclr(&(jp2->color)); |
1432 » » else | 1511 » » » else if (p_image->pdfium_use_colorspace) |
1433 » » » opj_jp2_apply_pclr(p_image, &(jp2->color)); | 1512 » » » » opj_jp2_apply_pclr(p_image, &(jp2->color)); |
1434 » } | 1513 » » } |
1435 | 1514 |
1436 » /* Apply the color space if needed */ | 1515 » » /* Apply the color space if needed */ |
1437 » if(jp2->color.jp2_cdef) { | 1516 » » if(jp2->color.jp2_cdef) { |
1438 » » opj_jp2_apply_cdef(p_image, &(jp2->color)); | 1517 » » » opj_jp2_apply_cdef(p_image, &(jp2->color), p_manager); |
1439 » } | 1518 » » } |
1440 | 1519 |
1441 » if(jp2->color.icc_profile_buf) { | 1520 » » if(jp2->color.icc_profile_buf) { |
1442 » » p_image->icc_profile_buf = jp2->color.icc_profile_buf; | 1521 » » » p_image->icc_profile_buf = jp2->color.icc_profile_buf; |
1443 » » p_image->icc_profile_len = jp2->color.icc_profile_len; | 1522 » » » p_image->icc_profile_len = jp2->color.icc_profile_len; |
1444 » » jp2->color.icc_profile_buf = NULL; | 1523 » » » jp2->color.icc_profile_buf = NULL; |
1445 » } | 1524 » » } |
1446 } | 1525 » } |
1447 | 1526 |
1448 return OPJ_TRUE; | 1527 return OPJ_TRUE; |
1449 } | 1528 } |
1450 | 1529 |
1451 OPJ_BOOL opj_jp2_write_jp2h(opj_jp2_t *jp2, | 1530 static OPJ_BOOL opj_jp2_write_jp2h(opj_jp2_t *jp2, |
1452 opj_stream_private_t *stream, | 1531 opj_stream_private_t *stream, |
1453 opj_event_mgr_t * p_manager | 1532 opj_event_mgr_t * p_manager |
1454 ) | 1533 ) |
1455 { | 1534 { |
1456 opj_jp2_img_header_writer_handler_t l_writers [4]; | 1535 opj_jp2_img_header_writer_handler_t l_writers [4]; |
1457 opj_jp2_img_header_writer_handler_t * l_current_writer; | 1536 opj_jp2_img_header_writer_handler_t * l_current_writer; |
1458 | 1537 |
1459 OPJ_INT32 i, l_nb_pass; | 1538 OPJ_INT32 i, l_nb_pass; |
1460 /* size of data for super box*/ | 1539 /* size of data for super box*/ |
1461 OPJ_UINT32 l_jp2h_size = 8; | 1540 OPJ_UINT32 l_jp2h_size = 8; |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1544 for (i=0;i<l_nb_pass;++i) { | 1623 for (i=0;i<l_nb_pass;++i) { |
1545 if (l_current_writer->m_data != 00) { | 1624 if (l_current_writer->m_data != 00) { |
1546 opj_free(l_current_writer->m_data ); | 1625 opj_free(l_current_writer->m_data ); |
1547 } | 1626 } |
1548 ++l_current_writer; | 1627 ++l_current_writer; |
1549 } | 1628 } |
1550 | 1629 |
1551 return l_result; | 1630 return l_result; |
1552 } | 1631 } |
1553 | 1632 |
1554 OPJ_BOOL opj_jp2_write_ftyp(opj_jp2_t *jp2, | 1633 static OPJ_BOOL opj_jp2_write_ftyp(opj_jp2_t *jp2, |
1555 opj_stream_private_t *ci
o, | 1634 opj_stream_private_t *ci
o, |
1556 opj_event_mgr_t * p_mana
ger ) | 1635 opj_event_mgr_t * p_mana
ger ) |
1557 { | 1636 { |
1558 OPJ_UINT32 i; | 1637 OPJ_UINT32 i; |
1559 OPJ_UINT32 l_ftyp_size = 16 + 4 * jp2->numcl; | 1638 OPJ_UINT32 l_ftyp_size = 16 + 4 * jp2->numcl; |
1560 OPJ_BYTE * l_ftyp_data, * l_current_data_ptr; | 1639 OPJ_BYTE * l_ftyp_data, * l_current_data_ptr; |
1561 OPJ_BOOL l_result; | 1640 OPJ_BOOL l_result; |
1562 | 1641 |
1563 /* preconditions */ | 1642 /* preconditions */ |
1564 assert(cio != 00); | 1643 assert(cio != 00); |
(...skipping 29 matching lines...) Expand all Loading... |
1594 if (! l_result) | 1673 if (! l_result) |
1595 { | 1674 { |
1596 opj_event_msg(p_manager, EVT_ERROR, "Error while writing ftyp da
ta to stream\n"); | 1675 opj_event_msg(p_manager, EVT_ERROR, "Error while writing ftyp da
ta to stream\n"); |
1597 } | 1676 } |
1598 | 1677 |
1599 opj_free(l_ftyp_data); | 1678 opj_free(l_ftyp_data); |
1600 | 1679 |
1601 return l_result; | 1680 return l_result; |
1602 } | 1681 } |
1603 | 1682 |
1604 OPJ_BOOL opj_jp2_write_jp2c(opj_jp2_t *jp2, | 1683 static OPJ_BOOL opj_jp2_write_jp2c(opj_jp2_t *jp2, |
1605 opj_stream_private_t *ci
o, | 1684 opj_stream_private_t *ci
o, |
1606 opj_event_mgr_t * p_mana
ger ) | 1685 opj_event_mgr_t * p_mana
ger ) |
1607 { | 1686 { |
1608 OPJ_OFF_T j2k_codestream_exit; | 1687 OPJ_OFF_T j2k_codestream_exit; |
1609 OPJ_BYTE l_data_header [8]; | 1688 OPJ_BYTE l_data_header [8]; |
1610 | 1689 |
1611 /* preconditions */ | 1690 /* preconditions */ |
1612 assert(jp2 != 00); | 1691 assert(jp2 != 00); |
1613 assert(cio != 00); | 1692 assert(cio != 00); |
1614 assert(p_manager != 00); | 1693 assert(p_manager != 00); |
(...skipping 16 matching lines...) Expand all Loading... |
1631 } | 1710 } |
1632 | 1711 |
1633 if (! opj_stream_seek(cio,j2k_codestream_exit,p_manager)) { | 1712 if (! opj_stream_seek(cio,j2k_codestream_exit,p_manager)) { |
1634 opj_event_msg(p_manager, EVT_ERROR, "Failed to seek in the strea
m.\n"); | 1713 opj_event_msg(p_manager, EVT_ERROR, "Failed to seek in the strea
m.\n"); |
1635 return OPJ_FALSE; | 1714 return OPJ_FALSE; |
1636 } | 1715 } |
1637 | 1716 |
1638 return OPJ_TRUE; | 1717 return OPJ_TRUE; |
1639 } | 1718 } |
1640 | 1719 |
1641 OPJ_BOOL opj_jp2_write_jp(» opj_jp2_t *jp2, | 1720 static OPJ_BOOL opj_jp2_write_jp(» opj_jp2_t *jp2, |
1642 opj_stream_private_t *cio, | 1721 opj_stream_private_t *cio, |
1643 opj_event_mgr_t * p_manager ) | 1722 opj_event_mgr_t * p_manager ) |
1644 { | 1723 { |
1645 /* 12 bytes will be read */ | 1724 /* 12 bytes will be read */ |
1646 OPJ_BYTE l_signature_data [12]; | 1725 OPJ_BYTE l_signature_data [12]; |
1647 | 1726 |
1648 /* preconditions */ | 1727 /* preconditions */ |
1649 assert(cio != 00); | 1728 assert(cio != 00); |
1650 assert(jp2 != 00); | 1729 assert(jp2 != 00); |
1651 assert(p_manager != 00); | 1730 assert(p_manager != 00); |
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1862 opj_stream_private_t *cio, | 1941 opj_stream_private_t *cio, |
1863 opj_event_mgr_t * p_manager | 1942 opj_event_mgr_t * p_manager |
1864 ) | 1943 ) |
1865 { | 1944 { |
1866 /* preconditions */ | 1945 /* preconditions */ |
1867 assert(jp2 != 00); | 1946 assert(jp2 != 00); |
1868 assert(cio != 00); | 1947 assert(cio != 00); |
1869 assert(p_manager != 00); | 1948 assert(p_manager != 00); |
1870 | 1949 |
1871 /* customization of the end encoding */ | 1950 /* customization of the end encoding */ |
1872 » opj_jp2_setup_end_header_reading(jp2); | 1951 » if (! opj_jp2_setup_end_header_reading(jp2, p_manager)) { |
| 1952 » » return OPJ_FALSE; |
| 1953 » } |
1873 | 1954 |
1874 /* write header */ | 1955 /* write header */ |
1875 if (! opj_jp2_exec (jp2,jp2->m_procedure_list,cio,p_manager)) { | 1956 if (! opj_jp2_exec (jp2,jp2->m_procedure_list,cio,p_manager)) { |
1876 return OPJ_FALSE; | 1957 return OPJ_FALSE; |
1877 } | 1958 } |
1878 | 1959 |
1879 return opj_j2k_end_decompress(jp2->j2k, cio, p_manager); | 1960 return opj_j2k_end_decompress(jp2->j2k, cio, p_manager); |
1880 } | 1961 } |
1881 | 1962 |
1882 OPJ_BOOL opj_jp2_end_compress( opj_jp2_t *jp2, | 1963 OPJ_BOOL opj_jp2_end_compress( opj_jp2_t *jp2, |
1883 opj_stream_private_t
*cio, | 1964 opj_stream_private_t
*cio, |
1884 opj_event_mgr_t * p_
manager | 1965 opj_event_mgr_t * p_
manager |
1885 ) | 1966 ) |
1886 { | 1967 { |
1887 /* preconditions */ | 1968 /* preconditions */ |
1888 assert(jp2 != 00); | 1969 assert(jp2 != 00); |
1889 assert(cio != 00); | 1970 assert(cio != 00); |
1890 assert(p_manager != 00); | 1971 assert(p_manager != 00); |
1891 | 1972 |
1892 /* customization of the end encoding */ | 1973 /* customization of the end encoding */ |
1893 » opj_jp2_setup_end_header_writing(jp2); | 1974 » if (! opj_jp2_setup_end_header_writing(jp2, p_manager)) { |
| 1975 » » return OPJ_FALSE; |
| 1976 » } |
1894 | 1977 |
1895 if (! opj_j2k_end_compress(jp2->j2k,cio,p_manager)) { | 1978 if (! opj_j2k_end_compress(jp2->j2k,cio,p_manager)) { |
1896 return OPJ_FALSE; | 1979 return OPJ_FALSE; |
1897 } | 1980 } |
1898 | 1981 |
1899 /* write header */ | 1982 /* write header */ |
1900 return opj_jp2_exec(jp2,jp2->m_procedure_list,cio,p_manager); | 1983 return opj_jp2_exec(jp2,jp2->m_procedure_list,cio,p_manager); |
1901 } | 1984 } |
1902 | 1985 |
1903 void opj_jp2_setup_end_header_writing (opj_jp2_t *jp2) | 1986 static OPJ_BOOL opj_jp2_setup_end_header_writing (opj_jp2_t *jp2, opj_event_mgr_
t * p_manager) |
1904 { | 1987 { |
1905 /* preconditions */ | 1988 /* preconditions */ |
1906 assert(jp2 != 00); | 1989 assert(jp2 != 00); |
| 1990 assert(p_manager != 00); |
1907 | 1991 |
1908 #ifdef USE_JPIP | 1992 #ifdef USE_JPIP |
1909 if( jp2->jpip_on ) | 1993 » if( jp2->jpip_on ) { |
1910 opj_procedure_list_add_procedure(jp2->m_procedure_list,(opj_procedure)opj_jp
ip_write_iptr ); | 1994 » » if (! opj_procedure_list_add_procedure(jp2->m_procedure_list,(op
j_procedure)opj_jpip_write_iptr, p_manager)) { |
| 1995 » » » return OPJ_FALSE; |
| 1996 » » } |
| 1997 » } |
1911 #endif | 1998 #endif |
1912 » opj_procedure_list_add_procedure(jp2->m_procedure_list,(opj_procedure)op
j_jp2_write_jp2c ); | 1999 » if (! opj_procedure_list_add_procedure(jp2->m_procedure_list,(opj_proced
ure)opj_jp2_write_jp2c, p_manager)) { |
| 2000 » » return OPJ_FALSE; |
| 2001 » } |
1913 /* DEVELOPER CORNER, add your custom procedures */ | 2002 /* DEVELOPER CORNER, add your custom procedures */ |
1914 #ifdef USE_JPIP | 2003 #ifdef USE_JPIP |
1915 if( jp2->jpip_on ) | 2004 if( jp2->jpip_on ) |
1916 { | 2005 » { |
1917 opj_procedure_list_add_procedure(jp2->m_procedure_list,(opj_procedure)opj_jp
ip_write_cidx ); | 2006 » » if (! opj_procedure_list_add_procedure(jp2->m_procedure_list,(op
j_procedure)opj_jpip_write_cidx, p_manager)) { |
1918 opj_procedure_list_add_procedure(jp2->m_procedure_list,(opj_procedure)opj_jp
ip_write_fidx ); | 2007 » » » return OPJ_FALSE; |
1919 } | 2008 » » } |
| 2009 » » if (! opj_procedure_list_add_procedure(jp2->m_procedure_list,(op
j_procedure)opj_jpip_write_fidx, p_manager)) { |
| 2010 » » » return OPJ_FALSE; |
| 2011 » » } |
| 2012 » } |
1920 #endif | 2013 #endif |
| 2014 return OPJ_TRUE; |
1921 } | 2015 } |
1922 | 2016 |
1923 void opj_jp2_setup_end_header_reading (opj_jp2_t *jp2) | 2017 static OPJ_BOOL opj_jp2_setup_end_header_reading (opj_jp2_t *jp2, opj_event_mgr_
t * p_manager) |
1924 { | 2018 { |
1925 /* preconditions */ | 2019 /* preconditions */ |
1926 assert(jp2 != 00); | 2020 assert(jp2 != 00); |
1927 » opj_procedure_list_add_procedure(jp2->m_procedure_list,(opj_procedure)op
j_jp2_read_header_procedure ); | 2021 » assert(p_manager != 00); |
| 2022 » |
| 2023 » if (! opj_procedure_list_add_procedure(jp2->m_procedure_list,(opj_proced
ure)opj_jp2_read_header_procedure, p_manager)) { |
| 2024 » » return OPJ_FALSE; |
| 2025 » } |
1928 /* DEVELOPER CORNER, add your custom procedures */ | 2026 /* DEVELOPER CORNER, add your custom procedures */ |
| 2027 |
| 2028 return OPJ_TRUE; |
1929 } | 2029 } |
1930 | 2030 |
1931 OPJ_BOOL opj_jp2_default_validation (» opj_jp2_t * jp2, | 2031 static OPJ_BOOL opj_jp2_default_validation (» opj_jp2_t * jp2, |
1932 opj_stream_private_t *cio, | 2032 opj_stream_private_t *cio, |
1933 opj_event_mgr_t * p_manager | 2033 opj_event_mgr_t * p_manager |
1934 ) | 2034 ) |
1935 { | 2035 { |
1936 OPJ_BOOL l_is_valid = OPJ_TRUE; | 2036 OPJ_BOOL l_is_valid = OPJ_TRUE; |
1937 OPJ_UINT32 i; | 2037 OPJ_UINT32 i; |
1938 | 2038 |
1939 /* preconditions */ | 2039 /* preconditions */ |
1940 assert(jp2 != 00); | 2040 assert(jp2 != 00); |
1941 assert(cio != 00); | 2041 assert(cio != 00); |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1975 /* METH */ | 2075 /* METH */ |
1976 l_is_valid &= ((jp2->meth > 0) && (jp2->meth < 3)); | 2076 l_is_valid &= ((jp2->meth > 0) && (jp2->meth < 3)); |
1977 | 2077 |
1978 /* stream validation */ | 2078 /* stream validation */ |
1979 /* back and forth is needed */ | 2079 /* back and forth is needed */ |
1980 l_is_valid &= opj_stream_has_seek(cio); | 2080 l_is_valid &= opj_stream_has_seek(cio); |
1981 | 2081 |
1982 return l_is_valid; | 2082 return l_is_valid; |
1983 } | 2083 } |
1984 | 2084 |
1985 OPJ_BOOL opj_jp2_read_header_procedure( opj_jp2_t *jp2, | 2085 static OPJ_BOOL opj_jp2_read_header_procedure( opj_jp2_t *jp2, |
1986 opj_stream_private_t *stream, | 2086 opj_stream_private_t *stream, |
1987 opj_event_mgr_t * p_manager | 2087 opj_event_mgr_t * p_manager |
1988 ) | 2088 ) |
1989 { | 2089 { |
1990 opj_jp2_box_t box; | 2090 opj_jp2_box_t box; |
1991 OPJ_UINT32 l_nb_bytes_read; | 2091 OPJ_UINT32 l_nb_bytes_read; |
1992 const opj_jp2_header_handler_t * l_current_handler; | 2092 const opj_jp2_header_handler_t * l_current_handler; |
| 2093 const opj_jp2_header_handler_t * l_current_handler_misplaced; |
1993 OPJ_UINT32 l_last_data_size = OPJ_BOX_SIZE; | 2094 OPJ_UINT32 l_last_data_size = OPJ_BOX_SIZE; |
1994 OPJ_UINT32 l_current_data_size; | 2095 OPJ_UINT32 l_current_data_size; |
1995 OPJ_BYTE * l_current_data = 00; | 2096 OPJ_BYTE * l_current_data = 00; |
1996 | 2097 |
1997 /* preconditions */ | 2098 /* preconditions */ |
1998 assert(stream != 00); | 2099 assert(stream != 00); |
1999 assert(jp2 != 00); | 2100 assert(jp2 != 00); |
2000 assert(p_manager != 00); | 2101 assert(p_manager != 00); |
2001 | 2102 |
2002 l_current_data = (OPJ_BYTE*)opj_calloc(1,l_last_data_size); | 2103 l_current_data = (OPJ_BYTE*)opj_calloc(1,l_last_data_size); |
(...skipping 23 matching lines...) Expand all Loading... |
2026 return OPJ_FALSE; | 2127 return OPJ_FALSE; |
2027 } | 2128 } |
2028 /* testcase 1851.pdf.SIGSEGV.ce9.948 */ | 2129 /* testcase 1851.pdf.SIGSEGV.ce9.948 */ |
2029 else if (box.length < l_nb_bytes_read) { | 2130 else if (box.length < l_nb_bytes_read) { |
2030 opj_event_msg(p_manager, EVT_ERROR, "invalid box size %d
(%x)\n", box.length, box.type); | 2131 opj_event_msg(p_manager, EVT_ERROR, "invalid box size %d
(%x)\n", box.length, box.type); |
2031 opj_free(l_current_data); | 2132 opj_free(l_current_data); |
2032 return OPJ_FALSE; | 2133 return OPJ_FALSE; |
2033 } | 2134 } |
2034 | 2135 |
2035 l_current_handler = opj_jp2_find_handler(box.type); | 2136 l_current_handler = opj_jp2_find_handler(box.type); |
| 2137 l_current_handler_misplaced = opj_jp2_img_find_handler(box.type)
; |
2036 l_current_data_size = box.length - l_nb_bytes_read; | 2138 l_current_data_size = box.length - l_nb_bytes_read; |
2037 | 2139 |
2038 » » if (l_current_handler != 00) { | 2140 » » if ((l_current_handler != 00) || (l_current_handler_misplaced !=
00)) { |
| 2141 » » » if (l_current_handler == 00) { |
| 2142 » » » » opj_event_msg(p_manager, EVT_WARNING, "Found a m
isplaced '%c%c%c%c' box outside jp2h box\n", (OPJ_BYTE)(box.type>>24), (OPJ_BYTE
)(box.type>>16), (OPJ_BYTE)(box.type>>8), (OPJ_BYTE)(box.type>>0)); |
| 2143 » » » » if (jp2->jp2_state & JP2_STATE_HEADER) { |
| 2144 » » » » » /* read anyway, we already have jp2h */ |
| 2145 » » » » » l_current_handler = l_current_handler_mi
splaced; |
| 2146 » » » » } else { |
| 2147 » » » » » opj_event_msg(p_manager, EVT_WARNING, "J
PEG2000 Header box not read yet, '%c%c%c%c' box will be ignored\n", (OPJ_BYTE)(b
ox.type>>24), (OPJ_BYTE)(box.type>>16), (OPJ_BYTE)(box.type>>8), (OPJ_BYTE)(box.
type>>0)); |
| 2148 » » » » » jp2->jp2_state |= JP2_STATE_UNKNOWN; |
| 2149 » » » » » if (opj_stream_skip(stream,l_current_dat
a_size,p_manager) != l_current_data_size) { |
| 2150 » » » » » » » opj_event_msg(p_manager,
EVT_ERROR, "Problem with skipping JPEG2000 box, stream error\n"); |
| 2151 » » » » » » » opj_free(l_current_data)
; |
| 2152 » » » » » » » return OPJ_FALSE; |
| 2153 » » » » » } |
| 2154 » » » » » continue; |
| 2155 » » » » } |
| 2156 » » » } |
2039 if ((OPJ_OFF_T)l_current_data_size > opj_stream_get_numb
er_byte_left(stream)) { | 2157 if ((OPJ_OFF_T)l_current_data_size > opj_stream_get_numb
er_byte_left(stream)) { |
2040 /* do not even try to malloc if we can't read */ | 2158 /* do not even try to malloc if we can't read */ |
2041 opj_event_msg(p_manager, EVT_ERROR, "Invalid box
size %d for box '%c%c%c%c'. Need %d bytes, %d bytes remaining \n", box.length,
(OPJ_BYTE)(box.type>>24), (OPJ_BYTE)(box.type>>16), (OPJ_BYTE)(box.type>>8), (OP
J_BYTE)(box.type>>0), l_current_data_size, (OPJ_UINT32)opj_stream_get_number_byt
e_left(stream)); | 2159 opj_event_msg(p_manager, EVT_ERROR, "Invalid box
size %d for box '%c%c%c%c'. Need %d bytes, %d bytes remaining \n", box.length,
(OPJ_BYTE)(box.type>>24), (OPJ_BYTE)(box.type>>16), (OPJ_BYTE)(box.type>>8), (OP
J_BYTE)(box.type>>0), l_current_data_size, (OPJ_UINT32)opj_stream_get_number_byt
e_left(stream)); |
2042 opj_free(l_current_data); | 2160 opj_free(l_current_data); |
2043 return OPJ_FALSE; | 2161 return OPJ_FALSE; |
2044 } | 2162 } |
2045 if (l_current_data_size > l_last_data_size) { | 2163 if (l_current_data_size > l_last_data_size) { |
2046 OPJ_BYTE* new_current_data = (OPJ_BYTE*)opj_real
loc(l_current_data,l_current_data_size); | 2164 OPJ_BYTE* new_current_data = (OPJ_BYTE*)opj_real
loc(l_current_data,l_current_data_size); |
2047 if (!new_current_data) { | 2165 if (!new_current_data) { |
2048 opj_free(l_current_data); | 2166 opj_free(l_current_data); |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2135 opj_image_t * p_image, | 2253 opj_image_t * p_image, |
2136 opj_event_mgr_t * p_manager | 2254 opj_event_mgr_t * p_manager |
2137 ) | 2255 ) |
2138 { | 2256 { |
2139 /* preconditions */ | 2257 /* preconditions */ |
2140 assert(jp2 != 00); | 2258 assert(jp2 != 00); |
2141 assert(stream != 00); | 2259 assert(stream != 00); |
2142 assert(p_manager != 00); | 2260 assert(p_manager != 00); |
2143 | 2261 |
2144 /* customization of the validation */ | 2262 /* customization of the validation */ |
2145 » opj_jp2_setup_encoding_validation (jp2); | 2263 » if (! opj_jp2_setup_encoding_validation (jp2, p_manager)) { |
| 2264 » » return OPJ_FALSE; |
| 2265 » } |
2146 | 2266 |
2147 /* validation of the parameters codec */ | 2267 /* validation of the parameters codec */ |
2148 if (! opj_jp2_exec(jp2,jp2->m_validation_list,stream,p_manager)) { | 2268 if (! opj_jp2_exec(jp2,jp2->m_validation_list,stream,p_manager)) { |
2149 return OPJ_FALSE; | 2269 return OPJ_FALSE; |
2150 } | 2270 } |
2151 | 2271 |
2152 /* customization of the encoding */ | 2272 /* customization of the encoding */ |
2153 » opj_jp2_setup_header_writing(jp2); | 2273 » if (! opj_jp2_setup_header_writing(jp2, p_manager)) { |
| 2274 » » return OPJ_FALSE; |
| 2275 » } |
2154 | 2276 |
2155 /* write header */ | 2277 /* write header */ |
2156 if (! opj_jp2_exec (jp2,jp2->m_procedure_list,stream,p_manager)) { | 2278 if (! opj_jp2_exec (jp2,jp2->m_procedure_list,stream,p_manager)) { |
2157 return OPJ_FALSE; | 2279 return OPJ_FALSE; |
2158 } | 2280 } |
2159 | 2281 |
2160 return opj_j2k_start_compress(jp2->j2k,stream,p_image,p_manager); | 2282 return opj_j2k_start_compress(jp2->j2k,stream,p_image,p_manager); |
2161 } | 2283 } |
2162 | 2284 |
2163 const opj_jp2_header_handler_t * opj_jp2_find_handler (OPJ_UINT32 p_id) | 2285 static const opj_jp2_header_handler_t * opj_jp2_find_handler (OPJ_UINT32 p_id) |
2164 { | 2286 { |
2165 OPJ_UINT32 i, l_handler_size = sizeof(jp2_header) / sizeof(opj_jp2_heade
r_handler_t); | 2287 OPJ_UINT32 i, l_handler_size = sizeof(jp2_header) / sizeof(opj_jp2_heade
r_handler_t); |
2166 | 2288 |
2167 for (i=0;i<l_handler_size;++i) { | 2289 for (i=0;i<l_handler_size;++i) { |
2168 if (jp2_header[i].id == p_id) { | 2290 if (jp2_header[i].id == p_id) { |
2169 return &jp2_header[i]; | 2291 return &jp2_header[i]; |
2170 } | 2292 } |
2171 } | 2293 } |
2172 return NULL; | 2294 return NULL; |
2173 } | 2295 } |
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2301 { | 2423 { |
2302 opj_read_bytes(p_header_data,&jp2->cl[i],4); /* CLi *
/ | 2424 opj_read_bytes(p_header_data,&jp2->cl[i],4); /* CLi *
/ |
2303 p_header_data += 4; | 2425 p_header_data += 4; |
2304 } | 2426 } |
2305 | 2427 |
2306 jp2->jp2_state |= JP2_STATE_FILE_TYPE; | 2428 jp2->jp2_state |= JP2_STATE_FILE_TYPE; |
2307 | 2429 |
2308 return OPJ_TRUE; | 2430 return OPJ_TRUE; |
2309 } | 2431 } |
2310 | 2432 |
2311 OPJ_BOOL opj_jp2_skip_jp2c(» opj_jp2_t *jp2, | 2433 static OPJ_BOOL opj_jp2_skip_jp2c(» opj_jp2_t *jp2, |
2312 opj_stream_private_t *stream, | 2434 opj_stream_private_t *stream, |
2313 opj_event_mgr_t * p_manager ) | 2435 opj_event_mgr_t * p_manager ) |
2314 { | 2436 { |
2315 /* preconditions */ | 2437 /* preconditions */ |
2316 assert(jp2 != 00); | 2438 assert(jp2 != 00); |
2317 assert(stream != 00); | 2439 assert(stream != 00); |
2318 assert(p_manager != 00); | 2440 assert(p_manager != 00); |
2319 | 2441 |
2320 jp2->j2k_codestream_offset = opj_stream_tell(stream); | 2442 jp2->j2k_codestream_offset = opj_stream_tell(stream); |
2321 | 2443 |
(...skipping 23 matching lines...) Expand all Loading... |
2345 } | 2467 } |
2346 | 2468 |
2347 /** | 2469 /** |
2348 * Reads the Jpeg2000 file Header box - JP2 Header box (warning, this is a super
box). | 2470 * Reads the Jpeg2000 file Header box - JP2 Header box (warning, this is a super
box). |
2349 * | 2471 * |
2350 * @param p_header_data the data contained in the file header box. | 2472 * @param p_header_data the data contained in the file header box. |
2351 * @param jp2 the jpeg2000 file codec. | 2473 * @param jp2 the jpeg2000 file codec. |
2352 * @param p_header_size the size of the data contained in the file heade
r box. | 2474 * @param p_header_size the size of the data contained in the file heade
r box. |
2353 * @param p_manager the user event manager. | 2475 * @param p_manager the user event manager. |
2354 * | 2476 * |
2355 * @return true if the JP2 Header box was successfully reconized. | 2477 * @return true if the JP2 Header box was successfully recognized. |
2356 */ | 2478 */ |
2357 static OPJ_BOOL opj_jp2_read_jp2h( opj_jp2_t *jp2, | 2479 static OPJ_BOOL opj_jp2_read_jp2h( opj_jp2_t *jp2, |
2358 OPJ_BYTE *p_header_data, | 2480 OPJ_BYTE *p_header_data, |
2359 OPJ_UINT32 p_header_size, | 2481 OPJ_UINT32 p_header_size, |
2360 opj_event_mgr_t * p_manager | 2482 opj_event_mgr_t * p_manager |
2361 ) | 2483 ) |
2362 { | 2484 { |
2363 OPJ_UINT32 l_box_size=0, l_current_data_size = 0; | 2485 OPJ_UINT32 l_box_size=0, l_current_data_size = 0; |
2364 opj_jp2_box_t box; | 2486 opj_jp2_box_t box; |
2365 const opj_jp2_header_handler_t * l_current_handler; | 2487 const opj_jp2_header_handler_t * l_current_handler; |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2415 if (l_has_ihdr == 0) { | 2537 if (l_has_ihdr == 0) { |
2416 opj_event_msg(p_manager, EVT_ERROR, "Stream error while reading
JP2 Header box: no 'ihdr' box.\n"); | 2538 opj_event_msg(p_manager, EVT_ERROR, "Stream error while reading
JP2 Header box: no 'ihdr' box.\n"); |
2417 return OPJ_FALSE; | 2539 return OPJ_FALSE; |
2418 } | 2540 } |
2419 | 2541 |
2420 jp2->jp2_state |= JP2_STATE_HEADER; | 2542 jp2->jp2_state |= JP2_STATE_HEADER; |
2421 | 2543 |
2422 return OPJ_TRUE; | 2544 return OPJ_TRUE; |
2423 } | 2545 } |
2424 | 2546 |
2425 OPJ_BOOL opj_jp2_read_boxhdr_char( opj_jp2_box_t *box, | 2547 static OPJ_BOOL opj_jp2_read_boxhdr_char( opj_jp2_box_t *box, |
2426 OPJ_BYTE * p_data, | 2548 OPJ_BYTE * p_data, |
2427 OPJ_UINT32 * p_number_bytes_read, | 2549 OPJ_UINT32 * p_number_bytes_read, |
2428 OPJ_UINT32 p_box_max_size, | 2550 OPJ_UINT32 p_box_max_size, |
2429 opj_event_mgr_t * p_manager | 2551 opj_event_mgr_t * p_manager |
2430 ) | 2552 ) |
2431 { | 2553 { |
2432 OPJ_UINT32 l_value; | 2554 OPJ_UINT32 l_value; |
2433 | 2555 |
2434 /* preconditions */ | 2556 /* preconditions */ |
2435 assert(p_data != 00); | 2557 assert(p_data != 00); |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2497 opj_image_t ** p_image, | 2619 opj_image_t ** p_image, |
2498 opj_event_mgr_t * p_manager | 2620 opj_event_mgr_t * p_manager |
2499 ) | 2621 ) |
2500 { | 2622 { |
2501 /* preconditions */ | 2623 /* preconditions */ |
2502 assert(jp2 != 00); | 2624 assert(jp2 != 00); |
2503 assert(p_stream != 00); | 2625 assert(p_stream != 00); |
2504 assert(p_manager != 00); | 2626 assert(p_manager != 00); |
2505 | 2627 |
2506 /* customization of the validation */ | 2628 /* customization of the validation */ |
2507 » opj_jp2_setup_decoding_validation (jp2); | 2629 » if (! opj_jp2_setup_decoding_validation (jp2, p_manager)) { |
| 2630 » » return OPJ_FALSE; |
| 2631 » } |
2508 | 2632 |
2509 /* customization of the encoding */ | 2633 /* customization of the encoding */ |
2510 » opj_jp2_setup_header_reading(jp2); | 2634 » if (! opj_jp2_setup_header_reading(jp2, p_manager)) { |
| 2635 » » return OPJ_FALSE; |
| 2636 » } |
2511 | 2637 |
2512 /* validation of the parameters codec */ | 2638 /* validation of the parameters codec */ |
2513 if (! opj_jp2_exec(jp2,jp2->m_validation_list,p_stream,p_manager)) { | 2639 if (! opj_jp2_exec(jp2,jp2->m_validation_list,p_stream,p_manager)) { |
2514 return OPJ_FALSE; | 2640 return OPJ_FALSE; |
2515 } | 2641 } |
2516 | 2642 |
2517 /* read header */ | 2643 /* read header */ |
2518 if (! opj_jp2_exec (jp2,jp2->m_procedure_list,p_stream,p_manager)) { | 2644 if (! opj_jp2_exec (jp2,jp2->m_procedure_list,p_stream,p_manager)) { |
2519 return OPJ_FALSE; | 2645 return OPJ_FALSE; |
2520 } | 2646 } |
2521 | 2647 |
2522 return opj_j2k_read_header( p_stream, | 2648 return opj_j2k_read_header( p_stream, |
2523 jp2->j2k, | 2649 jp2->j2k, |
2524 p_image, | 2650 p_image, |
2525 p_manager); | 2651 p_manager); |
2526 } | 2652 } |
2527 | 2653 |
2528 void opj_jp2_setup_encoding_validation (opj_jp2_t *jp2) | 2654 static OPJ_BOOL opj_jp2_setup_encoding_validation (opj_jp2_t *jp2, opj_event_mgr
_t * p_manager) |
2529 { | 2655 { |
2530 /* preconditions */ | 2656 /* preconditions */ |
2531 assert(jp2 != 00); | 2657 assert(jp2 != 00); |
| 2658 assert(p_manager != 00); |
2532 | 2659 |
2533 » opj_procedure_list_add_procedure(jp2->m_validation_list, (opj_procedure)
opj_jp2_default_validation); | 2660 » if (! opj_procedure_list_add_procedure(jp2->m_validation_list, (opj_proc
edure)opj_jp2_default_validation, p_manager)) { |
| 2661 » » return OPJ_FALSE; |
| 2662 » } |
2534 /* DEVELOPER CORNER, add your custom validation procedure */ | 2663 /* DEVELOPER CORNER, add your custom validation procedure */ |
| 2664 |
| 2665 return OPJ_TRUE; |
2535 } | 2666 } |
2536 | 2667 |
2537 void opj_jp2_setup_decoding_validation (opj_jp2_t *jp2) | 2668 static OPJ_BOOL opj_jp2_setup_decoding_validation (opj_jp2_t *jp2, opj_event_mgr
_t * p_manager) |
2538 { | 2669 { |
2539 /* preconditions */ | 2670 /* preconditions */ |
2540 assert(jp2 != 00); | 2671 assert(jp2 != 00); |
| 2672 assert(p_manager != 00); |
| 2673 |
2541 /* DEVELOPER CORNER, add your custom validation procedure */ | 2674 /* DEVELOPER CORNER, add your custom validation procedure */ |
| 2675 |
| 2676 return OPJ_TRUE; |
2542 } | 2677 } |
2543 | 2678 |
2544 void opj_jp2_setup_header_writing (opj_jp2_t *jp2) | 2679 static OPJ_BOOL opj_jp2_setup_header_writing (opj_jp2_t *jp2, opj_event_mgr_t *
p_manager) |
2545 { | 2680 { |
2546 /* preconditions */ | 2681 /* preconditions */ |
2547 assert(jp2 != 00); | 2682 assert(jp2 != 00); |
| 2683 assert(p_manager != 00); |
2548 | 2684 |
2549 » opj_procedure_list_add_procedure(jp2->m_procedure_list,(opj_procedure)op
j_jp2_write_jp ); | 2685 » if (! opj_procedure_list_add_procedure(jp2->m_procedure_list,(opj_proced
ure)opj_jp2_write_jp, p_manager)) { |
2550 » opj_procedure_list_add_procedure(jp2->m_procedure_list,(opj_procedure)op
j_jp2_write_ftyp ); | 2686 » » return OPJ_FALSE; |
2551 » opj_procedure_list_add_procedure(jp2->m_procedure_list,(opj_procedure)op
j_jp2_write_jp2h ); | 2687 » } |
2552 if( jp2->jpip_on ) | 2688 » if (! opj_procedure_list_add_procedure(jp2->m_procedure_list,(opj_proced
ure)opj_jp2_write_ftyp, p_manager)) { |
2553 opj_procedure_list_add_procedure(jp2->m_procedure_list,(opj_procedure)opj_jp
ip_skip_iptr ); | 2689 » » return OPJ_FALSE; |
2554 » opj_procedure_list_add_procedure(jp2->m_procedure_list,(opj_procedure)op
j_jp2_skip_jp2c ); | 2690 » } |
| 2691 » if (! opj_procedure_list_add_procedure(jp2->m_procedure_list,(opj_proced
ure)opj_jp2_write_jp2h, p_manager)) { |
| 2692 » » return OPJ_FALSE; |
| 2693 » } |
| 2694 » if( jp2->jpip_on ) { |
| 2695 » » if (! opj_procedure_list_add_procedure(jp2->m_procedure_list,(op
j_procedure)opj_jpip_skip_iptr, p_manager)) { |
| 2696 » » » return OPJ_FALSE; |
| 2697 » » } |
| 2698 » } |
| 2699 » if (! opj_procedure_list_add_procedure(jp2->m_procedure_list,(opj_proced
ure)opj_jp2_skip_jp2c,p_manager)) { |
| 2700 » » return OPJ_FALSE; |
| 2701 » } |
2555 | 2702 |
2556 /* DEVELOPER CORNER, insert your custom procedures */ | 2703 /* DEVELOPER CORNER, insert your custom procedures */ |
2557 | 2704 |
| 2705 return OPJ_TRUE; |
2558 } | 2706 } |
2559 | 2707 |
2560 void opj_jp2_setup_header_reading (opj_jp2_t *jp2) | 2708 static OPJ_BOOL opj_jp2_setup_header_reading (opj_jp2_t *jp2, opj_event_mgr_t *
p_manager) |
2561 { | 2709 { |
2562 /* preconditions */ | 2710 /* preconditions */ |
2563 assert(jp2 != 00); | 2711 assert(jp2 != 00); |
| 2712 assert(p_manager != 00); |
2564 | 2713 |
2565 » opj_procedure_list_add_procedure(jp2->m_procedure_list,(opj_procedure)op
j_jp2_read_header_procedure ); | 2714 » if (! opj_procedure_list_add_procedure(jp2->m_procedure_list,(opj_proced
ure)opj_jp2_read_header_procedure, p_manager)) { |
| 2715 » » return OPJ_FALSE; |
| 2716 » } |
| 2717 » |
2566 /* DEVELOPER CORNER, add your custom procedures */ | 2718 /* DEVELOPER CORNER, add your custom procedures */ |
| 2719 |
| 2720 return OPJ_TRUE; |
2567 } | 2721 } |
2568 | 2722 |
2569 OPJ_BOOL opj_jp2_read_tile_header ( opj_jp2_t * p_jp2, | 2723 OPJ_BOOL opj_jp2_read_tile_header ( opj_jp2_t * p_jp2, |
2570 OPJ_UINT32 * p_tile_index, | 2724 OPJ_UINT32 * p_tile_index, |
2571 OPJ_UINT32 * p_data_size, | 2725 OPJ_UINT32 * p_data_size, |
2572 OPJ_INT32 * p_tile_x0, | 2726 OPJ_INT32 * p_tile_x0, |
2573 OPJ_INT32 * p_tile_y0, | 2727 OPJ_INT32 * p_tile_y0, |
2574 OPJ_INT32 * p_tile_x1, | 2728 OPJ_INT32 * p_tile_x1, |
2575 OPJ_INT32 * p_tile_y1, | 2729 OPJ_INT32 * p_tile_y1, |
2576 OPJ_UINT32 * p_nb_comps, | 2730 OPJ_UINT32 * p_nb_comps, |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2712 return OPJ_FALSE; | 2866 return OPJ_FALSE; |
2713 } | 2867 } |
2714 | 2868 |
2715 /* Set Image Color Space */ | 2869 /* Set Image Color Space */ |
2716 if (p_jp2->enumcs == 16) | 2870 if (p_jp2->enumcs == 16) |
2717 p_image->color_space = OPJ_CLRSPC_SRGB; | 2871 p_image->color_space = OPJ_CLRSPC_SRGB; |
2718 else if (p_jp2->enumcs == 17) | 2872 else if (p_jp2->enumcs == 17) |
2719 p_image->color_space = OPJ_CLRSPC_GRAY; | 2873 p_image->color_space = OPJ_CLRSPC_GRAY; |
2720 else if (p_jp2->enumcs == 18) | 2874 else if (p_jp2->enumcs == 18) |
2721 p_image->color_space = OPJ_CLRSPC_SYCC; | 2875 p_image->color_space = OPJ_CLRSPC_SYCC; |
| 2876 else if (p_jp2->enumcs == 24) |
| 2877 p_image->color_space = OPJ_CLRSPC_EYCC; |
| 2878 else if (p_jp2->enumcs == 12) |
| 2879 p_image->color_space = OPJ_CLRSPC_CMYK; |
2722 else | 2880 else |
2723 p_image->color_space = OPJ_CLRSPC_UNKNOWN; | 2881 p_image->color_space = OPJ_CLRSPC_UNKNOWN; |
2724 | 2882 |
2725 if(p_jp2->color.jp2_pclr) { | 2883 if(p_jp2->color.jp2_pclr) { |
2726 /* Part 1, I.5.3.4: Either both or none : */ | 2884 /* Part 1, I.5.3.4: Either both or none : */ |
2727 if( !p_jp2->color.jp2_pclr->cmap) | 2885 if( !p_jp2->color.jp2_pclr->cmap) |
2728 opj_jp2_free_pclr(&(p_jp2->color)); | 2886 opj_jp2_free_pclr(&(p_jp2->color)); |
2729 else | 2887 else |
2730 opj_jp2_apply_pclr(p_image, &(p_jp2->color)); | 2888 opj_jp2_apply_pclr(p_image, &(p_jp2->color)); |
2731 } | 2889 } |
2732 | 2890 |
2733 /* Apply the color space if needed */ | 2891 /* Apply the color space if needed */ |
2734 if(p_jp2->color.jp2_cdef) { | 2892 if(p_jp2->color.jp2_cdef) { |
2735 » » opj_jp2_apply_cdef(p_image, &(p_jp2->color)); | 2893 » » opj_jp2_apply_cdef(p_image, &(p_jp2->color), p_manager); |
2736 } | 2894 } |
2737 | 2895 |
2738 if(p_jp2->color.icc_profile_buf) { | 2896 if(p_jp2->color.icc_profile_buf) { |
2739 p_image->icc_profile_buf = p_jp2->color.icc_profile_buf; | 2897 p_image->icc_profile_buf = p_jp2->color.icc_profile_buf; |
2740 p_image->icc_profile_len = p_jp2->color.icc_profile_len; | 2898 p_image->icc_profile_len = p_jp2->color.icc_profile_len; |
2741 p_jp2->color.icc_profile_buf = NULL; | 2899 p_jp2->color.icc_profile_buf = NULL; |
2742 } | 2900 } |
2743 | 2901 |
2744 return OPJ_TRUE; | 2902 return OPJ_TRUE; |
2745 } | 2903 } |
(...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2991 len = opj_stream_tell(cio)-lenp; | 3149 len = opj_stream_tell(cio)-lenp; |
2992 opj_stream_skip(cio, lenp, p_manager); | 3150 opj_stream_skip(cio, lenp, p_manager); |
2993 opj_write_bytes(l_data_header,len,4);/* L */ | 3151 opj_write_bytes(l_data_header,len,4);/* L */ |
2994 opj_stream_write_data(cio,l_data_header,4,p_manager); | 3152 opj_stream_write_data(cio,l_data_header,4,p_manager); |
2995 opj_stream_seek(cio, lenp+len,p_manager); | 3153 opj_stream_seek(cio, lenp+len,p_manager); |
2996 | 3154 |
2997 return len; | 3155 return len; |
2998 } | 3156 } |
2999 #endif | 3157 #endif |
3000 #endif /* USE_JPIP */ | 3158 #endif /* USE_JPIP */ |
OLD | NEW |