[trunk] WIP: remove previous commit about memory leak with ppm read function
[openjpeg.git] / libopenjpeg / jp2.c
index 840b3b867da8426d14b263b3b94e9c7c281be193..ed7c79f686bf05f64deb98a5ec510cf4ea45a681 100644 (file)
@@ -1484,14 +1484,17 @@ opj_image_t* opj_jp2_decode(opj_jp2_t *jp2, opj_cio_t *cio,
 
 }/* opj_jp2_decode() */
 
-opj_bool opj_jp2_decode_v2(    opj_jp2_v2_t *jp2,
-                                                       struct opj_stream_private *cio,
-                                                       opj_image_t* p_image,
-                                                       struct opj_event_mgr * p_manager)
+opj_bool jp2_decode_v2(        opj_jp2_v2_t *jp2,
+                                               struct opj_stream_private *cio,
+                                               opj_image_t* p_image,
+                                               struct opj_event_mgr * p_manager)
 {
+       if (!p_image)
+               return OPJ_FALSE;
+
        /* J2K decoding */
-       if( j2k_decode_v2(jp2->j2k, cio, p_image, p_manager) ) {
-               opj_event_msg_v2(p_manager, EVT_ERROR, "Failed to decode J2K image\n");
+       if( j2k_decode_v2(jp2->j2k, cio, p_image, p_manager) ) {
+               opj_event_msg_v2(p_manager, EVT_ERROR, "Failed to decode the codestream in the JP2 file\n");
                return OPJ_FALSE;
        }
 
@@ -1521,6 +1524,7 @@ opj_bool opj_jp2_decode_v2(       opj_jp2_v2_t *jp2,
        if(jp2->color.icc_profile_buf) {
                p_image->icc_profile_buf = jp2->color.icc_profile_buf;
                p_image->icc_profile_len = jp2->color.icc_profile_len;
+               jp2->color.icc_profile_buf = NULL;
        }
 
        return OPJ_TRUE;
@@ -2437,11 +2441,11 @@ static opj_bool jp2_read_boxhdr_char(
  */
 opj_bool jp2_read_header(      struct opj_stream_private *p_stream,
                                                        opj_jp2_v2_t *jp2,
-                                                       opj_image_t* p_image,
+                                                       opj_image_t** p_image,
                                                        struct opj_event_mgr * p_manager
                                                        )
 {
-       // preconditions
+       /* preconditions */
        assert(jp2 != 00);
        assert(p_stream != 00);
        assert(p_manager != 00);
@@ -2526,7 +2530,7 @@ opj_bool jp2_read_tile_header(    opj_jp2_v2_t * p_jp2,
  * @param      p_stream                        the stream to write data to.
  * @param      p_manager       the user event manager.
  */
-opj_bool opj_jp2_decode_tile (
+opj_bool jp2_decode_tile (
                                        opj_jp2_v2_t * p_jp2,
                                        OPJ_UINT32 p_tile_index,
                                        OPJ_BYTE * p_data,
@@ -2631,6 +2635,13 @@ opj_jp2_v2_t* jp2_create(opj_bool p_is_decoder)
                        return 00;
                }
 
+               /* Color structure */
+               jp2->color.icc_profile_buf = NULL;
+               jp2->color.icc_profile_len = 0;
+               jp2->color.jp2_cdef = NULL;
+               jp2->color.jp2_pclr = NULL;
+               jp2->color.jp2_has_colr = 0;
+
                // validation list creation
                jp2->m_validation_list = opj_procedure_list_create();
                if (! jp2->m_validation_list) {
@@ -2648,3 +2659,24 @@ opj_jp2_v2_t* jp2_create(opj_bool p_is_decoder)
 
        return jp2;
 }
+
+void jp2_dump(opj_jp2_v2_t* p_jp2, OPJ_INT32 flag, FILE* out_stream)
+{
+       /* preconditions */
+       assert(p_jp2 != 00);
+
+       j2k_dump(p_jp2->j2k,
+                                       flag,
+                                       out_stream);
+}
+
+opj_codestream_index_t* jp2_get_cstr_index(opj_jp2_v2_t* p_jp2)
+{
+       return j2k_get_cstr_index(p_jp2->j2k);
+}
+
+opj_codestream_info_v2_t* jp2_get_cstr_info(opj_jp2_v2_t* p_jp2)
+{
+       return j2k_get_cstr_info(p_jp2->j2k);
+}
+