mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2026-06-13 14:33:03 -04:00
props: add group name PropInfo and Props
Some objects might aggregate properties from multiple other objects. Make sure they are grouped together with the group property. This makes it possible to get per port group properties, for example.
This commit is contained in:
parent
d7f32af545
commit
b93c4f933d
3 changed files with 124 additions and 111 deletions
|
|
@ -25,6 +25,7 @@ extern "C" {
|
||||||
static const struct spa_type_info spa_type_props[] = {
|
static const struct spa_type_info spa_type_props[] = {
|
||||||
{ SPA_PROP_START, SPA_TYPE_Id, SPA_TYPE_INFO_PROPS_BASE, spa_type_param, },
|
{ SPA_PROP_START, SPA_TYPE_Id, SPA_TYPE_INFO_PROPS_BASE, spa_type_param, },
|
||||||
{ SPA_PROP_unknown, SPA_TYPE_None, SPA_TYPE_INFO_PROPS_BASE "unknown", NULL },
|
{ SPA_PROP_unknown, SPA_TYPE_None, SPA_TYPE_INFO_PROPS_BASE "unknown", NULL },
|
||||||
|
{ SPA_PROP_group, SPA_TYPE_String, SPA_TYPE_INFO_PROPS_BASE "group", NULL },
|
||||||
{ SPA_PROP_device, SPA_TYPE_String, SPA_TYPE_INFO_PROPS_BASE "device", NULL },
|
{ SPA_PROP_device, SPA_TYPE_String, SPA_TYPE_INFO_PROPS_BASE "device", NULL },
|
||||||
{ SPA_PROP_deviceName, SPA_TYPE_String, SPA_TYPE_INFO_PROPS_BASE "deviceName", NULL },
|
{ SPA_PROP_deviceName, SPA_TYPE_String, SPA_TYPE_INFO_PROPS_BASE "deviceName", NULL },
|
||||||
{ SPA_PROP_deviceFd, SPA_TYPE_Fd, SPA_TYPE_INFO_PROPS_BASE "deviceFd", NULL },
|
{ SPA_PROP_deviceFd, SPA_TYPE_Fd, SPA_TYPE_INFO_PROPS_BASE "deviceFd", NULL },
|
||||||
|
|
@ -95,6 +96,7 @@ static const struct spa_type_info spa_type_prop_info[] = {
|
||||||
{ SPA_PROP_INFO_container, SPA_TYPE_Id, SPA_TYPE_INFO_PROP_INFO_BASE "container", NULL },
|
{ SPA_PROP_INFO_container, SPA_TYPE_Id, SPA_TYPE_INFO_PROP_INFO_BASE "container", NULL },
|
||||||
{ SPA_PROP_INFO_params, SPA_TYPE_Bool, SPA_TYPE_INFO_PROP_INFO_BASE "params", NULL },
|
{ SPA_PROP_INFO_params, SPA_TYPE_Bool, SPA_TYPE_INFO_PROP_INFO_BASE "params", NULL },
|
||||||
{ SPA_PROP_INFO_description, SPA_TYPE_String, SPA_TYPE_INFO_PROP_INFO_BASE "description", NULL },
|
{ SPA_PROP_INFO_description, SPA_TYPE_String, SPA_TYPE_INFO_PROP_INFO_BASE "description", NULL },
|
||||||
|
{ SPA_PROP_INFO_group, SPA_TYPE_String, SPA_TYPE_INFO_PROP_INFO_BASE "group", NULL },
|
||||||
{ 0, 0, NULL, NULL },
|
{ 0, 0, NULL, NULL },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -19,17 +19,18 @@ extern "C" {
|
||||||
/** properties of SPA_TYPE_OBJECT_PropInfo */
|
/** properties of SPA_TYPE_OBJECT_PropInfo */
|
||||||
enum spa_prop_info {
|
enum spa_prop_info {
|
||||||
SPA_PROP_INFO_START,
|
SPA_PROP_INFO_START,
|
||||||
SPA_PROP_INFO_id, /**< associated id of the property */
|
SPA_PROP_INFO_id, /**< (Id) associated id of the property */
|
||||||
SPA_PROP_INFO_name, /**< name of the property */
|
SPA_PROP_INFO_name, /**< (String) name of the property */
|
||||||
SPA_PROP_INFO_type, /**< type and range/enums of property */
|
SPA_PROP_INFO_type, /**< type and range/enums of property */
|
||||||
SPA_PROP_INFO_labels, /**< labels of property if any, this is a
|
SPA_PROP_INFO_labels, /**< labels of property if any, this is a
|
||||||
* struct with pairs of values, the first one
|
* struct with pairs of values, the first one
|
||||||
* is of the type of the property, the second
|
* is of the type of the property, the second
|
||||||
* one is a string with a user readable label
|
* one is a string with a user readable label
|
||||||
* for the value. */
|
* for the value. */
|
||||||
SPA_PROP_INFO_container, /**< type of container if any (Id) */
|
SPA_PROP_INFO_container, /**< (Id) type of container if any */
|
||||||
SPA_PROP_INFO_params, /**< is part of params property (Bool) */
|
SPA_PROP_INFO_params, /**< (Bool) is part of params property */
|
||||||
SPA_PROP_INFO_description, /**< User readable description */
|
SPA_PROP_INFO_description, /**< (String) User readable description */
|
||||||
|
SPA_PROP_INFO_group, /**< (String) the property group name */
|
||||||
};
|
};
|
||||||
|
|
||||||
/** predefined properties for SPA_TYPE_OBJECT_Props */
|
/** predefined properties for SPA_TYPE_OBJECT_Props */
|
||||||
|
|
@ -37,6 +38,7 @@ enum spa_prop {
|
||||||
SPA_PROP_START,
|
SPA_PROP_START,
|
||||||
|
|
||||||
SPA_PROP_unknown, /**< an unknown property */
|
SPA_PROP_unknown, /**< an unknown property */
|
||||||
|
SPA_PROP_group, /**< (String) the property group name */
|
||||||
|
|
||||||
SPA_PROP_START_Device = 0x100, /**< device related properties */
|
SPA_PROP_START_Device = 0x100, /**< device related properties */
|
||||||
SPA_PROP_device,
|
SPA_PROP_device,
|
||||||
|
|
|
||||||
|
|
@ -575,208 +575,220 @@ static int node_param_prop_info(struct impl *this, uint32_t id, uint32_t index,
|
||||||
struct props *p = &this->props;
|
struct props *p = &this->props;
|
||||||
struct spa_pod_frame f[2];
|
struct spa_pod_frame f[2];
|
||||||
|
|
||||||
|
if (index >= 33) {
|
||||||
|
if (this->filter_graph[0] && this->filter_graph[0]->graph) {
|
||||||
|
return spa_filter_graph_enum_prop_info(this->filter_graph[0]->graph,
|
||||||
|
index - 33, b, param);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
spa_pod_builder_push_object(b, &f[0], SPA_TYPE_OBJECT_PropInfo, id);
|
||||||
|
if (this->group_name[0]) {
|
||||||
|
spa_pod_builder_add(b,
|
||||||
|
SPA_PROP_INFO_group, SPA_POD_String(this->group_name),
|
||||||
|
0);
|
||||||
|
}
|
||||||
switch (index) {
|
switch (index) {
|
||||||
case 0:
|
case 0:
|
||||||
*param = spa_pod_builder_add_object(b,
|
spa_pod_builder_add(b,
|
||||||
SPA_TYPE_OBJECT_PropInfo, id,
|
SPA_PROP_INFO_id, SPA_POD_Id(SPA_PROP_volume),
|
||||||
SPA_PROP_INFO_id, SPA_POD_Id(SPA_PROP_volume),
|
SPA_PROP_INFO_description, SPA_POD_String("Volume"),
|
||||||
SPA_PROP_INFO_description, SPA_POD_String("Volume"),
|
SPA_PROP_INFO_type, SPA_POD_CHOICE_RANGE_Float(p->volume,
|
||||||
SPA_PROP_INFO_type, SPA_POD_CHOICE_RANGE_Float(p->volume,
|
DEFAULT_MIN_VOLUME, DEFAULT_MAX_VOLUME),
|
||||||
DEFAULT_MIN_VOLUME, DEFAULT_MAX_VOLUME));
|
0);
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
*param = spa_pod_builder_add_object(b,
|
spa_pod_builder_add(b,
|
||||||
SPA_TYPE_OBJECT_PropInfo, id,
|
|
||||||
SPA_PROP_INFO_id, SPA_POD_Id(SPA_PROP_mute),
|
SPA_PROP_INFO_id, SPA_POD_Id(SPA_PROP_mute),
|
||||||
SPA_PROP_INFO_description, SPA_POD_String("Mute"),
|
SPA_PROP_INFO_description, SPA_POD_String("Mute"),
|
||||||
SPA_PROP_INFO_type, SPA_POD_CHOICE_Bool(p->channel.mute));
|
SPA_PROP_INFO_type, SPA_POD_CHOICE_Bool(p->channel.mute),
|
||||||
|
0);
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
*param = spa_pod_builder_add_object(b,
|
spa_pod_builder_add(b,
|
||||||
SPA_TYPE_OBJECT_PropInfo, id,
|
|
||||||
SPA_PROP_INFO_id, SPA_POD_Id(SPA_PROP_channelVolumes),
|
SPA_PROP_INFO_id, SPA_POD_Id(SPA_PROP_channelVolumes),
|
||||||
SPA_PROP_INFO_description, SPA_POD_String("Channel Volumes"),
|
SPA_PROP_INFO_description, SPA_POD_String("Channel Volumes"),
|
||||||
SPA_PROP_INFO_type, SPA_POD_CHOICE_RANGE_Float(p->volume,
|
SPA_PROP_INFO_type, SPA_POD_CHOICE_RANGE_Float(p->volume,
|
||||||
DEFAULT_MIN_VOLUME, DEFAULT_MAX_VOLUME),
|
DEFAULT_MIN_VOLUME, DEFAULT_MAX_VOLUME),
|
||||||
SPA_PROP_INFO_container, SPA_POD_Id(SPA_TYPE_Array));
|
SPA_PROP_INFO_container, SPA_POD_Id(SPA_TYPE_Array),
|
||||||
|
0);
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
*param = spa_pod_builder_add_object(b,
|
spa_pod_builder_add(b,
|
||||||
SPA_TYPE_OBJECT_PropInfo, id,
|
|
||||||
SPA_PROP_INFO_id, SPA_POD_Id(SPA_PROP_channelMap),
|
SPA_PROP_INFO_id, SPA_POD_Id(SPA_PROP_channelMap),
|
||||||
SPA_PROP_INFO_description, SPA_POD_String("Channel Map"),
|
SPA_PROP_INFO_description, SPA_POD_String("Channel Map"),
|
||||||
SPA_PROP_INFO_type, SPA_POD_Id(SPA_AUDIO_CHANNEL_UNKNOWN),
|
SPA_PROP_INFO_type, SPA_POD_Id(SPA_AUDIO_CHANNEL_UNKNOWN),
|
||||||
SPA_PROP_INFO_container, SPA_POD_Id(SPA_TYPE_Array));
|
SPA_PROP_INFO_container, SPA_POD_Id(SPA_TYPE_Array),
|
||||||
|
0);
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
*param = spa_pod_builder_add_object(b,
|
spa_pod_builder_add(b,
|
||||||
SPA_TYPE_OBJECT_PropInfo, id,
|
|
||||||
SPA_PROP_INFO_id, SPA_POD_Id(SPA_PROP_monitorMute),
|
SPA_PROP_INFO_id, SPA_POD_Id(SPA_PROP_monitorMute),
|
||||||
SPA_PROP_INFO_description, SPA_POD_String("Monitor Mute"),
|
SPA_PROP_INFO_description, SPA_POD_String("Monitor Mute"),
|
||||||
SPA_PROP_INFO_type, SPA_POD_CHOICE_Bool(p->monitor.mute));
|
SPA_PROP_INFO_type, SPA_POD_CHOICE_Bool(p->monitor.mute),
|
||||||
|
0);
|
||||||
break;
|
break;
|
||||||
case 5:
|
case 5:
|
||||||
*param = spa_pod_builder_add_object(b,
|
spa_pod_builder_add(b,
|
||||||
SPA_TYPE_OBJECT_PropInfo, id,
|
|
||||||
SPA_PROP_INFO_id, SPA_POD_Id(SPA_PROP_monitorVolumes),
|
SPA_PROP_INFO_id, SPA_POD_Id(SPA_PROP_monitorVolumes),
|
||||||
SPA_PROP_INFO_description, SPA_POD_String("Monitor Volumes"),
|
SPA_PROP_INFO_description, SPA_POD_String("Monitor Volumes"),
|
||||||
SPA_PROP_INFO_type, SPA_POD_CHOICE_RANGE_Float(p->volume,
|
SPA_PROP_INFO_type, SPA_POD_CHOICE_RANGE_Float(p->volume,
|
||||||
DEFAULT_MIN_VOLUME, DEFAULT_MAX_VOLUME),
|
DEFAULT_MIN_VOLUME, DEFAULT_MAX_VOLUME),
|
||||||
SPA_PROP_INFO_container, SPA_POD_Id(SPA_TYPE_Array));
|
SPA_PROP_INFO_container, SPA_POD_Id(SPA_TYPE_Array),
|
||||||
|
0);
|
||||||
break;
|
break;
|
||||||
case 6:
|
case 6:
|
||||||
*param = spa_pod_builder_add_object(b,
|
spa_pod_builder_add(b,
|
||||||
SPA_TYPE_OBJECT_PropInfo, id,
|
|
||||||
SPA_PROP_INFO_id, SPA_POD_Id(SPA_PROP_softMute),
|
SPA_PROP_INFO_id, SPA_POD_Id(SPA_PROP_softMute),
|
||||||
SPA_PROP_INFO_description, SPA_POD_String("Soft Mute"),
|
SPA_PROP_INFO_description, SPA_POD_String("Soft Mute"),
|
||||||
SPA_PROP_INFO_type, SPA_POD_CHOICE_Bool(p->soft.mute));
|
SPA_PROP_INFO_type, SPA_POD_CHOICE_Bool(p->soft.mute),
|
||||||
|
0);
|
||||||
break;
|
break;
|
||||||
case 7:
|
case 7:
|
||||||
*param = spa_pod_builder_add_object(b,
|
spa_pod_builder_add(b,
|
||||||
SPA_TYPE_OBJECT_PropInfo, id,
|
|
||||||
SPA_PROP_INFO_id, SPA_POD_Id(SPA_PROP_softVolumes),
|
SPA_PROP_INFO_id, SPA_POD_Id(SPA_PROP_softVolumes),
|
||||||
SPA_PROP_INFO_description, SPA_POD_String("Soft Volumes"),
|
SPA_PROP_INFO_description, SPA_POD_String("Soft Volumes"),
|
||||||
SPA_PROP_INFO_type, SPA_POD_CHOICE_RANGE_Float(p->volume,
|
SPA_PROP_INFO_type, SPA_POD_CHOICE_RANGE_Float(p->volume,
|
||||||
DEFAULT_MIN_VOLUME, DEFAULT_MAX_VOLUME),
|
DEFAULT_MIN_VOLUME, DEFAULT_MAX_VOLUME),
|
||||||
SPA_PROP_INFO_container, SPA_POD_Id(SPA_TYPE_Array));
|
SPA_PROP_INFO_container, SPA_POD_Id(SPA_TYPE_Array),
|
||||||
|
0);
|
||||||
break;
|
break;
|
||||||
case 8:
|
case 8:
|
||||||
*param = spa_pod_builder_add_object(b,
|
spa_pod_builder_add(b,
|
||||||
SPA_TYPE_OBJECT_PropInfo, id,
|
|
||||||
SPA_PROP_INFO_name, SPA_POD_String("monitor.channel-volumes"),
|
SPA_PROP_INFO_name, SPA_POD_String("monitor.channel-volumes"),
|
||||||
SPA_PROP_INFO_description, SPA_POD_String("Monitor channel volume"),
|
SPA_PROP_INFO_description, SPA_POD_String("Monitor channel volume"),
|
||||||
SPA_PROP_INFO_type, SPA_POD_CHOICE_Bool(
|
SPA_PROP_INFO_type, SPA_POD_CHOICE_Bool(
|
||||||
this->monitor_channel_volumes),
|
this->monitor_channel_volumes),
|
||||||
SPA_PROP_INFO_params, SPA_POD_Bool(true));
|
SPA_PROP_INFO_params, SPA_POD_Bool(true),
|
||||||
|
0);
|
||||||
break;
|
break;
|
||||||
case 9:
|
case 9:
|
||||||
*param = spa_pod_builder_add_object(b,
|
spa_pod_builder_add(b,
|
||||||
SPA_TYPE_OBJECT_PropInfo, id,
|
|
||||||
SPA_PROP_INFO_name, SPA_POD_String("channelmix.disable"),
|
SPA_PROP_INFO_name, SPA_POD_String("channelmix.disable"),
|
||||||
SPA_PROP_INFO_description, SPA_POD_String("Disable Channel mixing"),
|
SPA_PROP_INFO_description, SPA_POD_String("Disable Channel mixing"),
|
||||||
SPA_PROP_INFO_type, SPA_POD_CHOICE_Bool(p->mix_disabled),
|
SPA_PROP_INFO_type, SPA_POD_CHOICE_Bool(p->mix_disabled),
|
||||||
SPA_PROP_INFO_params, SPA_POD_Bool(true));
|
SPA_PROP_INFO_params, SPA_POD_Bool(true),
|
||||||
|
0);
|
||||||
break;
|
break;
|
||||||
case 10:
|
case 10:
|
||||||
*param = spa_pod_builder_add_object(b,
|
spa_pod_builder_add(b,
|
||||||
SPA_TYPE_OBJECT_PropInfo, id,
|
|
||||||
SPA_PROP_INFO_name, SPA_POD_String("channelmix.min-volume"),
|
SPA_PROP_INFO_name, SPA_POD_String("channelmix.min-volume"),
|
||||||
SPA_PROP_INFO_description, SPA_POD_String("Minimum volume level"),
|
SPA_PROP_INFO_description, SPA_POD_String("Minimum volume level"),
|
||||||
SPA_PROP_INFO_type, SPA_POD_CHOICE_RANGE_Float(p->min_volume,
|
SPA_PROP_INFO_type, SPA_POD_CHOICE_RANGE_Float(p->min_volume,
|
||||||
DEFAULT_MIN_VOLUME, DEFAULT_MAX_VOLUME),
|
DEFAULT_MIN_VOLUME, DEFAULT_MAX_VOLUME),
|
||||||
SPA_PROP_INFO_params, SPA_POD_Bool(true));
|
SPA_PROP_INFO_params, SPA_POD_Bool(true),
|
||||||
|
0);
|
||||||
break;
|
break;
|
||||||
case 11:
|
case 11:
|
||||||
*param = spa_pod_builder_add_object(b,
|
spa_pod_builder_add(b,
|
||||||
SPA_TYPE_OBJECT_PropInfo, id,
|
|
||||||
SPA_PROP_INFO_name, SPA_POD_String("channelmix.max-volume"),
|
SPA_PROP_INFO_name, SPA_POD_String("channelmix.max-volume"),
|
||||||
SPA_PROP_INFO_description, SPA_POD_String("Maximum volume level"),
|
SPA_PROP_INFO_description, SPA_POD_String("Maximum volume level"),
|
||||||
SPA_PROP_INFO_type, SPA_POD_CHOICE_RANGE_Float(p->max_volume,
|
SPA_PROP_INFO_type, SPA_POD_CHOICE_RANGE_Float(p->max_volume,
|
||||||
DEFAULT_MIN_VOLUME, DEFAULT_MAX_VOLUME),
|
DEFAULT_MIN_VOLUME, DEFAULT_MAX_VOLUME),
|
||||||
SPA_PROP_INFO_params, SPA_POD_Bool(true));
|
SPA_PROP_INFO_params, SPA_POD_Bool(true),
|
||||||
|
0);
|
||||||
break;
|
break;
|
||||||
case 12:
|
case 12:
|
||||||
*param = spa_pod_builder_add_object(b,
|
spa_pod_builder_add(b,
|
||||||
SPA_TYPE_OBJECT_PropInfo, id,
|
|
||||||
SPA_PROP_INFO_name, SPA_POD_String("channelmix.normalize"),
|
SPA_PROP_INFO_name, SPA_POD_String("channelmix.normalize"),
|
||||||
SPA_PROP_INFO_description, SPA_POD_String("Normalize Volumes"),
|
SPA_PROP_INFO_description, SPA_POD_String("Normalize Volumes"),
|
||||||
SPA_PROP_INFO_type, SPA_POD_CHOICE_Bool(
|
SPA_PROP_INFO_type, SPA_POD_CHOICE_Bool(
|
||||||
SPA_FLAG_IS_SET(this->mix.options, CHANNELMIX_OPTION_NORMALIZE)),
|
SPA_FLAG_IS_SET(this->mix.options, CHANNELMIX_OPTION_NORMALIZE)),
|
||||||
SPA_PROP_INFO_params, SPA_POD_Bool(true));
|
SPA_PROP_INFO_params, SPA_POD_Bool(true),
|
||||||
|
0);
|
||||||
break;
|
break;
|
||||||
case 13:
|
case 13:
|
||||||
*param = spa_pod_builder_add_object(b,
|
spa_pod_builder_add(b,
|
||||||
SPA_TYPE_OBJECT_PropInfo, id,
|
|
||||||
SPA_PROP_INFO_name, SPA_POD_String("channelmix.mix-lfe"),
|
SPA_PROP_INFO_name, SPA_POD_String("channelmix.mix-lfe"),
|
||||||
SPA_PROP_INFO_description, SPA_POD_String("Mix LFE into channels"),
|
SPA_PROP_INFO_description, SPA_POD_String("Mix LFE into channels"),
|
||||||
SPA_PROP_INFO_type, SPA_POD_CHOICE_Bool(
|
SPA_PROP_INFO_type, SPA_POD_CHOICE_Bool(
|
||||||
SPA_FLAG_IS_SET(this->mix.options, CHANNELMIX_OPTION_MIX_LFE)),
|
SPA_FLAG_IS_SET(this->mix.options, CHANNELMIX_OPTION_MIX_LFE)),
|
||||||
SPA_PROP_INFO_params, SPA_POD_Bool(true));
|
SPA_PROP_INFO_params, SPA_POD_Bool(true),
|
||||||
|
0);
|
||||||
break;
|
break;
|
||||||
case 14:
|
case 14:
|
||||||
*param = spa_pod_builder_add_object(b,
|
spa_pod_builder_add(b,
|
||||||
SPA_TYPE_OBJECT_PropInfo, id,
|
|
||||||
SPA_PROP_INFO_name, SPA_POD_String("channelmix.upmix"),
|
SPA_PROP_INFO_name, SPA_POD_String("channelmix.upmix"),
|
||||||
SPA_PROP_INFO_description, SPA_POD_String("Enable upmixing"),
|
SPA_PROP_INFO_description, SPA_POD_String("Enable upmixing"),
|
||||||
SPA_PROP_INFO_type, SPA_POD_CHOICE_Bool(
|
SPA_PROP_INFO_type, SPA_POD_CHOICE_Bool(
|
||||||
SPA_FLAG_IS_SET(this->mix.options, CHANNELMIX_OPTION_UPMIX)),
|
SPA_FLAG_IS_SET(this->mix.options, CHANNELMIX_OPTION_UPMIX)),
|
||||||
SPA_PROP_INFO_params, SPA_POD_Bool(true));
|
SPA_PROP_INFO_params, SPA_POD_Bool(true),
|
||||||
|
0);
|
||||||
break;
|
break;
|
||||||
case 15:
|
case 15:
|
||||||
*param = spa_pod_builder_add_object(b,
|
spa_pod_builder_add(b,
|
||||||
SPA_TYPE_OBJECT_PropInfo, id,
|
|
||||||
SPA_PROP_INFO_name, SPA_POD_String("channelmix.lfe-cutoff"),
|
SPA_PROP_INFO_name, SPA_POD_String("channelmix.lfe-cutoff"),
|
||||||
SPA_PROP_INFO_description, SPA_POD_String("LFE cutoff frequency"),
|
SPA_PROP_INFO_description, SPA_POD_String("LFE cutoff frequency"),
|
||||||
SPA_PROP_INFO_type, SPA_POD_CHOICE_RANGE_Float(
|
SPA_PROP_INFO_type, SPA_POD_CHOICE_RANGE_Float(
|
||||||
this->mix.lfe_cutoff, 0.0, 1000.0),
|
this->mix.lfe_cutoff, 0.0, 1000.0),
|
||||||
SPA_PROP_INFO_params, SPA_POD_Bool(true));
|
SPA_PROP_INFO_params, SPA_POD_Bool(true),
|
||||||
|
0);
|
||||||
break;
|
break;
|
||||||
case 16:
|
case 16:
|
||||||
*param = spa_pod_builder_add_object(b,
|
spa_pod_builder_add(b,
|
||||||
SPA_TYPE_OBJECT_PropInfo, id,
|
|
||||||
SPA_PROP_INFO_name, SPA_POD_String("channelmix.fc-cutoff"),
|
SPA_PROP_INFO_name, SPA_POD_String("channelmix.fc-cutoff"),
|
||||||
SPA_PROP_INFO_description, SPA_POD_String("FC cutoff frequency (Hz)"),
|
SPA_PROP_INFO_description, SPA_POD_String("FC cutoff frequency (Hz)"),
|
||||||
SPA_PROP_INFO_type, SPA_POD_CHOICE_RANGE_Float(
|
SPA_PROP_INFO_type, SPA_POD_CHOICE_RANGE_Float(
|
||||||
this->mix.fc_cutoff, 0.0, 48000.0),
|
this->mix.fc_cutoff, 0.0, 48000.0),
|
||||||
SPA_PROP_INFO_params, SPA_POD_Bool(true));
|
SPA_PROP_INFO_params, SPA_POD_Bool(true),
|
||||||
|
0);
|
||||||
break;
|
break;
|
||||||
case 17:
|
case 17:
|
||||||
*param = spa_pod_builder_add_object(b,
|
spa_pod_builder_add(b,
|
||||||
SPA_TYPE_OBJECT_PropInfo, id,
|
|
||||||
SPA_PROP_INFO_name, SPA_POD_String("channelmix.rear-delay"),
|
SPA_PROP_INFO_name, SPA_POD_String("channelmix.rear-delay"),
|
||||||
SPA_PROP_INFO_description, SPA_POD_String("Rear channels delay (ms)"),
|
SPA_PROP_INFO_description, SPA_POD_String("Rear channels delay (ms)"),
|
||||||
SPA_PROP_INFO_type, SPA_POD_CHOICE_RANGE_Float(
|
SPA_PROP_INFO_type, SPA_POD_CHOICE_RANGE_Float(
|
||||||
this->mix.rear_delay, 0.0, 1000.0),
|
this->mix.rear_delay, 0.0, 1000.0),
|
||||||
SPA_PROP_INFO_params, SPA_POD_Bool(true));
|
SPA_PROP_INFO_params, SPA_POD_Bool(true),
|
||||||
|
0);
|
||||||
break;
|
break;
|
||||||
case 18:
|
case 18:
|
||||||
*param = spa_pod_builder_add_object(b,
|
spa_pod_builder_add(b,
|
||||||
SPA_TYPE_OBJECT_PropInfo, id,
|
|
||||||
SPA_PROP_INFO_name, SPA_POD_String("channelmix.stereo-widen"),
|
SPA_PROP_INFO_name, SPA_POD_String("channelmix.stereo-widen"),
|
||||||
SPA_PROP_INFO_description, SPA_POD_String("Stereo widen"),
|
SPA_PROP_INFO_description, SPA_POD_String("Stereo widen"),
|
||||||
SPA_PROP_INFO_type, SPA_POD_CHOICE_RANGE_Float(
|
SPA_PROP_INFO_type, SPA_POD_CHOICE_RANGE_Float(
|
||||||
this->mix.widen, 0.0, 1.0),
|
this->mix.widen, 0.0, 1.0),
|
||||||
SPA_PROP_INFO_params, SPA_POD_Bool(true));
|
SPA_PROP_INFO_params, SPA_POD_Bool(true),
|
||||||
|
0);
|
||||||
break;
|
break;
|
||||||
case 19:
|
case 19:
|
||||||
*param = spa_pod_builder_add_object(b,
|
spa_pod_builder_add(b,
|
||||||
SPA_TYPE_OBJECT_PropInfo, id,
|
|
||||||
SPA_PROP_INFO_name, SPA_POD_String("channelmix.center-level"),
|
SPA_PROP_INFO_name, SPA_POD_String("channelmix.center-level"),
|
||||||
SPA_PROP_INFO_description, SPA_POD_String("Center up/downmix level"),
|
SPA_PROP_INFO_description, SPA_POD_String("Center up/downmix level"),
|
||||||
SPA_PROP_INFO_type, SPA_POD_CHOICE_RANGE_Float(
|
SPA_PROP_INFO_type, SPA_POD_CHOICE_RANGE_Float(
|
||||||
this->mix.center_level, 0.0, 10.0),
|
this->mix.center_level, 0.0, 10.0),
|
||||||
SPA_PROP_INFO_params, SPA_POD_Bool(true));
|
SPA_PROP_INFO_params, SPA_POD_Bool(true),
|
||||||
|
0);
|
||||||
break;
|
break;
|
||||||
case 20:
|
case 20:
|
||||||
*param = spa_pod_builder_add_object(b,
|
spa_pod_builder_add(b,
|
||||||
SPA_TYPE_OBJECT_PropInfo, id,
|
|
||||||
SPA_PROP_INFO_name, SPA_POD_String("channelmix.surround-level"),
|
SPA_PROP_INFO_name, SPA_POD_String("channelmix.surround-level"),
|
||||||
SPA_PROP_INFO_description, SPA_POD_String("Surround up/downmix level"),
|
SPA_PROP_INFO_description, SPA_POD_String("Surround up/downmix level"),
|
||||||
SPA_PROP_INFO_type, SPA_POD_CHOICE_RANGE_Float(
|
SPA_PROP_INFO_type, SPA_POD_CHOICE_RANGE_Float(
|
||||||
this->mix.surround_level, 0.0, 10.0),
|
this->mix.surround_level, 0.0, 10.0),
|
||||||
SPA_PROP_INFO_params, SPA_POD_Bool(true));
|
SPA_PROP_INFO_params, SPA_POD_Bool(true),
|
||||||
|
0);
|
||||||
break;
|
break;
|
||||||
case 21:
|
case 21:
|
||||||
*param = spa_pod_builder_add_object(b,
|
spa_pod_builder_add(b,
|
||||||
SPA_TYPE_OBJECT_PropInfo, id,
|
|
||||||
SPA_PROP_INFO_name, SPA_POD_String("channelmix.lfe-level"),
|
SPA_PROP_INFO_name, SPA_POD_String("channelmix.lfe-level"),
|
||||||
SPA_PROP_INFO_description, SPA_POD_String("LFE up/downmix level"),
|
SPA_PROP_INFO_description, SPA_POD_String("LFE up/downmix level"),
|
||||||
SPA_PROP_INFO_type, SPA_POD_CHOICE_RANGE_Float(
|
SPA_PROP_INFO_type, SPA_POD_CHOICE_RANGE_Float(
|
||||||
this->mix.lfe_level, 0.0, 10.0),
|
this->mix.lfe_level, 0.0, 10.0),
|
||||||
SPA_PROP_INFO_params, SPA_POD_Bool(true));
|
SPA_PROP_INFO_params, SPA_POD_Bool(true),
|
||||||
|
0);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 22:
|
case 22:
|
||||||
*param = spa_pod_builder_add_object(b,
|
spa_pod_builder_add(b,
|
||||||
SPA_TYPE_OBJECT_PropInfo, id,
|
|
||||||
SPA_PROP_INFO_name, SPA_POD_String("channelmix.hilbert-taps"),
|
SPA_PROP_INFO_name, SPA_POD_String("channelmix.hilbert-taps"),
|
||||||
SPA_PROP_INFO_description, SPA_POD_String("Taps for phase shift of rear"),
|
SPA_PROP_INFO_description, SPA_POD_String("Taps for phase shift of rear"),
|
||||||
SPA_PROP_INFO_type, SPA_POD_CHOICE_RANGE_Int(
|
SPA_PROP_INFO_type, SPA_POD_CHOICE_RANGE_Int(
|
||||||
this->mix.hilbert_taps, 0, MAX_TAPS),
|
this->mix.hilbert_taps, 0, MAX_TAPS),
|
||||||
SPA_PROP_INFO_params, SPA_POD_Bool(true));
|
SPA_PROP_INFO_params, SPA_POD_Bool(true),
|
||||||
|
0);
|
||||||
break;
|
break;
|
||||||
case 23:
|
case 23:
|
||||||
spa_pod_builder_push_object(b, &f[0], SPA_TYPE_OBJECT_PropInfo, id);
|
|
||||||
spa_pod_builder_add(b,
|
spa_pod_builder_add(b,
|
||||||
SPA_PROP_INFO_name, SPA_POD_String("channelmix.upmix-method"),
|
SPA_PROP_INFO_name, SPA_POD_String("channelmix.upmix-method"),
|
||||||
SPA_PROP_INFO_description, SPA_POD_String("Upmix method to use"),
|
SPA_PROP_INFO_description, SPA_POD_String("Upmix method to use"),
|
||||||
|
|
@ -792,42 +804,40 @@ static int node_param_prop_info(struct impl *this, uint32_t id, uint32_t index,
|
||||||
spa_pod_builder_string(b, i->description);
|
spa_pod_builder_string(b, i->description);
|
||||||
}
|
}
|
||||||
spa_pod_builder_pop(b, &f[1]);
|
spa_pod_builder_pop(b, &f[1]);
|
||||||
*param = spa_pod_builder_pop(b, &f[0]);
|
|
||||||
break;
|
break;
|
||||||
case 24:
|
case 24:
|
||||||
*param = spa_pod_builder_add_object(b,
|
spa_pod_builder_add(b,
|
||||||
SPA_TYPE_OBJECT_PropInfo, id,
|
|
||||||
SPA_PROP_INFO_id, SPA_POD_Id(SPA_PROP_rate),
|
SPA_PROP_INFO_id, SPA_POD_Id(SPA_PROP_rate),
|
||||||
SPA_PROP_INFO_description, SPA_POD_String("Rate scaler"),
|
SPA_PROP_INFO_description, SPA_POD_String("Rate scaler"),
|
||||||
SPA_PROP_INFO_type, SPA_POD_CHOICE_RANGE_Double(p->rate, 0.0, 10.0));
|
SPA_PROP_INFO_type, SPA_POD_CHOICE_RANGE_Double(p->rate, 0.0, 10.0),
|
||||||
|
0);
|
||||||
break;
|
break;
|
||||||
case 25:
|
case 25:
|
||||||
*param = spa_pod_builder_add_object(b,
|
spa_pod_builder_add(b,
|
||||||
SPA_TYPE_OBJECT_PropInfo, id,
|
|
||||||
SPA_PROP_INFO_id, SPA_POD_Id(SPA_PROP_quality),
|
SPA_PROP_INFO_id, SPA_POD_Id(SPA_PROP_quality),
|
||||||
SPA_PROP_INFO_name, SPA_POD_String("resample.quality"),
|
SPA_PROP_INFO_name, SPA_POD_String("resample.quality"),
|
||||||
SPA_PROP_INFO_description, SPA_POD_String("Resample Quality"),
|
SPA_PROP_INFO_description, SPA_POD_String("Resample Quality"),
|
||||||
SPA_PROP_INFO_type, SPA_POD_CHOICE_RANGE_Int(p->resample_quality, 0, 14),
|
SPA_PROP_INFO_type, SPA_POD_CHOICE_RANGE_Int(p->resample_quality, 0, 14),
|
||||||
SPA_PROP_INFO_params, SPA_POD_Bool(true));
|
SPA_PROP_INFO_params, SPA_POD_Bool(true),
|
||||||
|
0);
|
||||||
break;
|
break;
|
||||||
case 26:
|
case 26:
|
||||||
*param = spa_pod_builder_add_object(b,
|
spa_pod_builder_add(b,
|
||||||
SPA_TYPE_OBJECT_PropInfo, id,
|
|
||||||
SPA_PROP_INFO_name, SPA_POD_String("resample.disable"),
|
SPA_PROP_INFO_name, SPA_POD_String("resample.disable"),
|
||||||
SPA_PROP_INFO_description, SPA_POD_String("Disable Resampling"),
|
SPA_PROP_INFO_description, SPA_POD_String("Disable Resampling"),
|
||||||
SPA_PROP_INFO_type, SPA_POD_CHOICE_Bool(p->resample_disabled),
|
SPA_PROP_INFO_type, SPA_POD_CHOICE_Bool(p->resample_disabled),
|
||||||
SPA_PROP_INFO_params, SPA_POD_Bool(true));
|
SPA_PROP_INFO_params, SPA_POD_Bool(true),
|
||||||
|
0);
|
||||||
break;
|
break;
|
||||||
case 27:
|
case 27:
|
||||||
*param = spa_pod_builder_add_object(b,
|
spa_pod_builder_add(b,
|
||||||
SPA_TYPE_OBJECT_PropInfo, id,
|
|
||||||
SPA_PROP_INFO_name, SPA_POD_String("dither.noise"),
|
SPA_PROP_INFO_name, SPA_POD_String("dither.noise"),
|
||||||
SPA_PROP_INFO_description, SPA_POD_String("Add noise bits"),
|
SPA_PROP_INFO_description, SPA_POD_String("Add noise bits"),
|
||||||
SPA_PROP_INFO_type, SPA_POD_CHOICE_RANGE_Int(this->dir[1].conv.noise_bits, 0, 16),
|
SPA_PROP_INFO_type, SPA_POD_CHOICE_RANGE_Int(this->dir[1].conv.noise_bits, 0, 16),
|
||||||
SPA_PROP_INFO_params, SPA_POD_Bool(true));
|
SPA_PROP_INFO_params, SPA_POD_Bool(true),
|
||||||
|
0);
|
||||||
break;
|
break;
|
||||||
case 28:
|
case 28:
|
||||||
spa_pod_builder_push_object(b, &f[0], SPA_TYPE_OBJECT_PropInfo, id);
|
|
||||||
spa_pod_builder_add(b,
|
spa_pod_builder_add(b,
|
||||||
SPA_PROP_INFO_name, SPA_POD_String("dither.method"),
|
SPA_PROP_INFO_name, SPA_POD_String("dither.method"),
|
||||||
SPA_PROP_INFO_description, SPA_POD_String("The dithering method"),
|
SPA_PROP_INFO_description, SPA_POD_String("The dithering method"),
|
||||||
|
|
@ -842,47 +852,41 @@ static int node_param_prop_info(struct impl *this, uint32_t id, uint32_t index,
|
||||||
spa_pod_builder_string(b, i->description);
|
spa_pod_builder_string(b, i->description);
|
||||||
}
|
}
|
||||||
spa_pod_builder_pop(b, &f[1]);
|
spa_pod_builder_pop(b, &f[1]);
|
||||||
*param = spa_pod_builder_pop(b, &f[0]);
|
|
||||||
break;
|
break;
|
||||||
case 29:
|
case 29:
|
||||||
*param = spa_pod_builder_add_object(b,
|
spa_pod_builder_add(b,
|
||||||
SPA_TYPE_OBJECT_PropInfo, id,
|
|
||||||
SPA_PROP_INFO_name, SPA_POD_String("debug.wav-path"),
|
SPA_PROP_INFO_name, SPA_POD_String("debug.wav-path"),
|
||||||
SPA_PROP_INFO_description, SPA_POD_String("Path to WAV file"),
|
SPA_PROP_INFO_description, SPA_POD_String("Path to WAV file"),
|
||||||
SPA_PROP_INFO_type, SPA_POD_String(p->wav_path),
|
SPA_PROP_INFO_type, SPA_POD_String(p->wav_path),
|
||||||
SPA_PROP_INFO_params, SPA_POD_Bool(true));
|
SPA_PROP_INFO_params, SPA_POD_Bool(true),
|
||||||
|
0);
|
||||||
break;
|
break;
|
||||||
case 30:
|
case 30:
|
||||||
*param = spa_pod_builder_add_object(b,
|
spa_pod_builder_add(b,
|
||||||
SPA_TYPE_OBJECT_PropInfo, id,
|
|
||||||
SPA_PROP_INFO_name, SPA_POD_String("channelmix.lock-volumes"),
|
SPA_PROP_INFO_name, SPA_POD_String("channelmix.lock-volumes"),
|
||||||
SPA_PROP_INFO_description, SPA_POD_String("Disable volume updates"),
|
SPA_PROP_INFO_description, SPA_POD_String("Disable volume updates"),
|
||||||
SPA_PROP_INFO_type, SPA_POD_CHOICE_Bool(p->lock_volumes),
|
SPA_PROP_INFO_type, SPA_POD_CHOICE_Bool(p->lock_volumes),
|
||||||
SPA_PROP_INFO_params, SPA_POD_Bool(true));
|
SPA_PROP_INFO_params, SPA_POD_Bool(true),
|
||||||
|
0);
|
||||||
break;
|
break;
|
||||||
case 31:
|
case 31:
|
||||||
*param = spa_pod_builder_add_object(b,
|
spa_pod_builder_add(b,
|
||||||
SPA_TYPE_OBJECT_PropInfo, id,
|
|
||||||
SPA_PROP_INFO_name, SPA_POD_String("audioconvert.filter-graph.disable"),
|
SPA_PROP_INFO_name, SPA_POD_String("audioconvert.filter-graph.disable"),
|
||||||
SPA_PROP_INFO_description, SPA_POD_String("Disable Filter graph updates"),
|
SPA_PROP_INFO_description, SPA_POD_String("Disable Filter graph updates"),
|
||||||
SPA_PROP_INFO_type, SPA_POD_CHOICE_Bool(p->filter_graph_disabled),
|
SPA_PROP_INFO_type, SPA_POD_CHOICE_Bool(p->filter_graph_disabled),
|
||||||
SPA_PROP_INFO_params, SPA_POD_Bool(true));
|
SPA_PROP_INFO_params, SPA_POD_Bool(true),
|
||||||
|
0);
|
||||||
break;
|
break;
|
||||||
case 32:
|
case 32:
|
||||||
*param = spa_pod_builder_add_object(b,
|
spa_pod_builder_add(b,
|
||||||
SPA_TYPE_OBJECT_PropInfo, id,
|
|
||||||
SPA_PROP_INFO_name, SPA_POD_String("audioconvert.filter-graph.N"),
|
SPA_PROP_INFO_name, SPA_POD_String("audioconvert.filter-graph.N"),
|
||||||
SPA_PROP_INFO_description, SPA_POD_String("A filter graph to load"),
|
SPA_PROP_INFO_description, SPA_POD_String("A filter graph to load"),
|
||||||
SPA_PROP_INFO_type, SPA_POD_String(""),
|
SPA_PROP_INFO_type, SPA_POD_String(""),
|
||||||
SPA_PROP_INFO_params, SPA_POD_Bool(true));
|
SPA_PROP_INFO_params, SPA_POD_Bool(true),
|
||||||
|
0);
|
||||||
break;
|
break;
|
||||||
default:
|
|
||||||
if (this->filter_graph[0] && this->filter_graph[0]->graph) {
|
|
||||||
return spa_filter_graph_enum_prop_info(this->filter_graph[0]->graph,
|
|
||||||
index - 33, b, param);
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
*param = spa_pod_builder_pop(b, &f[0]);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -897,6 +901,11 @@ static int node_param_props(struct impl *this, uint32_t id, uint32_t index,
|
||||||
case 0:
|
case 0:
|
||||||
spa_pod_builder_push_object(b, &f[0],
|
spa_pod_builder_push_object(b, &f[0],
|
||||||
SPA_TYPE_OBJECT_Props, id);
|
SPA_TYPE_OBJECT_Props, id);
|
||||||
|
if (this->group_name[0]) {
|
||||||
|
spa_pod_builder_add(b,
|
||||||
|
SPA_PROP_group, SPA_POD_String(this->group_name),
|
||||||
|
0);
|
||||||
|
}
|
||||||
spa_pod_builder_add(b,
|
spa_pod_builder_add(b,
|
||||||
SPA_PROP_volume, SPA_POD_Float(p->volume),
|
SPA_PROP_volume, SPA_POD_Float(p->volume),
|
||||||
SPA_PROP_mute, SPA_POD_Bool(p->channel.mute),
|
SPA_PROP_mute, SPA_POD_Bool(p->channel.mute),
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue