[Spice-commits] src/channel-display-gst.c

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Jan 25 10:39:40 UTC 2019


 src/channel-display-gst.c |   34 ++++++++++++++++------------------
 1 file changed, 16 insertions(+), 18 deletions(-)

New commits:
commit c010679cf33b1fbc55e352c0e25d6a68ebe52d82
Author: Victor Toso <me at victortoso.com>
Date:   Fri Jan 25 11:32:12 2019 +0100

    display-gst: small refactor get_decoded_frame()
    
    Small refactor to make each code block a bit more obvious.
    
    This code should (1) find the @buffer in the queue; (2) remove all old
    elements from queue. That perfectly fit in two loops in sequence, but
    they don't need to be nested and they don't need to use the same
    pointer (gstframe).
    
    As @num_frames_dropped is only used in the second block, this was
    moved as well, together with the debug.
    
    Signed-off-by: Victor Toso <victortoso at redhat.com>
    Acked-by: Frediano Ziglio <fziglio at redhat.com>

diff --git a/src/channel-display-gst.c b/src/channel-display-gst.c
index 4e66122..584e95b 100644
--- a/src/channel-display-gst.c
+++ b/src/channel-display-gst.c
@@ -212,8 +212,6 @@ static void schedule_frame(SpiceGstDecoder *decoder)
  */
 static SpiceGstFrame *get_decoded_frame(SpiceGstDecoder *decoder, GstBuffer *buffer)
 {
-    guint num_frames_dropped = 0;
-
     /* Gstreamer sometimes returns the same buffer twice
      * or buffers that have a modified, and thus unrecognizable, PTS.
      * Blindly removing frames from the decoding_queue until we find a
@@ -226,27 +224,27 @@ static SpiceGstFrame *get_decoded_frame(SpiceGstDecoder *decoder, GstBuffer *buf
     while (l) {
         gstframe = l->data;
         if (gstframe->timestamp == GST_BUFFER_PTS(buffer)) {
-
-            /* Now that we know there is a match, remove it and the older
-             * frames from the decoding queue.
-             */
-            while ((gstframe = g_queue_pop_head(decoder->decoding_queue))) {
-                if (gstframe->timestamp == GST_BUFFER_PTS(buffer)) {
-                    break;
-                }
-                /* The GStreamer pipeline dropped the corresponding
-                 * buffer.
-                 */
-                num_frames_dropped++;
-                free_gst_frame(gstframe);
-            }
             break;
         }
         gstframe = NULL;
         l = l->next;
     }
-    if (num_frames_dropped != 0) {
-        SPICE_DEBUG("the GStreamer pipeline dropped %u frames", num_frames_dropped);
+
+    if (gstframe != NULL) {
+        /* Now that we know there is a match, remove it and the older
+         * frames from the decoding queue */
+        SpiceGstFrame *late_frame;
+        guint num_frames_dropped = 0;
+
+        /* The GStreamer pipeline dropped the corresponding buffer. */
+        while ((late_frame = g_queue_pop_head(decoder->decoding_queue)) != gstframe) {
+            num_frames_dropped++;
+            free_gst_frame(late_frame);
+        }
+
+        if (num_frames_dropped != 0) {
+            SPICE_DEBUG("the GStreamer pipeline dropped %u frames", num_frames_dropped);
+        }
     }
     return gstframe;
 }


More information about the Spice-commits mailing list