summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--configure.ac4
-rw-r--r--ext/pulse/pulsesink.c15
-rw-r--r--ext/pulse/pulseutil.c10
3 files changed, 28 insertions, 1 deletions
diff --git a/configure.ac b/configure.ac
index fe81b492..1d533d07 100644
--- a/configure.ac
+++ b/configure.ac
@@ -759,6 +759,10 @@ AG_GST_CHECK_FEATURE(PULSE, [pulseaudio plug-in], pulseaudio, [
if test x$HAVE_PULSE_0_9_13 = xyes; then
AC_DEFINE(HAVE_PULSE_0_9_13, 1, [defined if pulseaudio >= 0.9.13 is available])
fi
+ AG_GST_PKG_CHECK_MODULES(PULSE_0_9_15, libpulse >= 0.9.15)
+ if test x$HAVE_PULSE_0_9_15 = xyes; then
+ AC_DEFINE(HAVE_PULSE_0_9_15, 1, [defined if pulseaudio >= 0.9.15 is available])
+ fi
])
dnl *** dv1394 ***
diff --git a/ext/pulse/pulsesink.c b/ext/pulse/pulsesink.c
index c3f37548..1c633c0b 100644
--- a/ext/pulse/pulsesink.c
+++ b/ext/pulse/pulsesink.c
@@ -516,7 +516,6 @@ gst_pulsering_stream_underflow_cb (pa_stream * s, void *userdata)
GST_WARNING_OBJECT (psink, "Got underflow");
}
-
static void
gst_pulsering_stream_overflow_cb (pa_stream * s, void *userdata)
{
@@ -1320,9 +1319,23 @@ gst_pulsesink_base_init (gpointer g_class)
"signed = (boolean) TRUE, "
"width = (int) 32, "
"depth = (int) 32, "
+ "rate = (int) [ 1, MAX ], " "channels = (int) [ 1, 32 ];"
+#if HAVE_PULSE_0_9_15
+ "audio/x-raw-int, "
+ "endianness = (int) { " ENDIANNESS " }, "
+ "signed = (boolean) TRUE, "
+ "width = (int) 24, "
+ "depth = (int) 24, "
"rate = (int) [ 1, MAX ], "
"channels = (int) [ 1, 32 ];"
"audio/x-raw-int, "
+ "endianness = (int) { " ENDIANNESS " }, "
+ "signed = (boolean) TRUE, "
+ "width = (int) 32, "
+ "depth = (int) 24, "
+ "rate = (int) [ 1, MAX ], " "channels = (int) [ 1, 32 ];"
+#endif
+ "audio/x-raw-int, "
"signed = (boolean) FALSE, "
"width = (int) 8, "
"depth = (int) 8, "
diff --git a/ext/pulse/pulseutil.c b/ext/pulse/pulseutil.c
index 169c55b7..6fbf8377 100644
--- a/ext/pulse/pulseutil.c
+++ b/ext/pulse/pulseutil.c
@@ -91,6 +91,16 @@ gst_pulse_fill_sample_spec (GstRingBufferSpec * spec, pa_sample_spec * ss)
ss->format = PA_SAMPLE_S32LE;
else if (spec->format == GST_S32_BE && spec->width == 32)
ss->format = PA_SAMPLE_S32BE;
+#if HAVE_PULSE_0_9_15
+ else if (spec->format == GST_S24_3LE && spec->width == 24)
+ ss->format = PA_SAMPLE_S24LE;
+ else if (spec->format == GST_S24_3BE && spec->width == 24)
+ ss->format = PA_SAMPLE_S24BE;
+ else if (spec->format == GST_S24_LE && spec->width == 32)
+ ss->format = PA_SAMPLE_S24_32LE;
+ else if (spec->format == GST_S24_BE && spec->width == 32)
+ ss->format = PA_SAMPLE_S24_32BE;
+#endif
else
return FALSE;