コード例 #1
0
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;
}
コード例 #2
0
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;
}
コード例 #3
0
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;
}
コード例 #4
0
ファイル: openjpeg.c プロジェクト: gaxuhongyu/hongyu
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;
}
コード例 #5
0
ファイル: openjpeg.c プロジェクト: gaxuhongyu/hongyu
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;
}