diff options
author | Martin Storsjö <martin@martin.st> | 2015-03-16 00:18:37 +0200 |
---|---|---|
committer | Martin Storsjö <martin@martin.st> | 2015-03-19 10:27:22 +0200 |
commit | 30a041887f89cd97c372ad6a516da6e012f2c88b (patch) | |
tree | 060f9a5d4f13545148bc0bb2d9444e6b2dfd1aa9 | |
parent | 67a2912307c3c08f2725ccae162cfe3426b80184 (diff) | |
download | ffmpeg-30a041887f89cd97c372ad6a516da6e012f2c88b.tar.gz |
ismindex: Calculate the pts duration of trun atoms, not the dts duration
Since the duration is compared to the tfra durations/intervals which
are expressed in pts, calculate that here as well.
Signed-off-by: Martin Storsjö <martin@martin.st>
-rw-r--r-- | tools/ismindex.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/tools/ismindex.c b/tools/ismindex.c index 387b185feb..f3bfec0a96 100644 --- a/tools/ismindex.c +++ b/tools/ismindex.c @@ -228,10 +228,12 @@ fail: static int64_t read_trun_duration(AVIOContext *in, int default_duration, int64_t end) { - int64_t ret = 0; + int64_t dts = 0; int64_t pos; int flags, i; int entries; + int64_t first_pts = 0; + int64_t max_pts = 0; avio_r8(in); /* version */ flags = avio_rb24(in); if (default_duration <= 0 && !(flags & MOV_TRUN_SAMPLE_DURATION)) { @@ -246,19 +248,23 @@ static int64_t read_trun_duration(AVIOContext *in, int default_duration, pos = avio_tell(in); for (i = 0; i < entries && pos < end; i++) { int sample_duration = default_duration; + int64_t pts = dts; if (flags & MOV_TRUN_SAMPLE_DURATION) sample_duration = avio_rb32(in); if (flags & MOV_TRUN_SAMPLE_SIZE) avio_rb32(in); if (flags & MOV_TRUN_SAMPLE_FLAGS) avio_rb32(in); - if (flags & MOV_TRUN_SAMPLE_CTS) avio_rb32(in); + if (flags & MOV_TRUN_SAMPLE_CTS) pts += avio_rb32(in); if (sample_duration < 0) { fprintf(stderr, "Negative sample duration %d\n", sample_duration); return -1; } - ret += sample_duration; + if (i == 0) + first_pts = pts; + max_pts = FFMAX(max_pts, pts + sample_duration); + dts += sample_duration; pos = avio_tell(in); } - return ret; + return max_pts - first_pts; } static int64_t read_moof_duration(AVIOContext *in, int64_t offset) |