#include <gst/gstinfo.h>
static GHashTable *_element_registry;
+enum {
+ NEW_REQUIRED_DPARAM,
+ LAST_SIGNAL
+};
static void gst_dpman_class_init (GstDParamManagerClass *klass);
static void gst_dpman_init (GstDParamManager *dpman);
static guint gst_dpman_process_noop(GstDParamManager *dpman, guint frame_count);
static GObjectClass *parent_class;
+static guint gst_dpman_signals[LAST_SIGNAL] = { 0 };
void
_gst_dpman_initialize()
gst_dpman_preprocess_noop, gst_dpman_process_noop, NULL, NULL);
_element_registry = g_hash_table_new(NULL,NULL);
+
+ gst_dpman_signals[NEW_REQUIRED_DPARAM] =
+ g_signal_new ("new_required_dparam", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GstDParamManagerClass, new_required_dparam), NULL, NULL,
+ gst_marshal_VOID__STRING, G_TYPE_NONE, 1,
+ G_TYPE_STRING);
+
}
static void
dpwrap->update_func = update_func;
dpwrap->update_data = update_data;
+
+ g_signal_emit (G_OBJECT (dpman), gst_dpman_signals[NEW_REQUIRED_DPARAM], 0, g_param_spec_get_name(param_spec));
return TRUE;
}
dpwrap->update_data = update_data;
+ g_signal_emit (G_OBJECT (dpman), gst_dpman_signals[NEW_REQUIRED_DPARAM], 0, g_param_spec_get_name(param_spec));
+
return TRUE;
}
dpwrap->update_data = update_data;
+ g_signal_emit (G_OBJECT (dpman), gst_dpman_signals[NEW_REQUIRED_DPARAM], 0, g_param_spec_get_name(param_spec));
+
return TRUE;
}
return G_VALUE_TYPE(dpwrap->value);
}
-/*GstDParamSpec**
+GParamSpec**
gst_dpman_list_dparam_specs(GstDParamManager *dpman)
{
GstDParamWrapper* dpwrap;
}
return param_specs;
}
-*/
GParamSpec*
gst_dpman_get_param_spec (GstDParamManager *dpman, gchar *dparam_name)
G_CALLBACK (gst_dpman_caps_changed), dpman);
}
+/**
+ * gst_dpman_bypass_dparam:
+ * @dpman: GstDParamManager instance
+ * @dparam_name: the name of dparam
+ *
+ * If a dparam is attached to this dparam_name, it will be detached
+ * and a warning will be issued. This should be called in the _set_property
+ * function of an element if the value it changes is also changed by a dparam.
+ *
+ */
+void
+gst_dpman_bypass_dparam(GstDParamManager *dpman, gchar *dparam_name)
+{
+ GstDParamWrapper* dpwrap;
+
+ g_return_if_fail (dpman != NULL);
+ g_return_if_fail (GST_IS_DPMAN (dpman));
+ g_return_if_fail (dparam_name != NULL);
+
+ dpwrap = gst_dpman_get_wrapper(dpman, dparam_name);
+ g_return_if_fail (dpwrap != NULL);
+
+ if (dpwrap->dparam != NULL){
+ g_warning("Bypassing attached dparam '%s'. It will be detached", dparam_name);
+ gst_dpman_detach_dparam(dpman, dparam_name);
+ }
+}
+
static GstDParamWrapper*
gst_dpman_get_wrapper(GstDParamManager *dpman, gchar *dparam_name)
{
struct _GstDParamManagerClass {
GstObjectClass parent_class;
-
+ void (*new_required_dparam) (GstDParamManager *dpman, gchar* dparam_name);
GHashTable *modes;
/* signal callbacks */
};
void gst_dpman_dparam_spec_has_changed (GstDParamManager *dpman, gchar *dparam_name);
void gst_dpman_set_rate_change_pad(GstDParamManager *dpman, GstPad *pad);
+void gst_dpman_bypass_dparam(GstDParamManager *dpman, gchar *dparam_name);
gboolean gst_dpman_set_mode(GstDParamManager *dpman, gchar *modename);
void gst_dpman_register_mode (GstDParamManagerClass *klass,