static GParamSpec * gst_lv2_class_get_param_spec (GstLV2Class * klass, gint portnum) { SLV2Plugin lv2plugin = klass->plugin; SLV2Port port = slv2_plugin_get_port_by_index (lv2plugin, portnum); SLV2Value lv2def, lv2min, lv2max; GParamSpec *ret; gchar *name; gint perms; gfloat lower = 0.0f, upper = 1.0f, def = 0.0f; name = gst_lv2_class_get_param_name (klass, portnum); perms = G_PARAM_READABLE; if (slv2_port_is_a (lv2plugin, port, input_class)) perms |= G_PARAM_WRITABLE | G_PARAM_CONSTRUCT; if (slv2_port_is_a (lv2plugin, port, control_class)) perms |= GST_PARAM_CONTROLLABLE; if (slv2_port_has_property (lv2plugin, port, toggled_prop)) { ret = g_param_spec_boolean (name, name, name, FALSE, perms); g_free (name); return ret; } slv2_port_get_range (lv2plugin, port, &lv2def, &lv2min, &lv2max); if (lv2def) def = slv2_value_as_float (lv2def); if (lv2min) lower = slv2_value_as_float (lv2min); if (lv2max) upper = slv2_value_as_float (lv2max); if (def < lower) { GST_WARNING ("%s has lower bound %f > default %f\n", slv2_value_as_string (slv2_plugin_get_uri (lv2plugin)), lower, def); lower = def; } if (def > upper) { GST_WARNING ("%s has upper bound %f < default %f\n", slv2_value_as_string (slv2_plugin_get_uri (lv2plugin)), upper, def); upper = def; } if (slv2_port_has_property (lv2plugin, port, integer_prop)) ret = g_param_spec_int (name, name, name, lower, upper, def, perms); else ret = g_param_spec_float (name, name, name, lower, upper, def, perms); g_free (name); return ret; }
const ScalePointMap& LV2Effect::GetScalePoints() { if (!mScalePointsRetrieved) { char scalePointQuery[] = "PREFIX : <http://lv2plug.in/ns/lv2core#>\n" "SELECT ?index, ?value, ?label WHERE {\n" "<> :port ?port.\n" "?port a :ControlPort.\n" "?port a :InputPort.\n" "?port :index ?index.\n" "?port :scalePoint ?point.\n" "?point rdf:value ?value.\n" "?point rdfs:label ?label.\n" "}"; SLV2Values portIndices = slv2_plugin_query_variable(mData, scalePointQuery, 0); SLV2Values pointValues = slv2_plugin_query_variable(mData, scalePointQuery, 1); SLV2Values pointLabels = slv2_plugin_query_variable(mData, scalePointQuery, 2); size_t nScalePoints = slv2_values_size(portIndices); for (size_t i = 0; i < nScalePoints; ++i) { uint32_t idx = slv2_value_as_int(slv2_values_get_at(portIndices, i)); float value = slv2_value_as_float(slv2_values_get_at(pointValues, i)); wxString label = wxString::FromUTF8(slv2_value_as_string(slv2_values_get_at(pointLabels, i))); mScalePoints[idx][value] = label; } slv2_values_free(portIndices); slv2_values_free(pointValues); slv2_values_free(pointLabels); mScalePointsRetrieved = true; } return mScalePoints; }