From patchwork Sun Oct 28 16:00:05 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Leo Izen X-Patchwork-Id: 10818 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 3381744E1AB for ; Sun, 28 Oct 2018 18:00:26 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 7ECBB68A258; Sun, 28 Oct 2018 17:59:57 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-yb1-f181.google.com (mail-yb1-f181.google.com [209.85.219.181]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C36D368A12C for ; Sun, 28 Oct 2018 17:59:50 +0200 (EET) Received: by mail-yb1-f181.google.com with SMTP id k132-v6so2454926ybc.2 for ; Sun, 28 Oct 2018 09:00:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=mAwP/6IKfddQP0YR5C8lW6eozPASegFh+6s6C3JLmUg=; b=q9cuY4zbK04l3pSiAzX+TclBNFdEEcTO34q/uqLJeP/gkc9shQ+oggrxrlteZkHjQ3 ZxevjQ1ejbp5ffK1p0rP6UXmZYJMFxAooKI/Hs3dG6EbjK0K9L7IR0odYBjCKdK5vIw7 hPnWP+BzVAC9B1GLWXb6dhG+WzIs6ojfcapX/QPTbJDmKD8jQ1F7rqd8rBWrmBNLCe3O txwRzoGjC5Vlb/LMw1N/qwuIeCxW8uJE14B8m3wyK451a+39OiwNia8eRPXQP9E6bqMW /lRjCPfVeCyn750WkZvkeW3Rxdn/LuUhaDhzi5CJJunfLBdKzTliMdUikxCKKEE2cmC1 cDOw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=mAwP/6IKfddQP0YR5C8lW6eozPASegFh+6s6C3JLmUg=; b=HK362JUTIwCbNSM/6YYBPUJ71OMEbazOI9W8qSaD5YWskLCwi7XMjE2dGURfb5DTMJ XvBI41A1a29A2eJYXWA3F5BXEcPMUtwP7zZUMuDoS0MKyZfWRMzjiQSAHIjKD1JFfjQ0 xxjXfjftmZTywJPwdCVykY9V0rWEG3QMNpaC60gfVZPTtfM385B8not1UQmdsF/vWid9 dWRVB5fd57Ir6e4T0dKEiZm+lCxTK8UstdPeA1rt3LZ7hN6UAKRz5t/QwcRHh5o7q5k4 rdn/6Gs+bb/6VcixD1pwnCfS+tDbToUq7fLL0IBVwj6wnteOsHKhucYrG9EKAAAIVeLh Op0g== X-Gm-Message-State: AGRZ1gLzQ67nOV+3AGwmTtisdvW3WJ9TONVP/n+12fYggUgzrkIJrOZa dIH0R2NqhLnVDRbsT4PQ3v6UNcPu X-Google-Smtp-Source: AJdET5f7gqvUb2GHmFfmh8vq3pmPfBD6+XF8y5JplOPstUWQoRNSRDgcEsHCZoCEG1b6dia/Hp7/kQ== X-Received: by 2002:a25:4214:: with SMTP id p20-v6mr11297610yba.46.1540742419137; Sun, 28 Oct 2018 09:00:19 -0700 (PDT) Received: from gauss.localdomain (64-233-244-163.static.clv.wideopenwest.com. [64.233.244.163]) by smtp.gmail.com with ESMTPSA id m65-v6sm3170128ywm.42.2018.10.28.09.00.18 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 28 Oct 2018 09:00:18 -0700 (PDT) From: Leo Izen To: ffmpeg-devel@ffmpeg.org Date: Sun, 28 Oct 2018 12:00:05 -0400 Message-Id: <20181028160004.23933-1-leo.izen@gmail.com> X-Mailer: git-send-email 2.19.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2] fftools/ffmpeg.c: allow forcing input framerate on streamcopy 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: Leo Izen Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" This is v2 of a patch I sent earlier, revised after testing on various streams. --- fftools/ffmpeg.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c index da4259a9a8..6e81716795 100644 --- a/fftools/ffmpeg.c +++ b/fftools/ffmpeg.c @@ -2045,12 +2045,14 @@ static void do_streamcopy(InputStream *ist, OutputStream *ost, const AVPacket *p if (ost->enc_ctx->codec_type == AVMEDIA_TYPE_VIDEO) ost->sync_opts++; - if (pkt->pts != AV_NOPTS_VALUE) + if (ist->framerate.num) + opkt.pts = av_rescale_q(ist->pts, AV_TIME_BASE_Q, ost->mux_timebase) - ost_tb_start_time; + else if (pkt->pts != AV_NOPTS_VALUE) opkt.pts = av_rescale_q(pkt->pts, ist->st->time_base, ost->mux_timebase) - ost_tb_start_time; else opkt.pts = AV_NOPTS_VALUE; - if (pkt->dts == AV_NOPTS_VALUE) + if (pkt->dts == AV_NOPTS_VALUE || ist->framerate.num) opkt.dts = av_rescale_q(ist->dts, AV_TIME_BASE_Q, ost->mux_timebase); else opkt.dts = av_rescale_q(pkt->dts, ist->st->time_base, ost->mux_timebase); @@ -2602,7 +2604,7 @@ static int process_input_packet(InputStream *ist, const AVPacket *pkt, int no_eo avpkt = *pkt; } - if (pkt && pkt->dts != AV_NOPTS_VALUE) { + if (pkt && pkt->dts != AV_NOPTS_VALUE && !ist->framerate.num) { ist->next_dts = ist->dts = av_rescale_q(pkt->dts, ist->st->time_base, AV_TIME_BASE_Q); if (ist->dec_ctx->codec_type != AVMEDIA_TYPE_VIDEO || !ist->decoding_needed) ist->next_pts = ist->pts = ist->dts; @@ -3158,8 +3160,15 @@ static int init_output_stream_streamcopy(OutputStream *ost) else sar = par_src->sample_aspect_ratio; ost->st->sample_aspect_ratio = par_dst->sample_aspect_ratio = sar; - ost->st->avg_frame_rate = ist->st->avg_frame_rate; - ost->st->r_frame_rate = ist->st->r_frame_rate; + + if (ist->framerate.num) { + ost->st->avg_frame_rate = ist->framerate; + ost->st->r_frame_rate = ist->framerate; + } else { + ost->st->avg_frame_rate = ist->st->avg_frame_rate; + ost->st->r_frame_rate = ist->st->r_frame_rate; + } + break; }