#include <vlc_cpu.h>
#include <pulse/pulseaudio.h>
+#ifdef HAVE_X11_XLIB_H
+# include <X11/Xlib.h>
+#endif
#include <assert.h>
* Module descriptor
*****************************************************************************/
vlc_module_begin ()
- set_shortname( "Pulse Audio" )
+ set_shortname( "PulseAudio" )
set_description( N_("Pulseaudio audio output") )
set_capability( "audio output", 160 )
set_category( CAT_AUDIO )
add_shortcut( "pulseaudio" )
add_shortcut( "pa" )
set_callbacks( Open, Close )
- linked_with_a_crap_library_which_uses_atexit()
vlc_module_end ()
/*****************************************************************************
struct pa_buffer_attr a;
struct pa_channel_map map;
+#ifdef X_DISPLAY_MISSING
+# error Xlib required due to PulseAudio bug 799!
+#else
+ if( !XInitThreads() )
+ return VLC_EGENERIC;
+#endif
/* Allocate structures */
p_aout->output.p_sys = p_sys = calloc( 1, sizeof( aout_sys_t ) );
if( p_sys == NULL )
msg_Dbg(p_aout, "Pulse Close");
if(p_sys->stream){
- pa_operation *o;
pa_threaded_mainloop_lock(p_sys->mainloop);
pa_stream_set_write_callback(p_sys->stream, NULL, NULL);
- if((o = pa_stream_drain(p_sys->stream, success_cb, p_aout))){
+/* I didn't find any explanation why we need to do pa_stream_drain on close
+ * as we don't really care if we lose 20ms buffer in this point anyway?
+ * And disabling this speeds up closing pulseaudio quite a lot (atleast for me).
+ */
+#if 0
+ pa_operation *o = pa_stream_drain(p_sys->stream, success_cb, p_aout);
+ if(o){
while (pa_operation_get_state(o) != PA_OPERATION_DONE) {
CHECK_DEAD_GOTO(fail);
pa_threaded_mainloop_wait(p_sys->mainloop);
pa_operation_unref(o);
}
-
+#endif
pa_threaded_mainloop_unlock(p_sys->mainloop);
}
uninit(p_aout);