Merge pull request #515 from ilya-fedin/pulse-nullptr-default

Pass nullptr to pulse for default device
This commit is contained in:
kcat
2021-01-10 11:25:05 -08:00
committed by GitHub
+13 -42
View File
@@ -611,25 +611,10 @@ void PulseMainloop::probePlaybackDevices()
std::unique_lock<std::mutex> plock{mMutex}; std::unique_lock<std::mutex> plock{mMutex};
context = connectContext(plock); context = connectContext(plock);
constexpr pa_stream_flags_t flags{PA_STREAM_FIX_FORMAT | PA_STREAM_FIX_RATE |
PA_STREAM_FIX_CHANNELS | PA_STREAM_DONT_MOVE | PA_STREAM_START_CORKED};
pa_sample_spec spec{};
spec.format = PA_SAMPLE_S16NE;
spec.rate = 44100;
spec.channels = 2;
stream = connectStream(nullptr, plock, context, flags, nullptr, &spec, nullptr,
BackendType::Playback);
pa_operation *op{pa_context_get_sink_info_by_name(context, pa_operation *op{pa_context_get_sink_info_by_name(context,
pa_stream_get_device_name(stream), &deviceSinkCallbackC, this)}; nullptr, &deviceSinkCallbackC, this)};
waitForOperation(op, plock); waitForOperation(op, plock);
pa_stream_disconnect(stream);
pa_stream_unref(stream);
stream = nullptr;
op = pa_context_get_sink_info_list(context, &deviceSinkCallbackC, this); op = pa_context_get_sink_info_list(context, &deviceSinkCallbackC, this);
waitForOperation(op, plock); waitForOperation(op, plock);
@@ -653,25 +638,10 @@ void PulseMainloop::probeCaptureDevices()
std::unique_lock<std::mutex> plock{mMutex}; std::unique_lock<std::mutex> plock{mMutex};
context = connectContext(plock); context = connectContext(plock);
constexpr pa_stream_flags_t flags{PA_STREAM_FIX_FORMAT | PA_STREAM_FIX_RATE |
PA_STREAM_FIX_CHANNELS | PA_STREAM_DONT_MOVE | PA_STREAM_START_CORKED};
pa_sample_spec spec{};
spec.format = PA_SAMPLE_S16NE;
spec.rate = 44100;
spec.channels = 1;
stream = connectStream(nullptr, plock, context, flags, nullptr, &spec, nullptr,
BackendType::Capture);
pa_operation *op{pa_context_get_source_info_by_name(context, pa_operation *op{pa_context_get_source_info_by_name(context,
pa_stream_get_device_name(stream), &deviceSourceCallbackC, this)}; nullptr, &deviceSourceCallbackC, this)};
waitForOperation(op, plock); waitForOperation(op, plock);
pa_stream_disconnect(stream);
pa_stream_unref(stream);
stream = nullptr;
op = pa_context_get_source_info_list(context, &deviceSourceCallbackC, this); op = pa_context_get_source_info_list(context, &deviceSourceCallbackC, this);
waitForOperation(op, plock); waitForOperation(op, plock);
@@ -726,7 +696,7 @@ struct PulsePlayback final : public BackendBase {
PulseMainloop mMainloop; PulseMainloop mMainloop;
std::string mDeviceName; al::optional<std::string> mDeviceName{al::nullopt};
pa_buffer_attr mAttr; pa_buffer_attr mAttr;
pa_sample_spec mSpec; pa_sample_spec mSpec;
@@ -852,7 +822,7 @@ void PulsePlayback::sinkNameCallback(pa_context*, const pa_sink_info *info, int
void PulsePlayback::streamMovedCallback(pa_stream *stream) noexcept void PulsePlayback::streamMovedCallback(pa_stream *stream) noexcept
{ {
mDeviceName = pa_stream_get_device_name(stream); mDeviceName = pa_stream_get_device_name(stream);
TRACE("Stream moved to %s\n", mDeviceName.c_str()); TRACE("Stream moved to %s\n", mDeviceName->c_str());
} }
@@ -900,10 +870,10 @@ void PulsePlayback::open(const char *name)
pa_stream_set_moved_callback(mStream, &PulsePlayback::streamMovedCallbackC, this); pa_stream_set_moved_callback(mStream, &PulsePlayback::streamMovedCallbackC, this);
mFrameSize = static_cast<uint>(pa_frame_size(pa_stream_get_sample_spec(mStream))); mFrameSize = static_cast<uint>(pa_frame_size(pa_stream_get_sample_spec(mStream)));
mDeviceName = pa_stream_get_device_name(mStream); mDeviceName = pulse_name ? al::make_optional<std::string>(pulse_name) : al::nullopt;
if(!dev_name) if(!dev_name)
{ {
pa_operation *op{pa_context_get_sink_info_by_name(mContext, mDeviceName.c_str(), pa_operation *op{pa_context_get_sink_info_by_name(mContext, pulse_name,
&PulsePlayback::sinkNameCallbackC, this)}; &PulsePlayback::sinkNameCallbackC, this)};
mMainloop.waitForOperation(op, plock); mMainloop.waitForOperation(op, plock);
} }
@@ -913,6 +883,7 @@ void PulsePlayback::open(const char *name)
bool PulsePlayback::reset() bool PulsePlayback::reset()
{ {
const auto deviceName = mDeviceName ? mDeviceName->c_str() : nullptr;
auto plock = mMainloop.getUniqueLock(); auto plock = mMainloop.getUniqueLock();
if(mStream) if(mStream)
@@ -926,7 +897,7 @@ bool PulsePlayback::reset()
mStream = nullptr; mStream = nullptr;
} }
pa_operation *op{pa_context_get_sink_info_by_name(mContext, mDeviceName.c_str(), pa_operation *op{pa_context_get_sink_info_by_name(mContext, deviceName,
&PulsePlayback::sinkInfoCallbackC, this)}; &PulsePlayback::sinkInfoCallbackC, this)};
mMainloop.waitForOperation(op, plock); mMainloop.waitForOperation(op, plock);
@@ -1013,7 +984,7 @@ bool PulsePlayback::reset()
mAttr.minreq = mDevice->UpdateSize * frame_size; mAttr.minreq = mDevice->UpdateSize * frame_size;
mAttr.fragsize = ~0u; mAttr.fragsize = ~0u;
mStream = mMainloop.connectStream(mDeviceName.c_str(), plock, mContext, flags, &mAttr, &mSpec, mStream = mMainloop.connectStream(deviceName, plock, mContext, flags, &mAttr, &mSpec,
&chanmap, BackendType::Playback); &chanmap, BackendType::Playback);
pa_stream_set_state_callback(mStream, &PulsePlayback::streamStateCallbackC, this); pa_stream_set_state_callback(mStream, &PulsePlayback::streamStateCallbackC, this);
@@ -1156,7 +1127,7 @@ struct PulseCapture final : public BackendBase {
PulseMainloop mMainloop; PulseMainloop mMainloop;
std::string mDeviceName; al::optional<std::string> mDeviceName{al::nullopt};
uint mLastReadable{0u}; uint mLastReadable{0u};
al::byte mSilentVal{}; al::byte mSilentVal{};
@@ -1207,7 +1178,7 @@ void PulseCapture::sourceNameCallback(pa_context*, const pa_source_info *info, i
void PulseCapture::streamMovedCallback(pa_stream *stream) noexcept void PulseCapture::streamMovedCallback(pa_stream *stream) noexcept
{ {
mDeviceName = pa_stream_get_device_name(stream); mDeviceName = pa_stream_get_device_name(stream);
TRACE("Stream moved to %s\n", mDeviceName.c_str()); TRACE("Stream moved to %s\n", mDeviceName->c_str());
} }
@@ -1306,10 +1277,10 @@ void PulseCapture::open(const char *name)
pa_stream_set_moved_callback(mStream, &PulseCapture::streamMovedCallbackC, this); pa_stream_set_moved_callback(mStream, &PulseCapture::streamMovedCallbackC, this);
pa_stream_set_state_callback(mStream, &PulseCapture::streamStateCallbackC, this); pa_stream_set_state_callback(mStream, &PulseCapture::streamStateCallbackC, this);
mDeviceName = pa_stream_get_device_name(mStream); mDeviceName = pulse_name ? al::make_optional<std::string>(pulse_name) : al::nullopt;
if(mDevice->DeviceName.empty()) if(mDevice->DeviceName.empty())
{ {
pa_operation *op{pa_context_get_source_info_by_name(mContext, mDeviceName.c_str(), pa_operation *op{pa_context_get_source_info_by_name(mContext, pulse_name,
&PulseCapture::sourceNameCallbackC, this)}; &PulseCapture::sourceNameCallbackC, this)};
mMainloop.waitForOperation(op, plock); mMainloop.waitForOperation(op, plock);
} }