aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2012-08-19 20:58:36 +0000
committerChristian Grothoff <christian@grothoff.org>2012-08-19 20:58:36 +0000
commit7ae76d539d704f7520a971e1fa413baef8d18c51 (patch)
tree6313f0d9756e42e2335562ff0f6063c75f50b7d3
parent64bb6297c53b7723485aba5f36d418893f2d4d6b (diff)
downloadlibextractor-7ae76d539d704f7520a971e1fa413baef8d18c51.tar.gz
libextractor-7ae76d539d704f7520a971e1fa413baef8d18c51.zip
removing ugly non-constant globals
-rw-r--r--src/plugins/gstreamer_extractor.c62
1 files changed, 33 insertions, 29 deletions
diff --git a/src/plugins/gstreamer_extractor.c b/src/plugins/gstreamer_extractor.c
index 78dd1e5..5a6fcec 100644
--- a/src/plugins/gstreamer_extractor.c
+++ b/src/plugins/gstreamer_extractor.c
@@ -636,6 +636,14 @@ struct PrivStruct
636 enum CurrentStreamType st; 636 enum CurrentStreamType st;
637}; 637};
638 638
639
640static GQuark *audio_quarks;
641
642static GQuark *video_quarks;
643
644static GQuark *subtitle_quarks;
645
646
639static void send_streams (GstDiscovererStreamInfo *info, struct PrivStruct *ps); 647static void send_streams (GstDiscovererStreamInfo *info, struct PrivStruct *ps);
640 648
641static void send_tag_foreach (const GstTagList * tags, const gchar * tag, 649static 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);
649static gboolean seek_data (GstElement * appsrc, guint64 position, struct PrivStruct * ps); 657static gboolean seek_data (GstElement * appsrc, guint64 position, struct PrivStruct * ps);
650 658
651 659
652static GstDiscoverer *dc;
653static struct PrivStruct *ps;
654
655static GQuark *audio_quarks;
656static GQuark *video_quarks;
657static GQuark *subtitle_quarks;
658
659static void 660static void
660_new_discovered_uri (GstDiscoverer * dc, GstDiscovererInfo * info, GError * err, struct PrivStruct * ps) 661_new_discovered_uri (GstDiscoverer * dc, GstDiscovererInfo * info, GError * err, struct PrivStruct * ps)
661{ 662{
@@ -671,28 +672,9 @@ _discoverer_finished (GstDiscoverer * dc, struct PrivStruct * ps)
671static int 672static int
672initialize () 673initialize ()
673{ 674{
674 gint timeout = 10;
675 GError *err = NULL;
676
677 gst_init (NULL, NULL); 675 gst_init (NULL, NULL);
678
679 GST_DEBUG_CATEGORY_INIT (gstreamer_extractor, "GstExtractor", 676 GST_DEBUG_CATEGORY_INIT (gstreamer_extractor, "GstExtractor",
680 0, "GStreamer-based libextractor plugin"); 677 0, "GStreamer-based libextractor plugin");
681 dc = gst_discoverer_new (timeout * GST_SECOND, &err);
682 if (G_UNLIKELY (dc == NULL)) {
683 g_print ("Error initializing: %s\n", err->message);
684 return FALSE;
685 }
686
687 ps = g_new0 (struct PrivStruct, 1);
688 ps->dc = dc;
689 ps->loop = g_main_loop_new (NULL, TRUE);
690
691 /* connect signals */
692 g_signal_connect (dc, "discovered", G_CALLBACK (_new_discovered_uri), ps);
693 g_signal_connect (dc, "finished", G_CALLBACK (_discoverer_finished), ps);
694 g_signal_connect (dc, "source-setup", G_CALLBACK (_source_setup), ps);
695
696 audio_quarks = g_new0 (GQuark, 4); 678 audio_quarks = g_new0 (GQuark, 4);
697 audio_quarks[0] = g_quark_from_string ("rate"); 679 audio_quarks[0] = g_quark_from_string ("rate");
698 audio_quarks[1] = g_quark_from_string ("channels"); 680 audio_quarks[1] = g_quark_from_string ("channels");
@@ -1596,10 +1578,27 @@ EXTRACTOR_gstreamer_extract_method (struct EXTRACTOR_ExtractContext *ec)
1596 static int initialized = FALSE; 1578 static int initialized = FALSE;
1597 int64_t offset; 1579 int64_t offset;
1598 void *data; 1580 void *data;
1581 GstDiscoverer *dc;
1582 struct PrivStruct *ps;
1583 GError *err = NULL;
1584 gint timeout = 10;
1585
1586 if ( (! initialized) &&
1587 (! (initialized = initialize ())) )
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;
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);
1599 1598
1600 if (! initialized) 1599 ps = g_new0 (struct PrivStruct, 1);
1601 if (! (initialized = initialize ())) 1600 ps->dc = dc;
1602 return; 1601 ps->loop = g_main_loop_new (NULL, TRUE);
1603 ps->ec = ec; 1602 ps->ec = ec;
1604 ps->length = ps->ec->get_size (ps->ec->cls); 1603 ps->length = ps->ec->get_size (ps->ec->cls);
1605 if (ps->length == UINT_MAX) 1604 if (ps->length == UINT_MAX)
@@ -1609,6 +1608,11 @@ EXTRACTOR_gstreamer_extract_method (struct EXTRACTOR_ExtractContext *ec)
1609 g_idle_add ((GSourceFunc) _run_async, ps); 1608 g_idle_add ((GSourceFunc) _run_async, ps);
1610 g_main_loop_run (ps->loop); 1609 g_main_loop_run (ps->loop);
1611 gst_discoverer_stop (dc); 1610 gst_discoverer_stop (dc);
1611 g_free (ps);
1612 ps = NULL;
1613 gst_object_unref (GST_OBJECT (dc));
1614 dc = NULL;
1612} 1615}
1613 1616
1617
1614/* end of gstreamer_extractor.c */ 1618/* end of gstreamer_extractor.c */