mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-10-29 05:40:23 -04:00
Cards now has ports directly, and device port has list of profiles
This forms the base for being able to expose all ports of all profiles (even inactive ones) to clients. Signed-off-by: David Henningsson <david.henningsson@canonical.com>
This commit is contained in:
parent
d9685ec85d
commit
0dced7f275
4 changed files with 22 additions and 1 deletions
|
|
@ -34,6 +34,7 @@
|
|||
#include <pulsecore/macro.h>
|
||||
#include <pulsecore/core-util.h>
|
||||
#include <pulsecore/namereg.h>
|
||||
#include <pulsecore/device-port.h>
|
||||
|
||||
#include "card.h"
|
||||
|
||||
|
|
@ -66,7 +67,7 @@ pa_card_new_data* pa_card_new_data_init(pa_card_new_data *data) {
|
|||
|
||||
memset(data, 0, sizeof(*data));
|
||||
data->proplist = pa_proplist_new();
|
||||
|
||||
data->ports = pa_hashmap_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func);
|
||||
return data;
|
||||
}
|
||||
|
||||
|
|
@ -99,6 +100,9 @@ void pa_card_new_data_done(pa_card_new_data *data) {
|
|||
pa_hashmap_free(data->profiles, NULL, NULL);
|
||||
}
|
||||
|
||||
if (data->ports)
|
||||
pa_device_port_hashmap_free(data->ports);
|
||||
|
||||
pa_xfree(data->name);
|
||||
pa_xfree(data->active_profile);
|
||||
}
|
||||
|
|
@ -139,6 +143,8 @@ pa_card *pa_card_new(pa_core *core, pa_card_new_data *data) {
|
|||
* copying it here */
|
||||
c->profiles = data->profiles;
|
||||
data->profiles = NULL;
|
||||
c->ports = data->ports;
|
||||
data->ports = NULL;
|
||||
|
||||
c->active_profile = NULL;
|
||||
c->save_profile = FALSE;
|
||||
|
|
@ -195,6 +201,8 @@ void pa_card_free(pa_card *c) {
|
|||
pa_assert(pa_idxset_isempty(c->sources));
|
||||
pa_idxset_free(c->sources, NULL, NULL);
|
||||
|
||||
pa_device_port_hashmap_free(c->ports);
|
||||
|
||||
if (c->profiles) {
|
||||
pa_card_profile *p;
|
||||
|
||||
|
|
|
|||
|
|
@ -63,6 +63,8 @@ struct pa_card {
|
|||
pa_hashmap *profiles;
|
||||
pa_card_profile *active_profile;
|
||||
|
||||
pa_hashmap *ports;
|
||||
|
||||
pa_bool_t save_profile:1;
|
||||
|
||||
void *userdata;
|
||||
|
|
@ -80,6 +82,8 @@ typedef struct pa_card_new_data {
|
|||
pa_hashmap *profiles;
|
||||
char *active_profile;
|
||||
|
||||
pa_hashmap *ports;
|
||||
|
||||
pa_bool_t namereg_fail:1;
|
||||
|
||||
pa_bool_t save_profile:1;
|
||||
|
|
|
|||
|
|
@ -32,6 +32,8 @@ static void device_port_free(pa_object *o) {
|
|||
pa_assert(p);
|
||||
pa_assert(pa_device_port_refcnt(p) == 0);
|
||||
|
||||
if (p->profiles)
|
||||
pa_hashmap_free(p->profiles, NULL, NULL);
|
||||
pa_xfree(p->name);
|
||||
pa_xfree(p->description);
|
||||
pa_xfree(p);
|
||||
|
|
@ -50,6 +52,9 @@ pa_device_port *pa_device_port_new(const char *name, const char *description, si
|
|||
p->description = pa_xstrdup(description);
|
||||
p->priority = 0;
|
||||
p->available = PA_PORT_AVAILABLE_UNKNOWN;
|
||||
p->profiles = NULL;
|
||||
p->is_input = FALSE;
|
||||
p->is_output = FALSE;
|
||||
|
||||
return p;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -46,6 +46,10 @@ struct pa_device_port {
|
|||
unsigned priority;
|
||||
pa_port_available_t available; /* PA_PORT_AVAILABLE_UNKNOWN, PA_PORT_AVAILABLE_NO or PA_PORT_AVAILABLE_YES */
|
||||
|
||||
pa_hashmap *profiles; /* Can be NULL. Does not own the profiles */
|
||||
pa_bool_t is_input:1;
|
||||
pa_bool_t is_output:1;
|
||||
|
||||
/* .. followed by some implementation specific data */
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue