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