props: use macro for property alternatives

This commit is contained in:
Wim Taymans 2018-02-20 09:32:40 +01:00
parent f039238288
commit 0e5a1b6327
15 changed files with 123 additions and 107 deletions

View file

@ -595,6 +595,10 @@ static inline void *spa_pod_builder_add(struct spa_pod_builder *builder, const c
#define SPA_POD_PROP(key,spec,type,value,...) \ #define SPA_POD_PROP(key,spec,type,value,...) \
":", key, spec, value, ##__VA_ARGS__ ":", key, spec, value, ##__VA_ARGS__
#define SPA_POD_PROP_MIN_MAX(min,max) 2,(min),(max)
#define SPA_POD_PROP_STEP(min,max,step) 3,(min),(max),(step)
#define SPA_POD_PROP_ENUM(n_vals,...) (n_vals),__VA_ARGS__
#define spa_pod_builder_object(b,id,type,...) \ #define spa_pod_builder_object(b,id,type,...) \
spa_pod_builder_add(b, SPA_POD_OBJECT(id,type,##__VA_ARGS__), NULL) spa_pod_builder_add(b, SPA_POD_OBJECT(id,type,##__VA_ARGS__), NULL)

View file

@ -106,7 +106,7 @@ static int impl_node_enum_params(struct spa_node *node,
":", t->param.propId, "I", t->prop_min_latency, ":", t->param.propId, "I", t->prop_min_latency,
":", t->param.propName, "s", "The minimum latency", ":", t->param.propName, "s", "The minimum latency",
":", t->param.propType, "ir", p->min_latency, ":", t->param.propType, "ir", p->min_latency,
2, 1, INT32_MAX); SPA_POD_PROP_MIN_MAX(1, INT32_MAX));
break; break;
case 4: case 4:
param = spa_pod_builder_object(&b, param = spa_pod_builder_object(&b,
@ -114,7 +114,7 @@ static int impl_node_enum_params(struct spa_node *node,
":", t->param.propId, "I", t->prop_max_latency, ":", t->param.propId, "I", t->prop_max_latency,
":", t->param.propName, "s", "The maximum latency", ":", t->param.propName, "s", "The maximum latency",
":", t->param.propType, "ir", p->max_latency, ":", t->param.propType, "ir", p->max_latency,
2, 1, INT32_MAX); SPA_POD_PROP_MIN_MAX(1, INT32_MAX));
break; break;
default: default:
return 0; return 0;
@ -350,12 +350,13 @@ impl_node_port_enum_params(struct spa_node *node,
param = spa_pod_builder_object(&b, param = spa_pod_builder_object(&b,
id, t->param_buffers.Buffers, id, t->param_buffers.Buffers,
":", t->param_buffers.size, "iru", this->props.max_latency * this->frame_size, ":", t->param_buffers.size, "iru", this->props.max_latency *
2, this->props.min_latency * this->frame_size, this->frame_size,
INT32_MAX, SPA_POD_PROP_MIN_MAX(this->props.min_latency * this->frame_size,
INT32_MAX),
":", t->param_buffers.stride, "i", 0, ":", t->param_buffers.stride, "i", 0,
":", t->param_buffers.buffers, "ir", 1, ":", t->param_buffers.buffers, "ir", 1,
2, 1, MAX_BUFFERS, SPA_POD_PROP_MIN_MAX(1, MAX_BUFFERS),
":", t->param_buffers.align, "i", 16); ":", t->param_buffers.align, "i", 16);
} }
else if (id == t->param.idMeta) { else if (id == t->param.idMeta) {

View file

@ -106,7 +106,7 @@ static int impl_node_enum_params(struct spa_node *node,
":", t->param.propId, "I", t->prop_min_latency, ":", t->param.propId, "I", t->prop_min_latency,
":", t->param.propName, "s", "The minimum latency", ":", t->param.propName, "s", "The minimum latency",
":", t->param.propType, "ir", p->min_latency, ":", t->param.propType, "ir", p->min_latency,
2, 1, INT32_MAX); SPA_POD_PROP_MIN_MAX(1, INT32_MAX));
break; break;
default: default:
return 0; return 0;
@ -369,7 +369,7 @@ impl_node_port_enum_params(struct spa_node *node,
":", t->param_buffers.size, "i", this->props.min_latency * this->frame_size, ":", t->param_buffers.size, "i", this->props.min_latency * this->frame_size,
":", t->param_buffers.stride, "i", 0, ":", t->param_buffers.stride, "i", 0,
":", t->param_buffers.buffers, "ir", 2, ":", t->param_buffers.buffers, "ir", 2,
2, 1, 32, SPA_POD_PROP_MIN_MAX(1, MAX_BUFFERS),
":", t->param_buffers.align, "i", 16); ":", t->param_buffers.align, "i", 16);
} }
else if (id == t->param.idMeta) { else if (id == t->param.idMeta) {

View file

@ -384,12 +384,12 @@ static int port_enum_formats(struct spa_node *node,
"I", t->media_type.audio, "I", t->media_type.audio,
"I", t->media_subtype.raw, "I", t->media_subtype.raw,
":", t->format_audio.format, "Ieu", t->audio_format.S16, ":", t->format_audio.format, "Ieu", t->audio_format.S16,
2, t->audio_format.S16, SPA_POD_PROP_ENUM(2, t->audio_format.S16,
t->audio_format.F32, t->audio_format.F32),
":", t->format_audio.rate, "iru", 44100, ":", t->format_audio.rate, "iru", 44100,
2, 1, INT32_MAX, SPA_POD_PROP_MIN_MAX(1, INT32_MAX),
":", t->format_audio.channels, "iru", 2, ":", t->format_audio.channels, "iru", 2,
2, 1, INT32_MAX); SPA_POD_PROP_MIN_MAX(1, INT32_MAX));
} }
break; break;
default: default:
@ -486,11 +486,10 @@ impl_node_port_enum_params(struct spa_node *node,
param = spa_pod_builder_object(&b, param = spa_pod_builder_object(&b,
id, t->param_buffers.Buffers, id, t->param_buffers.Buffers,
":", t->param_buffers.size, "iru", 1024 * this->bpf, ":", t->param_buffers.size, "iru", 1024 * this->bpf,
2, 16 * this->bpf, SPA_POD_PROP_MIN_MAX(16 * this->bpf, INT32_MAX / this->bpf),
INT32_MAX / this->bpf,
":", t->param_buffers.stride, "i", 0, ":", t->param_buffers.stride, "i", 0,
":", t->param_buffers.buffers, "iru", 1, ":", t->param_buffers.buffers, "iru", 1,
2, 1, MAX_BUFFERS, SPA_POD_PROP_MIN_MAX(1, MAX_BUFFERS),
":", t->param_buffers.align, "i", 16); ":", t->param_buffers.align, "i", 16);
} }
else if (id == t->param.idMeta) { else if (id == t->param.idMeta) {
@ -513,7 +512,7 @@ impl_node_port_enum_params(struct spa_node *node,
case 0: case 0:
param = spa_pod_builder_object(&b, param = spa_pod_builder_object(&b,
id, t->param_io.Buffers, id, t->param_io.Buffers,
":", t->param_io.id, "I", t->io.Buffers, ":", t->param_io.id, "I", t->io.Buffers,
":", t->param_io.size, "i", sizeof(struct spa_io_buffers)); ":", t->param_io.size, "i", sizeof(struct spa_io_buffers));
break; break;
default: default:
@ -525,7 +524,7 @@ impl_node_port_enum_params(struct spa_node *node,
case 0: case 0:
param = spa_pod_builder_object(&b, param = spa_pod_builder_object(&b,
id, t->param_io.Control, id, t->param_io.Control,
":", t->param_io.id, "I", t->io.ControlRange, ":", t->param_io.id, "I", t->io.ControlRange,
":", t->param_io.size, "i", sizeof(struct spa_io_control_range)); ":", t->param_io.size, "i", sizeof(struct spa_io_control_range));
break; break;
default: default:
@ -542,17 +541,18 @@ impl_node_port_enum_params(struct spa_node *node,
case 0: case 0:
param = spa_pod_builder_object(&b, param = spa_pod_builder_object(&b,
id, t->param_io.Prop, id, t->param_io.Prop,
":", t->param_io.id, "I", t->io_prop_volume, ":", t->param_io.id, "I", t->io_prop_volume,
":", t->param_io.size, "i", sizeof(struct spa_pod_double), ":", t->param_io.size, "i", sizeof(struct spa_pod_double),
":", t->param.propId, "I", t->prop_volume, ":", t->param.propId, "I", t->prop_volume,
":", t->param.propType, "dru", p->volume, 2, 0.0, 10.0); ":", t->param.propType, "dru", p->volume,
SPA_POD_PROP_MIN_MAX(0.0, 10.0));
break; break;
case 1: case 1:
param = spa_pod_builder_object(&b, param = spa_pod_builder_object(&b,
id, t->param_io.Prop, id, t->param_io.Prop,
":", t->param_io.id, "I", t->io_prop_mute, ":", t->param_io.id, "I", t->io_prop_mute,
":", t->param_io.size, "i", sizeof(struct spa_pod_bool), ":", t->param_io.size, "i", sizeof(struct spa_pod_bool),
":", t->param.propId, "I", t->prop_mute, ":", t->param.propId, "I", t->prop_mute,
":", t->param.propType, "b", p->mute); ":", t->param.propType, "b", p->mute);
break; break;
default: default:

View file

@ -243,7 +243,7 @@ static int impl_node_enum_params(struct spa_node *node,
":", t->param.propId, "I", t->prop_freq, ":", t->param.propId, "I", t->prop_freq,
":", t->param.propName, "s", "Select the frequency", ":", t->param.propName, "s", "Select the frequency",
":", t->param.propType, "dr", p->freq, ":", t->param.propType, "dr", p->freq,
2, 0.0, 50000000.0); SPA_POD_PROP_MIN_MAX(0.0, 50000000.0));
break; break;
case 3: case 3:
param = spa_pod_builder_object(&b, param = spa_pod_builder_object(&b,
@ -251,7 +251,7 @@ static int impl_node_enum_params(struct spa_node *node,
":", t->param.propId, "I", t->prop_volume, ":", t->param.propId, "I", t->prop_volume,
":", t->param.propName, "s", "Select the volume", ":", t->param.propName, "s", "Select the volume",
":", t->param.propType, "dr", p->volume, ":", t->param.propType, "dr", p->volume,
2, 0.0, 10.0); SPA_POD_PROP_MIN_MAX(0.0, 10.0));
break; break;
default: default:
return 0; return 0;
@ -583,14 +583,14 @@ port_enum_formats(struct impl *this,
"I", t->media_type.audio, "I", t->media_type.audio,
"I", t->media_subtype.raw, "I", t->media_subtype.raw,
":", t->format_audio.format, "Ieu", t->audio_format.S16, ":", t->format_audio.format, "Ieu", t->audio_format.S16,
4, t->audio_format.S16, SPA_POD_PROP_ENUM(4, t->audio_format.S16,
t->audio_format.S32, t->audio_format.S32,
t->audio_format.F32, t->audio_format.F32,
t->audio_format.F64, t->audio_format.F64),
":", t->format_audio.rate, "iru", 44100, ":", t->format_audio.rate, "iru", 44100,
2, 1, INT32_MAX, SPA_POD_PROP_MIN_MAX(1, INT32_MAX),
":", t->format_audio.channels, "iru", 2, ":", t->format_audio.channels, "iru", 2,
2, 1, INT32_MAX); SPA_POD_PROP_MIN_MAX(1, INT32_MAX));
break; break;
default: default:
return 0; return 0;
@ -683,11 +683,10 @@ impl_node_port_enum_params(struct spa_node *node,
param = spa_pod_builder_object(&b, param = spa_pod_builder_object(&b,
id, t->param_buffers.Buffers, id, t->param_buffers.Buffers,
":", t->param_buffers.size, "iru", 1024 * this->bpf, ":", t->param_buffers.size, "iru", 1024 * this->bpf,
2, 16 * this->bpf, SPA_POD_PROP_MIN_MAX(16 * this->bpf, INT32_MAX / this->bpf),
INT32_MAX / this->bpf,
":", t->param_buffers.stride, "i", 0, ":", t->param_buffers.stride, "i", 0,
":", t->param_buffers.buffers, "iru", 1, ":", t->param_buffers.buffers, "iru", 1,
2, 1, 32, SPA_POD_PROP_MIN_MAX(1, MAX_BUFFERS),
":", t->param_buffers.align, "i", 16); ":", t->param_buffers.align, "i", 16);
} }
else if (id == t->param.idMeta) { else if (id == t->param.idMeta) {
@ -710,7 +709,7 @@ impl_node_port_enum_params(struct spa_node *node,
case 0: case 0:
param = spa_pod_builder_object(&b, param = spa_pod_builder_object(&b,
id, t->param_io.Buffers, id, t->param_io.Buffers,
":", t->param_io.id, "I", t->io.Buffers, ":", t->param_io.id, "I", t->io.Buffers,
":", t->param_io.size, "i", sizeof(struct spa_io_buffers)); ":", t->param_io.size, "i", sizeof(struct spa_io_buffers));
break; break;
default: default:
@ -722,7 +721,7 @@ impl_node_port_enum_params(struct spa_node *node,
case 0: case 0:
param = spa_pod_builder_object(&b, param = spa_pod_builder_object(&b,
id, t->param_io.Control, id, t->param_io.Control,
":", t->param_io.id, "I", t->io.ControlRange, ":", t->param_io.id, "I", t->io.ControlRange,
":", t->param_io.size, "i", sizeof(struct spa_io_control_range)); ":", t->param_io.size, "i", sizeof(struct spa_io_control_range));
break; break;
default: default:
@ -736,29 +735,31 @@ impl_node_port_enum_params(struct spa_node *node,
case 0: case 0:
param = spa_pod_builder_object(&b, param = spa_pod_builder_object(&b,
id, t->param_io.Prop, id, t->param_io.Prop,
":", t->param_io.id, "I", t->io_prop_wave, ":", t->param_io.id, "I", t->io_prop_wave,
":", t->param_io.size, "i", sizeof(struct spa_pod_id), ":", t->param_io.size, "i", sizeof(struct spa_pod_id),
":", t->param.propId, "I", t->prop_wave, ":", t->param.propId, "I", t->prop_wave,
":", t->param.propType, "i", p->wave, ":", t->param.propType, "i", p->wave,
":", t->param.propLabels, "[-i", ":", t->param.propLabels, "[-i",
"i", WAVE_SINE, "s", "Sine wave", "i", WAVE_SINE, "s", "Sine wave",
"i", WAVE_SQUARE, "s", "Square wave", "]"); "i", WAVE_SQUARE, "s", "Square wave", "]");
break; break;
case 1: case 1:
param = spa_pod_builder_object(&b, param = spa_pod_builder_object(&b,
id, t->param_io.Prop, id, t->param_io.Prop,
":", t->param_io.id, "I", t->io_prop_freq, ":", t->param_io.id, "I", t->io_prop_freq,
":", t->param_io.size, "i", sizeof(struct spa_pod_double), ":", t->param_io.size, "i", sizeof(struct spa_pod_double),
":", t->param.propId, "I", t->prop_freq, ":", t->param.propId, "I", t->prop_freq,
":", t->param.propType, "dr", p->freq, 2, 0.0, 50000000.0); ":", t->param.propType, "dr", p->freq,
SPA_POD_PROP_MIN_MAX(0.0, 50000000.0));
break; break;
case 2: case 2:
param = spa_pod_builder_object(&b, param = spa_pod_builder_object(&b,
id, t->param_io.Prop, id, t->param_io.Prop,
":", t->param_io.id, "I", t->io_prop_volume, ":", t->param_io.id, "I", t->io_prop_volume,
":", t->param_io.size, "i", sizeof(struct spa_pod_double), ":", t->param_io.size, "i", sizeof(struct spa_pod_double),
":", t->param.propId, "I", t->prop_volume, ":", t->param.propId, "I", t->prop_volume,
":", t->param.propType, "dr", p->volume, 2, 0.0, 10.0); ":", t->param.propType, "dr", p->volume,
SPA_POD_PROP_MIN_MAX(0.0, 10.0));
break; break;
default: default:
return 0; return 0;

View file

@ -233,7 +233,7 @@ static int impl_node_enum_params(struct spa_node *node,
":", t->param.propId, "I", t->prop_min_latency, ":", t->param.propId, "I", t->prop_min_latency,
":", t->param.propName, "s", "The minimum latency", ":", t->param.propName, "s", "The minimum latency",
":", t->param.propType, "ir", p->min_latency, ":", t->param.propType, "ir", p->min_latency,
2, 1, INT32_MAX); SPA_POD_PROP_MIN_MAX(1, INT32_MAX));
break; break;
case 1: case 1:
param = spa_pod_builder_object(&b, param = spa_pod_builder_object(&b,
@ -241,7 +241,7 @@ static int impl_node_enum_params(struct spa_node *node,
":", t->param.propId, "I", t->prop_max_latency, ":", t->param.propId, "I", t->prop_max_latency,
":", t->param.propName, "s", "The maximum latency", ":", t->param.propName, "s", "The maximum latency",
":", t->param.propType, "ir", p->max_latency, ":", t->param.propType, "ir", p->max_latency,
2, 1, INT32_MAX); SPA_POD_PROP_MIN_MAX(1, INT32_MAX));
break; break;
default: default:
return 0; return 0;
@ -1042,12 +1042,13 @@ impl_node_port_enum_params(struct spa_node *node,
param = spa_pod_builder_object(&b, param = spa_pod_builder_object(&b,
id, t->param_buffers.Buffers, id, t->param_buffers.Buffers,
":", t->param_buffers.size, "iru", this->props.min_latency * this->frame_size, ":", t->param_buffers.size, "iru", this->props.min_latency *
2, this->props.min_latency * this->frame_size, this->frame_size,
INT32_MAX, SPA_POD_PROP_MIN_MAX(this->props.min_latency * this->frame_size,
INT32_MAX),
":", t->param_buffers.stride, "i", 0, ":", t->param_buffers.stride, "i", 0,
":", t->param_buffers.buffers, "ir", 2, ":", t->param_buffers.buffers, "ir", 2,
2, 2, MAX_BUFFERS, SPA_POD_PROP_MIN_MAX(2, MAX_BUFFERS),
":", t->param_buffers.align, "i", 16); ":", t->param_buffers.align, "i", 16);
} }
else if (id == t->param.idMeta) { else if (id == t->param.idMeta) {

View file

@ -249,21 +249,21 @@ static int impl_node_enum_params(struct spa_node *node,
case 0: case 0:
param = spa_pod_builder_object(&b, param = spa_pod_builder_object(&b,
id, t->param.PropInfo, id, t->param.PropInfo,
":", t->param.propId, "I", t->prop_device, ":", t->param.propId, "I", t->prop_device,
":", t->param.propName, "s", "The V4L2 device", ":", t->param.propName, "s", "The V4L2 device",
":", t->param.propType, "S", p->device, sizeof(p->device)); ":", t->param.propType, "S", p->device, sizeof(p->device));
break; break;
case 1: case 1:
param = spa_pod_builder_object(&b, param = spa_pod_builder_object(&b,
id, t->param.PropInfo, id, t->param.PropInfo,
":", t->param.propId, "I", t->prop_device_name, ":", t->param.propId, "I", t->prop_device_name,
":", t->param.propName, "s", "The V4L2 device name", ":", t->param.propName, "s", "The V4L2 device name",
":", t->param.propType, "S-r", p->device_name, sizeof(p->device_name)); ":", t->param.propType, "S-r", p->device_name, sizeof(p->device_name));
break; break;
case 2: case 2:
param = spa_pod_builder_object(&b, param = spa_pod_builder_object(&b,
id, t->param.PropInfo, id, t->param.PropInfo,
":", t->param.propId, "I", t->prop_device_fd, ":", t->param.propId, "I", t->prop_device_fd,
":", t->param.propName, "s", "The V4L2 fd", ":", t->param.propName, "s", "The V4L2 fd",
":", t->param.propType, "i-r", p->device_fd); ":", t->param.propType, "i-r", p->device_fd);
break; break;
@ -546,7 +546,7 @@ static int impl_node_port_enum_params(struct spa_node *node,
":", t->param_buffers.size, "i", port->fmt.fmt.pix.sizeimage, ":", t->param_buffers.size, "i", port->fmt.fmt.pix.sizeimage,
":", t->param_buffers.stride, "i", port->fmt.fmt.pix.bytesperline, ":", t->param_buffers.stride, "i", port->fmt.fmt.pix.bytesperline,
":", t->param_buffers.buffers, "iru", MAX_BUFFERS, ":", t->param_buffers.buffers, "iru", MAX_BUFFERS,
2, 2, MAX_BUFFERS, SPA_POD_PROP_MIN_MAX(2, MAX_BUFFERS),
":", t->param_buffers.align, "i", 16); ":", t->param_buffers.align, "i", 16);
} }
else if (id == t->param.idMeta) { else if (id == t->param.idMeta) {

View file

@ -509,14 +509,14 @@ static int port_enum_formats(struct spa_node *node,
"I", t->media_type.video, "I", t->media_type.video,
"I", t->media_subtype.raw, "I", t->media_subtype.raw,
":", t->format_video.format, "Ieu", t->video_format.RGB, ":", t->format_video.format, "Ieu", t->video_format.RGB,
2, t->video_format.RGB, SPA_POD_PROP_ENUM(2, t->video_format.RGB,
t->video_format.UYVY, t->video_format.UYVY),
":", t->format_video.size, "Rru", &SPA_RECTANGLE(320, 240), ":", t->format_video.size, "Rru", &SPA_RECTANGLE(320, 240),
2, &SPA_RECTANGLE(1, 1), SPA_POD_PROP_MIN_MAX(&SPA_RECTANGLE(1, 1),
&SPA_RECTANGLE(INT32_MAX, INT32_MAX), &SPA_RECTANGLE(INT32_MAX, INT32_MAX)),
":", t->format_video.framerate, "Fru", &SPA_FRACTION(25,1), ":", t->format_video.framerate, "Fru", &SPA_FRACTION(25,1),
2, &SPA_FRACTION(0, 1), SPA_POD_PROP_MIN_MAX(&SPA_FRACTION(0, 1),
&SPA_FRACTION(INT32_MAX, 1)); &SPA_FRACTION(INT32_MAX, 1)));
break; break;
default: default:
return 0; return 0;
@ -610,7 +610,7 @@ impl_node_port_enum_params(struct spa_node *node,
":", t->param_buffers.size, "i", this->stride * raw_info->size.height, ":", t->param_buffers.size, "i", this->stride * raw_info->size.height,
":", t->param_buffers.stride, "i", this->stride, ":", t->param_buffers.stride, "i", this->stride,
":", t->param_buffers.buffers, "ir", 2, ":", t->param_buffers.buffers, "ir", 2,
2, 1, 32, SPA_POD_PROP_MIN_MAX(1, MAX_BUFFERS),
":", t->param_buffers.align, "i", 16); ":", t->param_buffers.align, "i", 16);
} }
else if (id == t->param.idMeta) { else if (id == t->param.idMeta) {

View file

@ -186,7 +186,8 @@ static int impl_node_enum_params(struct spa_node *node,
id, t->param.PropInfo, id, t->param.PropInfo,
":", t->param.propId, "I", t->prop_volume, ":", t->param.propId, "I", t->prop_volume,
":", t->param.propName, "s", "The volume", ":", t->param.propName, "s", "The volume",
":", t->param.propType, "dr", p->volume, 2, 0.0, 10.0); ":", t->param.propType, "dr", p->volume,
SPA_POD_PROP_MIN_MAX(0.0, 10.0));
break; break;
case 1: case 1:
param = spa_pod_builder_object(&b, param = spa_pod_builder_object(&b,
@ -375,10 +376,12 @@ static int port_enum_formats(struct spa_node *node,
"I", t->media_type.audio, "I", t->media_type.audio,
"I", t->media_subtype.raw, "I", t->media_subtype.raw,
":", t->format_audio.format, "Ieu", t->audio_format.S16, ":", t->format_audio.format, "Ieu", t->audio_format.S16,
2, t->audio_format.S16, SPA_POD_PROP_ENUM(2, t->audio_format.S16,
t->audio_format.S32, t->audio_format.S32),
":", t->format_audio.rate, "iru", 44100, 2, 1, INT32_MAX, ":", t->format_audio.rate, "iru", 44100,
":", t->format_audio.channels,"iru", 2, 2, 1, INT32_MAX); SPA_POD_PROP_MIN_MAX(1, INT32_MAX),
":", t->format_audio.channels,"iru", 2,
SPA_POD_PROP_MIN_MAX(1, INT32_MAX));
break; break;
default: default:
return 0; return 0;
@ -476,11 +479,10 @@ impl_node_port_enum_params(struct spa_node *node,
param = spa_pod_builder_object(&b, param = spa_pod_builder_object(&b,
id, t->param_buffers.Buffers, id, t->param_buffers.Buffers,
":", t->param_buffers.size, "iru", 1024 * this->bpf, ":", t->param_buffers.size, "iru", 1024 * this->bpf,
2, 16 * this->bpf, SPA_POD_PROP_MIN_MAX(16 * this->bpf, INT32_MAX / this->bpf),
INT32_MAX / this->bpf,
":", t->param_buffers.stride, "i", 0, ":", t->param_buffers.stride, "i", 0,
":", t->param_buffers.buffers, "iru", 2, ":", t->param_buffers.buffers, "iru", 2,
2, 1, MAX_BUFFERS, SPA_POD_PROP_MIN_MAX(1, MAX_BUFFERS),
":", t->param_buffers.align, "i", 16); ":", t->param_buffers.align, "i", 16);
} }
else if (id == t->param.idMeta) { else if (id == t->param.idMeta) {

View file

@ -314,12 +314,12 @@ static int port_enum_formats(struct spa_node *node,
spa_pod_builder_pop(builder); spa_pod_builder_pop(builder);
spa_pod_builder_add(builder, spa_pod_builder_add(builder,
":", d->type.format_video.size, "Rru", &SPA_RECTANGLE(WIDTH, HEIGHT), ":", d->type.format_video.size, "Rru", &SPA_RECTANGLE(WIDTH, HEIGHT),
2, &SPA_RECTANGLE(1,1), SPA_POD_PROP_MIN_MAX(&SPA_RECTANGLE(1,1),
&SPA_RECTANGLE(info.max_texture_width, &SPA_RECTANGLE(info.max_texture_width,
info.max_texture_height), info.max_texture_height)),
":", d->type.format_video.framerate, "Fru", &SPA_FRACTION(25,1), ":", d->type.format_video.framerate, "Fru", &SPA_FRACTION(25,1),
2, &SPA_FRACTION(0,1), SPA_POD_PROP_MIN_MAX(&SPA_FRACTION(0,1),
&SPA_FRACTION(30,1), &SPA_FRACTION(30,1)),
NULL); NULL);
*result = spa_pod_builder_pop(builder); *result = spa_pod_builder_pop(builder);
@ -393,7 +393,7 @@ static int impl_port_enum_params(struct spa_node *node,
":", t->param_buffers.size, "i", d->stride * d->format.size.height, ":", t->param_buffers.size, "i", d->stride * d->format.size.height,
":", t->param_buffers.stride, "i", d->stride, ":", t->param_buffers.stride, "i", d->stride,
":", t->param_buffers.buffers, "iru", 32, ":", t->param_buffers.buffers, "iru", 32,
2, 2, 32, SPA_POD_PROP_MIN_MAX(2, 32),
":", t->param_buffers.align, "i", 16); ":", t->param_buffers.align, "i", 16);
} }
else if (id == t->param.idMeta) { else if (id == t->param.idMeta) {
@ -415,7 +415,8 @@ static int impl_port_enum_params(struct spa_node *node,
":", t->param_io.id, "I", d->type.io_prop_param, ":", t->param_io.id, "I", d->type.io_prop_param,
":", t->param_io.size, "i", sizeof(struct spa_pod_double), ":", t->param_io.size, "i", sizeof(struct spa_pod_double),
":", t->param.propId, "I", d->type.prop_param, ":", t->param.propId, "I", d->type.prop_param,
":", t->param.propType, "dru", p->param, 2, 0.0, 10.0); ":", t->param.propType, "dru", p->param,
SPA_POD_PROP_MIN_MAX(0.0, 10.0));
break; break;
default: default:
return 0; return 0;

View file

@ -204,8 +204,10 @@ static int port_enum_formats(struct spa_node *node,
"I", d->type.media_type.audio, "I", d->type.media_type.audio,
"I", d->type.media_subtype.raw, "I", d->type.media_subtype.raw,
":", d->type.format_audio.format, "I", d->type.audio_format.S16, ":", d->type.format_audio.format, "I", d->type.audio_format.S16,
":", d->type.format_audio.channels, "iru", 2, 2, 1, INT32_MAX, ":", d->type.format_audio.channels, "iru", 2,
":", d->type.format_audio.rate, "iru", 44100, 2, 1, INT32_MAX); SPA_POD_PROP_MIN_MAX(1, INT32_MAX),
":", d->type.format_audio.rate, "iru", 44100,
SPA_POD_PROP_MIN_MAX(1, INT32_MAX));
(*index)++; (*index)++;
@ -279,10 +281,10 @@ static int impl_port_enum_params(struct spa_node *node,
param = spa_pod_builder_object(builder, param = spa_pod_builder_object(builder,
id, t->param_buffers.Buffers, id, t->param_buffers.Buffers,
":", t->param_buffers.size, "iru", 256, ":", t->param_buffers.size, "iru", 256,
2, 32, 4096, SPA_POD_PROP_MIN_MAX(32, 4096),
":", t->param_buffers.stride, "i", 0, ":", t->param_buffers.stride, "i", 0,
":", t->param_buffers.buffers, "iru", 1, ":", t->param_buffers.buffers, "iru", 1,
2, 1, 32, SPA_POD_PROP_MIN_MAX(1, 32),
":", t->param_buffers.align, "i", 16); ":", t->param_buffers.align, "i", 16);
} }
else if (id == t->param.idMeta) { else if (id == t->param.idMeta) {
@ -319,7 +321,8 @@ static int impl_port_enum_params(struct spa_node *node,
":", t->param_io.id, "I", d->type.io_prop_volume, ":", t->param_io.id, "I", d->type.io_prop_volume,
":", t->param_io.size, "i", sizeof(struct spa_pod_double), ":", t->param_io.size, "i", sizeof(struct spa_pod_double),
":", t->param.propId, "I", d->type.prop_volume, ":", t->param.propId, "I", d->type.prop_volume,
":", t->param.propType, "dru", p->volume, 2, 0.0, 10.0); ":", t->param.propType, "dru", p->volume,
SPA_POD_PROP_MIN_MAX(0.0, 10.0));
break; break;
default: default:
return 0; return 0;

View file

@ -272,12 +272,12 @@ static int port_enum_formats(struct spa_node *node,
spa_pod_builder_add(builder, spa_pod_builder_add(builder,
":", d->type.format_video.size, "Rru", &SPA_RECTANGLE(WIDTH, HEIGHT), ":", d->type.format_video.size, "Rru", &SPA_RECTANGLE(WIDTH, HEIGHT),
2, &SPA_RECTANGLE(1,1), SPA_POD_PROP_MIN_MAX(&SPA_RECTANGLE(1,1),
&SPA_RECTANGLE(info.max_texture_width, &SPA_RECTANGLE(info.max_texture_width,
info.max_texture_height), info.max_texture_height)),
":", d->type.format_video.framerate, "Fru", &SPA_FRACTION(25,1), ":", d->type.format_video.framerate, "Fru", &SPA_FRACTION(25,1),
2, &SPA_FRACTION(0,1), SPA_POD_PROP_MIN_MAX(&SPA_FRACTION(0,1),
&SPA_FRACTION(30,1), &SPA_FRACTION(30,1)),
NULL); NULL);
*result = spa_pod_builder_pop(builder); *result = spa_pod_builder_pop(builder);
@ -308,7 +308,7 @@ static int impl_port_enum_params(struct spa_node *node,
":", t->param_buffers.size, "i", d->stride * d->format.size.height, ":", t->param_buffers.size, "i", d->stride * d->format.size.height,
":", t->param_buffers.stride, "i", d->stride, ":", t->param_buffers.stride, "i", d->stride,
":", t->param_buffers.buffers, "iru", 2, ":", t->param_buffers.buffers, "iru", 2,
2, 1, 32, SPA_POD_PROP_MIN_MAX(1, 32),
":", t->param_buffers.align, "i", 16); ":", t->param_buffers.align, "i", 16);
} }
else if (id == t->param.idMeta) { else if (id == t->param.idMeta) {

View file

@ -275,9 +275,9 @@ on_stream_format_changed(void *_data, struct spa_pod *format)
t->param.idBuffers, t->param_buffers.Buffers, t->param.idBuffers, t->param_buffers.Buffers,
":", t->param_buffers.size, "i", data->stride * data->format.size.height, ":", t->param_buffers.size, "i", data->stride * data->format.size.height,
":", t->param_buffers.stride, "i", data->stride, ":", t->param_buffers.stride, "i", data->stride,
":", t->param_buffers.buffers, "iru", 32, ":", t->param_buffers.buffers, "iru", 8,
2, 2, 32, SPA_POD_PROP_MIN_MAX(2, 32),
":", t->param_buffers.align, "i", 16); ":", t->param_buffers.align, "i", 16);
params[1] = spa_pod_builder_object(&b, params[1] = spa_pod_builder_object(&b,
t->param.idMeta, t->param_meta.Meta, t->param.idMeta, t->param_meta.Meta,
@ -346,12 +346,12 @@ static void on_state_changed(void *_data, enum pw_remote_state old, enum pw_remo
spa_pod_builder_pop(&b); spa_pod_builder_pop(&b);
spa_pod_builder_add(&b, spa_pod_builder_add(&b,
":", data->type.format_video.size, "Rru", &SPA_RECTANGLE(WIDTH, HEIGHT), ":", data->type.format_video.size, "Rru", &SPA_RECTANGLE(WIDTH, HEIGHT),
2, &SPA_RECTANGLE(1,1), SPA_POD_PROP_MIN_MAX(&SPA_RECTANGLE(1,1),
&SPA_RECTANGLE(info.max_texture_width, &SPA_RECTANGLE(info.max_texture_width,
info.max_texture_height), info.max_texture_height)),
":", data->type.format_video.framerate, "Fru", &SPA_FRACTION(25,1), ":", data->type.format_video.framerate, "Fru", &SPA_FRACTION(25,1),
2, &SPA_RECTANGLE(0,1), SPA_POD_PROP_MIN_MAX(&SPA_RECTANGLE(0,1),
&SPA_RECTANGLE(30,1), &SPA_RECTANGLE(30,1)),
NULL); NULL);
params[0] = spa_pod_builder_pop(&b); params[0] = spa_pod_builder_pop(&b);

View file

@ -180,7 +180,7 @@ on_stream_format_changed(void *_data, struct spa_pod *format)
":", t->param_buffers.size, "i", data->stride * data->format.size.height, ":", t->param_buffers.size, "i", data->stride * data->format.size.height,
":", t->param_buffers.stride, "i", data->stride, ":", t->param_buffers.stride, "i", data->stride,
":", t->param_buffers.buffers, "iru", 2, ":", t->param_buffers.buffers, "iru", 2,
2, 1, 32, SPA_POD_PROP_MIN_MAX(1, 32),
":", t->param_buffers.align, "i", 16); ":", t->param_buffers.align, "i", 16);
params[1] = spa_pod_builder_object(&b, params[1] = spa_pod_builder_object(&b,
@ -225,8 +225,8 @@ static void on_state_changed(void *_data, enum pw_remote_state old, enum pw_remo
"I", data->type.media_subtype.raw, "I", data->type.media_subtype.raw,
":", data->type.format_video.format, "I", data->type.video_format.RGB, ":", data->type.format_video.format, "I", data->type.video_format.RGB,
":", data->type.format_video.size, "Rru", &SPA_RECTANGLE(320, 240), ":", data->type.format_video.size, "Rru", &SPA_RECTANGLE(320, 240),
2, &SPA_RECTANGLE(1, 1), SPA_POD_PROP_MIN_MAX(&SPA_RECTANGLE(1, 1),
&SPA_RECTANGLE(4096, 4096), &SPA_RECTANGLE(4096, 4096)),
":", data->type.format_video.framerate, "F", &SPA_FRACTION(25, 1)); ":", data->type.format_video.framerate, "F", &SPA_FRACTION(25, 1));
pw_stream_add_listener(data->stream, pw_stream_add_listener(data->stream,

View file

@ -38,9 +38,11 @@
#include "pipewire/type.h" #include "pipewire/type.h"
#include "pipewire/private.h" #include "pipewire/private.h"
#define MAX_PORTS 256
#define NAME "dsp" #define NAME "dsp"
#define MAX_PORTS 256
#define MAX_BUFFERS 8
struct type { struct type {
struct spa_type_media_type media_type; struct spa_type_media_type media_type;
struct spa_type_media_subtype media_subtype; struct spa_type_media_subtype media_subtype;
@ -95,7 +97,7 @@ struct port {
struct spa_io_buffers *io; struct spa_io_buffers *io;
struct buffer buffers[64]; struct buffer buffers[MAX_BUFFERS];
uint32_t n_buffers; uint32_t n_buffers;
struct spa_list queue; struct spa_list queue;
@ -463,7 +465,8 @@ static int port_enum_params(struct spa_node *node,
id, t->param_buffers.Buffers, id, t->param_buffers.Buffers,
":", t->param_buffers.size, "i", n->buffer_size * sizeof(float), ":", t->param_buffers.size, "i", n->buffer_size * sizeof(float),
":", t->param_buffers.stride, "i", 0, ":", t->param_buffers.stride, "i", 0,
":", t->param_buffers.buffers, "ir", 2, 2, 1, 2, ":", t->param_buffers.buffers, "ir", 2,
SPA_POD_PROP_MIN_MAX(1, MAX_BUFFERS),
":", t->param_buffers.align, "i", 16); ":", t->param_buffers.align, "i", 16);
} }
else else