From patchwork Mon Apr 1 15:12:23 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Leo Izen X-Patchwork-Id: 12552 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 C746E4483D2 for ; Mon, 1 Apr 2019 18:12:34 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id AD0D168AAFC; Mon, 1 Apr 2019 18:12:34 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-it1-f196.google.com (mail-it1-f196.google.com [209.85.166.196]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B6F6668A994 for ; Mon, 1 Apr 2019 18:12:27 +0300 (EEST) Received: by mail-it1-f196.google.com with SMTP id s3so7425737itk.1 for ; Mon, 01 Apr 2019 08:12:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:references:from:message-id:date:user-agent:mime-version :in-reply-to:content-language; bh=P1GWK+S9ny45pTitF9NEsw+7xZwvAVbtJW7tQiXUkYk=; b=FSLF/g6ZI4HCt3XCsfPa6lrdTxuVo7zQtVuNwjL5BUy9lINnL3F4YxruR92ijDqkv3 4jJBW3+5lLplMqxbPhSWzyfMr6eOnZ4hOgM9SGpMtkngWbVpkcTSk2AFMYFPGhdOqg5v XQO75dNGEIeWu+75Mutfk9+IIlZxax1PeEwmMzYP/B+/BoqYl6aI8cLVQoyNnwZkV0LF ZLbFLH/nwjOcoIuj4SYhEnpGlxQsPJycyl/p5Akjn1POHijn7gyJLWNQdGqp0IIo3zu/ YPGAbYinRjtuky/g6FIHUL+BXuLntlxSyTj1t/Bnex+6Ts7OnsZGZDqjaiwDUaM1EEt5 9pmw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language; bh=P1GWK+S9ny45pTitF9NEsw+7xZwvAVbtJW7tQiXUkYk=; b=lHxg7WeRHhPBOE1GjxgHJ74HF1lK66YWuPIAUuXtEFbnclfvTgwKRz08ZqVRp8LxuE Y69lWJeEoJkzQBfp9VM2Fptn1euBFzcGRHcR/eULeO2hnWnt5PzFggCoW9HgBqY6VCgL Z9kenk2vT2Ah6cVRJ5goTJKj0yW5Bh+RfJC+GeBETm+NzjXp+YrxxzPBtEtenA9Kt/YM Hdnpp1EYQvEIp9l75GTnGk4acoFiNwcU2PvfJogthjjhCkYj5SDfimva0j2igH85+/gf +hqtDxoSG54ac4w4VcoRmlJZkJjNQjruUPVGiOY7gDxV4zYeESagF+GyvjqoT0sJAQfr NvKw== X-Gm-Message-State: APjAAAUgSHFdWQzHDzd1alMnDG1Dmk6rSp3EoQe6JrFbu1u/WxvHG+hd +VjXw7bcYF/D933o44WWNBiNVT1l X-Google-Smtp-Source: APXvYqw6kYE9UxnDI2p7VmeqjeLBJ21XxEbOHSUR5quc7QhYbhfPq8HqEQWyzSdTge4psAdIPmin8g== X-Received: by 2002:a24:9f45:: with SMTP id c66mr16020993ite.128.1554131545936; Mon, 01 Apr 2019 08:12:25 -0700 (PDT) Received: from [141.213.169.96] (2379589984.vpn.umich.net. [141.213.169.96]) by smtp.gmail.com with ESMTPSA id 25sm4130459iog.83.2019.04.01.08.12.24 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 01 Apr 2019 08:12:24 -0700 (PDT) To: ffmpeg-devel@ffmpeg.org References: <20190109222653.18346-1-leo.izen@gmail.com> From: Leo Izen Message-ID: <44e96185-16ff-d9fc-feb9-15353bb253e8@gmail.com> Date: Mon, 1 Apr 2019 11:12:23 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.5.3 MIME-Version: 1.0 In-Reply-To: <20190109222653.18346-1-leo.izen@gmail.com> Content-Language: en-PH Subject: Re: [FFmpeg-devel] [PATCH] 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Bumping this? I'd like to request a review because I think being able to set the input framerate on streamcopy is worthwhile. In case of formatting issues with the reply email, I've attached the patch file as well. In terms of testing, I've tested this with various input formats (matroska, mp4, avi, nut) and various output formats as well, both shrinking and growing the framerate. On 1/9/19 5:26 PM, Leo Izen wrote: > --- > fftools/ffmpeg.c | 19 ++++++++++++++----- > 1 file changed, 14 insertions(+), 5 deletions(-) > > diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c > index 544f1a1cef..f4bd5d97b7 100644 > --- a/fftools/ffmpeg.c > +++ b/fftools/ffmpeg.c > @@ -2038,12 +2038,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); > @@ -2597,7 +2599,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; > @@ -3153,8 +3155,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; > } > From 8338eb06ceb8e8f954a5e0740751106fb1f9ab44 Mon Sep 17 00:00:00 2001 From: Leo Izen Date: Fri, 19 Oct 2018 19:26:41 -0400 Subject: [PATCH] fftools/ffmpeg.c: allow forcing input framerate on streamcopy --- fftools/ffmpeg.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c index 544f1a1cef..f4bd5d97b7 100644 --- a/fftools/ffmpeg.c +++ b/fftools/ffmpeg.c @@ -2038,12 +2038,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); @@ -2597,7 +2599,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; @@ -3153,8 +3155,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; } -- 2.20.1