From patchwork Fri Aug 11 09:42:07 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rodger Combs X-Patchwork-Id: 4691 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.46.211 with SMTP id u202csp609559vsu; Fri, 11 Aug 2017 02:49:39 -0700 (PDT) X-Received: by 10.223.139.89 with SMTP id v25mr10348458wra.248.1502444979904; Fri, 11 Aug 2017 02:49:39 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1502444979; cv=none; d=google.com; s=arc-20160816; b=x8GTJNB7rWHx4Q2NXWgVBn/9BvTz+48ARF2jkPpxh/Vtf5EdjfIPlBkoQWNrEtN9Iu 3lu2eqA9JrS2ARdMGre53EwEEouGoytx5RcJi5TkEUhOt6dxtmoOw2EntwATFL+DpLwa IxiaU3kGPb8ijbABrPC5jdhFDBmcmYbW0udtKZ1HpmUBp0zxszxIklriSimyitF30vIv Eql9Tbs6YrlDgxf4rCY6eYoPXYxxrdkEUuP2SjWhb2YfnJugoRFZEsf2Jvoz+QuRYEJ3 M4ZZwHNPUi5TRQh2BMWH1+PMr2ilyXUOlUchc9xqEsXRXRzZRBNoQn7af5jMOlhhcf8I mkoA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:message-id:date:to:from:dkim-signature :delivered-to:arc-authentication-results; bh=MM8ke011Uxd33k5agsXUC8SGTS4/wNHjyA8Dvpye+Ww=; b=cR+qscOmjZbZpQTq4mr/WBdg7t6oP8l7BNXKBiUJGBnqN1eU6YEm+dTeE7McGqSW62 VXX6FOGh3gbyp+NS9xuNUq8+kMl3wj/wImoA75pxsAU5alp1F4mq2rSHGm+KTQnCOBHu zgh0wXEMclYnu5X2W2UyEB4U6ag4N5Sm5xf051qQKwOy9JU7GcSXOJbpAMxUe0MooeO1 NOEOs+PWo/pwsMsUqpYwrel3EzM2xGvP3LkO1Cj+5xUiqLU/66Yrc9hjXvrv5O8AFhee Nx9VU7ZoKq1Q9BHx8novj0qmPGuLoK87dLpnwVr6XEwIlM+qybAn7jgmX0bb21iZ3dQ7 Tx0w== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=khWZnMLS; 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=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id d19si378515wrb.486.2017.08.11.02.49.39; Fri, 11 Aug 2017 02:49:39 -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=@gmail.com header.s=20161025 header.b=khWZnMLS; 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=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 7AB94689C84; Fri, 11 Aug 2017 12:49:34 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-it0-f66.google.com (mail-it0-f66.google.com [209.85.214.66]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E636F6808CC for ; Fri, 11 Aug 2017 12:49:27 +0300 (EEST) Received: by mail-it0-f66.google.com with SMTP id r9so3350255ita.3 for ; Fri, 11 Aug 2017 02:49:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id; bh=V5EkUicrsXsUL0kGBaCTRtvhYq/eLjAu3Wv+6MzSGWY=; b=khWZnMLSj+gWoUxSzPHMBob+TglbHDlHj5/mq81u1Y4PcQWWnCA0j9MPQDXbgZvbeF fE7WalHcA8317RRroj1KrCh3c5KoFyXLq9pecedw6T+Kg5uvxw6lUERIMWPBB8aLi/kf GE9Xnqw0ien+Nmp+VIpgeQVO6k6AvQXoawySJEP6WxhygbqDPXILNzASNRo4OXDf2iRf K2vSi61w/2bxO8HMqIEQuRL2VtQAJd1zTgK9qJq2kYAHRXq6SzA5S/TWaiX+MS3rYp4M b43aU3ReY7gDGMP3Ie+D13MhGWlcQshZRo3MJKwgD8ldWoZxqsdSfRLCOnG9PTVN33/U +3zQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id; bh=V5EkUicrsXsUL0kGBaCTRtvhYq/eLjAu3Wv+6MzSGWY=; b=GH8hBddoGtXd0iW/sFEceGXGoi/bG7i2MLJb4wbA+aAvFgbZtOeydz8xcoB+EhV1PM RHXFv81AqHFfcdRgAFjqNsgFdEMQwazgBmbXpFuRqiy1jff/8feebvmsu4T0KnyQ1XfI Ud6nXq9VR879h77dKtrBAaStl84+IPn0mIsVoXR0SwrMQWv2HfqFncEi6HE9H+yxhHAm q7HKTAQ5nptRZS15Lj5jhCFFJswwRdi2ikjEH0R20VRrOuX6HG6k55ndYBnjNy6STSnL alPsDnR7TI2bGiwtMXlyG8s74Nznt3x3ScE0776PTfGHrtjwRMT5A86GN+8MlN4vHbq/ CaWw== X-Gm-Message-State: AIVw110Kfc8tHJ9+mIeyNAR4Unx981Frc/6Sds74pd6jUlWuGv0vPW7y +UjX7CpZz2wz1fBv1Nk= X-Received: by 10.36.13.10 with SMTP id 10mr3831611itx.51.1502444537290; Fri, 11 Aug 2017 02:42:17 -0700 (PDT) Received: from Rodgers-MacBook-Pro.local.net (c-73-110-121-59.hsd1.il.comcast.net. [73.110.121.59]) by smtp.gmail.com with ESMTPSA id f70sm240932ita.1.2017.08.11.02.42.16 for (version=TLS1 cipher=AES128-SHA bits=128/128); Fri, 11 Aug 2017 02:42:16 -0700 (PDT) From: Rodger Combs To: ffmpeg-devel@ffmpeg.org Date: Fri, 11 Aug 2017 04:42:07 -0500 Message-Id: <20170811094207.8080-1-rodger.combs@gmail.com> X-Mailer: git-send-email 2.14.0 Subject: [FFmpeg-devel] [PATCH] lavf/movdec: flag chapter streams as such, even when not reading them 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 MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" This allows the use of the `ignore_chapters` option to avoid performing extra seeks at startup without producing "subtitle" chapter streams. --- libavformat/mov.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/libavformat/mov.c b/libavformat/mov.c index 63f84be782..5f83c695e6 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -5762,6 +5762,7 @@ static void mov_read_chapters(AVFormatContext *s) int64_t cur_pos; int i, j; int chapter_track; + int read_contents = (s->pb->seekable & AVIO_SEEKABLE_NORMAL) && !mov->ignore_chapters; for (j = 0; j < mov->nb_chapter_tracks; j++) { chapter_track = mov->chapter_tracks[j]; @@ -5781,7 +5782,7 @@ static void mov_read_chapters(AVFormatContext *s) if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) { st->disposition |= AV_DISPOSITION_ATTACHED_PIC | AV_DISPOSITION_TIMED_THUMBNAILS; - if (st->nb_index_entries) { + if (st->nb_index_entries && read_contents) { // Retrieve the first frame, if possible AVPacket pkt; AVIndexEntry *sample = &st->index_entries[0]; @@ -5801,6 +5802,10 @@ static void mov_read_chapters(AVFormatContext *s) st->codecpar->codec_type = AVMEDIA_TYPE_DATA; st->codecpar->codec_id = AV_CODEC_ID_BIN_DATA; st->discard = AVDISCARD_ALL; + + if (!read_contents) + continue; + for (i = 0; i < st->nb_index_entries; i++) { AVIndexEntry *sample = &st->index_entries[i]; int64_t end = i+1 < st->nb_index_entries ? st->index_entries[i+1].timestamp : st->duration; @@ -5851,7 +5856,8 @@ static void mov_read_chapters(AVFormatContext *s) } } finish: - avio_seek(sc->pb, cur_pos, SEEK_SET); + if (read_contents) + avio_seek(sc->pb, cur_pos, SEEK_SET); } } @@ -6181,9 +6187,11 @@ static int mov_read_header(AVFormatContext *s) } av_log(mov->fc, AV_LOG_TRACE, "on_parse_exit_offset=%"PRId64"\n", avio_tell(pb)); + + if (mov->nb_chapter_tracks > 0) + mov_read_chapters(s); + if (pb->seekable & AVIO_SEEKABLE_NORMAL) { - if (mov->nb_chapter_tracks > 0 && !mov->ignore_chapters) - mov_read_chapters(s); for (i = 0; i < s->nb_streams; i++) if (s->streams[i]->codecpar->codec_tag == AV_RL32("tmcd")) { mov_read_timecode_track(s, s->streams[i]);