OpenJPH
Open-source implementation of JPEG2000 Part-15
ojph_transform_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_transform_local.h
34// Author: Aous Naman
35// Date: 28 August 2019
36//***************************************************************************/
37
38
39#ifndef OJPH_TRANSFORM_LOCAL_H
40#define OJPH_TRANSFORM_LOCAL_H
41
42#include "ojph_defs.h"
43
44namespace ojph {
45 struct line_buf;
46 namespace local {
47
50 {
51 static const float steps[8];
52 static const float K;
53 static const float K_inv;
54 };
55
57 //
58 //
59 // Generic Functions
60 //
61 //
63
65 // Reversible functions
67
70 const line_buf* src2,
71 line_buf *dst, ui32 repeat);
72
75 const line_buf* src2,
76 line_buf *dst, ui32 repeat);
77
80 line_buf *hdst, ui32 width, bool even);
81
84 const line_buf* src2,
85 line_buf *dst, ui32 repeat);
86
89 const line_buf* src2,
90 line_buf *dst, ui32 repeat);
91
94 line_buf *hsrc, ui32 width, bool even);
95
97 // Irreversible functions
99
101 void gen_irrev_vert_wvlt_step(const line_buf* src1, const line_buf* src2,
102 line_buf *dst, int step_num, ui32 repeat);
103
105 void gen_irrev_vert_wvlt_K(const line_buf *src, line_buf *dst,
106 bool L_analysis_or_H_synthesis, ui32 repeat);
107
110 line_buf *hdst, ui32 width, bool even);
111
114 line_buf *hdst, ui32 width, bool even);
115
117 //
118 //
119 // SSE Functions (float)
120 //
121 //
123
125 // Irreversible functions
127
129 void sse_irrev_vert_wvlt_step(const line_buf* src1, const line_buf* src2,
130 line_buf *dst, int step_num, ui32 repeat);
131
133 void sse_irrev_vert_wvlt_K(const line_buf *src, line_buf *dst,
134 bool L_analysis_or_H_synthesis, ui32 repeat);
135
138 line_buf *hdst, ui32 width, bool even);
139
142 line_buf *hdst, ui32 width, bool even);
143
145 //
146 //
147 // SSE2 Functions (int)
148 //
149 //
151
153 // Reversible functions
155
158 const line_buf* src2,
159 line_buf *dst, ui32 repeat);
160
163 const line_buf* src2,
164 line_buf *dst, ui32 repeat);
165
168 line_buf *hdst, ui32 width, bool even);
169
172 const line_buf* src2,
173 line_buf *dst, ui32 repeat);
174
177 const line_buf* src2,
178 line_buf *dst, ui32 repeat);
179
182 line_buf *hsrc, ui32 width, bool even);
183
184
186 //
187 //
188 // AVX Functions (float)
189 //
190 //
192
194 // Irreversible functions
196
198 void avx_irrev_vert_wvlt_step(const line_buf* src1, const line_buf* src2,
199 line_buf *dst, int step_num, ui32 repeat);
200
202 void avx_irrev_vert_wvlt_K(const line_buf *src, line_buf *dst,
203 bool L_analysis_or_H_synthesis, ui32 repeat);
204
207 line_buf *hdst, ui32 width, bool even);
208
211 line_buf *hdst, ui32 width, bool even);
212
214 //
215 //
216 // AVX2 Functions (int)
217 //
218 //
220
222 // Reversible functions
224
227 const line_buf* src2,
228 line_buf *dst, ui32 repeat);
229
232 const line_buf* src2,
233 line_buf *dst, ui32 repeat);
234
237 line_buf *hdst, ui32 width, bool even);
238
241 const line_buf* src2,
242 line_buf *dst, ui32 repeat);
243
246 const line_buf* src2,
247 line_buf *dst, ui32 repeat);
248
251 line_buf *hsrc, ui32 width, bool even);
252
254 //
255 //
256 // WASM Functions
257 //
258 //
260
262 // Reversible functions
264
266 void wasm_rev_vert_wvlt_fwd_predict(const line_buf *line_src1,
267 const line_buf *line_src2,
268 line_buf *line_dst, ui32 repeat);
269
271 void wasm_rev_vert_wvlt_fwd_update(const line_buf *line_src1,
272 const line_buf *line_src2,
273 line_buf *line_dst, ui32 repeat);
274
276 void wasm_rev_horz_wvlt_fwd_tx(line_buf *line_src, line_buf *line_ldst,
277 line_buf *line_hdst, ui32 width, bool even);
278
280 void wasm_rev_vert_wvlt_bwd_predict(const line_buf *line_src1,
281 const line_buf *line_src2,
282 line_buf *line_dst, ui32 repeat);
283
285 void wasm_rev_vert_wvlt_bwd_update(const line_buf *line_src1,
286 const line_buf *line_src2,
287 line_buf *line_dst, ui32 repeat);
288
290 void wasm_rev_horz_wvlt_bwd_tx(line_buf *line_dst, line_buf *line_lsrc,
291 line_buf *line_hsrc, ui32 width, bool even);
292
294 // Irreversible functions
296
298 void wasm_irrev_vert_wvlt_step(const line_buf* line_src1,
299 const line_buf* line_src2,
300 line_buf *line_dst, int step_num,
301 ui32 repeat);
302
304 void wasm_irrev_vert_wvlt_K(const line_buf *line_src, line_buf *line_dst,
305 bool L_analysis_or_H_synthesis, ui32 repeat);
306
308 void wasm_irrev_horz_wvlt_fwd_tx(line_buf *line_src, line_buf *line_ldst,
309 line_buf *line_hdst, ui32 width,
310 bool even);
311
313 void wasm_irrev_horz_wvlt_bwd_tx(line_buf *line_src, line_buf *line_ldst,
314 line_buf *line_hdst, ui32 width,
315 bool even);
316 }
317}
318
319#endif // !OJPH_TRANSFORM_LOCAL_H
void wasm_rev_horz_wvlt_bwd_tx(line_buf *line_dst, line_buf *line_lsrc, line_buf *line_hsrc, ui32 width, bool even)
void avx2_rev_vert_wvlt_fwd_update(const line_buf *line_src1, const line_buf *line_src2, line_buf *line_dst, ui32 repeat)
void sse_irrev_horz_wvlt_bwd_tx(line_buf *src, line_buf *ldst, line_buf *hdst, ui32 width, bool even)
void gen_rev_vert_wvlt_bwd_update(const line_buf *line_src1, const line_buf *line_src2, line_buf *line_dst, ui32 repeat)
void gen_rev_vert_wvlt_fwd_predict(const line_buf *line_src1, const line_buf *line_src2, line_buf *line_dst, ui32 repeat)
void sse2_rev_horz_wvlt_fwd_tx(line_buf *src, line_buf *ldst, line_buf *hdst, ui32 width, bool even)
void avx_irrev_horz_wvlt_bwd_tx(line_buf *line_dst, line_buf *line_lsrc, line_buf *line_hsrc, ui32 width, bool even)
void avx2_rev_horz_wvlt_fwd_tx(line_buf *line_src, line_buf *line_ldst, line_buf *line_hdst, ui32 width, bool even)
void wasm_rev_vert_wvlt_fwd_update(const line_buf *line_src1, const line_buf *line_src2, line_buf *line_dst, ui32 repeat)
void wasm_rev_vert_wvlt_bwd_predict(const line_buf *line_src1, const line_buf *line_src2, line_buf *line_dst, ui32 repeat)
void gen_rev_horz_wvlt_bwd_tx(line_buf *line_dst, line_buf *line_lsrc, line_buf *line_hsrc, ui32 width, bool even)
void avx2_rev_vert_wvlt_fwd_predict(const line_buf *line_src1, const line_buf *line_src2, line_buf *line_dst, ui32 repeat)
void avx_irrev_horz_wvlt_fwd_tx(line_buf *line_src, line_buf *line_ldst, line_buf *line_hdst, ui32 width, bool even)
void wasm_irrev_horz_wvlt_bwd_tx(line_buf *line_src, line_buf *line_ldst, line_buf *line_hdst, ui32 width, bool even)
void sse2_rev_vert_wvlt_fwd_update(const line_buf *src1, const line_buf *src2, line_buf *dst, ui32 repeat)
void sse2_rev_horz_wvlt_bwd_tx(line_buf *dst, line_buf *lsrc, line_buf *hsrc, ui32 width, bool even)
void wasm_irrev_vert_wvlt_K(const line_buf *line_src, line_buf *line_dst, bool L_analysis_or_H_synthesis, ui32 repeat)
void gen_rev_vert_wvlt_fwd_update(const line_buf *line_src1, const line_buf *line_src2, line_buf *line_dst, ui32 repeat)
void avx_irrev_vert_wvlt_K(const line_buf *line_src, line_buf *line_dst, bool L_analysis_or_H_synthesis, ui32 repeat)
void avx2_rev_vert_wvlt_bwd_predict(const line_buf *line_src1, const line_buf *line_src2, line_buf *line_dst, ui32 repeat)
void avx_irrev_vert_wvlt_step(const line_buf *line_src1, const line_buf *line_src2, line_buf *line_dst, int step_num, ui32 repeat)
void sse_irrev_horz_wvlt_fwd_tx(line_buf *src, line_buf *ldst, line_buf *hdst, ui32 width, bool even)
void sse2_rev_vert_wvlt_bwd_predict(const line_buf *src1, const line_buf *src2, line_buf *dst, ui32 repeat)
void gen_rev_horz_wvlt_fwd_tx(line_buf *line_src, line_buf *line_ldst, line_buf *line_hdst, ui32 width, bool even)
void wasm_irrev_vert_wvlt_step(const line_buf *line_src1, const line_buf *line_src2, line_buf *line_dst, int step_num, ui32 repeat)
void gen_irrev_vert_wvlt_K(const line_buf *line_src, line_buf *line_dst, bool L_analysis_or_H_synthesis, ui32 repeat)
void gen_irrev_horz_wvlt_fwd_tx(line_buf *line_src, line_buf *line_ldst, line_buf *line_hdst, ui32 width, bool even)
void sse2_rev_vert_wvlt_fwd_predict(const line_buf *src1, const line_buf *src2, line_buf *dst, ui32 repeat)
void avx2_rev_horz_wvlt_bwd_tx(line_buf *line_dst, line_buf *line_lsrc, line_buf *line_hsrc, ui32 width, bool even)
void gen_irrev_horz_wvlt_bwd_tx(line_buf *line_dst, line_buf *line_lsrc, line_buf *line_hsrc, ui32 width, bool even)
void sse_irrev_vert_wvlt_K(const line_buf *src, line_buf *dst, bool L_analysis_or_H_synthesis, ui32 repeat)
void sse_irrev_vert_wvlt_step(const line_buf *src1, const line_buf *src2, line_buf *dst, int step_num, ui32 repeat)
void wasm_rev_horz_wvlt_fwd_tx(line_buf *line_src, line_buf *line_ldst, line_buf *line_hdst, ui32 width, bool even)
void wasm_irrev_horz_wvlt_fwd_tx(line_buf *line_src, line_buf *line_ldst, line_buf *line_hdst, ui32 width, bool even)
void wasm_rev_vert_wvlt_fwd_predict(const line_buf *line_src1, const line_buf *line_src2, line_buf *line_dst, ui32 repeat)
void gen_rev_vert_wvlt_bwd_predict(const line_buf *line_src1, const line_buf *line_src2, line_buf *line_dst, ui32 repeat)
void avx2_rev_vert_wvlt_bwd_update(const line_buf *line_src1, const line_buf *line_src2, line_buf *line_dst, ui32 repeat)
void gen_irrev_vert_wvlt_step(const line_buf *line_src1, const line_buf *line_src2, line_buf *line_dst, int step_num, ui32 repeat)
void sse2_rev_vert_wvlt_bwd_update(const line_buf *src1, const line_buf *src2, line_buf *dst, ui32 repeat)
void wasm_rev_vert_wvlt_bwd_update(const line_buf *line_src1, const line_buf *line_src2, line_buf *line_dst, ui32 repeat)
uint32_t ui32
Definition: ojph_defs.h:54