1f4381fddf152a63e1ac97185293c47ec0ac2f1a6Ted Kremenek/*
2f4381fddf152a63e1ac97185293c47ec0ac2f1a6Ted Kremenek    SDL - Simple DirectMedia Layer
3f4381fddf152a63e1ac97185293c47ec0ac2f1a6Ted Kremenek    Copyright (C) 1997-2012 Sam Lantinga
4f4381fddf152a63e1ac97185293c47ec0ac2f1a6Ted Kremenek
5f4381fddf152a63e1ac97185293c47ec0ac2f1a6Ted Kremenek    This library is free software; you can redistribute it and/or
6f4381fddf152a63e1ac97185293c47ec0ac2f1a6Ted Kremenek    modify it under the terms of the GNU Lesser General Public
7f4381fddf152a63e1ac97185293c47ec0ac2f1a6Ted Kremenek    License as published by the Free Software Foundation; either
8f4381fddf152a63e1ac97185293c47ec0ac2f1a6Ted Kremenek    version 2.1 of the License, or (at your option) any later version.
9f4381fddf152a63e1ac97185293c47ec0ac2f1a6Ted Kremenek
10f4381fddf152a63e1ac97185293c47ec0ac2f1a6Ted Kremenek    This library is distributed in the hope that it will be useful,
11f4381fddf152a63e1ac97185293c47ec0ac2f1a6Ted Kremenek    but WITHOUT ANY WARRANTY; without even the implied warranty of
12f4381fddf152a63e1ac97185293c47ec0ac2f1a6Ted Kremenek    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13f4381fddf152a63e1ac97185293c47ec0ac2f1a6Ted Kremenek    Lesser General Public License for more details.
14d95e0b830ed031f2ea0e15e3679cd51b9bf23a9cAnna Zaks
15d95e0b830ed031f2ea0e15e3679cd51b9bf23a9cAnna Zaks    You should have received a copy of the GNU Lesser General Public
16e6348c336fecc8da9288ea367375a1b1cd2358d2Argyrios Kyrtzidis    License along with this library; if not, write to the Free Software
17f4381fddf152a63e1ac97185293c47ec0ac2f1a6Ted Kremenek    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
18f4381fddf152a63e1ac97185293c47ec0ac2f1a6Ted Kremenek
19802be99a6817aba6edb166b93c133da4358aa783Zhongxing Xu    Stéphan Kochen
20f4381fddf152a63e1ac97185293c47ec0ac2f1a6Ted Kremenek    stephan@kochen.nl
21efceabd2380f49306bc0229583458e93b062094bDaniel Dunbar
22efceabd2380f49306bc0229583458e93b062094bDaniel Dunbar    Based on parts of the ALSA and ESounD output drivers.
23d95e0b830ed031f2ea0e15e3679cd51b9bf23a9cAnna Zaks*/
2427af04bcca46f8a3374586be1301477f9123f5e1Argyrios Kyrtzidis#include "SDL_config.h"
2543dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis
2621142581d55918beed544a757e4af3bb865b1812Ted Kremenek#ifndef _SDL_pulseaudio_h
279b663716449b618ba0390b1dbebc54fa8e971124Ted Kremenek#define _SDL_pulseaudio_h
289b663716449b618ba0390b1dbebc54fa8e971124Ted Kremenek
299b663716449b618ba0390b1dbebc54fa8e971124Ted Kremenek#include "../SDL_sysaudio.h"
309b663716449b618ba0390b1dbebc54fa8e971124Ted Kremenek
31f39d962cf84f46d2c0512157259ae1d41a1a5173David Blaikie/* Hidden "this" pointer for the video functions */
32a7af5ea88a6c5bdf87497cca6c20831e8c546751Argyrios Kyrtzidis#define _THIS	SDL_AudioDevice *this
33efceabd2380f49306bc0229583458e93b062094bDaniel Dunbar
34efceabd2380f49306bc0229583458e93b062094bDaniel Dunbarstruct SDL_PrivateAudioData {
359b414d3e2d0cb84512b55a3275a98490b090162aDaniel Dunbar	pa_mainloop *mainloop;
36efceabd2380f49306bc0229583458e93b062094bDaniel Dunbar	pa_mainloop_api *mainloop_api;
37f8ce6991f41d55b6e8526b7a7919771428e2b181Ted Kremenek	pa_context *context;
3803013fa9a0bf1ef4b907f5fec006c8f4000fdd21Michael J. Spencer	pa_stream *stream;
3903013fa9a0bf1ef4b907f5fec006c8f4000fdd21Michael J. Spencer
40d38f79543136ba68cd14b1dab0856474df1fbfd5Anna Zaks	char *caption;
41d95e0b830ed031f2ea0e15e3679cd51b9bf23a9cAnna Zaks
426cb7c1a43b0c8f739d1f54b7fdae5ede86033496Benjamin Kramer	/* Raw mixing buffer */
4381fb169f42769e02c7425b23885a261c025fd5e6Anna Zaks	Uint8 *mixbuf;
44db09a4dee28a4515438af60f2d2b4a83e4965c31Ted Kremenek	int    mixlen;
45f4381fddf152a63e1ac97185293c47ec0ac2f1a6Ted Kremenek};
469ef6537a894c33003359b1f9b9676e9178e028b7Ted Kremenek
47d95e0b830ed031f2ea0e15e3679cd51b9bf23a9cAnna Zaks#if (PA_API_VERSION < 12)
48f4381fddf152a63e1ac97185293c47ec0ac2f1a6Ted Kremenek/** Return non-zero if the passed state is one of the connected states */
49c5619d901a68dc27a9e310a6a831f03efebcd950Zhongxing Xustatic inline int PA_CONTEXT_IS_GOOD(pa_context_state_t x) {
50ff944a8c481d6c0f1ad2633e4be9bf8b1dd2a09fZhongxing Xu    return
513fd5f370a28552976c52e76c3035d79012d78ddaAnna Zaks        x == PA_CONTEXT_CONNECTING ||
52d95e0b830ed031f2ea0e15e3679cd51b9bf23a9cAnna Zaks        x == PA_CONTEXT_AUTHORIZING ||
53d95e0b830ed031f2ea0e15e3679cd51b9bf23a9cAnna Zaks        x == PA_CONTEXT_SETTING_NAME ||
54be1fe1eb12a1cb91c8e3a9fcc2db4dfe989def6cTed Kremenek        x == PA_CONTEXT_READY;
55f39d962cf84f46d2c0512157259ae1d41a1a5173David Blaikie}
56f75560670bcdd59b051149bdece3eac14e313853Ted Kremenek/** Return non-zero if the passed state is one of the connected states */
57f75560670bcdd59b051149bdece3eac14e313853Ted Kremenekstatic inline int PA_STREAM_IS_GOOD(pa_stream_state_t x) {
58ef3643fbbbf66247c5e205497fae0f46e240c143David Blaikie    return
59ef3643fbbbf66247c5e205497fae0f46e240c143David Blaikie        x == PA_STREAM_CREATING ||
60efceabd2380f49306bc0229583458e93b062094bDaniel Dunbar        x == PA_STREAM_READY;
61ef3643fbbbf66247c5e205497fae0f46e240c143David Blaikie}
62ef3643fbbbf66247c5e205497fae0f46e240c143David Blaikie#endif	/* pulseaudio <= 0.9.10 */
63ef3643fbbbf66247c5e205497fae0f46e240c143David Blaikie
64f75560670bcdd59b051149bdece3eac14e313853Ted Kremenek/* Old variable names */
65f75560670bcdd59b051149bdece3eac14e313853Ted Kremenek#define mainloop		(this->hidden->mainloop)
66f75560670bcdd59b051149bdece3eac14e313853Ted Kremenek#define mainloop_api		(this->hidden->mainloop_api)
67f4381fddf152a63e1ac97185293c47ec0ac2f1a6Ted Kremenek#define context			(this->hidden->context)
68f4381fddf152a63e1ac97185293c47ec0ac2f1a6Ted Kremenek#define stream			(this->hidden->stream)
69f4381fddf152a63e1ac97185293c47ec0ac2f1a6Ted Kremenek#define mixbuf			(this->hidden->mixbuf)
70f4381fddf152a63e1ac97185293c47ec0ac2f1a6Ted Kremenek#define mixlen			(this->hidden->mixlen)
71f4381fddf152a63e1ac97185293c47ec0ac2f1a6Ted Kremenek
72ed8afacb8118b71bcfa8017059e51da325e7691bZhongxing Xu#endif /* _SDL_pulseaudio_h */
73ed8afacb8118b71bcfa8017059e51da325e7691bZhongxing Xu
749c378f705405d37f49795d5e915989de774fe11fTed Kremenek