Skip to content

Commit

Permalink
ogg: allow per feature registration
Browse files Browse the repository at this point in the history
Split plugin into features including
elements and device providers which
can be indiviually registered during
a static build.

More details here:

https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199
https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/900>
  • Loading branch information
julianbouzas authored and GStreamer Merge Bot committed Dec 10, 2020
1 parent 1e02717 commit d58cf8b
Show file tree
Hide file tree
Showing 9 changed files with 103 additions and 157 deletions.
93 changes: 28 additions & 65 deletions ext/ogg/gstoggaviparse.c
Expand Up @@ -37,7 +37,7 @@
#include <ogg/ogg.h>
#include <string.h>

#include "gstogg.h"
#include "gstoggelements.h"

GST_DEBUG_CATEGORY_STATIC (gst_ogg_avi_parse_debug);
#define GST_CAT_DEFAULT gst_ogg_avi_parse_debug
Expand Down Expand Up @@ -72,85 +72,58 @@ struct _GstOggAviParseClass
GstElementClass parent_class;
};

static void gst_ogg_avi_parse_base_init (gpointer g_class);
static void gst_ogg_avi_parse_class_init (GstOggAviParseClass * klass);
static void gst_ogg_avi_parse_init (GstOggAviParse * ogg);

static GstElementClass *parent_class = NULL;

static GType
gst_ogg_avi_parse_get_type (void)
{
static GType ogg_avi_parse_type = 0;

if (!ogg_avi_parse_type) {
static const GTypeInfo ogg_avi_parse_info = {
sizeof (GstOggAviParseClass),
gst_ogg_avi_parse_base_init,
NULL,
(GClassInitFunc) gst_ogg_avi_parse_class_init,
NULL,
NULL,
sizeof (GstOggAviParse),
0,
(GInstanceInitFunc) gst_ogg_avi_parse_init,
};

ogg_avi_parse_type =
g_type_register_static (GST_TYPE_ELEMENT, "GstOggAviParse",
&ogg_avi_parse_info, 0);
}
return ogg_avi_parse_type;
}
G_DEFINE_TYPE (GstOggAviParse, gst_ogg_avi_parse, GST_TYPE_ELEMENT);

enum
{
PROP_0
};
#define _do_init \
GST_DEBUG_CATEGORY_INIT (gst_ogg_avi_parse_debug, "oggaviparse", 0, "ogg avi parser");
GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (oggaviparse, "oggaviparse",
GST_RANK_PRIMARY, GST_TYPE_OGG_AVI_PARSE, _do_init)

enum
{
PROP_0
};

static GstStaticPadTemplate ogg_avi_parse_src_template_factory =
GST_STATIC_PAD_TEMPLATE ("src",
static GstStaticPadTemplate ogg_avi_parse_src_template_factory =
GST_STATIC_PAD_TEMPLATE ("src",
GST_PAD_SRC,
GST_PAD_ALWAYS,
GST_STATIC_CAPS ("audio/x-vorbis")
);

static GstStaticPadTemplate ogg_avi_parse_sink_template_factory =
GST_STATIC_PAD_TEMPLATE ("sink",
static GstStaticPadTemplate ogg_avi_parse_sink_template_factory =
GST_STATIC_PAD_TEMPLATE ("sink",
GST_PAD_SINK,
GST_PAD_ALWAYS,
GST_STATIC_CAPS ("application/x-ogg-avi")
);

static void gst_ogg_avi_parse_finalize (GObject * object);
static GstStateChangeReturn gst_ogg_avi_parse_change_state (GstElement *
static void gst_ogg_avi_parse_finalize (GObject * object);
static GstStateChangeReturn gst_ogg_avi_parse_change_state (GstElement *
element, GstStateChange transition);
static gboolean gst_ogg_avi_parse_event (GstPad * pad, GstObject * parent,
static gboolean gst_ogg_avi_parse_event (GstPad * pad, GstObject * parent,
GstEvent * event);
static GstFlowReturn gst_ogg_avi_parse_chain (GstPad * pad, GstObject * parent,
GstBuffer * buffer);
static gboolean gst_ogg_avi_parse_setcaps (GstPad * pad, GstCaps * caps);
static GstFlowReturn gst_ogg_avi_parse_chain (GstPad * pad,
GstObject * parent, GstBuffer * buffer);
static gboolean gst_ogg_avi_parse_setcaps (GstPad * pad, GstCaps * caps);

static void
gst_ogg_avi_parse_base_init (gpointer g_class)
static void gst_ogg_avi_parse_class_init (GstOggAviParseClass * klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass);
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);

gst_element_class_set_static_metadata (element_class,
gst_element_class_set_static_metadata (gstelement_class,
"Ogg AVI parser", "Codec/Parser",
"parse an ogg avi stream into pages (info about ogg: http://xiph.org)",
"Wim Taymans <wim@fluendo.com>");

gst_element_class_add_static_pad_template (element_class,
gst_element_class_add_static_pad_template (gstelement_class,
&ogg_avi_parse_sink_template_factory);
gst_element_class_add_static_pad_template (element_class,
gst_element_class_add_static_pad_template (gstelement_class,
&ogg_avi_parse_src_template_factory);
}

static void
gst_ogg_avi_parse_class_init (GstOggAviParseClass * klass)
{
GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass);
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);

parent_class = g_type_class_peek_parent (klass);

Expand Down Expand Up @@ -476,13 +449,3 @@ gst_ogg_avi_parse_change_state (GstElement * element, GstStateChange transition)
}
return result;
}

gboolean
gst_ogg_avi_parse_plugin_init (GstPlugin * plugin)
{
GST_DEBUG_CATEGORY_INIT (gst_ogg_avi_parse_debug, "oggaviparse", 0,
"ogg avi parser");

return gst_element_register (plugin, "oggaviparse", GST_RANK_PRIMARY,
GST_TYPE_OGG_AVI_PARSE);
}
12 changes: 9 additions & 3 deletions ext/ogg/gstoggdemux.c
Expand Up @@ -44,6 +44,7 @@
#include <gst/tag/tag.h>
#include <gst/audio/audio.h>

#include "gstoggelements.h"
#include "gstoggdemux.h"

#define CHUNKSIZE (8500) /* this is out of vorbisfile */
Expand Down Expand Up @@ -2291,10 +2292,16 @@ static GstStateChangeReturn gst_ogg_demux_change_state (GstElement * element,
GstStateChange transition);

static void gst_ogg_print (GstOggDemux * demux);
static gboolean gst_ogg_demux_plugin_init (GstPlugin * plugin);

#define gst_ogg_demux_parent_class parent_class
G_DEFINE_TYPE (GstOggDemux, gst_ogg_demux, GST_TYPE_ELEMENT);

#define _do_init \
ret |= gst_ogg_demux_plugin_init (plugin);
GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (oggdemux, "oggdemux", GST_RANK_PRIMARY,
GST_TYPE_OGG_DEMUX, _do_init);

static void
gst_ogg_demux_class_init (GstOggDemuxClass * klass)
{
Expand Down Expand Up @@ -5253,7 +5260,7 @@ gst_ogg_demux_change_state (GstElement * element, GstStateChange transition)
return result;
}

gboolean
static gboolean
gst_ogg_demux_plugin_init (GstPlugin * plugin)
{
GST_DEBUG_CATEGORY_INIT (gst_ogg_demux_debug, "oggdemux", 0, "ogg demuxer");
Expand All @@ -5267,8 +5274,7 @@ gst_ogg_demux_plugin_init (GstPlugin * plugin)
bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
#endif

return gst_element_register (plugin, "oggdemux", GST_RANK_PRIMARY,
GST_TYPE_OGG_DEMUX);
return TRUE;
}

/* prints all info about the element */
Expand Down
2 changes: 0 additions & 2 deletions ext/ogg/gstoggdemux.h
Expand Up @@ -219,8 +219,6 @@ struct _GstOggDemuxClass
GstElementClass parent_class;
};

gboolean gst_ogg_demux_plugin_init (GstPlugin * plugin);

G_END_DECLS

#endif /* __GST_OGG_DEMUX_H__ */
21 changes: 12 additions & 9 deletions ext/ogg/gstogg.h → ext/ogg/gstoggelements.h
@@ -1,7 +1,6 @@
/* GStreamer
* Copyright (C) 2004 Wim Taymans <wim@fluendo.com>
*
* gstoggdemux.c: ogg stream demuxer
* Copyright (C) 2020 Huawei Technologies Co., Ltd.
* @Author: Stéphane Cerveau <scerveau@collabora.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
Expand All @@ -19,13 +18,17 @@
* Boston, MA 02110-1301, USA.
*/

#ifndef __GST_OGG_H__
#define __GST_OGG_H__
#ifndef __GST_OGG_ELEMENT_H__
#define __GST_OGG_ELEMENT_H__

#include <gst/gst.h>

gboolean gst_ogm_parse_plugin_init (GstPlugin * plugin);
gboolean gst_ogg_parse_plugin_init (GstPlugin * plugin);
gboolean gst_ogg_avi_parse_plugin_init (GstPlugin * plugin);
GST_ELEMENT_REGISTER_DECLARE (oggdemux);
GST_ELEMENT_REGISTER_DECLARE (oggmux);
GST_ELEMENT_REGISTER_DECLARE (ogmaudioparse);
GST_ELEMENT_REGISTER_DECLARE (ogmvideoparse);
GST_ELEMENT_REGISTER_DECLARE (ogmtextparse);
GST_ELEMENT_REGISTER_DECLARE (oggparse);
GST_ELEMENT_REGISTER_DECLARE (oggaviparse);

#endif /* __GST_OGG_H__ */
#endif /* __GST_OGG_ELEMENT_H__ */
17 changes: 8 additions & 9 deletions ext/ogg/gstoggmux.c
Expand Up @@ -43,6 +43,7 @@
#include <gst/audio/audio.h>
#include <gst/tag/tag.h>

#include "gstoggelements.h"
#include "gstoggmux.h"

/* memcpy - if someone knows a way to get rid of it, please speak up
Expand Down Expand Up @@ -134,10 +135,17 @@ static GstStateChangeReturn gst_ogg_mux_change_state (GstElement * element,
GstStateChange transition);

/*static guint gst_ogg_mux_signals[LAST_SIGNAL] = { 0 }; */


#define gst_ogg_mux_parent_class parent_class
G_DEFINE_TYPE_WITH_CODE (GstOggMux, gst_ogg_mux, GST_TYPE_ELEMENT,
G_IMPLEMENT_INTERFACE (GST_TYPE_PRESET, NULL));

#define _do_init \
GST_DEBUG_CATEGORY_INIT (gst_ogg_mux_debug, "oggmux", 0, "ogg muxer");
GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (oggmux, "oggmux", GST_RANK_PRIMARY,
GST_TYPE_OGG_MUX, _do_init);

static void
gst_ogg_mux_class_init (GstOggMuxClass * klass)
{
Expand Down Expand Up @@ -2253,12 +2261,3 @@ gst_ogg_mux_change_state (GstElement * element, GstStateChange transition)

return ret;
}

gboolean
gst_ogg_mux_plugin_init (GstPlugin * plugin)
{
GST_DEBUG_CATEGORY_INIT (gst_ogg_mux_debug, "oggmux", 0, "ogg muxer");

return gst_element_register (plugin, "oggmux", GST_RANK_PRIMARY,
GST_TYPE_OGG_MUX);
}
61 changes: 13 additions & 48 deletions ext/ogg/gstoggparse.c
Expand Up @@ -36,7 +36,7 @@
#include <ogg/ogg.h>
#include <string.h>

#include "gstogg.h"
#include "gstoggelements.h"
#include "gstoggstream.h"

GST_DEBUG_CATEGORY_STATIC (gst_ogg_parse_debug);
Expand Down Expand Up @@ -81,34 +81,14 @@ struct _GstOggParseClass
GstElementClass parent_class;
};

static void gst_ogg_parse_base_init (gpointer g_class);
static void gst_ogg_parse_class_init (GstOggParseClass * klass);
static void gst_ogg_parse_init (GstOggParse * ogg);

static GstElementClass *parent_class = NULL;
G_DEFINE_TYPE (GstOggParse, gst_ogg_parse, GST_TYPE_ELEMENT);

static GType
gst_ogg_parse_get_type (void)
{
static GType ogg_parse_type = 0;

if (!ogg_parse_type) {
static const GTypeInfo ogg_parse_info = {
sizeof (GstOggParseClass),
gst_ogg_parse_base_init,
NULL,
(GClassInitFunc) gst_ogg_parse_class_init,
NULL,
NULL,
sizeof (GstOggParse),
0,
(GInstanceInitFunc) gst_ogg_parse_init,
};

ogg_parse_type = g_type_register_static (GST_TYPE_ELEMENT, "GstOggParse",
&ogg_parse_info, 0);
}
return ogg_parse_type;
}
#define _do_init \
GST_DEBUG_CATEGORY_INIT (gst_ogg_parse_debug, "oggparse", 0, "ogg parser");
GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (oggparse, "oggparse", GST_RANK_NONE,
GST_TYPE_OGG_PARSE, _do_init);

static void
free_stream (GstOggStream * stream)
Expand Down Expand Up @@ -223,26 +203,20 @@ static GstFlowReturn gst_ogg_parse_chain (GstPad * pad, GstObject * parent,
GstBuffer * buffer);

static void
gst_ogg_parse_base_init (gpointer g_class)
gst_ogg_parse_class_init (GstOggParseClass * klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass);
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);

gst_element_class_set_static_metadata (element_class,
gst_element_class_set_static_metadata (gstelement_class,
"Ogg parser", "Codec/Parser",
"parse ogg streams into pages (info about ogg: http://xiph.org)",
"Michael Smith <msmith@fluendo.com>");

gst_element_class_add_static_pad_template (element_class,
gst_element_class_add_static_pad_template (gstelement_class,
&ogg_parse_sink_template_factory);
gst_element_class_add_static_pad_template (element_class,
gst_element_class_add_static_pad_template (gstelement_class,
&ogg_parse_src_template_factory);
}

static void
gst_ogg_parse_class_init (GstOggParseClass * klass)
{
GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass);
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);

parent_class = g_type_class_peek_parent (klass);

Expand Down Expand Up @@ -747,12 +721,3 @@ gst_ogg_parse_change_state (GstElement * element, GstStateChange transition)
}
return result;
}

gboolean
gst_ogg_parse_plugin_init (GstPlugin * plugin)
{
GST_DEBUG_CATEGORY_INIT (gst_ogg_parse_debug, "oggparse", 0, "ogg parser");

return gst_element_register (plugin, "oggparse", GST_RANK_NONE,
GST_TYPE_OGG_PARSE);
}
18 changes: 11 additions & 7 deletions ext/ogg/gstogg.c → ext/ogg/gstoggplugin.c
Expand Up @@ -23,20 +23,24 @@

#include <gst/gst.h>

#include "gstogg.h"
#include "gstoggelements.h"
#include "gstoggdemux.h"
#include "gstoggmux.h"

static gboolean
plugin_init (GstPlugin * plugin)
{
gst_ogg_demux_plugin_init (plugin);
gst_ogg_mux_plugin_init (plugin);
gst_ogm_parse_plugin_init (plugin);
gst_ogg_parse_plugin_init (plugin);
gst_ogg_avi_parse_plugin_init (plugin);
gboolean ret = FALSE;

return TRUE;
ret |= GST_ELEMENT_REGISTER (oggdemux, plugin);
ret |= GST_ELEMENT_REGISTER (oggmux, plugin);
ret |= GST_ELEMENT_REGISTER (ogmaudioparse, plugin);
ret |= GST_ELEMENT_REGISTER (ogmvideoparse, plugin);
ret |= GST_ELEMENT_REGISTER (ogmtextparse, plugin);
ret |= GST_ELEMENT_REGISTER (oggparse, plugin);
ret |= GST_ELEMENT_REGISTER (oggaviparse, plugin);

return ret;
}

GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
Expand Down

0 comments on commit d58cf8b

Please sign in to comment.