diff options
Diffstat (limited to 'src/plugins/gstreamer_extractor.c')
-rw-r--r-- | src/plugins/gstreamer_extractor.c | 55 |
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 | ||
622 | typedef struct | 622 | struct 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 | ||
639 | static void send_streams (GstDiscovererStreamInfo *info, PrivStruct *ps); | 639 | static void send_streams (GstDiscovererStreamInfo *info, struct PrivStruct *ps); |
640 | 640 | ||
641 | static void send_tag_foreach (const GstTagList * tags, const gchar * tag, | 641 | static void send_tag_foreach (const GstTagList * tags, const gchar * tag, |
642 | gpointer user_data); | 642 | gpointer user_data); |
643 | 643 | ||
644 | static void send_discovered_info (GstDiscovererInfo * info, PrivStruct * ps); | 644 | static void send_discovered_info (GstDiscovererInfo * info, struct PrivStruct * ps); |
645 | 645 | ||
646 | static void _source_setup (GstDiscoverer * dc, GstElement * source, PrivStruct * ps); | 646 | static void _source_setup (GstDiscoverer * dc, GstElement * source, struct PrivStruct * ps); |
647 | 647 | ||
648 | static void feed_data (GstElement * appsrc, guint size, PrivStruct * ps); | 648 | static void feed_data (GstElement * appsrc, guint size, struct PrivStruct * ps); |
649 | static gboolean seek_data (GstElement * appsrc, guint64 position, PrivStruct * ps); | 649 | static gboolean seek_data (GstElement * appsrc, guint64 position, struct PrivStruct * ps); |
650 | 650 | ||
651 | static int initialized = FALSE; | ||
652 | 651 | ||
653 | static GstDiscoverer *dc; | 652 | static GstDiscoverer *dc; |
654 | static PrivStruct *ps; | 653 | static struct PrivStruct *ps; |
655 | 654 | ||
656 | static GQuark *audio_quarks; | 655 | static GQuark *audio_quarks; |
657 | static GQuark *video_quarks; | 656 | static GQuark *video_quarks; |
658 | static GQuark *subtitle_quarks; | 657 | static GQuark *subtitle_quarks; |
659 | 658 | ||
660 | static void | 659 | static 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 | ||
666 | static void | 665 | static 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. */ |
723 | static void | 721 | static 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 | ||
748 | static void | 746 | static void |
749 | feed_data (GstElement * appsrc, guint size, PrivStruct * ps) | 747 | feed_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 | ||
814 | static gboolean | 812 | static gboolean |
815 | seek_data (GstElement * appsrc, guint64 position, PrivStruct * ps) | 813 | seek_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 | ||
823 | static gboolean | 821 | static 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) | |||
838 | void | 836 | void |
839 | EXTRACTOR_gstreamer_extract_method (struct EXTRACTOR_ExtractContext *ec) | 837 | EXTRACTOR_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 | |||
881 | send_structure_foreach (GQuark field_id, const GValue *value, | 880 | send_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 | ||
954 | static int | 953 | static int |
955 | send_audio_info (GstDiscovererAudioInfo *info, PrivStruct *ps) | 954 | send_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 | ||
1031 | static int | 1030 | static int |
1032 | send_video_info (GstDiscovererVideoInfo *info, PrivStruct *ps) | 1031 | send_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 | ||
1117 | static int | 1116 | static int |
1118 | send_subtitle_info (GstDiscovererSubtitleInfo *info, PrivStruct *ps) | 1117 | send_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 | ||
1133 | static void | 1132 | static void |
1134 | send_stream_info (GstDiscovererStreamInfo * info, PrivStruct *ps) | 1133 | send_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 | |||
1219 | send_tag_foreach (const GstTagList * tags, const gchar * tag, | 1218 | send_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 | |||
1411 | send_toc_tags_foreach (const GstTagList * tags, const gchar * tag, | 1410 | send_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, | |||
1467 | static void | 1466 | static void |
1468 | send_toc_foreach (gpointer data, gpointer user_data) | 1467 | send_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 | ||
1524 | static void | 1523 | static void |
1525 | send_streams (GstDiscovererStreamInfo *info, PrivStruct *ps) | 1524 | send_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 | ||
1539 | static void | 1538 | static void |
1540 | send_info (GstDiscovererInfo * info, PrivStruct *ps) | 1539 | send_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 | ||
1606 | static void | 1605 | static void |
1607 | send_discovered_info (GstDiscovererInfo * info, PrivStruct * ps) | 1606 | send_discovered_info (GstDiscovererInfo * info, struct PrivStruct * ps) |
1608 | { | 1607 | { |
1609 | GstDiscovererResult result; | 1608 | GstDiscovererResult result; |
1610 | 1609 | ||