commit 7ae76d539d704f7520a971e1fa413baef8d18c51
parent 64bb6297c53b7723485aba5f36d418893f2d4d6b
Author: Christian Grothoff <christian@grothoff.org>
Date: Sun, 19 Aug 2012 20:58:36 +0000
removing ugly non-constant globals
Diffstat:
1 file changed, 33 insertions(+), 29 deletions(-)
diff --git a/src/plugins/gstreamer_extractor.c b/src/plugins/gstreamer_extractor.c
@@ -636,6 +636,14 @@ struct PrivStruct
enum CurrentStreamType st;
};
+
+static GQuark *audio_quarks;
+
+static GQuark *video_quarks;
+
+static GQuark *subtitle_quarks;
+
+
static void send_streams (GstDiscovererStreamInfo *info, struct PrivStruct *ps);
static void send_tag_foreach (const GstTagList * tags, const gchar * tag,
@@ -649,13 +657,6 @@ static void feed_data (GstElement * appsrc, guint size, struct PrivStruct * ps);
static gboolean seek_data (GstElement * appsrc, guint64 position, struct PrivStruct * ps);
-static GstDiscoverer *dc;
-static struct PrivStruct *ps;
-
-static GQuark *audio_quarks;
-static GQuark *video_quarks;
-static GQuark *subtitle_quarks;
-
static void
_new_discovered_uri (GstDiscoverer * dc, GstDiscovererInfo * info, GError * err, struct PrivStruct * ps)
{
@@ -671,28 +672,9 @@ _discoverer_finished (GstDiscoverer * dc, struct PrivStruct * ps)
static int
initialize ()
{
- gint timeout = 10;
- GError *err = NULL;
-
gst_init (NULL, NULL);
-
GST_DEBUG_CATEGORY_INIT (gstreamer_extractor, "GstExtractor",
0, "GStreamer-based libextractor plugin");
- dc = gst_discoverer_new (timeout * GST_SECOND, &err);
- if (G_UNLIKELY (dc == NULL)) {
- g_print ("Error initializing: %s\n", err->message);
- return FALSE;
- }
-
- ps = g_new0 (struct PrivStruct, 1);
- ps->dc = dc;
- ps->loop = g_main_loop_new (NULL, TRUE);
-
- /* connect signals */
- g_signal_connect (dc, "discovered", G_CALLBACK (_new_discovered_uri), ps);
- g_signal_connect (dc, "finished", G_CALLBACK (_discoverer_finished), ps);
- g_signal_connect (dc, "source-setup", G_CALLBACK (_source_setup), ps);
-
audio_quarks = g_new0 (GQuark, 4);
audio_quarks[0] = g_quark_from_string ("rate");
audio_quarks[1] = g_quark_from_string ("channels");
@@ -1596,10 +1578,27 @@ EXTRACTOR_gstreamer_extract_method (struct EXTRACTOR_ExtractContext *ec)
static int initialized = FALSE;
int64_t offset;
void *data;
+ GstDiscoverer *dc;
+ struct PrivStruct *ps;
+ GError *err = NULL;
+ gint timeout = 10;
+
+ if ( (! initialized) &&
+ (! (initialized = initialize ())) )
+ return;
+ dc = gst_discoverer_new (timeout * GST_SECOND, &err);
+ if (G_UNLIKELY (dc == NULL)) {
+ g_print ("Error initializing: %s\n", err->message);
+ return;
+ }
+ /* connect signals */
+ g_signal_connect (dc, "discovered", G_CALLBACK (_new_discovered_uri), ps);
+ g_signal_connect (dc, "finished", G_CALLBACK (_discoverer_finished), ps);
+ g_signal_connect (dc, "source-setup", G_CALLBACK (_source_setup), ps);
- if (! initialized)
- if (! (initialized = initialize ()))
- return;
+ ps = g_new0 (struct PrivStruct, 1);
+ ps->dc = dc;
+ ps->loop = g_main_loop_new (NULL, TRUE);
ps->ec = ec;
ps->length = ps->ec->get_size (ps->ec->cls);
if (ps->length == UINT_MAX)
@@ -1609,6 +1608,11 @@ EXTRACTOR_gstreamer_extract_method (struct EXTRACTOR_ExtractContext *ec)
g_idle_add ((GSourceFunc) _run_async, ps);
g_main_loop_run (ps->loop);
gst_discoverer_stop (dc);
+ g_free (ps);
+ ps = NULL;
+ gst_object_unref (GST_OBJECT (dc));
+ dc = NULL;
}
+
/* end of gstreamer_extractor.c */