queue2: add buffer-mode property for rtsp 70/104170/1
authorEunhae Choi <eunhae1.choi@samsung.com>
Mon, 12 Dec 2016 12:43:34 +0000 (21:43 +0900)
committerEunhae Choi <eunhae1.choi@samsung.com>
Mon, 12 Dec 2016 12:43:34 +0000 (21:43 +0900)
Change-Id: I319da90813d2ea601a86ae83ad1e48c4c159238b

packaging/gstreamer.spec
plugins/elements/gstqueue2.c

index fd01353..99a1852 100644 (file)
@@ -2,7 +2,7 @@
 
 Name:           gstreamer
 Version:        1.6.1
-Release:        6
+Release:        7
 Summary:        Streaming-Media Framework Runtime
 License:        LGPL-2.0+
 Group:          Multimedia/Framework
@@ -74,6 +74,7 @@ export CFLAGS="%{optflags} \
 %if "%{?profile}" == "tv"
        -DTIZEN_PROFILE_TV\
 %endif
+       -DTIZEN_FEATURE_RTSPSRC_MODIFICATION\
        -fno-strict-aliasing"
 
 %configure\
index 2d12238..05c0fff 100644 (file)
@@ -128,6 +128,9 @@ enum
   PROP_TEMP_LOCATION,
   PROP_TEMP_REMOVE,
   PROP_RING_BUFFER_MAX_SIZE,
+#ifdef TIZEN_FEATURE_RTSPSRC_MODIFICATION
+  PROP_BUFFER_MODE,
+#endif
   PROP_LAST
 };
 
@@ -383,6 +386,19 @@ gst_queue2_class_init (GstQueue2Class * klass)
           0, G_MAXUINT64, DEFAULT_RING_BUFFER_MAX_SIZE,
           G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 
+#ifdef TIZEN_FEATURE_RTSPSRC_MODIFICATION
+  /**
+   * GstQueue2:buffer-mode:
+   *
+   * Control the buffering mode used by the queue2.
+   */
+  g_object_class_install_property (gobject_class, PROP_BUFFER_MODE,
+      g_param_spec_enum ("buffer-mode", "Buffer Mode",
+          "Control the buffering algorithm in use",
+          GST_TYPE_BUFFERING_MODE, GST_BUFFERING_STREAM,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+#endif
+
   /* set several parent class virtual functions */
   gobject_class->finalize = gst_queue2_finalize;
 
@@ -477,7 +493,9 @@ gst_queue2_init (GstQueue2 * queue)
 
   queue->ring_buffer = NULL;
   queue->ring_buffer_max_size = DEFAULT_RING_BUFFER_MAX_SIZE;
-
+#ifdef TIZEN_FEATURE_RTSPSRC_MODIFICATION
+  queue->mode = -1;
+#endif
   GST_DEBUG_OBJECT (queue,
       "initialized queue's not_empty & not_full conditions");
 }
@@ -895,6 +913,22 @@ static void
 get_buffering_stats (GstQueue2 * queue, gint percent, GstBufferingMode * mode,
     gint * avg_in, gint * avg_out, gint64 * buffering_left)
 {
+#ifdef TIZEN_FEATURE_RTSPSRC_MODIFICATION
+  if (queue->mode != -1) {
+    *mode = queue->mode;
+  } else {
+    if (mode) {
+      if (!QUEUE_IS_USING_QUEUE (queue)) {
+        if (QUEUE_IS_USING_RING_BUFFER (queue))
+          *mode = GST_BUFFERING_TIMESHIFT;
+        else
+          *mode = GST_BUFFERING_DOWNLOAD;
+      } else {
+        *mode = GST_BUFFERING_STREAM;
+      }
+    }
+  }
+#else
   if (mode) {
     if (!QUEUE_IS_USING_QUEUE (queue)) {
       if (QUEUE_IS_USING_RING_BUFFER (queue))
@@ -905,6 +939,7 @@ get_buffering_stats (GstQueue2 * queue, gint percent, GstBufferingMode * mode,
       *mode = GST_BUFFERING_STREAM;
     }
   }
+#endif
 
   if (avg_in)
     *avg_in = queue->byte_in_rate;
@@ -2896,7 +2931,11 @@ static void
 gst_queue2_loop (GstPad * pad)
 {
   GstQueue2 *queue;
+#ifdef TIZEN_FEATURE_RTSPSRC_MODIFICATION
+  GstFlowReturn ret = GST_FLOW_OK;
+#else
   GstFlowReturn ret;
+#endif
 
   queue = GST_QUEUE2 (GST_PAD_PARENT (pad));
 
@@ -2923,7 +2962,13 @@ gst_queue2_loop (GstPad * pad)
     if (started)
       g_timer_continue (queue->out_timer);
   }
+#ifdef TIZEN_FEATURE_RTSPSRC_MODIFICATION
+  if (!queue->is_buffering) {
+    ret = gst_queue2_push_one (queue);
+  }
+#else
   ret = gst_queue2_push_one (queue);
+#endif
   queue->srcresult = ret;
   queue->sinkresult = ret;
   if (ret != GST_FLOW_OK)
@@ -3672,6 +3717,11 @@ gst_queue2_set_property (GObject * object,
     case PROP_RING_BUFFER_MAX_SIZE:
       queue->ring_buffer_max_size = g_value_get_uint64 (value);
       break;
+#ifdef TIZEN_FEATURE_RTSPSRC_MODIFICATION
+    case PROP_BUFFER_MODE:
+      queue->mode = g_value_get_enum (value);
+      break;
+#endif
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -3732,6 +3782,11 @@ gst_queue2_get_property (GObject * object,
     case PROP_RING_BUFFER_MAX_SIZE:
       g_value_set_uint64 (value, queue->ring_buffer_max_size);
       break;
+#ifdef TIZEN_FEATURE_RTSPSRC_MODIFICATION
+    case PROP_BUFFER_MODE:
+      g_value_set_enum (value, queue->mode);
+      break;
+#endif
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;