summaryrefslogtreecommitdiff
path: root/libopenjpeg/jp2.h
diff options
context:
space:
mode:
authorAntonin Descampe <antonin@gmail.com>2008-07-31 18:47:41 +0000
committerAntonin Descampe <antonin@gmail.com>2008-07-31 18:47:41 +0000
commit7caaea18b728ead4e45226aafc09dba01e514a2d (patch)
tree1d5d19df20b82cee63a7de94fc8e04e8426cb7c7 /libopenjpeg/jp2.h
parent8407e057c9e10c8fc2b5f4be56e603fae3f9063d (diff)
Deleting obsolete files and directories, adding v2-specific files and directories, updating existing files to v2. See README.v2 for more info
Diffstat (limited to 'libopenjpeg/jp2.h')
-rw-r--r--libopenjpeg/jp2.h273
1 files changed, 219 insertions, 54 deletions
diff --git a/libopenjpeg/jp2.h b/libopenjpeg/jp2.h
index 7e363be2..e98cde39 100644
--- a/libopenjpeg/jp2.h
+++ b/libopenjpeg/jp2.h
@@ -3,6 +3,7 @@
* Copyright (c) 2002-2007, Professor Benoit Macq
* Copyright (c) 2002-2003, Yannick Verschueren
* Copyright (c) 2005, Herve Drolon, FreeImage Team
+ * Copyright (c) 2008, Jerome Fimes, Communications & Systemes <jerome.fimes@c-s.fr>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -33,6 +34,20 @@
@brief The JPEG-2000 file format Reader/Writer (JP2)
*/
+#include "openjpeg.h"
+
+
+
+
+/**********************************************************************************
+ ********************************* FORWARD DECLARATIONS ***************************
+ **********************************************************************************/
+struct opj_j2k;
+struct opj_procedure_list;
+struct opj_event_mgr;
+struct opj_stream_private;
+struct opj_dparameters;
+struct opj_cparameters;
/** @defgroup JP2 JP2 - JPEG-2000 file format reader/writer */
/*@{*/
@@ -52,25 +67,54 @@
/* ----------------------------------------------------------------------- */
+
+typedef enum
+{
+ JP2_STATE_NONE = 0x0,
+ JP2_STATE_SIGNATURE = 0x1,
+ JP2_STATE_FILE_TYPE = 0x2,
+ JP2_STATE_HEADER = 0x4,
+ JP2_STATE_CODESTREAM = 0x8,
+ JP2_STATE_END_CODESTREAM = 0x10,
+ JP2_STATE_UNKNOWN = 0x80000000
+}
+JP2_STATE;
+
+typedef enum
+{
+ JP2_IMG_STATE_NONE = 0x0,
+ JP2_IMG_STATE_UNKNOWN = 0x80000000
+}
+JP2_IMG_STATE;
+
/**
JP2 component
*/
-typedef struct opj_jp2_comps {
- int depth;
+typedef struct opj_jp2_comps
+{
+ unsigned int depth;
int sgnd;
- int bpcc;
-} opj_jp2_comps_t;
+ unsigned int bpcc;
+}
+opj_jp2_comps_t;
/**
JPEG-2000 file format reader/writer
*/
-typedef struct opj_jp2 {
- /** codec context */
- opj_common_ptr cinfo;
+typedef struct opj_jp2
+{
/** handle to the J2K codec */
- opj_j2k_t *j2k;
+ struct opj_j2k *j2k;
+ /** list of validation procedures */
+ struct opj_procedure_list * m_validation_list;
+ /** list of execution procedures */
+ struct opj_procedure_list * m_procedure_list;
+
+ /* width of image */
unsigned int w;
+ /* height of image */
unsigned int h;
+ /* number of components in the image */
unsigned int numcomps;
unsigned int bpc;
unsigned int C;
@@ -86,71 +130,80 @@ typedef struct opj_jp2 {
unsigned int *cl;
opj_jp2_comps_t *comps;
unsigned int j2k_codestream_offset;
- unsigned int j2k_codestream_length;
-} opj_jp2_t;
+ unsigned int jp2_state;
+ unsigned int jp2_img_state;
+
+}
+opj_jp2_t;
/**
JP2 Box
*/
-typedef struct opj_jp2_box {
- int length;
- int type;
- int init_pos;
-} opj_jp2_box_t;
+typedef struct opj_jp2_box
+{
+ unsigned int length;
+ unsigned int type;
+}
+opj_jp2_box_t;
+
+typedef struct opj_jp2_header_handler
+{
+ /* marker value */
+ int id;
+ /* action linked to the marker */
+ bool (*handler) (opj_jp2_t *jp2,unsigned char * p_header_data, unsigned int p_header_size,struct opj_event_mgr * p_manager);
+}
+opj_jp2_header_handler_t;
+
+
+typedef struct opj_jp2_img_header_writer_handler
+{
+ /* action to perform */
+ unsigned char* (*handler) (opj_jp2_t *jp2, unsigned int * p_data_size);
+ /* result of the action : data */
+ unsigned char * m_data;
+ /* size of data */
+ unsigned int m_size;
+}
+opj_jp2_img_header_writer_handler_t;
+
+
+
+
/** @name Exported functions */
/*@{*/
/* ----------------------------------------------------------------------- */
+
/**
-Write the JP2H box - JP2 Header box (used in MJ2)
-@param jp2 JP2 handle
-@param cio Output buffer stream
-*/
-void jp2_write_jp2h(opj_jp2_t *jp2, opj_cio_t *cio);
-/**
-Read the JP2H box - JP2 Header box (used in MJ2)
-@param jp2 JP2 handle
-@param cio Input buffer stream
-@return Returns true if successful, returns false otherwise
-*/
-bool jp2_read_jp2h(opj_jp2_t *jp2, opj_cio_t *cio);
-/**
-Creates a JP2 decompression structure
-@param cinfo Codec context info
-@return Returns a handle to a JP2 decompressor if successful, returns NULL otherwise
-*/
-opj_jp2_t* jp2_create_decompress(opj_common_ptr cinfo);
+ * Creates a jpeg2000 file decompressor.
+ *
+ * @return an empty jpeg2000 file codec.
+ */
+opj_jp2_t* jp2_create (bool p_is_decoder);
+
/**
Destroy a JP2 decompressor handle
@param jp2 JP2 decompressor handle to destroy
*/
-void jp2_destroy_decompress(opj_jp2_t *jp2);
+void jp2_destroy(opj_jp2_t *jp2);
+
/**
Setup the decoder decoding parameters using user parameters.
Decoding parameters are returned in jp2->j2k->cp.
@param jp2 JP2 decompressor handle
@param parameters decompression parameters
*/
-void jp2_setup_decoder(opj_jp2_t *jp2, opj_dparameters_t *parameters);
-/**
-Decode an image from a JPEG-2000 file stream
-@param jp2 JP2 decompressor handle
-@param cio Input buffer stream
-@param cstr_info Codestream information structure if required, NULL otherwise
-@return Returns a decoded image if successful, returns NULL otherwise
-*/
-opj_image_t* jp2_decode(opj_jp2_t *jp2, opj_cio_t *cio, opj_codestream_info_t *cstr_info);
-/**
-Creates a JP2 compression structure
-@param cinfo Codec context info
-@return Returns a handle to a JP2 compressor if successful, returns NULL otherwise
-*/
-opj_jp2_t* jp2_create_compress(opj_common_ptr cinfo);
+void jp2_setup_decoder(opj_jp2_t *jp2, struct opj_dparameters *parameters);
+
/**
-Destroy a JP2 compressor handle
-@param jp2 JP2 compressor handle to destroy
+ * Decode an image from a JPEG-2000 file stream
+ * @param jp2 JP2 decompressor handle
+ * @param cio Input buffer stream
+ * @param cstr_info Codestream information structure if required, NULL otherwise
+ * @return Returns a decoded image if successful, returns NULL otherwise
*/
-void jp2_destroy_compress(opj_jp2_t *jp2);
+struct opj_image* jp2_decode(opj_jp2_t *jp2, struct opj_stream_private *cio, struct opj_event_mgr * p_manager);
/**
Setup the encoder parameters using the current image and using user parameters.
Coding parameters are returned in jp2->j2k->cp.
@@ -158,7 +211,24 @@ Coding parameters are returned in jp2->j2k->cp.
@param parameters compression parameters
@param image input filled image
*/
-void jp2_setup_encoder(opj_jp2_t *jp2, opj_cparameters_t *parameters, opj_image_t *image);
+void jp2_setup_encoder(opj_jp2_t *jp2, struct opj_cparameters *parameters, struct opj_image *image,struct opj_event_mgr * p_manager);
+
+/**
+ * Starts a compression scheme, i.e. validates the codec parameters, writes the header.
+ *
+ * @param jp2 the jpeg2000 file codec.
+ * @param cio the stream object.
+ *
+ * @return true if the codec is valid.
+ */
+bool jp2_start_compress(opj_jp2_t *jp2, struct opj_stream_private *cio,struct opj_image * p_image,struct opj_event_mgr * p_manager);
+
+/**
+ * Ends the compression procedures and possibiliy add data to be read after the
+ * codestream.
+ */
+bool jp2_end_compress(opj_jp2_t *jp2, struct opj_stream_private *cio, struct opj_event_mgr * p_manager);
+
/**
Encode an image into a JPEG-2000 file stream
@param jp2 JP2 compressor handle
@@ -167,7 +237,102 @@ Encode an image into a JPEG-2000 file stream
@param cstr_info Codestream information structure if required, NULL otherwise
@return Returns true if successful, returns false otherwise
*/
-bool jp2_encode(opj_jp2_t *jp2, opj_cio_t *cio, opj_image_t *image, opj_codestream_info_t *cstr_info);
+bool jp2_encode(opj_jp2_t *jp2, struct opj_stream_private *cio, struct opj_event_mgr * p_manager);
+
+/**
+ * Reads a jpeg2000 file header structure.
+ *
+ * @param cio the stream to read data from.
+ * @param jp2 the jpeg2000 file header structure.
+ * @param p_manager the user event manager.
+ *
+ * @return true if the box is valid.
+ */
+bool jp2_read_header(
+ opj_jp2_t *jp2,
+ struct opj_image ** p_image,
+ OPJ_INT32 * p_tile_x0,
+ OPJ_INT32 * p_tile_y0,
+ OPJ_UINT32 * p_tile_width,
+ OPJ_UINT32 * p_tile_height,
+ OPJ_UINT32 * p_nb_tiles_x,
+ OPJ_UINT32 * p_nb_tiles_y,
+ struct opj_stream_private *cio,
+ struct opj_event_mgr * p_manager
+ );
+/**
+ * Ends the decompression procedures and possibiliy add data to be read after the
+ * codestream.
+ */
+bool jp2_end_decompress(opj_jp2_t *jp2, struct opj_stream_private *cio, struct opj_event_mgr * p_manager);
+
+/**
+ * Writes a tile.
+ * @param p_j2k the jpeg2000 codec.
+ * @param p_stream the stream to write data to.
+ * @param p_manager the user event manager.
+ */
+bool jp2_write_tile (
+ opj_jp2_t *p_jp2,
+ OPJ_UINT32 p_tile_index,
+ OPJ_BYTE * p_data,
+ OPJ_UINT32 p_data_size,
+ struct opj_stream_private *p_stream,
+ struct opj_event_mgr * p_manager
+ );
+/**
+ * Decode tile data.
+ * @param p_j2k the jpeg2000 codec.
+ * @param p_stream the stream to write data to.
+ * @param p_manager the user event manager.
+ */
+bool jp2_decode_tile (
+ opj_jp2_t * p_jp2,
+ OPJ_UINT32 p_tile_index,
+ OPJ_BYTE * p_data,
+ OPJ_UINT32 p_data_size,
+ struct opj_stream_private *p_stream,
+ struct opj_event_mgr * p_manager
+ );
+/**
+ * Reads a tile header.
+ * @param p_j2k the jpeg2000 codec.
+ * @param p_stream the stream to write data to.
+ * @param p_manager the user event manager.
+ */
+bool jp2_read_tile_header (
+ opj_jp2_t * p_j2k,
+ OPJ_UINT32 * p_tile_index,
+ OPJ_UINT32 * p_data_size,
+ OPJ_INT32 * p_tile_x0,
+ OPJ_INT32 * p_tile_y0,
+ OPJ_INT32 * p_tile_x1,
+ OPJ_INT32 * p_tile_y1,
+ OPJ_UINT32 * p_nb_comps,
+ bool * p_go_on,
+ struct opj_stream_private *p_stream,
+ struct opj_event_mgr * p_manager
+ );
+/**
+ * Sets the given area to be decoded. This function should be called right after opj_read_header and before any tile header reading.
+ *
+ * @param p_jp2 the jpeg2000 codec.
+ * @param p_end_x the right position of the rectangle to decode (in image coordinates).
+ * @param p_start_y the up position of the rectangle to decode (in image coordinates).
+ * @param p_end_y the bottom position of the rectangle to decode (in image coordinates).
+ * @param p_manager the user event manager
+ *
+ * @return true if the area could be set.
+ */
+bool jp2_set_decode_area(
+ opj_jp2_t *p_jp2,
+ OPJ_INT32 p_start_x,
+ OPJ_INT32 p_start_y,
+ OPJ_INT32 p_end_x,
+ OPJ_INT32 p_end_y,
+ struct opj_event_mgr * p_manager
+ );
+
/* ----------------------------------------------------------------------- */
/*@}*/