summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMickael Savinaud <savmickael@users.noreply.github.com>2012-05-14 17:17:53 +0000
committerMickael Savinaud <savmickael@users.noreply.github.com>2012-05-14 17:17:53 +0000
commit0fb657651126804f8f5dc891cc4e8772121a7945 (patch)
tree1226358be1c1a6953d625f865a77b9aa2c5ca6f1
parent383495c8636fed28e6f2c5ca7a7b6f497a4eef68 (diff)
-rw-r--r--libopenjpeg/cio.c8
-rw-r--r--libopenjpeg/j2k.c2
-rw-r--r--libopenjpeg/jp2.c61
-rw-r--r--libopenjpeg/openjpeg.c6
4 files changed, 68 insertions, 9 deletions
diff --git a/libopenjpeg/cio.c b/libopenjpeg/cio.c
index e791a1e6..1e9cdebd 100644
--- a/libopenjpeg/cio.c
+++ b/libopenjpeg/cio.c
@@ -888,9 +888,9 @@ opj_bool opj_stream_read_seek (opj_stream_private_t * p_stream, OPJ_OFF_T p_size
p_stream->m_current_data = p_stream->m_stored_data;
p_stream->m_bytes_in_buffer = 0;
- if( p_stream->m_seek_fn(p_size,p_stream->m_user_data)) {
+ if( !(p_stream->m_seek_fn(p_size,p_stream->m_user_data)) ) {
p_stream->m_status |= opj_stream_e_end;
- return EXIT_FAILURE;
+ return OPJ_FALSE;
}
else {
/* reset stream status */
@@ -899,7 +899,7 @@ opj_bool opj_stream_read_seek (opj_stream_private_t * p_stream, OPJ_OFF_T p_size
}
- return EXIT_SUCCESS;
+ return OPJ_TRUE;
}
/**
@@ -979,5 +979,5 @@ opj_bool opj_stream_default_seek (OPJ_OFF_T p_nb_bytes, void * p_user_data)
{
OPJ_ARG_NOT_USED(p_nb_bytes);
OPJ_ARG_NOT_USED(p_user_data);
- return EXIT_FAILURE;
+ return OPJ_FALSE;
}
diff --git a/libopenjpeg/j2k.c b/libopenjpeg/j2k.c
index 80cb2748..a411508d 100644
--- a/libopenjpeg/j2k.c
+++ b/libopenjpeg/j2k.c
@@ -11795,7 +11795,7 @@ static opj_bool j2k_decode_one_tile ( opj_j2k_v2_t *p_j2k,
if(l_current_tile_no == l_tile_no_to_dec)
{
/* move into the codestream to the the first SOT (FIXME or not move?)*/
- if (opj_stream_read_seek(p_stream, p_j2k->cstr_index->main_head_end + 2, p_manager) ) {
+ if (!(opj_stream_read_seek(p_stream, p_j2k->cstr_index->main_head_end + 2, p_manager) ) ) {
opj_event_msg_v2(p_manager, EVT_ERROR, "Problem with seek function\n");
return OPJ_FALSE;
}
diff --git a/libopenjpeg/jp2.c b/libopenjpeg/jp2.c
index 4ae47740..c4cc9fe9 100644
--- a/libopenjpeg/jp2.c
+++ b/libopenjpeg/jp2.c
@@ -210,6 +210,21 @@ static opj_bool jp2_read_jp2h_v2(
);
static int jp2_write_jp2c(opj_jp2_t *jp2, opj_cio_t *cio, opj_image_t *image, opj_codestream_info_t *cstr_info);
+
+
+/**
+ * Writes the Jpeg2000 codestream Header box - JP2C Header box. This function must be called AFTER the coding has been done.
+ *
+ * @param cio the stream to write data to.
+ * @param jp2 the jpeg2000 file codec.
+ * @param p_manager user event manager.
+ *
+ * @return true if writting was successful.
+*/
+static opj_bool jp2_write_jp2c_v2( opj_jp2_v2_t *jp2,
+ struct opj_stream_private *cio,
+ struct opj_event_mgr * p_manager );
+
static opj_bool jp2_read_jp2c(opj_jp2_t *jp2, opj_cio_t *cio, unsigned int *j2k_codestream_length, unsigned int *j2k_codestream_offset);
static void jp2_write_jp(opj_cio_t *cio);
/**
@@ -2063,6 +2078,50 @@ static int jp2_write_jp2c(opj_jp2_t *jp2, opj_cio_t *cio, opj_image_t *image, op
return box.length;
}
+/**
+ * Writes the Jpeg2000 codestream Header box - JP2C Header box.
+ *
+ * @param cio the stream to write data to.
+ * @param jp2 the jpeg2000 file codec.
+ * @param p_manager user event manager.
+ *
+ * @return true if writting was successful.
+*/
+opj_bool jp2_write_jp2c_v2( opj_jp2_v2_t *jp2,
+ opj_stream_private_t *cio,
+ opj_event_mgr_t * p_manager )
+{
+ unsigned int j2k_codestream_exit;
+ unsigned char l_data_header [8];
+
+ // preconditions
+ assert(jp2 != 00);
+ assert(cio != 00);
+ assert(p_manager != 00);
+ assert(opj_stream_has_seek(cio));
+
+ j2k_codestream_exit = opj_stream_tell(cio);
+ opj_write_bytes(l_data_header,j2k_codestream_exit - jp2->j2k_codestream_offset,4); /* size of codestream */
+ opj_write_bytes(l_data_header + 4,JP2_JP2C,4); /* JP2C */
+
+ if (! opj_stream_seek(cio,jp2->j2k_codestream_offset,p_manager)) {
+ opj_event_msg_v2(p_manager, EVT_ERROR, "Failed to seek in the stream.\n");
+ return OPJ_FALSE;
+ }
+
+ if (opj_stream_write_data(cio,l_data_header,8,p_manager) != 8) {
+ opj_event_msg_v2(p_manager, EVT_ERROR, "Failed to seek in the stream.\n");
+ return OPJ_FALSE;
+ }
+
+ if (! opj_stream_seek(cio,j2k_codestream_exit,p_manager)) {
+ opj_event_msg_v2(p_manager, EVT_ERROR, "Failed to seek in the stream.\n");
+ return OPJ_FALSE;
+ }
+
+ return OPJ_TRUE;
+}
+
static opj_bool jp2_read_jp2c(opj_jp2_t *jp2, opj_cio_t *cio, unsigned int *j2k_codestream_length, unsigned int *j2k_codestream_offset) {
opj_jp2_box_t box;
@@ -2500,7 +2559,7 @@ void jp2_setup_end_header_writting (opj_jp2_v2_t *jp2)
/* preconditions */
assert(jp2 != 00);
- opj_procedure_list_add_procedure(jp2->m_procedure_list,(opj_procedure)jp2_write_jp2c );
+ opj_procedure_list_add_procedure(jp2->m_procedure_list,(opj_procedure)jp2_write_jp2c_v2 );
/* DEVELOPER CORNER, add your custom procedures */
}
diff --git a/libopenjpeg/openjpeg.c b/libopenjpeg/openjpeg.c
index 48ac2e96..4c809dac 100644
--- a/libopenjpeg/openjpeg.c
+++ b/libopenjpeg/openjpeg.c
@@ -248,10 +248,10 @@ OPJ_OFF_T opj_skip_from_file (OPJ_OFF_T p_nb_bytes, FILE * p_user_data)
opj_bool opj_seek_from_file (OPJ_OFF_T p_nb_bytes, FILE * p_user_data)
{
if (OPJ_FSEEK(p_user_data,p_nb_bytes,SEEK_SET)) {
- return EXIT_FAILURE;
+ return OPJ_FALSE;
}
- return EXIT_SUCCESS;
+ return OPJ_TRUE;
}
/* ---------------------------------------------------------------------- */
@@ -660,7 +660,7 @@ opj_codec_t* OPJ_CALLCONV opj_create_compress_v2(OPJ_CODEC_FORMAT p_format)
/* get a JP2 decoder handle */
l_codec->m_codec_data.m_compression.opj_encode = (opj_bool (*) (void *,
struct opj_stream_private *,
- struct opj_event_mgr * )) opj_jp2_encode;
+ struct opj_event_mgr * )) opj_jp2_encode_v2;
l_codec->m_codec_data.m_compression.opj_end_compress = (opj_bool (*) ( void *,
struct opj_stream_private *,