commit 2e7ab3baf19c62b1ae7be3298bfb95c964a993f7
parent a9ac81b6bd36e6f41b1be0c677b9a81dda4b6e0e
Author: LRN <lrn1986@gmail.com>
Date: Mon, 20 Aug 2012 05:38:24 +0000
Fixing HEAD to compile again
Since PrivStruct is now nullified, store persistent
data in a separate struct.
Initialize more stuff once.
Add back proper CFLAGS and LDADD for gstreamer testcase.
Diffstat:
2 files changed, 40 insertions(+), 28 deletions(-)
diff --git a/src/plugins/Makefile.am b/src/plugins/Makefile.am
@@ -289,7 +289,10 @@ libextractor_gstreamer_la_CFLAGS = \
test_gstreamer_SOURCES = \
test_gstreamer.c
test_gstreamer_LDADD = \
- $(top_builddir)/src/plugins/libtest.la
+ $(top_builddir)/src/plugins/libtest.la \
+ $(GSTREAMER_LIBS) $(GSTREAMER_PBUTILS_LIBS)
+test_gstreamer_CFLAGS = \
+ $(GSTREAMER_CFLAGS) $(GSTREAMER_PBUTILS_CFLAGS)
libextractor_html_la_SOURCES = \
diff --git a/src/plugins/gstreamer_extractor.c b/src/plugins/gstreamer_extractor.c
@@ -621,8 +621,6 @@ enum CurrentStreamType
struct PrivStruct
{
- GMainLoop *loop;
- GstDiscoverer *dc;
GstElement *source;
struct EXTRACTOR_ExtractContext *ec;
long length;
@@ -636,6 +634,12 @@ struct PrivStruct
enum CurrentStreamType st;
};
+struct InitData
+{
+ GMainLoop *loop;
+ GstDiscoverer *dc;
+ struct PrivStruct *ps;
+};
static GQuark *audio_quarks;
@@ -664,14 +668,17 @@ _new_discovered_uri (GstDiscoverer * dc, GstDiscovererInfo * info, GError * err,
}
static void
-_discoverer_finished (GstDiscoverer * dc, struct PrivStruct * ps)
+_discoverer_finished (GstDiscoverer * dc, struct InitData * id)
{
- g_main_loop_quit (ps->loop);
+ g_main_loop_quit (id->loop);
}
static int
-initialize ()
+initialize (struct InitData *id, struct PrivStruct *ps)
{
+ GError *err = NULL;
+ gint timeout = 10;
+
gst_init (NULL, NULL);
GST_DEBUG_CATEGORY_INIT (gstreamer_extractor, "GstExtractor",
0, "GStreamer-based libextractor plugin");
@@ -693,6 +700,20 @@ initialize ()
subtitle_quarks[0] = g_quark_from_string ("language-code");
subtitle_quarks[1] = g_quark_from_string (NULL);
+ id->dc = gst_discoverer_new (timeout * GST_SECOND, &err);
+ if (G_UNLIKELY (id->dc == NULL)) {
+ g_print ("Error initializing: %s\n", err->message);
+ return FALSE;
+ }
+ /* connect signals */
+ g_signal_connect (id->dc, "discovered", G_CALLBACK (_new_discovered_uri), ps);
+ g_signal_connect (id->dc, "finished", G_CALLBACK (_discoverer_finished), id);
+ g_signal_connect (id->dc, "source-setup", G_CALLBACK (_source_setup), ps);
+
+ id->loop = g_main_loop_new (NULL, TRUE);
+
+ id->ps = ps;
+
return TRUE;
}
@@ -801,9 +822,9 @@ seek_data (GstElement * appsrc, guint64 position, struct PrivStruct * ps)
}
static gboolean
-_run_async (struct PrivStruct * ps)
+_run_async (struct InitData * id)
{
- gst_discoverer_discover_uri_async (ps->dc, "appsrc://");
+ gst_discoverer_discover_uri_async (id->dc, "appsrc://");
return FALSE;
}
@@ -1579,36 +1600,24 @@ EXTRACTOR_gstreamer_extract_method (struct EXTRACTOR_ExtractContext *ec)
int64_t offset;
void *data;
GstDiscoverer *dc;
- struct PrivStruct ps;
+ static struct PrivStruct ps;
+ static struct InitData id;
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);
+ (! (initialized = initialize (&id, &ps))) )
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);
memset (&ps, 0, sizeof (ps));
- ps.dc = dc;
- ps.loop = g_main_loop_new (NULL, TRUE);
ps.ec = ec;
- ps.length = ps->ec->get_size (ps->ec->cls);
+ ps.length = ps.ec->get_size (ps.ec->cls);
if (ps.length == UINT_MAX)
ps.length = 0;
- gst_discoverer_start (dc);
- g_idle_add ((GSourceFunc) &_run_async, &ps);
- g_main_loop_run (ps.loop);
- gst_discoverer_stop (dc);
- gst_object_unref (GST_OBJECT (dc));
+ gst_discoverer_start (id.dc);
+ g_idle_add ((GSourceFunc) &_run_async, &id);
+ g_main_loop_run (id.loop);
+ gst_discoverer_stop (id.dc);
}