diff --git a/configure.ac b/configure.ac index fe81b49273..1d533d0788 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 c3f37548d9..1c633c0b51 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,8 +1319,22 @@ 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, " diff --git a/ext/pulse/pulseutil.c b/ext/pulse/pulseutil.c index 169c55b7fa..6fbf83776a 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;