diff --git a/src/modules/module-protocol-pulse/collect.c b/src/modules/module-protocol-pulse/collect.c index 9bdd4b401..33ff9f46f 100644 --- a/src/modules/module-protocol-pulse/collect.c +++ b/src/modules/module-protocol-pulse/collect.c @@ -23,16 +23,7 @@ */ #include - -struct selector { - bool (*type) (struct pw_manager_object *o); - uint32_t id; - const char *key; - const char *value; - void (*accumulate) (struct selector *sel, struct pw_manager_object *o); - int32_t score; - struct pw_manager_object *best; -}; +#include "collect.h" static void select_best(struct selector *s, struct pw_manager_object *o) { @@ -49,7 +40,7 @@ static void select_best(struct selector *s, struct pw_manager_object *o) } } -static struct pw_manager_object *select_object(struct pw_manager *m, +struct pw_manager_object *select_object(struct pw_manager *m, struct selector *s) { struct pw_manager_object *o; @@ -105,19 +96,7 @@ static struct pw_manager_object *find_linked(struct pw_manager *m, uint32_t obj_ return NULL; } -struct card_info { - uint32_t n_profiles; - uint32_t active_profile; - const char *active_profile_name; - - uint32_t n_ports; -}; - -#define CARD_INFO_INIT (struct card_info) { \ - .active_profile = SPA_ID_INVALID, \ -} - -static void collect_card_info(struct pw_manager_object *card, struct card_info *info) +void collect_card_info(struct pw_manager_object *card, struct card_info *info) { struct pw_manager_param *p; @@ -232,29 +211,7 @@ static uint32_t find_profile_id(struct pw_manager_object *card, const char *name return SPA_ID_INVALID; } -struct device_info { - uint32_t direction; - - struct sample_spec ss; - struct channel_map map; - struct volume_info volume_info; - unsigned int have_volume:1; - - uint32_t device; - uint32_t active_port; - const char *active_port_name; -}; - -#define DEVICE_INFO_INIT(_dir) (struct device_info) { \ - .direction = _dir, \ - .ss = SAMPLE_SPEC_INIT, \ - .map = CHANNEL_MAP_INIT, \ - .volume_info = VOLUME_INFO_INIT, \ - .device = SPA_ID_INVALID, \ - .active_port = SPA_ID_INVALID, \ - } - -static void collect_device_info(struct pw_manager_object *device, +void collect_device_info(struct pw_manager_object *device, struct pw_manager_object *card, struct device_info *dev_info, bool monitor) { struct pw_manager_param *p; diff --git a/src/modules/module-protocol-pulse/collect.h b/src/modules/module-protocol-pulse/collect.h new file mode 100644 index 000000000..c0fa602e9 --- /dev/null +++ b/src/modules/module-protocol-pulse/collect.h @@ -0,0 +1,80 @@ +/* PipeWire + * + * Copyright © 2020 Wim Taymans + * Copyright © 2021 Sanchayan Maity + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +#ifndef PULSE_SERVER_COLLECT_H +#define PULSE_SERVER_COLLECT_H + +#include "format.h" +#include "volume.h" + +struct device_info { + uint32_t direction; + + struct sample_spec ss; + struct channel_map map; + struct volume_info volume_info; + unsigned int have_volume:1; + + uint32_t device; + uint32_t active_port; + const char *active_port_name; +}; + +#define DEVICE_INFO_INIT(_dir) (struct device_info) { \ + .direction = _dir, \ + .ss = SAMPLE_SPEC_INIT, \ + .map = CHANNEL_MAP_INIT, \ + .volume_info = VOLUME_INFO_INIT, \ + .device = SPA_ID_INVALID, \ + .active_port = SPA_ID_INVALID, \ + } + +struct card_info { + uint32_t n_profiles; + uint32_t active_profile; + const char *active_profile_name; + + uint32_t n_ports; +}; + +#define CARD_INFO_INIT (struct card_info) { \ + .active_profile = SPA_ID_INVALID, \ +} + +struct selector { + bool (*type) (struct pw_manager_object *o); + uint32_t id; + const char *key; + const char *value; + void (*accumulate) (struct selector *sel, struct pw_manager_object *o); + int32_t score; + struct pw_manager_object *best; +}; + +struct pw_manager_object *select_object(struct pw_manager *m, struct selector *s); +void collect_card_info(struct pw_manager_object *card, struct card_info *info); +void collect_device_info(struct pw_manager_object *device, struct pw_manager_object *card, struct device_info *dev_info, bool monitor); + +#endif diff --git a/src/modules/module-protocol-pulse/volume.c b/src/modules/module-protocol-pulse/volume.c index 4f8cb7c76..4c3d4cc3a 100644 --- a/src/modules/module-protocol-pulse/volume.c +++ b/src/modules/module-protocol-pulse/volume.c @@ -22,6 +22,8 @@ * DEALINGS IN THE SOFTWARE. */ +#include "volume.h" + static inline bool volume_valid(const struct volume *vol) { if (vol->channels == 0 || vol->channels > CHANNELS_MAX) @@ -53,27 +55,6 @@ static inline int volume_compare(struct volume *vol, struct volume *other) return 0; } -struct volume_info { - struct volume volume; - struct channel_map map; - bool mute; - float level; - float base; - uint32_t steps; -#define VOLUME_HW_VOLUME (1<<0) -#define VOLUME_HW_MUTE (1<<1) - uint32_t flags; -}; - -#define VOLUME_INFO_INIT (struct volume_info) { \ - .volume = VOLUME_INIT, \ - .mute = false, \ - .level = 1.0, \ - .base = 1.0, \ - .steps = 256, \ - } - - static int volume_parse_param(const struct spa_pod *param, struct volume_info *info, bool monitor) { struct spa_pod_object *obj = (struct spa_pod_object *) param; diff --git a/src/modules/module-protocol-pulse/volume.h b/src/modules/module-protocol-pulse/volume.h new file mode 100644 index 000000000..95567fda6 --- /dev/null +++ b/src/modules/module-protocol-pulse/volume.h @@ -0,0 +1,51 @@ +/* PipeWire + * + * Copyright © 2020 Wim Taymans + * Copyright © 2021 Sanchayan Maity + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +#ifndef PULSE_SERVER_VOLUME_H +#define PULSE_SERVER_VOLUME_H + +#include "internal.h" + +struct volume_info { + struct volume volume; + struct channel_map map; + bool mute; + float level; + float base; + uint32_t steps; +#define VOLUME_HW_VOLUME (1<<0) +#define VOLUME_HW_MUTE (1<<1) + uint32_t flags; +}; + +#define VOLUME_INFO_INIT (struct volume_info) { \ + .volume = VOLUME_INIT, \ + .mute = false, \ + .level = 1.0, \ + .base = 1.0, \ + .steps = 256, \ + } + +#endif