diff options
| author | Mathieu Malaterre <mathieu.malaterre@gmail.com> | 2012-09-28 08:51:14 +0000 |
|---|---|---|
| committer | Mathieu Malaterre <mathieu.malaterre@gmail.com> | 2012-09-28 08:51:14 +0000 |
| commit | f71af2a2ef70a58c10a247cb4693b3c335f674d5 (patch) | |
| tree | e6f15e77207accb7c1bb2e011c4d1f2c27e79f53 /src/lib/openmj2/mj2.h | |
| parent | 3e62f8d9b73f712f82e6d3d186f03a3e581bc465 (diff) | |
[trunk] FolderReorgProposal task: refactor MJ2
Update issue 177
Diffstat (limited to 'src/lib/openmj2/mj2.h')
| -rw-r--r-- | src/lib/openmj2/mj2.h | 393 |
1 files changed, 393 insertions, 0 deletions
diff --git a/src/lib/openmj2/mj2.h b/src/lib/openmj2/mj2.h new file mode 100644 index 00000000..c0255707 --- /dev/null +++ b/src/lib/openmj2/mj2.h @@ -0,0 +1,393 @@ +/* +* Copyright (c) 2003-2004, Francois-Olivier Devaux +* Copyright (c) 2003-2004, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium +* All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef __MJ2_H +#define __MJ2_H +/** +@file mj2.h +@brief The Motion JPEG 2000 file format Reader/Writer (MJ22) + +*/ + +/** @defgroup MJ2 MJ2 - Motion JPEG 2000 file format reader/writer */ +/*@{*/ + +#define MJ2_JP 0x6a502020 +#define MJ2_FTYP 0x66747970 +#define MJ2_MJ2 0x6d6a7032 +#define MJ2_MJ2S 0x6d6a3273 +#define MJ2_MDAT 0x6d646174 +#define MJ2_MOOV 0x6d6f6f76 +#define MJ2_MVHD 0x6d766864 +#define MJ2_TRAK 0x7472616b +#define MJ2_TKHD 0x746b6864 +#define MJ2_MDIA 0x6d646961 +#define MJ2_MDHD 0x6d646864 +#define MJ2_MHDR 0x6d686472 +#define MJ2_HDLR 0x68646C72 +#define MJ2_MINF 0x6d696e66 +#define MJ2_VMHD 0x766d6864 +#define MJ2_SMHD 0x736d6864 +#define MJ2_HMHD 0x686d6864 +#define MJ2_DINF 0x64696e66 +#define MJ2_DREF 0x64726566 +#define MJ2_URL 0x75726c20 +#define MJ2_URN 0x75726e20 +#define MJ2_STBL 0x7374626c +#define MJ2_STSD 0x73747364 +#define MJ2_STTS 0x73747473 +#define MJ2_STSC 0x73747363 +#define MJ2_STSZ 0x7374737a +#define MJ2_STCO 0x7374636f +#define MJ2_MOOF 0x6d6f6f66 +#define MJ2_FREE 0x66726565 +#define MJ2_SKIP 0x736b6970 +#define MJ2_JP2C 0x6a703263 +#define MJ2_FIEL 0x6669656c +#define MJ2_JP2P 0x6a703270 +#define MJ2_JP2X 0x6a703278 +#define MJ2_JSUB 0x6a737562 +#define MJ2_ORFO 0x6f72666f +#define MJ2_MVEX 0x6d766578 +#define MJ2_JP2 0x6a703220 +#define MJ2_J2P0 0x4a325030 + +/** +Decompressed format used in parameters +YUV = 0 +*/ +#define YUV_DFMT 1 + +/** +Compressed format used in parameters +MJ2 = 0 +*/ +#define MJ2_CFMT 2 + + +/* ----------------------------------------------------------------------- */ + +/** +Time To Sample +*/ +typedef struct mj2_tts { + int sample_count; + int sample_delta; +} mj2_tts_t; + +/** +Chunk +*/ +typedef struct mj2_chunk { + unsigned int num_samples; + int sample_descr_idx; + int offset; +} mj2_chunk_t; + +/** +Sample to chunk +*/ +typedef struct mj2_sampletochunk { + unsigned int first_chunk; + unsigned int samples_per_chunk; + int sample_descr_idx; +} mj2_sampletochunk_t; + +/** +Sample +*/ +typedef struct mj2_sample { + unsigned int sample_size; + unsigned int offset; + unsigned int sample_delta; +} mj2_sample_t; + +/** +URL +*/ +typedef struct mj2_url { + int location[4]; +} mj2_url_t; + +/** +URN +*/ +typedef struct mj2_urn { + int name[2]; + int location[4]; +} mj2_urn_t; + +/** +Video Track Parameters +*/ +typedef struct mj2_tk { + /** codec context */ + opj_common_ptr cinfo; + int track_ID; + int track_type; + unsigned int creation_time; + unsigned int modification_time; + int duration; + int timescale; + int layer; + int volume; + int language; + int balance; + int maxPDUsize; + int avgPDUsize; + int maxbitrate; + int avgbitrate; + int slidingavgbitrate; + int graphicsmode; + int opcolor[3]; + int num_url; + mj2_url_t *url; + int num_urn; + mj2_urn_t *urn; + int Dim[2]; + int w; + int h; + int visual_w; + int visual_h; + int CbCr_subsampling_dx; + int CbCr_subsampling_dy; + int sample_rate; + int sample_description; + int horizresolution; + int vertresolution; + int compressorname[8]; + int depth; + unsigned char fieldcount; + unsigned char fieldorder; + unsigned char or_fieldcount; + unsigned char or_fieldorder; + int num_br; + unsigned int *br; + unsigned char num_jp2x; + unsigned char *jp2xdata; + unsigned char hsub; + unsigned char vsub; + unsigned char hoff; + unsigned char voff; + int trans_matrix[9]; + /** Number of samples */ + unsigned int num_samples; + int transorm; + int handler_type; + int name_size; + unsigned char same_sample_size; + int num_tts; + /** Time to sample */ + mj2_tts_t *tts; + unsigned int num_chunks; + mj2_chunk_t *chunk; + unsigned int num_samplestochunk; + mj2_sampletochunk_t *sampletochunk; + char *name; + opj_jp2_t jp2_struct; + /** Sample parameters */ + mj2_sample_t *sample; +} mj2_tk_t; + +/** +MJ2 box +*/ +typedef struct mj2_box { + int length; + int type; + int init_pos; +} mj2_box_t; + +/** +MJ2 Movie +*/ +typedef struct opj_mj2 { + /** codec context */ + opj_common_ptr cinfo; + /** handle to the J2K codec */ + opj_j2k_t *j2k; + unsigned int brand; + unsigned int minversion; + int num_cl; + unsigned int *cl; + unsigned int creation_time; + unsigned int modification_time; + int timescale; + unsigned int duration; + int rate; + int num_vtk; + int num_stk; + int num_htk; + int volume; + int trans_matrix[9]; + int next_tk_id; + /** Track Parameters */ + mj2_tk_t *tk; +} opj_mj2_t; + +/** +Decompression parameters +*/ +typedef struct mj2_dparameters { + /**@name command line encoder parameters (not used inside the library) */ + /*@{*/ + /** input file name */ + char infile[OPJ_PATH_LEN]; + /** output file name */ + char outfile[OPJ_PATH_LEN]; + /** J2K decompression parameters */ + opj_dparameters_t j2k_parameters; +} mj2_dparameters_t; + +/** +Compression parameters +*/ +typedef struct mj2_cparameters { + /**@name command line encoder parameters (not used inside the library) */ + /*@{*/ + /** J2K compression parameters */ + opj_cparameters_t j2k_parameters; + /** input file name */ + char infile[OPJ_PATH_LEN]; + /** output file name */ + char outfile[OPJ_PATH_LEN]; + /** input file format 0:MJ2 */ + int decod_format; + /** output file format 0:YUV */ + int cod_format; + /** Portion of the image coded */ + int Dim[2]; + /** YUV Frame width */ + int w; + /** YUV Frame height */ + int h; + /* Sample rate of YUV 4:4:4, 4:2:2 or 4:2:0 */ + int CbCr_subsampling_dx; + /* Sample rate of YUV 4:4:4, 4:2:2 or 4:2:0 */ + int CbCr_subsampling_dy; + /* Video Frame Rate */ + int frame_rate; + /* In YUV files, numcomps always considered as 3 */ + int numcomps; + /* In YUV files, precision always considered as 8 */ + int prec; + unsigned int meth; + unsigned int enumcs; +} mj2_cparameters_t; + + +/** @name Exported functions */ +/*@{*/ +/* ----------------------------------------------------------------------- */ +/** +Write the JP box +*/ +void mj2_write_jp(opj_cio_t *cio); +/** +Write the FTYP box +@param movie MJ2 movie +@param cio Output buffer stream +*/ +void mj2_write_ftyp(opj_mj2_t *movie, opj_cio_t *cio); +/** +Creates an MJ2 decompression structure +@return Returns a handle to a MJ2 decompressor if successful, returns NULL otherwise +*/ +opj_dinfo_t* mj2_create_decompress(); +/** +Destroy a MJ2 decompressor handle +@param movie MJ2 decompressor handle to destroy +*/ +void mj2_destroy_decompress(opj_mj2_t *movie); +/** +Setup the decoder decoding parameters using user parameters. +Decoding parameters are returned in mj2->j2k->cp. +@param movie MJ2 decompressor handle +@param parameters decompression parameters +*/ +void mj2_setup_decoder(opj_mj2_t *movie, mj2_dparameters_t *mj2_parameters); +/** +Decode an image from a JPEG-2000 file stream +@param movie MJ2 decompressor handle +@param cio Input buffer stream +@return Returns a decoded image if successful, returns NULL otherwise +*/ +opj_image_t* mj2_decode(opj_mj2_t *movie, opj_cio_t *cio); +/** +Creates a MJ2 compression structure +@return Returns a handle to a MJ2 compressor if successful, returns NULL otherwise +*/ +opj_cinfo_t* mj2_create_compress(); +/** +Destroy a MJ2 compressor handle +@param movie MJ2 compressor handle to destroy +*/ +void mj2_destroy_compress(opj_mj2_t *movie); +/** +Setup the encoder parameters using the current image and using user parameters. +Coding parameters are returned in mj2->j2k->cp. +@param movie MJ2 compressor handle +@param parameters compression parameters +*/ +void mj2_setup_encoder(opj_mj2_t *movie, mj2_cparameters_t *parameters); +/** +Encode an image into a JPEG-2000 file stream +@param movie MJ2 compressor handle +@param cio Output buffer stream +@param image Image to encode +@param index Name of the index file if required, NULL otherwise +@return Returns true if successful, returns false otherwise +*/ +opj_bool mj2_encode(opj_mj2_t *movie, opj_cio_t *cio, opj_image_t *image, char *index); + +/** +Init a Standard MJ2 movie +@param movie MJ2 Movie +@return Returns 0 if successful, returns 1 otherwise +*/ +int mj2_init_stdmovie(opj_mj2_t *movie); +/** +Read the structure of an MJ2 file +@param File MJ2 input File +@param movie J2 movie structure +@return Returns 0 if successful, returns 1 otherwise +*/ +int mj2_read_struct(FILE *file, opj_mj2_t *mj2); +/** +Write the the MOOV box to an output buffer stream +@param movie MJ2 movie structure +@param cio Output buffer stream +*/ +void mj2_write_moov(opj_mj2_t *movie, opj_cio_t *cio); + + +/* ----------------------------------------------------------------------- */ +/*@}*/ + +/*@}*/ + +#endif /* __MJ2_H */ |
