summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/j2k.cc15
1 files changed, 11 insertions, 4 deletions
diff --git a/src/j2k.cc b/src/j2k.cc
index 7854e683..f2335f08 100644
--- a/src/j2k.cc
+++ b/src/j2k.cc
@@ -307,6 +307,8 @@ dcp::compress_j2k (shared_ptr<const OpenJPEGImage> xyz, int bandwidth, int frame
opj_stream_t* stream = opj_stream_default_create (OPJ_FALSE);
if (!stream) {
+ opj_destroy_codec (encoder);
+ free (parameters.cp_comment);
throw MiscError ("could not create JPEG2000 stream");
}
@@ -316,6 +318,9 @@ dcp::compress_j2k (shared_ptr<const OpenJPEGImage> xyz, int bandwidth, int frame
opj_stream_set_user_data (stream, buffer, write_free_function);
if (!opj_start_compress (encoder, xyz->opj_image(), stream)) {
+ opj_stream_destroy (stream);
+ opj_destroy_codec (encoder);
+ free (parameters.cp_comment);
if ((errno & 0x61500) == 0x61500) {
/* We've had one of the magic error codes from our patched openjpeg */
boost::throw_exception (StartCompressionError (errno & 0xff));
@@ -325,22 +330,24 @@ dcp::compress_j2k (shared_ptr<const OpenJPEGImage> xyz, int bandwidth, int frame
}
if (!opj_encode (encoder, stream)) {
- opj_destroy_codec (encoder);
opj_stream_destroy (stream);
+ opj_destroy_codec (encoder);
+ free (parameters.cp_comment);
throw MiscError ("JPEG2000 encoding failed");
}
if (!opj_end_compress (encoder, stream)) {
- opj_destroy_codec (encoder);
opj_stream_destroy (stream);
+ opj_destroy_codec (encoder);
+ free (parameters.cp_comment);
throw MiscError ("could not end JPEG2000 encoding");
}
Data enc (buffer->data ());
- free (parameters.cp_comment);
- opj_destroy_codec (encoder);
opj_stream_destroy (stream);
+ opj_destroy_codec (encoder);
+ free (parameters.cp_comment);
return enc;
}