diff options
author | LRN <lrn1986@gmail.com> | 2012-08-20 05:38:24 +0000 |
---|---|---|
committer | LRN <lrn1986@gmail.com> | 2012-08-20 05:38:24 +0000 |
commit | 2e7ab3baf19c62b1ae7be3298bfb95c964a993f7 (patch) | |
tree | 3e2ac76aca120c56181965de1122b44613093ab5 | |
parent | a9ac81b6bd36e6f41b1be0c677b9a81dda4b6e0e (diff) | |
download | libextractor-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.am | 5 | ||||
-rw-r--r-- | src/plugins/gstreamer_extractor.c | 63 |
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 = \ | |||
289 | test_gstreamer_SOURCES = \ | 289 | test_gstreamer_SOURCES = \ |
290 | test_gstreamer.c | 290 | test_gstreamer.c |
291 | test_gstreamer_LDADD = \ | 291 | test_gstreamer_LDADD = \ |
292 | $(top_builddir)/src/plugins/libtest.la | 292 | $(top_builddir)/src/plugins/libtest.la \ |
293 | $(GSTREAMER_LIBS) $(GSTREAMER_PBUTILS_LIBS) | ||
294 | test_gstreamer_CFLAGS = \ | ||
295 | $(GSTREAMER_CFLAGS) $(GSTREAMER_PBUTILS_CFLAGS) | ||
293 | 296 | ||
294 | 297 | ||
295 | libextractor_html_la_SOURCES = \ | 298 | libextractor_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 | ||
622 | struct PrivStruct | 622 | struct 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 | ||
637 | struct InitData | ||
638 | { | ||
639 | GMainLoop *loop; | ||
640 | GstDiscoverer *dc; | ||
641 | struct PrivStruct *ps; | ||
642 | }; | ||
639 | 643 | ||
640 | static GQuark *audio_quarks; | 644 | static GQuark *audio_quarks; |
641 | 645 | ||
@@ -664,14 +668,17 @@ _new_discovered_uri (GstDiscoverer * dc, GstDiscovererInfo * info, GError * err, | |||
664 | } | 668 | } |
665 | 669 | ||
666 | static void | 670 | static 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 | ||
672 | static int | 676 | static int |
673 | initialize () | 677 | initialize (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 | ||
803 | static gboolean | 824 | static 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 | ||