libardour added.
[ardour.git] / libs / ardour / ardour / mix.h
1 /*
2     Copyright (C) 2005 Sampo Savolainen
3
4     This program is free software; you can redistribute it and/or modify
5     it under the terms of the GNU General Public License as published by
6     the Free Software Foundation; either version 2 of the License, or
7     (at your option) any later version.
8
9     This program is distributed in the hope that it will be useful,
10     but WITHOUT ANY WARRANTY; without even the implied warranty of
11     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12     GNU General Public License for more details.
13
14     You should have received a copy of the GNU General Public License
15     along with this program; if not, write to the Free Software
16     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
17
18     $Id$
19 */
20 #ifndef __ardour_mix_h__
21 #define __ardour_mix_h__
22
23 #include <ardour/types.h>
24 #include <ardour/utils.h>
25 #include <ardour/io.h>
26
27 #if defined (ARCH_X86) && defined (BUILD_SSE_OPTIMIZATIONS)
28
29 extern "C" {
30 /* SSE functions */
31         float x86_sse_compute_peak                      (ARDOUR::Sample *buf, jack_nframes_t nsamples, float current);
32
33         void  x86_sse_apply_gain_to_buffer      (ARDOUR::Sample *buf, jack_nframes_t nframes, float gain);
34
35         void  x86_sse_mix_buffers_with_gain     (ARDOUR::Sample *dst, ARDOUR::Sample *src, jack_nframes_t nframes, float gain);
36
37         void  x86_sse_mix_buffers_no_gain       (ARDOUR::Sample *dst, ARDOUR::Sample *src, jack_nframes_t nframes);
38 }
39
40 /* debug wrappers for SSE functions */
41
42 float debug_compute_peak                        (ARDOUR::Sample *buf, jack_nframes_t nsamples, float current);
43
44 void  debug_apply_gain_to_buffer        (ARDOUR::Sample *buf, jack_nframes_t nframes, float gain);
45
46 void  debug_mix_buffers_with_gain       (ARDOUR::Sample *dst, ARDOUR::Sample *src, jack_nframes_t nframes, float gain);
47
48 void  debug_mix_buffers_no_gain         (ARDOUR::Sample *dst, ARDOUR::Sample *src, jack_nframes_t nframes);
49
50 #endif
51
52 #if defined (__APPLE__)
53
54 float veclib_compute_peak              (ARDOUR::Sample *buf, jack_nframes_t nsamples, float current);
55
56 void  veclib_apply_gain_to_buffer      (ARDOUR::Sample *buf, jack_nframes_t nframes, float gain);
57
58 void  veclib_mix_buffers_with_gain     (ARDOUR::Sample *dst, ARDOUR::Sample *src, jack_nframes_t nframes, float gain);
59
60 void  veclib_mix_buffers_no_gain       (ARDOUR::Sample *dst, ARDOUR::Sample *src, jack_nframes_t nframes);
61
62 #endif
63
64 /* non-optimized functions */
65
66 float compute_peak                      (ARDOUR::Sample *buf, jack_nframes_t nsamples, float current);
67
68 void  apply_gain_to_buffer      (ARDOUR::Sample *buf, jack_nframes_t nframes, float gain);
69
70 void  mix_buffers_with_gain     (ARDOUR::Sample *dst, ARDOUR::Sample *src, jack_nframes_t nframes, float gain);
71
72 void  mix_buffers_no_gain       (ARDOUR::Sample *dst, ARDOUR::Sample *src, jack_nframes_t nframes);
73
74 #endif /* __ardour_mix_h__ */