Random notes on signals: * Use a BOXED (and not a POINTER) marshaller when your signal will have a GstBuffer argument: g_signal_new ("handoff", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstIdentityClass, handoff), NULL, NULL, gst_marshal_VOID__BOXED, G_TYPE_NONE, 1, GST_TYPE_BUFFER | G_SIGNAL_TYPE_STATIC_SCOPE); * For GstBuffers arguments, consider using G_SIGNAL_TYPE_STATIC_SCOPE as it can prevent an extra copy of the buffer