From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.ffmpeg.org (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id 8F7474E1F0 for ; Sat, 7 Jun 2025 17:15:22 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id A7CD668BFAC; Sat, 7 Jun 2025 20:15:16 +0300 (EEST) Received: from mail-ot1-f45.google.com (mail-ot1-f45.google.com [209.85.210.45]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTPS id 1080B68BB0D for ; Sat, 7 Jun 2025 20:15:09 +0300 (EEST) Received: by mail-ot1-f45.google.com with SMTP id 46e09a7af769-735b3f15995so739010a34.2 for ; Sat, 07 Jun 2025 10:15:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1749316507; x=1749921307; darn=ffmpeg.org; h=in-reply-to:from:content-language:references:to:subject:user-agent :mime-version:date:message-id:from:to:cc:subject:date:message-id :reply-to; bh=HH7cIaqXjvx0RhXB0jR6JCd9nOfH4v6qxMDvZmvO8jM=; b=CddEfeY/R7MCGKUzyU7aqT8cuPdbKlMsaMDJOt3E/CdTkJrul/gvjuQm1BXfvGQcW0 DQHvmF0TzqXdvv9bdSrplfzmC/ITWafhXVq+M8uLVc4WE82BvBdIGRXVhCVGBlUFvgZr nHqCy0uTogB/g9E1XZmsf6NplMDmLyPpBC6pWl59R42XYL0MoxxwVdqvwMU01lae5qX9 wUZqg9NZZqWtSdPS8WharJVby8F/89hWMyeA/p8aX6KsfJ7lhJp0G5mw4M+iSHtYwBQ6 4kOCbfBGNvPgYZU6HBvrPhPXV5icB8KIdn8n31Ca1PIbJGtvnTU6+tR6ho0bSq6B2obF VXRA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749316507; x=1749921307; h=in-reply-to:from:content-language:references:to:subject:user-agent :mime-version:date:message-id:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to; bh=HH7cIaqXjvx0RhXB0jR6JCd9nOfH4v6qxMDvZmvO8jM=; b=l7fGa6Wpr7rSTbP1yxY83dy62SRKCGp2VKN9wezkEc4UOueAotunoXAUznbayD03sz cryNRzdlZJ9mD4as9+0qvb7aZpR29S8mcqotd2kPiUgmOC25h1Dtj6jg/SPVMQDyHk4v tK4uv8jMq3Q/C+4sSUV7dA8ET9Sdtn4DLh6YsxsLXJn58no+0n/x1aD0GuJPAkEsAv/d Y45rvUqnHabIXnCd7aC6H8tfTpshsScT/5+8roLOHt5J4PMOyJulosetn2P3nKUrolN7 iVoWRl/r+ugCjBoRQWiQP99ZMog9pdyEbJJPgo4akgfN5Y8gFSJVheSaUAY8kchWR2Y3 cf5g== X-Gm-Message-State: AOJu0YzdLUv9a31CqX7Y6Vpi8RhnsqqgHyRFrWfV0j9Kak5MjHweFXZx kGxcEWZGKwimj4eBnBwkdZoHO7t1o7bTxMf1loHzo1HJbtaHFq33vi3/8LZgxg== X-Gm-Gg: ASbGncufC0TLEWbTYiouRc5VW4d82qnwm4M8BBhJ5LX2+IxUPpZawz8dVc4EdjBR/UH 4/3gGnCfuNZnJujse3YBglQDp+wm+N/D0HdsnwPDNVTelmsJRyVSYwnLQjlPTBlk8B6j6yjxvf3 5e+dRrP15Lj2Zp1RBqzK3/c1Rdb4NNvJdYTb/h5cF/L5BSDYNrVtCizJ2Jn322MC7FnkKg0vODF SFEUhXwDJvAvPDAfXnv2GuFgQoOOwxnt2O3KFDYuvEY9N/KQ+z5bQF8stpIC0OrgyBzyRva+aMn nGWp7oOSqGl+sJ+o8DhR++aTc2KzU9wVCZHyF67pSxi2t+qHN0XEi6rIQHQ= X-Google-Smtp-Source: AGHT+IH7wKRg4KRsMvvAXyQ/l8cr3aNhPj5XxpJUUF1Qb0JYI4eGlA99SCR4O/VCh4E9tb3rn/TPKA== X-Received: by 2002:a9d:53c4:0:b0:735:b175:766 with SMTP id 46e09a7af769-73888e09460mr4386452a34.10.1749316506968; Sat, 07 Jun 2025 10:15:06 -0700 (PDT) Received: from [192.168.1.30] ([97.125.21.139]) by smtp.gmail.com with ESMTPSA id 46e09a7af769-73889f5a7c7sm873696a34.28.2025.06.07.10.15.06 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 07 Jun 2025 10:15:06 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------3bkP4YHY6gb2kgsdLW0OYhye" Message-ID: <4faf47d3-54f4-4bfd-9695-0e5a03d8fe2f@gmail.com> Date: Sat, 7 Jun 2025 12:15:06 -0500 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird To: ffmpeg-devel@ffmpeg.org References: <90c31845-ef4f-4aa2-b87d-93800e1a469b@gmail.com> <20250530005839.GG29660@pb2> <20250602183927.GE29660@pb2> Content-Language: en-US From: Ethan Halsall In-Reply-To: <20250602183927.GE29660@pb2> Subject: Re: [FFmpeg-devel] [PATCH] add yuv444p support to mcdeint 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: This is a multi-part message in MIME format. --------------3bkP4YHY6gb2kgsdLW0OYhye Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Hi Michael, Apologies for the late response, I missed this message. On 6/2/25 1:39 PM, Michael Niedermayer wrote: > Hi Ethan > > On Fri, May 30, 2025 at 12:29:19AM -0500, Ethan Halsall wrote: >> On 5/29/25 7:58 PM, Michael Niedermayer wrote: >>> On Tue, May 27, 2025 at 01:24:57PM -0500, Ethan Halsall wrote: >>>> Signed-off-by: Ethan Halsall >>>> --- >>>> libavfilter/vf_mcdeint.c | 32 ++++++++++++++++++++++++++++---- >>>> 1 file changed, 28 insertions(+), 4 deletions(-) >>> >>> Applying: add yuv444p support to mcdeint >>> error: corrupt patch at line 18 >>> >>> this patch is somehow corrupted, that above is not a valid diff >>> make sure the output of git format-patch is not modified >>> >>> thx >>> >>> [...] >> >> I followed the instructions on the "Sending patches from email clients" >> section of https://ffmpeg.org/developer.html#Submitting-patches-1. I think >> Thunderbird removed some line breaks in the patch though when I opened the >> .eml file. >> >> Let's try this one: >> >> >> Signed-off-by: Ethan Halsall >> --- >> libavfilter/vf_mcdeint.c | 32 ++++++++++++++++++++++++++++---- >> 1 file changed, 28 insertions(+), 4 deletions(-) >> >> diff --git a/libavfilter/vf_mcdeint.c b/libavfilter/vf_mcdeint.c >> index 82048b51d0..11ad19f5cd 100644 >> --- a/libavfilter/vf_mcdeint.c >> +++ b/libavfilter/vf_mcdeint.c >> @@ -51,8 +51,10 @@ >> >> #include "libavutil/opt.h" >> #include "libavcodec/avcodec.h" >> +#include "libavutil/pixdesc.h" >> #include "avfilter.h" >> #include "filters.h" >> +#include "formats.h" >> #include "video.h" >> >> enum MCDeintMode { >> @@ -76,6 +78,7 @@ typedef struct MCDeintContext { >> AVPacket *pkt; >> AVFrame *frame_dec; >> AVCodecContext *enc_ctx; >> + const AVPixFmtDescriptor *pix_fmt_desc; >> } MCDeintContext; >> >> #define OFFSET(x) offsetof(MCDeintContext, x) > >> @@ -99,6 +102,17 @@ static const AVOption mcdeint_options[] = { >> >> AVFILTER_DEFINE_CLASS(mcdeint); >> >> +static const enum AVPixelFormat pix_fmts[] = { >> + AV_PIX_FMT_YUV420P, >> + AV_PIX_FMT_YUV444P, >> + AV_PIX_FMT_NONE >> +}; >> + >> +static int query_formats(AVFilterContext *ctx) >> +{ >> + return ff_set_common_formats(ctx, ff_make_format_list(pix_fmts)); >> +} > > why not use FILTER_PIXFMTS ? > > >> + >> static int config_props(AVFilterLink *inlink) >> { >> AVFilterContext *ctx = inlink->dst; >> @@ -122,13 +136,16 @@ static int config_props(AVFilterLink *inlink) >> mcdeint->enc_ctx = avcodec_alloc_context3(enc); >> if (!mcdeint->enc_ctx) >> return AVERROR(ENOMEM); >> + mcdeint->pix_fmt_desc = av_pix_fmt_desc_get(inlink->format); >> + if (!mcdeint->pix_fmt_desc) >> + return AVERROR(ENOMEM); >> enc_ctx = mcdeint->enc_ctx; >> enc_ctx->width = inlink->w; >> enc_ctx->height = inlink->h; >> enc_ctx->time_base = (AVRational){1,25}; // meaningless >> enc_ctx->gop_size = INT_MAX; >> enc_ctx->max_b_frames = 0; >> - enc_ctx->pix_fmt = AV_PIX_FMT_YUV420P; >> + enc_ctx->pix_fmt = inlink->format; >> enc_ctx->flags = AV_CODEC_FLAG_QSCALE | AV_CODEC_FLAG_LOW_DELAY | >> AV_CODEC_FLAG_RECON_FRAME; >> enc_ctx->strict_std_compliance = FF_COMPLIANCE_EXPERIMENTAL; >> enc_ctx->global_quality = 1; >> @@ -201,8 +218,14 @@ static int filter_frame(AVFilterLink *inlink, AVFrame >> *inpic) >> >> for (i = 0; i < 3; i++) { >> int is_chroma = !!i; >> - int w = AV_CEIL_RSHIFT(inlink->w, is_chroma); >> - int h = AV_CEIL_RSHIFT(inlink->h, is_chroma); >> + int w, h; >> + if (is_chroma) { >> + w = inlink->w >> mcdeint->pix_fmt_desc->log2_chroma_w; >> + h = inlink->h >> mcdeint->pix_fmt_desc->log2_chroma_h; >> + } else { >> + w = inlink->w; >> + h = inlink->h; >> + } >> int fils = frame_dec->linesize[i]; >> int srcs = inpic ->linesize[i]; >> int dsts = outpic ->linesize[i]; > > pix_fmt_desc could be a local variable in filter_frame() > which would avoid adding it to the context > > > thx > > [...] > Here is the patch updated with your suggestions (also attached): Signed-off-by: Ethan Halsall --- libavfilter/vf_mcdeint.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/libavfilter/vf_mcdeint.c b/libavfilter/vf_mcdeint.c index 82048b51d0..33df331e08 100644 --- a/libavfilter/vf_mcdeint.c +++ b/libavfilter/vf_mcdeint.c @@ -51,6 +51,7 @@ #include "libavutil/opt.h" #include "libavcodec/avcodec.h" +#include "libavutil/pixdesc.h" #include "avfilter.h" #include "filters.h" #include "video.h" @@ -128,7 +129,7 @@ static int config_props(AVFilterLink *inlink) enc_ctx->time_base = (AVRational){1,25}; // meaningless enc_ctx->gop_size = INT_MAX; enc_ctx->max_b_frames = 0; - enc_ctx->pix_fmt = AV_PIX_FMT_YUV420P; + enc_ctx->pix_fmt = inlink->format; enc_ctx->flags = AV_CODEC_FLAG_QSCALE | AV_CODEC_FLAG_LOW_DELAY | AV_CODEC_FLAG_RECON_FRAME; enc_ctx->strict_std_compliance = FF_COMPLIANCE_EXPERIMENTAL; enc_ctx->global_quality = 1; @@ -172,6 +173,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *inpic) AVFilterLink *outlink = inlink->dst->outputs[0]; AVFrame *outpic, *frame_dec = mcdeint->frame_dec; AVPacket *pkt = mcdeint->pkt; + const AVPixFmtDescriptor *pix_fmt_desc = av_pix_fmt_desc_get(inlink->format); int x, y, i, ret; outpic = ff_get_video_buffer(outlink, outlink->w, outlink->h); @@ -201,8 +203,14 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *inpic) for (i = 0; i < 3; i++) { int is_chroma = !!i; - int w = AV_CEIL_RSHIFT(inlink->w, is_chroma); - int h = AV_CEIL_RSHIFT(inlink->h, is_chroma); + int w, h; + if (is_chroma) { + w = inlink->w >> pix_fmt_desc->log2_chroma_w; + h = inlink->h >> pix_fmt_desc->log2_chroma_h; + } else { + w = inlink->w; + h = inlink->h; + } int fils = frame_dec->linesize[i]; int srcs = inpic ->linesize[i]; int dsts = outpic ->linesize[i]; @@ -307,5 +315,5 @@ const FFFilter ff_vf_mcdeint = { .uninit = uninit, FILTER_INPUTS(mcdeint_inputs), FILTER_OUTPUTS(ff_video_default_filterpad), - FILTER_SINGLE_PIXFMT(AV_PIX_FMT_YUV420P), + FILTER_PIXFMTS(AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV444P) }; -- 2.43.0 Ethan --------------3bkP4YHY6gb2kgsdLW0OYhye Content-Type: text/x-patch; charset=UTF-8; name="0001-add-yuv444p-support-to-mcdeint.patch" Content-Disposition: attachment; filename="0001-add-yuv444p-support-to-mcdeint.patch" Content-Transfer-Encoding: base64 RnJvbSBmZmM0MmYwZGI1MjMyYzVkNDNjNWU2N2UzN2IzM2EyMjEzNmM0NGJjIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBFdGhhbiBIYWxzYWxsIDxldGhhbmhhbHNhbGwxMUBh dWd1c3RhbmEuZWR1PgpEYXRlOiBTdW4sIDI1IE1heSAyMDI1IDAwOjUxOjA1IC0wNTAwClN1 YmplY3Q6IFtQQVRDSF0gYWRkIHl1djQ0NHAgc3VwcG9ydCB0byBtY2RlaW50CgpTaWduZWQt b2ZmLWJ5OiBFdGhhbiBIYWxzYWxsIDxldGhhbmhhbHNhbGwxMUBhdWd1c3RhbmEuZWR1Pgot LS0KIGxpYmF2ZmlsdGVyL3ZmX21jZGVpbnQuYyB8IDE2ICsrKysrKysrKysrKy0tLS0KIDEg ZmlsZSBjaGFuZ2VkLCAxMiBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQoKZGlmZiAt LWdpdCBhL2xpYmF2ZmlsdGVyL3ZmX21jZGVpbnQuYyBiL2xpYmF2ZmlsdGVyL3ZmX21jZGVp bnQuYwppbmRleCA4MjA0OGI1MWQwLi4zM2RmMzMxZTA4IDEwMDY0NAotLS0gYS9saWJhdmZp bHRlci92Zl9tY2RlaW50LmMKKysrIGIvbGliYXZmaWx0ZXIvdmZfbWNkZWludC5jCkBAIC01 MSw2ICs1MSw3IEBACiAKICNpbmNsdWRlICJsaWJhdnV0aWwvb3B0LmgiCiAjaW5jbHVkZSAi bGliYXZjb2RlYy9hdmNvZGVjLmgiCisjaW5jbHVkZSAibGliYXZ1dGlsL3BpeGRlc2MuaCIK ICNpbmNsdWRlICJhdmZpbHRlci5oIgogI2luY2x1ZGUgImZpbHRlcnMuaCIKICNpbmNsdWRl ICJ2aWRlby5oIgpAQCAtMTI4LDcgKzEyOSw3IEBAIHN0YXRpYyBpbnQgY29uZmlnX3Byb3Bz KEFWRmlsdGVyTGluayAqaW5saW5rKQogICAgIGVuY19jdHgtPnRpbWVfYmFzZSA9IChBVlJh dGlvbmFsKXsxLDI1fTsgIC8vIG1lYW5pbmdsZXNzCiAgICAgZW5jX2N0eC0+Z29wX3NpemUg PSBJTlRfTUFYOwogICAgIGVuY19jdHgtPm1heF9iX2ZyYW1lcyA9IDA7Ci0gICAgZW5jX2N0 eC0+cGl4X2ZtdCA9IEFWX1BJWF9GTVRfWVVWNDIwUDsKKyAgICBlbmNfY3R4LT5waXhfZm10 ID0gaW5saW5rLT5mb3JtYXQ7CiAgICAgZW5jX2N0eC0+ZmxhZ3MgPSBBVl9DT0RFQ19GTEFH X1FTQ0FMRSB8IEFWX0NPREVDX0ZMQUdfTE9XX0RFTEFZIHwgQVZfQ09ERUNfRkxBR19SRUNP Tl9GUkFNRTsKICAgICBlbmNfY3R4LT5zdHJpY3Rfc3RkX2NvbXBsaWFuY2UgPSBGRl9DT01Q TElBTkNFX0VYUEVSSU1FTlRBTDsKICAgICBlbmNfY3R4LT5nbG9iYWxfcXVhbGl0eSA9IDE7 CkBAIC0xNzIsNiArMTczLDcgQEAgc3RhdGljIGludCBmaWx0ZXJfZnJhbWUoQVZGaWx0ZXJM aW5rICppbmxpbmssIEFWRnJhbWUgKmlucGljKQogICAgIEFWRmlsdGVyTGluayAqb3V0bGlu ayA9IGlubGluay0+ZHN0LT5vdXRwdXRzWzBdOwogICAgIEFWRnJhbWUgKm91dHBpYywgKmZy YW1lX2RlYyA9IG1jZGVpbnQtPmZyYW1lX2RlYzsKICAgICBBVlBhY2tldCAqcGt0ID0gbWNk ZWludC0+cGt0OworICAgIGNvbnN0IEFWUGl4Rm10RGVzY3JpcHRvciAqcGl4X2ZtdF9kZXNj ID0gYXZfcGl4X2ZtdF9kZXNjX2dldChpbmxpbmstPmZvcm1hdCk7CiAgICAgaW50IHgsIHks IGksIHJldDsKIAogICAgIG91dHBpYyA9IGZmX2dldF92aWRlb19idWZmZXIob3V0bGluaywg b3V0bGluay0+dywgb3V0bGluay0+aCk7CkBAIC0yMDEsOCArMjAzLDE0IEBAIHN0YXRpYyBp bnQgZmlsdGVyX2ZyYW1lKEFWRmlsdGVyTGluayAqaW5saW5rLCBBVkZyYW1lICppbnBpYykK IAogICAgIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKICAgICAgICAgaW50IGlzX2Nocm9t YSA9ICEhaTsKLSAgICAgICAgaW50IHcgPSBBVl9DRUlMX1JTSElGVChpbmxpbmstPncsIGlz X2Nocm9tYSk7Ci0gICAgICAgIGludCBoID0gQVZfQ0VJTF9SU0hJRlQoaW5saW5rLT5oLCBp c19jaHJvbWEpOworICAgICAgICBpbnQgdywgaDsKKyAgICAgICAgaWYgKGlzX2Nocm9tYSkg eworICAgICAgICAgICAgdyA9IGlubGluay0+dyA+PiBwaXhfZm10X2Rlc2MtPmxvZzJfY2hy b21hX3c7CisgICAgICAgICAgICBoID0gaW5saW5rLT5oID4+IHBpeF9mbXRfZGVzYy0+bG9n Ml9jaHJvbWFfaDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHcgPSBpbmxpbmst Pnc7CisgICAgICAgICAgICBoID0gaW5saW5rLT5oOworICAgICAgICB9CiAgICAgICAgIGlu dCBmaWxzID0gZnJhbWVfZGVjLT5saW5lc2l6ZVtpXTsKICAgICAgICAgaW50IHNyY3MgPSBp bnBpYyAgICAtPmxpbmVzaXplW2ldOwogICAgICAgICBpbnQgZHN0cyA9IG91dHBpYyAgIC0+ bGluZXNpemVbaV07CkBAIC0zMDcsNSArMzE1LDUgQEAgY29uc3QgRkZGaWx0ZXIgZmZfdmZf bWNkZWludCA9IHsKICAgICAudW5pbml0ICAgICAgICA9IHVuaW5pdCwKICAgICBGSUxURVJf SU5QVVRTKG1jZGVpbnRfaW5wdXRzKSwKICAgICBGSUxURVJfT1VUUFVUUyhmZl92aWRlb19k ZWZhdWx0X2ZpbHRlcnBhZCksCi0gICAgRklMVEVSX1NJTkdMRV9QSVhGTVQoQVZfUElYX0ZN VF9ZVVY0MjBQKSwKKyAgICBGSUxURVJfUElYRk1UUyhBVl9QSVhfRk1UX1lVVjQyMFAsIEFW X1BJWF9GTVRfWVVWNDQ0UCkKIH07Ci0tIAoyLjQzLjAKCg== --------------3bkP4YHY6gb2kgsdLW0OYhye Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ 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". --------------3bkP4YHY6gb2kgsdLW0OYhye--