2004-07-16 17:03:11 +00:00
|
|
|
#ifndef fooalsautilhfoo
|
|
|
|
|
#define fooalsautilhfoo
|
|
|
|
|
|
2004-07-16 19:56:36 +00:00
|
|
|
/***
|
2006-06-19 21:53:48 +00:00
|
|
|
This file is part of PulseAudio.
|
2007-01-04 13:43:45 +00:00
|
|
|
|
2007-02-13 15:35:19 +00:00
|
|
|
Copyright 2004-2006 Lennart Poettering
|
|
|
|
|
Copyright 2006 Pierre Ossman <ossman@cendio.se> for Cendio AB
|
|
|
|
|
|
2006-06-19 21:53:48 +00:00
|
|
|
PulseAudio is free software; you can redistribute it and/or modify
|
2004-11-14 14:58:54 +00:00
|
|
|
it under the terms of the GNU Lesser General Public License as published
|
2009-03-03 20:23:02 +00:00
|
|
|
by the Free Software Foundation; either version 2.1 of the License,
|
2004-07-16 19:56:36 +00:00
|
|
|
or (at your option) any later version.
|
2007-01-04 13:43:45 +00:00
|
|
|
|
2006-06-19 21:53:48 +00:00
|
|
|
PulseAudio is distributed in the hope that it will be useful, but
|
2004-07-16 19:56:36 +00:00
|
|
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
|
General Public License for more details.
|
2007-01-04 13:43:45 +00:00
|
|
|
|
2004-11-14 14:58:54 +00:00
|
|
|
You should have received a copy of the GNU Lesser General Public License
|
2006-06-19 21:53:48 +00:00
|
|
|
along with PulseAudio; if not, write to the Free Software
|
2004-07-16 19:56:36 +00:00
|
|
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
|
|
|
|
|
USA.
|
|
|
|
|
***/
|
|
|
|
|
|
2004-07-16 17:03:11 +00:00
|
|
|
#include <asoundlib.h>
|
|
|
|
|
|
2006-06-19 21:53:48 +00:00
|
|
|
#include <pulse/sample.h>
|
2008-08-13 13:54:17 +02:00
|
|
|
#include <pulse/volume.h>
|
2006-06-19 21:53:48 +00:00
|
|
|
#include <pulse/mainloop-api.h>
|
|
|
|
|
#include <pulse/channelmap.h>
|
2008-05-15 23:34:41 +00:00
|
|
|
#include <pulse/proplist.h>
|
|
|
|
|
|
|
|
|
|
#include <pulsecore/rtpoll.h>
|
2009-01-24 01:25:11 +01:00
|
|
|
#include <pulsecore/core.h>
|
2006-05-13 20:29:32 +00:00
|
|
|
|
2007-10-28 19:13:50 +00:00
|
|
|
typedef struct pa_alsa_fdlist pa_alsa_fdlist;
|
2006-02-26 19:09:26 +00:00
|
|
|
|
|
|
|
|
struct pa_alsa_fdlist *pa_alsa_fdlist_new(void);
|
|
|
|
|
void pa_alsa_fdlist_free(struct pa_alsa_fdlist *fdl);
|
2007-10-28 19:13:50 +00:00
|
|
|
int pa_alsa_fdlist_set_mixer(struct pa_alsa_fdlist *fdl, snd_mixer_t *mixer_handle, pa_mainloop_api* m);
|
2004-07-16 17:03:11 +00:00
|
|
|
|
2007-11-13 17:37:44 +00:00
|
|
|
int pa_alsa_set_hw_params(
|
|
|
|
|
snd_pcm_t *pcm_handle,
|
|
|
|
|
pa_sample_spec *ss,
|
|
|
|
|
uint32_t *periods,
|
|
|
|
|
snd_pcm_uframes_t *period_size,
|
2008-05-15 23:34:41 +00:00
|
|
|
snd_pcm_uframes_t tsched_size,
|
2007-11-13 17:37:44 +00:00
|
|
|
pa_bool_t *use_mmap,
|
2008-05-15 23:34:41 +00:00
|
|
|
pa_bool_t *use_tsched,
|
2007-11-13 17:37:44 +00:00
|
|
|
pa_bool_t require_exact_channel_number);
|
|
|
|
|
|
2008-05-15 23:34:41 +00:00
|
|
|
int pa_alsa_set_sw_params(snd_pcm_t *pcm, snd_pcm_uframes_t avail_min);
|
2004-07-16 17:03:11 +00:00
|
|
|
|
2006-02-26 17:57:58 +00:00
|
|
|
int pa_alsa_prepare_mixer(snd_mixer_t *mixer, const char *dev);
|
2009-01-08 01:03:42 +01:00
|
|
|
snd_mixer_elem_t *pa_alsa_find_elem(snd_mixer_t *mixer, const char *name, const char *fallback, pa_bool_t playback);
|
Specifying ALSA mixer control
On Fri, Mar 27, 2009 at 7:21 AM, Lennart Poettering <lennart@poettering.net> wrote:
>> I tried installing the latest git sources on my Ubuntu Jaunty box but
>> it just broke sound in all my applications. For my own purposes, I'm
>> going to need to start with the Ubuntu-patched 0.9.14. However, if
>> you are willing to accept this patch I will forward port it so that it
>> applies to the latest sources. It's a completely harmless change, so
>> why not apply it?
>
> Yes, I am happy to apply it. Could you please update it for current git?
>
Great. An updated patch is attached. For symmetry, I added this
option to the alsa source module as well.
The Ubuntu folks have customized pulse so much that it is difficult
for me to get this version working on my system. For this patch I
have only made sure that it compiles. But it does pretty much the
same thing as the one for 0.9.14, which is working great for me.
Thanks,
Kyle
2009-03-30 12:49:37 -05:00
|
|
|
int pa_alsa_find_mixer_and_elem(snd_pcm_t *pcm, snd_mixer_t **_m, snd_mixer_elem_t **_e, const char *control_name);
|
2006-02-26 17:57:58 +00:00
|
|
|
|
2009-01-20 21:36:57 +01:00
|
|
|
typedef struct pa_alsa_profile_info {
|
|
|
|
|
pa_channel_map map;
|
|
|
|
|
const char *alsa_name;
|
2009-02-20 01:18:37 +01:00
|
|
|
const char *description; /* internationalized */
|
2009-01-20 21:36:57 +01:00
|
|
|
const char *name;
|
|
|
|
|
unsigned priority;
|
|
|
|
|
} pa_alsa_profile_info;
|
|
|
|
|
|
|
|
|
|
/* Picks a working profile based on the specified ss/map */
|
|
|
|
|
snd_pcm_t *pa_alsa_open_by_device_id_auto(
|
2007-11-13 17:37:44 +00:00
|
|
|
const char *dev_id,
|
|
|
|
|
char **dev,
|
|
|
|
|
pa_sample_spec *ss,
|
|
|
|
|
pa_channel_map* map,
|
|
|
|
|
int mode,
|
|
|
|
|
uint32_t *nfrags,
|
|
|
|
|
snd_pcm_uframes_t *period_size,
|
2008-05-15 23:34:41 +00:00
|
|
|
snd_pcm_uframes_t tsched_size,
|
|
|
|
|
pa_bool_t *use_mmap,
|
2009-01-15 23:46:42 +01:00
|
|
|
pa_bool_t *use_tsched,
|
2009-01-20 21:36:57 +01:00
|
|
|
const pa_alsa_profile_info **profile);
|
2007-11-13 17:37:44 +00:00
|
|
|
|
2009-01-20 21:36:57 +01:00
|
|
|
/* Uses the specified profile */
|
|
|
|
|
snd_pcm_t *pa_alsa_open_by_device_id_profile(
|
|
|
|
|
const char *dev_id,
|
|
|
|
|
char **dev,
|
|
|
|
|
pa_sample_spec *ss,
|
|
|
|
|
pa_channel_map* map,
|
|
|
|
|
int mode,
|
|
|
|
|
uint32_t *nfrags,
|
|
|
|
|
snd_pcm_uframes_t *period_size,
|
|
|
|
|
snd_pcm_uframes_t tsched_size,
|
|
|
|
|
pa_bool_t *use_mmap,
|
|
|
|
|
pa_bool_t *use_tsched,
|
|
|
|
|
const pa_alsa_profile_info *profile);
|
|
|
|
|
|
|
|
|
|
/* Opens the explicit ALSA device */
|
2007-11-13 17:37:44 +00:00
|
|
|
snd_pcm_t *pa_alsa_open_by_device_string(
|
|
|
|
|
const char *device,
|
|
|
|
|
char **dev,
|
|
|
|
|
pa_sample_spec *ss,
|
|
|
|
|
pa_channel_map* map,
|
|
|
|
|
int mode,
|
|
|
|
|
uint32_t *nfrags,
|
|
|
|
|
snd_pcm_uframes_t *period_size,
|
2008-05-15 23:34:41 +00:00
|
|
|
snd_pcm_uframes_t tsched_size,
|
|
|
|
|
pa_bool_t *use_mmap,
|
2009-01-16 22:01:45 +01:00
|
|
|
pa_bool_t *use_tsched,
|
|
|
|
|
pa_bool_t require_exact_channel_number);
|
2007-11-13 17:37:44 +00:00
|
|
|
|
2009-01-16 23:33:15 +01:00
|
|
|
int pa_alsa_probe_profiles(
|
|
|
|
|
const char *dev_id,
|
|
|
|
|
const pa_sample_spec *ss,
|
|
|
|
|
void (*cb)(const pa_alsa_profile_info *sink, const pa_alsa_profile_info *source, void *userdata),
|
|
|
|
|
void *userdata);
|
|
|
|
|
|
2007-11-13 23:42:15 +00:00
|
|
|
int pa_alsa_calc_mixer_map(snd_mixer_elem_t *elem, const pa_channel_map *channel_map, snd_mixer_selem_channel_id_t mixer_map[], pa_bool_t playback);
|
|
|
|
|
|
2008-05-15 23:34:41 +00:00
|
|
|
void pa_alsa_dump(snd_pcm_t *pcm);
|
|
|
|
|
void pa_alsa_dump_status(snd_pcm_t *pcm);
|
|
|
|
|
|
|
|
|
|
void pa_alsa_redirect_errors_inc(void);
|
|
|
|
|
void pa_alsa_redirect_errors_dec(void);
|
|
|
|
|
|
2009-02-18 21:49:31 +01:00
|
|
|
void pa_alsa_init_proplist_pcm_info(pa_core *c, pa_proplist *p, snd_pcm_info_t *pcm_info);
|
2009-01-24 01:25:11 +01:00
|
|
|
void pa_alsa_init_proplist_card(pa_core *c, pa_proplist *p, int card);
|
2009-02-18 21:49:31 +01:00
|
|
|
void pa_alsa_init_proplist_pcm(pa_core *c, pa_proplist *p, snd_pcm_t *pcm);
|
2009-03-01 21:34:01 +01:00
|
|
|
pa_bool_t pa_alsa_init_description(pa_proplist *p);
|
2008-05-15 23:34:41 +00:00
|
|
|
|
|
|
|
|
int pa_alsa_recover_from_poll(snd_pcm_t *pcm, int revents);
|
|
|
|
|
|
|
|
|
|
pa_rtpoll_item* pa_alsa_build_pollfd(snd_pcm_t *pcm, pa_rtpoll *rtpoll);
|
|
|
|
|
|
2009-02-20 03:21:17 +01:00
|
|
|
snd_pcm_sframes_t pa_alsa_safe_avail(snd_pcm_t *pcm, size_t hwbuf_size, const pa_sample_spec *ss);
|
2009-02-23 22:55:33 +01:00
|
|
|
int pa_alsa_safe_delay(snd_pcm_t *pcm, snd_pcm_sframes_t *delay, size_t hwbuf_size, const pa_sample_spec *ss);
|
2008-10-21 20:00:36 +02:00
|
|
|
int pa_alsa_safe_mmap_begin(snd_pcm_t *pcm, const snd_pcm_channel_area_t **areas, snd_pcm_uframes_t *offset, snd_pcm_uframes_t *frames, size_t hwbuf_size, const pa_sample_spec *ss);
|
|
|
|
|
|
2009-01-30 02:24:40 +01:00
|
|
|
char *pa_alsa_get_driver_name(int card);
|
|
|
|
|
|
2009-02-23 22:54:28 +01:00
|
|
|
char *pa_alsa_get_driver_name_by_pcm(snd_pcm_t *pcm);
|
|
|
|
|
|
2009-02-24 06:13:39 +01:00
|
|
|
char *pa_alsa_get_reserve_name(const char *device);
|
|
|
|
|
|
2009-03-30 18:00:23 +02:00
|
|
|
pa_bool_t pa_alsa_pcm_is_hw(snd_pcm_t *pcm);
|
|
|
|
|
|
2009-04-04 04:12:42 +02:00
|
|
|
pa_bool_t pa_alsa_pcm_is_modem(snd_pcm_t *pcm);
|
|
|
|
|
|
2004-07-16 17:03:11 +00:00
|
|
|
#endif
|