OpenJPH
Open-source implementation of JPEG2000 Part-15
ojph_colour_local.h
Go to the documentation of this file.
1//***************************************************************************/
2// This software is released under the 2-Clause BSD license, included
3// below.
4//
5// Copyright (c) 2019, Aous Naman
6// Copyright (c) 2019, Kakadu Software Pty Ltd, Australia
7// Copyright (c) 2019, The University of New South Wales, Australia
8//
9// Redistribution and use in source and binary forms, with or without
10// modification, are permitted provided that the following conditions are
11// met:
12//
13// 1. Redistributions of source code must retain the above copyright
14// notice, this list of conditions and the following disclaimer.
15//
16// 2. Redistributions in binary form must reproduce the above copyright
17// notice, this list of conditions and the following disclaimer in the
18// documentation and/or other materials provided with the distribution.
19//
20// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
21// IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
22// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
23// PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24// HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
26// TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
27// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
28// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
29// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
30// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31//***************************************************************************/
32// This file is part of the OpenJPH software implementation.
33// File: ojph_colour_local.h
34// Author: Aous Naman
35// Date: 28 August 2019
36//***************************************************************************/
37
38
39#ifndef OJPH_COLOR_LOCAL_H
40#define OJPH_COLOR_LOCAL_H
41
42namespace ojph {
43 namespace local {
44
45 struct CT_CNST
46 {
47 // for irreversible color transform
48 static const float ALPHA_RF;
49 static const float ALPHA_GF;
50 static const float ALPHA_BF;
51 static const float BETA_CbF;
52 static const float BETA_CrF;
53 static const float GAMMA_CR2R;
54 static const float GAMMA_CB2B;
55 static const float GAMMA_CR2G;
56 static const float GAMMA_CB2G;
57 };
58
60 //
61 //
62 // Generic Functions
63 //
64 //
66
68 void gen_cnvrt_si32_to_si32_shftd(const si32 *sp, si32 *dp, int shift,
69 ui32 width);
70
72 void gen_cnvrt_si32_to_float_shftd(const si32 *sp, float *dp, float mul,
73 ui32 width);
74
76 void gen_cnvrt_si32_to_float(const si32 *sp, float *dp, float mul,
77 ui32 width);
78
80 void gen_cnvrt_float_to_si32_shftd(const float *sp, si32 *dp, float mul,
81 ui32 width);
82
84 void gen_cnvrt_float_to_si32(const float *sp, si32 *dp, float mul,
85 ui32 width);
86
88 void gen_rct_forward(const si32 *r, const si32 *g, const si32 *b,
89 si32 *y, si32 *cb, si32 *cr, ui32 repeat);
90
92 void gen_rct_backward(const si32 *y, const si32 *cb, const si32 *cr,
93 si32 *r, si32 *g, si32 *b, ui32 repeat);
94
96 void gen_ict_forward(const float *r, const float *g, const float *b,
97 float *y, float *cb, float *cr, ui32 repeat);
98
100 void gen_ict_backward(const float *y, const float *cb, const float *cr,
101 float *r, float *g, float *b, ui32 repeat);
102
104 //
105 //
106 // SSE Functions (float)
107 //
108 //
110
112 void sse_cnvrt_si32_to_float_shftd(const si32 *sp, float *dp, float mul,
113 ui32 width);
114
116 void sse_cnvrt_si32_to_float(const si32 *sp, float *dp, float mul,
117 ui32 width);
118
120 void sse_cnvrt_float_to_si32_shftd(const float *sp, si32 *dp, float mul,
121 ui32 width);
122
124 void sse_cnvrt_float_to_si32(const float *sp, si32 *dp, float mul,
125 ui32 width);
126
128 void sse_ict_forward(const float *r, const float *g, const float *b,
129 float *y, float *cb, float *cr, ui32 repeat);
130
132 void sse_ict_backward(const float *y, const float *cb, const float *cr,
133 float *r, float *g, float *b, ui32 repeat);
134
136 //
137 //
138 // SSE2 Functions (float)
139 //
140 //
142
144 void sse2_cnvrt_float_to_si32_shftd(const float *sp, si32 *dp, float mul,
145 ui32 width);
146
148 void sse2_cnvrt_float_to_si32(const float *sp, si32 *dp, float mul,
149 ui32 width);
150
152 //
153 //
154 // SSE2 Functions (integer)
155 //
156 //
158
160 void sse2_cnvrt_si32_to_si32_shftd(const si32 *sp, si32 *dp, int shift,
161 ui32 width);
162
164 void sse2_rct_forward(const si32 *r, const si32 *g, const si32 *b,
165 si32 *y, si32 *cb, si32 *cr, ui32 repeat);
166
168 void sse2_rct_backward(const si32 *y, const si32 *cb, const si32 *cr,
169 si32 *r, si32 *g, si32 *b, ui32 repeat);
170
172 //
173 //
174 // AVX Functions (float)
175 //
176 //
178
180 void avx_cnvrt_si32_to_float_shftd(const si32 *sp, float *dp, float mul,
181 ui32 width);
182
184 void avx_cnvrt_si32_to_float(const si32 *sp, float *dp, float mul,
185 ui32 width);
186
188 void avx_cnvrt_float_to_si32_shftd(const float *sp, si32 *dp, float mul,
189 ui32 width);
190
192 void avx_cnvrt_float_to_si32(const float *sp, si32 *dp, float mul,
193 ui32 width);
194
196 void avx_ict_forward(const float *r, const float *g, const float *b,
197 float *y, float *cb, float *cr, ui32 repeat);
198
200 void avx_ict_backward(const float *y, const float *cb, const float *cr,
201 float *r, float *g, float *b, ui32 repeat);
202
204 //
205 //
206 // AVX2 Functions (integer)
207 //
208 //
210
212 void avx2_cnvrt_si32_to_si32_shftd(const si32 *sp, si32 *dp, int shift,
213 ui32 width);
214
216 void avx2_rct_forward(const si32 *r, const si32 *g, const si32 *b,
217 si32 *y, si32 *cb, si32 *cr, ui32 repeat);
218
220 void avx2_rct_backward(const si32 *y, const si32 *cb, const si32 *cr,
221 si32 *r, si32 *g, si32 *b, ui32 repeat);
222
224 //
225 //
226 // WASM Functions
227 //
228 //
230
232 void wasm_cnvrt_si32_to_float_shftd(const si32 *sp, float *dp, float mul,
233 ui32 width);
234
236 void wasm_cnvrt_si32_to_float(const si32 *sp, float *dp, float mul,
237 ui32 width);
238
240 void wasm_cnvrt_float_to_si32_shftd(const float *sp, si32 *dp, float mul,
241 ui32 width);
242
244 void wasm_cnvrt_float_to_si32(const float *sp, si32 *dp, float mul,
245 ui32 width);
246
248 void wasm_cnvrt_si32_to_si32_shftd(const si32 *sp, si32 *dp, int shift,
249 ui32 width);
250
252 void wasm_rct_forward(const si32 *r, const si32 *g, const si32 *b,
253 si32 *y, si32 *cb, si32 *cr, ui32 repeat);
254
256 void wasm_rct_backward(const si32 *y, const si32 *cb, const si32 *cr,
257 si32 *r, si32 *g, si32 *b, ui32 repeat);
258
260 void wasm_ict_forward(const float *r, const float *g, const float *b,
261 float *y, float *cb, float *cr, ui32 repeat);
262
264 void wasm_ict_backward(const float *y, const float *cb, const float *cr,
265 float *r, float *g, float *b, ui32 repeat);
266
267 }
268}
269
270
271
272#endif // !OJPH_COLOR_LOCAL_H
void wasm_cnvrt_float_to_si32_shftd(const float *sp, si32 *dp, float mul, ui32 width)
void wasm_ict_backward(const float *y, const float *cb, const float *cr, float *r, float *g, float *b, ui32 repeat)
void avx2_rct_forward(const si32 *r, const si32 *g, const si32 *b, si32 *y, si32 *cb, si32 *cr, ui32 repeat)
void wasm_cnvrt_si32_to_float_shftd(const si32 *sp, float *dp, float mul, ui32 width)
void avx_cnvrt_float_to_si32(const float *sp, si32 *dp, float mul, ui32 width)
void avx_ict_forward(const float *r, const float *g, const float *b, float *y, float *cb, float *cr, ui32 repeat)
void avx_cnvrt_si32_to_float_shftd(const si32 *sp, float *dp, float mul, ui32 width)
void gen_rct_backward(const si32 *y, const si32 *cb, const si32 *cr, si32 *r, si32 *g, si32 *b, ui32 repeat)
void gen_cnvrt_si32_to_float(const si32 *sp, float *dp, float mul, ui32 width)
void avx2_rct_backward(const si32 *y, const si32 *cb, const si32 *cr, si32 *r, si32 *g, si32 *b, ui32 repeat)
void gen_ict_forward(const float *r, const float *g, const float *b, float *y, float *cb, float *cr, ui32 repeat)
void sse2_rct_forward(const si32 *r, const si32 *g, const si32 *b, si32 *y, si32 *cb, si32 *cr, ui32 repeat)
void sse_cnvrt_float_to_si32_shftd(const float *sp, si32 *dp, float mul, ui32 width)
void wasm_cnvrt_float_to_si32(const float *sp, si32 *dp, float mul, ui32 width)
void sse2_cnvrt_float_to_si32_shftd(const float *sp, si32 *dp, float mul, ui32 width)
void sse2_cnvrt_si32_to_si32_shftd(const si32 *sp, si32 *dp, int shift, ui32 width)
void gen_cnvrt_si32_to_si32_shftd(const si32 *sp, si32 *dp, int shift, ui32 width)
void sse_ict_forward(const float *r, const float *g, const float *b, float *y, float *cb, float *cr, ui32 repeat)
void avx_cnvrt_si32_to_float(const si32 *sp, float *dp, float mul, ui32 width)
void sse_cnvrt_si32_to_float_shftd(const si32 *sp, float *dp, float mul, ui32 width)
void wasm_ict_forward(const float *r, const float *g, const float *b, float *y, float *cb, float *cr, ui32 repeat)
void wasm_rct_forward(const si32 *r, const si32 *g, const si32 *b, si32 *y, si32 *cb, si32 *cr, ui32 repeat)
void gen_cnvrt_float_to_si32(const float *sp, si32 *dp, float mul, ui32 width)
void gen_ict_backward(const float *y, const float *cb, const float *cr, float *r, float *g, float *b, ui32 repeat)
void wasm_cnvrt_si32_to_si32_shftd(const si32 *sp, si32 *dp, int shift, ui32 width)
void sse2_rct_backward(const si32 *y, const si32 *cb, const si32 *cr, si32 *r, si32 *g, si32 *b, ui32 repeat)
void wasm_cnvrt_si32_to_float(const si32 *sp, float *dp, float mul, ui32 width)
void gen_cnvrt_float_to_si32_shftd(const float *sp, si32 *dp, float mul, ui32 width)
void wasm_rct_backward(const si32 *y, const si32 *cb, const si32 *cr, si32 *r, si32 *g, si32 *b, ui32 repeat)
void gen_rct_forward(const si32 *r, const si32 *g, const si32 *b, si32 *y, si32 *cb, si32 *cr, ui32 repeat)
void avx_cnvrt_float_to_si32_shftd(const float *sp, si32 *dp, float mul, ui32 width)
void avx_ict_backward(const float *y, const float *cb, const float *cr, float *r, float *g, float *b, ui32 repeat)
void sse2_cnvrt_float_to_si32(const float *sp, si32 *dp, float mul, ui32 width)
void sse_cnvrt_si32_to_float(const si32 *sp, float *dp, float mul, ui32 width)
void gen_cnvrt_si32_to_float_shftd(const si32 *sp, float *dp, float mul, ui32 width)
void avx2_cnvrt_si32_to_si32_shftd(const si32 *sp, si32 *dp, int shift, ui32 width)
void sse_ict_backward(const float *y, const float *cb, const float *cr, float *r, float *g, float *b, ui32 repeat)
void sse_cnvrt_float_to_si32(const float *sp, si32 *dp, float mul, ui32 width)
int32_t si32
Definition: ojph_defs.h:55
uint32_t ui32
Definition: ojph_defs.h:54
static const float GAMMA_CR2R
static const float BETA_CbF
static const float GAMMA_CB2B
static const float ALPHA_RF
static const float GAMMA_CB2G
static const float GAMMA_CR2G
static const float ALPHA_BF
static const float BETA_CrF
static const float ALPHA_GF