imagesequencesrc: fix regular image deadlock

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>
This commit is contained in:
Stéphane Cerveau 2023-10-12 16:05:18 +02:00 committed by Tim-Philipp Müller
parent 3b3649353c
commit 87292c6026

View 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;