From patchwork Thu Apr 6 22:12:35 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aman Karmani X-Patchwork-Id: 3324 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.44.195 with SMTP id s186csp23599vss; Thu, 6 Apr 2017 15:19:04 -0700 (PDT) X-Received: by 10.28.113.73 with SMTP id m70mr26778672wmc.12.1491517144220; Thu, 06 Apr 2017 15:19:04 -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 v8si30983588wmb.31.2017.04.06.15.19.02; Thu, 06 Apr 2017 15:19:04 -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=@tmm1-net.20150623.gappssmtp.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 BC4C3688292; Fri, 7 Apr 2017 01:18:55 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pg0-f65.google.com (mail-pg0-f65.google.com [74.125.83.65]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1FB6A680C77 for ; Fri, 7 Apr 2017 01:18:49 +0300 (EEST) Received: by mail-pg0-f65.google.com with SMTP id g2so10851573pge.2 for ; Thu, 06 Apr 2017 15:18:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tmm1-net.20150623.gappssmtp.com; s=20150623; h=sender:from:to:cc:subject:date:message-id; bh=GzOLyjziATdNAUnN4ZXMdq9iL2uuJ2D4yBRJkRThoy4=; b=BGEwyr2dk2S7ZwNHu4Eg0yDv3+t3Uu4Dk+vsumUfL7LoWBu5an7F0bdnWA4yNgk9rD 8uibICDROUEhAYlVwdQs5bJsDyyXDQfP9pUB/Ta1kxvUHGKb16ms4MZwNAqIEAVNR8vp 9kmpPo59M95vgItKRBt+FTLGfFxQD/nidhZRBOY0Zg2V4/hwqof3eXxBwGE04k3dk3T7 EW4hF0ToLmaBqfUr/fE8CGinyKaefLk0MeKkwVBmKQj0tIrW97xvYgKdBnjL1HU1aHZ+ 6lddgmE5fTkaEas4Tc5RphfKa1g0YWT8RSAoR8OqGv4SCSGW3sN7M6yuZKVvF6Yp3NBH CMEQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id; bh=GzOLyjziATdNAUnN4ZXMdq9iL2uuJ2D4yBRJkRThoy4=; b=C9rRXyON3CyYZDbLmh77CeWYazDM84MSVgo9eDq6TCWVJCCPQPoCPdYd8gtQ3Dbk/f zmkxckgup1FjuRuL5AAQykzwKBr3tUwHqPfsY2yaQ9G6k6qBlW1DEdzhgv1YUrSKfZFp 7UfFTvCquKztB8fxSQQNODOimR+9V2jJ8pII3840T/BKkYzuBTOaPBsEBcxERra2EfWr REOR6k36ZoK7ezArWLbc0r+HCc7WaqESv/WGz4HkRuF+PTc3e6w2f8ydA1q665O1+WZh MEWkComm+Bkfo+sFv6pY224ZZ1lTHsTPBKwfXL/aYhBqycJbd9XfsECq/73JLBtBY6F9 uTvA== X-Gm-Message-State: AFeK/H31vxH71vZ+7P6ViEPbr41FeAPxNqgfB2uRVGEFhAvdwl+5x0L3Y7N7LJxaFc7ACg== X-Received: by 10.84.199.170 with SMTP id r39mr45432060pld.144.1491516767450; Thu, 06 Apr 2017 15:12:47 -0700 (PDT) Received: from tmm1-macbook.local.net (c-73-252-174-83.hsd1.ca.comcast.net. [73.252.174.83]) by smtp.gmail.com with ESMTPSA id 22sm5484941pfv.42.2017.04.06.15.12.45 (version=TLS1 cipher=AES128-SHA bits=128/128); Thu, 06 Apr 2017 15:12:46 -0700 (PDT) From: Aman Gupta To: ffmpeg-devel@ffmpeg.org Date: Thu, 6 Apr 2017 15:12:35 -0700 Message-Id: <20170406221235.93361-1-ffmpeg@tmm1.net> X-Mailer: git-send-email 2.11.0 (Apple Git-81) Subject: [FFmpeg-devel] [PATCH] avformat/utils: fix estimate_timings_from_pts duration calculation for mpegts files which contain a PMT update 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: Aman Gupta MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" From: Aman Gupta For example: https://s3.amazonaws.com/tmm1/pmt-version-change.ts Before: Duration: 00:00:10.01, start: 1236.288878, bitrate: 16752 kb/s After: Duration: 00:00:19.59, start: 1236.288878, bitrate: 8563 kb/s --- libavformat/utils.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/libavformat/utils.c b/libavformat/utils.c index a059046a2c..3028d110aa 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -2720,7 +2720,8 @@ static void estimate_timings_from_bit_rate(AVFormatContext *ic) static void estimate_timings_from_pts(AVFormatContext *ic, int64_t old_offset) { AVPacket pkt1, *pkt = &pkt1; - AVStream *st; + AVStream *st, *st2; + AVProgram *prg; int num, den, read_size, i, ret; int found_duration = 0; int is_end; @@ -2768,6 +2769,24 @@ static void estimate_timings_from_pts(AVFormatContext *ic, int64_t old_offset) read_size += pkt->size; st = ic->streams[pkt->stream_index]; if (pkt->pts != AV_NOPTS_VALUE && + (st->start_time == AV_NOPTS_VALUE && + st->first_dts == AV_NOPTS_VALUE)) { + // try copying start time from another track of the same type + // in the same program. + prg = av_find_program_from_stream(ic, NULL, pkt->stream_index); + for (i = 0; prg && i < prg->nb_stream_indexes; i++) { + st2 = ic->streams[prg->stream_index[i]]; + if (st2 != st && + st2->codecpar->codec_type == st->codecpar->codec_type && + (st2->start_time != AV_NOPTS_VALUE || + st2->first_dts != AV_NOPTS_VALUE)) { + st->start_time = st2->start_time; + st->first_dts = st2->first_dts; + break; + } + } + } + if (pkt->pts != AV_NOPTS_VALUE && (st->start_time != AV_NOPTS_VALUE || st->first_dts != AV_NOPTS_VALUE)) { if (pkt->duration == 0) {