summaryrefslogtreecommitdiffstats
path: root/demux
diff options
context:
space:
mode:
Diffstat (limited to 'demux')
-rw-r--r--demux/demux.c3
-rw-r--r--demux/demux_edl.c5
-rw-r--r--demux/demux_lavf.c8
-rw-r--r--demux/demux_mkv.c1
-rw-r--r--demux/packet.c4
-rw-r--r--demux/stheader.h2
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;