summaryrefslogtreecommitdiff
path: root/chromium/third_party/ffmpeg/libavformat
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2017-07-17 13:57:45 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2017-07-19 13:44:40 +0000
commit6ec7b8da05d21a3878bd21c691b41e675d74bb1c (patch)
treeb87f250bc19413750b9bb9cdbf2da20ef5014820 /chromium/third_party/ffmpeg/libavformat
parentec02ee4181c49b61fce1c8fb99292dbb8139cc90 (diff)
downloadqtwebengine-chromium-6ec7b8da05d21a3878bd21c691b41e675d74bb1c.tar.gz
BASELINE: Update Chromium to 60.0.3112.70
Change-Id: I9911c2280a014d4632f254857876a395d4baed2d Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Diffstat (limited to 'chromium/third_party/ffmpeg/libavformat')
-rw-r--r--chromium/third_party/ffmpeg/libavformat/isom.h1
-rw-r--r--chromium/third_party/ffmpeg/libavformat/mov.c27
2 files changed, 24 insertions, 4 deletions
diff --git a/chromium/third_party/ffmpeg/libavformat/isom.h b/chromium/third_party/ffmpeg/libavformat/isom.h
index 68641a471ae..c35c5678cec 100644
--- a/chromium/third_party/ffmpeg/libavformat/isom.h
+++ b/chromium/third_party/ffmpeg/libavformat/isom.h
@@ -233,6 +233,7 @@ typedef struct MOVContext {
unsigned int nb_chapter_tracks;
int use_absolute_path;
int ignore_editlist;
+ int advanced_editlist;
int ignore_chapters;
int seek_individually;
int64_t next_root_atom; ///< offset of the next root atom
diff --git a/chromium/third_party/ffmpeg/libavformat/mov.c b/chromium/third_party/ffmpeg/libavformat/mov.c
index 0f39c409168..e0dc1f2bc71 100644
--- a/chromium/third_party/ffmpeg/libavformat/mov.c
+++ b/chromium/third_party/ffmpeg/libavformat/mov.c
@@ -3319,7 +3319,7 @@ static void mov_build_index(MOVContext *mov, AVStream *st)
uint64_t stream_size = 0;
if (sc->elst_count) {
- int i, edit_start_index = 0;
+ int i, edit_start_index = 0, multiple_edits = 0;
int64_t empty_duration = 0; // empty duration of the first edit list entry
int64_t start_time = 0; // start time of the media
@@ -3332,15 +3332,28 @@ static void mov_build_index(MOVContext *mov, AVStream *st)
edit_start_index = 1;
} else if (i == edit_start_index && e->time >= 0) {
start_time = e->time;
+ } else {
+ multiple_edits = 1;
}
}
+ if (multiple_edits && !mov->advanced_editlist)
+ av_log(mov->fc, AV_LOG_WARNING, "multiple edit list entries, "
+ "Use -advanced_editlist to correctly decode otherwise "
+ "a/v desync might occur\n");
+
/* adjust first dts according to edit list */
if ((empty_duration || start_time) && mov->time_scale > 0) {
if (empty_duration)
empty_duration = av_rescale(empty_duration, sc->time_scale, mov->time_scale);
sc->time_offset = start_time - empty_duration;
+ if (!mov->advanced_editlist)
+ current_dts = -sc->time_offset;
}
+
+ if (!multiple_edits && !mov->advanced_editlist &&
+ st->codecpar->codec_id == AV_CODEC_ID_AAC && start_time > 0)
+ sc->start_pad = start_time;
}
/* only use old uncompressed audio chunk demuxing when stts specifies it */
@@ -3574,8 +3587,10 @@ static void mov_build_index(MOVContext *mov, AVStream *st)
}
}
- // Fix index according to edit lists.
- mov_fix_index(mov, st);
+ if (!mov->ignore_editlist && mov->advanced_editlist) {
+ // Fix index according to edit lists.
+ mov_fix_index(mov, st);
+ }
}
static int test_same_origin(const char *src, const char *ref) {
@@ -6270,7 +6285,11 @@ static const AVOption mov_options[] = {
"Seek each stream individually to the to the closest point",
OFFSET(seek_individually), AV_OPT_TYPE_BOOL, { .i64 = 1 },
0, 1, FLAGS},
- {"ignore_editlist", "", OFFSET(ignore_editlist), AV_OPT_TYPE_BOOL, {.i64 = 0},
+ {"ignore_editlist", "Ignore the edit list atom.", OFFSET(ignore_editlist), AV_OPT_TYPE_BOOL, {.i64 = 0},
+ 0, 1, FLAGS},
+ {"advanced_editlist",
+ "Modify the AVIndex according to the editlists. Use this option to decode in the order specified by the edits.",
+ OFFSET(advanced_editlist), AV_OPT_TYPE_BOOL, {.i64 = 1},
0, 1, FLAGS},
{"ignore_chapters", "", OFFSET(ignore_chapters), AV_OPT_TYPE_BOOL, {.i64 = 0},
0, 1, FLAGS},