This commit is contained in:
parent
383495c863
commit
0fb6576511
|
@ -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_current_data = p_stream->m_stored_data;
|
||||||
p_stream->m_bytes_in_buffer = 0;
|
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;
|
p_stream->m_status |= opj_stream_e_end;
|
||||||
return EXIT_FAILURE;
|
return OPJ_FALSE;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
/* reset stream status */
|
/* 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_nb_bytes);
|
||||||
OPJ_ARG_NOT_USED(p_user_data);
|
OPJ_ARG_NOT_USED(p_user_data);
|
||||||
return EXIT_FAILURE;
|
return OPJ_FALSE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
if(l_current_tile_no == l_tile_no_to_dec)
|
||||||
{
|
{
|
||||||
/* move into the codestream to the the first SOT (FIXME or not move?)*/
|
/* 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");
|
opj_event_msg_v2(p_manager, EVT_ERROR, "Problem with seek function\n");
|
||||||
return OPJ_FALSE;
|
return OPJ_FALSE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
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 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);
|
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;
|
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) {
|
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;
|
opj_jp2_box_t box;
|
||||||
|
|
||||||
|
@ -2500,7 +2559,7 @@ void jp2_setup_end_header_writting (opj_jp2_v2_t *jp2)
|
||||||
/* preconditions */
|
/* preconditions */
|
||||||
assert(jp2 != 00);
|
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 */
|
/* DEVELOPER CORNER, add your custom procedures */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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)
|
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)) {
|
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 */
|
/* get a JP2 decoder handle */
|
||||||
l_codec->m_codec_data.m_compression.opj_encode = (opj_bool (*) (void *,
|
l_codec->m_codec_data.m_compression.opj_encode = (opj_bool (*) (void *,
|
||||||
struct opj_stream_private *,
|
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 *,
|
l_codec->m_codec_data.m_compression.opj_end_compress = (opj_bool (*) ( void *,
|
||||||
struct opj_stream_private *,
|
struct opj_stream_private *,
|
||||||
|
|
Loading…
Reference in New Issue