*** gst/gstevent.c	Tue Jan 19 20:05:35 2010
--- /home/user/Development/videoconf/data/bug/gstxvimage/gstevent_prototype.c	Wed Dec 29 13:28:47 2010
***************
*** 117,122 ****
--- 117,123 ----
    {GST_EVENT_BUFFERSIZE, "buffersize", 0},
    {GST_EVENT_SINK_MESSAGE, "sink-message", 0},
    {GST_EVENT_QOS, "qos", 0},
+   {GST_EVENT_QOS_OBSCURED, "qos-obscured", 0},
    {GST_EVENT_SEEK, "seek", 0},
    {GST_EVENT_NAVIGATION, "navigation", 0},
    {GST_EVENT_LATENCY, "latency", 0},
***************
*** 854,859 ****
--- 855,912 ----
  }
  
  /**
+  * gst_event_new_qos_obscured:
+  * @rate: the degraded rate of the qos message
+  * 
+  * Allocate a new qos_obscured event with the given values.
+  * The qos_obscured event is generated in an element that wants an upstream
+  * element to either reduce its rate because its rendering window is in obscured state.
+  * Typically sinks generate one event on buffer arrival for every second.
+  *
+  * @rate indicates the suggested degraded rate of the streaming for the upstream
+  * elements such as decoder. The value is generally non-negative value based on practice.
+  */
+ GstEvent *
+ gst_event_new_qos_obscured (gdouble rate)
+ {
+   GstEvent *event;
+   GstStructure *structure;
+  
+   /* rate must be non-negative value */
+   g_return_val_if_fail (rate >= 0, NULL);
+ 
+   GST_CAT_INFO (GST_CAT_EVENT, "creating qos-obscured rate %lf", rate);
+ 
+   structure = gst_structure_id_new (GST_QUARK (EVENT_QOS_OBSCURED), 
+       GST_QUARK (RATE), G_TYPE_DOUBLE, rate, NULL);
+   event = gst_event_new_custom (GST_EVENT_QOS_OBSCURED, structure); 
+ 
+   return event;
+ }
+ 
+ /**
+  * gst_event_parse_qos_obscured:
+  * @event: The event to query
+  * @rate: A pointer to store the rate in
+  * 
+  * Get the rate in the qos_obscured event. See
+  * gst_event_new_qos_obscured() for more information about the different event values.
+  */
+ void 
+ gst_event_parse_qos_obscured (GstEvent * event, gdouble * rate)
+ {
+   const GstStructure *structure;
+   g_return_if_fail (GST_IS_EVENT (event));
+   g_return_if_fail (GST_EVENT_TYPE (event) == GST_EVENT_QOS_OBSCURED);
+ 
+   structure = gst_event_get_structure (event);
+   if (rate) 
+     *rate = 
+         g_value_get_double (gst_structure_id_get_value (structure, 
+             GST_QUARK (RATE)));
+ }
+ 
+ /**
   * gst_event_parse_qos:
   * @event: The event to query
   * @proportion: A pointer to store the proportion in
