diff --git a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp index 740a7957262686a04546da372b44f88310eaf9ed..82d5981aae28f2c39d3896f7850ae54bf28ce581 100644 --- a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp +++ b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp @@ -23,6 +23,23 @@ int framesPerBuffer = 2048; +/* + PA_SUBSCRIPTION_EVENT_SINK = 0x0000U, + PA_SUBSCRIPTION_EVENT_SOURCE = 0x0001U, + PA_SUBSCRIPTION_EVENT_SINK_INPUT = 0x0002U, + PA_SUBSCRIPTION_EVENT_SOURCE_OUTPUT = 0x0003U, + PA_SUBSCRIPTION_EVENT_MODULE = 0x0004U, + PA_SUBSCRIPTION_EVENT_CLIENT = 0x0005U, + PA_SUBSCRIPTION_EVENT_SAMPLE_CACHE = 0x0006U, + PA_SUBSCRIPTION_EVENT_SERVER = 0x0007U, + PA_SUBSCRIPTION_EVENT_CARD = 0x0009U, + PA_SUBSCRIPTION_EVENT_FACILITY_MASK = 0x000FU, + PA_SUBSCRIPTION_EVENT_NEW = 0x0000U, + PA_SUBSCRIPTION_EVENT_CHANGE = 0x0010U, + PA_SUBSCRIPTION_EVENT_REMOVE = 0x0020U, + PA_SUBSCRIPTION_EVENT_TYPE_MASK = 0x0030U +*/ + static void playback_callback (pa_stream* s, size_t bytes, void* userdata) { @@ -50,6 +67,73 @@ static void ringtone_callback (pa_stream* s, size_t bytes, void* userdata) } +/* + PA_SUBSCRIPTION_EVENT_SINK = 0x0000U, + PA_SUBSCRIPTION_EVENT_SOURCE = 0x0001U, + PA_SUBSCRIPTION_EVENT_SINK_INPUT = 0x0002U, + PA_SUBSCRIPTION_EVENT_SOURCE_OUTPUT = 0x0003U, + PA_SUBSCRIPTION_EVENT_MODULE = 0x0004U, + PA_SUBSCRIPTION_EVENT_CLIENT = 0x0005U, + PA_SUBSCRIPTION_EVENT_SAMPLE_CACHE = 0x0006U, + PA_SUBSCRIPTION_EVENT_SERVER = 0x0007U, + PA_SUBSCRIPTION_EVENT_CARD = 0x0009U, + PA_SUBSCRIPTION_EVENT_FACILITY_MASK = 0x000FU, + PA_SUBSCRIPTION_EVENT_NEW = 0x0000U, + PA_SUBSCRIPTION_EVENT_CHANGE = 0x0010U, + PA_SUBSCRIPTION_EVENT_REMOVE = 0x0020U, + PA_SUBSCRIPTION_EVENT_TYPE_MASK = 0x0030U +*/ + +static void stream_changed_callback(pa_context* s, pa_subscription_event_type_t t, uint32_t idx, void* userdata) +{ + + switch(t) { + + case PA_SUBSCRIPTION_EVENT_SINK: + _debug("Audio: PA_SUBSCRIPTION_EVENT_SINK"); + break; + case PA_SUBSCRIPTION_EVENT_SOURCE: + _debug("Audio: PA_SUBSCRIPTION_EVENT_SOURCE"); + break; + case PA_SUBSCRIPTION_EVENT_SINK_INPUT: + _debug("Audio: PA_SUBSCRIPTION_EVENT_SINK_INPUT"); + break; + case PA_SUBSCRIPTION_EVENT_SOURCE_OUTPUT: + _debug("Audio: PA_SUBSCRIPTION_EVENT_SOURCE_OUTPUT"); + break; + case PA_SUBSCRIPTION_EVENT_MODULE: + _debug("Audio: PA_SUBSCRIPTION_EVENT_MODULE"); + break; + case PA_SUBSCRIPTION_EVENT_CLIENT: + _debug("Audio: PA_SUBSCRIPTION_EVENT_CLIENT"); + break; + case PA_SUBSCRIPTION_EVENT_SAMPLE_CACHE: + _debug("Audio: PA_SUBSCRIPTION_EVENT_SAMPLE_CACHE"); + break; + case PA_SUBSCRIPTION_EVENT_SERVER: + _debug("Audio: PA_SUBSCRIPTION_EVENT_SERVER"); + break; + case PA_SUBSCRIPTION_EVENT_CARD: + _debug("Audio: PA_SUBSCRIPTION_EVENT_CARD"); + break; + case PA_SUBSCRIPTION_EVENT_FACILITY_MASK: + _debug("Audio: PA_SUBSCRIPTION_EVENT_FACILITY_MASK"); + break; + case PA_SUBSCRIPTION_EVENT_CHANGE: + _debug("Audio: PA_SUBSCRIPTION_EVENT_CHANGE"); + break; + case PA_SUBSCRIPTION_EVENT_REMOVE: + _debug("Audio: PA_SUBSCRIPTION_EVENT_REMOVE"); + break; + case PA_SUBSCRIPTION_EVENT_TYPE_MASK: + _debug("Audio: PA_SUBSCRIPTION_EVENT_TYPE_MASK"); + break; + default: + _debug("Audio: Unknown event type"); + + } +} + /* static void stream_suspended_callback (pa_stream *s UNUSED, void *userdata UNUSED) { @@ -300,6 +384,9 @@ bool PulseLayer::createStreams (pa_context* c) pa_stream_set_write_callback(ringtone->pulseStream(), ringtone_callback, this); delete ringtoneParam; + pa_context_subscribe (c, PA_SUBSCRIPTION_MASK_SINK, NULL, this); + pa_context_set_subscribe_callback (c, stream_changed_callback, this); + pa_threaded_mainloop_signal (m , 0); flushMain(); @@ -683,7 +770,7 @@ void PulseLayer::ringtoneToSpeaker(void) int writableSize = pa_stream_writable_size(ringtone->pulseStream()); - _debug("writable size: %d", writableSize); + // _debug("writable size: %d", writableSize); if (file_tone) {