blob: ef11424eecdf8f59e0f28cb9fba450c3a07c25cf [file] [log] [blame]
/*
* GStreamer pulseaudio plugin
*
* Copyright (c) 2004-2008 Lennart Poettering
*
* gst-pulse is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of the
* License, or (at your option) any later version.
*
* gst-pulse is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with gst-pulse; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
* USA.
*/
#ifndef __GST_PULSEUTIL_H__
#define __GST_PULSEUTIL_H__
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include <gst/gst.h>
#include <pulse/pulseaudio.h>
#include <gst/audio/gstaudioringbuffer.h>
#include <gst/audio/gstaudiosink.h>
#if (G_BYTE_ORDER == G_LITTLE_ENDIAN)
# define _PULSE_FORMATS "{ S16LE, S16BE, F32LE, F32BE, S32LE, S32BE, " \
"S24LE, S24BE, S24_32LE, S24_32BE, U8 }"
#else
# define _PULSE_FORMATS "{ S16BE, S16LE, F32BE, F32LE, S32BE, S32LE, " \
"S24BE, S24LE, S24_32BE, S24_32LE, U8 }"
#endif
#define _PULSE_CAPS_LINEAR \
"audio/x-raw, " \
"format = (string) " _PULSE_FORMATS ", " \
"layout = (string) interleaved, " \
"rate = (int) [ 1, MAX ], " \
"channels = (int) [ 1, 32 ]; "
#define _PULSE_CAPS_ALAW \
"audio/x-alaw, " \
"rate = (int) [ 1, MAX], " \
"channels = (int) [ 1, 32 ]; "
#define _PULSE_CAPS_MULAW \
"audio/x-mulaw, " \
"rate = (int) [ 1, MAX], " \
"channels = (int) [ 1, 32 ]; "
#define _PULSE_CAPS_AC3 "audio/x-ac3, framed = (boolean) true; "
#define _PULSE_CAPS_EAC3 "audio/x-eac3, framed = (boolean) true; "
#define _PULSE_CAPS_DTS "audio/x-dts, framed = (boolean) true, " \
"block-size = (int) { 512, 1024, 2048 }; "
#define _PULSE_CAPS_MP3 "audio/mpeg, mpegversion = (int) 1, " \
"mpegaudioversion = (int) [ 1, 3 ], parsed = (boolean) true;"
#define _PULSE_CAPS_AAC "audio/mpeg, mpegversion = (int) { 2, 4 }, " \
"framed = (boolean) true, stream-format = (string) adts;"
#define _PULSE_CAPS_PCM \
_PULSE_CAPS_LINEAR \
_PULSE_CAPS_ALAW \
_PULSE_CAPS_MULAW
gboolean gst_pulse_fill_sample_spec (GstAudioRingBufferSpec * spec,
pa_sample_spec * ss);
gboolean gst_pulse_fill_format_info (GstAudioRingBufferSpec * spec,
pa_format_info ** f, guint * channels);
const char * gst_pulse_sample_format_to_caps_format (pa_sample_format_t sf);
gchar *gst_pulse_client_name (void);
pa_channel_map *gst_pulse_gst_to_channel_map (pa_channel_map * map,
const GstAudioRingBufferSpec * spec);
GstAudioRingBufferSpec *gst_pulse_channel_map_to_gst (const pa_channel_map * map,
GstAudioRingBufferSpec * spec);
void gst_pulse_cvolume_from_linear (pa_cvolume *v, unsigned channels, gdouble volume);
pa_proplist *gst_pulse_make_proplist (const GstStructure *properties);
GstStructure *gst_pulse_make_structure (pa_proplist *properties);
GstCaps * gst_pulse_format_info_to_caps (pa_format_info * format);
#endif