source: roaraudio/roard/include/output.h @ 5192:4237437ca526

Last change on this file since 5192:4237437ca526 was 5192:4237437ca526, checked in by phi, 13 years ago

declare some stuff 'extern', this saves like 5.3KB of diskspace in plugin files and make them more resistant against changes in roard

File size: 3.5 KB
Line 
1//output.h:
2
3/*
4 *      Copyright (C) Philipp 'ph3-der-loewe' Schafft - 2008-2011
5 *
6 *  This file is part of roard a part of RoarAudio,
7 *  a cross-platform sound system for both, home and professional use.
8 *  See README for details.
9 *
10 *  This file is free software; you can redistribute it and/or modify
11 *  it under the terms of the GNU General Public License version 3
12 *  as published by the Free Software Foundation.
13 *
14 *  RoarAudio is distributed in the hope that it will be useful,
15 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
16 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 *  GNU General Public License for more details.
18 *
19 *  You should have received a copy of the GNU General Public License
20 *  along with this software; see the file COPYING.  If not, write to
21 *  the Free Software Foundation, 51 Franklin Street, Fifth Floor,
22 *  Boston, MA 02110-1301, USA.
23 *
24 */
25
26#ifndef _OUTPUT_H_
27#define _OUTPUT_H_
28
29#include <roaraudio.h>
30
31// NOTE: we do not set ROAR_OUTPUT_BUFFER_SAMPLES depending on DEBUG anymore
32//       as it caused a lot problems with partly enabled debugging
33
34#ifdef ROAR_OUTPUT_CFREQ
35#define ROAR_OUTPUT_BUFFER_SAMPLES (ROAR_RATE_DEFAULT/ROAR_OUTPUT_CFREQ)
36#else
37// in normal case we use 100 cycles per sec, as we do not know the sample
38// rate at compile time we guess it's normaly the default rate.
39// on OpenBSD we need to set a lower freq, use 20 cycles per sec here as
40// it seems to work.
41// FIXME: find out what the problem is and how to fix
42#ifdef ROAR_OS_OPENBSD
43#define ROAR_OUTPUT_BUFFER_SAMPLES (ROAR_RATE_DEFAULT/20)
44#define ROAR_OUTPUT_CFREQ          20
45#else
46#define ROAR_OUTPUT_BUFFER_SAMPLES (ROAR_RATE_DEFAULT/100)
47#define ROAR_OUTPUT_CFREQ          100
48#endif
49
50#endif
51
52#define ROAR_OUTPUT_WRITE_SIZE     1024
53
54//#define ROAR_OUTPUT_CALC_OUTBUFSIZE(x)   (ROAR_OUTPUT_BUFFER_SAMPLES * (x)->channels * ((x)->bits / 8) * ((float)(x)->rate/g_sa->rate))
55// First rounds the samples count, and makes sure that the outbuffer size is divisible by the framesize (channels * bits/8)
56#define ROAR_OUTPUT_CALC_OUTBUFSIZE(x)   ( \
57                                          ( \
58                                           (int)(ROAR_OUTPUT_BUFFER_SAMPLES * ((float)(x)->rate/g_sa->rate) + 0.5) \
59                                          ) * \
60                                          (x)->channels * ((x)->bits / 8) \
61                                         )
62
63#define ROAR_OUTPUT_CALC_OUTBUFSAMP(x,y) ((y) / ((x)->channels * ((x)->bits / 8)*((float)(x)->rate/g_sa->rate)))
64#define ROAR_OUTPUT_CALC_OUTBUFSIZE_MAX(x0,x1)  (ROAR_OUTPUT_BUFFER_SAMPLES                                  * \
65                                                  ROAR_MAX((x0)->channels,(x1)->channels)                    * \
66                                                 (ROAR_MAX((x0)->bits,    (x1)->bits    ) / 8)               * \
67                                                 (ROAR_MAX((float)(x0)->rate,(float)(x1)->rate)/g_sa->rate)    \
68                                                )
69
70extern void         * g_output_buffer;
71extern void         * g_input_buffer;
72extern size_t         g_output_buffer_len;
73#define        g_input_buffer_len g_output_buffer_len
74
75int output_buffer_init   (struct roar_audio_info * info);
76int output_buffer_reinit (void);
77int output_buffer_free   (void);
78
79int output_add         (char * drv, char * dev, char * opts, int prim, int count);
80int output_add_default (char * drv, char * dev, char * opts, int prim, int count);
81
82#endif
83
84//ll
Note: See TracBrowser for help on using the repository browser.