queue2: handle overwriting the current range correctly 21/221921/2 accepted/tizen/unified/20200116.120457 submit/tizen/20200108.110116 submit/tizen/20200109.095851
authorEunhye Choi <eunhae1.choi@samsung.com>
Wed, 8 Jan 2020 08:20:59 +0000 (17:20 +0900)
committerEunhye Choi <eunhae1.choi@samsung.com>
Wed, 8 Jan 2020 08:23:30 +0000 (17:23 +0900)
- 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

plugins/elements/gstqueue2.c

index d2722fd..8a59976 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);