From ab3bed81a5f6c52f6739e6d33fff197b3c889b1b Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Tue, 14 Jul 2009 16:12:55 +0200 Subject: pulsesink: add 24bit sample formats Add check for pulseaudio 0.9.15 and enable 24bits samples in that case. --- ext/pulse/pulsesink.c | 15 ++++++++++++++- ext/pulse/pulseutil.c | 10 ++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) (limited to 'ext') 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,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 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; -- cgit