Пример #1
0
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;
}
Пример #2
0
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;
}