OUTDATED
--------

typedef gpointer GstCapsFactoryEntry;
typedef GstCapsFactoryEntry GstCapsFactory[];
typedef GstCapsFactory *GstCapsListFactory[];

typedef gpointer GstPadFactoryEntry;
typedef GstPadFactoryEntry GstPadFactory[];
typedef GstPadFactory *GstPadListFactory[];

#define GST_PADFACTORY_SRC	GINT_TO_POINTER (GST_PAD_SRC)
#define GST_PADFACTORY_ALWAYS	GINT_TO_POINTER (GST_PAD_ALWAYS)

typedef struct GstPadTemplate {
  gchar *name_template;
  gint direction;
  gint presence;
  GList *caps;
};

GstPadFactory mpg123_src_padfactory = {
  "src"
  GST_PADFACTORY_SRC,
  GST_PADFACTORY_ALWAYS,

  "audio/raw"
  "samplerate", GST_PROPS_INT (44100),
  . . .
  NULL
};

static GstPadTemplate *srcpadtemplate;

mpg123_new(GstMpg123 *mpg123) {
  mpg123->srcpad = gst_pad_new_template("src", srcpadtemplate);
  . . .
}

plugin_init() {
  GstElementFactory *factory;

  factory = gst_elementfactory_new("mpg123",. . .);
  srcpadtemplate = gst_padfactory_new(mpg123_src_padfactory);
  get_elementfactory_add_padtemplate (srcpadtemplate);
}