[vlc-commits] input: attach slaves to master only
Thomas Guillem
git at videolan.org
Mon Dec 4 18:17:24 CET 2017
vlc | branch: master | Thomas Guillem <thomas at gllm.fr> | Mon Dec 4 17:59:42 2017 +0100| [55b62a9b3428b97b2eb792fbcca6121f01158c07] | committer: Thomas Guillem
input: attach slaves to master only
The previous logic was wrong. An input item is not necessarily a master if it's
not a slave.
Fixes #19208
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=55b62a9b3428b97b2eb792fbcca6121f01158c07
---
include/vlc_input_item.h | 12 ++++++++++++
src/input/item.c | 15 ++++++++++++++-
2 files changed, 26 insertions(+), 1 deletion(-)
diff --git a/include/vlc_input_item.h b/include/vlc_input_item.h
index b9ee89eeac..89b6324275 100644
--- a/include/vlc_input_item.h
+++ b/include/vlc_input_item.h
@@ -142,6 +142,18 @@ enum slave_priority
};
/* Extensions must be in alphabetical order */
+#define MASTER_EXTENSIONS \
+ "asf", "avi", "divx", \
+ "f4v", "flv", "m1v", \
+ "m2v", "m4v", "mkv", \
+ "mov", "mp2", "mp2v", \
+ "mp4", "mp4v", "mpe", \
+ "mpeg", "mpeg1", "mpeg2", \
+ "mpeg4", "mpg", "mpv2", \
+ "mxf", "ogv", "ogx", \
+ "ps", "vro","webm", \
+ "wmv", "wtv"
+
#define SLAVE_SPU_EXTENSIONS \
"aqt", "ass", "cdg", \
"dks", "idx", "jss", \
diff --git a/src/input/item.c b/src/input/item.c
index 4ed02ab2da..2000de84a2 100644
--- a/src/input/item.c
+++ b/src/input/item.c
@@ -623,6 +623,18 @@ static int bsearch_strcmp_cb(const void *a, const void *b)
return strcasecmp(a, *entry);
}
+static bool input_item_IsMaster(const char *psz_filename)
+{
+ static const char *const ppsz_master_exts[] = { MASTER_EXTENSIONS };
+
+ const char *psz_ext = strrchr(psz_filename, '.');
+ if (psz_ext == NULL || *(++psz_ext) == '\0')
+ return false;
+
+ return bsearch(psz_ext, ppsz_master_exts, ARRAY_SIZE(ppsz_master_exts),
+ sizeof(const char *), bsearch_strcmp_cb) != NULL;
+}
+
bool input_item_slave_GetType(const char *psz_filename,
enum slave_type *p_slave_type)
{
@@ -1558,7 +1570,8 @@ static void rdh_attach_slaves(struct vlc_readdir_helper *p_rdh,
input_item_t *p_item = p_node->p_item;
enum slave_type unused;
- if (input_item_slave_GetType(p_item->psz_name, &unused))
+ if (!input_item_IsMaster(p_item->psz_name)
+ || input_item_slave_GetType(p_item->psz_name, &unused))
continue; /* don't match 2 possible slaves between each others */
for (size_t j = 0; j < p_rdh->i_slaves; j++)
More information about the vlc-commits
mailing list