static opj_bool opj_jpip_write_fidx(opj_jp2_v2_t *jp2, opj_stream_private_t *cio, opj_event_mgr_t * p_manager ) { OPJ_OFF_T j2k_codestream_exit; OPJ_BYTE l_data_header [24]; /* preconditions */ assert(jp2 != 00); assert(cio != 00); assert(p_manager != 00); assert(opj_stream_has_seek(cio)); opj_write_bytes(l_data_header, 24, 4); /* size of iptr */ opj_write_bytes(l_data_header + 4,JPIP_FIDX,4); /* IPTR */ opj_write_double(l_data_header + 4 + 4, 0); /* offset */ opj_write_double(l_data_header + 8 + 8, 0); /* length */ if (opj_stream_write_data(cio,l_data_header,24,p_manager) != 24) { opj_event_msg_v2(p_manager, EVT_ERROR, "Failed to seek in the stream.\n"); return OPJ_FALSE; } j2k_codestream_exit = opj_stream_tell(cio); 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 opj_jpip_write_jp2c(opj_jp2_v2_t *jp2, opj_stream_private_t *cio, opj_event_mgr_t * p_manager ) { OPJ_OFF_T j2k_codestream_exit; opj_codestream_info_t cstr_info; OPJ_BYTE l_data_header [8]; OPJ_UINT32 len_jp2c; int len_cidx; int len_fidx; int pos_jp2c; int pos_fidx; int pos_cidx; /* preconditions */ assert(jp2 != 00); assert(cio != 00); assert(p_manager != 00); assert(opj_stream_has_seek(cio)); j2k_codestream_exit = opj_stream_tell(cio); len_jp2c = j2k_codestream_exit - jp2->j2k_codestream_offset; pos_jp2c = jp2->j2k_codestream_offset; opj_write_bytes(l_data_header, len_jp2c, 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; } /* CIDX */ pos_cidx = opj_stream_tell( cio); /*cinfo = jp2_get_cstr_info(jp2);*/ assert( 0 ); /* MM: FIXME */ len_cidx = write_cidx_v2( pos_jp2c+8, cio, cstr_info, len_jp2c-8,p_manager); /* FIDX */ pos_fidx = opj_stream_tell( cio); len_fidx = write_fidx_v2( pos_jp2c, len_jp2c, pos_cidx, len_cidx, cio, p_manager); return OPJ_TRUE; }
static opj_bool opj_jp2_write_ftyp(opj_jp2_v2_t *jp2, opj_stream_private_t *cio, opj_event_mgr_t * p_manager ) { unsigned int i; unsigned int l_ftyp_size = 16 + 4 * jp2->numcl; unsigned char * l_ftyp_data, * l_current_data_ptr; opj_bool l_result; /* preconditions */ assert(cio != 00); assert(jp2 != 00); assert(p_manager != 00); l_ftyp_data = (unsigned char *) opj_malloc(l_ftyp_size); if (l_ftyp_data == 00) { opj_event_msg_v2(p_manager, EVT_ERROR, "Not enough memory to handle ftyp data\n"); return OPJ_FALSE; } memset(l_ftyp_data,0,l_ftyp_size); l_current_data_ptr = l_ftyp_data; opj_write_bytes(l_current_data_ptr, l_ftyp_size,4); /* box size */ l_current_data_ptr += 4; opj_write_bytes(l_current_data_ptr, JP2_FTYP,4); /* FTYP */ l_current_data_ptr += 4; opj_write_bytes(l_current_data_ptr, jp2->brand,4); /* BR */ l_current_data_ptr += 4; opj_write_bytes(l_current_data_ptr, jp2->minversion,4); /* MinV */ l_current_data_ptr += 4; for (i = 0; i < jp2->numcl; i++) { opj_write_bytes(l_current_data_ptr, jp2->cl[i],4); /* CL */ } l_result = (opj_stream_write_data(cio,l_ftyp_data,l_ftyp_size,p_manager) == l_ftyp_size); if (! l_result) { opj_event_msg_v2(p_manager, EVT_ERROR, "Error while writing ftyp data to stream\n"); } opj_free(l_ftyp_data); return l_result; }
opj_bool OPJ_CALLCONV opj_setup_decoder_v2( opj_codec_t *p_codec, opj_dparameters_t *parameters ) { if (p_codec && parameters) { opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec; if (! l_codec->is_decompressor) { opj_event_msg_v2(&(l_codec->m_event_mgr), EVT_ERROR, "Codec provided to the opj_setup_decoder function is not a decompressor handler.\n"); return OPJ_FALSE; } l_codec->m_codec_data.m_decompression.opj_setup_decoder(l_codec->m_codec, parameters); return OPJ_TRUE; } return OPJ_FALSE; }
opj_bool OPJ_CALLCONV opj_read_header ( opj_stream_t *p_stream, opj_codec_t *p_codec, opj_image_t **p_image ) { if (p_codec && p_stream) { opj_codec_private_t* l_codec = (opj_codec_private_t*) p_codec; opj_stream_private_t* l_stream = (opj_stream_private_t*) p_stream; if(! l_codec->is_decompressor) { opj_event_msg_v2(&(l_codec->m_event_mgr), EVT_ERROR, "Codec provided to the opj_read_header function is not a decompressor handler.\n"); return OPJ_FALSE; } return l_codec->m_codec_data.m_decompression.opj_read_header( l_stream, l_codec->m_codec, p_image, &(l_codec->m_event_mgr) ); } return OPJ_FALSE; }