#include static GstCaps * handler (GObject * object, GstCaps * caps, gpointer user_data) { g_print ("in handler %p, %p, %p\n", object, caps, user_data); g_assert (GST_IS_PAD (object)); g_print ("caps: %s\n", gst_caps_to_string (caps)); if (gst_caps_is_any (caps)) { return gst_caps_new_simple ("application/x-foo", "field", GST_TYPE_INT_RANGE, 1, 10, NULL); } return NULL; } int main (int argc, char *argv[]) { GstElement *a; GstElement *b; GstElement *pipeline; GstPad *pad; gst_init (&argc, &argv); pipeline = gst_pipeline_new (NULL); a = gst_element_factory_make ("fakesrc", NULL); g_assert (a); b = gst_element_factory_make ("fakesink", NULL); g_assert (b); gst_bin_add_many (GST_BIN (pipeline), a, b, NULL); gst_element_link (a, b); pad = gst_element_get_pad (a, "src"); g_signal_connect (G_OBJECT (pad), "fixate", G_CALLBACK (handler), (void *) 0xdeadbeef); gst_element_set_state (GST_ELEMENT (pipeline), GST_STATE_PLAYING); return 0; }