[pulseaudio-discuss] [PATCH 1/2] ladspa: D-Bus interface for setting algorithm parameters on-the-fly.

Tanu Kaskinen tanuk at iki.fi
Thu Jun 28 04:59:50 PDT 2012


On Fri, 2012-06-15 at 17:35 +0300, ismo.puustinen at intel.com wrote:
> From: Ismo Puustinen <ismo.puustinen at intel.com>
> 
> A new external D-Bus interface is registered and LADSPA algorithm
> control parameters are exposed as a D-Bus property with setter and
> getter support.

Thanks! I've pushed this now, with the cosmetic changes described below.

> +static pa_dbus_interface_info ladspa_info={

Still missing spaces around '=' here.

> @@ -469,6 +707,276 @@ static void sink_input_mute_changed_cb(pa_sink_input *i) {
>      pa_sink_mute_changed(u->sink, i->muted);
>  }
>  
> +static int parse_control_parameters(struct userdata *u, const char *cdata, double *read_values, pa_bool_t *use_default) {
> +

Extra empty line.

> +static int validate_control_parameters(struct userdata *u, double *control_values, pa_bool_t *use_default) {
> +    unsigned long p = 0, h = 0;
> +    const LADSPA_Descriptor *d;
> +    pa_sample_spec ss;
> +
> +    pa_assert(control_values);
> +    pa_assert(use_default);
> +    pa_assert(u);
> +    ss = u->ss;
> +    d = u->descriptor;
> +    pa_assert(d);

Changed the three last lines to

    pa_assert_se(d = u->description);

    ss = u->ss;

I did that to have better grouping of the input-validating assertions.

> +
> +    /* Iterate over all ports. Check for every control port that 1) it
> +     * supports default values if a default value is provided and 2) the
> +     * provided value is within the limits specified in the plugin. */
> +
> +    for (p = 0; p < d->PortCount; p++) {
> +        LADSPA_PortRangeHintDescriptor hint = d->PortRangeHints[p].HintDescriptor;
> +
> +        if (!LADSPA_IS_PORT_CONTROL(d->PortDescriptors[p]))
> +            continue;
> +
> +        if (LADSPA_IS_PORT_OUTPUT(d->PortDescriptors[p]))
> +            continue;
> +
> +        if (use_default[h]) {
> +            /* User wants to use default value. Check if the plugin
> +             * provides it. */
> +            if (!LADSPA_IS_HINT_HAS_DEFAULT(hint)) {
> +                pa_log_warn("Control port value left empty but plugin defines no default.");
> +                return -1;
> +            }
> +        }
> +        else {
> +            /* Check if the user-provided value is within the bounds. */
> +            LADSPA_Data lower = d->PortRangeHints[p].LowerBound;
> +            LADSPA_Data upper = d->PortRangeHints[p].UpperBound;
> +
> +            if (LADSPA_IS_HINT_SAMPLE_RATE(hint)) {
> +                upper *= (LADSPA_Data) ss.rate;
> +                lower *= (LADSPA_Data) ss.rate;
> +            }
> +
> +            if (LADSPA_IS_HINT_BOUNDED_ABOVE(hint)) {
> +                if (control_values[h] > upper) {
> +                    pa_log_warn("Control value %lu over upper bound: %f / %f", h, control_values[h], upper);
> +                    return -1;
> +                }
> +            }
> +            if (LADSPA_IS_HINT_BOUNDED_BELOW(hint)) {
> +                if (control_values[h] < lower) {
> +                    pa_log_warn("Control value below lower bound: %f / %f", control_values[h], lower);

I added the h value to this log message to be consistent with the
previous log message. I also replaced the "%f / %f" with "%f (lower
bound: %f)" (likewise for the upper bound). 

> +                    return -1;
> +                }
> +            }
> +        }
> +
> +        h++;
> +    }
> +
> +    return 0;
> +}
> +
> +static int write_control_parameters(struct userdata *u, double *control_values, pa_bool_t *use_default) {
> +    unsigned long p = 0, h = 0, c;
> +    const LADSPA_Descriptor *d;
> +    pa_sample_spec ss;
> +
> +    pa_assert(control_values);
> +    pa_assert(use_default);
> +    pa_assert(u);
> +    ss = u->ss;
> +    d = u->descriptor;
> +    pa_assert(d);

I did the same rearrangement as in validate_control_parameters().

> +
> +    if (validate_control_parameters(u, control_values, use_default) < 0) {
> +        return -1;
> +    }

Redundant braces.

-- 
Tanu



More information about the pulseaudio-discuss mailing list