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 ESMTPS id D13C34B9C9 for ; Sat, 1 Feb 2025 00:18:31 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id E8F8F68C196; Sat, 1 Feb 2025 02:18:27 +0200 (EET) Received: from mail-ed1-f51.google.com (mail-ed1-f51.google.com [209.85.208.51]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C74FE68BFD2 for ; Sat, 1 Feb 2025 02:18:21 +0200 (EET) Received: by mail-ed1-f51.google.com with SMTP id 4fb4d7f45d1cf-5db6890b64eso4711756a12.3 for ; Fri, 31 Jan 2025 16:18:21 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738369100; x=1738973900; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=1vtjxXTLbAwnIq5YGsJmlz5a5kTLpuA44QtyPSnGWzQ=; b=Gc1/LojjASaCxrRnP4Rqrz+IkVP/n/irR7paekAafYgqznmU3s1Z92vU2xyyJ7IJos RlEi2H2JErg54vS9+9EsduiMzAVQPv9cSBf/UlLgkZFr+7h1UwoGKJ29mnMqPrn9XOXr EewhQZ04VQK6UI18tonP9bKhoEEvW3foF6wgTxb9RcWGq+lj2sWPbgzyxQYTo8END4eM NfxS1amq0qzN5K54h58XQ3CUra6V9haRTRAkfbEdpvg0eRsuSKqRuNfCMchaB1rSD7XG ktbnphEysqriUaBhJZkbwFJEWf5eI8FgsrWYfiqIt7ua89V+vDs3M98wh4wsoDXH8USE xwWw== X-Gm-Message-State: AOJu0YwoVG2Jh6krkB88ql7Kcr3uCwONJMIwiHg20yv26lic5a0pLFBg 7eaanFnDac66v4btv865r00mrlTOk47BI1RH1eoZsLrGjGuTg0sHwW68LN0C5eYSv6v9r/wPJT3 Wirj94YmK/zvs0PcXarUiCSN0BJMQGbeRviT6GEiwRj9se2MkFNfEFQ== X-Gm-Gg: ASbGncukOuv0bLYS9ZPc3TtrfhjgomFCeA7M0UFo607BVMxLjRUKCoa60AG1idKOlK6 gIdnn3LMxprwVBSy20VeakZED0KeHv1L02f/mwNA2B3Uqj8d/T93LNzwb7AE08e3+VLz5TcHi X-Google-Smtp-Source: AGHT+IFHLOxotDDwXJXNEAhXwewfdIuJsS5E02j/YzKFamNjFwIFPxKI+bddJxhu8WnpGz86FS7WkTxb6yVc32MaxeQ= X-Received: by 2002:a05:6402:1e93:b0:5db:f5e9:6745 with SMTP id 4fb4d7f45d1cf-5dc5e6ce200mr14905073a12.0.1738369099831; Fri, 31 Jan 2025 16:18:19 -0800 (PST) MIME-Version: 1.0 Date: Sat, 1 Feb 2025 00:18:08 +0000 X-Gm-Features: AWEUYZmyQXEn2weCj7SbICnult_aAstO7b2SNvoH387y7RoUJWjOvrcnCIxjszc Message-ID: To: ffmpeg-devel@ffmpeg.org X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: [FFmpeg-devel] [PATCH] fix pad artifacting 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: , From: Ben Lu via ffmpeg-devel Reply-To: FFmpeg development discussions and patches Cc: Ben Lu Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: When using pad with eval=frame with variable frame sizes, we get significant artifacting. This is due to incorrect frame sizes, resulting in invalid frames. Made changes to use the output width and height for frame sizes when using eval=frame, with if statement guards to make sure the normal usage is unaffected Signed-off-by: Ben Lu --- libavfilter/vf_pad.c | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/libavfilter/vf_pad.c b/libavfilter/vf_pad.c index 49fb272b24..846dd0a9f4 100644 --- a/libavfilter/vf_pad.c +++ b/libavfilter/vf_pad.c @@ -237,15 +237,24 @@ static AVFrame *get_video_buffer(AVFilterLink *inlink, int w, int h) if (s->inlink_w <= 0) return NULL; - frame = ff_get_video_buffer(inlink->dst->outputs[0], - w + (s->w - s->in_w), - h + (s->h - s->in_h) + (s->x > 0)); + if (s->eval_mode == EVAL_MODE_FRAME) { + frame = ff_get_video_buffer(inlink->dst->outputs[0], s->w, s->h); + } else { + frame = ff_get_video_buffer(inlink->dst->outputs[0], + w + (s->w - s->in_w), + h + (s->h - s->in_h) + (s->x > 0)); + } if (!frame) return NULL; - frame->width = w; - frame->height = h; + if (s->eval_mode == EVAL_MODE_FRAME) { + frame->width = s->w; + frame->height = s->h; + } else { + frame->width = w; + frame->height = h; + } for (plane = 0; plane < 4 && frame->data[plane] && frame->linesize[plane]; plane++) { int hsub = s->draw.hsub[plane]; @@ -358,9 +367,13 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in) if (needs_copy) { av_log(inlink->dst, AV_LOG_DEBUG, "Direct padding impossible allocating new frame\n"); - out = ff_get_video_buffer(outlink, - FFMAX(inlink->w, s->w), - FFMAX(inlink->h, s->h)); + if (s->eval_mode == EVAL_MODE_FRAME) { + out = ff_get_video_buffer(outlink, s->w, s->h); + } else { + out = ff_get_video_buffer(outlink, + FFMAX(inlink->w, s->w), + FFMAX(inlink->h, s->h)); + } if (!out) { av_frame_free(&in); return AVERROR(ENOMEM); -- 2.35.1.70.gdb80f58b59-twtrsrc _______________________________________________ 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".