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 841 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
852 | 852 |
853 channel_size = color->jp2_pclr->channel_size; | 853 channel_size = color->jp2_pclr->channel_size; |
854 channel_sign = color->jp2_pclr->channel_sign; | 854 channel_sign = color->jp2_pclr->channel_sign; |
855 entries = color->jp2_pclr->entries; | 855 entries = color->jp2_pclr->entries; |
856 cmap = color->jp2_pclr->cmap; | 856 cmap = color->jp2_pclr->cmap; |
857 nr_channels = color->jp2_pclr->nr_channels; | 857 nr_channels = color->jp2_pclr->nr_channels; |
858 | 858 |
859 old_comps = image->comps; | 859 old_comps = image->comps; |
860 new_comps = (opj_image_comp_t*) | 860 new_comps = (opj_image_comp_t*) |
861 opj_malloc(nr_channels * sizeof(opj_image_comp_t)); | 861 opj_malloc(nr_channels * sizeof(opj_image_comp_t)); |
862 | 862 » if (!new_comps) { |
| 863 » » /* FIXME no error code for opj_jp2_apply_pclr */ |
| 864 » » /* FIXME event manager error callback */ |
| 865 » » return; |
| 866 » } |
863 for(i = 0; i < nr_channels; ++i) { | 867 for(i = 0; i < nr_channels; ++i) { |
864 pcol = cmap[i].pcol; cmp = cmap[i].cmp; | 868 pcol = cmap[i].pcol; cmp = cmap[i].cmp; |
865 | 869 |
866 /* Direct use */ | 870 /* Direct use */ |
867 if(cmap[i].mtyp == 0){ | 871 if(cmap[i].mtyp == 0){ |
868 assert( pcol == 0 ); | 872 assert( pcol == 0 ); |
869 new_comps[i] = old_comps[cmp]; | 873 new_comps[i] = old_comps[cmp]; |
870 } else { | 874 } else { |
871 assert( i == pcol ); | 875 assert( i == pcol ); |
872 new_comps[pcol] = old_comps[cmp]; | 876 new_comps[pcol] = old_comps[cmp]; |
873 } | 877 } |
874 | 878 |
875 /* Palette mapping: */ | 879 /* Palette mapping: */ |
876 new_comps[i].data = (OPJ_INT32*) | 880 new_comps[i].data = (OPJ_INT32*) |
877 opj_malloc(old_comps[cmp].w * old_comps[cmp].h *
sizeof(OPJ_INT32)); | 881 opj_malloc(old_comps[cmp].w * old_comps[cmp].h *
sizeof(OPJ_INT32)); |
| 882 if (!new_comps[i].data) { |
| 883 opj_free(new_comps); |
| 884 new_comps = NULL; |
| 885 /* FIXME no error code for opj_jp2_apply_pclr */ |
| 886 /* FIXME event manager error callback */ |
| 887 return; |
| 888 } |
878 new_comps[i].prec = channel_size[i]; | 889 new_comps[i].prec = channel_size[i]; |
879 new_comps[i].sgnd = channel_sign[i]; | 890 new_comps[i].sgnd = channel_sign[i]; |
880 } | 891 } |
881 | 892 |
882 top_k = color->jp2_pclr->nr_entries - 1; | 893 top_k = color->jp2_pclr->nr_entries - 1; |
883 | 894 |
884 for(i = 0; i < nr_channels; ++i) { | 895 for(i = 0; i < nr_channels; ++i) { |
885 /* Palette mapping: */ | 896 /* Palette mapping: */ |
886 cmp = cmap[i].cmp; pcol = cmap[i].pcol; | 897 cmp = cmap[i].cmp; pcol = cmap[i].pcol; |
887 src = old_comps[cmp].data; | 898 src = old_comps[cmp].data; |
(...skipping 711 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1599 | 1610 |
1600 /* further JP2 initializations go here */ | 1611 /* further JP2 initializations go here */ |
1601 jp2->color.jp2_has_colr = 0; | 1612 jp2->color.jp2_has_colr = 0; |
1602 jp2->ignore_pclr_cmap_cdef = parameters->flags & OPJ_DPARAMETERS_IGNORE_PCLR
_CMAP_CDEF_FLAG; | 1613 jp2->ignore_pclr_cmap_cdef = parameters->flags & OPJ_DPARAMETERS_IGNORE_PCLR
_CMAP_CDEF_FLAG; |
1603 } | 1614 } |
1604 | 1615 |
1605 /* ----------------------------------------------------------------------- */ | 1616 /* ----------------------------------------------------------------------- */ |
1606 /* JP2 encoder interface */ | 1617 /* JP2 encoder interface */ |
1607 /* ----------------------------------------------------------------------- */ | 1618 /* ----------------------------------------------------------------------- */ |
1608 | 1619 |
1609 void opj_jp2_setup_encoder(» opj_jp2_t *jp2, | 1620 OPJ_BOOL opj_jp2_setup_encoder(»opj_jp2_t *jp2, |
1610 opj_cparameters_t *parameters, | 1621 opj_cparameters_t *parameters, |
1611 opj_image_t *image, | 1622 opj_image_t *image, |
1612 opj_event_mgr_t * p_manager) | 1623 opj_event_mgr_t * p_manager) |
1613 { | 1624 { |
1614 OPJ_UINT32 i; | 1625 OPJ_UINT32 i; |
1615 OPJ_UINT32 depth_0; | 1626 OPJ_UINT32 depth_0; |
1616 OPJ_UINT32 sign; | 1627 OPJ_UINT32 sign; |
1617 | 1628 |
1618 if(!jp2 || !parameters || !image) | 1629 if(!jp2 || !parameters || !image) |
1619 » » return; | 1630 » » return OPJ_FALSE; |
1620 | 1631 |
1621 /* setup the J2K codec */ | 1632 /* setup the J2K codec */ |
1622 /* ------------------- */ | 1633 /* ------------------- */ |
1623 | 1634 |
1624 /* Check if number of components respects standard */ | 1635 /* Check if number of components respects standard */ |
1625 if (image->numcomps < 1 || image->numcomps > 16384) { | 1636 if (image->numcomps < 1 || image->numcomps > 16384) { |
1626 opj_event_msg(p_manager, EVT_ERROR, "Invalid number of component
s specified while setting up JP2 encoder\n"); | 1637 opj_event_msg(p_manager, EVT_ERROR, "Invalid number of component
s specified while setting up JP2 encoder\n"); |
1627 » » return; | 1638 » » return OPJ_FALSE; |
1628 } | 1639 } |
1629 | 1640 |
1630 » opj_j2k_setup_encoder(jp2->j2k, parameters, image, p_manager ); | 1641 » if (opj_j2k_setup_encoder(jp2->j2k, parameters, image, p_manager ) == OP
J_FALSE) { |
| 1642 » » return OPJ_FALSE; |
| 1643 » } |
1631 | 1644 |
1632 /* setup the JP2 codec */ | 1645 /* setup the JP2 codec */ |
1633 /* ------------------- */ | 1646 /* ------------------- */ |
1634 | 1647 |
1635 /* Profile box */ | 1648 /* Profile box */ |
1636 | 1649 |
1637 jp2->brand = JP2_JP2; /* BR */ | 1650 jp2->brand = JP2_JP2; /* BR */ |
1638 jp2->minversion = 0; /* MinV */ | 1651 jp2->minversion = 0; /* MinV */ |
1639 jp2->numcl = 1; | 1652 jp2->numcl = 1; |
1640 jp2->cl = (OPJ_UINT32*) opj_malloc(jp2->numcl * sizeof(OPJ_UINT32)); | 1653 jp2->cl = (OPJ_UINT32*) opj_malloc(jp2->numcl * sizeof(OPJ_UINT32)); |
1641 if (!jp2->cl){ | 1654 » if (!jp2->cl){ |
1642 jp2->cl = NULL; | 1655 » » jp2->cl = NULL; |
1643 opj_event_msg(p_manager, EVT_ERROR, "Not enough memory when setup the JP
2 encoder\n"); | 1656 » » opj_event_msg(p_manager, EVT_ERROR, "Not enough memory when setu
p the JP2 encoder\n"); |
1644 return; | 1657 » » return OPJ_FALSE; |
1645 } | 1658 » } |
1646 jp2->cl[0] = JP2_JP2; /* CL0 : JP2 */ | 1659 jp2->cl[0] = JP2_JP2; /* CL0 : JP2 */ |
1647 | 1660 |
1648 /* Image Header box */ | 1661 /* Image Header box */ |
1649 | 1662 |
1650 jp2->numcomps = image->numcomps; /* NC */ | 1663 jp2->numcomps = image->numcomps; /* NC */ |
1651 jp2->comps = (opj_jp2_comps_t*) opj_malloc(jp2->numcomps * sizeof(opj_jp
2_comps_t)); | 1664 jp2->comps = (opj_jp2_comps_t*) opj_malloc(jp2->numcomps * sizeof(opj_jp
2_comps_t)); |
1652 if (!jp2->comps) { | 1665 » if (!jp2->comps) { |
1653 jp2->comps = NULL; | 1666 » » jp2->comps = NULL; |
1654 opj_event_msg(p_manager, EVT_ERROR, "Not enough memory when setup the JP
2 encoder\n"); | 1667 » » opj_event_msg(p_manager, EVT_ERROR, "Not enough memory when setu
p the JP2 encoder\n"); |
1655 return; | 1668 » » /* Memory of jp2->cl will be freed by opj_jp2_destroy */ |
1656 } | 1669 » » return OPJ_FALSE; |
| 1670 » } |
1657 | 1671 |
1658 jp2->h = image->y1 - image->y0; /* HEIGHT */ | 1672 jp2->h = image->y1 - image->y0; /* HEIGHT */ |
1659 jp2->w = image->x1 - image->x0; /* WIDTH */ | 1673 jp2->w = image->x1 - image->x0; /* WIDTH */ |
1660 /* BPC */ | 1674 /* BPC */ |
1661 depth_0 = image->comps[0].prec - 1; | 1675 depth_0 = image->comps[0].prec - 1; |
1662 sign = image->comps[0].sgnd; | 1676 sign = image->comps[0].sgnd; |
1663 jp2->bpc = depth_0 + (sign << 7); | 1677 jp2->bpc = depth_0 + (sign << 7); |
1664 for (i = 1; i < image->numcomps; i++) { | 1678 for (i = 1; i < image->numcomps; i++) { |
1665 OPJ_UINT32 depth = image->comps[i].prec - 1; | 1679 OPJ_UINT32 depth = image->comps[i].prec - 1; |
1666 sign = image->comps[i].sgnd; | 1680 sign = image->comps[i].sgnd; |
(...skipping 22 matching lines...) Expand all Loading... |
1689 jp2->enumcs = 17; /* greyscale */ | 1703 jp2->enumcs = 17; /* greyscale */ |
1690 else if (image->color_space == 3) | 1704 else if (image->color_space == 3) |
1691 jp2->enumcs = 18; /* YUV */ | 1705 jp2->enumcs = 18; /* YUV */ |
1692 } | 1706 } |
1693 | 1707 |
1694 | 1708 |
1695 jp2->precedence = 0; /* PRECEDENCE */ | 1709 jp2->precedence = 0; /* PRECEDENCE */ |
1696 jp2->approx = 0; /* APPROX */ | 1710 jp2->approx = 0; /* APPROX */ |
1697 | 1711 |
1698 jp2->jpip_on = parameters->jpip_on; | 1712 jp2->jpip_on = parameters->jpip_on; |
| 1713 |
| 1714 return OPJ_TRUE; |
1699 } | 1715 } |
1700 | 1716 |
1701 OPJ_BOOL opj_jp2_encode(opj_jp2_t *jp2, | 1717 OPJ_BOOL opj_jp2_encode(opj_jp2_t *jp2, |
1702 opj_stream_private_t *stream, | 1718 opj_stream_private_t *stream, |
1703 opj_event_mgr_t * p_manager) | 1719 opj_event_mgr_t * p_manager) |
1704 { | 1720 { |
1705 return opj_j2k_encode(jp2->j2k, stream, p_manager); | 1721 return opj_j2k_encode(jp2->j2k, stream, p_manager); |
1706 } | 1722 } |
1707 | 1723 |
1708 OPJ_BOOL opj_jp2_end_decompress(opj_jp2_t *jp2, | 1724 OPJ_BOOL opj_jp2_end_decompress(opj_jp2_t *jp2, |
(...skipping 1107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2816 len = opj_stream_tell(cio)-lenp; | 2832 len = opj_stream_tell(cio)-lenp; |
2817 opj_stream_skip(cio, lenp, p_manager); | 2833 opj_stream_skip(cio, lenp, p_manager); |
2818 opj_write_bytes(l_data_header,len,4);/* L */ | 2834 opj_write_bytes(l_data_header,len,4);/* L */ |
2819 opj_stream_write_data(cio,l_data_header,4,p_manager); | 2835 opj_stream_write_data(cio,l_data_header,4,p_manager); |
2820 opj_stream_seek(cio, lenp+len,p_manager); | 2836 opj_stream_seek(cio, lenp+len,p_manager); |
2821 | 2837 |
2822 return len; | 2838 return len; |
2823 } | 2839 } |
2824 #endif | 2840 #endif |
2825 #endif /* USE_JPIP */ | 2841 #endif /* USE_JPIP */ |
OLD | NEW |