opensubscriber
   Find in this group all groups
 
Unknown more information…

g : gnunet-svn@gnu.org 19 August 2012 • 9:53PM -0400

[GNUnet-SVN] r23309 - Extractor/src/plugins
by gnunet

REPLY TO AUTHOR
 
REPLY TO GROUP




Author: LRN
Date: 2012-08-19 15:53:00 +0200 (Sun, 19 Aug 2012)
New Revision: 23309

Modified:
   Extractor/src/plugins/gstreamer_extractor.c
Log:
Ignore certain struct fields; tell video and image apart

Modified: Extractor/src/plugins/gstreamer_extractor.c
===================================================================
--- Extractor/src/plugins/gstreamer_extractor.c 2012-08-19 13:52:57 UTC (rev 23308)
+++ Extractor/src/plugins/gstreamer_extractor.c 2012-08-19 13:53:00 UTC (rev 23309)
@@ -615,7 +615,8 @@
   STREAM_TYPE_AUDIO = 1,
   STREAM_TYPE_VIDEO = 2,
   STREAM_TYPE_SUBTITLE = 3,
-  STREAM_TYPE_CONTAINER = 4
+  STREAM_TYPE_CONTAINER = 4,
+  STREAM_TYPE_IMAGE = 5
};

typedef struct
@@ -652,6 +653,10 @@
static GstDiscoverer *dc;
static PrivStruct *ps;

+static GQuark *audio_quarks;
+static GQuark *video_quarks;
+static GQuark *subtitle_quarks;
+
static void
_new_discovered_uri (GstDiscoverer * dc, GstDiscovererInfo * info, GError * err, PrivStruct * ps)
{
@@ -690,6 +695,24 @@
   g_signal_connect (dc, "finished", G_CALLBACK (_discoverer_finished), ps);
   g_signal_connect (dc, "source-setup", G_CALLBACK (_source_setup), ps);

+  audio_quarks = g_new0 (GQuark, 4);
+  audio_quarks[0] = g_quark_from_string ("rate");
+  audio_quarks[1] = g_quark_from_string ("channels");
+  audio_quarks[2] = g_quark_from_string ("depth");
+  audio_quarks[3] = g_quark_from_string (NULL);
+
+  video_quarks = g_new0 (GQuark, 6);
+  video_quarks[0] = g_quark_from_string ("width");
+  video_quarks[1] = g_quark_from_string ("height");
+  video_quarks[2] = g_quark_from_string ("framerate");
+  video_quarks[3] = g_quark_from_string ("max-framerate");
+  video_quarks[4] = g_quark_from_string ("pixel-aspect-ratio");
+  video_quarks[5] = g_quark_from_string (NULL);
+
+  subtitle_quarks = g_new0 (GQuark, 2);
+  subtitle_quarks[0] = g_quark_from_string ("language-code");
+  subtitle_quarks[1] = g_quark_from_string (NULL);
+
   return TRUE;
}

@@ -863,7 +886,31 @@
   const gchar *field_name = g_quark_to_string (field_id);
   const gchar *type_name = g_type_name (G_VALUE_TYPE (value));
   GType gst_fraction = GST_TYPE_FRACTION;
+  GQuark *quark;

+  switch (ps->st)
+  {
+  case STREAM_TYPE_AUDIO:
+    for (quark = audio_quarks; *quark != 0; quark++)
+      if (*quark == field_id)
+        return TRUE;
+    break;
+  case STREAM_TYPE_VIDEO:
+  case STREAM_TYPE_IMAGE:
+    for (quark = video_quarks; *quark != 0; quark++)
+      if (*quark == field_id)
+        return TRUE;
+    break;
+  case STREAM_TYPE_SUBTITLE:
+    for (quark = subtitle_quarks; *quark != 0; quark++)
+      if (*quark == field_id)
+        return TRUE;
+    break;
+  case STREAM_TYPE_CONTAINER:
+    break;
+  }
+  
+
   /* TODO: check a list of known quarks, use specific EXTRACTOR_MetaType  */
   switch (G_VALUE_TYPE (value))
   {
@@ -1093,10 +1140,21 @@

   caps = gst_discoverer_stream_info_get_caps (info);

+  if (GST_IS_DISCOVERER_AUDIO_INFO (info))
+    ps->st = STREAM_TYPE_AUDIO;
+  else if (GST_IS_DISCOVERER_VIDEO_INFO (info))
+    ps->st = STREAM_TYPE_VIDEO;
+  else if (GST_IS_DISCOVERER_SUBTITLE_INFO (info))
+    ps->st = STREAM_TYPE_SUBTITLE;
+  else if (GST_IS_DISCOVERER_CONTAINER_INFO (info))
+    ps->st = STREAM_TYPE_CONTAINER;
+
   if (caps)
   {
     GstStructure *structure = gst_caps_get_structure (caps, 0);
     const gchar *structname = gst_structure_get_name (structure);
+    if (g_str_has_prefix (structname, "image/"))
+      ps->st = STREAM_TYPE_IMAGE;
     ps->time_to_leave = ps->ec->proc (ps->ec->cls, "gstreamer",
       EXTRACTOR_METATYPE_MIMETYPE, EXTRACTOR_METAFORMAT_UTF8, "text/plain",
       (const char *) structname, strlen (structname) + 1);
@@ -1108,7 +1166,10 @@
   }

   if (ps->time_to_leave)
+  {
+    ps->st = STREAM_TYPE_NONE;
     return;
+  }

   misc = gst_discoverer_stream_info_get_misc (info);
   if (misc)
@@ -1117,22 +1178,17 @@
   }

   if (ps->time_to_leave)
+  {
+    ps->st = STREAM_TYPE_NONE;
     return;
+  }

   tags = gst_discoverer_stream_info_get_tags (info);
   if (tags)
   {
-    if (GST_IS_DISCOVERER_AUDIO_INFO (info))
-      ps->st = STREAM_TYPE_AUDIO;
-    else if (GST_IS_DISCOVERER_VIDEO_INFO (info))
-      ps->st = STREAM_TYPE_VIDEO;
-    else if (GST_IS_DISCOVERER_SUBTITLE_INFO (info))
-      ps->st = STREAM_TYPE_SUBTITLE;
-    else if (GST_IS_DISCOVERER_CONTAINER_INFO (info))
-      ps->st = STREAM_TYPE_CONTAINER;
     gst_tag_list_foreach (tags, send_tag_foreach, ps);
-    ps->st = STREAM_TYPE_NONE;
   }
+  ps->st = STREAM_TYPE_NONE;

   if (ps->time_to_leave)
     return;


_______________________________________________
GNUnet-SVN mailing list
GNUnet-SVN@gnu....
https://lists.gnu.org/mailman/listinfo/gnunet-svn

Bookmark with:

Delicious   Digg   reddit   Facebook   StumbleUpon

opensubscriber is not affiliated with the authors of this message nor responsible for its content.