From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 9BB0B45D41 for ; Thu, 1 Feb 2024 21:41:50 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 9387C68D0EF; Thu, 1 Feb 2024 23:41:47 +0200 (EET) Received: from iq.passwd.hu (iq.passwd.hu [217.27.212.140]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B9E7668CA4C for ; Thu, 1 Feb 2024 23:41:40 +0200 (EET) Received: from localhost (localhost [127.0.0.1]) by iq.passwd.hu (Postfix) with ESMTP id DDB1BE9DD8 for ; Thu, 1 Feb 2024 22:41:39 +0100 (CET) X-Virus-Scanned: amavisd-new at passwd.hu Received: from iq.passwd.hu ([127.0.0.1]) by localhost (iq.passwd.hu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id AqqbCMehBmUa for ; Thu, 1 Feb 2024 22:41:36 +0100 (CET) Received: from iq (iq [217.27.212.140]) by iq.passwd.hu (Postfix) with ESMTPS id 8D5ADE9617 for ; Thu, 1 Feb 2024 22:41:36 +0100 (CET) Date: Thu, 1 Feb 2024 22:41:36 +0100 (CET) From: Marton Balint To: FFmpeg development discussions and patches In-Reply-To: <20240201001028.GB6420@pb2> Message-ID: References: <20240128030136.5585-1-cus@passwd.hu> <20240128030136.5585-3-cus@passwd.hu> <20240131000541.GP6420@pb2> <32ff862c-93f6-7c61-7168-801868f2f41d@passwd.hu> <20240201001028.GB6420@pb2> MIME-Version: 1.0 Subject: Re: [FFmpeg-devel] [PATCH 3/3] avfilter/yadif_common: fix timestamps with very small timebases X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="us-ascii"; Format="flowed" Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: On Thu, 1 Feb 2024, Michael Niedermayer wrote: > On Wed, Jan 31, 2024 at 03:42:46AM +0100, Marton Balint wrote: >> >> >> On Wed, 31 Jan 2024, Michael Niedermayer wrote: >> >>> On Sun, Jan 28, 2024 at 04:01:36AM +0100, Marton Balint wrote: >>>> Yadif filter assumed that the output timebase is always half of the input >>>> timebase. This is not true if halving the input time base is not representable >>>> as an AVRational causing the output timestamps to be invalidly scaled in such a >>>> case. >>>> >>>> So let's use av_reduce instead of av_mul_q when calculating the output time >>>> base and if the conversion is inexact then let's fall back to the original >>>> timebase which probably makes more parctical sense than using x/INT_MAX. >>>> >>>> Fixes invalidly scaled pts_time values in this command line: >>>> ffmpeg -f lavfi -i testsrc -vf settb=tb=1/2000000000,yadif,showinfo -f null none >>>> >>>> Signed-off-by: Marton Balint >>>> --- >>>> libavfilter/yadif.h | 2 ++ >>>> libavfilter/yadif_common.c | 20 ++++++++++++++------ >>>> 2 files changed, 16 insertions(+), 6 deletions(-) >>>> >>>> diff --git a/libavfilter/yadif.h b/libavfilter/yadif.h >>>> index 2c4fed62d2..c144568242 100644 >>>> --- a/libavfilter/yadif.h >>>> +++ b/libavfilter/yadif.h >>>> @@ -86,6 +86,8 @@ typedef struct YADIFContext { >>>> * the first field. >>>> */ >>>> int current_field; ///< YADIFCurrentField >>>> + >>>> + int pts_divisor; >>>> } YADIFContext; >>>> >>>> void ff_yadif_init_x86(YADIFContext *yadif); >>>> diff --git a/libavfilter/yadif_common.c b/libavfilter/yadif_common.c >>>> index 933372529e..90a5cffc2d 100644 >>>> --- a/libavfilter/yadif_common.c >>>> +++ b/libavfilter/yadif_common.c >>>> @@ -61,7 +61,7 @@ FF_ENABLE_DEPRECATION_WARNINGS >>>> int64_t next_pts = yadif->next->pts; >>>> >>>> if (next_pts != AV_NOPTS_VALUE && cur_pts != AV_NOPTS_VALUE) { >>>> - yadif->out->pts = cur_pts + next_pts; >>>> + yadif->out->pts = (cur_pts + next_pts) / yadif->pts_divisor; >>>> } else { >>>> yadif->out->pts = AV_NOPTS_VALUE; >>>> } >>>> @@ -150,8 +150,8 @@ int ff_yadif_filter_frame(AVFilterLink *link, AVFrame *frame) >>>> ff_ccfifo_inject(&yadif->cc_fifo, yadif->out); >>>> av_frame_free(&yadif->prev); >>>> if (yadif->out->pts != AV_NOPTS_VALUE) >>>> - yadif->out->pts *= 2; >>>> - yadif->out->duration *= 2; >>>> + yadif->out->pts *= 2 / yadif->pts_divisor; >>>> + yadif->out->duration *= 2 / yadif->pts_divisor; >>>> return ff_filter_frame(ctx->outputs[0], yadif->out); >>>> } >>>> >>>> @@ -168,9 +168,9 @@ FF_ENABLE_DEPRECATION_WARNINGS >>>> yadif->out->flags &= ~AV_FRAME_FLAG_INTERLACED; >>>> >>>> if (yadif->out->pts != AV_NOPTS_VALUE) >>>> - yadif->out->pts *= 2; >>>> + yadif->out->pts *= 2 / yadif->pts_divisor; >>>> if (!(yadif->mode & 1)) >>>> - yadif->out->duration *= 2; >>>> + yadif->out->duration *= 2 / yadif->pts_divisor; >>> >>> you can use >> instead of division for all above >> >> Even for the first case? Because the right shift would be implementation >> defined for negative timestamps. > > we are only supporting twos-complement systems > i thought that was somewhete in teh docs Ok, I will change the /= 2 divisions to >>= 1 shifts in v2 patch then. Thanks, Marton _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".