summaryrefslogtreecommitdiff
path: root/chromium/third_party/ffmpeg/libavformat
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2019-07-31 15:50:41 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2019-08-30 12:35:23 +0000
commit7b2ffa587235a47d4094787d72f38102089f402a (patch)
tree30e82af9cbab08a7fa028bb18f4f2987a3f74dfa /chromium/third_party/ffmpeg/libavformat
parentd94af01c90575348c4e81a418257f254b6f8d225 (diff)
downloadqtwebengine-chromium-7b2ffa587235a47d4094787d72f38102089f402a.tar.gz
BASELINE: Update Chromium to 76.0.3809.94
Change-Id: I321c3f5f929c105aec0f98c5091ef6108822e647 Reviewed-by: Michael BrĂ¼ning <michael.bruning@qt.io>
Diffstat (limited to 'chromium/third_party/ffmpeg/libavformat')
-rw-r--r--chromium/third_party/ffmpeg/libavformat/Makefile1
-rw-r--r--chromium/third_party/ffmpeg/libavformat/allformats.c1
-rw-r--r--chromium/third_party/ffmpeg/libavformat/apetag.c2
-rw-r--r--chromium/third_party/ffmpeg/libavformat/av1.c1
-rw-r--r--chromium/third_party/ffmpeg/libavformat/dashdec.c30
-rw-r--r--chromium/third_party/ffmpeg/libavformat/dashenc.c143
-rw-r--r--chromium/third_party/ffmpeg/libavformat/file.c5
-rw-r--r--chromium/third_party/ffmpeg/libavformat/flvdec.c38
-rw-r--r--chromium/third_party/ffmpeg/libavformat/hashenc.c8
-rw-r--r--chromium/third_party/ffmpeg/libavformat/hls.c8
-rw-r--r--chromium/third_party/ffmpeg/libavformat/hlsenc.c1
-rw-r--r--chromium/third_party/ffmpeg/libavformat/matroskadec.c26
-rw-r--r--chromium/third_party/ffmpeg/libavformat/matroskaenc.c7
-rw-r--r--chromium/third_party/ffmpeg/libavformat/mov.c4
-rw-r--r--chromium/third_party/ffmpeg/libavformat/movenc.c59
-rw-r--r--chromium/third_party/ffmpeg/libavformat/mpegenc.c10
-rw-r--r--chromium/third_party/ffmpeg/libavformat/mxfdec.c7
-rw-r--r--chromium/third_party/ffmpeg/libavformat/oggparsevorbis.c9
-rw-r--r--chromium/third_party/ffmpeg/libavformat/riff.c8
-rw-r--r--chromium/third_party/ffmpeg/libavformat/riffdec.c6
-rw-r--r--chromium/third_party/ffmpeg/libavformat/rtsp.c10
-rw-r--r--chromium/third_party/ffmpeg/libavformat/utils.c9
-rw-r--r--chromium/third_party/ffmpeg/libavformat/vc1dec.c13
-rw-r--r--chromium/third_party/ffmpeg/libavformat/version.h4
-rw-r--r--chromium/third_party/ffmpeg/libavformat/wavdec.c12
25 files changed, 311 insertions, 111 deletions
diff --git a/chromium/third_party/ffmpeg/libavformat/Makefile b/chromium/third_party/ffmpeg/libavformat/Makefile
index c010fc83f97..99be60d184b 100644
--- a/chromium/third_party/ffmpeg/libavformat/Makefile
+++ b/chromium/third_party/ffmpeg/libavformat/Makefile
@@ -276,6 +276,7 @@ OBJS-$(CONFIG_IVR_DEMUXER) += rmdec.o rm.o rmsipr.o
OBJS-$(CONFIG_JACOSUB_DEMUXER) += jacosubdec.o subtitles.o
OBJS-$(CONFIG_JACOSUB_MUXER) += jacosubenc.o rawenc.o
OBJS-$(CONFIG_JV_DEMUXER) += jvdec.o
+OBJS-$(CONFIG_KUX_DEMUXER) += flvdec.o
OBJS-$(CONFIG_LATM_MUXER) += latmenc.o rawenc.o
OBJS-$(CONFIG_LMLM4_DEMUXER) += lmlm4.o
OBJS-$(CONFIG_LOAS_DEMUXER) += loasdec.o rawdec.o
diff --git a/chromium/third_party/ffmpeg/libavformat/allformats.c b/chromium/third_party/ffmpeg/libavformat/allformats.c
index 73d69cda99c..d316a0529a7 100644
--- a/chromium/third_party/ffmpeg/libavformat/allformats.c
+++ b/chromium/third_party/ffmpeg/libavformat/allformats.c
@@ -210,6 +210,7 @@ extern AVInputFormat ff_ivr_demuxer;
extern AVInputFormat ff_jacosub_demuxer;
extern AVOutputFormat ff_jacosub_muxer;
extern AVInputFormat ff_jv_demuxer;
+extern AVInputFormat ff_kux_demuxer;
extern AVOutputFormat ff_latm_muxer;
extern AVInputFormat ff_lmlm4_demuxer;
extern AVInputFormat ff_loas_demuxer;
diff --git a/chromium/third_party/ffmpeg/libavformat/apetag.c b/chromium/third_party/ffmpeg/libavformat/apetag.c
index cdc602e1a9c..8cb3f4a23af 100644
--- a/chromium/third_party/ffmpeg/libavformat/apetag.c
+++ b/chromium/third_party/ffmpeg/libavformat/apetag.c
@@ -29,7 +29,7 @@
#include "apetag.h"
#include "internal.h"
-#define APE_TAG_FLAG_CONTAINS_HEADER (1 << 31)
+#define APE_TAG_FLAG_CONTAINS_HEADER (1U << 31)
#define APE_TAG_FLAG_LACKS_FOOTER (1 << 30)
#define APE_TAG_FLAG_IS_HEADER (1 << 29)
#define APE_TAG_FLAG_IS_BINARY (1 << 1)
diff --git a/chromium/third_party/ffmpeg/libavformat/av1.c b/chromium/third_party/ffmpeg/libavformat/av1.c
index a0aad436a69..5fde8df97ea 100644
--- a/chromium/third_party/ffmpeg/libavformat/av1.c
+++ b/chromium/third_party/ffmpeg/libavformat/av1.c
@@ -372,6 +372,7 @@ int ff_isom_write_av1c(AVIOContext *pb, const uint8_t *buf, int size)
put_bits(&pbc, 1, seq_params.chroma_subsampling_x);
put_bits(&pbc, 1, seq_params.chroma_subsampling_y);
put_bits(&pbc, 2, seq_params.chroma_sample_position);
+ put_bits(&pbc, 8, 0); // padding
flush_put_bits(&pbc);
avio_write(pb, header, sizeof(header));
diff --git a/chromium/third_party/ffmpeg/libavformat/dashdec.c b/chromium/third_party/ffmpeg/libavformat/dashdec.c
index eed149cd1aa..6e3e7e4f1e9 100644
--- a/chromium/third_party/ffmpeg/libavformat/dashdec.c
+++ b/chromium/third_party/ffmpeg/libavformat/dashdec.c
@@ -1161,6 +1161,34 @@ static int parse_manifest_adaptationset(AVFormatContext *s, const char *url,
return 0;
}
+static int parse_programinformation(AVFormatContext *s, xmlNodePtr node)
+{
+ xmlChar *val = NULL;
+
+ node = xmlFirstElementChild(node);
+ while (node) {
+ if (!av_strcasecmp(node->name, "Title")) {
+ val = xmlNodeGetContent(node);
+ if (val) {
+ av_dict_set(&s->metadata, "Title", val, 0);
+ }
+ } else if (!av_strcasecmp(node->name, "Source")) {
+ val = xmlNodeGetContent(node);
+ if (val) {
+ av_dict_set(&s->metadata, "Source", val, 0);
+ }
+ } else if (!av_strcasecmp(node->name, "Copyright")) {
+ val = xmlNodeGetContent(node);
+ if (val) {
+ av_dict_set(&s->metadata, "Copyright", val, 0);
+ }
+ }
+ node = xmlNextElementSibling(node);
+ xmlFree(val);
+ }
+ return 0;
+}
+
static int parse_manifest(AVFormatContext *s, const char *url, AVIOContext *in)
{
DASHContext *c = s->priv_data;
@@ -1310,6 +1338,8 @@ static int parse_manifest(AVFormatContext *s, const char *url, AVIOContext *in)
if (c->period_start > 0)
c->media_presentation_duration = c->period_duration;
}
+ } else if (!av_strcasecmp(node->name, "ProgramInformation")) {
+ parse_programinformation(s, node);
}
node = xmlNextElementSibling(node);
}
diff --git a/chromium/third_party/ffmpeg/libavformat/dashenc.c b/chromium/third_party/ffmpeg/libavformat/dashenc.c
index 1b74bce060f..b88d4b34960 100644
--- a/chromium/third_party/ffmpeg/libavformat/dashenc.c
+++ b/chromium/third_party/ffmpeg/libavformat/dashenc.c
@@ -140,10 +140,13 @@ typedef struct DASHContext {
int64_t timeout;
int index_correction;
char *format_options_str;
+ int global_sidx;
SegmentType segment_type_option; /* segment type as specified in options */
int ignore_io_errors;
int lhls;
int master_publish_rate;
+ int nr_of_streams_to_flush;
+ int nr_of_streams_flushed;
} DASHContext;
static struct codec_string {
@@ -368,7 +371,7 @@ static void set_codec_str(AVFormatContext *s, AVCodecParameters *par,
}
}
-static int flush_dynbuf(OutputStream *os, int *range_length)
+static int flush_dynbuf(DASHContext *c, OutputStream *os, int *range_length)
{
uint8_t *buffer;
@@ -380,16 +383,21 @@ static int flush_dynbuf(OutputStream *os, int *range_length)
av_write_frame(os->ctx, NULL);
avio_flush(os->ctx->pb);
- // write out to file
- *range_length = avio_close_dyn_buf(os->ctx->pb, &buffer);
- os->ctx->pb = NULL;
- if (os->out)
- avio_write(os->out, buffer + os->written_len, *range_length - os->written_len);
- os->written_len = 0;
- av_free(buffer);
-
- // re-open buffer
- return avio_open_dyn_buf(&os->ctx->pb);
+ if (!c->single_file) {
+ // write out to file
+ *range_length = avio_close_dyn_buf(os->ctx->pb, &buffer);
+ os->ctx->pb = NULL;
+ if (os->out)
+ avio_write(os->out, buffer + os->written_len, *range_length - os->written_len);
+ os->written_len = 0;
+ av_free(buffer);
+
+ // re-open buffer
+ return avio_open_dyn_buf(&os->ctx->pb);
+ } else {
+ *range_length = avio_tell(os->ctx->pb) - os->pos;
+ return 0;
+ }
}
static void set_http_options(AVDictionary **options, DASHContext *c)
@@ -508,7 +516,7 @@ static int flush_init_segment(AVFormatContext *s, OutputStream *os)
DASHContext *c = s->priv_data;
int ret, range_length;
- ret = flush_dynbuf(os, &range_length);
+ ret = flush_dynbuf(c, os, &range_length);
if (ret < 0)
return ret;
@@ -537,8 +545,12 @@ static void dash_free(AVFormatContext *s)
return;
for (i = 0; i < s->nb_streams; i++) {
OutputStream *os = &c->streams[i];
- if (os->ctx && os->ctx->pb)
- ffio_free_dyn_buf(&os->ctx->pb);
+ if (os->ctx && os->ctx->pb) {
+ if (!c->single_file)
+ ffio_free_dyn_buf(&os->ctx->pb);
+ else
+ avio_close(os->ctx->pb);
+ }
ff_format_io_close(s, &os->out);
if (os->ctx)
avformat_free_context(os->ctx);
@@ -1079,6 +1091,7 @@ static int dash_init(AVFormatContext *s)
char *ptr;
char basename[1024];
+ c->nr_of_streams_to_flush = 0;
if (c->single_file_name)
c->single_file = 1;
if (c->single_file)
@@ -1106,6 +1119,16 @@ static int dash_init(AVFormatContext *s)
c->lhls = 0;
}
+ if (c->global_sidx && !c->single_file) {
+ av_log(s, AV_LOG_WARNING, "Global SIDX option will be ignored as single_file is not enabled\n");
+ c->global_sidx = 0;
+ }
+
+ if (c->global_sidx && c->streaming) {
+ av_log(s, AV_LOG_WARNING, "Global SIDX option will be ignored as streaming is enabled\n");
+ c->global_sidx = 0;
+ }
+
av_strlcpy(c->dirname, s->url, sizeof(c->dirname));
ptr = strrchr(c->dirname, '/');
if (ptr) {
@@ -1180,6 +1203,11 @@ static int dash_init(AVFormatContext *s)
"Override -init_seg_name and/or -media_seg_name and/or "
"-single_file_name to end with the extension .webm\n");
}
+ if (c->streaming) {
+ // Streaming not supported as matroskaenc buffers internally before writing the output
+ av_log(s, AV_LOG_WARNING, "One or more streams in WebM output format. Streaming option will be ignored\n");
+ c->streaming = 0;
+ }
}
ctx->oformat = av_guess_format(os->format_name, NULL, NULL);
@@ -1201,9 +1229,6 @@ static int dash_init(AVFormatContext *s)
ctx->avoid_negative_ts = s->avoid_negative_ts;
ctx->flags = s->flags;
- if ((ret = avio_open_dyn_buf(&ctx->pb)) < 0)
- return ret;
-
if (c->single_file) {
if (os->single_file_name)
ff_dash_fill_tmpl_params(os->initfile, sizeof(os->initfile), os->single_file_name, i, 0, os->bit_rate, 0);
@@ -1214,7 +1239,14 @@ static int dash_init(AVFormatContext *s)
}
snprintf(filename, sizeof(filename), "%s%s", c->dirname, os->initfile);
set_http_options(&opts, c);
- ret = s->io_open(s, &os->out, filename, AVIO_FLAG_WRITE, &opts);
+ if (!c->single_file) {
+ if ((ret = avio_open_dyn_buf(&ctx->pb)) < 0)
+ return ret;
+ ret = s->io_open(s, &os->out, filename, AVIO_FLAG_WRITE, &opts);
+ } else {
+ ctx->url = av_strdup(filename);
+ ret = avio_open2(&ctx->pb, filename, AVIO_FLAG_WRITE, NULL, &opts);
+ }
av_dict_free(&opts);
if (ret < 0)
return ret;
@@ -1232,8 +1264,12 @@ static int dash_init(AVFormatContext *s)
// skip_sidx : Reduce bitrate overhead
// skip_trailer : Avoids growing memory usage with time
av_dict_set(&opts, "movflags", "frag_every_frame+dash+delay_moov+skip_sidx+skip_trailer", 0);
- else
- av_dict_set(&opts, "movflags", "frag_custom+dash+delay_moov", 0);
+ else {
+ if (c->global_sidx)
+ av_dict_set(&opts, "movflags", "frag_custom+dash+delay_moov+global_sidx+skip_trailer", 0);
+ else
+ av_dict_set(&opts, "movflags", "frag_custom+dash+delay_moov+skip_trailer", 0);
+ }
} else {
av_dict_set_int(&opts, "cluster_time_limit", c->seg_duration / 1000, 0);
av_dict_set_int(&opts, "cluster_size_limit", 5 * 1024 * 1024, 0); // set a large cluster size limit
@@ -1274,12 +1310,18 @@ static int dash_init(AVFormatContext *s)
os->max_pts = AV_NOPTS_VALUE;
os->last_dts = AV_NOPTS_VALUE;
os->segment_index = 1;
+
+ if (s->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_VIDEO)
+ c->nr_of_streams_to_flush++;
}
if (!c->has_video && c->seg_duration <= 0) {
av_log(s, AV_LOG_WARNING, "no video stream and no seg duration set\n");
return AVERROR(EINVAL);
}
+
+ c->nr_of_streams_flushed = 0;
+
return 0;
}
@@ -1518,7 +1560,7 @@ static int dash_flush(AVFormatContext *s, int final, int stream)
snprintf(os->full_path, sizeof(os->full_path), "%s%s", c->dirname, os->initfile);
}
- ret = flush_dynbuf(os, &range_length);
+ ret = flush_dynbuf(c, os, &range_length);
if (ret < 0)
break;
os->packets_written = 0;
@@ -1565,8 +1607,39 @@ static int dash_flush(AVFormatContext *s, int final, int stream)
}
}
- if (ret >= 0)
+ if (final) {
+ for (i = 0; i < s->nb_streams; i++) {
+ OutputStream *os = &c->streams[i];
+ if (os->ctx && os->ctx_inited) {
+ int file_size = avio_tell(os->ctx->pb);
+ av_write_trailer(os->ctx);
+ if (c->global_sidx) {
+ int j, start_index, start_number;
+ int sidx_size = avio_tell(os->ctx->pb) - file_size;
+ get_start_index_number(os, c, &start_index, &start_number);
+ if (start_index >= os->nb_segments ||
+ os->segment_type != SEGMENT_TYPE_MP4)
+ continue;
+ os->init_range_length += sidx_size;
+ for (j = start_index; j < os->nb_segments; j++) {
+ Segment *seg = os->segments[j];
+ seg->start_pos += sidx_size;
+ }
+ }
+
+ }
+ }
+ }
+ if (ret >= 0) {
+ if (c->has_video && !final) {
+ c->nr_of_streams_flushed++;
+ if (c->nr_of_streams_flushed != c->nr_of_streams_to_flush)
+ return ret;
+
+ c->nr_of_streams_flushed = 0;
+ }
ret = write_manifest(s, final);
+ }
return ret;
}
@@ -1735,30 +1808,21 @@ static int dash_write_trailer(AVFormatContext *s)
}
dash_flush(s, 1, -1);
- for (i = 0; i < s->nb_streams; ++i) {
- OutputStream *os = &c->streams[i];
- if (os->ctx && os->ctx_inited) {
- av_write_trailer(os->ctx);
- }
-
- if (c->remove_at_exit) {
+ if (c->remove_at_exit) {
+ for (i = 0; i < s->nb_streams; ++i) {
+ OutputStream *os = &c->streams[i];
dashenc_delete_media_segments(s, os, os->nb_segments);
dashenc_delete_segment_file(s, os->initfile);
+ if (c->hls_playlist && os->segment_type == SEGMENT_TYPE_MP4) {
+ char filename[1024];
+ get_hls_playlist_name(filename, sizeof(filename), c->dirname, i);
+ dashenc_delete_file(s, filename);
+ }
}
- }
-
- if (c->remove_at_exit) {
dashenc_delete_file(s, s->url);
if (c->hls_playlist && c->master_playlist_created) {
char filename[1024];
- for (i = 0; i < s->nb_streams; ++i) {
- OutputStream *os = &c->streams[i];
- if (os->segment_type == SEGMENT_TYPE_MP4) {
- get_hls_playlist_name(filename, sizeof(filename), c->dirname, i);
- dashenc_delete_file(s, filename);
- }
- }
snprintf(filename, sizeof(filename), "%smaster.m3u8", c->dirname);
dashenc_delete_file(s, filename);
}
@@ -1816,6 +1880,7 @@ static const AVOption options[] = {
{ "timeout", "set timeout for socket I/O operations", OFFSET(timeout), AV_OPT_TYPE_DURATION, { .i64 = -1 }, -1, INT_MAX, .flags = E },
{ "index_correction", "Enable/Disable segment index correction logic", OFFSET(index_correction), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, E },
{ "format_options","set list of options for the container format (mp4/webm) used for dash", OFFSET(format_options_str), AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, E},
+ { "global_sidx", "Write global SIDX atom. Applicable only for single file, mp4 output, non-streaming mode", OFFSET(global_sidx), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, E },
{ "dash_segment_type", "set dash segment files type", OFFSET(segment_type_option), AV_OPT_TYPE_INT, {.i64 = SEGMENT_TYPE_AUTO }, 0, SEGMENT_TYPE_NB - 1, E, "segment_type"},
{ "auto", "select segment file format based on codec", 0, AV_OPT_TYPE_CONST, {.i64 = SEGMENT_TYPE_AUTO }, 0, UINT_MAX, E, "segment_type"},
{ "mp4", "make segment file in ISOBMFF format", 0, AV_OPT_TYPE_CONST, {.i64 = SEGMENT_TYPE_MP4 }, 0, UINT_MAX, E, "segment_type"},
diff --git a/chromium/third_party/ffmpeg/libavformat/file.c b/chromium/third_party/ffmpeg/libavformat/file.c
index e613b910102..08c7f8e6dd7 100644
--- a/chromium/third_party/ffmpeg/libavformat/file.c
+++ b/chromium/third_party/ffmpeg/libavformat/file.c
@@ -73,6 +73,7 @@ typedef struct FileContext {
int trunc;
int blocksize;
int follow;
+ int seekable;
#if HAVE_DIRENT_H
DIR *dir;
#endif
@@ -82,6 +83,7 @@ static const AVOption file_options[] = {
{ "truncate", "truncate existing files on write", offsetof(FileContext, trunc), AV_OPT_TYPE_BOOL, { .i64 = 1 }, 0, 1, AV_OPT_FLAG_ENCODING_PARAM },
{ "blocksize", "set I/O operation maximum block size", offsetof(FileContext, blocksize), AV_OPT_TYPE_INT, { .i64 = INT_MAX }, 1, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM },
{ "follow", "Follow a file as it is being written", offsetof(FileContext, follow), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, AV_OPT_FLAG_DECODING_PARAM },
+ { "seekable", "Sets if the file is seekable", offsetof(FileContext, seekable), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 0, AV_OPT_FLAG_DECODING_PARAM | AV_OPT_FLAG_ENCODING_PARAM },
{ NULL }
};
@@ -238,6 +240,9 @@ static int file_open(URLContext *h, const char *filename, int flags)
if (!h->is_streamed && flags & AVIO_FLAG_WRITE)
h->min_packet_size = h->max_packet_size = 262144;
+ if (c->seekable >= 0)
+ h->is_streamed = !c->seekable;
+
return 0;
}
diff --git a/chromium/third_party/ffmpeg/libavformat/flvdec.c b/chromium/third_party/ffmpeg/libavformat/flvdec.c
index 445d58d8f7e..b531a39adc8 100644
--- a/chromium/third_party/ffmpeg/libavformat/flvdec.c
+++ b/chromium/third_party/ffmpeg/libavformat/flvdec.c
@@ -113,6 +113,20 @@ static int live_flv_probe(const AVProbeData *p)
return probe(p, 1);
}
+static int kux_probe(const AVProbeData *p)
+{
+ const uint8_t *d = p->buf;
+
+ if (d[0] == 'K' &&
+ d[1] == 'D' &&
+ d[2] == 'K' &&
+ d[3] == 0 &&
+ d[4] == 0) {
+ return AVPROBE_SCORE_EXTENSION + 1;
+ }
+ return 0;
+}
+
static void add_keyframes_index(AVFormatContext *s)
{
FLVContext *flv = s->priv_data;
@@ -738,6 +752,10 @@ static int flv_read_header(AVFormatContext *s)
int offset;
int pre_tag_size = 0;
+ /* Actual FLV data at 0xe40000 in KUX file */
+ if(!strcmp(s->iformat->name, "kux"))
+ avio_skip(s->pb, 0xe40000);
+
avio_skip(s->pb, 4);
flags = avio_r8(s->pb);
@@ -1386,3 +1404,23 @@ AVInputFormat ff_live_flv_demuxer = {
.priv_class = &live_flv_class,
.flags = AVFMT_TS_DISCONT
};
+
+static const AVClass kux_class = {
+ .class_name = "kuxdec",
+ .item_name = av_default_item_name,
+ .option = options,
+ .version = LIBAVUTIL_VERSION_INT,
+};
+
+AVInputFormat ff_kux_demuxer = {
+ .name = "kux",
+ .long_name = NULL_IF_CONFIG_SMALL("KUX (YouKu)"),
+ .priv_data_size = sizeof(FLVContext),
+ .read_probe = kux_probe,
+ .read_header = flv_read_header,
+ .read_packet = flv_read_packet,
+ .read_seek = flv_read_seek,
+ .read_close = flv_read_close,
+ .extensions = "kux",
+ .priv_class = &kux_class,
+};
diff --git a/chromium/third_party/ffmpeg/libavformat/hashenc.c b/chromium/third_party/ffmpeg/libavformat/hashenc.c
index a66db4ae715..06fc085d18b 100644
--- a/chromium/third_party/ffmpeg/libavformat/hashenc.c
+++ b/chromium/third_party/ffmpeg/libavformat/hashenc.c
@@ -88,7 +88,7 @@ static int hash_write_trailer(struct AVFormatContext *s)
#if CONFIG_HASH_MUXER
static const AVClass hashenc_class = {
- .class_name = "hash encoder class",
+ .class_name = "hash muxer",
.item_name = av_default_item_name,
.option = hash_options,
.version = LIBAVUTIL_VERSION_INT,
@@ -111,7 +111,7 @@ AVOutputFormat ff_hash_muxer = {
#if CONFIG_MD5_MUXER
static const AVClass md5enc_class = {
- .class_name = "MD5 encoder class",
+ .class_name = "MD5 muxer",
.item_name = av_default_item_name,
.option = md5_options,
.version = LIBAVUTIL_VERSION_INT,
@@ -217,7 +217,7 @@ static int framehash_write_trailer(struct AVFormatContext *s)
#if CONFIG_FRAMEHASH_MUXER
static const AVClass framehash_class = {
- .class_name = "frame hash encoder class",
+ .class_name = "frame hash muxer",
.item_name = av_default_item_name,
.option = hash_options,
.version = LIBAVUTIL_VERSION_INT,
@@ -240,7 +240,7 @@ AVOutputFormat ff_framehash_muxer = {
#if CONFIG_FRAMEMD5_MUXER
static const AVClass framemd5_class = {
- .class_name = "frame hash encoder class",
+ .class_name = "frame MD5 muxer",
.item_name = av_default_item_name,
.option = md5_options,
.version = LIBAVUTIL_VERSION_INT,
diff --git a/chromium/third_party/ffmpeg/libavformat/hls.c b/chromium/third_party/ffmpeg/libavformat/hls.c
index 4e38d25678c..1b61b4b5c0d 100644
--- a/chromium/third_party/ffmpeg/libavformat/hls.c
+++ b/chromium/third_party/ffmpeg/libavformat/hls.c
@@ -658,7 +658,7 @@ static int open_url(AVFormatContext *s, AVIOContext **pb, const char *url,
} else if (ret < 0) {
if (ret != AVERROR_EOF)
av_log(s, AV_LOG_WARNING,
- "keepalive request failed for '%s', retrying with new connection: %s\n",
+ "keepalive request failed for '%s' when opening url, retrying with new connection: %s\n",
url, av_err2str(ret));
ret = s->io_open(s, pb, url, AVIO_FLAG_READ, &tmp);
}
@@ -715,7 +715,7 @@ static int parse_playlist(HLSContext *c, const char *url,
} else if (ret < 0) {
if (ret != AVERROR_EOF)
av_log(c->ctx, AV_LOG_WARNING,
- "keepalive request failed for '%s', retrying with new connection: %s\n",
+ "keepalive request failed for '%s' when parsing playlist, retrying with new connection: %s\n",
url, av_err2str(ret));
in = NULL;
}
@@ -2318,14 +2318,14 @@ static const AVOption hls_options[] = {
};
static const AVClass hls_class = {
- .class_name = "hls,applehttp",
+ .class_name = "hls demuxer",
.item_name = av_default_item_name,
.option = hls_options,
.version = LIBAVUTIL_VERSION_INT,
};
AVInputFormat ff_hls_demuxer = {
- .name = "hls,applehttp",
+ .name = "hls",
.long_name = NULL_IF_CONFIG_SMALL("Apple HTTP Live Streaming"),
.priv_class = &hls_class,
.priv_data_size = sizeof(HLSContext),
diff --git a/chromium/third_party/ffmpeg/libavformat/hlsenc.c b/chromium/third_party/ffmpeg/libavformat/hlsenc.c
index 5f9a200c6e2..6b913be31c2 100644
--- a/chromium/third_party/ffmpeg/libavformat/hlsenc.c
+++ b/chromium/third_party/ffmpeg/libavformat/hlsenc.c
@@ -2241,6 +2241,7 @@ static int hls_write_packet(AVFormatContext *s, AVPacket *pkt)
new_start_pos = avio_tell(vs->avf->pb);
if (hls->segment_type != SEGMENT_TYPE_FMP4) {
+ avio_flush(oc->pb);
vs->size = new_start_pos - vs->start_pos;
} else {
vs->size = new_start_pos;
diff --git a/chromium/third_party/ffmpeg/libavformat/matroskadec.c b/chromium/third_party/ffmpeg/libavformat/matroskadec.c
index 44e356e5127..dcb8031fec9 100644
--- a/chromium/third_party/ffmpeg/libavformat/matroskadec.c
+++ b/chromium/third_party/ffmpeg/libavformat/matroskadec.c
@@ -1207,11 +1207,29 @@ static int ebml_parse_elem(MatroskaDemuxContext *matroska,
MatroskaLevel *level = &matroska->levels[matroska->num_levels - 1];
AVIOContext *pb = matroska->ctx->pb;
int64_t pos = avio_tell(pb);
- if (level->length != EBML_UNKNOWN_LENGTH &&
- (pos + length) > (level->start + level->length)) {
+
+ if (length != EBML_UNKNOWN_LENGTH &&
+ level->length != EBML_UNKNOWN_LENGTH) {
+ uint64_t elem_end = pos + length,
+ level_end = level->start + level->length;
+
+ if (level_end < elem_end) {
+ av_log(matroska->ctx, AV_LOG_ERROR,
+ "Element at 0x%"PRIx64" ending at 0x%"PRIx64" exceeds "
+ "containing master element ending at 0x%"PRIx64"\n",
+ pos, elem_end, level_end);
+ return AVERROR_INVALIDDATA;
+ }
+ } else if (level->length != EBML_UNKNOWN_LENGTH) {
+ av_log(matroska->ctx, AV_LOG_ERROR, "Unknown-sized element "
+ "at 0x%"PRIx64" inside parent with finite size\n", pos);
+ return AVERROR_INVALIDDATA;
+ } else if (length == EBML_UNKNOWN_LENGTH && id != MATROSKA_ID_CLUSTER) {
+ // According to the specifications only clusters and segments
+ // are allowed to be unknown-sized.
av_log(matroska->ctx, AV_LOG_ERROR,
- "Invalid length 0x%"PRIx64" > 0x%"PRIx64" in parent\n",
- length, level->start + level->length);
+ "Found unknown-sized element other than a cluster at "
+ "0x%"PRIx64". Dropping the invalid element.\n", pos);
return AVERROR_INVALIDDATA;
}
}
diff --git a/chromium/third_party/ffmpeg/libavformat/matroskaenc.c b/chromium/third_party/ffmpeg/libavformat/matroskaenc.c
index b9f99c44639..1c98c0dcebb 100644
--- a/chromium/third_party/ffmpeg/libavformat/matroskaenc.c
+++ b/chromium/third_party/ffmpeg/libavformat/matroskaenc.c
@@ -694,8 +694,10 @@ static int put_flac_codecpriv(AVFormatContext *s,
av_dict_set(&dict, "WAVEFORMATEXTENSIBLE_CHANNEL_MASK", buf, 0);
len = ff_vorbiscomment_length(dict, vendor, NULL, 0);
- if (len >= ((1<<24) - 4))
+ if (len >= ((1<<24) - 4)) {
+ av_dict_free(&dict);
return AVERROR(EINVAL);
+ }
data = av_malloc(len + 4);
if (!data) {
@@ -2534,7 +2536,8 @@ static int mkv_write_packet(AVFormatContext *s, AVPacket *pkt)
// buffer an audio packet to ensure the packet containing the video
// keyframe's timecode is contained in the same cluster for WebM
if (codec_type == AVMEDIA_TYPE_AUDIO) {
- ret = av_packet_ref(&mkv->cur_audio_pkt, pkt);
+ if (pkt->size > 0)
+ ret = av_packet_ref(&mkv->cur_audio_pkt, pkt);
} else
ret = mkv_write_packet_internal(s, pkt, 0);
return ret;
diff --git a/chromium/third_party/ffmpeg/libavformat/mov.c b/chromium/third_party/ffmpeg/libavformat/mov.c
index 942c55d24f3..e40bcf3b86f 100644
--- a/chromium/third_party/ffmpeg/libavformat/mov.c
+++ b/chromium/third_party/ffmpeg/libavformat/mov.c
@@ -2966,7 +2966,7 @@ static int mov_read_stts(MOVContext *c, AVIOContext *pb, MOVAtom atom)
if (duration > 0 &&
duration <= INT64_MAX - sc->duration_for_fps &&
- total_sample_count <= INT64_MAX - sc->nb_frames_for_fps
+ total_sample_count <= INT_MAX - sc->nb_frames_for_fps
) {
sc->duration_for_fps += duration;
sc->nb_frames_for_fps += total_sample_count;
@@ -4923,7 +4923,7 @@ static int mov_read_trun(MOVContext *c, AVIOContext *pb, MOVAtom atom)
sc->data_size += sample_size;
if (sample_duration <= INT64_MAX - sc->duration_for_fps &&
- 1 <= INT64_MAX - sc->nb_frames_for_fps
+ 1 <= INT_MAX - sc->nb_frames_for_fps
) {
sc->duration_for_fps += sample_duration;
sc->nb_frames_for_fps ++;
diff --git a/chromium/third_party/ffmpeg/libavformat/movenc.c b/chromium/third_party/ffmpeg/libavformat/movenc.c
index 26cb2e6ea10..46d314ff17d 100644
--- a/chromium/third_party/ffmpeg/libavformat/movenc.c
+++ b/chromium/third_party/ffmpeg/libavformat/movenc.c
@@ -313,7 +313,7 @@ static int mov_write_amr_tag(AVIOContext *pb, MOVTrack *track)
return 0x11;
}
-static int mov_write_ac3_tag(AVIOContext *pb, MOVTrack *track)
+static int mov_write_ac3_tag(AVFormatContext *s, AVIOContext *pb, MOVTrack *track)
{
GetBitContext gbc;
PutBitContext pbc;
@@ -321,7 +321,7 @@ static int mov_write_ac3_tag(AVIOContext *pb, MOVTrack *track)
int fscod, bsid, bsmod, acmod, lfeon, frmsizecod;
if (track->vos_len < 7) {
- av_log(pb, AV_LOG_ERROR,
+ av_log(s, AV_LOG_ERROR,
"Cannot write moov atom before AC3 packets."
" Set the delay_moov flag to fix this.\n");
return AVERROR(EINVAL);
@@ -535,7 +535,7 @@ end:
}
#endif
-static int mov_write_eac3_tag(AVIOContext *pb, MOVTrack *track)
+static int mov_write_eac3_tag(AVFormatContext *s, AVIOContext *pb, MOVTrack *track)
{
PutBitContext pbc;
uint8_t *buf;
@@ -543,7 +543,7 @@ static int mov_write_eac3_tag(AVIOContext *pb, MOVTrack *track)
int size, i;
if (!track->eac3_priv) {
- av_log(pb, AV_LOG_ERROR,
+ av_log(s, AV_LOG_ERROR,
"Cannot write moov atom before EAC3 packets parsed.\n");
return AVERROR(EINVAL);
}
@@ -748,14 +748,14 @@ static int mov_write_dfla_tag(AVIOContext *pb, MOVTrack *track)
return update_size(pb, pos);
}
-static int mov_write_dops_tag(AVIOContext *pb, MOVTrack *track)
+static int mov_write_dops_tag(AVFormatContext *s, AVIOContext *pb, MOVTrack *track)
{
int64_t pos = avio_tell(pb);
avio_wb32(pb, 0);
ffio_wfourcc(pb, "dOps");
avio_w8(pb, 0); /* Version */
if (track->par->extradata_size < 19) {
- av_log(pb, AV_LOG_ERROR, "invalid extradata size\n");
+ av_log(s, AV_LOG_ERROR, "invalid extradata size\n");
return AVERROR_INVALIDDATA;
}
/* extradata contains an Ogg OpusHead, other than byte-ordering and
@@ -825,9 +825,9 @@ static int mov_write_wave_tag(AVFormatContext *s, AVIOContext *pb, MOVTrack *tra
} else if (track->par->codec_id == AV_CODEC_ID_AMR_NB) {
mov_write_amr_tag(pb, track);
} else if (track->par->codec_id == AV_CODEC_ID_AC3) {
- mov_write_ac3_tag(pb, track);
+ mov_write_ac3_tag(s, pb, track);
} else if (track->par->codec_id == AV_CODEC_ID_EAC3) {
- mov_write_eac3_tag(pb, track);
+ mov_write_eac3_tag(s, pb, track);
} else if (track->par->codec_id == AV_CODEC_ID_ALAC ||
track->par->codec_id == AV_CODEC_ID_QDM2) {
mov_write_extradata_tag(pb, track);
@@ -1134,9 +1134,9 @@ static int mov_write_audio_tag(AVFormatContext *s, AVIOContext *pb, MOVMuxContex
else if (track->par->codec_id == AV_CODEC_ID_AMR_NB)
ret = mov_write_amr_tag(pb, track);
else if (track->par->codec_id == AV_CODEC_ID_AC3)
- ret = mov_write_ac3_tag(pb, track);
+ ret = mov_write_ac3_tag(s, pb, track);
else if (track->par->codec_id == AV_CODEC_ID_EAC3)
- ret = mov_write_eac3_tag(pb, track);
+ ret = mov_write_eac3_tag(s, pb, track);
else if (track->par->codec_id == AV_CODEC_ID_ALAC)
ret = mov_write_extradata_tag(pb, track);
else if (track->par->codec_id == AV_CODEC_ID_WMAPRO)
@@ -1144,7 +1144,7 @@ static int mov_write_audio_tag(AVFormatContext *s, AVIOContext *pb, MOVMuxContex
else if (track->par->codec_id == AV_CODEC_ID_FLAC)
ret = mov_write_dfla_tag(pb, track);
else if (track->par->codec_id == AV_CODEC_ID_OPUS)
- ret = mov_write_dops_tag(pb, track);
+ ret = mov_write_dops_tag(s, pb, track);
else if (track->vos_len > 0)
ret = mov_write_glbl_tag(pb, track);
@@ -1691,12 +1691,12 @@ static int mov_write_subtitle_tag(AVIOContext *pb, MOVTrack *track)
return update_size(pb, pos);
}
-static int mov_write_st3d_tag(AVIOContext *pb, AVStereo3D *stereo_3d)
+static int mov_write_st3d_tag(AVFormatContext *s, AVIOContext *pb, AVStereo3D *stereo_3d)
{
int8_t stereo_mode;
if (stereo_3d->flags != 0) {
- av_log(pb, AV_LOG_WARNING, "Unsupported stereo_3d flags %x. st3d not written.\n", stereo_3d->flags);
+ av_log(s, AV_LOG_WARNING, "Unsupported stereo_3d flags %x. st3d not written.\n", stereo_3d->flags);
return 0;
}
@@ -1711,7 +1711,7 @@ static int mov_write_st3d_tag(AVIOContext *pb, AVStereo3D *stereo_3d)
stereo_mode = 2;
break;
default:
- av_log(pb, AV_LOG_WARNING, "Unsupported stereo_3d type %s. st3d not written.\n", av_stereo3d_type_name(stereo_3d->type));
+ av_log(s, AV_LOG_WARNING, "Unsupported stereo_3d type %s. st3d not written.\n", av_stereo3d_type_name(stereo_3d->type));
return 0;
}
avio_wb32(pb, 13); /* size */
@@ -1729,7 +1729,7 @@ static int mov_write_sv3d_tag(AVFormatContext *s, AVIOContext *pb, AVSphericalMa
if (spherical_mapping->projection != AV_SPHERICAL_EQUIRECTANGULAR &&
spherical_mapping->projection != AV_SPHERICAL_EQUIRECTANGULAR_TILE &&
spherical_mapping->projection != AV_SPHERICAL_CUBEMAP) {
- av_log(pb, AV_LOG_WARNING, "Unsupported projection %d. sv3d not written.\n", spherical_mapping->projection);
+ av_log(s, AV_LOG_WARNING, "Unsupported projection %d. sv3d not written.\n", spherical_mapping->projection);
return 0;
}
@@ -1807,27 +1807,25 @@ static int mov_write_pasp_tag(AVIOContext *pb, MOVTrack *track)
return 16;
}
-static int mov_write_gama_tag(AVIOContext *pb, MOVTrack *track, double gamma)
+static int mov_write_gama_tag(AVFormatContext *s, AVIOContext *pb, MOVTrack *track, double gamma)
{
uint32_t gama = 0;
- if (gamma <= 0.0)
- {
+ if (gamma <= 0.0) {
gamma = avpriv_get_gamma_from_trc(track->par->color_trc);
}
- av_log(pb, AV_LOG_DEBUG, "gamma value %g\n", gamma);
+ av_log(s, AV_LOG_DEBUG, "gamma value %g\n", gamma);
if (gamma > 1e-6) {
gama = (uint32_t)lrint((double)(1<<16) * gamma);
- av_log(pb, AV_LOG_DEBUG, "writing gama value %"PRId32"\n", gama);
+ av_log(s, AV_LOG_DEBUG, "writing gama value %"PRId32"\n", gama);
av_assert0(track->mode == MODE_MOV);
avio_wb32(pb, 12);
ffio_wfourcc(pb, "gama");
avio_wb32(pb, gama);
return 12;
- }
- else {
- av_log(pb, AV_LOG_WARNING, "gamma value unknown, unable to write gama atom\n");
+ } else {
+ av_log(s, AV_LOG_WARNING, "gamma value unknown, unable to write gama atom\n");
}
return 0;
}
@@ -1941,7 +1939,7 @@ static void find_compressor(char * compressor_name, int len, MOVTrack *track)
}
}
-static int mov_write_video_tag(AVIOContext *pb, MOVMuxContext *mov, MOVTrack *track)
+static int mov_write_video_tag(AVFormatContext *s, AVIOContext *pb, MOVMuxContext *mov, MOVTrack *track)
{
int64_t pos = avio_tell(pb);
char compressor_name[32] = { 0 };
@@ -2076,7 +2074,7 @@ static int mov_write_video_tag(AVIOContext *pb, MOVMuxContext *mov, MOVTrack *tr
if (mov->flags & FF_MOV_FLAG_WRITE_GAMA) {
if (track->mode == MODE_MOV)
- mov_write_gama_tag(pb, track, mov->gamma);
+ mov_write_gama_tag(s, pb, track, mov->gamma);
else
av_log(mov->fc, AV_LOG_WARNING, "Not writing 'gama' atom. Format is not MOV.\n");
}
@@ -2092,7 +2090,7 @@ static int mov_write_video_tag(AVIOContext *pb, MOVMuxContext *mov, MOVTrack *tr
AVSphericalMapping* spherical_mapping = (AVSphericalMapping*)av_stream_get_side_data(track->st, AV_PKT_DATA_SPHERICAL, NULL);
if (stereo_3d)
- mov_write_st3d_tag(pb, stereo_3d);
+ mov_write_st3d_tag(s, pb, stereo_3d);
if (spherical_mapping)
mov_write_sv3d_tag(mov->fc, pb, spherical_mapping);
}
@@ -2233,7 +2231,7 @@ static int mov_write_stsd_tag(AVFormatContext *s, AVIOContext *pb, MOVMuxContext
avio_wb32(pb, 0); /* version & flags */
avio_wb32(pb, 1); /* entry count */
if (track->par->codec_type == AVMEDIA_TYPE_VIDEO)
- ret = mov_write_video_tag(pb, mov, track);
+ ret = mov_write_video_tag(s, pb, mov, track);
else if (track->par->codec_type == AVMEDIA_TYPE_AUDIO)
ret = mov_write_audio_tag(s, pb, mov, track);
else if (track->par->codec_type == AVMEDIA_TYPE_SUBTITLE)
@@ -6381,7 +6379,7 @@ static int mov_write_header(AVFormatContext *s)
nb_tracks++;
}
- if (mov->mode == MODE_MOV || mov->mode == MODE_MP4)
+ if (mov->nb_meta_tmcd)
tmcd_track = nb_tracks;
for (i = 0; i < s->nb_streams; i++) {
@@ -6745,9 +6743,8 @@ static int mov_write_trailer(AVFormatContext *s)
avio_seek(pb, mov->reserved_header_pos, SEEK_SET);
mov_write_sidx_tags(pb, mov, -1, 0);
avio_seek(pb, end, SEEK_SET);
- avio_write_marker(s->pb, AV_NOPTS_VALUE, AVIO_DATA_MARKER_TRAILER);
- mov_write_mfra_tag(pb, mov);
- } else if (!(mov->flags & FF_MOV_FLAG_SKIP_TRAILER)) {
+ }
+ if (!(mov->flags & FF_MOV_FLAG_SKIP_TRAILER)) {
avio_write_marker(s->pb, AV_NOPTS_VALUE, AVIO_DATA_MARKER_TRAILER);
mov_write_mfra_tag(pb, mov);
}
diff --git a/chromium/third_party/ffmpeg/libavformat/mpegenc.c b/chromium/third_party/ffmpeg/libavformat/mpegenc.c
index 1389288b7f9..43ebc46e0eb 100644
--- a/chromium/third_party/ffmpeg/libavformat/mpegenc.c
+++ b/chromium/third_party/ffmpeg/libavformat/mpegenc.c
@@ -407,6 +407,16 @@ static av_cold int mpeg_mux_init(AVFormatContext *ctx)
stream->lpcm_header[2] = 0x80;
stream->id = lpcm_id++;
stream->lpcm_align = st->codecpar->channels * st->codecpar->bits_per_coded_sample / 8;
+ } else if (st->codecpar->codec_id == AV_CODEC_ID_MLP ||
+ st->codecpar->codec_id == AV_CODEC_ID_TRUEHD) {
+ av_log(ctx, AV_LOG_ERROR, "Support for muxing audio codec %s not implemented.\n",
+ avcodec_get_name(st->codecpar->codec_id));
+ return AVERROR_PATCHWELCOME;
+ } else if (st->codecpar->codec_id != AV_CODEC_ID_MP1 &&
+ st->codecpar->codec_id != AV_CODEC_ID_MP2 &&
+ st->codecpar->codec_id != AV_CODEC_ID_MP3) {
+ av_log(ctx, AV_LOG_ERROR, "Unsupported audio codec. Must be one of mp1, mp2, mp3, 16-bit pcm_dvd, pcm_s16be, ac3 or dts.\n");
+ goto fail;
} else {
stream->id = mpa_id++;
}
diff --git a/chromium/third_party/ffmpeg/libavformat/mxfdec.c b/chromium/third_party/ffmpeg/libavformat/mxfdec.c
index 1ba8ecd4a62..3ea8de1666c 100644
--- a/chromium/third_party/ffmpeg/libavformat/mxfdec.c
+++ b/chromium/third_party/ffmpeg/libavformat/mxfdec.c
@@ -654,6 +654,7 @@ static int mxf_read_primer_pack(void *arg, AVIOContext *pb, int tag, int size, U
static int mxf_read_partition_pack(void *arg, AVIOContext *pb, int tag, int size, UID uid, int64_t klv_offset)
{
MXFContext *mxf = arg;
+ AVFormatContext *s = mxf->fc;
MXFPartition *partition, *tmp_part;
UID op;
uint64_t footer_partition;
@@ -718,6 +719,12 @@ static int mxf_read_partition_pack(void *arg, AVIOContext *pb, int tag, int size
}
nb_essence_containers = avio_rb32(pb);
+ if (partition->type == Header) {
+ char str[36];
+ snprintf(str, sizeof(str), "%08x.%08x.%08x.%08x", AV_RB32(&op[0]), AV_RB32(&op[4]), AV_RB32(&op[8]), AV_RB32(&op[12]));
+ av_dict_set(&s->metadata, "operational_pattern_ul", str, 0);
+ }
+
if (partition->this_partition &&
partition->previous_partition == partition->this_partition) {
av_log(mxf->fc, AV_LOG_ERROR,
diff --git a/chromium/third_party/ffmpeg/libavformat/oggparsevorbis.c b/chromium/third_party/ffmpeg/libavformat/oggparsevorbis.c
index bcfd246b8dc..43f05f928ac 100644
--- a/chromium/third_party/ffmpeg/libavformat/oggparsevorbis.c
+++ b/chromium/third_party/ffmpeg/libavformat/oggparsevorbis.c
@@ -44,7 +44,7 @@ static int ogm_chapter(AVFormatContext *as, uint8_t *key, uint8_t *val)
int i, cnum, h, m, s, ms, keylen = strlen(key);
AVChapter *chapter = NULL;
- if (keylen < 9 || sscanf(key, "CHAPTER%03d", &cnum) != 1)
+ if (keylen < 9 || av_strncasecmp(key, "CHAPTER", 7) || sscanf(key+7, "%03d", &cnum) != 1)
return 0;
if (keylen <= 10) {
@@ -55,7 +55,7 @@ static int ogm_chapter(AVFormatContext *as, uint8_t *key, uint8_t *val)
ms + 1000 * (s + 60 * (m + 60 * h)),
AV_NOPTS_VALUE, NULL);
av_free(val);
- } else if (!strcmp(key + keylen - 4, "NAME")) {
+ } else if (!av_strcasecmp(key + keylen - 4, "NAME")) {
for (i = 0; i < as->nb_chapters; i++)
if (as->chapters[i]->id == cnum) {
chapter = as->chapters[i];
@@ -91,7 +91,7 @@ int ff_vorbis_comment(AVFormatContext *as, AVDictionary **m,
const uint8_t *p = buf;
const uint8_t *end = buf + size;
int updates = 0;
- unsigned n, j;
+ unsigned n;
int s;
/* must have vendor_length and user_comment_list_length */
@@ -139,8 +139,7 @@ int ff_vorbis_comment(AVFormatContext *as, AVDictionary **m,
return AVERROR(ENOMEM);
}
- for (j = 0; j < tl; j++)
- tt[j] = av_toupper(t[j]);
+ memcpy(tt, t, tl);
tt[tl] = 0;
memcpy(ct, v, vl);
diff --git a/chromium/third_party/ffmpeg/libavformat/riff.c b/chromium/third_party/ffmpeg/libavformat/riff.c
index a8594b06075..0f5cd62547f 100644
--- a/chromium/third_party/ffmpeg/libavformat/riff.c
+++ b/chromium/third_party/ffmpeg/libavformat/riff.c
@@ -477,8 +477,15 @@ const AVCodecTag ff_codec_bmp_tags[] = {
{ AV_CODEC_ID_RASC, MKTAG('R', 'A', 'S', 'C') },
{ AV_CODEC_ID_HYMT, MKTAG('H', 'Y', 'M', 'T') },
{ AV_CODEC_ID_ARBC, MKTAG('A', 'R', 'B', 'C') },
+ { AV_CODEC_ID_AGM, MKTAG('A', 'G', 'M', '0') },
+ { AV_CODEC_ID_AGM, MKTAG('A', 'G', 'M', '1') },
{ AV_CODEC_ID_AGM, MKTAG('A', 'G', 'M', '2') },
{ AV_CODEC_ID_AGM, MKTAG('A', 'G', 'M', '3') },
+ { AV_CODEC_ID_AGM, MKTAG('A', 'G', 'M', '4') },
+ { AV_CODEC_ID_AGM, MKTAG('A', 'G', 'M', '5') },
+ { AV_CODEC_ID_AGM, MKTAG('A', 'G', 'M', '6') },
+ { AV_CODEC_ID_AGM, MKTAG('A', 'G', 'M', '7') },
+ { AV_CODEC_ID_LSCR, MKTAG('L', 'S', 'C', 'R') },
{ AV_CODEC_ID_NONE, 0 }
};
@@ -599,5 +606,6 @@ const AVCodecGuid ff_codec_wav_guids[] = {
{ AV_CODEC_ID_ATRAC9, { 0xD2, 0x42, 0xE1, 0x47, 0xBA, 0x36, 0x8D, 0x4D, 0x88, 0xFC, 0x61, 0x65, 0x4F, 0x8C, 0x83, 0x6C } },
{ AV_CODEC_ID_EAC3, { 0xAF, 0x87, 0xFB, 0xA7, 0x02, 0x2D, 0xFB, 0x42, 0xA4, 0xD4, 0x05, 0xCD, 0x93, 0x84, 0x3B, 0xDD } },
{ AV_CODEC_ID_MP2, { 0x2B, 0x80, 0x6D, 0xE0, 0x46, 0xDB, 0xCF, 0x11, 0xB4, 0xD1, 0x00, 0x80, 0x5F, 0x6C, 0xBB, 0xEA } },
+ { AV_CODEC_ID_ADPCM_AGM,{ 0x82, 0xEC, 0x1F, 0x6A, 0xCA, 0xDB, 0x19, 0x45, 0xBD, 0xE7, 0x56, 0xD3, 0xB3, 0xEF, 0x98, 0x1D } },
{ AV_CODEC_ID_NONE }
};
diff --git a/chromium/third_party/ffmpeg/libavformat/riffdec.c b/chromium/third_party/ffmpeg/libavformat/riffdec.c
index b448f9116fd..5523b31adce 100644
--- a/chromium/third_party/ffmpeg/libavformat/riffdec.c
+++ b/chromium/third_party/ffmpeg/libavformat/riffdec.c
@@ -58,7 +58,7 @@ enum AVCodecID ff_codec_guid_get_id(const AVCodecGuid *guids, ff_asf_guid guid)
* an openended structure.
*/
-static void parse_waveformatex(AVIOContext *pb, AVCodecParameters *par)
+static void parse_waveformatex(AVFormatContext *s, AVIOContext *pb, AVCodecParameters *par)
{
ff_asf_guid subformat;
int bps;
@@ -81,7 +81,7 @@ static void parse_waveformatex(AVIOContext *pb, AVCodecParameters *par)
} else {
par->codec_id = ff_codec_guid_get_id(ff_codec_wav_guids, subformat);
if (!par->codec_id)
- av_log(pb, AV_LOG_WARNING,
+ av_log(s, AV_LOG_WARNING,
"unknown subformat:"FF_PRI_GUID"\n",
FF_ARG_GUID(subformat));
}
@@ -140,7 +140,7 @@ int ff_get_wav_header(AVFormatContext *s, AVIOContext *pb,
size -= 18;
cbSize = FFMIN(size, cbSize);
if (cbSize >= 22 && id == 0xfffe) { /* WAVEFORMATEXTENSIBLE */
- parse_waveformatex(pb, par);
+ parse_waveformatex(s, pb, par);
cbSize -= 22;
size -= 22;
}
diff --git a/chromium/third_party/ffmpeg/libavformat/rtsp.c b/chromium/third_party/ffmpeg/libavformat/rtsp.c
index 033095905d1..8349840c96f 100644
--- a/chromium/third_party/ffmpeg/libavformat/rtsp.c
+++ b/chromium/third_party/ffmpeg/libavformat/rtsp.c
@@ -1744,6 +1744,9 @@ redirect:
char httpname[1024];
char sessioncookie[17];
char headers[1024];
+ AVDictionary *options = NULL;
+
+ av_dict_set_int(&options, "timeout", rt->stimeout, 0);
ff_url_join(httpname, sizeof(httpname), https_tunnel ? "https" : "http", auth, host, port, "%s", path);
snprintf(sessioncookie, sizeof(sessioncookie), "%08x%08x",
@@ -1774,7 +1777,8 @@ redirect:
}
/* complete the connection */
- if (ffurl_connect(rt->rtsp_hd, NULL)) {
+ if (ffurl_connect(rt->rtsp_hd, &options)) {
+ av_dict_free(&options);
err = AVERROR(EIO);
goto fail;
}
@@ -1818,10 +1822,12 @@ redirect:
ff_http_init_auth_state(rt->rtsp_hd_out, rt->rtsp_hd);
/* complete the connection */
- if (ffurl_connect(rt->rtsp_hd_out, NULL)) {
+ if (ffurl_connect(rt->rtsp_hd_out, &options)) {
+ av_dict_free(&options);
err = AVERROR(EIO);
goto fail;
}
+ av_dict_free(&options);
} else {
int ret;
/* open the tcp connection */
diff --git a/chromium/third_party/ffmpeg/libavformat/utils.c b/chromium/third_party/ffmpeg/libavformat/utils.c
index 257fb3e2a09..39c118f9e89 100644
--- a/chromium/third_party/ffmpeg/libavformat/utils.c
+++ b/chromium/third_party/ffmpeg/libavformat/utils.c
@@ -1397,8 +1397,8 @@ static void compute_pkt_fields(AVFormatContext *s, AVStream *st,
st->cur_dts = pkt->dts;
if (s->debug & FF_FDEBUG_TS)
- av_log(s, AV_LOG_DEBUG, "OUTdelayed:%d/%d pts:%s, dts:%s cur_dts:%s\n",
- presentation_delayed, delay, av_ts2str(pkt->pts), av_ts2str(pkt->dts), av_ts2str(st->cur_dts));
+ av_log(s, AV_LOG_DEBUG, "OUTdelayed:%d/%d pts:%s, dts:%s cur_dts:%s st:%d (%d)\n",
+ presentation_delayed, delay, av_ts2str(pkt->pts), av_ts2str(pkt->dts), av_ts2str(st->cur_dts), st->index, st->id);
/* update flags */
if (st->codecpar->codec_type == AVMEDIA_TYPE_DATA || is_intra_only(st->codecpar->codec_id))
@@ -4725,7 +4725,7 @@ void av_url_split(char *proto, int proto_size,
char *hostname, int hostname_size,
int *port_ptr, char *path, int path_size, const char *url)
{
- const char *p, *ls, *ls2, *at, *at2, *col, *brk;
+ const char *p, *ls, *ls2, *ls3, *at, *at2, *col, *brk;
if (port_ptr)
*port_ptr = -1;
@@ -4755,6 +4755,9 @@ void av_url_split(char *proto, int proto_size,
/* separate path from hostname */
ls = strchr(p, '/');
ls2 = strchr(p, '?');
+ ls3 = strchr(p, '@');
+ if (ls3 && ls3 > ls && (!ls2 || ls2 > ls3))
+ ls = strchr(ls3, '/');
if (!ls)
ls = ls2;
else if (ls && ls2)
diff --git a/chromium/third_party/ffmpeg/libavformat/vc1dec.c b/chromium/third_party/ffmpeg/libavformat/vc1dec.c
index f4101ae5947..fdbb05d6d84 100644
--- a/chromium/third_party/ffmpeg/libavformat/vc1dec.c
+++ b/chromium/third_party/ffmpeg/libavformat/vc1dec.c
@@ -26,7 +26,7 @@
static int vc1_probe(const AVProbeData *p)
{
- int seq = 0, entry = 0, frame = 0, i;
+ int seq = 0, entry = 0, invalid = 0, frame = 0, i;
for (i = 0; i < p->buf_size + 5; i++) {
uint32_t code = AV_RB32(p->buf + i);
@@ -39,16 +39,19 @@ static int vc1_probe(const AVProbeData *p)
profile = (p->buf[i] & 0xc0) >> 6;
if (profile != PROFILE_ADVANCED) {
seq = 0;
+ invalid++;
continue;
}
level = (p->buf[i] & 0x38) >> 3;
if (level >= 5) {
seq = 0;
+ invalid++;
continue;
}
chromaformat = (p->buf[i] & 0x6) >> 1;
if (chromaformat != 1) {
seq = 0;
+ invalid++;
continue;
}
seq++;
@@ -56,8 +59,10 @@ static int vc1_probe(const AVProbeData *p)
break;
}
case VC1_CODE_ENTRYPOINT:
- if (!seq)
+ if (!seq) {
+ invalid++;
continue;
+ }
entry++;
i += 2;
break;
@@ -71,9 +76,9 @@ static int vc1_probe(const AVProbeData *p)
}
}
- if (frame > 1)
+ if (frame > 1 && frame >> 1 > invalid)
return AVPROBE_SCORE_EXTENSION / 2 + 1;
- if (frame == 1)
+ if (frame >= 1)
return AVPROBE_SCORE_EXTENSION / 4;
return 0;
}
diff --git a/chromium/third_party/ffmpeg/libavformat/version.h b/chromium/third_party/ffmpeg/libavformat/version.h
index 69d3f691f0c..150a72e27d7 100644
--- a/chromium/third_party/ffmpeg/libavformat/version.h
+++ b/chromium/third_party/ffmpeg/libavformat/version.h
@@ -32,8 +32,8 @@
// Major bumping may affect Ticket5467, 5421, 5451(compatibility with Chromium)
// Also please add any ticket numbers that you believe might be affected here
#define LIBAVFORMAT_VERSION_MAJOR 58
-#define LIBAVFORMAT_VERSION_MINOR 26
-#define LIBAVFORMAT_VERSION_MICRO 101
+#define LIBAVFORMAT_VERSION_MINOR 27
+#define LIBAVFORMAT_VERSION_MICRO 103
#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
LIBAVFORMAT_VERSION_MINOR, \
diff --git a/chromium/third_party/ffmpeg/libavformat/wavdec.c b/chromium/third_party/ffmpeg/libavformat/wavdec.c
index 8c717564ecf..3e493e74d83 100644
--- a/chromium/third_party/ffmpeg/libavformat/wavdec.c
+++ b/chromium/third_party/ffmpeg/libavformat/wavdec.c
@@ -235,9 +235,9 @@ static inline int wav_parse_bext_string(AVFormatContext *s, const char *key,
char temp[257];
int ret;
- av_assert0(length <= sizeof(temp));
- if ((ret = avio_read(s->pb, temp, length)) < 0)
- return ret;
+ av_assert0(length < sizeof(temp));
+ if ((ret = avio_read(s->pb, temp, length)) != length)
+ return ret < 0 ? ret : AVERROR_INVALIDDATA;
temp[length] = 0;
@@ -306,8 +306,10 @@ static int wav_parse_bext_tag(AVFormatContext *s, int64_t size)
if (!(coding_history = av_malloc(size + 1)))
return AVERROR(ENOMEM);
- if ((ret = avio_read(s->pb, coding_history, size)) < 0)
- return ret;
+ if ((ret = avio_read(s->pb, coding_history, size)) != size) {
+ av_free(coding_history);
+ return ret < 0 ? ret : AVERROR_INVALIDDATA;
+ }
coding_history[size] = 0;
if ((ret = av_dict_set(&s->metadata, "coding_history", coding_history,