diff --git a/spa/include/spa/pod/builder.h b/spa/include/spa/pod/builder.h index 6876d8d52..191acdff4 100644 --- a/spa/include/spa/pod/builder.h +++ b/spa/include/spa/pod/builder.h @@ -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,...) \ ":", 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,...) \ spa_pod_builder_add(b, SPA_POD_OBJECT(id,type,##__VA_ARGS__), NULL) diff --git a/spa/plugins/alsa/alsa-sink.c b/spa/plugins/alsa/alsa-sink.c index cc681821f..fccd9b966 100644 --- a/spa/plugins/alsa/alsa-sink.c +++ b/spa/plugins/alsa/alsa-sink.c @@ -106,7 +106,7 @@ static int impl_node_enum_params(struct spa_node *node, ":", t->param.propId, "I", t->prop_min_latency, ":", t->param.propName, "s", "The minimum latency", ":", t->param.propType, "ir", p->min_latency, - 2, 1, INT32_MAX); + SPA_POD_PROP_MIN_MAX(1, INT32_MAX)); break; case 4: 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.propName, "s", "The maximum latency", ":", t->param.propType, "ir", p->max_latency, - 2, 1, INT32_MAX); + SPA_POD_PROP_MIN_MAX(1, INT32_MAX)); break; default: return 0; @@ -350,12 +350,13 @@ impl_node_port_enum_params(struct spa_node *node, param = spa_pod_builder_object(&b, id, t->param_buffers.Buffers, - ":", t->param_buffers.size, "iru", this->props.max_latency * this->frame_size, - 2, this->props.min_latency * this->frame_size, - INT32_MAX, + ":", t->param_buffers.size, "iru", this->props.max_latency * + this->frame_size, + SPA_POD_PROP_MIN_MAX(this->props.min_latency * this->frame_size, + INT32_MAX), ":", t->param_buffers.stride, "i", 0, ":", t->param_buffers.buffers, "ir", 1, - 2, 1, MAX_BUFFERS, + SPA_POD_PROP_MIN_MAX(1, MAX_BUFFERS), ":", t->param_buffers.align, "i", 16); } else if (id == t->param.idMeta) { diff --git a/spa/plugins/alsa/alsa-source.c b/spa/plugins/alsa/alsa-source.c index ba96b951f..92f9a19c6 100644 --- a/spa/plugins/alsa/alsa-source.c +++ b/spa/plugins/alsa/alsa-source.c @@ -106,7 +106,7 @@ static int impl_node_enum_params(struct spa_node *node, ":", t->param.propId, "I", t->prop_min_latency, ":", t->param.propName, "s", "The minimum latency", ":", t->param.propType, "ir", p->min_latency, - 2, 1, INT32_MAX); + SPA_POD_PROP_MIN_MAX(1, INT32_MAX)); break; default: 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.stride, "i", 0, ":", t->param_buffers.buffers, "ir", 2, - 2, 1, 32, + SPA_POD_PROP_MIN_MAX(1, MAX_BUFFERS), ":", t->param_buffers.align, "i", 16); } else if (id == t->param.idMeta) { diff --git a/spa/plugins/audiomixer/audiomixer.c b/spa/plugins/audiomixer/audiomixer.c index 32526a00a..e61a40423 100644 --- a/spa/plugins/audiomixer/audiomixer.c +++ b/spa/plugins/audiomixer/audiomixer.c @@ -384,12 +384,12 @@ static int port_enum_formats(struct spa_node *node, "I", t->media_type.audio, "I", t->media_subtype.raw, ":", t->format_audio.format, "Ieu", t->audio_format.S16, - 2, t->audio_format.S16, - t->audio_format.F32, + SPA_POD_PROP_ENUM(2, t->audio_format.S16, + t->audio_format.F32), ":", t->format_audio.rate, "iru", 44100, - 2, 1, INT32_MAX, + SPA_POD_PROP_MIN_MAX(1, INT32_MAX), ":", t->format_audio.channels, "iru", 2, - 2, 1, INT32_MAX); + SPA_POD_PROP_MIN_MAX(1, INT32_MAX)); } break; default: @@ -486,11 +486,10 @@ impl_node_port_enum_params(struct spa_node *node, param = spa_pod_builder_object(&b, id, t->param_buffers.Buffers, ":", t->param_buffers.size, "iru", 1024 * this->bpf, - 2, 16 * this->bpf, - INT32_MAX / this->bpf, + SPA_POD_PROP_MIN_MAX(16 * this->bpf, INT32_MAX / this->bpf), ":", t->param_buffers.stride, "i", 0, ":", t->param_buffers.buffers, "iru", 1, - 2, 1, MAX_BUFFERS, + SPA_POD_PROP_MIN_MAX(1, MAX_BUFFERS), ":", t->param_buffers.align, "i", 16); } else if (id == t->param.idMeta) { @@ -513,7 +512,7 @@ impl_node_port_enum_params(struct spa_node *node, case 0: param = spa_pod_builder_object(&b, 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)); break; default: @@ -525,7 +524,7 @@ impl_node_port_enum_params(struct spa_node *node, case 0: param = spa_pod_builder_object(&b, 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)); break; default: @@ -542,17 +541,18 @@ impl_node_port_enum_params(struct spa_node *node, case 0: param = spa_pod_builder_object(&b, id, t->param_io.Prop, - ":", t->param_io.id, "I", t->io_prop_volume, - ":", t->param_io.size, "i", sizeof(struct spa_pod_double), - ":", t->param.propId, "I", t->prop_volume, - ":", t->param.propType, "dru", p->volume, 2, 0.0, 10.0); + ":", t->param_io.id, "I", t->io_prop_volume, + ":", t->param_io.size, "i", sizeof(struct spa_pod_double), + ":", t->param.propId, "I", t->prop_volume, + ":", t->param.propType, "dru", p->volume, + SPA_POD_PROP_MIN_MAX(0.0, 10.0)); break; case 1: param = spa_pod_builder_object(&b, id, t->param_io.Prop, - ":", t->param_io.id, "I", t->io_prop_mute, - ":", t->param_io.size, "i", sizeof(struct spa_pod_bool), - ":", t->param.propId, "I", t->prop_mute, + ":", t->param_io.id, "I", t->io_prop_mute, + ":", t->param_io.size, "i", sizeof(struct spa_pod_bool), + ":", t->param.propId, "I", t->prop_mute, ":", t->param.propType, "b", p->mute); break; default: diff --git a/spa/plugins/audiotestsrc/audiotestsrc.c b/spa/plugins/audiotestsrc/audiotestsrc.c index ee300b51f..bf3d4b88f 100644 --- a/spa/plugins/audiotestsrc/audiotestsrc.c +++ b/spa/plugins/audiotestsrc/audiotestsrc.c @@ -243,7 +243,7 @@ static int impl_node_enum_params(struct spa_node *node, ":", t->param.propId, "I", t->prop_freq, ":", t->param.propName, "s", "Select the frequency", ":", t->param.propType, "dr", p->freq, - 2, 0.0, 50000000.0); + SPA_POD_PROP_MIN_MAX(0.0, 50000000.0)); break; case 3: 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.propName, "s", "Select the volume", ":", t->param.propType, "dr", p->volume, - 2, 0.0, 10.0); + SPA_POD_PROP_MIN_MAX(0.0, 10.0)); break; default: return 0; @@ -583,14 +583,14 @@ port_enum_formats(struct impl *this, "I", t->media_type.audio, "I", t->media_subtype.raw, ":", t->format_audio.format, "Ieu", t->audio_format.S16, - 4, t->audio_format.S16, - t->audio_format.S32, - t->audio_format.F32, - t->audio_format.F64, + SPA_POD_PROP_ENUM(4, t->audio_format.S16, + t->audio_format.S32, + t->audio_format.F32, + t->audio_format.F64), ":", t->format_audio.rate, "iru", 44100, - 2, 1, INT32_MAX, + SPA_POD_PROP_MIN_MAX(1, INT32_MAX), ":", t->format_audio.channels, "iru", 2, - 2, 1, INT32_MAX); + SPA_POD_PROP_MIN_MAX(1, INT32_MAX)); break; default: return 0; @@ -683,11 +683,10 @@ impl_node_port_enum_params(struct spa_node *node, param = spa_pod_builder_object(&b, id, t->param_buffers.Buffers, ":", t->param_buffers.size, "iru", 1024 * this->bpf, - 2, 16 * this->bpf, - INT32_MAX / this->bpf, + SPA_POD_PROP_MIN_MAX(16 * this->bpf, INT32_MAX / this->bpf), ":", t->param_buffers.stride, "i", 0, ":", t->param_buffers.buffers, "iru", 1, - 2, 1, 32, + SPA_POD_PROP_MIN_MAX(1, MAX_BUFFERS), ":", t->param_buffers.align, "i", 16); } else if (id == t->param.idMeta) { @@ -710,7 +709,7 @@ impl_node_port_enum_params(struct spa_node *node, case 0: param = spa_pod_builder_object(&b, 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)); break; default: @@ -722,7 +721,7 @@ impl_node_port_enum_params(struct spa_node *node, case 0: param = spa_pod_builder_object(&b, 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)); break; default: @@ -736,29 +735,31 @@ impl_node_port_enum_params(struct spa_node *node, case 0: param = spa_pod_builder_object(&b, id, t->param_io.Prop, - ":", t->param_io.id, "I", t->io_prop_wave, - ":", t->param_io.size, "i", sizeof(struct spa_pod_id), - ":", t->param.propId, "I", t->prop_wave, - ":", t->param.propType, "i", p->wave, + ":", t->param_io.id, "I", t->io_prop_wave, + ":", t->param_io.size, "i", sizeof(struct spa_pod_id), + ":", t->param.propId, "I", t->prop_wave, + ":", t->param.propType, "i", p->wave, ":", t->param.propLabels, "[-i", - "i", WAVE_SINE, "s", "Sine wave", + "i", WAVE_SINE, "s", "Sine wave", "i", WAVE_SQUARE, "s", "Square wave", "]"); break; case 1: param = spa_pod_builder_object(&b, id, t->param_io.Prop, - ":", t->param_io.id, "I", t->io_prop_freq, - ":", t->param_io.size, "i", sizeof(struct spa_pod_double), - ":", t->param.propId, "I", t->prop_freq, - ":", t->param.propType, "dr", p->freq, 2, 0.0, 50000000.0); + ":", t->param_io.id, "I", t->io_prop_freq, + ":", t->param_io.size, "i", sizeof(struct spa_pod_double), + ":", t->param.propId, "I", t->prop_freq, + ":", t->param.propType, "dr", p->freq, + SPA_POD_PROP_MIN_MAX(0.0, 50000000.0)); break; case 2: param = spa_pod_builder_object(&b, id, t->param_io.Prop, - ":", t->param_io.id, "I", t->io_prop_volume, - ":", t->param_io.size, "i", sizeof(struct spa_pod_double), - ":", t->param.propId, "I", t->prop_volume, - ":", t->param.propType, "dr", p->volume, 2, 0.0, 10.0); + ":", t->param_io.id, "I", t->io_prop_volume, + ":", t->param_io.size, "i", sizeof(struct spa_pod_double), + ":", t->param.propId, "I", t->prop_volume, + ":", t->param.propType, "dr", p->volume, + SPA_POD_PROP_MIN_MAX(0.0, 10.0)); break; default: return 0; diff --git a/spa/plugins/bluez5/a2dp-sink.c b/spa/plugins/bluez5/a2dp-sink.c index f02a800cb..1ff759797 100644 --- a/spa/plugins/bluez5/a2dp-sink.c +++ b/spa/plugins/bluez5/a2dp-sink.c @@ -233,7 +233,7 @@ static int impl_node_enum_params(struct spa_node *node, ":", t->param.propId, "I", t->prop_min_latency, ":", t->param.propName, "s", "The minimum latency", ":", t->param.propType, "ir", p->min_latency, - 2, 1, INT32_MAX); + SPA_POD_PROP_MIN_MAX(1, INT32_MAX)); break; case 1: 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.propName, "s", "The maximum latency", ":", t->param.propType, "ir", p->max_latency, - 2, 1, INT32_MAX); + SPA_POD_PROP_MIN_MAX(1, INT32_MAX)); break; default: return 0; @@ -1042,12 +1042,13 @@ impl_node_port_enum_params(struct spa_node *node, param = spa_pod_builder_object(&b, id, t->param_buffers.Buffers, - ":", t->param_buffers.size, "iru", this->props.min_latency * this->frame_size, - 2, this->props.min_latency * this->frame_size, - INT32_MAX, + ":", t->param_buffers.size, "iru", this->props.min_latency * + this->frame_size, + SPA_POD_PROP_MIN_MAX(this->props.min_latency * this->frame_size, + INT32_MAX), ":", t->param_buffers.stride, "i", 0, ":", t->param_buffers.buffers, "ir", 2, - 2, 2, MAX_BUFFERS, + SPA_POD_PROP_MIN_MAX(2, MAX_BUFFERS), ":", t->param_buffers.align, "i", 16); } else if (id == t->param.idMeta) { diff --git a/spa/plugins/v4l2/v4l2-source.c b/spa/plugins/v4l2/v4l2-source.c index 201ce9335..8133865d4 100644 --- a/spa/plugins/v4l2/v4l2-source.c +++ b/spa/plugins/v4l2/v4l2-source.c @@ -249,21 +249,21 @@ static int impl_node_enum_params(struct spa_node *node, case 0: param = spa_pod_builder_object(&b, 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.propType, "S", p->device, sizeof(p->device)); break; case 1: param = spa_pod_builder_object(&b, 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.propType, "S-r", p->device_name, sizeof(p->device_name)); break; case 2: param = spa_pod_builder_object(&b, 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.propType, "i-r", p->device_fd); 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.stride, "i", port->fmt.fmt.pix.bytesperline, ":", 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); } else if (id == t->param.idMeta) { diff --git a/spa/plugins/videotestsrc/videotestsrc.c b/spa/plugins/videotestsrc/videotestsrc.c index f354523d4..fb5478958 100644 --- a/spa/plugins/videotestsrc/videotestsrc.c +++ b/spa/plugins/videotestsrc/videotestsrc.c @@ -509,14 +509,14 @@ static int port_enum_formats(struct spa_node *node, "I", t->media_type.video, "I", t->media_subtype.raw, ":", t->format_video.format, "Ieu", t->video_format.RGB, - 2, t->video_format.RGB, - t->video_format.UYVY, + SPA_POD_PROP_ENUM(2, t->video_format.RGB, + t->video_format.UYVY), ":", t->format_video.size, "Rru", &SPA_RECTANGLE(320, 240), - 2, &SPA_RECTANGLE(1, 1), - &SPA_RECTANGLE(INT32_MAX, INT32_MAX), + SPA_POD_PROP_MIN_MAX(&SPA_RECTANGLE(1, 1), + &SPA_RECTANGLE(INT32_MAX, INT32_MAX)), ":", t->format_video.framerate, "Fru", &SPA_FRACTION(25,1), - 2, &SPA_FRACTION(0, 1), - &SPA_FRACTION(INT32_MAX, 1)); + SPA_POD_PROP_MIN_MAX(&SPA_FRACTION(0, 1), + &SPA_FRACTION(INT32_MAX, 1))); break; default: 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.stride, "i", this->stride, ":", t->param_buffers.buffers, "ir", 2, - 2, 1, 32, + SPA_POD_PROP_MIN_MAX(1, MAX_BUFFERS), ":", t->param_buffers.align, "i", 16); } else if (id == t->param.idMeta) { diff --git a/spa/plugins/volume/volume.c b/spa/plugins/volume/volume.c index 4c44466c1..7451c3ce3 100644 --- a/spa/plugins/volume/volume.c +++ b/spa/plugins/volume/volume.c @@ -186,7 +186,8 @@ static int impl_node_enum_params(struct spa_node *node, id, t->param.PropInfo, ":", t->param.propId, "I", t->prop_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; case 1: 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_subtype.raw, ":", t->format_audio.format, "Ieu", t->audio_format.S16, - 2, t->audio_format.S16, - t->audio_format.S32, - ":", t->format_audio.rate, "iru", 44100, 2, 1, INT32_MAX, - ":", t->format_audio.channels,"iru", 2, 2, 1, INT32_MAX); + SPA_POD_PROP_ENUM(2, t->audio_format.S16, + t->audio_format.S32), + ":", t->format_audio.rate, "iru", 44100, + SPA_POD_PROP_MIN_MAX(1, INT32_MAX), + ":", t->format_audio.channels,"iru", 2, + SPA_POD_PROP_MIN_MAX(1, INT32_MAX)); break; default: return 0; @@ -476,11 +479,10 @@ impl_node_port_enum_params(struct spa_node *node, param = spa_pod_builder_object(&b, id, t->param_buffers.Buffers, ":", t->param_buffers.size, "iru", 1024 * this->bpf, - 2, 16 * this->bpf, - INT32_MAX / this->bpf, + SPA_POD_PROP_MIN_MAX(16 * this->bpf, INT32_MAX / this->bpf), ":", t->param_buffers.stride, "i", 0, ":", t->param_buffers.buffers, "iru", 2, - 2, 1, MAX_BUFFERS, + SPA_POD_PROP_MIN_MAX(1, MAX_BUFFERS), ":", t->param_buffers.align, "i", 16); } else if (id == t->param.idMeta) { diff --git a/src/examples/export-sink.c b/src/examples/export-sink.c index 89389d162..76259d0d9 100644 --- a/src/examples/export-sink.c +++ b/src/examples/export-sink.c @@ -314,12 +314,12 @@ static int port_enum_formats(struct spa_node *node, spa_pod_builder_pop(builder); spa_pod_builder_add(builder, ":", d->type.format_video.size, "Rru", &SPA_RECTANGLE(WIDTH, HEIGHT), - 2, &SPA_RECTANGLE(1,1), - &SPA_RECTANGLE(info.max_texture_width, - info.max_texture_height), + SPA_POD_PROP_MIN_MAX(&SPA_RECTANGLE(1,1), + &SPA_RECTANGLE(info.max_texture_width, + info.max_texture_height)), ":", d->type.format_video.framerate, "Fru", &SPA_FRACTION(25,1), - 2, &SPA_FRACTION(0,1), - &SPA_FRACTION(30,1), + SPA_POD_PROP_MIN_MAX(&SPA_FRACTION(0,1), + &SPA_FRACTION(30,1)), NULL); *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.stride, "i", d->stride, ":", t->param_buffers.buffers, "iru", 32, - 2, 2, 32, + SPA_POD_PROP_MIN_MAX(2, 32), ":", t->param_buffers.align, "i", 16); } 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.size, "i", sizeof(struct spa_pod_double), ":", 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; default: return 0; diff --git a/src/examples/export-source.c b/src/examples/export-source.c index 034a3206f..47b6169f8 100644 --- a/src/examples/export-source.c +++ b/src/examples/export-source.c @@ -204,8 +204,10 @@ static int port_enum_formats(struct spa_node *node, "I", d->type.media_type.audio, "I", d->type.media_subtype.raw, ":", 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.rate, "iru", 44100, 2, 1, INT32_MAX); + ":", d->type.format_audio.channels, "iru", 2, + SPA_POD_PROP_MIN_MAX(1, INT32_MAX), + ":", d->type.format_audio.rate, "iru", 44100, + SPA_POD_PROP_MIN_MAX(1, INT32_MAX)); (*index)++; @@ -279,10 +281,10 @@ static int impl_port_enum_params(struct spa_node *node, param = spa_pod_builder_object(builder, id, t->param_buffers.Buffers, ":", 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.buffers, "iru", 1, - 2, 1, 32, + SPA_POD_PROP_MIN_MAX(1, 32), ":", t->param_buffers.align, "i", 16); } 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.size, "i", sizeof(struct spa_pod_double), ":", 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; default: return 0; diff --git a/src/examples/local-v4l2.c b/src/examples/local-v4l2.c index ecf56b21f..01557a9c4 100644 --- a/src/examples/local-v4l2.c +++ b/src/examples/local-v4l2.c @@ -272,12 +272,12 @@ static int port_enum_formats(struct spa_node *node, spa_pod_builder_add(builder, ":", d->type.format_video.size, "Rru", &SPA_RECTANGLE(WIDTH, HEIGHT), - 2, &SPA_RECTANGLE(1,1), - &SPA_RECTANGLE(info.max_texture_width, - info.max_texture_height), + SPA_POD_PROP_MIN_MAX(&SPA_RECTANGLE(1,1), + &SPA_RECTANGLE(info.max_texture_width, + info.max_texture_height)), ":", d->type.format_video.framerate, "Fru", &SPA_FRACTION(25,1), - 2, &SPA_FRACTION(0,1), - &SPA_FRACTION(30,1), + SPA_POD_PROP_MIN_MAX(&SPA_FRACTION(0,1), + &SPA_FRACTION(30,1)), NULL); *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.stride, "i", d->stride, ":", t->param_buffers.buffers, "iru", 2, - 2, 1, 32, + SPA_POD_PROP_MIN_MAX(1, 32), ":", t->param_buffers.align, "i", 16); } else if (id == t->param.idMeta) { diff --git a/src/examples/video-play.c b/src/examples/video-play.c index 64647978b..1652197d3 100644 --- a/src/examples/video-play.c +++ b/src/examples/video-play.c @@ -275,9 +275,9 @@ on_stream_format_changed(void *_data, struct spa_pod *format) t->param.idBuffers, t->param_buffers.Buffers, ":", t->param_buffers.size, "i", data->stride * data->format.size.height, ":", t->param_buffers.stride, "i", data->stride, - ":", t->param_buffers.buffers, "iru", 32, - 2, 2, 32, - ":", t->param_buffers.align, "i", 16); + ":", t->param_buffers.buffers, "iru", 8, + SPA_POD_PROP_MIN_MAX(2, 32), + ":", t->param_buffers.align, "i", 16); params[1] = spa_pod_builder_object(&b, 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_add(&b, ":", data->type.format_video.size, "Rru", &SPA_RECTANGLE(WIDTH, HEIGHT), - 2, &SPA_RECTANGLE(1,1), - &SPA_RECTANGLE(info.max_texture_width, - info.max_texture_height), + SPA_POD_PROP_MIN_MAX(&SPA_RECTANGLE(1,1), + &SPA_RECTANGLE(info.max_texture_width, + info.max_texture_height)), ":", data->type.format_video.framerate, "Fru", &SPA_FRACTION(25,1), - 2, &SPA_RECTANGLE(0,1), - &SPA_RECTANGLE(30,1), + SPA_POD_PROP_MIN_MAX(&SPA_RECTANGLE(0,1), + &SPA_RECTANGLE(30,1)), NULL); params[0] = spa_pod_builder_pop(&b); diff --git a/src/examples/video-src.c b/src/examples/video-src.c index 832e878b6..b5cdcc16e 100644 --- a/src/examples/video-src.c +++ b/src/examples/video-src.c @@ -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.stride, "i", data->stride, ":", t->param_buffers.buffers, "iru", 2, - 2, 1, 32, + SPA_POD_PROP_MIN_MAX(1, 32), ":", t->param_buffers.align, "i", 16); 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, ":", data->type.format_video.format, "I", data->type.video_format.RGB, ":", data->type.format_video.size, "Rru", &SPA_RECTANGLE(320, 240), - 2, &SPA_RECTANGLE(1, 1), - &SPA_RECTANGLE(4096, 4096), + SPA_POD_PROP_MIN_MAX(&SPA_RECTANGLE(1, 1), + &SPA_RECTANGLE(4096, 4096)), ":", data->type.format_video.framerate, "F", &SPA_FRACTION(25, 1)); pw_stream_add_listener(data->stream, diff --git a/src/modules/module-audio-dsp.c b/src/modules/module-audio-dsp.c index 0c8500900..184f47c5f 100644 --- a/src/modules/module-audio-dsp.c +++ b/src/modules/module-audio-dsp.c @@ -38,9 +38,11 @@ #include "pipewire/type.h" #include "pipewire/private.h" -#define MAX_PORTS 256 #define NAME "dsp" +#define MAX_PORTS 256 +#define MAX_BUFFERS 8 + struct type { struct spa_type_media_type media_type; struct spa_type_media_subtype media_subtype; @@ -95,7 +97,7 @@ struct port { struct spa_io_buffers *io; - struct buffer buffers[64]; + struct buffer buffers[MAX_BUFFERS]; uint32_t n_buffers; struct spa_list queue; @@ -463,7 +465,8 @@ static int port_enum_params(struct spa_node *node, id, t->param_buffers.Buffers, ":", t->param_buffers.size, "i", n->buffer_size * sizeof(float), ":", 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); } else