queue2: handle overwriting the current range correctly 41/221941/1 accepted/tizen_5.0_unified tizen_5.0 accepted/tizen/5.0/unified/20200110.034353 submit/tizen_5.0/20200108.110136
authorEunhye Choi <eunhae1.choi@samsung.com>
Wed, 8 Jan 2020 08:20:59 +0000 (17:20 +0900)
committereunhae choi <eunhae1.choi@samsung.com>
Wed, 8 Jan 2020 10:00:00 +0000 (10:00 +0000)
- resolve the range handle issue

side issue of below upstream patch.
https://gitlab.freedesktop.org/gstreamer/gstreamer/commit/b3802f7a9e7988901367196dd3dc45cf4053d850
and the new patch is under reviewing.
https://gitlab.freedesktop.org/gstreamer/gstreamer/issues/208

Change-Id: Id368b546cb6fd40b29681c4111037c2913d9cd80
(cherry picked from commit 214d0b087667889188534f5d3190bf547cebffbf)

plugins/elements/gstqueue2.c

index 3c543a61d457f8a3e6910400e2e00ef02518fd17..98323b7a5c3639183643be68cfa8f14497f2920f 100644 (file)
@@ -2064,8 +2064,10 @@ gst_queue2_create_write (GstQueue2 * queue, GstBuffer * buffer)
         guint64 range_data_start, range_data_end;
         GstQueue2Range *range_to_destroy = NULL;
 
+#ifndef TIZEN_FEATURE_QUEUE2_MODIFICATION
         if (range == queue->current)
           goto next_range;
+#endif
 
         range_data_start = range->rb_offset;
         range_data_end = range->rb_writing_pos;
@@ -2089,7 +2091,11 @@ gst_queue2_create_write (GstQueue2 * queue, GstBuffer * buffer)
             goto next_range;
 
           if (new_writing_pos > range_data_start) {
+#ifdef TIZEN_FEATURE_QUEUE2_MODIFICATION
+            if (new_writing_pos >= range_data_end && range != queue->current) {
+#else
             if (new_writing_pos >= range_data_end) {
+#endif
               GST_DEBUG_OBJECT (queue,
                   "Removing range: offset %" G_GUINT64_FORMAT ", wpos %"
                   G_GUINT64_FORMAT, range->offset, range->writing_pos);
@@ -2114,7 +2120,12 @@ gst_queue2_create_write (GstQueue2 * queue, GstBuffer * buffer)
           if (new_wpos_virt <= range_data_start)
             goto next_range;
 
+#ifdef TIZEN_FEATURE_QUEUE2_MODIFICATION
+          if (new_wpos_virt > rb_size && new_writing_pos >= range_data_end
+            && range != queue->current) {
+#else
           if (new_wpos_virt > rb_size && new_writing_pos >= range_data_end) {
+#endif
             GST_DEBUG_OBJECT (queue,
                 "Removing range: offset %" G_GUINT64_FORMAT ", wpos %"
                 G_GUINT64_FORMAT, range->offset, range->writing_pos);