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());
    }
}
Пример #2
0
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));
}