pipewire/src/modules/module-protocol-pulse/module.h
Wim Taymans d97a9bf44b pulse-server: actually print properties of module
When inspecting the loaded modules, actually list the properties that
were used when loading the module instead of the informational generic
ones from the info.

Pulsaudio also does not list the Usage properties when listing modules.
2026-06-25 09:21:27 +02:00

114 lines
3.4 KiB
C

/* PipeWire */
/* SPDX-FileCopyrightText: Copyright © 2020 Georges Basile Stavracas Neto */
/* SPDX-FileCopyrightText: Copyright © 2021 Wim Taymans <wim.taymans@gmail.com> */
/* SPDX-License-Identifier: MIT */
#ifndef PIPEWIRE_PULSE_MODULE_H
#define PIPEWIRE_PULSE_MODULE_H
#include <spa/param/audio/raw.h>
#include <spa/utils/hook.h>
#include "internal.h"
struct module;
struct pw_properties;
struct client;
struct message;
struct extension;
struct module_args {
const char *key;
const char *description;
#define MODULE_ARG_MANDATORY (1u<<0)
#define MODULE_ARG_ENOTIMPL (1u<<1)
uint32_t flags;
#define MODULE_TYPE_NONE ""
#define MODULE_TYPE_STRING "string"
#define MODULE_TYPE_STRINGV "stringv"
#define MODULE_TYPE_STRINGE "stringe"
#define MODULE_TYPE_USEC "usec"
#define MODULE_TYPE_MSEC "msec"
#define MODULE_TYPE_INT "int"
#define MODULE_TYPE_BOOL "bool"
#define MODULE_TYPE_PROPS "proplist"
#define MODULE_TYPE_FORMAT "format"
#define MODULE_TYPE_CHMAP "chmap"
const char *type;
const char *def;
const char **vals;
};
struct module_info {
const char *name;
unsigned int load_once:1;
int (*prepare) (struct module *module);
int (*load) (struct module *module);
int (*unload) (struct module *module);
const struct extension *extension;
const struct module_args *valid_args;
const struct spa_dict *properties;
size_t data_size;
};
#define DEFINE_MODULE_INFO(name) \
__attribute__((used)) \
__attribute__((retain)) \
__attribute__((section("pw_mod_pulse_modules"))) \
__attribute__((aligned(__alignof__(struct module_info)))) \
const struct module_info name
struct module_events {
#define VERSION_MODULE_EVENTS 0
uint32_t version;
void (*loaded) (void *data, int result);
void (*destroy) (void *data);
};
struct module {
uint32_t index;
const char *args;
struct pw_properties *props;
struct impl *impl;
const struct module_info *info;
struct spa_hook_list listener_list;
void *user_data;
unsigned int loaded:1;
unsigned int unloading:1;
};
#define module_emit_loaded(m,r) spa_hook_list_call(&m->listener_list, struct module_events, loaded, 0, r)
#define module_emit_destroy(m) spa_hook_list_call(&(m)->listener_list, struct module_events, destroy, 0)
const struct module_info *module_info_next(struct impl *impl, const struct module_info *info);
const struct module_info *module_info_find(struct impl *impl, const char *name);
char *module_info_usage(const struct module_info *info);
struct module *module_create(struct impl *impl, const char *name, const char *args);
void module_free(struct module *module);
int module_load(struct module *module);
int module_unload(struct module *module);
void module_schedule_unload(struct module *module);
struct module *module_lookup(struct impl *impl, uint32_t index, const char *name);
void module_add_listener(struct module *module,
struct spa_hook *listener,
const struct module_events *events, void *data);
void module_args_add_props(struct pw_properties *props, const char *str);
int module_args_to_audioinfo(struct impl *impl, struct pw_properties *props, struct spa_audio_info_raw *info);
bool module_args_parse_bool(const char *str);
int module_args_to_audioinfo_keys(struct impl *impl, struct pw_properties *props,
const char *key_format, const char *key_rate,
const char *key_channels, const char *key_channel_map,
struct spa_audio_info_raw *info);
void audioinfo_to_properties(struct spa_audio_info_raw *info, struct pw_properties *props);
#endif