1/*
2 * The copyright in this software is being made available under the 2-clauses
3 * BSD License, included below. This software may be subject to other third
4 * party and contributor rights, including patent rights, and no such rights
5 * are granted under this license.
6 *
7 * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
8 * Copyright (c) 2002-2014, Professor Benoit Macq
9 * Copyright (c) 2001-2003, David Janssens
10 * Copyright (c) 2002-2003, Yannick Verschueren
11 * Copyright (c) 2003-2007, Francois-Olivier Devaux
12 * Copyright (c) 2003-2014, Antonin Descampe
13 * Copyright (c) 2005, Herve Drolon, FreeImage Team
14 * Copyright (c) 2008, 2011-2012, Centre National d'Etudes Spatiales (CNES), FR
15 * Copyright (c) 2012, CS Systemes d'Information, France
16 * All rights reserved.
17 *
18 * Redistribution and use in source and binary forms, with or without
19 * modification, are permitted provided that the following conditions
20 * are met:
21 * 1. Redistributions of source code must retain the above copyright
22 * notice, this list of conditions and the following disclaimer.
23 * 2. Redistributions in binary form must reproduce the above copyright
24 * notice, this list of conditions and the following disclaimer in the
25 * documentation and/or other materials provided with the distribution.
26 *
27 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
28 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
29 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
30 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
31 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
32 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
33 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
34 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
35 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
36 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
37 * POSSIBILITY OF SUCH DAMAGE.
38 */
39
40#ifndef OPJ_MCT_H
41#define OPJ_MCT_H
42/**
43@file mct.h
44@brief Implementation of a multi-component transforms (MCT)
45
46The functions in MCT.C have for goal to realize reversible and irreversible multicomponent
47transform. The functions in MCT.C are used by some function in TCD.C.
48*/
49
50/** @defgroup MCT MCT - Implementation of a multi-component transform */
51/*@{*/
52
53/** @name Exported functions */
54/*@{*/
55/* ----------------------------------------------------------------------- */
56/**
57Apply a reversible multi-component transform to an image
58@param c0 Samples for red component
59@param c1 Samples for green component
60@param c2 Samples blue component
61@param n Number of samples for each component
62*/
63void opj_mct_encode(OPJ_INT32* OPJ_RESTRICT c0, OPJ_INT32* OPJ_RESTRICT c1,
64 OPJ_INT32* OPJ_RESTRICT c2, OPJ_SIZE_T n);
65/**
66Apply a reversible multi-component inverse transform to an image
67@param c0 Samples for luminance component
68@param c1 Samples for red chrominance component
69@param c2 Samples for blue chrominance component
70@param n Number of samples for each component
71*/
72void opj_mct_decode(OPJ_INT32* OPJ_RESTRICT c0, OPJ_INT32* OPJ_RESTRICT c1,
73 OPJ_INT32* OPJ_RESTRICT c2, OPJ_SIZE_T n);
74/**
75Get norm of the basis function used for the reversible multi-component transform
76@param compno Number of the component (0->Y, 1->U, 2->V)
77@return
78*/
79OPJ_FLOAT64 opj_mct_getnorm(OPJ_UINT32 compno);
80
81/**
82Apply an irreversible multi-component transform to an image
83@param c0 Samples for red component
84@param c1 Samples for green component
85@param c2 Samples blue component
86@param n Number of samples for each component
87*/
88void opj_mct_encode_real(OPJ_INT32* OPJ_RESTRICT c0, OPJ_INT32* OPJ_RESTRICT c1,
89 OPJ_INT32* OPJ_RESTRICT c2, OPJ_SIZE_T n);
90/**
91Apply an irreversible multi-component inverse transform to an image
92@param c0 Samples for luminance component
93@param c1 Samples for red chrominance component
94@param c2 Samples for blue chrominance component
95@param n Number of samples for each component
96*/
97void opj_mct_decode_real(OPJ_FLOAT32* OPJ_RESTRICT c0,
98 OPJ_FLOAT32* OPJ_RESTRICT c1, OPJ_FLOAT32* OPJ_RESTRICT c2, OPJ_SIZE_T n);
99/**
100Get norm of the basis function used for the irreversible multi-component transform
101@param compno Number of the component (0->Y, 1->U, 2->V)
102@return
103*/
104OPJ_FLOAT64 opj_mct_getnorm_real(OPJ_UINT32 compno);
105
106/**
107FIXME DOC
108@param p_coding_data MCT data
109@param n size of components
110@param p_data components
111@param p_nb_comp nb of components (i.e. size of p_data)
112@param is_signed tells if the data is signed
113@return OPJ_FALSE if function encounter a problem, OPJ_TRUE otherwise
114*/
115OPJ_BOOL opj_mct_encode_custom(
116 OPJ_BYTE * p_coding_data,
117 OPJ_SIZE_T n,
118 OPJ_BYTE ** p_data,
119 OPJ_UINT32 p_nb_comp,
120 OPJ_UINT32 is_signed);
121/**
122FIXME DOC
123@param pDecodingData MCT data
124@param n size of components
125@param pData components
126@param pNbComp nb of components (i.e. size of p_data)
127@param isSigned tells if the data is signed
128@return OPJ_FALSE if function encounter a problem, OPJ_TRUE otherwise
129*/
130OPJ_BOOL opj_mct_decode_custom(
131 OPJ_BYTE * pDecodingData,
132 OPJ_SIZE_T n,
133 OPJ_BYTE ** pData,
134 OPJ_UINT32 pNbComp,
135 OPJ_UINT32 isSigned);
136/**
137FIXME DOC
138@param pNorms MCT data
139@param p_nb_comps size of components
140@param pMatrix components
141@return
142*/
143void opj_calculate_norms(OPJ_FLOAT64 * pNorms,
144 OPJ_UINT32 p_nb_comps,
145 OPJ_FLOAT32 * pMatrix);
146/**
147FIXME DOC
148*/
149const OPJ_FLOAT64 * opj_mct_get_mct_norms(void);
150/**
151FIXME DOC
152*/
153const OPJ_FLOAT64 * opj_mct_get_mct_norms_real(void);
154/* ----------------------------------------------------------------------- */
155/*@}*/
156
157/*@}*/
158
159#endif /* OPJ_MCT_H */
160