- controlcount = 0;
- for (i=0;i<desc->PortCount;i++) {
- if (LADSPA_IS_PORT_AUDIO(desc->PortDescriptors[i]) &&
- LADSPA_IS_PORT_INPUT(desc->PortDescriptors[i])) {
- ladspa->sinkpads[sinkcount] = gst_pad_new_from_template (sinktempl, (gchar *)desc->PortNames[i]);
- ladspa->bytestreams[sinkcount] = gst_bytestream_new (ladspa->sinkpads[sinkcount]);
- gst_element_add_pad(GST_ELEMENT(ladspa),ladspa->sinkpads[sinkcount]);
- sinkcount++;
- }
- if (LADSPA_IS_PORT_AUDIO(desc->PortDescriptors[i]) &&
- LADSPA_IS_PORT_OUTPUT(desc->PortDescriptors[i])) {
- ladspa->srcpads[srccount] = gst_pad_new_from_template (srctempl, (gchar *)desc->PortNames[i]);
- gst_element_add_pad(GST_ELEMENT(ladspa),ladspa->srcpads[srccount]);
- srccount++;
- }
- if (LADSPA_IS_PORT_CONTROL(desc->PortDescriptors[i]) &&
- LADSPA_IS_PORT_INPUT(desc->PortDescriptors[i])) {
- /* use the lowerbound as the default value if it exists */
- if (oclass->control_info[controlcount].lower){
- ladspa->controls[controlcount]=oclass->control_info[controlcount].lowerbound;
- } else {
- ladspa->controls[controlcount] = 0.0;
+ for (l=GST_ELEMENT_CLASS (oclass)->padtemplates; l; l=l->next) {
+ GstPad *pad = gst_pad_new_from_template (GST_PAD_TEMPLATE (l->data),
+ GST_PAD_TEMPLATE_NAME_TEMPLATE (l->data));
+ gst_pad_set_link_function (pad, gst_ladspa_link);
+ gst_element_add_pad ((GstElement*)ladspa, pad);
+
+ if (GST_PAD_DIRECTION (pad) == GST_PAD_SINK)
+ ladspa->sinkpads[sinkcount++] = pad;
+ else
+ ladspa->srcpads[srccount++] = pad;
+ }
+
+ /* set up dparams */
+ for (i=0; i<oclass->numcontrols; i++) {
+ if (LADSPA_IS_PORT_INPUT(desc->PortDescriptors[i])) {
+ cinfo = oclass->control_info[i];
+ ladspa->controls[i]=cinfo.def;
+
+ if (cinfo.toggled){
+ gst_dpman_add_required_dparam_callback (
+ ladspa->dpman,
+ g_param_spec_int(cinfo.param_name, cinfo.name, cinfo.name,
+ 0, 1, (gint)(ladspa->controls[i]), G_PARAM_READWRITE),
+ "int", gst_ladspa_update_int, &(ladspa->controls[i])
+ );
+ }
+ else if (cinfo.integer){
+ gst_dpman_add_required_dparam_callback (
+ ladspa->dpman,
+ g_param_spec_int(cinfo.param_name, cinfo.name, cinfo.name,
+ (gint)cinfo.lowerbound, (gint)cinfo.upperbound,
+ (gint)ladspa->controls[i], G_PARAM_READWRITE),
+ "int", gst_ladspa_update_int, &(ladspa->controls[i])
+ );
+ }
+ else if (cinfo.samplerate){
+ gst_dpman_add_required_dparam_direct (
+ ladspa->dpman,
+ g_param_spec_float(cinfo.param_name, cinfo.name, cinfo.name,
+ cinfo.lowerbound, cinfo.upperbound,
+ ladspa->controls[i], G_PARAM_READWRITE),
+ "hertz-rate-bound", &(ladspa->controls[i])
+ );
+ }
+ else {
+ gst_dpman_add_required_dparam_direct (
+ ladspa->dpman,
+ g_param_spec_float(cinfo.param_name, cinfo.name, cinfo.name,
+ cinfo.lowerbound, cinfo.upperbound,
+ ladspa->controls[i], G_PARAM_READWRITE),
+ "float", &(ladspa->controls[i])
+ );