@@ -1594,22 +1594,10 @@ static OPJ_BOOL opj_jp2_read_colr(opj_jp2_t *jp2,
1594
1594
return OPJ_TRUE ;
1595
1595
}
1596
1596
1597
- OPJ_BOOL opj_jp2_decode (opj_jp2_t * jp2 ,
1598
- opj_stream_private_t * p_stream ,
1599
- opj_image_t * p_image ,
1600
- opj_event_mgr_t * p_manager )
1597
+ static OPJ_BOOL opj_jp2_apply_color_postprocessing (opj_jp2_t * jp2 ,
1598
+ opj_image_t * p_image ,
1599
+ opj_event_mgr_t * p_manager )
1601
1600
{
1602
- if (!p_image ) {
1603
- return OPJ_FALSE ;
1604
- }
1605
-
1606
- /* J2K decoding */
1607
- if (! opj_j2k_decode (jp2 -> j2k , p_stream , p_image , p_manager )) {
1608
- opj_event_msg (p_manager , EVT_ERROR ,
1609
- "Failed to decode the codestream in the JP2 file\n" );
1610
- return OPJ_FALSE ;
1611
- }
1612
-
1613
1601
if (jp2 -> j2k -> m_specific_param .m_decoder .m_numcomps_to_decode ) {
1614
1602
/* Bypass all JP2 component transforms */
1615
1603
return OPJ_TRUE ;
@@ -1620,21 +1608,6 @@ OPJ_BOOL opj_jp2_decode(opj_jp2_t *jp2,
1620
1608
return OPJ_FALSE ;
1621
1609
}
1622
1610
1623
- /* Set Image Color Space */
1624
- if (jp2 -> enumcs == 16 ) {
1625
- p_image -> color_space = OPJ_CLRSPC_SRGB ;
1626
- } else if (jp2 -> enumcs == 17 ) {
1627
- p_image -> color_space = OPJ_CLRSPC_GRAY ;
1628
- } else if (jp2 -> enumcs == 18 ) {
1629
- p_image -> color_space = OPJ_CLRSPC_SYCC ;
1630
- } else if (jp2 -> enumcs == 24 ) {
1631
- p_image -> color_space = OPJ_CLRSPC_EYCC ;
1632
- } else if (jp2 -> enumcs == 12 ) {
1633
- p_image -> color_space = OPJ_CLRSPC_CMYK ;
1634
- } else {
1635
- p_image -> color_space = OPJ_CLRSPC_UNKNOWN ;
1636
- }
1637
-
1638
1611
if (jp2 -> color .jp2_pclr ) {
1639
1612
/* Part 1, I.5.3.4: Either both or none : */
1640
1613
if (!jp2 -> color .jp2_pclr -> cmap ) {
@@ -1650,17 +1623,30 @@ OPJ_BOOL opj_jp2_decode(opj_jp2_t *jp2,
1650
1623
if (jp2 -> color .jp2_cdef ) {
1651
1624
opj_jp2_apply_cdef (p_image , & (jp2 -> color ), p_manager );
1652
1625
}
1653
-
1654
- if (jp2 -> color .icc_profile_buf ) {
1655
- p_image -> icc_profile_buf = jp2 -> color .icc_profile_buf ;
1656
- p_image -> icc_profile_len = jp2 -> color .icc_profile_len ;
1657
- jp2 -> color .icc_profile_buf = NULL ;
1658
- }
1659
1626
}
1660
1627
1661
1628
return OPJ_TRUE ;
1662
1629
}
1663
1630
1631
+ OPJ_BOOL opj_jp2_decode (opj_jp2_t * jp2 ,
1632
+ opj_stream_private_t * p_stream ,
1633
+ opj_image_t * p_image ,
1634
+ opj_event_mgr_t * p_manager )
1635
+ {
1636
+ if (!p_image ) {
1637
+ return OPJ_FALSE ;
1638
+ }
1639
+
1640
+ /* J2K decoding */
1641
+ if (! opj_j2k_decode (jp2 -> j2k , p_stream , p_image , p_manager )) {
1642
+ opj_event_msg (p_manager , EVT_ERROR ,
1643
+ "Failed to decode the codestream in the JP2 file\n" );
1644
+ return OPJ_FALSE ;
1645
+ }
1646
+
1647
+ return opj_jp2_apply_color_postprocessing (jp2 , p_image , p_manager );
1648
+ }
1649
+
1664
1650
static OPJ_BOOL opj_jp2_write_jp2h (opj_jp2_t * jp2 ,
1665
1651
opj_stream_private_t * stream ,
1666
1652
opj_event_mgr_t * p_manager
@@ -2843,6 +2829,8 @@ OPJ_BOOL opj_jp2_read_header(opj_stream_private_t *p_stream,
2843
2829
opj_event_mgr_t * p_manager
2844
2830
)
2845
2831
{
2832
+ int ret ;
2833
+
2846
2834
/* preconditions */
2847
2835
assert (jp2 != 00 );
2848
2836
assert (p_stream != 00 );
@@ -2876,10 +2864,34 @@ OPJ_BOOL opj_jp2_read_header(opj_stream_private_t *p_stream,
2876
2864
return OPJ_FALSE ;
2877
2865
}
2878
2866
2879
- return opj_j2k_read_header (p_stream ,
2880
- jp2 -> j2k ,
2881
- p_image ,
2882
- p_manager );
2867
+ ret = opj_j2k_read_header (p_stream ,
2868
+ jp2 -> j2k ,
2869
+ p_image ,
2870
+ p_manager );
2871
+
2872
+ if (p_image && * p_image ) {
2873
+ /* Set Image Color Space */
2874
+ if (jp2 -> enumcs == 16 ) {
2875
+ (* p_image )-> color_space = OPJ_CLRSPC_SRGB ;
2876
+ } else if (jp2 -> enumcs == 17 ) {
2877
+ (* p_image )-> color_space = OPJ_CLRSPC_GRAY ;
2878
+ } else if (jp2 -> enumcs == 18 ) {
2879
+ (* p_image )-> color_space = OPJ_CLRSPC_SYCC ;
2880
+ } else if (jp2 -> enumcs == 24 ) {
2881
+ (* p_image )-> color_space = OPJ_CLRSPC_EYCC ;
2882
+ } else if (jp2 -> enumcs == 12 ) {
2883
+ (* p_image )-> color_space = OPJ_CLRSPC_CMYK ;
2884
+ } else {
2885
+ (* p_image )-> color_space = OPJ_CLRSPC_UNKNOWN ;
2886
+ }
2887
+
2888
+ if (jp2 -> color .icc_profile_buf ) {
2889
+ (* p_image )-> icc_profile_buf = jp2 -> color .icc_profile_buf ;
2890
+ (* p_image )-> icc_profile_len = jp2 -> color .icc_profile_len ;
2891
+ jp2 -> color .icc_profile_buf = NULL ;
2892
+ }
2893
+ }
2894
+ return ret ;
2883
2895
}
2884
2896
2885
2897
static OPJ_BOOL opj_jp2_setup_encoding_validation (opj_jp2_t * jp2 ,
@@ -3123,53 +3135,7 @@ OPJ_BOOL opj_jp2_get_tile(opj_jp2_t *p_jp2,
3123
3135
return OPJ_FALSE ;
3124
3136
}
3125
3137
3126
- if (p_jp2 -> j2k -> m_specific_param .m_decoder .m_numcomps_to_decode ) {
3127
- /* Bypass all JP2 component transforms */
3128
- return OPJ_TRUE ;
3129
- }
3130
-
3131
- if (!opj_jp2_check_color (p_image , & (p_jp2 -> color ), p_manager )) {
3132
- return OPJ_FALSE ;
3133
- }
3134
-
3135
- /* Set Image Color Space */
3136
- if (p_jp2 -> enumcs == 16 ) {
3137
- p_image -> color_space = OPJ_CLRSPC_SRGB ;
3138
- } else if (p_jp2 -> enumcs == 17 ) {
3139
- p_image -> color_space = OPJ_CLRSPC_GRAY ;
3140
- } else if (p_jp2 -> enumcs == 18 ) {
3141
- p_image -> color_space = OPJ_CLRSPC_SYCC ;
3142
- } else if (p_jp2 -> enumcs == 24 ) {
3143
- p_image -> color_space = OPJ_CLRSPC_EYCC ;
3144
- } else if (p_jp2 -> enumcs == 12 ) {
3145
- p_image -> color_space = OPJ_CLRSPC_CMYK ;
3146
- } else {
3147
- p_image -> color_space = OPJ_CLRSPC_UNKNOWN ;
3148
- }
3149
-
3150
- if (p_jp2 -> color .jp2_pclr ) {
3151
- /* Part 1, I.5.3.4: Either both or none : */
3152
- if (!p_jp2 -> color .jp2_pclr -> cmap ) {
3153
- opj_jp2_free_pclr (& (p_jp2 -> color ));
3154
- } else {
3155
- if (!opj_jp2_apply_pclr (p_image , & (p_jp2 -> color ), p_manager )) {
3156
- return OPJ_FALSE ;
3157
- }
3158
- }
3159
- }
3160
-
3161
- /* Apply the color space if needed */
3162
- if (p_jp2 -> color .jp2_cdef ) {
3163
- opj_jp2_apply_cdef (p_image , & (p_jp2 -> color ), p_manager );
3164
- }
3165
-
3166
- if (p_jp2 -> color .icc_profile_buf ) {
3167
- p_image -> icc_profile_buf = p_jp2 -> color .icc_profile_buf ;
3168
- p_image -> icc_profile_len = p_jp2 -> color .icc_profile_len ;
3169
- p_jp2 -> color .icc_profile_buf = NULL ;
3170
- }
3171
-
3172
- return OPJ_TRUE ;
3138
+ return opj_jp2_apply_color_postprocessing (p_jp2 , p_image , p_manager );
3173
3139
}
3174
3140
3175
3141
/* ----------------------------------------------------------------------- */
0 commit comments