1
mirror of https://github.com/mpv-player/mpv synced 2024-11-14 22:48:35 +01:00
mpv/demux/timeline.c
wm4 61202bb364 ytdl_hook, edl: implement pseudo-DASH support
We use the metadata provided by youtube-dl to sort-of implement
fragmented DASH streaming.

This is all a bit hacky, but hopefully a makeshift solution until
libavformat has proper mechanisms. (Although in danger of being one
of those temporary hacks that become permanent.)
2017-02-04 22:34:38 +01:00

43 lines
1.0 KiB
C

#include "common/common.h"
#include "stream/stream.h"
#include "demux.h"
#include "timeline.h"
struct timeline *timeline_load(struct mpv_global *global, struct mp_log *log,
struct demuxer *demuxer)
{
if (!demuxer->desc->load_timeline)
return NULL;
struct timeline *tl = talloc_ptrtype(NULL, tl);
*tl = (struct timeline){
.global = global,
.log = log,
.cancel = demuxer->stream->cancel,
.demuxer = demuxer,
.track_layout = demuxer,
};
demuxer->desc->load_timeline(tl);
if (tl->num_parts)
return tl;
timeline_destroy(tl);
return NULL;
}
void timeline_destroy(struct timeline *tl)
{
if (!tl)
return;
for (int n = 0; n < tl->num_sources; n++) {
struct demuxer *d = tl->sources[n];
if (d != tl->demuxer && d != tl->track_layout)
free_demuxer_and_stream(d);
}
if (tl->track_layout && tl->track_layout != tl->demuxer)
free_demuxer_and_stream(tl->track_layout);
talloc_free(tl);
}