aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/gstreamer_extractor.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/gstreamer_extractor.c')
-rw-r--r--src/plugins/gstreamer_extractor.c55
1 files changed, 27 insertions, 28 deletions
diff --git a/src/plugins/gstreamer_extractor.c b/src/plugins/gstreamer_extractor.c
index a8559b6..3f60b87 100644
--- a/src/plugins/gstreamer_extractor.c
+++ b/src/plugins/gstreamer_extractor.c
@@ -619,7 +619,7 @@ enum CurrentStreamType
619 STREAM_TYPE_IMAGE = 5 619 STREAM_TYPE_IMAGE = 5
620}; 620};
621 621
622typedef struct 622struct PrivStruct
623{ 623{
624 GMainLoop *loop; 624 GMainLoop *loop;
625 GstDiscoverer *dc; 625 GstDiscoverer *dc;
@@ -634,37 +634,36 @@ typedef struct
634 gboolean toc_print_phase; 634 gboolean toc_print_phase;
635 unsigned char time_to_leave; 635 unsigned char time_to_leave;
636 enum CurrentStreamType st; 636 enum CurrentStreamType st;
637} PrivStruct; 637};
638 638
639static void send_streams (GstDiscovererStreamInfo *info, PrivStruct *ps); 639static void send_streams (GstDiscovererStreamInfo *info, struct PrivStruct *ps);
640 640
641static void send_tag_foreach (const GstTagList * tags, const gchar * tag, 641static void send_tag_foreach (const GstTagList * tags, const gchar * tag,
642 gpointer user_data); 642 gpointer user_data);
643 643
644static void send_discovered_info (GstDiscovererInfo * info, PrivStruct * ps); 644static void send_discovered_info (GstDiscovererInfo * info, struct PrivStruct * ps);
645 645
646static void _source_setup (GstDiscoverer * dc, GstElement * source, PrivStruct * ps); 646static void _source_setup (GstDiscoverer * dc, GstElement * source, struct PrivStruct * ps);
647 647
648static void feed_data (GstElement * appsrc, guint size, PrivStruct * ps); 648static void feed_data (GstElement * appsrc, guint size, struct PrivStruct * ps);
649static gboolean seek_data (GstElement * appsrc, guint64 position, PrivStruct * ps); 649static gboolean seek_data (GstElement * appsrc, guint64 position, struct PrivStruct * ps);
650 650
651static int initialized = FALSE;
652 651
653static GstDiscoverer *dc; 652static GstDiscoverer *dc;
654static PrivStruct *ps; 653static struct PrivStruct *ps;
655 654
656static GQuark *audio_quarks; 655static GQuark *audio_quarks;
657static GQuark *video_quarks; 656static GQuark *video_quarks;
658static GQuark *subtitle_quarks; 657static GQuark *subtitle_quarks;
659 658
660static void 659static void
661_new_discovered_uri (GstDiscoverer * dc, GstDiscovererInfo * info, GError * err, PrivStruct * ps) 660_new_discovered_uri (GstDiscoverer * dc, GstDiscovererInfo * info, GError * err, struct PrivStruct * ps)
662{ 661{
663 send_discovered_info (info, ps); 662 send_discovered_info (info, ps);
664} 663}
665 664
666static void 665static void
667_discoverer_finished (GstDiscoverer * dc, PrivStruct * ps) 666_discoverer_finished (GstDiscoverer * dc, struct PrivStruct * ps)
668{ 667{
669 g_main_loop_quit (ps->loop); 668 g_main_loop_quit (ps->loop);
670} 669}
@@ -685,8 +684,7 @@ initialize ()
685 return FALSE; 684 return FALSE;
686 } 685 }
687 686
688 ps = g_new0 (PrivStruct, 1); 687 ps = g_new0 (struct PrivStruct, 1);
689
690 ps->dc = dc; 688 ps->dc = dc;
691 ps->loop = g_main_loop_new (NULL, TRUE); 689 ps->loop = g_main_loop_new (NULL, TRUE);
692 690
@@ -721,7 +719,7 @@ initialize ()
721 * the appsrc that we must handle. We set up some signals - one to push data 719 * the appsrc that we must handle. We set up some signals - one to push data
722 * into appsrc and one to perform a seek. */ 720 * into appsrc and one to perform a seek. */
723static void 721static void
724_source_setup (GstDiscoverer * dc, GstElement * source, PrivStruct * ps) 722_source_setup (GstDiscoverer * dc, GstElement * source, struct PrivStruct * ps)
725{ 723{
726 if (ps->source) 724 if (ps->source)
727 gst_object_unref (GST_OBJECT (ps->source)); 725 gst_object_unref (GST_OBJECT (ps->source));
@@ -746,7 +744,7 @@ _source_setup (GstDiscoverer * dc, GstElement * source, PrivStruct * ps)
746} 744}
747 745
748static void 746static void
749feed_data (GstElement * appsrc, guint size, PrivStruct * ps) 747feed_data (GstElement * appsrc, guint size, struct PrivStruct * ps)
750{ 748{
751 GstFlowReturn ret; 749 GstFlowReturn ret;
752 long data_len; 750 long data_len;
@@ -812,7 +810,7 @@ feed_data (GstElement * appsrc, guint size, PrivStruct * ps)
812} 810}
813 811
814static gboolean 812static gboolean
815seek_data (GstElement * appsrc, guint64 position, PrivStruct * ps) 813seek_data (GstElement * appsrc, guint64 position, struct PrivStruct * ps)
816{ 814{
817 GST_DEBUG ("seek to offset %" G_GUINT64_FORMAT, position); 815 GST_DEBUG ("seek to offset %" G_GUINT64_FORMAT, position);
818 ps->offset = ps->ec->seek (ps->ec->cls, position, SEEK_SET); 816 ps->offset = ps->ec->seek (ps->ec->cls, position, SEEK_SET);
@@ -821,7 +819,7 @@ seek_data (GstElement * appsrc, guint64 position, PrivStruct * ps)
821} 819}
822 820
823static gboolean 821static gboolean
824_run_async (PrivStruct * ps) 822_run_async (struct PrivStruct * ps)
825{ 823{
826 gst_discoverer_discover_uri_async (ps->dc, "appsrc://"); 824 gst_discoverer_discover_uri_async (ps->dc, "appsrc://");
827 return FALSE; 825 return FALSE;
@@ -838,6 +836,7 @@ _run_async (PrivStruct * ps)
838void 836void
839EXTRACTOR_gstreamer_extract_method (struct EXTRACTOR_ExtractContext *ec) 837EXTRACTOR_gstreamer_extract_method (struct EXTRACTOR_ExtractContext *ec)
840{ 838{
839 static int initialized = FALSE;
841 int64_t offset; 840 int64_t offset;
842 void *data; 841 void *data;
843 842
@@ -881,7 +880,7 @@ static gboolean
881send_structure_foreach (GQuark field_id, const GValue *value, 880send_structure_foreach (GQuark field_id, const GValue *value,
882 gpointer user_data) 881 gpointer user_data)
883{ 882{
884 PrivStruct *ps = (PrivStruct *) user_data; 883 struct PrivStruct *ps = (struct PrivStruct *) user_data;
885 gchar *str; 884 gchar *str;
886 const gchar *field_name = g_quark_to_string (field_id); 885 const gchar *field_name = g_quark_to_string (field_id);
887 const gchar *type_name = g_type_name (G_VALUE_TYPE (value)); 886 const gchar *type_name = g_type_name (G_VALUE_TYPE (value));
@@ -952,7 +951,7 @@ send_structure_foreach (GQuark field_id, const GValue *value,
952} 951}
953 952
954static int 953static int
955send_audio_info (GstDiscovererAudioInfo *info, PrivStruct *ps) 954send_audio_info (GstDiscovererAudioInfo *info, struct PrivStruct *ps)
956{ 955{
957 gchar *tmp; 956 gchar *tmp;
958 const gchar *ctmp; 957 const gchar *ctmp;
@@ -1029,7 +1028,7 @@ send_audio_info (GstDiscovererAudioInfo *info, PrivStruct *ps)
1029} 1028}
1030 1029
1031static int 1030static int
1032send_video_info (GstDiscovererVideoInfo *info, PrivStruct *ps) 1031send_video_info (GstDiscovererVideoInfo *info, struct PrivStruct *ps)
1033{ 1032{
1034 gchar *tmp; 1033 gchar *tmp;
1035 guint u, u2; 1034 guint u, u2;
@@ -1115,7 +1114,7 @@ send_video_info (GstDiscovererVideoInfo *info, PrivStruct *ps)
1115} 1114}
1116 1115
1117static int 1116static int
1118send_subtitle_info (GstDiscovererSubtitleInfo *info, PrivStruct *ps) 1117send_subtitle_info (GstDiscovererSubtitleInfo *info, struct PrivStruct *ps)
1119{ 1118{
1120 gchar *tmp; 1119 gchar *tmp;
1121 const gchar *ctmp; 1120 const gchar *ctmp;
@@ -1131,7 +1130,7 @@ send_subtitle_info (GstDiscovererSubtitleInfo *info, PrivStruct *ps)
1131} 1130}
1132 1131
1133static void 1132static void
1134send_stream_info (GstDiscovererStreamInfo * info, PrivStruct *ps) 1133send_stream_info (GstDiscovererStreamInfo * info, struct PrivStruct *ps)
1135{ 1134{
1136 gchar *desc = NULL; 1135 gchar *desc = NULL;
1137 const GstStructure *misc; 1136 const GstStructure *misc;
@@ -1219,7 +1218,7 @@ static void
1219send_tag_foreach (const GstTagList * tags, const gchar * tag, 1218send_tag_foreach (const GstTagList * tags, const gchar * tag,
1220 gpointer user_data) 1219 gpointer user_data)
1221{ 1220{
1222 PrivStruct *ps = (PrivStruct *) user_data; 1221 struct PrivStruct *ps = (struct PrivStruct *) user_data;
1223 size_t i; 1222 size_t i;
1224 size_t tagl = sizeof (__known_tags) / sizeof (struct KnownTag); 1223 size_t tagl = sizeof (__known_tags) / sizeof (struct KnownTag);
1225 struct KnownTag *kt = NULL; 1224 struct KnownTag *kt = NULL;
@@ -1411,7 +1410,7 @@ static void
1411send_toc_tags_foreach (const GstTagList * tags, const gchar * tag, 1410send_toc_tags_foreach (const GstTagList * tags, const gchar * tag,
1412 gpointer user_data) 1411 gpointer user_data)
1413{ 1412{
1414 PrivStruct *ps = (PrivStruct *) user_data; 1413 struct PrivStruct *ps = (struct PrivStruct *) user_data;
1415 GValue val = { 0, }; 1414 GValue val = { 0, };
1416 gchar *topen, *str, *tclose; 1415 gchar *topen, *str, *tclose;
1417 const gchar *type_name; 1416 const gchar *type_name;
@@ -1467,7 +1466,7 @@ send_toc_tags_foreach (const GstTagList * tags, const gchar * tag,
1467static void 1466static void
1468send_toc_foreach (gpointer data, gpointer user_data) 1467send_toc_foreach (gpointer data, gpointer user_data)
1469{ 1468{
1470 PrivStruct *ps = (PrivStruct *) user_data; 1469 struct PrivStruct *ps = (struct PrivStruct *) user_data;
1471 GstTocEntry *entry = (GstTocEntry *) data; 1470 GstTocEntry *entry = (GstTocEntry *) data;
1472 GstTagList *tags; 1471 GstTagList *tags;
1473 GList *subentries; 1472 GList *subentries;
@@ -1522,7 +1521,7 @@ send_toc_foreach (gpointer data, gpointer user_data)
1522} 1521}
1523 1522
1524static void 1523static void
1525send_streams (GstDiscovererStreamInfo *info, PrivStruct *ps) 1524send_streams (GstDiscovererStreamInfo *info, struct PrivStruct *ps)
1526{ 1525{
1527 while (NULL != info && !ps->time_to_leave) 1526 while (NULL != info && !ps->time_to_leave)
1528 { 1527 {
@@ -1537,7 +1536,7 @@ send_streams (GstDiscovererStreamInfo *info, PrivStruct *ps)
1537#define TOC_XML_HEADER "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n" 1536#define TOC_XML_HEADER "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n"
1538 1537
1539static void 1538static void
1540send_info (GstDiscovererInfo * info, PrivStruct *ps) 1539send_info (GstDiscovererInfo * info, struct PrivStruct *ps)
1541{ 1540{
1542 const GstTagList *tags; 1541 const GstTagList *tags;
1543 const GstToc *toc; 1542 const GstToc *toc;
@@ -1604,7 +1603,7 @@ send_info (GstDiscovererInfo * info, PrivStruct *ps)
1604} 1603}
1605 1604
1606static void 1605static void
1607send_discovered_info (GstDiscovererInfo * info, PrivStruct * ps) 1606send_discovered_info (GstDiscovererInfo * info, struct PrivStruct * ps)
1608{ 1607{
1609 GstDiscovererResult result; 1608 GstDiscovererResult result;
1610 1609