about summary refs log tree commit diff
path: root/converter/other/jpeg2000/libjasper/jp2/jp2_dec.c
diff options
context:
space:
mode:
Diffstat (limited to 'converter/other/jpeg2000/libjasper/jp2/jp2_dec.c')
-rw-r--r--converter/other/jpeg2000/libjasper/jp2/jp2_dec.c27
1 files changed, 20 insertions, 7 deletions
diff --git a/converter/other/jpeg2000/libjasper/jp2/jp2_dec.c b/converter/other/jpeg2000/libjasper/jp2/jp2_dec.c
index 4036f0f2..7ad591ed 100644
--- a/converter/other/jpeg2000/libjasper/jp2/jp2_dec.c
+++ b/converter/other/jpeg2000/libjasper/jp2/jp2_dec.c
@@ -117,6 +117,8 @@
 #include "jasper/jas_malloc.h"
 #include "jasper/jas_version.h"
 
+#include "netpbm/nstring.h"
+
 #include "jp2_cod.h"
 #include "jp2_dec.h"
 
@@ -271,8 +273,11 @@ fromiccpcs(int cs) {
 
 
 
-jas_image_t *
-jp2_decode(jas_stream_t *in, char *optstr) {
+void
+jp2_decode(jas_stream_t * const in,
+           const char *   const optstr,
+           jas_image_t ** const imagePP,
+           const char **  const errorP) {
 
     jp2_box_t *box;
     int found;
@@ -386,9 +391,15 @@ jp2_decode(jas_stream_t *in, char *optstr) {
         goto error;
     }
 
-    if (!(dec->image = jpc_decode(in, optstr))) {
-        jas_eprintf("error: cannot decode code stream\n");
-        goto error;
+    {
+        const char * decodeError;
+        jpc_decode(in, optstr, &dec->image, &decodeError);
+        if (decodeError) {
+            jas_eprintf("error: cannot decode code stream.  %s\n",
+                        decodeError);
+            pm_strfree(decodeError);
+            goto error;
+        }
     }
 
     /* An IHDR box must be present. */
@@ -614,7 +625,9 @@ jp2_decode(jas_stream_t *in, char *optstr) {
 
     jp2_dec_destroy(dec);
 
-    return image;
+    *imagePP = image;
+    *errorP = NULL;
+    return;
 
 error:
     if (box) {
@@ -623,7 +636,7 @@ error:
     if (dec) {
         jp2_dec_destroy(dec);
     }
-    return 0;
+    pm_asprintf(errorP, "failed");
 }