baseparse: Fixed http seek slow issue in case of souphttpsrc 07/55607/2
authorGilbok Lee <gilbok.lee@samsung.com>
Mon, 28 Dec 2015 06:30:38 +0000 (15:30 +0900)
committerGilbok Lee <gilbok.lee@samsung.com>
Mon, 28 Dec 2015 09:45:55 +0000 (18:45 +0900)
Sync with tizen 2.4 fixed code (http://165.213.149.170/gerrit/#/c/60291)

Change-Id: I8ce7178095cf9b20a9c9834ddc2ecc801cb32ed8
Signed-off-by: Gilbok Lee <gilbok.lee@samsung.com>
libs/gst/base/gstbaseparse.c
libs/gst/base/gstbaseparse.h
packaging/gstreamer.spec

index 65e9766..d995a09 100644 (file)
@@ -366,6 +366,9 @@ struct _GstBaseParsePrivate
   GstTagList *parser_tags;
   GstTagMergeMode parser_tags_merge_mode;
   gboolean tags_changed;
+#ifdef GST_BASEPARSE_MODIFICATION
+  gboolean accurate_index_seek;
+#endif
 };
 
 typedef struct _GstBaseParseSeek
@@ -889,6 +892,9 @@ gst_base_parse_reset (GstBaseParse * parse)
   g_list_free (parse->priv->detect_buffers);
   parse->priv->detect_buffers = NULL;
   parse->priv->detect_buffers_size = 0;
+#ifdef GST_BASEPARSE_MODIFICATION
+  parse->priv->accurate_index_seek = TRUE;
+#endif
   GST_OBJECT_UNLOCK (parse);
 }
 
@@ -4383,10 +4389,22 @@ gst_base_parse_handle_seek (GstBaseParse * parse, GstEvent * event)
 
   /* maybe we can be accurate for (almost) free */
   gst_base_parse_find_offset (parse, seeksegment.position, TRUE, &start_ts);
+#ifdef GST_BASEPARSE_MODIFICATION
+  if (parse->priv->accurate_index_seek) {
+    if (seeksegment.position <= start_ts + TARGET_DIFFERENCE) {
+      GST_DEBUG_OBJECT (parse, "accurate seek possible");
+      accurate = TRUE;
+    }
+  } else {
+    GST_DEBUG_OBJECT (parse, "accurate seek NOT possible");
+    accurate = FALSE;
+  }
+#else
   if (seeksegment.position <= start_ts + TARGET_DIFFERENCE) {
     GST_DEBUG_OBJECT (parse, "accurate seek possible");
     accurate = TRUE;
   }
+#endif
 
   if (accurate) {
     GstClockTime startpos;
@@ -4792,3 +4810,19 @@ gst_base_parse_merge_tags (GstBaseParse * parse, GstTagList * tags,
 
   GST_OBJECT_UNLOCK (parse);
 }
+
+#ifdef GST_BASEPARSE_MODIFICATION
+/*
+ * Checks if accurate seek mode are avilable from sub-parse
+ */
+void
+gst_base_parse_set_seek_mode (GstBaseParse * parse, gboolean seek_mode)
+{
+  g_return_if_fail (parse != NULL);
+  parse->priv->accurate_index_seek = seek_mode;
+  if (seek_mode)
+    GST_INFO_OBJECT (parse, "accurate seek mode ON");
+  else
+    GST_INFO_OBJECT (parse, "accurate seek mode OFF - for HTTP SEEK");
+}
+#endif
index 94522cc..61f95bb 100644 (file)
@@ -348,7 +348,10 @@ void            gst_base_parse_set_ts_at_offset (GstBaseParse *parse,
 void            gst_base_parse_merge_tags       (GstBaseParse  * parse,
                                                  GstTagList    * tags,
                                                  GstTagMergeMode mode);
-
+#ifdef GST_BASEPARSE_MODIFICATION
+void            gst_base_parse_set_seek_mode (GstBaseParse * parse,
+                                              gboolean       seek_mode);
+#endif
 G_END_DECLS
 
 #endif /* __GST_BASE_PARSE_H__ */
index b62a2dc..459ab81 100644 (file)
@@ -14,10 +14,10 @@ BuildRequires:  gettext-tools
 BuildRequires:  check-devel
 BuildRequires:  fdupes
 BuildRequires:  flex
-BuildRequires:  glib2-devel >= 2.32.0
+BuildRequires:  pkgconfig(glib-2.0) >= 2.32.0
 BuildRequires:  libtool
-BuildRequires:  libxml2-devel
-BuildRequires:  gobject-introspection-devel >= 1.31.1
+BuildRequires:  pkgconfig(libxml-2.0)
+BuildRequires:  pkgconfig(gobject-introspection-1.0) >= 1.31.1
 BuildRequires:  pkgconfig(dlog)
 
 %description