summaryrefslogtreecommitdiffstats
path: root/mpvcore/player/misc.c
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2013-11-19 22:36:33 +0100
committerwm4 <wm4@nowhere>2013-11-19 22:39:14 +0100
commitf197198ca3e79b923e5d0ae66fec847737ee1f41 (patch)
tree71ca40697b7e0bb0d7873d81246b82d987a92439 /mpvcore/player/misc.c
parent04bdd7af72aa9ab5aa81e38ca85d3f40e76f16d4 (diff)
downloadmpv-f197198ca3e79b923e5d0ae66fec847737ee1f41.tar.bz2
mpv-f197198ca3e79b923e5d0ae66fec847737ee1f41.tar.xz
player: add --merge-files option
Diffstat (limited to 'mpvcore/player/misc.c')
-rw-r--r--mpvcore/player/misc.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/mpvcore/player/misc.c b/mpvcore/player/misc.c
index be42d76447..548e2c7967 100644
--- a/mpvcore/player/misc.c
+++ b/mpvcore/player/misc.c
@@ -32,6 +32,7 @@
#include "mpvcore/mp_common.h"
#include "mpvcore/resolve.h"
#include "mpvcore/encode.h"
+#include "mpvcore/playlist.h"
#include "mpvcore/input/input.h"
#include "audio/out/ao.h"
@@ -184,3 +185,25 @@ void stream_dump(struct MPContext *mpctx)
}
}
}
+
+void merge_playlist_files(struct playlist *pl)
+{
+ if (!pl->first)
+ return;
+ char *edl = talloc_strdup(NULL, "edl://");
+ for (struct playlist_entry *e = pl->first; e; e = e->next) {
+ if (e != pl->first)
+ edl = talloc_strdup_append_buffer(edl, ";");
+ // Escape if needed
+ if (e->filename[strcspn(e->filename, "=%,;\n")] ||
+ bstr_strip(bstr0(e->filename)).len != strlen(e->filename))
+ {
+ // %length%
+ edl = talloc_asprintf_append_buffer(edl, "%%%d%%", strlen(e->filename));
+ }
+ edl = talloc_strdup_append_buffer(edl, e->filename);
+ }
+ playlist_clear(pl);
+ playlist_add_file(pl, edl);
+ talloc_free(edl);
+}