From patchwork Mon Jul 31 21:29:29 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dale Curtis X-Patchwork-Id: 4554 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.1.85 with SMTP id 82csp2860907vsb; Mon, 31 Jul 2017 14:35:16 -0700 (PDT) X-Received: by 10.223.160.68 with SMTP id l4mr12628248wrl.162.1501536916199; Mon, 31 Jul 2017 14:35:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1501536916; cv=none; d=google.com; s=arc-20160816; b=vFA8YsLUHE8j3EWap0eUb1oGYGvruG7FfL5JU5rDWvwcc3xo+SKB6eTRX3Q31E37Nu X4zKgz/DmgpncJrtu2d5VvSo8tkHT/Ftxr3HOssSEvprQLsBHFGGBe9bINcdkWtctj3e dg/ph86dNk0xwu16YFeulRPTDiU4ccLe0xZl4y6yuBUxXpgJR2CTPc2MY7iluqAaAYsj YOYibPEgzecN0zTgL+tJvdweWiARubGSdpqa45zAZaRioPV9eN8H0m3G8zCzhtEreJrh SLF9WC4JuNK/XASjS0109dQ960pNQLYZRxqI3W1sAEGyk5Wz/cs/bmmyfp/QH2SrBDJ4 x4JA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:reply-to:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence:subject:to :message-id:date:from:references:in-reply-to:mime-version :dkim-signature:dkim-signature:delivered-to :arc-authentication-results; bh=G8LhWnwVILjRSWXP19is6H3tHBAZ82AaOwMmlW19T9I=; b=eKKZgVrkDNO/UKenB5OQqiGSyXUyfv1mTtQeOAFtnkZVEeNILTg3xXuvCBLdhZU7+M zkM8lckBEWkKTW7y4KolTIwqfsIp1FXu0Cj/zT4QdTeBI2FICP2Gh9QgCLXp5B5UbLz0 UiQe13ODVt5ULsI2lHLyps3ZyzLO0XUEVO1iJGbqTJ1a/nKROVA2QSRe4yTCP0gtMBQ5 jyTvAUBda3M2Qs9RQY510AqjDS/Unnvs1mr778OgCHjRLo5La2IXIzErhQs4A1HNsnWi QGaK3yoeJl//DmhTRMoBVLEA4UGVpbrceItfG0BmURRHqW/cDVYGFDhy2koA5J1fMcPB uR3g== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@google.com header.b=BWCP7CuZ; dkim=neutral (body hash did not verify) header.i=@chromium.org header.b=MB3L7bMB; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=chromium.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id x70si8806902wma.164.2017.07.31.14.35.14; Mon, 31 Jul 2017 14:35:16 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@google.com header.b=BWCP7CuZ; dkim=neutral (body hash did not verify) header.i=@chromium.org header.b=MB3L7bMB; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=chromium.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 6A58F68A232; Tue, 1 Aug 2017 00:35:09 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr0-f180.google.com (mail-wr0-f180.google.com [209.85.128.180]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 05F4668A1CC for ; Tue, 1 Aug 2017 00:35:03 +0300 (EEST) Received: by mail-wr0-f180.google.com with SMTP id y43so184221479wrd.3 for ; Mon, 31 Jul 2017 14:35:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:sender:in-reply-to:references:from:date:message-id :subject:to; bh=msG2QeSHxiEiSOrsVUKD278/pNDdWH3DY8Tga1tBMdw=; b=BWCP7CuZrdI8zAc3ODheYerdv740ZJEjr4sHWDGI8uTrkp1LrjBpnNbVeCfWb0M1Q+ lXa5TnGeSngFZgEgDEs1k5Q21YAngvJgDozCQ/dy95HAIzbZZrfHruOnb2OFHZwI0npC FMJNu1dptb7KCxDSRTA2lHy+719mz9znHLpv6ajnCeXL+kozhn1hLKHr3eB/ukb6Q5qS nqgEBzXPt3WpspWfejUQZ1XlKpSCHu26gScHwXRofiYFOOWIqUpS9sX9HYrmm4FvSS14 zsuR2LQV5p/iJngLujdz4koPzXYUsKgtCwTiRfLUG/oof5f4F2pCRKhW6TCRWYNaySUo Grqw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=mime-version:sender:in-reply-to:references:from:date:message-id :subject:to; bh=msG2QeSHxiEiSOrsVUKD278/pNDdWH3DY8Tga1tBMdw=; b=MB3L7bMBxcvPWT2y7JZKGb9UQc2oHgCH939D3EwWSFkmZW28Uf+DjPsry4VFyvOyl/ FjaRr9yu9AaEGzk1qBuFYBdZCV0LjZrHSO0RewQZSnxBlKuvbgQpGwejz1VB3S2gW+ME FUDn1pupV5x478CICkwRDe0ZUPIhK+WClku44= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:sender:in-reply-to:references:from :date:message-id:subject:to; bh=msG2QeSHxiEiSOrsVUKD278/pNDdWH3DY8Tga1tBMdw=; b=PCiturf+J6lw8ngZFCtvX1O+2KLHnxQXLhPv7rWg+KWaUTxfOxR0JAPOTYfMLzdAcK 1sndKdxyfVi5+9L+sXJUrr+tSMcPx4S+ZEUysKuUYIS4CJfkj/7SGdfZDZSB0uiBGNSr j6A8qVWiyXaboicE2/1k2iMNm/XN7/gBv8QWWKuHCEYhr93WtaOo4CcbnG4GLsJUTYV4 +yinmZ2c81uomAuDvBsEjGki3RyPBQcTK5HAed2NaVXALXG4U2n/+fpBISqhY43dvmgG LGXFWwJ7iqfkdPBzE2kFSU0oyc7X7KJIAjsyoX7mQ5hLazunyWccZNcUwr4nZHAFcsuE Wdjw== X-Gm-Message-State: AIVw113352ScJKQvfgxstXk6LnxtwWCuumN3JAUArBn6RO7wrvnVuwt2 jtC2C+e5SfxSBjGjCI7cUNaQZtOgSN4KIbcZNQ== X-Received: by 10.223.183.15 with SMTP id l15mr16378138wre.260.1501536590048; Mon, 31 Jul 2017 14:29:50 -0700 (PDT) MIME-Version: 1.0 Received: by 10.28.11.131 with HTTP; Mon, 31 Jul 2017 14:29:29 -0700 (PDT) In-Reply-To: <20170725200319.GL3740@nb4> References: <20170719222837.GE3740@nb4> <20170720120059.GF3740@nb4> <20170725200319.GL3740@nb4> From: Dale Curtis Date: Mon, 31 Jul 2017 14:29:29 -0700 X-Google-Sender-Auth: VB5GaAzRMtQLOCHNFJPWvKlytzs Message-ID: To: FFmpeg development discussions and patches X-Content-Filtered-By: Mailman/MimeDel 2.1.20 Subject: Re: [FFmpeg-devel] [mov] Fix trampling of ctts during seeks when sidx support is enabled. X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Here's an updated patch with a fate test attached. You'll need to add http://storage.googleapis.com/dalecurtis/buck480p30_na.mp4 to the fate-suite/mov for this test. This is licensed under creative commons attribution, so it should be fine for tests: https://peach.blender.org/about/ I tried to use the existing samples, but you need a clip long enough that the entire index isn't generated from the start. - dale On Tue, Jul 25, 2017 at 1:03 PM, Michael Niedermayer wrote: > On Mon, Jul 24, 2017 at 02:32:41PM -0700, Dale Curtis wrote: > > On Thu, Jul 20, 2017 at 5:00 AM, Michael Niedermayer > > > wrote: > > > > > Hi > > > > > > On Wed, Jul 19, 2017 at 07:30:01PM -0700, Dale Curtis wrote: > > > > Thanks will take a look. Is this test not part of fate? make fate > passed > > > > > > no, we should have tests for all (fixed) tickets in fate ideally > > > but in reality most tickets lack a corresponding test > > > I tried both in outreachy and as well in GSoC to improve this situation > > > with student projects but both only moved this forward by a small > > > step. Its a large amount of work to create robust, portable and > > > practical tests for "all" tickets and everything else. > > > The way out to get this actually done would be to pay a developer to > > > create tests for "all" tickets in fate. I belive carl would be the > > > ideal one to do this work as he has since a very long time always > tested > > > and kept track of all our tickets. > > > I did suggest a while ago to someone at google that funding such > > > project would make sense but IIRC i never heared back. > > > if some company would fund something like this, i belive this would be > > > very usefull in the long run for code quality > > > > > > > I think it'd be pretty hard to get someone to go through and create tests > > for every issue ever seen. Even Chromium has trouble with this, but > making > > yes, unless theres someone who enjoys doing this kind of work. > > > > it part of the culture helps. I.e. reviewers should ask for every change > to > > include a test. > > yes though theres already > 1.8 patch submission checklist > ... > 26. Consider adding a regression test for your code. > on http://ffmpeg.org/developer.html > > > > I'm happy to add one to fate for this change. Or can do so > > in a followup patch if you prefer. > > please do (any variant is fine) > > thx > > > > > Does anyone have comments on this change specifically? We've already > rolled > > this into Chrome and it's working fine and passing all regression tests. > > _______________________________________________ > > ffmpeg-devel mailing list > > ffmpeg-devel@ffmpeg.org > > http://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > -- > Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB > > Breaking DRM is a little like attempting to break through a door even > though the window is wide open and the only thing in the house is a bunch > of things you dont want and which you would get tomorrow for free anyway > > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > http://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > From 8c99024ff723853d8d8f83d9862b884e57fe2b83 Mon Sep 17 00:00:00 2001 From: Dale Curtis Date: Mon, 17 Jul 2017 17:38:09 -0700 Subject: [PATCH] Fix trampling of ctts during seeks when sidx support is enabled. When sidx box support is enabled, the code will skip reading all trun boxes (each containing ctts entries for samples inthat box). If seeks are attempted before all ctts values are known, the old code would dump ctts entries into the wrong location. These are then used to compute pts values which leads to out of order and incorrectly timestamped packets. This patch fixes ctts processing by always using the index returned by av_add_index_entry() as the ctts_data index. When the index gains new entries old values are reshuffled as appropriate. This approach makes sense since the mov demuxer is already relying on the mapping of AVIndex entries to samples for correct demuxing. Notes for future improvement: Probably there are other boxes (stts, stsc, etc) that are impacted by this issue... this patch only attempts to fix ctts since it completely breaks packet timestamping. This patch continues using an array for the ctts data, which is not the most ideal given the rearrangement that needs to happen (via memmove as new entries are read in). Ideally AVIndex and the ctts data would be set-type structures so addition is always worst case O(lg(n)) instead of the O(n^2) that exists now; this slowdown is noticeable during seeks. Additionally since ctts samples from trun boxes always have a count of 1, there's probably an opportunity to avoid the post-seek fixup that iterates O(n) over all samples with an O(1) when no non-1 count samples are present. Signed-off-by: Dale Curtis --- libavformat/isom.h | 1 + libavformat/mov.c | 58 ++++++++++++-------- tests/fate/seek.mak | 3 ++ tests/ref/seek/extra-mp4 | 134 +++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 175 insertions(+), 21 deletions(-) create mode 100644 tests/ref/seek/extra-mp4 diff --git a/libavformat/isom.h b/libavformat/isom.h index ff009b0896..fdd98c28f5 100644 --- a/libavformat/isom.h +++ b/libavformat/isom.h @@ -137,6 +137,7 @@ typedef struct MOVStreamContext { unsigned int stts_count; MOVStts *stts_data; unsigned int ctts_count; + unsigned int ctts_allocated_size; MOVStts *ctts_data; unsigned int stsc_count; MOVStsc *stsc_data; diff --git a/libavformat/mov.c b/libavformat/mov.c index 63f84be782..ab8e914581 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -2726,7 +2726,7 @@ static int mov_read_ctts(MOVContext *c, AVIOContext *pb, MOVAtom atom) if (entries >= UINT_MAX / sizeof(*sc->ctts_data)) return AVERROR_INVALIDDATA; av_freep(&sc->ctts_data); - sc->ctts_data = av_realloc(NULL, entries * sizeof(*sc->ctts_data)); + sc->ctts_data = av_fast_realloc(NULL, &sc->ctts_allocated_size, entries * sizeof(*sc->ctts_data)); if (!sc->ctts_data) return AVERROR(ENOMEM); @@ -3046,7 +3046,6 @@ static void mov_fix_index(MOVContext *mov, AVStream *st) int64_t index; int64_t index_ctts_count; int flags; - unsigned int ctts_allocated_size = 0; int64_t start_dts = 0; int64_t edit_list_media_time_dts = 0; int64_t edit_list_start_encountered = 0; @@ -3081,6 +3080,7 @@ static void mov_fix_index(MOVContext *mov, AVStream *st) msc->ctts_count = 0; msc->ctts_index = 0; msc->ctts_sample = 0; + msc->ctts_allocated_size = 0; // If the dts_shift is positive (in case of negative ctts values in mov), // then negate the DTS by dts_shift @@ -3190,7 +3190,7 @@ static void mov_fix_index(MOVContext *mov, AVStream *st) ctts_sample_old++; if (ctts_sample_old == ctts_data_old[ctts_index_old].count) { if (add_ctts_entry(&msc->ctts_data, &msc->ctts_count, - &ctts_allocated_size, + &msc->ctts_allocated_size, ctts_data_old[ctts_index_old].count - edit_list_start_ctts_sample, ctts_data_old[ctts_index_old].duration) == -1) { av_log(mov->fc, AV_LOG_ERROR, "Cannot add CTTS entry %"PRId64" - {%"PRId64", %d}\n", @@ -3289,7 +3289,7 @@ static void mov_fix_index(MOVContext *mov, AVStream *st) if (ctts_data_old && ctts_sample_old != 0) { if (add_ctts_entry(&msc->ctts_data, &msc->ctts_count, - &ctts_allocated_size, + &msc->ctts_allocated_size, ctts_sample_old - edit_list_start_ctts_sample, ctts_data_old[ctts_index_old].duration) == -1) { av_log(mov->fc, AV_LOG_ERROR, "Cannot add CTTS entry %"PRId64" - {%"PRId64", %d}\n", @@ -4259,7 +4259,7 @@ static int mov_read_trun(MOVContext *c, AVIOContext *pb, MOVAtom atom) int64_t dts; int data_offset = 0; unsigned entries, first_sample_flags = frag->flags; - int flags, distance, i, err; + int flags, distance, i; for (i = 0; i < c->fc->nb_streams; i++) { if (c->fc->streams[i]->id == frag->track_id) { @@ -4287,7 +4287,7 @@ static int mov_read_trun(MOVContext *c, AVIOContext *pb, MOVAtom atom) if (!sc->ctts_count && sc->sample_count) { /* Complement ctts table if moov atom doesn't have ctts atom. */ - ctts_data = av_realloc(NULL, sizeof(*sc->ctts_data)); + ctts_data = av_fast_realloc(NULL, &sc->ctts_allocated_size, sizeof(*sc->ctts_data)); if (!ctts_data) return AVERROR(ENOMEM); sc->ctts_data = ctts_data; @@ -4297,11 +4297,6 @@ static int mov_read_trun(MOVContext *c, AVIOContext *pb, MOVAtom atom) } if ((uint64_t)entries+sc->ctts_count >= UINT_MAX/sizeof(*sc->ctts_data)) return AVERROR_INVALIDDATA; - if ((err = av_reallocp_array(&sc->ctts_data, entries + sc->ctts_count, - sizeof(*sc->ctts_data))) < 0) { - sc->ctts_count = 0; - return err; - } if (flags & MOV_TRUN_DATA_OFFSET) data_offset = avio_rb32(pb); if (flags & MOV_TRUN_FIRST_SAMPLE_FLAGS) first_sample_flags = avio_rb32(pb); dts = sc->track_end - sc->time_offset; @@ -4312,26 +4307,28 @@ static int mov_read_trun(MOVContext *c, AVIOContext *pb, MOVAtom atom) unsigned sample_size = frag->size; int sample_flags = i ? frag->flags : first_sample_flags; unsigned sample_duration = frag->duration; + unsigned ctts_duration = 0; int keyframe = 0; + int ctts_index = 0; + int old_nb_index_entries = st->nb_index_entries; if (flags & MOV_TRUN_SAMPLE_DURATION) sample_duration = avio_rb32(pb); if (flags & MOV_TRUN_SAMPLE_SIZE) sample_size = avio_rb32(pb); if (flags & MOV_TRUN_SAMPLE_FLAGS) sample_flags = avio_rb32(pb); - sc->ctts_data[sc->ctts_count].count = 1; - sc->ctts_data[sc->ctts_count].duration = (flags & MOV_TRUN_SAMPLE_CTS) ? - avio_rb32(pb) : 0; - mov_update_dts_shift(sc, sc->ctts_data[sc->ctts_count].duration); + if (flags & MOV_TRUN_SAMPLE_CTS) ctts_duration = avio_rb32(pb); + + mov_update_dts_shift(sc, ctts_duration); if (frag->time != AV_NOPTS_VALUE) { if (c->use_mfra_for == FF_MOV_FLAG_MFRA_PTS) { int64_t pts = frag->time; av_log(c->fc, AV_LOG_DEBUG, "found frag time %"PRId64 " sc->dts_shift %d ctts.duration %d" " sc->time_offset %"PRId64" flags & MOV_TRUN_SAMPLE_CTS %d\n", pts, - sc->dts_shift, sc->ctts_data[sc->ctts_count].duration, + sc->dts_shift, ctts_duration, sc->time_offset, flags & MOV_TRUN_SAMPLE_CTS); dts = pts - sc->dts_shift; if (flags & MOV_TRUN_SAMPLE_CTS) { - dts -= sc->ctts_data[sc->ctts_count].duration; + dts -= ctts_duration; } else { dts -= sc->time_offset; } @@ -4343,7 +4340,7 @@ static int mov_read_trun(MOVContext *c, AVIOContext *pb, MOVAtom atom) } frag->time = AV_NOPTS_VALUE; } - sc->ctts_count++; + if (st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO) keyframe = 1; else @@ -4352,11 +4349,30 @@ static int mov_read_trun(MOVContext *c, AVIOContext *pb, MOVAtom atom) MOV_FRAG_SAMPLE_FLAG_DEPENDS_YES)); if (keyframe) distance = 0; - err = av_add_index_entry(st, offset, dts, sample_size, distance, - keyframe ? AVINDEX_KEYFRAME : 0); - if (err < 0) { + ctts_index = av_add_index_entry(st, offset, dts, sample_size, distance, + keyframe ? AVINDEX_KEYFRAME : 0); + if (ctts_index >= 0 && old_nb_index_entries < st->nb_index_entries) { + unsigned int size_needed = st->nb_index_entries * sizeof(*sc->ctts_data); + unsigned int request_size = size_needed > sc->ctts_allocated_size ? + FFMAX(size_needed, 2 * sc->ctts_allocated_size) : size_needed; + sc->ctts_data = av_fast_realloc(sc->ctts_data, &sc->ctts_allocated_size, request_size); + if (!sc->ctts_data) { + sc->ctts_count = 0; + return AVERROR(ENOMEM); + } + + if (ctts_index != old_nb_index_entries) { + memmove(sc->ctts_data + ctts_index + 1, sc->ctts_data + ctts_index, + sizeof(*sc->ctts_data) * (sc->ctts_count - ctts_index)); + } + + sc->ctts_data[ctts_index].count = 1; + sc->ctts_data[ctts_index].duration = ctts_duration; + sc->ctts_count++; + } else { av_log(c->fc, AV_LOG_ERROR, "Failed to add index entry\n"); } + av_log(c->fc, AV_LOG_TRACE, "AVIndex stream %d, sample %u, offset %"PRIx64", dts %"PRId64", " "size %u, distance %d, keyframe %d\n", st->index, sc->sample_count+i, offset, dts, sample_size, distance, keyframe); diff --git a/tests/fate/seek.mak b/tests/fate/seek.mak index f835da5226..1a6e584987 100644 --- a/tests/fate/seek.mak +++ b/tests/fate/seek.mak @@ -248,7 +248,10 @@ FATE_SEEK += $(FATE_SEEK_LAVF-yes:%=fate-seek-lavf-%) FATE_SEEK_EXTRA-$(CONFIG_MP3_DEMUXER) += fate-seek-extra-mp3 FATE_SEEK_EXTRA-$(call ALLYES, CACHE_PROTOCOL PIPE_PROTOCOL MP3_DEMUXER) += fate-seek-cache-pipe FATE_SEEK_EXTRA-$(CONFIG_MATROSKA_DEMUXER) += fate-seek-mkv-codec-delay +FATE_SEEK_EXTRA-$(CONFIG_MOV_DEMUXER) += fate-seek-extra-mp4 + fate-seek-extra-mp3: CMD = run libavformat/tests/seek$(EXESUF) $(TARGET_SAMPLES)/gapless/gapless.mp3 -fastseek 1 +fate-seek-extra-mp4: CMD = run libavformat/tests/seek$(EXESUF) $(TARGET_SAMPLES)/mov/buck480p30_na.mp4 -duration 180 -frames 4 fate-seek-cache-pipe: CMD = cat $(TARGET_SAMPLES)/gapless/gapless.mp3 | run libavformat/tests/seek$(EXESUF) cache:pipe:0 -read_ahead_limit -1 fate-seek-mkv-codec-delay: CMD = run libavformat/tests/seek$(EXESUF) $(TARGET_SAMPLES)/mkv/codec_delay_opus.mkv diff --git a/tests/ref/seek/extra-mp4 b/tests/ref/seek/extra-mp4 new file mode 100644 index 0000000000..960f2dfad8 --- /dev/null +++ b/tests/ref/seek/extra-mp4 @@ -0,0 +1,134 @@ +ret: 0 st: 0 flags:1 dts:-0.033333 pts: 0.000000 pos: 4174 size: 147 +ret: 0 st: 0 flags:0 dts: 0.000000 pts: 0.033333 pos: 4321 size: 24 +ret: 0 st: 0 flags:0 dts: 0.033333 pts: 0.066667 pos: 4345 size: 6779 +ret: 0 st: 0 flags:0 dts: 0.066667 pts: 0.100000 pos: 11124 size: 11041 +ret: 0 st:-1 flags:0 ts:-1.000000 +ret: 0 st: 0 flags:1 dts:-0.033333 pts: 0.000000 pos: 4174 size: 147 +ret: 0 st: 0 flags:0 dts: 0.000000 pts: 0.033333 pos: 4321 size: 24 +ret: 0 st: 0 flags:0 dts: 0.033333 pts: 0.066667 pos: 4345 size: 6779 +ret: 0 st: 0 flags:0 dts: 0.066667 pts: 0.100000 pos: 11124 size: 11041 +ret: 0 st:-1 flags:1 ts: 101.894167 +ret: 0 st: 0 flags:1 dts: 101.300000 pts: 101.333333 pos:10974394 size: 67201 +ret: 0 st: 0 flags:0 dts: 101.333333 pts: 101.433333 pos:11041595 size: 3524 +ret: 0 st: 0 flags:0 dts: 101.366667 pts: 101.366667 pos:11045119 size: 562 +ret: 0 st: 0 flags:0 dts: 101.400000 pts: 101.400000 pos:11045681 size: 599 +ret: 0 st: 0 flags:0 ts: 24.788333 +ret: 0 st: 0 flags:1 dts: 25.300000 pts: 25.333333 pos:2607665 size: 40237 +ret: 0 st: 0 flags:0 dts: 25.333333 pts: 25.433333 pos:2647902 size: 2959 +ret: 0 st: 0 flags:0 dts: 25.366667 pts: 25.366667 pos:2650861 size: 197 +ret: 0 st: 0 flags:0 dts: 25.400000 pts: 25.400000 pos:2651058 size: 230 +ret: 0 st: 0 flags:1 ts: 127.682500 +ret: 0 st: 0 flags:1 dts: 126.633333 pts: 126.666667 pos:13349318 size: 68705 +ret: 0 st: 0 flags:0 dts: 126.666667 pts: 126.766667 pos:13418023 size: 2914 +ret: 0 st: 0 flags:0 dts: 126.700000 pts: 126.700000 pos:13420937 size: 781 +ret: 0 st: 0 flags:0 dts: 126.733333 pts: 126.733333 pos:13421718 size: 817 +ret: 0 st:-1 flags:0 ts: 50.576668 +ret: 0 st: 0 flags:1 dts: 50.633333 pts: 50.666667 pos:5856029 size: 67867 +ret: 0 st: 0 flags:0 dts: 50.666667 pts: 50.766667 pos:5923896 size: 1307 +ret: 0 st: 0 flags:0 dts: 50.700000 pts: 50.700000 pos:5925203 size: 150 +ret: 0 st: 0 flags:0 dts: 50.733333 pts: 50.733333 pos:5925353 size: 176 +ret: 0 st:-1 flags:1 ts: 153.470835 +ret: 0 st: 0 flags:1 dts: 153.466667 pts: 153.500000 pos:15853683 size: 96133 +ret: 0 st: 0 flags:0 dts: 153.500000 pts: 153.533333 pos:15949816 size: 785 +ret: 0 st: 0 flags:0 dts: 153.533333 pts: 153.633333 pos:15950601 size: 3135 +ret: 0 st: 0 flags:0 dts: 153.566667 pts: 153.566667 pos:15953736 size: 859 +ret: 0 st: 0 flags:0 ts: 76.365000 +ret: 0 st: 0 flags:1 dts: 77.833333 pts: 77.866667 pos:8653728 size: 41146 +ret: 0 st: 0 flags:0 dts: 77.866667 pts: 77.966667 pos:8694874 size: 4197 +ret: 0 st: 0 flags:0 dts: 77.900000 pts: 77.900000 pos:8699071 size: 653 +ret: 0 st: 0 flags:0 dts: 77.933333 pts: 77.933333 pos:8699724 size: 751 +ret: 0 st: 0 flags:1 ts:-0.740833 +ret: 0 st: 0 flags:1 dts:-0.033333 pts: 0.000000 pos: 4174 size: 147 +ret: 0 st: 0 flags:0 dts: 0.000000 pts: 0.033333 pos: 4321 size: 24 +ret: 0 st: 0 flags:0 dts: 0.033333 pts: 0.066667 pos: 4345 size: 6779 +ret: 0 st: 0 flags:0 dts: 0.066667 pts: 0.100000 pos: 11124 size: 11041 +ret: 0 st:-1 flags:0 ts: 102.153336 +ret: 0 st: 0 flags:0 dts: 83.833333 pts: 83.900000 pos:9584397 size: 8129 +ret: 0 st: 0 flags:0 dts: 83.866667 pts: 83.866667 pos:9592526 size: 2247 +ret: 0 st: 0 flags:0 dts: 83.900000 pts: 83.966667 pos:9594773 size: 8990 +ret: 0 st: 0 flags:0 dts: 83.933333 pts: 83.933333 pos:9603763 size: 2386 +ret: 0 st:-1 flags:1 ts: 25.047503 +ret: 0 st: 0 flags:1 dts: 20.233333 pts: 20.266667 pos:2224826 size: 51787 +ret: 0 st: 0 flags:0 dts: 20.266667 pts: 20.300000 pos:2276613 size: 488 +ret: 0 st: 0 flags:0 dts: 20.300000 pts: 20.400000 pos:2277101 size: 670 +ret: 0 st: 0 flags:0 dts: 20.333333 pts: 20.333333 pos:2277771 size: 84 +ret: 0 st: 0 flags:0 ts: 127.941667 +ret: 0 st: 0 flags:1 dts: 95.766667 pts: 95.800000 pos:10533174 size: 54642 +ret: 0 st: 0 flags:0 dts: 95.800000 pts: 95.833333 pos:10587816 size: 278 +ret: 0 st: 0 flags:0 dts: 95.833333 pts: 95.866667 pos:10588094 size: 101 +ret: 0 st: 0 flags:0 dts: 95.866667 pts: 95.900000 pos:10588195 size: 87 +ret: 0 st: 0 flags:1 ts: 50.835833 +ret: 0 st: 0 flags:1 dts: 50.633333 pts: 50.666667 pos:5856029 size: 67867 +ret: 0 st: 0 flags:0 dts: 50.666667 pts: 50.766667 pos:5923896 size: 1307 +ret: 0 st: 0 flags:0 dts: 50.700000 pts: 50.700000 pos:5925203 size: 150 +ret: 0 st: 0 flags:0 dts: 50.733333 pts: 50.733333 pos:5925353 size: 176 +ret: 0 st:-1 flags:0 ts: 153.730004 +ret: 0 st: 0 flags:1 dts: 157.033333 pts: 157.066667 pos:16211536 size: 82702 +ret: 0 st: 0 flags:0 dts: 157.066667 pts: 157.166667 pos:16294238 size: 2273 +ret: 0 st: 0 flags:0 dts: 157.100000 pts: 157.100000 pos:16296511 size: 350 +ret: 0 st: 0 flags:0 dts: 157.133333 pts: 157.133333 pos:16296861 size: 337 +ret: 0 st:-1 flags:1 ts: 76.624171 +ret: 0 st: 0 flags:1 dts: 75.966667 pts: 76.000000 pos:8514981 size: 94359 +ret: 0 st: 0 flags:0 dts: 76.000000 pts: 76.100000 pos:8609340 size: 483 +ret: 0 st: 0 flags:0 dts: 76.033333 pts: 76.033333 pos:8609823 size: 37 +ret: 0 st: 0 flags:0 dts: 76.066667 pts: 76.066667 pos:8609860 size: 56 +ret: 0 st: 0 flags:0 ts:-0.481667 +ret: 0 st: 0 flags:1 dts:-0.033333 pts: 0.000000 pos: 4174 size: 147 +ret: 0 st: 0 flags:0 dts: 0.000000 pts: 0.033333 pos: 4321 size: 24 +ret: 0 st: 0 flags:0 dts: 0.033333 pts: 0.066667 pos: 4345 size: 6779 +ret: 0 st: 0 flags:0 dts: 0.066667 pts: 0.100000 pos: 11124 size: 11041 +ret: 0 st: 0 flags:1 ts: 102.412500 +ret: 0 st: 0 flags:1 dts: 101.300000 pts: 101.333333 pos:10974394 size: 67201 +ret: 0 st: 0 flags:0 dts: 101.333333 pts: 101.433333 pos:11041595 size: 3524 +ret: 0 st: 0 flags:0 dts: 101.366667 pts: 101.366667 pos:11045119 size: 562 +ret: 0 st: 0 flags:0 dts: 101.400000 pts: 101.400000 pos:11045681 size: 599 +ret: 0 st:-1 flags:0 ts: 25.306672 +ret: 0 st: 0 flags:1 dts: 27.400000 pts: 27.433333 pos:2674080 size:127347 +ret: 0 st: 0 flags:0 dts: 27.433333 pts: 27.466667 pos:2801427 size: 68 +ret: 0 st: 0 flags:0 dts: 27.466667 pts: 27.500000 pos:2801495 size: 1754 +ret: 0 st: 0 flags:0 dts: 27.500000 pts: 27.533333 pos:2803249 size: 4071 +ret: 0 st:-1 flags:1 ts: 128.200839 +ret: 0 st: 0 flags:1 dts: 127.833333 pts: 127.866667 pos:13502895 size: 67346 +ret: 0 st: 0 flags:0 dts: 127.866667 pts: 127.966667 pos:13570241 size: 2936 +ret: 0 st: 0 flags:0 dts: 127.900000 pts: 127.900000 pos:13573177 size: 451 +ret: 0 st: 0 flags:0 dts: 127.933333 pts: 127.933333 pos:13573628 size: 537 +ret: 0 st: 0 flags:0 ts: 51.095011 +ret: 0 st: 0 flags:1 dts: 52.066667 pts: 52.100000 pos:6025093 size:115773 +ret: 0 st: 0 flags:0 dts: 52.100000 pts: 52.200000 pos:6140866 size: 1620 +ret: 0 st: 0 flags:0 dts: 52.133333 pts: 52.133333 pos:6142486 size: 92 +ret: 0 st: 0 flags:0 dts: 52.166667 pts: 52.166667 pos:6142578 size: 533 +ret: 0 st: 0 flags:1 ts: 153.989178 +ret: 0 st: 0 flags:1 dts: 153.466667 pts: 153.500000 pos:15853683 size: 96133 +ret: 0 st: 0 flags:0 dts: 153.500000 pts: 153.533333 pos:15949816 size: 785 +ret: 0 st: 0 flags:0 dts: 153.533333 pts: 153.633333 pos:15950601 size: 3135 +ret: 0 st: 0 flags:0 dts: 153.566667 pts: 153.566667 pos:15953736 size: 859 +ret: 0 st:-1 flags:0 ts: 76.883340 +ret: 0 st: 0 flags:1 dts: 77.833333 pts: 77.866667 pos:8653728 size: 41146 +ret: 0 st: 0 flags:0 dts: 77.866667 pts: 77.966667 pos:8694874 size: 4197 +ret: 0 st: 0 flags:0 dts: 77.900000 pts: 77.900000 pos:8699071 size: 653 +ret: 0 st: 0 flags:0 dts: 77.933333 pts: 77.933333 pos:8699724 size: 751 +ret: 0 st:-1 flags:1 ts:-0.222493 +ret: 0 st: 0 flags:1 dts:-0.033333 pts: 0.000000 pos: 4174 size: 147 +ret: 0 st: 0 flags:0 dts: 0.000000 pts: 0.033333 pos: 4321 size: 24 +ret: 0 st: 0 flags:0 dts: 0.033333 pts: 0.066667 pos: 4345 size: 6779 +ret: 0 st: 0 flags:0 dts: 0.066667 pts: 0.100000 pos: 11124 size: 11041 +ret: 0 st: 0 flags:0 ts: 102.671678 +ret: 0 st: 0 flags:1 dts: 104.100000 pts: 104.133333 pos:11107176 size:112893 +ret: 0 st: 0 flags:0 dts: 104.133333 pts: 104.166667 pos:11220069 size: 585 +ret: 0 st: 0 flags:0 dts: 104.166667 pts: 104.200000 pos:11220654 size: 797 +ret: 0 st: 0 flags:0 dts: 104.200000 pts: 104.233333 pos:11221451 size: 810 +ret: 0 st: 0 flags:1 ts: 25.565844 +ret: 0 st: 0 flags:1 dts: 25.300000 pts: 25.333333 pos:2607665 size: 40237 +ret: 0 st: 0 flags:0 dts: 25.333333 pts: 25.433333 pos:2647902 size: 2959 +ret: 0 st: 0 flags:0 dts: 25.366667 pts: 25.366667 pos:2650861 size: 197 +ret: 0 st: 0 flags:0 dts: 25.400000 pts: 25.400000 pos:2651058 size: 230 +ret: 0 st:-1 flags:0 ts: 128.460008 +ret: 0 st: 0 flags:1 dts: 131.233333 pts: 131.266667 pos:13715044 size: 62193 +ret: 0 st: 0 flags:0 dts: 131.266667 pts: 131.366667 pos:13777237 size: 2349 +ret: 0 st: 0 flags:0 dts: 131.300000 pts: 131.300000 pos:13779586 size: 571 +ret: 0 st: 0 flags:0 dts: 131.333333 pts: 131.333333 pos:13780157 size: 1190 +ret: 0 st:-1 flags:1 ts: 51.354175 +ret: 0 st: 0 flags:1 dts: 50.633333 pts: 50.666667 pos:5856029 size: 67867 +ret: 0 st: 0 flags:0 dts: 50.666667 pts: 50.766667 pos:5923896 size: 1307 +ret: 0 st: 0 flags:0 dts: 50.700000 pts: 50.700000 pos:5925203 size: 150 +ret: 0 st: 0 flags:0 dts: 50.733333 pts: 50.733333 pos:5925353 size: 176 -- 2.14.0.rc0.400.g1c36432dff-goog