imagesequencesrc: fix regular image deadlock
authorStéphane Cerveau <scerveau@igalia.com>
Thu, 12 Oct 2023 14:05:18 +0000 (16:05 +0200)
committerTim-Philipp Müller <tim@centricular.com>
Sun, 15 Oct 2023 18:00:36 +0000 (19:00 +0100)
With one regular image file path provided (without %05d),
the element was stuck in a dead loop counting the frames:

gst_image_sequence_src_count_frames

This allows to display any image file out of the element
for a given number of buffers.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5487>

subprojects/gst-plugins-good/gst/multifile/gstimagesequencesrc.c

index da96ee2..7775202 100644 (file)
@@ -489,24 +489,25 @@ static gint
 gst_image_sequence_src_count_frames (GstImageSequenceSrc * self,
     gboolean can_read)
 {
+  gchar *previous_filename = NULL;
   if (can_read && self->stop_index < 0 && self->path) {
     gint i;
 
     for (i = self->start_index;; i++) {
       gchar *filename = g_strdup_printf (self->path, i);
-
-      if (!g_file_test (filename, G_FILE_TEST_IS_REGULAR)) {
+      if (!g_file_test (filename, G_FILE_TEST_IS_REGULAR)
+          || !g_strcmp0 (previous_filename, filename)) {
         i--;
         g_free (filename);
         break;
       }
-
-      g_free (filename);
+      g_free (previous_filename);
+      previous_filename = filename;
     }
     if (i > self->start_index)
       self->stop_index = i;
   }
-
+  g_free (previous_filename);
   if (self->stop_index >= self->start_index)
     self->n_frames = self->stop_index - self->start_index + 1;
   return self->n_frames;