summaryrefslogtreecommitdiff
path: root/src/lib/openmj2/mj2.h
diff options
context:
space:
mode:
authorMathieu Malaterre <mathieu.malaterre@gmail.com>2012-09-28 08:51:14 +0000
committerMathieu Malaterre <mathieu.malaterre@gmail.com>2012-09-28 08:51:14 +0000
commitf71af2a2ef70a58c10a247cb4693b3c335f674d5 (patch)
treee6f15e77207accb7c1bb2e011c4d1f2c27e79f53 /src/lib/openmj2/mj2.h
parent3e62f8d9b73f712f82e6d3d186f03a3e581bc465 (diff)
[trunk] FolderReorgProposal task: refactor MJ2
Update issue 177
Diffstat (limited to 'src/lib/openmj2/mj2.h')
-rw-r--r--src/lib/openmj2/mj2.h393
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 */