pulsesrc: Fallback should be disallowed when device explicitly specified
@michaelcadilhac
Submitted by Michaël Link to original bug (#790823)
Description
I use pulsesrc to route my phone's sound output, connected via Bluetooth to my server, to the audio output of my server. When the phone stops emitting and the pulse device disappears, pulsesrc falls back to the main monitor, creating a feed loop and chaos if anything is played.
Here is a use case, where the Bluetooth device exists, then disappears, then reappears:
$ gst-launch-1.0 -vvvv pulsesrc device=bluez_source.44_78_3E_81_32_11.a2dp_source ! pulsesink
Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Setting pipeline to PLAYING ...
New clock: GstPulseSrcClock
/GstPipeline:pipeline0/GstPulseSrc:pulsesrc0: source-output-index = 340
/GstPipeline:pipeline0/GstPulseSrc:pulsesrc0: actual-buffer-time = 270566
/GstPipeline:pipeline0/GstPulseSrc:pulsesrc0: actual-latency-time = 135283
Redistribute latency...
/GstPipeline:pipeline0/GstPulseSrc:pulsesrc0.GstPad:src: caps = audio/x-raw, format=(string)S16LE, layout=(string)interleaved, rate=(int)44100, channels=(int)2, channel-mask=(bitmask)0x0000000000000003
Redistribute latency...
/GstPipeline:pipeline0/GstPulseSink:pulsesink0.GstPad:sink: caps = audio/x-raw, format=(string)S16LE, layout=(string)interleaved, rate=(int)44100, channels=(int)2, channel-mask=(bitmask)0x0000000000000003
/GstPipeline:pipeline0/GstPulseSrc:pulsesrc0: volume = 1
/GstPipeline:pipeline0/GstPulseSrc:pulsesrc0: mute = false
/GstPipeline:pipeline0/GstPulseSrc:pulsesrc0: current-device = bluez_source.44_78_3E_81_32_11.a2dp_source
/GstPipeline:pipeline0/GstPulseSink:pulsesink0: volume = 1.5831909025186803
/GstPipeline:pipeline0/GstPulseSink:pulsesink0: mute = false
/GstPipeline:pipeline0/GstPulseSink:pulsesink0: current-device = alsa_output.usb-0d8c_USB_Sound_Device-00.analog-surround-71
/GstPipeline:pipeline0/GstPulseSink:pulsesink0: volume = 1.5831909025186803
/GstPipeline:pipeline0/GstPulseSink:pulsesink0: mute = false
/GstPipeline:pipeline0/GstPulseSink:pulsesink0: current-device = alsa_output.usb-0d8c_USB_Sound_Device-00.analog-surround-71
------------ SOUND IS STOPPED, DEVICE DISAPPEARS
/GstPipeline:pipeline0/GstPulseSrc:pulsesrc0: volume = 1
/GstPipeline:pipeline0/GstPulseSrc:pulsesrc0: mute = false
/GstPipeline:pipeline0/GstPulseSrc:pulsesrc0: current-device = alsa_output.usb-0d8c_USB_Sound_Device-00.analog-surround-71.monitor
------------- SOUND IS RESUMED, DEVICE IS RECREATED
/GstPipeline:pipeline0/GstPulseSrc:pulsesrc0: volume = 1
/GstPipeline:pipeline0/GstPulseSrc:pulsesrc0: mute = false
/GstPipeline:pipeline0/GstPulseSrc:pulsesrc0: current-device = bluez_source.44_78_3E_81_32_11.a2dp_source
I don't believe it is an expected behavior that pulsesrc falls back to any other device when the device is explicitly set.
Cheers;
M.
Version: 1.12.3