blob: c92ae60235b90b22ef307dd70b2472cc7668a8aa [file] [log] [blame]
Pierre Ossman9ad52342009-03-09 13:15:56 +00001/*
2 * jsimd.c
3 *
4 * Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB
5 *
6 * Based on the x86 SIMD extension for IJG JPEG library,
7 * Copyright (C) 1999-2006, MIYASAKA Masaru.
8 *
9 * This file contains the interface between the "normal" portions
10 * of the library and the SIMD implementations.
11 */
12
13#define JPEG_INTERNALS
14#include "jinclude.h"
15#include "jpeglib.h"
Pierre Ossman82c7f312009-03-09 13:21:27 +000016#include "jsimd.h"
Pierre Ossman9ad52342009-03-09 13:15:56 +000017#include "jdct.h"
Pierre Ossman82c7f312009-03-09 13:21:27 +000018#include "jsimddct.h"
19#include "simd/jsimd.h"
Pierre Ossman9ad52342009-03-09 13:15:56 +000020
21static unsigned int simd_support = ~0;
22
23/*
24 * Check what SIMD accelerations are supported.
25 *
26 * FIXME: This code is racy under a multi-threaded environment.
27 */
28LOCAL(void)
29init_simd (void)
30{
31 if (simd_support != ~0)
32 return;
33
Pierre Ossman82c7f312009-03-09 13:21:27 +000034#ifdef WITH_SIMD
35 simd_support = jpeg_simd_cpu_support();
36#else
Pierre Ossman9ad52342009-03-09 13:15:56 +000037 simd_support = JSIMD_NONE;
Pierre Ossman82c7f312009-03-09 13:21:27 +000038#endif
Pierre Ossman9ad52342009-03-09 13:15:56 +000039}
40
41GLOBAL(int)
42jsimd_can_rgb_ycc (void)
43{
44 init_simd();
45
46 return 0;
47}
48
49GLOBAL(int)
50jsimd_can_ycc_rgb (void)
51{
52 init_simd();
53
54 return 0;
55}
56
57GLOBAL(void)
58jsimd_rgb_ycc_convert (j_compress_ptr cinfo,
59 JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
60 JDIMENSION output_row, int num_rows)
61{
62}
63
64GLOBAL(void)
65jsimd_ycc_rgb_convert (j_decompress_ptr cinfo,
66 JSAMPIMAGE input_buf, JDIMENSION input_row,
67 JSAMPARRAY output_buf, int num_rows)
68{
69}
70
71GLOBAL(int)
72jsimd_can_h2v2_downsample (void)
73{
74 init_simd();
75
76 return 0;
77}
78
79GLOBAL(int)
80jsimd_can_h2v1_downsample (void)
81{
82 init_simd();
83
84 return 0;
85}
86
87GLOBAL(void)
88jsimd_h2v2_downsample (j_compress_ptr cinfo, jpeg_component_info * compptr,
89 JSAMPARRAY input_data, JSAMPARRAY output_data)
90{
91}
92
93GLOBAL(void)
94jsimd_h2v1_downsample (j_compress_ptr cinfo, jpeg_component_info * compptr,
95 JSAMPARRAY input_data, JSAMPARRAY output_data)
96{
97}
98
99GLOBAL(int)
100jsimd_can_h2v2_upsample (void)
101{
102 init_simd();
103
104 return 0;
105}
106
107GLOBAL(int)
108jsimd_can_h2v1_upsample (void)
109{
110 init_simd();
111
112 return 0;
113}
114
115GLOBAL(void)
116jsimd_h2v2_upsample (j_decompress_ptr cinfo,
117 jpeg_component_info * compptr,
118 JSAMPARRAY input_data,
119 JSAMPARRAY * output_data_ptr)
120{
121}
122
123GLOBAL(void)
124jsimd_h2v1_upsample (j_decompress_ptr cinfo,
125 jpeg_component_info * compptr,
126 JSAMPARRAY input_data,
127 JSAMPARRAY * output_data_ptr)
128{
129}
130
131GLOBAL(int)
132jsimd_can_h2v2_fancy_upsample (void)
133{
134 init_simd();
135
136 return 0;
137}
138
139GLOBAL(int)
140jsimd_can_h2v1_fancy_upsample (void)
141{
142 init_simd();
143
144 return 0;
145}
146
147GLOBAL(void)
148jsimd_h2v2_fancy_upsample (j_decompress_ptr cinfo,
149 jpeg_component_info * compptr,
150 JSAMPARRAY input_data,
151 JSAMPARRAY * output_data_ptr)
152{
153}
154
155GLOBAL(void)
156jsimd_h2v1_fancy_upsample (j_decompress_ptr cinfo,
157 jpeg_component_info * compptr,
158 JSAMPARRAY input_data,
159 JSAMPARRAY * output_data_ptr)
160{
161}
162
163GLOBAL(int)
164jsimd_can_h2v2_merged_upsample (void)
165{
166 init_simd();
167
168 return 0;
169}
170
171GLOBAL(int)
172jsimd_can_h2v1_merged_upsample (void)
173{
174 init_simd();
175
176 return 0;
177}
178
179GLOBAL(void)
180jsimd_h2v2_merged_upsample (j_decompress_ptr cinfo,
181 JSAMPIMAGE input_buf,
182 JDIMENSION in_row_group_ctr,
183 JSAMPARRAY output_buf)
184{
185}
186
187GLOBAL(void)
188jsimd_h2v1_merged_upsample (j_decompress_ptr cinfo,
189 JSAMPIMAGE input_buf,
190 JDIMENSION in_row_group_ctr,
191 JSAMPARRAY output_buf)
192{
193}
194
195GLOBAL(int)
196jsimd_can_convsamp (void)
197{
198 init_simd();
199
200 return 0;
201}
202
203GLOBAL(int)
204jsimd_can_convsamp_float (void)
205{
206 init_simd();
207
208 return 0;
209}
210
211GLOBAL(void)
212jsimd_convsamp (JSAMPARRAY sample_data, JDIMENSION start_col,
213 DCTELEM * workspace)
214{
215}
216
217GLOBAL(void)
218jsimd_convsamp_float (JSAMPARRAY sample_data, JDIMENSION start_col,
219 FAST_FLOAT * workspace)
220{
221}
222
223GLOBAL(int)
224jsimd_can_fdct_islow (void)
225{
226 init_simd();
227
228 return 0;
229}
230
231GLOBAL(int)
232jsimd_can_fdct_ifast (void)
233{
234 init_simd();
235
236 return 0;
237}
238
239GLOBAL(int)
240jsimd_can_fdct_float (void)
241{
242 init_simd();
243
244 return 0;
245}
246
247GLOBAL(void)
248jsimd_fdct_islow (DCTELEM * data)
249{
250}
251
252GLOBAL(void)
253jsimd_fdct_ifast (DCTELEM * data)
254{
255}
256
257GLOBAL(void)
258jsimd_fdct_float (FAST_FLOAT * data)
259{
260}
261
262GLOBAL(int)
263jsimd_can_quantize (void)
264{
265 init_simd();
266
267 return 0;
268}
269
270GLOBAL(int)
271jsimd_can_quantize_float (void)
272{
273 init_simd();
274
275 return 0;
276}
277
278GLOBAL(void)
279jsimd_quantize (JCOEFPTR coef_block, DCTELEM * divisors,
280 DCTELEM * workspace)
281{
282}
283
284GLOBAL(void)
285jsimd_quantize_float (JCOEFPTR coef_block, FAST_FLOAT * divisors,
286 FAST_FLOAT * workspace)
287{
288}
289
290GLOBAL(int)
291jsimd_can_idct_2x2 (void)
292{
293 init_simd();
294
295 return 0;
296}
297
298GLOBAL(int)
299jsimd_can_idct_4x4 (void)
300{
301 init_simd();
302
303 return 0;
304}
305
306GLOBAL(void)
307jsimd_idct_2x2 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
308 JCOEFPTR coef_block, JSAMPARRAY output_buf,
309 JDIMENSION output_col)
310{
311}
312
313GLOBAL(void)
314jsimd_idct_4x4 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
315 JCOEFPTR coef_block, JSAMPARRAY output_buf,
316 JDIMENSION output_col)
317{
318}
319
320GLOBAL(int)
321jsimd_can_idct_islow (void)
322{
323 init_simd();
324
325 return 0;
326}
327
328GLOBAL(int)
329jsimd_can_idct_ifast (void)
330{
331 init_simd();
332
333 return 0;
334}
335
336GLOBAL(int)
337jsimd_can_idct_float (void)
338{
339 init_simd();
340
341 return 0;
342}
343
344GLOBAL(void)
345jsimd_idct_islow (j_decompress_ptr cinfo, jpeg_component_info * compptr,
346 JCOEFPTR coef_block, JSAMPARRAY output_buf,
347 JDIMENSION output_col)
348{
349}
350
351GLOBAL(void)
352jsimd_idct_ifast (j_decompress_ptr cinfo, jpeg_component_info * compptr,
353 JCOEFPTR coef_block, JSAMPARRAY output_buf,
354 JDIMENSION output_col)
355{
356}
357
358GLOBAL(void)
359jsimd_idct_float (j_decompress_ptr cinfo, jpeg_component_info * compptr,
360 JCOEFPTR coef_block, JSAMPARRAY output_buf,
361 JDIMENSION output_col)
362{
363}
364