void AudioSinksManager::InternalAudioSink::start_sink() { assert(manager->pa_mainloop.get_strand().running_in_this_thread()); assert(state == State::NONE); manager->logger->trace("(AudioSink '{}') Starting sink", name); state = State::STARTED; std::string escaped_name = replace_all( replace_all(replace_all(pretty_name, "\\", "\\\\"), " ", "\\ "), "\"", "\\\""); std::stringstream arguments; arguments << "sink_name=" << identifier << " sink_properties=device.description=\"(Chromecast)\\ " << escaped_name << "\""; pa_operation* op = pa_context_load_module(manager->context, "module-null-sink", arguments.str().c_str(), module_load_callback, this); if (op) { pa_operation_unref(op); } else { manager->logger->error("(AudioSink '{}') Failed to start loading module: {}", name, manager->get_pa_error()); state = State::DEAD; manager->unregister_audio_sink(shared_from_this()); } }
void pulseaudio_module_load(const char* name, const char* argument) { pa_operation_unref(pa_context_load_module(context, name, argument, pulseaudio_module_load_success_cb, (void*)name)); }