From patchwork Thu Nov 3 19:39:56 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sasi Inguva X-Patchwork-Id: 1273 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.90.1 with SMTP id o1csp961960vsb; Thu, 3 Nov 2016 12:40:44 -0700 (PDT) X-Received: by 10.28.47.198 with SMTP id v189mr3547898wmv.75.1478202044196; Thu, 03 Nov 2016 12:40:44 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id ul7si10762668wjc.40.2016.11.03.12.40.43; Thu, 03 Nov 2016 12:40:44 -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; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 113DE689DA3; Thu, 3 Nov 2016 21:40:38 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pf0-f181.google.com (mail-pf0-f181.google.com [209.85.192.181]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1ED43689256 for ; Thu, 3 Nov 2016 21:40:31 +0200 (EET) Received: by mail-pf0-f181.google.com with SMTP id 189so36689518pfz.3 for ; Thu, 03 Nov 2016 12:40:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=from:to:cc:subject:date:message-id; bh=kp09CgfT423SnMOk+zobGVLlFNJEElYiTxSSe3RJEt0=; b=DNPxUBSUrQ4oUGZcpgFeqc1EpkXUF3+zibdXmUT3C+qTBcUhHHU7LgyVWwmA62Kc2g l7fFZkqj2OMdwPzLu/qvfvFdGtdxyI0QjTO1bxn+hPkBYMVxuiWb/V7V+BMNHQnHQ0C+ IeTJMhorpT7H2XVwY3h5seSgLuXJq+/jwv7KNOoSFt/fuOJpw2EZ++WLtDfeM01O0s0L ANpl3DoXNaZwvKfukHphxyAbEZeoFbvgyQzGv1GWyO3ImmlFM/p8nsghsH3VISh4taKj uyiXGZMLMBDOX0EAWMMZA7LkPqhwWAB05iH0PBd7AycrIpl1OSjoqbGNAzlXcYoZBgky WqwQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=kp09CgfT423SnMOk+zobGVLlFNJEElYiTxSSe3RJEt0=; b=hsYmMsYybMrqhfawYCXQ3HXveofiZYJJjeQ1doU/oHKbv32EnkelpKjtPpaIhmH95w eXYWeQJMcvzbccoQivQr1Hjz55570hs1xpkOxpPBQPDGnWV69Q3j4xbOH2qYNIL52Ynx ImU5jWrBWEIHDPv8WCGTQhzr7D/7eZOogFMqt+Qn/tiVKhXuKd8bKxT94+ZJK1iO62Bk IiH5jibWnYtDR/lKrBjQ6NuBQOqF80B84scClGSQIqNEb94GqFGpuvwMG7hEq2bmKyiM wPDA+24IOBr0OtyttgL3Wcvl6+DeOAUlSwA+mnV//hp/gAGkqBWKtS62ZTTN0y7VLk9K o2og== X-Gm-Message-State: ABUngvfzc5NikZEySBKUkCvUBRLtjrtq1LnXkl5eNQuCS5xQulfAIlhUX7Da77PG2O4MbdRk X-Received: by 10.99.112.12 with SMTP id l12mr2022729pgc.14.1478202032490; Thu, 03 Nov 2016 12:40:32 -0700 (PDT) Received: from isasi.mtv.corp.google.com ([172.27.82.89]) by smtp.gmail.com with ESMTPSA id u127sm14604118pfu.21.2016.11.03.12.40.31 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 03 Nov 2016 12:40:31 -0700 (PDT) From: Sasi Inguva To: ffmpeg-devel@ffmpeg.org Date: Thu, 3 Nov 2016 12:39:56 -0700 Message-Id: <1478201996-18962-1-git-send-email-isasi@google.com> X-Mailer: git-send-email 2.8.0.rc3.226.g39d4020 Subject: [FFmpeg-devel] [PATCH] lavf/mov.c: Fallback to finding non-keyframe in fix_index, if keyframe search fails. 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 Cc: Sasi Inguva MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Signed-off-by: Sasi Inguva --- libavformat/mov.c | 30 ++++++++++++++++++++---------- tests/fate/mov.mak | 6 +++++- 2 files changed, 25 insertions(+), 11 deletions(-) diff --git a/libavformat/mov.c b/libavformat/mov.c index 4222088..f5b2035 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -2805,16 +2805,17 @@ static int get_edit_list_entry(MOVContext *mov, } /** - * Find the closest previous keyframe to the timestamp, in e_old index - * entries. + * Find the closest previous frame to the timestamp, in e_old index + * entries. Searching for just any frame / just key frames can be controlled by + * last argument 'flag'. * Returns the index of the entry in st->index_entries if successful, * else returns -1. */ -static int64_t find_prev_closest_keyframe_index(AVStream *st, - AVIndexEntry *e_old, - int nb_old, - int64_t timestamp, - int flag) +static int64_t find_prev_closest_index(AVStream *st, + AVIndexEntry *e_old, + int nb_old, + int64_t timestamp, + int flag) { AVIndexEntry *e_keep = st->index_entries; int nb_keep = st->nb_index_entries; @@ -3031,10 +3032,19 @@ static void mov_fix_index(MOVContext *mov, AVStream *st) search_timestamp = FFMAX(search_timestamp - msc->time_scale, e_old[0].timestamp); } - index = find_prev_closest_keyframe_index(st, e_old, nb_old, search_timestamp, 0); + index = find_prev_closest_index(st, e_old, nb_old, search_timestamp, 0); if (index == -1) { - av_log(mov->fc, AV_LOG_ERROR, "Missing key frame while reordering index according to edit list\n"); - continue; + av_log(mov->fc, AV_LOG_WARNING, + "st: %d edit list: %"PRId64" Missing key frame while searching for timestamp: %"PRId64"\n", + st->index, edit_list_index, search_timestamp); + index = find_prev_closest_index(st, e_old, nb_old, search_timestamp, AVSEEK_FLAG_ANY); + + if (index == -1) { + av_log(mov->fc, AV_LOG_ERROR, + "st: %d edit list %"PRId64" Cannot find an index entry before timestamp: %"PRId64"\n", + st->index, edit_list_index, search_timestamp); + continue; + } } current = e_old + index; diff --git a/tests/fate/mov.mak b/tests/fate/mov.mak index 6b79832..b6ecbfc 100644 --- a/tests/fate/mov.mak +++ b/tests/fate/mov.mak @@ -5,7 +5,8 @@ FATE_MOV = fate-mov-3elist \ fate-mov-elist-starts-ctts-2ndsample \ fate-mov-1elist-ends-last-bframe \ fate-mov-2elist-elist1-ends-bframe \ - fate-mov-aac-2048-priming + fate-mov-aac-2048-priming \ + fate-mp4-init-nonkeyframe FATE_SAMPLES_AVCONV += $(FATE_MOV) @@ -30,3 +31,6 @@ fate-mov-2elist-elist1-ends-bframe: CMD = framemd5 -i $(TARGET_SAMPLES)/mov/mov- fate-mov-aac-2048-priming: ffprobe$(PROGSSUF)$(EXESUF) fate-mov-aac-2048-priming: CMD = run ffprobe$(PROGSSUF)$(EXESUF) -show_packets -print_format compact $(TARGET_SAMPLES)/mov/aac-2048-priming.mov + +fate-mp4-init-nonkeyframe: ffprobe$(PROGSSUF)$(EXESUF) +fate-mp4-init-nonkeyframe: CMD = run ffprobe$(PROGSSUF)$(EXESUF) -show_packets -print_format compact -select_streams v $(TARGET_SAMPLES)/mov/mp4-init-nonkeyframe.mp4