Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(13)

Side by Side Diff: third_party/libopenjpeg20/jp2.c

Issue 1416783002: Merge to M46: upgrade openjpeg to commit# cf352af (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@2490
Patch Set: Fix pdfium:168 since we are already half way there Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « third_party/libopenjpeg20/jp2.h ('k') | third_party/libopenjpeg20/mct.c » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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 */
OLDNEW
« no previous file with comments | « third_party/libopenjpeg20/jp2.h ('k') | third_party/libopenjpeg20/mct.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698