Add busy field and quark for the buffering query so that the app can only use the...
authorWim Taymans <wim.taymans@gmail.com>
Tue, 8 Apr 2008 20:17:49 +0000 (20:17 +0000)
committerWim Taymans <wim.taymans@gmail.com>
Tue, 8 Apr 2008 20:17:49 +0000 (20:17 +0000)
Original commit message from CVS:
* docs/design/part-buffering.txt:
* gst/gstquark.c:
* gst/gstquark.h:
* gst/gstquery.c: (gst_query_parse_latency),
(gst_query_new_buffering), (gst_query_set_buffering_percent),
(gst_query_parse_buffering_percent):
* gst/gstquery.h:
Add busy field and quark for the buffering query so that the app can
only use the query to see if buffering is in progress.

ChangeLog
docs/design/part-buffering.txt
gst/gstquark.c
gst/gstquark.h
gst/gstquery.c
gst/gstquery.h

index d2a1688007c38f2f5f4d99e171b5736a0d2313b2..e03d36c0ebffc897e4d801e1cafb892354ae4d5e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2008-04-08  Wim Taymans  <wim.taymans@collabora.co.uk>
+
+       * docs/design/part-buffering.txt:
+       * gst/gstquark.c:
+       * gst/gstquark.h:
+       * gst/gstquery.c: (gst_query_parse_latency),
+       (gst_query_new_buffering), (gst_query_set_buffering_percent),
+       (gst_query_parse_buffering_percent):
+       * gst/gstquery.h:
+       Add busy field and quark for the buffering query so that the app can
+       only use the query to see if buffering is in progress.
+
 2008-04-08  Wim Taymans  <wim.taymans@collabora.co.uk>
 
        * docs/gst/gstreamer-sections.txt:
index 9d443dd330e66d0f41b85e4d67920fae2c3f4d6e..3665a4255d0a983270e552d370edcfb6519b3c6a 100644 (file)
@@ -191,6 +191,10 @@ In addition to all the fields present in the buffering message, the BUFFERING
 query contains the following field, which indicate the available downloaded
 range in a specific format and the estimated time to complete:
 
+  "busy", G_TYPE_BOOLEAN
+    - if buffering was busy. This flag allows the application to pause the
+      pipeline by using the query only.
+
   "format", GST_TYPE_FORMAT
     - the format of the "start" and "stop" values below  
    
index 0b1789667dc1885bb9e9cb0da60af6a315809030..71de551ad1e910d4aa4f6028004bdc76081edb75 100644 (file)
@@ -34,7 +34,7 @@ static const gchar *_quark_strings[] = {
   "avg-in-rate", "avg-out-rate", "buffering-left",
   "estimated-total", "old-state", "new-state", "pending-state",
   "clock", "ready", "position", "new-base-time", "live", "min-latency",
-  "max-latency"
+  "max-latency", "busy"
 };
 
 GQuark _priv_gst_quark_table[GST_QUARK_MAX];
index c9f386f3e89fa32b36389c427a9f0941412a2139..12e1601aa9323e37656be88dd6911bca71046c68 100644 (file)
@@ -59,8 +59,9 @@ typedef enum _GstQuarkId
   GST_QUARK_LIVE = 30,
   GST_QUARK_MIN_LATENCY = 31,
   GST_QUARK_MAX_LATENCY = 32,
+  GST_QUARK_BUSY = 33,
 
-  GST_QUARK_MAX = 33
+  GST_QUARK_MAX = 34
 } GstQuarkId;
 
 extern GQuark _priv_gst_quark_table[GST_QUARK_MAX];
index 15b166230b5410bb73e1aa62e1de94abaa2597cc..464194a9de4a7df2bfc525fc6cfba4c863253b76 100644 (file)
@@ -1118,8 +1118,11 @@ gst_query_new_buffering (GstFormat format)
   GstStructure *structure;
 
   structure = gst_structure_empty_new ("GstQueryBuffering");
+  /* by default, we configure the answer as no buffering with a 100% buffering
+   * progress */
   gst_structure_id_set (structure,
-      GST_QUARK (BUFFER_PERCENT), G_TYPE_INT, -1,
+      GST_QUARK (BUSY), G_TYPE_BOOLEAN, FALSE,
+      GST_QUARK (BUFFER_PERCENT), G_TYPE_INT, 100,
       GST_QUARK (BUFFERING_MODE), GST_TYPE_BUFFERING_MODE, GST_BUFFERING_STREAM,
       GST_QUARK (AVG_IN_RATE), G_TYPE_INT, -1,
       GST_QUARK (AVG_OUT_RATE), G_TYPE_INT, -1,
@@ -1137,36 +1140,45 @@ gst_query_new_buffering (GstFormat format)
 /**
  * gst_query_set_buffering_percent
  * @query: A valid #GstQuery of type GST_QUERY_BUFFERING.
+ * @busy: if buffering is busy
  * @percent: a buffering percent
  *
  * Set the percentage of buffered data. This is a value between 0 and 100.
+ * The @busy indicator is %TRUE when the buffering is in progress.
  *
  * Since: 0.10.20
  */
 void
-gst_query_set_buffering_percent (GstQuery * query, gint percent)
+gst_query_set_buffering_percent (GstQuery * query, gboolean busy, gint percent)
 {
   g_return_if_fail (GST_QUERY_TYPE (query) == GST_QUERY_BUFFERING);
   g_return_if_fail (percent >= 0 && percent <= 100);
 
   gst_structure_id_set (query->structure,
+      GST_QUARK (BUSY), G_TYPE_BOOLEAN, busy,
       GST_QUARK (BUFFER_PERCENT), G_TYPE_INT, percent, NULL);
 }
 
 /**
  * gst_query_parse_buffering_percent
  * @query: A valid #GstQuery of type GST_QUERY_BUFFERING.
+ * @busy: if buffering is busy
  * @percent: a buffering percent
  *
  * Get the percentage of buffered data. This is a value between 0 and 100.
+ * The @busy indicator is %TRUE when the buffering is in progress.
  *
  * Since: 0.10.20
  */
 void
-gst_query_parse_buffering_percent (GstQuery * query, gint * percent)
+gst_query_parse_buffering_percent (GstQuery * query, gboolean * busy,
+    gint * percent)
 {
   g_return_if_fail (GST_QUERY_TYPE (query) == GST_QUERY_BUFFERING);
 
+  if (busy)
+    *busy = g_value_get_boolean (gst_structure_id_get_value (query->structure,
+            GST_QUARK (BUSY)));
   if (percent)
     *percent = g_value_get_int (gst_structure_id_get_value (query->structure,
             GST_QUARK (BUFFER_PERCENT)));
index 588b5764057dc545e5520c3f8ef935dbf9487c0c..4788c2480ca7b2c94694e467c6c7482d8af9a57f 100644 (file)
@@ -266,8 +266,8 @@ void            gst_query_parse_formats_nth     (GstQuery *query, guint nth, Gst
 
 /* buffering query */
 GstQuery*       gst_query_new_buffering           (GstFormat format);
-void            gst_query_set_buffering_percent   (GstQuery *query, gint percent);
-void            gst_query_parse_buffering_percent (GstQuery *query, gint *percent);
+void            gst_query_set_buffering_percent   (GstQuery *query, gboolean busy, gint percent);
+void            gst_query_parse_buffering_percent (GstQuery *query, gboolean *busy, gint *percent);
 
 void            gst_query_set_buffering_stats     (GstQuery *query, GstBufferingMode mode,
                                                    gint avg_in, gint avg_out,