| 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 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 96 } | 96 } |
| 97 fprintf(fd, " }\n"); | 97 fprintf(fd, " }\n"); |
| 98 } | 98 } |
| 99 fprintf(fd, " }\n"); | 99 fprintf(fd, " }\n"); |
| 100 } | 100 } |
| 101 fprintf(fd, " }\n"); | 101 fprintf(fd, " }\n"); |
| 102 } | 102 } |
| 103 fprintf(fd, "}\n"); | 103 fprintf(fd, "}\n"); |
| 104 } | 104 } |
| 105 #endif | 105 #endif |
| 106 |
| 107 /** |
| 108 * Initializes tile coding/decoding |
| 109 */ |
| 110 static INLINE OPJ_BOOL opj_tcd_init_tile(opj_tcd_t *p_tcd, OPJ_UINT32 p_tile_no,
OPJ_BOOL isEncoder, OPJ_FLOAT32 fraction, OPJ_SIZE_T sizeof_block); |
| 111 |
| 106 /** | 112 /** |
| 107 * Allocates memory for a decoding code block. | 113 * Allocates memory for a decoding code block. |
| 108 */ | 114 */ |
| 109 static OPJ_BOOL opj_tcd_code_block_dec_allocate (opj_tcd_cblk_dec_t * p_code_blo
ck); | 115 static OPJ_BOOL opj_tcd_code_block_dec_allocate (opj_tcd_cblk_dec_t * p_code_blo
ck); |
| 110 | 116 |
| 111 /** | 117 /** |
| 112 * Deallocates the decoding data of the given precinct. | 118 * Deallocates the decoding data of the given precinct. |
| 113 */ | 119 */ |
| 114 static void opj_tcd_code_block_dec_deallocate (opj_tcd_precinct_t * p_precinct); | 120 static void opj_tcd_code_block_dec_deallocate (opj_tcd_precinct_t * p_precinct); |
| 115 | 121 |
| (...skipping 488 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 604 opj_tcd_free_tile(tcd); | 610 opj_tcd_free_tile(tcd); |
| 605 | 611 |
| 606 if (tcd->tcd_image) { | 612 if (tcd->tcd_image) { |
| 607 opj_free(tcd->tcd_image); | 613 opj_free(tcd->tcd_image); |
| 608 tcd->tcd_image = 00; | 614 tcd->tcd_image = 00; |
| 609 } | 615 } |
| 610 opj_free(tcd); | 616 opj_free(tcd); |
| 611 } | 617 } |
| 612 } | 618 } |
| 613 | 619 |
| 620 OPJ_BOOL opj_alloc_tile_component_data(opj_tcd_tilecomp_t *l_tilec) |
| 621 { |
| 622 if ((l_tilec->data == 00) || ((l_tilec->data_size_needed > l_tilec->data
_size) && (l_tilec->ownsData == OPJ_FALSE))) { |
| 623 l_tilec->data = (OPJ_INT32 *) opj_malloc(l_tilec->data_size_need
ed); |
| 624 if (! l_tilec->data ) { |
| 625 return OPJ_FALSE; |
| 626 } |
| 627 /*fprintf(stderr, "tAllocate data of tilec (int): %d x OPJ_UINT3
2n",l_data_size);*/ |
| 628 l_tilec->data_size = l_tilec->data_size_needed; |
| 629 l_tilec->ownsData = OPJ_TRUE; |
| 630 } |
| 631 else if (l_tilec->data_size_needed > l_tilec->data_size) { |
| 632 OPJ_INT32 * new_data = (OPJ_INT32 *) opj_realloc(l_tilec->data,
l_tilec->data_size_needed); |
| 633 /* opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to han
dle tile datan"); */ |
| 634 /* fprintf(stderr, "Not enough memory to handle tile data"); */ |
| 635 if (! new_data) { |
| 636 opj_free(l_tilec->data); |
| 637 l_tilec->data = NULL; |
| 638 l_tilec->data_size = 0; |
| 639 l_tilec->data_size_needed = 0; |
| 640 l_tilec->ownsData = OPJ_FALSE; |
| 641 return OPJ_FALSE; |
| 642 } |
| 643 l_tilec->data = new_data; |
| 644 /*fprintf(stderr, "tReallocate data of tilec (int): from %d to %
d x OPJ_UINT32n", l_tilec->data_size, l_data_size);*/ |
| 645 l_tilec->data_size = l_tilec->data_size_needed; |
| 646 l_tilec->ownsData = OPJ_TRUE; |
| 647 } |
| 648 return OPJ_TRUE; |
| 649 } |
| 650 |
| 614 /* ----------------------------------------------------------------------- */ | 651 /* ----------------------------------------------------------------------- */ |
| 615 #define OPJ_MACRO_TCD_ALLOCATE(FUNCTION,TYPE,FRACTION,ELEMENT,FUNCTION_ELEMENT)
\ | 652 |
| 616 OPJ_BOOL FUNCTION ( opj_tcd_t *p_tcd, \ | 653 static INLINE OPJ_BOOL opj_tcd_init_tile(opj_tcd_t *p_tcd, OPJ_UINT32 p_tile_no,
OPJ_BOOL isEncoder, OPJ_FLOAT32 fraction, OPJ_SIZE_T sizeof_block) |
| 617 OPJ_UINT32 p_tile_no \ | 654 { |
| 618 ) \ | 655 OPJ_UINT32 (*l_gain_ptr)(OPJ_UINT32) = 00; |
| 619 { \ | 656 OPJ_UINT32 compno, resno, bandno, precno, cblkno; |
| 620 OPJ_UINT32 (*l_gain_ptr)(OPJ_UINT32) = 00; \ | 657 opj_tcp_t * l_tcp = 00; |
| 621 OPJ_UINT32 compno, resno, bandno, precno, cblkno; \ | 658 opj_cp_t * l_cp = 00; |
| 622 opj_tcp_t * l_tcp = 00; \ | 659 opj_tcd_tile_t * l_tile = 00; |
| 623 opj_cp_t * l_cp = 00; \ | 660 opj_tccp_t *l_tccp = 00; |
| 624 opj_tcd_tile_t * l_tile = 00; \ | 661 opj_tcd_tilecomp_t *l_tilec = 00; |
| 625 opj_tccp_t *l_tccp = 00; \ | 662 opj_image_comp_t * l_image_comp = 00; |
| 626 opj_tcd_tilecomp_t *l_tilec = 00; \ | 663 opj_tcd_resolution_t *l_res = 00; |
| 627 opj_image_comp_t * l_image_comp = 00; \ | 664 opj_tcd_band_t *l_band = 00; |
| 628 opj_tcd_resolution_t *l_res = 00; \ | 665 opj_stepsize_t * l_step_size = 00; |
| 629 opj_tcd_band_t *l_band = 00; \ | 666 opj_tcd_precinct_t *l_current_precinct = 00; |
| 630 opj_stepsize_t * l_step_size = 00; \ | 667 opj_image_t *l_image = 00; |
| 631 opj_tcd_precinct_t *l_current_precinct = 00; \ | 668 OPJ_UINT32 p,q; |
| 632 TYPE* l_code_block = 00; \ | 669 OPJ_UINT32 l_level_no; |
| 633 opj_image_t *l_image = 00; \ | 670 OPJ_UINT32 l_pdx, l_pdy; |
| 634 OPJ_UINT32 p,q; \ | 671 OPJ_UINT32 l_gain; |
| 635 OPJ_UINT32 l_level_no; \ | 672 OPJ_INT32 l_x0b, l_y0b; |
| 636 OPJ_UINT32 l_pdx, l_pdy; \ | 673 /* extent of precincts , top left, bottom right**/ |
| 637 OPJ_UINT32 l_gain; \ | 674 OPJ_INT32 l_tl_prc_x_start, l_tl_prc_y_start, l_br_prc_x_end, l_br_prc_y
_end; |
| 638 OPJ_INT32 l_x0b, l_y0b; \ | 675 /* number of precinct for a resolution */ |
| 639 /* extent of precincts , top left, bottom right**/ \ | 676 OPJ_UINT32 l_nb_precincts; |
| 640 OPJ_INT32 l_tl_prc_x_start, l_tl_prc_y_start, l_br_prc_x_end, l_br_prc_y
_end;
\ | 677 /* room needed to store l_nb_precinct precinct for a resolution */ |
| 641 /* number of precinct for a resolution */ \ | 678 OPJ_UINT32 l_nb_precinct_size; |
| 642 OPJ_UINT32 l_nb_precincts; \ | 679 /* number of code blocks for a precinct*/ |
| 643 /* room needed to store l_nb_precinct precinct for a resolution */
\ | 680 OPJ_UINT32 l_nb_code_blocks; |
| 644 OPJ_UINT32 l_nb_precinct_size; \ | 681 /* room needed to store l_nb_code_blocks code blocks for a precinct*/ |
| 645 /* number of code blocks for a precinct*/ \ | 682 OPJ_UINT32 l_nb_code_blocks_size; |
| 646 OPJ_UINT32 l_nb_code_blocks; \ | 683 /* size of data for a tile */ |
| 647 /* room needed to store l_nb_code_blocks code blocks for a precinct*/
\ | 684 OPJ_UINT32 l_data_size; |
| 648 OPJ_UINT32 l_nb_code_blocks_size; \ | 685 |
| 649 /* size of data for a tile */ \ | 686 l_cp = p_tcd->cp; |
| 650 OPJ_UINT32 l_data_size; \ | 687 l_tcp = &(l_cp->tcps[p_tile_no]); |
| 651 \ | 688 l_tile = p_tcd->tcd_image->tiles; |
| 652 l_cp = p_tcd->cp; \ | 689 l_tccp = l_tcp->tccps; |
| 653 l_tcp = &(l_cp->tcps[p_tile_no]); \ | 690 l_tilec = l_tile->comps; |
| 654 l_tile = p_tcd->tcd_image->tiles; \ | 691 l_image = p_tcd->image; |
| 655 l_tccp = l_tcp->tccps; \ | 692 l_image_comp = p_tcd->image->comps; |
| 656 l_tilec = l_tile->comps; \ | 693 |
| 657 l_image = p_tcd->image; \ | 694 p = p_tile_no % l_cp->tw; /* tile coordinates */ |
| 658 l_image_comp = p_tcd->image->comps; \ | 695 q = p_tile_no / l_cp->tw; |
| 659 \ | 696 /*fprintf(stderr, "Tile coordinate = %d,%d\n", p, q);*/ |
| 660 p = p_tile_no % l_cp->tw; /* tile coordinates */ \ | 697 |
| 661 q = p_tile_no / l_cp->tw; \ | 698 /* 4 borders of the tile rescale on the image if necessary */ |
| 662 /*fprintf(stderr, "Tile coordinate = %d,%d\n", p, q);*/ \ | 699 l_tile->x0 = opj_int_max((OPJ_INT32)(l_cp->tx0 + p * l_cp->tdx), (OPJ_IN
T32)l_image->x0); |
| 663 \ | 700 l_tile->y0 = opj_int_max((OPJ_INT32)(l_cp->ty0 + q * l_cp->tdy), (OPJ_IN
T32)l_image->y0); |
| 664 /* 4 borders of the tile rescale on the image if necessary */
\ | 701 l_tile->x1 = opj_int_min((OPJ_INT32)(l_cp->tx0 + (p + 1) * l_cp->tdx), (
OPJ_INT32)l_image->x1); |
| 665 l_tile->x0 = opj_int_max((OPJ_INT32)(l_cp->tx0 + p * l_cp->tdx), (OPJ_IN
T32)l_image->x0);
\ | 702 l_tile->y1 = opj_int_min((OPJ_INT32)(l_cp->ty0 + (q + 1) * l_cp->tdy), (
OPJ_INT32)l_image->y1); |
| 666 l_tile->y0 = opj_int_max((OPJ_INT32)(l_cp->ty0 + q * l_cp->tdy), (OPJ_IN
T32)l_image->y0);
\ | 703 /* testcase 1888.pdf.asan.35.988 */ |
| 667 l_tile->x1 = opj_int_min((OPJ_INT32)(l_cp->tx0 + (p + 1) * l_cp->tdx), (
OPJ_INT32)l_image->x1);
\ | 704 if (l_tccp->numresolutions == 0) { |
| 668 l_tile->y1 = opj_int_min((OPJ_INT32)(l_cp->ty0 + (q + 1) * l_cp->tdy), (
OPJ_INT32)l_image->y1);
\ | 705 fprintf(stderr, "tiles require at least one resolution\n"); |
| 669 /* testcase 1888.pdf.asan.35.988 */ \ | 706 return OPJ_FALSE; |
| 670 if (l_tccp->numresolutions == 0) { \ | 707 } |
| 671 fprintf(stderr, "tiles require at least one resolution\n"); \ | 708 /*fprintf(stderr, "Tile border = %d,%d,%d,%d\n", l_tile->x0, l_tile->y0,
l_tile->x1,l_tile->y1);*/ |
| 672 return OPJ_FALSE; \ | 709 |
| 673 } \ | 710 /*tile->numcomps = image->numcomps; */ |
| 674 /*fprintf(stderr, "Tile border = %d,%d,%d,%d\n", l_tile->x0, l_tile->y0,
l_tile->x1,l_tile->y1);*/
\ | 711 for (compno = 0; compno < l_tile->numcomps; ++compno) { |
| 675 \ | 712 /*fprintf(stderr, "compno = %d/%d\n", compno, l_tile->numcomps);
*/ |
| 676 /*tile->numcomps = image->numcomps; */ \ | 713 l_image_comp->resno_decoded = 0; |
| 677 for(compno = 0; compno < l_tile->numcomps; ++compno) { \ | 714 /* border of each l_tile component (global) */ |
| 678 /*fprintf(stderr, "compno = %d/%d\n", compno, l_tile->numcomps);
*/
\ | 715 l_tilec->x0 = opj_int_ceildiv(l_tile->x0, (OPJ_INT32)l_image_com
p->dx); |
| 679 l_image_comp->resno_decoded = 0;
\ | 716 l_tilec->y0 = opj_int_ceildiv(l_tile->y0, (OPJ_INT32)l_image_com
p->dy); |
| 680 /* border of each l_tile component (global) */ \ | 717 l_tilec->x1 = opj_int_ceildiv(l_tile->x1, (OPJ_INT32)l_image_com
p->dx); |
| 681 l_tilec->x0 = opj_int_ceildiv(l_tile->x0, (OPJ_INT32)l_image_com
p->dx);
\ | 718 l_tilec->y1 = opj_int_ceildiv(l_tile->y1, (OPJ_INT32)l_image_com
p->dy); |
| 682 l_tilec->y0 = opj_int_ceildiv(l_tile->y0, (OPJ_INT32)l_image_com
p->dy);
\ | 719 /*fprintf(stderr, "\tTile compo border = %d,%d,%d,%d\n", l_tilec
->x0, l_tilec->y0,l_tilec->x1,l_tilec->y1);*/ |
| 683 l_tilec->x1 = opj_int_ceildiv(l_tile->x1, (OPJ_INT32)l_image_com
p->dx);
\ | 720 |
| 684 l_tilec->y1 = opj_int_ceildiv(l_tile->y1, (OPJ_INT32)l_image_com
p->dy);
\ | 721 /* compute l_data_size with overflow check */ |
| 685 /*fprintf(stderr, "\tTile compo border = %d,%d,%d,%d\n", l_tilec
->x0, l_tilec->y0,l_tilec->x1,l_tilec->y1);*/
\ | 722 l_data_size = (OPJ_UINT32)(l_tilec->x1 - l_tilec->x0); |
| 686 \ | 723 if ((((OPJ_UINT32)-1) / l_data_size) < (OPJ_UINT32)(l_tilec->y1
- l_tilec->y0)) { |
| 687 l_data_size = (OPJ_UINT32)(l_tilec->x1 - l_tilec->x0)
\ | 724 /* TODO event */ |
| 688 * (OPJ_UINT32)(l_tilec->y1 - l_tilec->y0) * (OPJ_UINT32)sizeof(O
PJ_UINT32 );\ | 725 return OPJ_FALSE; |
| 689 l_tilec->numresolutions = l_tccp->numresolutions; \ | 726 } |
| 690 if (l_tccp->numresolutions < l_cp->m_specific_param.m_dec.m_redu
ce) {
\ | 727 l_data_size = l_data_size * (OPJ_UINT32)(l_tilec->y1 - l_tilec->
y0); |
| 691 l_tilec->minimum_num_resolutions = 1; \ | 728 |
| 692 } \ | 729 if ((((OPJ_UINT32)-1) / (OPJ_UINT32)sizeof(OPJ_UINT32)) < l_data
_size) { |
| 693 else { \ | 730 /* TODO event */ |
| 694 l_tilec->minimum_num_resolutions = l_tccp->numresolution
s
\ | 731 return OPJ_FALSE; |
| 695 - l_cp->m_specific_param.m_dec.m_reduce; \ | 732 } |
| 696 } \ | 733 l_data_size = l_data_size * (OPJ_UINT32)sizeof(OPJ_UINT32); |
| 697 \ | 734 l_tilec->numresolutions = l_tccp->numresolutions; |
| 698 if (l_tilec->data == 00) { \ | 735 if (l_tccp->numresolutions < l_cp->m_specific_param.m_dec.m_redu
ce) { |
| 699 l_tilec->data = (OPJ_INT32 *) opj_malloc(l_data_size);
\ | 736 l_tilec->minimum_num_resolutions = 1; |
| 700 if (! l_tilec->data ) { \ | 737 } |
| 701 return OPJ_FALSE; \ | 738 else { |
| 702 } \ | 739 l_tilec->minimum_num_resolutions = l_tccp->numresolution
s - l_cp->m_specific_param.m_dec.m_reduce; |
| 703 /*fprintf(stderr, "\tAllocate data of tilec (int): %d x
OPJ_UINT32\n",l_data_size);*/
\ | 740 } |
| 704 \ | 741 |
| 705 l_tilec->data_size = l_data_size; \ | 742 l_tilec->data_size_needed = l_data_size; |
| 706 } \ | 743 if (p_tcd->m_is_decoder && !opj_alloc_tile_component_data(l_tile
c)) { |
| 707 else if (l_data_size > l_tilec->data_size) { \ | 744 return OPJ_FALSE; |
| 708 OPJ_INT32 * new_data = (OPJ_INT32 *) opj_realloc(l_tilec
->data, l_data_size);
\ | 745 } |
| 709 /* opj_event_msg(p_manager, EVT_ERROR, "Not enough memor
y to handle tile data\n");
*/ \ | 746 |
| 710 fprintf(stderr, "Not enough memory to handle tile data\n
");
\ | 747 l_data_size = l_tilec->numresolutions * (OPJ_UINT32)sizeof(opj_t
cd_resolution_t); |
| 711 if (! new_data) { \ | 748 |
| 712 opj_free(l_tilec->data); \ | 749 if (l_tilec->resolutions == 00) { |
| 713 l_tilec->data = NULL; \ | 750 l_tilec->resolutions = (opj_tcd_resolution_t *) opj_mall
oc(l_data_size); |
| 714 l_tilec->data_size = 0; \ | 751 if (! l_tilec->resolutions ) { |
| 715 return OPJ_FALSE; \ | 752 return OPJ_FALSE; |
| 716 } \ | 753 } |
| 717 l_tilec->data = new_data; \ | 754 /*fprintf(stderr, "\tAllocate resolutions of tilec (opj_
tcd_resolution_t): %d\n",l_data_size);*/ |
| 718 /*fprintf(stderr, "\tReallocate data of tilec (int): fro
m %d to %d x OPJ_UINT32\n", l_tilec->data_size, l_data_size);*/
\ | 755 l_tilec->resolutions_size = l_data_size; |
| 719 l_tilec->data_size = l_data_size; \ | 756 memset(l_tilec->resolutions,0,l_data_size); |
| 720 } \ | 757 } |
| 721 \ | 758 else if (l_data_size > l_tilec->resolutions_size) { |
| 722 l_data_size = l_tilec->numresolutions * (OPJ_UINT32)sizeof(opj_t
cd_resolution_t);
\ | 759 opj_tcd_resolution_t* new_resolutions = (opj_tcd_resolut
ion_t *) opj_realloc(l_tilec->resolutions, l_data_size); |
| 723 \ | 760 if (! new_resolutions) { |
| 724 if (l_tilec->resolutions == 00) { \ | 761 /* opj_event_msg(p_manager, EVT_ERROR, "Not enou
gh memory to tile resolutions\n");
*/ |
| 725 l_tilec->resolutions = (opj_tcd_resolution_t *) opj_mall
oc(l_data_size);
\ | 762 fprintf(stderr, "Not enough memory to tile resol
utions\n"); |
| 726 if (! l_tilec->resolutions ) { \ | 763 opj_free(l_tilec->resolutions); |
| 727 return OPJ_FALSE; \ | 764 l_tilec->resolutions = NULL; |
| 728 } \ | 765 l_tilec->resolutions_size = 0; |
| 729 /*fprintf(stderr, "\tAllocate resolutions of tilec (opj_
tcd_resolution_t): %d\n",l_data_size);*/
\ | 766 return OPJ_FALSE; |
| 730 l_tilec->resolutions_size = l_data_size; \ | 767 } |
| 731 memset(l_tilec->resolutions,0,l_data_size); \ | 768 l_tilec->resolutions = new_resolutions; |
| 732 } \ | 769 /*fprintf(stderr, "\tReallocate data of tilec (int): fro
m %d to %d x OPJ_UINT32\n", l_tilec->resolutions_size, l_data_size);*/ |
| 733 else if (l_data_size > l_tilec->resolutions_size) { \ | 770 memset(((OPJ_BYTE*) l_tilec->resolutions)+l_tilec->resol
utions_size,0,l_data_size - l_tilec->resolutions_size); |
| 734 opj_tcd_resolution_t* new_resolutions = (opj_tcd_resolut
ion_t *) opj_realloc(l_tilec->resolutions, l_data_size);
\ | 771 l_tilec->resolutions_size = l_data_size; |
| 735 if (! new_resolutions) { \ | 772 } |
| 736 /* opj_event_msg(p_manager, EVT_ERROR, "Not enou
gh memory to tile resolutions\n");
*/ \ | 773 |
| 737 fprintf(stderr, "Not enough memory to tile resol
utions\n");
\ | 774 l_level_no = l_tilec->numresolutions - 1; |
| 738 opj_free(l_tilec->resolutions); \ | 775 l_res = l_tilec->resolutions; |
| 739 l_tilec->resolutions = NULL; \ | 776 l_step_size = l_tccp->stepsizes; |
| 740 l_tilec->resolutions_size = 0; \ | 777 if (l_tccp->qmfbid == 0) { |
| 741 return OPJ_FALSE; \ | 778 l_gain_ptr = &opj_dwt_getgain_real; |
| 742 } \ | 779 } |
| 743 l_tilec->resolutions = new_resolutions; \ | 780 else { |
| 744 /*fprintf(stderr, "\tReallocate data of tilec (int): fro
m %d to %d x OPJ_UINT32\n", l_tilec->resolutions_size, l_data_size);*/
\ | 781 l_gain_ptr = &opj_dwt_getgain; |
| 745 memset(((OPJ_BYTE*) l_tilec->resolutions)+l_tilec->resol
utions_size,0,l_data_size - l_tilec->resolutions_size);
\ | 782 } |
| 746 l_tilec->resolutions_size = l_data_size; \ | 783 /*fprintf(stderr, "\tlevel_no=%d\n",l_level_no);*/ |
| 747 } \ | 784 |
| 748 \ | 785 for (resno = 0; resno < l_tilec->numresolutions; ++resno) { |
| 749 l_level_no = l_tilec->numresolutions - 1; \ | 786 /*fprintf(stderr, "\t\tresno = %d/%d\n", resno, l_tilec-
>numresolutions);*/ |
| 750 l_res = l_tilec->resolutions; \ | 787 OPJ_INT32 tlcbgxstart, tlcbgystart /*, brcbgxend, brcbgy
end*/; |
| 751 l_step_size = l_tccp->stepsizes; \ | 788 OPJ_UINT32 cbgwidthexpn, cbgheightexpn; |
| 752 if (l_tccp->qmfbid == 0) { \ | 789 OPJ_UINT32 cblkwidthexpn, cblkheightexpn; |
| 753 l_gain_ptr = &opj_dwt_getgain_real; \ | 790 |
| 754 } \ | 791 /* border for each resolution level (global) */ |
| 755 else { \ | 792 l_res->x0 = opj_int_ceildivpow2(l_tilec->x0, (OPJ_INT32)
l_level_no); |
| 756 l_gain_ptr = &opj_dwt_getgain; \ | 793 l_res->y0 = opj_int_ceildivpow2(l_tilec->y0, (OPJ_INT32)
l_level_no); |
| 757 } \ | 794 l_res->x1 = opj_int_ceildivpow2(l_tilec->x1, (OPJ_INT32)
l_level_no); |
| 758 /*fprintf(stderr, "\tlevel_no=%d\n",l_level_no);*/ \ | 795 l_res->y1 = opj_int_ceildivpow2(l_tilec->y1, (OPJ_INT32)
l_level_no); |
| 759
\ | 796 /*fprintf(stderr, "\t\t\tres_x0= %d, res_y0 =%d, res_x1=
%d, res_y1=%d\n", l_res->x0, l_res->y0, l_res->x1, l_res->y1);*/ |
| 760 for(resno = 0; resno < l_tilec->numresolutions; ++resno) {
\ | 797 /* p. 35, table A-23, ISO/IEC FDIS154444-1 : 2000 (18 au
gust 2000) */ |
| 761 /*fprintf(stderr, "\t\tresno = %d/%d\n", resno, l_tilec-
>numresolutions);*/
\ | 798 l_pdx = l_tccp->prcw[resno]; |
| 762 OPJ_INT32 tlcbgxstart, tlcbgystart /*, brcbgxend, brcbgy
end*/;
\ | 799 l_pdy = l_tccp->prch[resno]; |
| 763 OPJ_UINT32 cbgwidthexpn, cbgheightexpn;
\ | 800 /*fprintf(stderr, "\t\t\tpdx=%d, pdy=%d\n", l_pdx, l_pdy
);*/ |
| 764 OPJ_UINT32 cblkwidthexpn, cblkheightexpn;
\ | 801 /* p. 64, B.6, ISO/IEC FDIS15444-1 : 2000 (18 august 200
0) */ |
| 765
\ | 802 l_tl_prc_x_start = opj_int_floordivpow2(l_res->x0, (OPJ_
INT32)l_pdx) << l_pdx; |
| 766 /* border for each resolution level (global) */
\ | 803 l_tl_prc_y_start = opj_int_floordivpow2(l_res->y0, (OPJ_
INT32)l_pdy) << l_pdy; |
| 767 l_res->x0 = opj_int_ceildivpow2(l_tilec->x0, (OPJ_INT32)
l_level_no);
\ | 804 l_br_prc_x_end = opj_int_ceildivpow2(l_res->x1, (OPJ_INT
32)l_pdx) << l_pdx; |
| 768 l_res->y0 = opj_int_ceildivpow2(l_tilec->y0, (OPJ_INT32)
l_level_no);
\ | 805 l_br_prc_y_end = opj_int_ceildivpow2(l_res->y1, (OPJ_INT
32)l_pdy) << l_pdy; |
| 769 l_res->x1 = opj_int_ceildivpow2(l_tilec->x1, (OPJ_INT32)
l_level_no);
\ | 806 /*fprintf(stderr, "\t\t\tprc_x_start=%d, prc_y_start=%d,
br_prc_x_end=%d, br_prc_y_end=%d \n", l_tl_prc_x_start, l_tl_prc_y_start, l_br_
prc_x_end ,l_br_prc_y_end );*/ |
| 770 l_res->y1 = opj_int_ceildivpow2(l_tilec->y1, (OPJ_INT32)
l_level_no);
\ | 807 |
| 771 /*fprintf(stderr, "\t\t\tres_x0= %d, res_y0 =%d, res_x1=
%d, res_y1=%d\n", l_res->x0, l_res->y0, l_res->x1, l_res->y1);*/
\ | 808 l_res->pw = (l_res->x0 == l_res->x1) ? 0 : (OPJ_UINT32)(
(l_br_prc_x_end - l_tl_prc_x_start) >> l_pdx); |
| 772 /* p. 35, table A-23, ISO/IEC FDIS154444-1 : 2000 (18 au
gust 2000) */
\ | 809 l_res->ph = (l_res->y0 == l_res->y1) ? 0 : (OPJ_UINT32)(
(l_br_prc_y_end - l_tl_prc_y_start) >> l_pdy); |
| 773 l_pdx = l_tccp->prcw[resno];
\ | 810 /*fprintf(stderr, "\t\t\tres_pw=%d, res_ph=%d\n", l_res-
>pw, l_res->ph );*/ |
| 774 l_pdy = l_tccp->prch[resno];
\ | 811 |
| 775 /*fprintf(stderr, "\t\t\tpdx=%d, pdy=%d\n", l_pdx, l_pdy
);*/
\ | 812 l_nb_precincts = l_res->pw * l_res->ph; |
| 776 /* p. 64, B.6, ISO/IEC FDIS15444-1 : 2000 (18 august 200
0) */
\ | 813 l_nb_precinct_size = l_nb_precincts * (OPJ_UINT32)sizeof
(opj_tcd_precinct_t); |
| 777 l_tl_prc_x_start = opj_int_floordivpow2(l_res->x0, (OPJ_
INT32)l_pdx) << l_pdx;
\ | 814 if (resno == 0) { |
| 778 l_tl_prc_y_start = opj_int_floordivpow2(l_res->y0, (OPJ_
INT32)l_pdy) << l_pdy;
\ | 815 tlcbgxstart = l_tl_prc_x_start; |
| 779 l_br_prc_x_end = opj_int_ceildivpow2(l_res->x1, (OPJ_INT
32)l_pdx) << l_pdx;
\ | 816 tlcbgystart = l_tl_prc_y_start; |
| 780 l_br_prc_y_end = opj_int_ceildivpow2(l_res->y1, (OPJ_INT
32)l_pdy) << l_pdy;
\ | 817 /*brcbgxend = l_br_prc_x_end;*/ |
| 781 /*fprintf(stderr, "\t\t\tprc_x_start=%d, prc_y_start=%d,
br_prc_x_end=%d, br_prc_y_end=%d \n", l_tl_prc_x_start, l_tl_prc_y_start, l_br_
prc_x_end ,l_br_prc_y_end );*/ \ | 818 /* brcbgyend = l_br_prc_y_end;*/ |
| 782
\ | 819 cbgwidthexpn = l_pdx; |
| 783 l_res->pw = (l_res->x0 == l_res->x1) ? 0 : (OPJ_UINT32)(
(l_br_prc_x_end - l_tl_prc_x_start) >> l_pdx);
\ | 820 cbgheightexpn = l_pdy; |
| 784 l_res->ph = (l_res->y0 == l_res->y1) ? 0 : (OPJ_UINT32)(
(l_br_prc_y_end - l_tl_prc_y_start) >> l_pdy);
\ | 821 l_res->numbands = 1; |
| 785 /*fprintf(stderr, "\t\t\tres_pw=%d, res_ph=%d\n", l_res-
>pw, l_res->ph );*/
\ | 822 } |
| 786
\ | 823 else { |
| 787 l_nb_precincts = l_res->pw * l_res->ph;
\ | 824 tlcbgxstart = opj_int_ceildivpow2(l_tl_prc_x_sta
rt, 1); |
| 788 l_nb_precinct_size = l_nb_precincts * (OPJ_UINT32)sizeof
(opj_tcd_precinct_t);
\ | 825 tlcbgystart = opj_int_ceildivpow2(l_tl_prc_y_sta
rt, 1); |
| 789 if (resno == 0) {
\ | 826 /*brcbgxend = opj_int_ceildivpow2(l_br_prc_x_end
, 1);*/ |
| 790 tlcbgxstart = l_tl_prc_x_start;
\ | 827 /*brcbgyend = opj_int_ceildivpow2(l_br_prc_y_end
, 1);*/ |
| 791 tlcbgystart = l_tl_prc_y_start;
\ | 828 cbgwidthexpn = l_pdx - 1; |
| 792 /*brcbgxend = l_br_prc_x_end;*/
\ | 829 cbgheightexpn = l_pdy - 1; |
| 793 /* brcbgyend = l_br_prc_y_end;*/
\ | 830 l_res->numbands = 3; |
| 794 cbgwidthexpn = l_pdx;
\ | 831 } |
| 795 cbgheightexpn = l_pdy;
\ | 832 |
| 796 l_res->numbands = 1;
\ | 833 cblkwidthexpn = opj_uint_min(l_tccp->cblkw, cbgwidthexpn
); |
| 797 }
\ | 834 cblkheightexpn = opj_uint_min(l_tccp->cblkh, cbgheightex
pn); |
| 798 else {
\ | 835 l_band = l_res->bands; |
| 799 tlcbgxstart = opj_int_ceildivpow2(l_tl_prc_x_sta
rt, 1);
\ | 836 |
| 800 tlcbgystart = opj_int_ceildivpow2(l_tl_prc_y_sta
rt, 1);
\ | 837 for (bandno = 0; bandno < l_res->numbands; ++bandno) { |
| 801 /*brcbgxend = opj_int_ceildivpow2(l_br_prc_x_end
, 1);*/
\ | 838 OPJ_INT32 numbps; |
| 802 /*brcbgyend = opj_int_ceildivpow2(l_br_prc_y_end
, 1);*/
\ | 839 /*fprintf(stderr, "\t\t\tband_no=%d/%d\n", bandn
o, l_res->numbands );*/ |
| 803 cbgwidthexpn = l_pdx - 1;
\ | 840 |
| 804 cbgheightexpn = l_pdy - 1;
\ | 841 if (resno == 0) { |
| 805 l_res->numbands = 3;
\ | 842 l_band->bandno = 0 ; |
| 806 }
\ | 843 l_band->x0 = opj_int_ceildivpow2(l_tilec
->x0, (OPJ_INT32)l_level_no); |
| 807
\ | 844 l_band->y0 = opj_int_ceildivpow2(l_tilec
->y0, (OPJ_INT32)l_level_no); |
| 808 cblkwidthexpn = opj_uint_min(l_tccp->cblkw, cbgwidthexpn
);
\ | 845 l_band->x1 = opj_int_ceildivpow2(l_tilec
->x1, (OPJ_INT32)l_level_no); |
| 809 cblkheightexpn = opj_uint_min(l_tccp->cblkh, cbgheightex
pn);
\ | 846 l_band->y1 = opj_int_ceildivpow2(l_tilec
->y1, (OPJ_INT32)l_level_no); |
| 810 l_band = l_res->bands;
\ | 847 } |
| 811
\ | 848 else { |
| 812 for (bandno = 0; bandno < l_res->numbands; ++bandno) {
\ | 849 l_band->bandno = bandno + 1; |
| 813 OPJ_INT32 numbps;
\ | 850 /* x0b = 1 if bandno = 1 or 3 */ |
| 814 /*fprintf(stderr, "\t\t\tband_no=%d/%d\n", bandn
o, l_res->numbands );*/
\ | 851 l_x0b = l_band->bandno&1; |
| 815
\ | 852 /* y0b = 1 if bandno = 2 or 3 */ |
| 816 if (resno == 0) {
\ | 853 l_y0b = (OPJ_INT32)((l_band->bandno)>>1)
; |
| 817 l_band->bandno = 0 ;
\ | 854 /* l_band border (global) */ |
| 818 l_band->x0 = opj_int_ceildivpow2(l_tilec
->x0, (OPJ_INT32)l_level_no);
\ | 855 l_band->x0 = opj_int_ceildivpow2(l_tilec
->x0 - (1 << l_level_no) * l_x0b, (OPJ_INT32)(l_level_no + 1)); |
| 819 l_band->y0 = opj_int_ceildivpow2(l_tilec
->y0, (OPJ_INT32)l_level_no);
\ | 856 l_band->y0 = opj_int_ceildivpow2(l_tilec
->y0 - (1 << l_level_no) * l_y0b, (OPJ_INT32)(l_level_no + 1)); |
| 820 l_band->x1 = opj_int_ceildivpow2(l_tilec
->x1, (OPJ_INT32)l_level_no);
\ | 857 l_band->x1 = opj_int_ceildivpow2(l_tilec
->x1 - (1 << l_level_no) * l_x0b, (OPJ_INT32)(l_level_no + 1)); |
| 821 l_band->y1 = opj_int_ceildivpow2(l_tilec
->y1, (OPJ_INT32)l_level_no);
\ | 858 l_band->y1 = opj_int_ceildivpow2(l_tilec
->y1 - (1 << l_level_no) * l_y0b, (OPJ_INT32)(l_level_no + 1)); |
| 822 }
\ | 859 } |
| 823 else {
\ | 860 |
| 824 l_band->bandno = bandno + 1;
\ | 861 /** avoid an if with storing function pointer */ |
| 825 /* x0b = 1 if bandno = 1 or 3 */
\ | 862 l_gain = (*l_gain_ptr) (l_band->bandno); |
| 826 l_x0b = l_band->bandno&1;
\ | 863 numbps = (OPJ_INT32)(l_image_comp->prec + l_gain
); |
| 827 /* y0b = 1 if bandno = 2 or 3 */
\ | 864 l_band->stepsize = (OPJ_FLOAT32)(((1.0 + l_step_
size->mant / 2048.0) * pow(2.0, (OPJ_INT32) (numbps - l_step_size->expn)))) * fr
action; |
| 828 l_y0b = (OPJ_INT32)((l_band->bandno)>>1)
;
\ | 865 l_band->numbps = l_step_size->expn + (OPJ_INT32)
l_tccp->numgbits - 1; /* WHY -1 ? */ |
| 829 /* l_band border (global) */
\ | 866 |
| 830 l_band->x0 = opj_int_ceildivpow2(l_tilec
->x0 - (1 << l_level_no) * l_x0b, (OPJ_INT32)(l_level_no + 1));
\ | 867 if (! l_band->precincts) { |
| 831 l_band->y0 = opj_int_ceildivpow2(l_tilec
->y0 - (1 << l_level_no) * l_y0b, (OPJ_INT32)(l_level_no + 1));
\ | 868 l_band->precincts = (opj_tcd_precinct_t
*) opj_malloc( /*3 * */ l_nb_precinct_size); |
| 832 l_band->x1 = opj_int_ceildivpow2(l_tilec
->x1 - (1 << l_level_no) * l_x0b, (OPJ_INT32)(l_level_no + 1));
\ | 869 if (! l_band->precincts) { |
| 833 l_band->y1 = opj_int_ceildivpow2(l_tilec
->y1 - (1 << l_level_no) * l_y0b, (OPJ_INT32)(l_level_no + 1));
\ | 870 return OPJ_FALSE; |
| 834 }
\ | 871 } |
| 835
\ | 872 /*fprintf(stderr, "\t\t\t\tAllocate prec
incts of a band (opj_tcd_precinct_t): %d\n",l_nb_precinct_size); */ |
| 836 /** avoid an if with storing function pointer */
\ | 873 memset(l_band->precincts,0,l_nb_precinct
_size); |
| 837 l_gain = (*l_gain_ptr) (l_band->bandno);
\ | 874 l_band->precincts_data_size = l_nb_preci
nct_size; |
| 838 numbps = (OPJ_INT32)(l_image_comp->prec + l_gain
);
\ | 875 } |
| 839 l_band->stepsize = (OPJ_FLOAT32)(((1.0 + l_step_
size->mant / 2048.0) * pow(2.0, (OPJ_INT32) (numbps - l_step_size->expn)))) * FR
ACTION; \ | 876 else if (l_band->precincts_data_size < l_nb_prec
inct_size) { |
| 840 l_band->numbps = l_step_size->expn + (OPJ_INT32)
l_tccp->numgbits - 1; /* WHY -1 ? */
\ | 877 |
| 841
\ | 878 opj_tcd_precinct_t * new_precincts = (op
j_tcd_precinct_t *) opj_realloc(l_band->precincts,/*3 * */ l_nb_precinct_size); |
| 842 if (! l_band->precincts) {
\ | 879 if (! new_precincts) { |
| 843 l_band->precincts = (opj_tcd_precinct_t
*) opj_malloc( /*3 * */ l_nb_precinct_size);
\ | 880 /* opj_event_msg(p_manager, EVT_
ERROR, "Not enough memory to handle band precints\n");
*/ |
| 844 if (! l_band->precincts) {
\ | 881 fprintf(stderr, "Not enough memo
ry to handle band precints\n"); |
| 845 return OPJ_FALSE;
\ | 882 opj_free(l_band->precincts); |
| 846 }
\ | 883 l_band->precincts = NULL; |
| 847 /*fprintf(stderr, "\t\t\t\tAllocate prec
incts of a band (opj_tcd_precinct_t): %d\n",l_nb_precinct_size); */
\ | 884 l_band->precincts_data_size = 0; |
| 848 memset(l_band->precincts,0,l_nb_precinct
_size);
\ | 885 return OPJ_FALSE; |
| 849 l_band->precincts_data_size = l_nb_preci
nct_size;
\ | 886 } |
| 850 }
\ | 887 l_band->precincts = new_precincts; |
| 851 else if (l_band->precincts_data_size < l_nb_prec
inct_size) {
\ | 888 /*fprintf(stderr, "\t\t\t\tReallocate pr
ecincts of a band (opj_tcd_precinct_t): from %d to %d\n",l_band->precincts_data_
size, l_nb_precinct_size);*/ |
| 852
\ | 889 memset(((OPJ_BYTE *) l_band->precincts)
+ l_band->precincts_data_size,0,l_nb_precinct_size - l_band->precincts_data_size
); |
| 853 opj_tcd_precinct_t * new_precincts = (op
j_tcd_precinct_t *) opj_realloc(l_band->precincts,/*3 * */ l_nb_precinct_size);
\ | 890 l_band->precincts_data_size = l_nb_preci
nct_size; |
| 854 if (! new_precincts) {
\ | 891 } |
| 855 /* opj_event_msg(p_manager, EVT_
ERROR, "Not enough memory to handle band precints\n");
*/ \ | 892 |
| 856 fprintf(stderr, "Not enough memo
ry to handle band precints\n");
\ | 893 l_current_precinct = l_band->precincts; |
| 857 opj_free(l_band->precincts);
\ | 894 for (precno = 0; precno < l_nb_precincts; ++prec
no) { |
| 858 l_band->precincts = NULL;
\ | 895 OPJ_INT32 tlcblkxstart, tlcblkystart, br
cblkxend, brcblkyend; |
| 859 l_band->precincts_data_size = 0;
\ | 896 OPJ_INT32 cbgxstart = tlcbgxstart + (OPJ
_INT32)(precno % l_res->pw) * (1 << cbgwidthexpn); |
| 860 return OPJ_FALSE;
\ | 897 OPJ_INT32 cbgystart = tlcbgystart + (OPJ
_INT32)(precno / l_res->pw) * (1 << cbgheightexpn); |
| 861 }
\ | 898 OPJ_INT32 cbgxend = cbgxstart + (1 << cb
gwidthexpn); |
| 862 l_band->precincts = new_precincts;
\ | 899 OPJ_INT32 cbgyend = cbgystart + (1 << cb
gheightexpn); |
| 863 /*fprintf(stderr, "\t\t\t\tReallocate pr
ecincts of a band (opj_tcd_precinct_t): from %d to %d\n",l_band->precincts_data_
size, l_nb_precinct_size);*/ \ | 900 /*fprintf(stderr, "\t precno=%d; bandno=
%d, resno=%d; compno=%d\n", precno, bandno , resno, compno);*/ |
| 864 memset(((OPJ_BYTE *) l_band->precincts)
+ l_band->precincts_data_size,0,l_nb_precinct_size - l_band->precincts_data_size
); \ | 901 /*fprintf(stderr, "\t tlcbgxstart(=%d) +
(precno(=%d) percent res->pw(=%d)) * (1 << cbgwidthexpn(=%d)) \n",tlcbgxstart,p
recno,l_res->pw,cbgwidthexpn);*/ |
| 865 l_band->precincts_data_size = l_nb_preci
nct_size;
\ | 902 |
| 866 }
\ | 903 /* precinct size (global) */ |
| 867
\ | 904 /*fprintf(stderr, "\t cbgxstart=%d, l_ba
nd->x0 = %d \n",cbgxstart, l_band->x0);*/ |
| 868 l_current_precinct = l_band->precincts;
\ | 905 |
| 869 for (precno = 0; precno < l_nb_precincts; ++
precno) {
\ | 906 l_current_precinct->x0 = opj_int_max(cbg
xstart, l_band->x0); |
| 870 OPJ_INT32 tlcblkxstart, tlcblkystart, br
cblkxend, brcblkyend;
\ | 907 l_current_precinct->y0 = opj_int_max(cbg
ystart, l_band->y0); |
| 871 OPJ_INT32 cbgxstart = tlcbgxstart + (OPJ
_INT32)(precno % l_res->pw) * (1 << cbgwidthexpn);
\ | 908 l_current_precinct->x1 = opj_int_min(cbg
xend, l_band->x1); |
| 872 OPJ_INT32 cbgystart = tlcbgystart + (OPJ
_INT32)(precno / l_res->pw) * (1 << cbgheightexpn);
\ | 909 l_current_precinct->y1 = opj_int_min(cbg
yend, l_band->y1); |
| 873 OPJ_INT32 cbgxend = cbgxstart + (1 << cb
gwidthexpn);
\ | 910 /*fprintf(stderr, "\t prc_x0=%d; prc_y0=
%d, prc_x1=%d; prc_y1=%d\n",l_current_precinct->x0, l_current_precinct->y0 ,l_cu
rrent_precinct->x1, l_current_precinct->y1);*/ |
| 874 OPJ_INT32 cbgyend = cbgystart + (1 << cb
gheightexpn);
\ | 911 |
| 875 /*fprintf(stderr, "\t precno=%d; bandno=
%d, resno=%d; compno=%d\n", precno, bandno , resno, compno);*/
\ | 912 tlcblkxstart = opj_int_floordivpow2(l_cu
rrent_precinct->x0, (OPJ_INT32)cblkwidthexpn) << cblkwidthexpn; |
| 876 /*fprintf(stderr, "\t tlcbgxstart(=%d) +
(precno(=%d) percent res->pw(=%d)) * (1 << cbgwidthexpn(=%d)) \n",tlcbgxstart,p
recno,l_res->pw,cbgwidthexpn);*/ \ | 913 /*fprintf(stderr, "\t tlcblkxstart =%d\n
",tlcblkxstart );*/ |
| 877
\ | 914 tlcblkystart = opj_int_floordivpow2(l_cu
rrent_precinct->y0, (OPJ_INT32)cblkheightexpn) << cblkheightexpn; |
| 878 /* precinct size (global) */
\ | 915 /*fprintf(stderr, "\t tlcblkystart =%d\n
",tlcblkystart );*/ |
| 879 /*fprintf(stderr, "\t cbgxstart=%d, l_ba
nd->x0 = %d \n",cbgxstart, l_band->x0);*/
\ | 916 brcblkxend = opj_int_ceildivpow2(l_curre
nt_precinct->x1, (OPJ_INT32)cblkwidthexpn) << cblkwidthexpn; |
| 880
\ | 917 /*fprintf(stderr, "\t brcblkxend =%d\n",
brcblkxend );*/ |
| 881 l_current_precinct->x0 = opj_int_max(cbg
xstart, l_band->x0);
\ | 918 brcblkyend = opj_int_ceildivpow2(l_curre
nt_precinct->y1, (OPJ_INT32)cblkheightexpn) << cblkheightexpn; |
| 882 l_current_precinct->y0 = opj_int_max(cbg
ystart, l_band->y0);
\ | 919 /*fprintf(stderr, "\t brcblkyend =%d\n",
brcblkyend );*/ |
| 883 l_current_precinct->x1 = opj_int_min(cbg
xend, l_band->x1);
\ | 920 l_current_precinct->cw = (OPJ_UINT32)((b
rcblkxend - tlcblkxstart) >> cblkwidthexpn); |
| 884 l_current_precinct->y1 = opj_int_min(cbg
yend, l_band->y1);
\ | 921 l_current_precinct->ch = (OPJ_UINT32)((b
rcblkyend - tlcblkystart) >> cblkheightexpn); |
| 885 /*fprintf(stderr, "\t prc_x0=%d; prc_y0=
%d, prc_x1=%d; prc_y1=%d\n",l_current_precinct->x0, l_current_precinct->y0 ,l_cu
rrent_precinct->x1, l_current_precinct->y1);*/ \ | 922 |
| 886
\ | 923 l_nb_code_blocks = l_current_precinct->c
w * l_current_precinct->ch; |
| 887 tlcblkxstart = opj_int_floordivpow2(l_cu
rrent_precinct->x0, (OPJ_INT32)cblkwidthexpn) << cblkwidthexpn;
\ | 924 /*fprintf(stderr, "\t\t\t\t precinct_cw
= %d x recinct_ch = %d\n",l_current_precinct->cw, l_current_precinct->ch);
*/ |
| 888 /*fprintf(stderr, "\t tlcblkxstart =%d\n
",tlcblkxstart );*/
\ | 925 l_nb_code_blocks_size = l_nb_code_blocks
* (OPJ_UINT32)sizeof_block; |
| 889 tlcblkystart = opj_int_floordivpow2(l_cu
rrent_precinct->y0, (OPJ_INT32)cblkheightexpn) << cblkheightexpn;
\ | 926 |
| 890 /*fprintf(stderr, "\t tlcblkystart =%d\n
",tlcblkystart );*/
\ | 927 if (! l_current_precinct->cblks.blocks)
{ |
| 891 brcblkxend = opj_int_ceildivpow2(l_curre
nt_precinct->x1, (OPJ_INT32)cblkwidthexpn) << cblkwidthexpn;
\ | 928 l_current_precinct->cblks.blocks
= opj_malloc(l_nb_code_blocks_size); |
| 892 /*fprintf(stderr, "\t brcblkxend =%d\n",
brcblkxend );*/
\ | 929 if (! l_current_precinct->cblks.
blocks ) { |
| 893 brcblkyend = opj_int_ceildivpow2(l_curre
nt_precinct->y1, (OPJ_INT32)cblkheightexpn) << cblkheightexpn;
\ | 930 return OPJ_FALSE; |
| 894 /*fprintf(stderr, "\t brcblkyend =%d\n",
brcblkyend );*/
\ | 931 } |
| 895 l_current_precinct->cw = (OPJ_UINT32)((b
rcblkxend - tlcblkxstart) >> cblkwidthexpn);
\ | 932 /*fprintf(stderr, "\t\t\t\tAlloc
ate cblks of a precinct (opj_tcd_cblk_dec_t): %d\n",l_nb_code_blocks_size);*/ |
| 896 l_current_precinct->ch = (OPJ_UINT32)((b
rcblkyend - tlcblkystart) >> cblkheightexpn);
\ | 933 |
| 897
\ | 934 memset(l_current_precinct->cblks
.blocks,0,l_nb_code_blocks_size); |
| 898 l_nb_code_blocks = l_current_precinct->c
w * l_current_precinct->ch;
\ | 935 |
| 899 /*fprintf(stderr, "\t\t\t\t precinct_cw
= %d x recinct_ch = %d\n",l_current_precinct->cw, l_current_precinct->ch);
*/ \ | 936 l_current_precinct->block_size =
l_nb_code_blocks_size; |
| 900 l_nb_code_blocks_size = l_nb_code_blocks
* (OPJ_UINT32)sizeof(TYPE);
\ | 937 } |
| 901
\ | 938 else if (l_nb_code_blocks_size > l_curre
nt_precinct->block_size) { |
| 902 if (! l_current_precinct->cblks.ELEMENT)
{
\ | 939 void *new_blocks = opj_realloc(l
_current_precinct->cblks.blocks, l_nb_code_blocks_size); |
| 903 l_current_precinct->cblks.ELEMEN
T = (TYPE*) opj_malloc(l_nb_code_blocks_size);
\ | 940 if (! new_blocks) { |
| 904 if (! l_current_precinct->cblks.
ELEMENT ) {
\ | 941 opj_free(l_current_preci
nct->cblks.blocks); |
| 905 return OPJ_FALSE;
\ | 942 l_current_precinct->cblk
s.blocks = NULL; |
| 906 }
\ | 943 l_current_precinct->bloc
k_size = 0; |
| 907 /*fprintf(stderr, "\t\t\t\tAlloc
ate cblks of a precinct (opj_tcd_cblk_dec_t): %d\n",l_nb_code_blocks_size);*/
\ | 944 /* opj_event_msg(p_manag
er, EVT_ERROR, "Not enough memory for current precinct codeblock element\n");
*/ |
| 908
\ | 945 fprintf(stderr, "Not eno
ugh memory for current precinct codeblock element\n"); |
| 909 memset(l_current_precinct->cblks
.ELEMENT,0,l_nb_code_blocks_size);
\ | 946 return OPJ_FALSE; |
| 910
\ | 947 } |
| 911 l_current_precinct->block_size =
l_nb_code_blocks_size;
\ | 948 l_current_precinct->cblks.blocks
= new_blocks; |
| 912 }
\ | 949 /*fprintf(stderr, "\t\t\t\tReall
ocate cblks of a precinct (opj_tcd_cblk_dec_t): from %d to %d\n",l_current_preci
nct->block_size, l_nb_code_blocks_size); */ |
| 913 else if (l_nb_code_blocks_size > l_curre
nt_precinct->block_size) {
\ | 950 |
| 914 TYPE *new_ELEMENT = (TYPE*) opj_
realloc(l_current_precinct->cblks.ELEMENT, l_nb_code_blocks_size);
\ | 951 memset(((OPJ_BYTE *) l_current_p
recinct->cblks.blocks) + l_current_precinct->block_size |
| 915 if (! new_ELEMENT) {
\ | 952 ,0 |
| 916 opj_free(l_current_preci
nct->cblks.ELEMENT);
\ | 953 ,l_nb_c
ode_blocks_size - l_current_precinct->block_size); |
| 917 l_current_precinct->cblk
s.ELEMENT = NULL;
\ | 954 |
| 918 l_current_precinct->bloc
k_size = 0;
\ | 955 l_current_precinct->block_size =
l_nb_code_blocks_size; |
| 919 /* opj_event_msg(p_manag
er, EVT_ERROR, "Not enough memory for current precinct codeblock element\n");
*/ \ | 956 } |
| 920 fprintf(stderr, "Not eno
ugh memory for current precinct codeblock element\n");
\ | 957 |
| 921 return OPJ_FALSE;
\ | 958 if (! l_current_precinct->incltree) { |
| 922 }
\ | 959 l_current_precinct->incltree = o
pj_tgt_create(l_current_precinct->cw, |
| 923 l_current_precinct->cblks.ELEMEN
T = new_ELEMENT;
\ | 960
l_curren
t_precinct->ch); |
| 924 /*fprintf(stderr, "\t\t\t\tReall
ocate cblks of a precinct (opj_tcd_cblk_dec_t): from %d to %d\n",l_current_preci
nct->block_size, l_nb_code_blocks_size); */\ | 961 } |
| 925
\ | 962 else{ |
| 926 memset(((OPJ_BYTE *) l_current_p
recinct->cblks.ELEMENT) + l_current_precinct->block_size
\ | 963 l_current_precinct->incltree = o
pj_tgt_init(l_current_precinct->incltree, |
| 927 ,0
\ | 964
l_current_precin
ct->cw, |
| 928 ,l_nb_code_block
s_size - l_current_precinct->block_size);
\ | 965
l_current_precin
ct->ch); |
| 929
\ | 966 } |
| 930 l_current_precinct->block_size =
l_nb_code_blocks_size;
\ | 967 |
| 931 }
\ | 968 if (! l_current_precinct->incltree)
{ |
| 932
\ | 969 fprintf(stderr, "WARNING: No inc
ltree created.\n"); |
| 933 if (! l_current_precinct->incltree) {
\ | 970 /*return OPJ_FALSE;*/ |
| 934 l_current_precinct->incltree = o
pj_tgt_create(l_current_precinct->cw,
\ | 971 } |
| 935 l_current_precin
ct->ch);
\ | 972 |
| 936 }
\ | 973 if (! l_current_precinct->imsbtree) { |
| 937 else{
\ | 974 l_current_precinct->imsbtree = o
pj_tgt_create( |
| 938 l_current_precinct->incltree = o
pj_tgt_init(l_current_precinct->incltree,
\ | 975
l_curren
t_precinct->cw, |
| 939 l_current_precin
ct->cw,
\ | 976
l_curren
t_precinct->ch); |
| 940 l_current_precin
ct->ch);
\ | 977 } |
| 941 }
\ | 978 else { |
| 942
\ | 979 l_current_precinct->imsbtree = o
pj_tgt_init( |
| 943 if (! l_current_precinct->incltree)
{
\ | 980
l_current_precin
ct->imsbtree, |
| 944 fprintf(stderr, "WARNING: No inc
ltree created.\n");
\ | 981
l_current_precin
ct->cw, |
| 945 /*return OPJ_FALSE;*/
\ | 982
l_current_precin
ct->ch); |
| 946 }
\ | 983 } |
| 947
\ | 984 |
| 948 if (! l_current_precinct->imsbtree) {
\ | 985 if (! l_current_precinct->imsbtree) { |
| 949 l_current_precinct->imsbtree = o
pj_tgt_create(
\ | 986 fprintf(stderr, "WARNING: No ims
btree created.\n"); |
| 950 l_current_precin
ct->cw,
\ | 987 /*return OPJ_FALSE;*/ |
| 951 l_current_precin
ct->ch);
\ | 988 } |
| 952 }
\ | 989 |
| 953 else {
\ | 990 for (cblkno = 0; cblkno < l_nb_code_bloc
ks; ++cblkno) { |
| 954 l_current_precinct->imsbtree = o
pj_tgt_init(
\ | 991 OPJ_INT32 cblkxstart = tlcblkxst
art + (OPJ_INT32)(cblkno % l_current_precinct->cw) * (1 << cblkwidthexpn); |
| 955 l_current_precin
ct->imsbtree,
\ | 992 OPJ_INT32 cblkystart = tlcblkyst
art + (OPJ_INT32)(cblkno / l_current_precinct->cw) * (1 << cblkheightexpn); |
| 956 l_current_precin
ct->cw,
\ | 993 OPJ_INT32 cblkxend = cblkxstart
+ (1 << cblkwidthexpn); |
| 957 l_current_precin
ct->ch);
\ | 994 OPJ_INT32 cblkyend = cblkystart
+ (1 << cblkheightexpn); |
| 958 }
\ | 995 |
| 959
\ | 996 if (isEncoder) { |
| 960 if (! l_current_precinct->imsbtree) {
\ | 997 opj_tcd_cblk_enc_t* l_co
de_block = l_current_precinct->cblks.enc + cblkno; |
| 961 fprintf(stderr, "WARNING: No ims
btree created.\n");
\ | 998 |
| 962 /*return OPJ_FALSE;*/
\ | 999 if (! opj_tcd_code_block
_enc_allocate(l_code_block)) { |
| 963 }
\ | 1000 return OPJ_FALSE
; |
| 964
\ | 1001 } |
| 965 l_code_block = l_current_precinct->cblks
.ELEMENT;
\ | 1002 /* code-block size (glob
al) */ |
| 966
\ | 1003 l_code_block->x0 = opj_i
nt_max(cblkxstart, l_current_precinct->x0); |
| 967 for (cblkno = 0; cblkno < l_nb_code_bloc
ks; ++cblkno) {
\ | 1004 l_code_block->y0 = opj_i
nt_max(cblkystart, l_current_precinct->y0); |
| 968 OPJ_INT32 cblkxstart = tlcblkxst
art + (OPJ_INT32)(cblkno % l_current_precinct->cw) * (1 << cblkwidthexpn);
\ | 1005 l_code_block->x1 = opj_i
nt_min(cblkxend, l_current_precinct->x1); |
| 969 OPJ_INT32 cblkystart = tlcblkyst
art + (OPJ_INT32)(cblkno / l_current_precinct->cw) * (1 << cblkheightexpn);
\ | 1006 l_code_block->y1 = opj_i
nt_min(cblkyend, l_current_precinct->y1); |
| 970 OPJ_INT32 cblkxend = cblkxstart
+ (1 << cblkwidthexpn);
\ | 1007 } else { |
| 971 OPJ_INT32 cblkyend = cblkystart
+ (1 << cblkheightexpn);
\ | 1008 opj_tcd_cblk_dec_t* l_co
de_block = l_current_precinct->cblks.dec + cblkno; |
| 972
\ | 1009 |
| 973 if (! FUNCTION_ELEMENT(l_code_bl
ock)) {
\ | 1010 if (! opj_tcd_code_block
_dec_allocate(l_code_block)) { |
| 974 return OPJ_FALSE;
\ | 1011 return OPJ_FALSE
; |
| 975 }
\ | 1012 } |
| 976 /* code-block size (global) */
\ | 1013 /* code-block size (glob
al) */ |
| 977 l_code_block->x0 = opj_int_max(c
blkxstart, l_current_precinct->x0);
\ | 1014 l_code_block->x0 = opj_i
nt_max(cblkxstart, l_current_precinct->x0); |
| 978 l_code_block->y0 = opj_int_max(c
blkystart, l_current_precinct->y0);
\ | 1015 l_code_block->y0 = opj_i
nt_max(cblkystart, l_current_precinct->y0); |
| 979 l_code_block->x1 = opj_int_min(c
blkxend, l_current_precinct->x1);
\ | 1016 l_code_block->x1 = opj_i
nt_min(cblkxend, l_current_precinct->x1); |
| 980 l_code_block->y1 = opj_int_min(c
blkyend, l_current_precinct->y1);
\ | 1017 l_code_block->y1 = opj_i
nt_min(cblkyend, l_current_precinct->y1); |
| 981 ++l_code_block;
\ | 1018 } |
| 982 }
\ | 1019 } |
| 983 ++l_current_precinct;
\ | 1020 ++l_current_precinct; |
| 984 } /* precno */
\ | 1021 } /* precno */ |
| 985 ++l_band;
\ | 1022 ++l_band; |
| 986 ++l_step_size;
\ | 1023 ++l_step_size; |
| 987 } /* bandno */
\ | 1024 } /* bandno */ |
| 988 ++l_res;
\ | 1025 ++l_res; |
| 989 --l_level_no;
\ | 1026 --l_level_no; |
| 990 } /* resno */
\ | 1027 } /* resno */ |
| 991 ++l_tccp;
\ | 1028 ++l_tccp; |
| 992 ++l_tilec;
\ | 1029 ++l_tilec; |
| 993 ++l_image_comp;
\ | 1030 ++l_image_comp; |
| 994 } /* compno */
\ | 1031 } /* compno */ |
| 995 return OPJ_TRUE;
\ | 1032 return OPJ_TRUE; |
| 996 }
\ | 1033 } |
| 997 | 1034 |
| 998 | 1035 OPJ_BOOL opj_tcd_init_encode_tile (opj_tcd_t *p_tcd, OPJ_UINT32 p_tile_no) |
| 999 OPJ_MACRO_TCD_ALLOCATE(opj_tcd_init_encode_tile, opj_tcd_cblk_enc_t, 1.f, enc, o
pj_tcd_code_block_enc_allocate) | 1036 { |
| 1000 OPJ_MACRO_TCD_ALLOCATE(opj_tcd_init_decode_tile, opj_tcd_cblk_dec_t, 0.5f, dec,
opj_tcd_code_block_dec_allocate) | 1037 return opj_tcd_init_tile(p_tcd, p_tile_no, OPJ_TRUE, 1.0F, sizeof(opj_tc
d_cblk_enc_t)); |
| 1001 | 1038 } |
| 1002 #undef OPJ_MACRO_TCD_ALLOCATE | 1039 |
| 1040 OPJ_BOOL opj_tcd_init_decode_tile (opj_tcd_t *p_tcd, OPJ_UINT32 p_tile_no) |
| 1041 { |
| 1042 return opj_tcd_init_tile(p_tcd, p_tile_no, OPJ_FALSE, 0.5F, sizeof(opj_t
cd_cblk_dec_t)); |
| 1043 } |
| 1003 | 1044 |
| 1004 /** | 1045 /** |
| 1005 * Allocates memory for an encoding code block. | 1046 * Allocates memory for an encoding code block. |
| 1006 */ | 1047 */ |
| 1007 OPJ_BOOL opj_tcd_code_block_enc_allocate (opj_tcd_cblk_enc_t * p_code_block) | 1048 OPJ_BOOL opj_tcd_code_block_enc_allocate (opj_tcd_cblk_enc_t * p_code_block) |
| 1008 { | 1049 { |
| 1009 if (! p_code_block->data) { | 1050 if (! p_code_block->data) { |
| 1010 | 1051 |
| 1011 p_code_block->data = (OPJ_BYTE*) opj_malloc(OPJ_J2K_DEFAULT_CBLK
_DATA_SIZE*2); /*why +1 ?*/ | 1052 p_code_block->data = (OPJ_BYTE*) opj_malloc(OPJ_J2K_DEFAULT_CBLK
_DATA_SIZE*2); /*why +1 ?*/ |
| 1012 if(! p_code_block->data) { | 1053 if(! p_code_block->data) { |
| (...skipping 437 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1450 } | 1491 } |
| 1451 ++l_band; | 1492 ++l_band; |
| 1452 } /* for (resno */ | 1493 } /* for (resno */ |
| 1453 ++l_res; | 1494 ++l_res; |
| 1454 } | 1495 } |
| 1455 | 1496 |
| 1456 opj_free(l_tile_comp->resolutions); | 1497 opj_free(l_tile_comp->resolutions); |
| 1457 l_tile_comp->resolutions = 00; | 1498 l_tile_comp->resolutions = 00; |
| 1458 } | 1499 } |
| 1459 | 1500 |
| 1460 if (l_tile_comp->data) { | 1501 if (l_tile_comp->ownsData && l_tile_comp->data) { |
| 1461 opj_free(l_tile_comp->data); | 1502 opj_free(l_tile_comp->data); |
| 1462 l_tile_comp->data = 00; | 1503 l_tile_comp->data = 00; |
| 1504 l_tile_comp->ownsData = 0; |
| 1505 l_tile_comp->data_size = 0; |
| 1506 l_tile_comp->data_size_needed = 0; |
| 1463 } | 1507 } |
| 1464 ++l_tile_comp; | 1508 ++l_tile_comp; |
| 1465 } | 1509 } |
| 1466 | 1510 |
| 1467 opj_free(l_tile->comps); | 1511 opj_free(l_tile->comps); |
| 1468 l_tile->comps = 00; | 1512 l_tile->comps = 00; |
| 1469 opj_free(p_tcd->tcd_image->tiles); | 1513 opj_free(p_tcd->tcd_image->tiles); |
| 1470 p_tcd->tcd_image->tiles = 00; | 1514 p_tcd->tcd_image->tiles = 00; |
| 1471 } | 1515 } |
| 1472 | 1516 |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1505 | 1549 |
| 1506 OPJ_BOOL opj_tcd_t1_decode ( opj_tcd_t *p_tcd ) | 1550 OPJ_BOOL opj_tcd_t1_decode ( opj_tcd_t *p_tcd ) |
| 1507 { | 1551 { |
| 1508 OPJ_UINT32 compno; | 1552 OPJ_UINT32 compno; |
| 1509 opj_t1_t * l_t1; | 1553 opj_t1_t * l_t1; |
| 1510 opj_tcd_tile_t * l_tile = p_tcd->tcd_image->tiles; | 1554 opj_tcd_tile_t * l_tile = p_tcd->tcd_image->tiles; |
| 1511 opj_tcd_tilecomp_t* l_tile_comp = l_tile->comps; | 1555 opj_tcd_tilecomp_t* l_tile_comp = l_tile->comps; |
| 1512 opj_tccp_t * l_tccp = p_tcd->tcp->tccps; | 1556 opj_tccp_t * l_tccp = p_tcd->tcp->tccps; |
| 1513 | 1557 |
| 1514 | 1558 |
| 1515 l_t1 = opj_t1_create(); | 1559 l_t1 = opj_t1_create(OPJ_FALSE); |
| 1516 if (l_t1 == 00) { | 1560 if (l_t1 == 00) { |
| 1517 return OPJ_FALSE; | 1561 return OPJ_FALSE; |
| 1518 } | 1562 } |
| 1519 | 1563 |
| 1520 for (compno = 0; compno < l_tile->numcomps; ++compno) { | 1564 for (compno = 0; compno < l_tile->numcomps; ++compno) { |
| 1521 /* The +3 is headroom required by the vectorized DWT */ | 1565 /* The +3 is headroom required by the vectorized DWT */ |
| 1522 if (OPJ_FALSE == opj_t1_decode_cblks(l_t1, l_tile_comp, l_tccp))
{ | 1566 if (OPJ_FALSE == opj_t1_decode_cblks(l_t1, l_tile_comp, l_tccp))
{ |
| 1523 opj_t1_destroy(l_t1); | 1567 opj_t1_destroy(l_t1); |
| 1524 return OPJ_FALSE; | 1568 return OPJ_FALSE; |
| 1525 } | 1569 } |
| (...skipping 414 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1940 | 1984 |
| 1941 return OPJ_TRUE; | 1985 return OPJ_TRUE; |
| 1942 } | 1986 } |
| 1943 | 1987 |
| 1944 OPJ_BOOL opj_tcd_t1_encode ( opj_tcd_t *p_tcd ) | 1988 OPJ_BOOL opj_tcd_t1_encode ( opj_tcd_t *p_tcd ) |
| 1945 { | 1989 { |
| 1946 opj_t1_t * l_t1; | 1990 opj_t1_t * l_t1; |
| 1947 const OPJ_FLOAT64 * l_mct_norms; | 1991 const OPJ_FLOAT64 * l_mct_norms; |
| 1948 opj_tcp_t * l_tcp = p_tcd->tcp; | 1992 opj_tcp_t * l_tcp = p_tcd->tcp; |
| 1949 | 1993 |
| 1950 l_t1 = opj_t1_create(); | 1994 l_t1 = opj_t1_create(OPJ_TRUE); |
| 1951 if (l_t1 == 00) { | 1995 if (l_t1 == 00) { |
| 1952 return OPJ_FALSE; | 1996 return OPJ_FALSE; |
| 1953 } | 1997 } |
| 1954 | 1998 |
| 1955 if (l_tcp->mct == 1) { | 1999 if (l_tcp->mct == 1) { |
| 1956 /* irreversible encoding */ | 2000 /* irreversible encoding */ |
| 1957 if (l_tcp->tccps->qmfbid == 0) { | 2001 if (l_tcp->tccps->qmfbid == 0) { |
| 1958 l_mct_norms = opj_mct_get_mct_norms_real(); | 2002 l_mct_norms = opj_mct_get_mct_norms_real(); |
| 1959 } | 2003 } |
| 1960 else { | 2004 else { |
| (...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2123 } | 2167 } |
| 2124 break; | 2168 break; |
| 2125 } | 2169 } |
| 2126 | 2170 |
| 2127 ++l_img_comp; | 2171 ++l_img_comp; |
| 2128 ++l_tilec; | 2172 ++l_tilec; |
| 2129 } | 2173 } |
| 2130 | 2174 |
| 2131 return OPJ_TRUE; | 2175 return OPJ_TRUE; |
| 2132 } | 2176 } |
| OLD | NEW |