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 D4520490FA for ; Sat, 3 Feb 2024 19:23:55 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 5FF4468D128; Sat, 3 Feb 2024 21:23:53 +0200 (EET) Received: from iq.passwd.hu (iq.passwd.hu [217.27.212.140]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 3E74F68C9AA for ; Sat, 3 Feb 2024 21:23:47 +0200 (EET) Received: from localhost (localhost [127.0.0.1]) by iq.passwd.hu (Postfix) with ESMTP id AF5CCE9E7C for ; Sat, 3 Feb 2024 20:23:46 +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 Oq7lUtqH6kUL for ; Sat, 3 Feb 2024 20:23:43 +0100 (CET) Received: from iq (iq [217.27.212.140]) by iq.passwd.hu (Postfix) with ESMTPS id 69F05E9E08 for ; Sat, 3 Feb 2024 20:23:43 +0100 (CET) Date: Sat, 3 Feb 2024 20:23:43 +0100 (CET) From: Marton Balint To: FFmpeg development discussions and patches In-Reply-To: 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, Marton Balint wrote: > > 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. Will apply the series. Regards, 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".