Partially sync files.el from XEmacs 21.5 for wildcard support.
[sxemacs] / src / media / sound-jack.h
1 /* sound-jack.h - play a sound over the Jackaudio Server
2
3    Copyright (C) 2006 Sebastian Freundt
4
5 This file is part of SXEmacs
6
7 SXEmacs is free software: you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation, either version 3 of the License, or
10 (at your option) any later version.
11
12 SXEmacs is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program.  If not, see <http://www.gnu.org/licenses/>. */
19
20
21 /* Synched up with: Not in FSF. */
22
23 #ifndef INCLUDED_sound_jack_h_
24 #define INCLUDED_sound_jack_h_
25
26 #include "sound.h"
27 #include "semaphore.h"
28 #include <jack/jack.h>
29
30 #define MAX_CHANS 6
31
32 typedef struct sound_jack_data_s sound_jack_data_t;
33 typedef struct sound_jack_aj_data_s sound_jack_aj_data_t;
34 typedef size_t(*sound_jack_demux_fun)(float*, char*, size_t, int,
35                                       sound_jack_aj_data_t*);
36
37 struct sound_jack_data_s {
38         Lisp_Object options;
39         Lisp_Object server;
40         Lisp_Object client;
41         int num_ports;
42 };
43
44 struct sound_jack_aj_data_s {
45         jack_client_t *client;
46         jack_port_t *ports[MAX_CHANS];
47         const char **port_ptrs;
48         int num_ports;
49         int channels;
50         int underrun;
51         int paused;
52         int volume;
53         float fvol;
54         float ratetrafo;
55         /* thread management */
56         struct sxe_semaphore_s sem;
57         /* buffer management */
58         size_t overfill;        /* in frames */
59         size_t ringbufcnt;
60         size_t readpos;
61         size_t writepos;
62         sound_jack_demux_fun demux_fun;
63         /* stream props */
64         size_t framesize;
65         size_t samplerate;
66 };
67
68 extern Lisp_Object Qjack;               /* initialised in sound.c */
69
70 #define DEVICE_CONNECTED_TO_JACK_P(x) 1 /* FIXME: better check */
71
72 DECLARE_AUDIO_DEVICE(sound_jack);
73
74 #ifdef ALL_DEBUG_FLAGS
75 #undef JACK_DEBUG_FLAG
76 #define JACK_DEBUG_FLAG
77 #endif
78
79 #endif  /* INCLUDED_sound_jack_h_ */