aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLRN <lrn1986@gmail.com>2012-08-20 05:38:24 +0000
committerLRN <lrn1986@gmail.com>2012-08-20 05:38:24 +0000
commit2e7ab3baf19c62b1ae7be3298bfb95c964a993f7 (patch)
tree3e2ac76aca120c56181965de1122b44613093ab5
parenta9ac81b6bd36e6f41b1be0c677b9a81dda4b6e0e (diff)
downloadlibextractor-2e7ab3baf19c62b1ae7be3298bfb95c964a993f7.tar.gz
libextractor-2e7ab3baf19c62b1ae7be3298bfb95c964a993f7.zip
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.
-rw-r--r--src/plugins/Makefile.am5
-rw-r--r--src/plugins/gstreamer_extractor.c63
2 files changed, 40 insertions, 28 deletions
diff --git a/src/plugins/Makefile.am b/src/plugins/Makefile.am
index 94e4b3b..77a3614 100644
--- a/src/plugins/Makefile.am
+++ b/src/plugins/Makefile.am
@@ -289,7 +289,10 @@ libextractor_gstreamer_la_CFLAGS = \
289test_gstreamer_SOURCES = \ 289test_gstreamer_SOURCES = \
290 test_gstreamer.c 290 test_gstreamer.c
291test_gstreamer_LDADD = \ 291test_gstreamer_LDADD = \
292 $(top_builddir)/src/plugins/libtest.la 292 $(top_builddir)/src/plugins/libtest.la \
293 $(GSTREAMER_LIBS) $(GSTREAMER_PBUTILS_LIBS)
294test_gstreamer_CFLAGS = \
295 $(GSTREAMER_CFLAGS) $(GSTREAMER_PBUTILS_CFLAGS)
293 296
294 297
295libextractor_html_la_SOURCES = \ 298libextractor_html_la_SOURCES = \
diff --git a/src/plugins/gstreamer_extractor.c b/src/plugins/gstreamer_extractor.c
index 82184d9..9420c15 100644
--- a/src/plugins/gstreamer_extractor.c
+++ b/src/plugins/gstreamer_extractor.c
@@ -621,8 +621,6 @@ enum CurrentStreamType
621 621
622struct PrivStruct 622struct PrivStruct
623{ 623{
624 GMainLoop *loop;
625 GstDiscoverer *dc;
626 GstElement *source; 624 GstElement *source;
627 struct EXTRACTOR_ExtractContext *ec; 625 struct EXTRACTOR_ExtractContext *ec;
628 long length; 626 long length;
@@ -636,6 +634,12 @@ struct PrivStruct
636 enum CurrentStreamType st; 634 enum CurrentStreamType st;
637}; 635};
638 636
637struct InitData
638{
639 GMainLoop *loop;
640 GstDiscoverer *dc;
641 struct PrivStruct *ps;
642};
639 643
640static GQuark *audio_quarks; 644static GQuark *audio_quarks;
641 645
@@ -664,14 +668,17 @@ _new_discovered_uri (GstDiscoverer * dc, GstDiscovererInfo * info, GError * err,
664} 668}
665 669
666static void 670static void
667_discoverer_finished (GstDiscoverer * dc, struct PrivStruct * ps) 671_discoverer_finished (GstDiscoverer * dc, struct InitData * id)
668{ 672{
669 g_main_loop_quit (ps->loop); 673 g_main_loop_quit (id->loop);
670} 674}
671 675
672static int 676static int
673initialize () 677initialize (struct InitData *id, struct PrivStruct *ps)
674{ 678{
679 GError *err = NULL;
680 gint timeout = 10;
681
675 gst_init (NULL, NULL); 682 gst_init (NULL, NULL);
676 GST_DEBUG_CATEGORY_INIT (gstreamer_extractor, "GstExtractor", 683 GST_DEBUG_CATEGORY_INIT (gstreamer_extractor, "GstExtractor",
677 0, "GStreamer-based libextractor plugin"); 684 0, "GStreamer-based libextractor plugin");
@@ -693,6 +700,20 @@ initialize ()
693 subtitle_quarks[0] = g_quark_from_string ("language-code"); 700 subtitle_quarks[0] = g_quark_from_string ("language-code");
694 subtitle_quarks[1] = g_quark_from_string (NULL); 701 subtitle_quarks[1] = g_quark_from_string (NULL);
695 702
703 id->dc = gst_discoverer_new (timeout * GST_SECOND, &err);
704 if (G_UNLIKELY (id->dc == NULL)) {
705 g_print ("Error initializing: %s\n", err->message);
706 return FALSE;
707 }
708 /* connect signals */
709 g_signal_connect (id->dc, "discovered", G_CALLBACK (_new_discovered_uri), ps);
710 g_signal_connect (id->dc, "finished", G_CALLBACK (_discoverer_finished), id);
711 g_signal_connect (id->dc, "source-setup", G_CALLBACK (_source_setup), ps);
712
713 id->loop = g_main_loop_new (NULL, TRUE);
714
715 id->ps = ps;
716
696 return TRUE; 717 return TRUE;
697} 718}
698 719
@@ -801,9 +822,9 @@ seek_data (GstElement * appsrc, guint64 position, struct PrivStruct * ps)
801} 822}
802 823
803static gboolean 824static gboolean
804_run_async (struct PrivStruct * ps) 825_run_async (struct InitData * id)
805{ 826{
806 gst_discoverer_discover_uri_async (ps->dc, "appsrc://"); 827 gst_discoverer_discover_uri_async (id->dc, "appsrc://");
807 return FALSE; 828 return FALSE;
808} 829}
809 830
@@ -1579,36 +1600,24 @@ EXTRACTOR_gstreamer_extract_method (struct EXTRACTOR_ExtractContext *ec)
1579 int64_t offset; 1600 int64_t offset;
1580 void *data; 1601 void *data;
1581 GstDiscoverer *dc; 1602 GstDiscoverer *dc;
1582 struct PrivStruct ps; 1603 static struct PrivStruct ps;
1604 static struct InitData id;
1583 GError *err = NULL; 1605 GError *err = NULL;
1584 gint timeout = 10;
1585 1606
1586 if ( (! initialized) && 1607 if ( (! initialized) &&
1587 (! (initialized = initialize ())) ) 1608 (! (initialized = initialize (&id, &ps))) )
1588 return;
1589 dc = gst_discoverer_new (timeout * GST_SECOND, &err);
1590 if (G_UNLIKELY (dc == NULL)) {
1591 g_print ("Error initializing: %s\n", err->message);
1592 return; 1609 return;
1593 }
1594 /* connect signals */
1595 g_signal_connect (dc, "discovered", G_CALLBACK (_new_discovered_uri), ps);
1596 g_signal_connect (dc, "finished", G_CALLBACK (_discoverer_finished), ps);
1597 g_signal_connect (dc, "source-setup", G_CALLBACK (_source_setup), ps);
1598 1610
1599 memset (&ps, 0, sizeof (ps)); 1611 memset (&ps, 0, sizeof (ps));
1600 ps.dc = dc;
1601 ps.loop = g_main_loop_new (NULL, TRUE);
1602 ps.ec = ec; 1612 ps.ec = ec;
1603 ps.length = ps->ec->get_size (ps->ec->cls); 1613 ps.length = ps.ec->get_size (ps.ec->cls);
1604 if (ps.length == UINT_MAX) 1614 if (ps.length == UINT_MAX)
1605 ps.length = 0; 1615 ps.length = 0;
1606 1616
1607 gst_discoverer_start (dc); 1617 gst_discoverer_start (id.dc);
1608 g_idle_add ((GSourceFunc) &_run_async, &ps); 1618 g_idle_add ((GSourceFunc) &_run_async, &id);
1609 g_main_loop_run (ps.loop); 1619 g_main_loop_run (id.loop);
1610 gst_discoverer_stop (dc); 1620 gst_discoverer_stop (id.dc);
1611 gst_object_unref (GST_OBJECT (dc));
1612} 1621}
1613 1622
1614 1623