diff options
Diffstat (limited to 'demux')
-rw-r--r-- | demux/demux.c | 3 | ||||
-rw-r--r-- | demux/demux_edl.c | 5 | ||||
-rw-r--r-- | demux/demux_lavf.c | 8 | ||||
-rw-r--r-- | demux/demux_mkv.c | 1 | ||||
-rw-r--r-- | demux/packet.c | 4 | ||||
-rw-r--r-- | demux/stheader.h | 2 |
6 files changed, 19 insertions, 4 deletions
diff --git a/demux/demux.c b/demux/demux.c index 45f472cfc9..33f3eec231 100644 --- a/demux/demux.c +++ b/demux/demux.c @@ -22,6 +22,7 @@ #include <unistd.h> #include <limits.h> #include <pthread.h> +#include <stdint.h> #include <math.h> @@ -99,7 +100,7 @@ struct demux_opts { #define OPT_BASE_STRUCT struct demux_opts -#define MAX_BYTES MPMIN(INT64_MAX, (size_t)-1 / 2) +#define MAX_BYTES MPMIN(INT64_MAX, SIZE_MAX / 2) const struct m_sub_options demux_conf = { .opts = (const struct m_option[]){ diff --git a/demux/demux_edl.c b/demux/demux_edl.c index 36a9c2cc3b..b724ffa592 100644 --- a/demux/demux_edl.c +++ b/demux/demux_edl.c @@ -41,6 +41,7 @@ struct tl_part { bool offset_set; bool chapter_ts; double length; // length of the part (-1 if rest of the file) + char *title; }; struct tl_parts { @@ -123,6 +124,8 @@ static struct tl_parts *parse_edl(bstr str) } else if (bstr_equals0(name, "timestamps")) { if (bstr_equals0(val, "chapters")) p.chapter_ts = true; + } else if (bstr_equals0(name, "title")) { + p.title = bstrto0(tl, val); } if (nparam >= MAX_PARAMS) goto error; @@ -296,7 +299,7 @@ static void build_timeline(struct timeline *tl, struct tl_parts *parts) .pts = starttime, .metadata = talloc_zero(tl, struct mp_tags), }; - mp_tags_set_str(ch.metadata, "title", part->filename); + mp_tags_set_str(ch.metadata, "title", part->title ? part->title : part->filename); MP_TARRAY_APPEND(tl, tl->chapters, tl->num_chapters, ch); // Also copy the source file's chapters for the relevant parts diff --git a/demux/demux_lavf.c b/demux/demux_lavf.c index 333d707028..058f13cabf 100644 --- a/demux/demux_lavf.c +++ b/demux/demux_lavf.c @@ -431,6 +431,10 @@ static int lavf_check_file(demuxer_t *demuxer, enum demux_check check) int nsize = av_clip(avpd.buf_size * 2, INITIAL_PROBE_SIZE, PROBE_BUF_SIZE); bstr buf = stream_peek(s, nsize); + if (demuxer->params && demuxer->params->init_fragment.len) { + buf = demuxer->params->init_fragment; + buf.len = MPMIN(buf.len, nsize); + } if (buf.len <= avpd.buf_size) final_probe = true; memcpy(avpd.buf, buf.start, buf.len); @@ -718,6 +722,10 @@ static void handle_new_stream(demuxer_t *demuxer, int i) sh->forced_track = true; if (st->disposition & AV_DISPOSITION_DEPENDENT) sh->dependent_track = true; + if (st->disposition & AV_DISPOSITION_VISUAL_IMPAIRED) + sh->visual_impaired_track = true; + if (st->disposition & AV_DISPOSITION_HEARING_IMPAIRED) + sh->hearing_impaired_track = true; if (st->disposition & AV_DISPOSITION_STILL_IMAGE) sh->still_image = true; if (priv->format_hack.use_stream_ids) diff --git a/demux/demux_mkv.c b/demux/demux_mkv.c index bad5af991b..a62057dfa0 100644 --- a/demux/demux_mkv.c +++ b/demux/demux_mkv.c @@ -1588,6 +1588,7 @@ static const char *const mkv_audio_tags[][2] = { { "A_FLAC", "flac" }, { "A_ALAC", "alac" }, { "A_TTA1", "tta" }, + { "A_MLP", "mlp" }, { NULL }, }; diff --git a/demux/packet.c b/demux/packet.c index 155e4d7f15..98ca24d93d 100644 --- a/demux/packet.c +++ b/demux/packet.c @@ -110,8 +110,8 @@ struct demux_packet *new_demux_packet(size_t len) void demux_packet_shorten(struct demux_packet *dp, size_t len) { assert(len <= dp->len); - dp->len = len; - memset(dp->buffer + dp->len, 0, AV_INPUT_BUFFER_PADDING_SIZE); + av_shrink_packet(dp->avpacket, len); + dp->len = dp->avpacket->size; } void free_demux_packet(struct demux_packet *dp) diff --git a/demux/stheader.h b/demux/stheader.h index 63744487bf..beca0fabf7 100644 --- a/demux/stheader.h +++ b/demux/stheader.h @@ -46,6 +46,8 @@ struct sh_stream { bool default_track; // container default track flag bool forced_track; // container forced track flag bool dependent_track; // container dependent track flag + bool visual_impaired_track; // container flag + bool hearing_impaired_track;// container flag bool still_image; // video stream contains still images int hls_bitrate; |