libextractor

GNU libextractor
Log | Files | Refs | Submodules | README | LICENSE

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:
Msrc/plugins/Makefile.am | 5++++-
Msrc/plugins/gstreamer_extractor.c | 63++++++++++++++++++++++++++++++++++++---------------------------
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); }