From patchwork Mon Apr 8 12:57:18 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 47921 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:24a8:b0:1a3:b6bb:3029 with SMTP id m40csp2456415pzd; Mon, 8 Apr 2024 06:01:48 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCUa27ISOXSR1khZCDZbbutSjM236OYoFpYhXw8TB734FT9qTKIFeZnsYV7EhXB+JE3khZEpAQ5/xd/l3+LtAuN5Bbx76BbUbULEGA== X-Google-Smtp-Source: AGHT+IHYy5mXDvLd5QMDXum3Vsl8eOS7Is5yOmO1TjHwUsIkApg83YEcah9ruu9Oo7tExLOk9k5m X-Received: by 2002:a2e:240e:0:b0:2d8:2762:54de with SMTP id k14-20020a2e240e000000b002d8276254demr6281704ljk.14.1712581307854; Mon, 08 Apr 2024 06:01:47 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1712581307; cv=none; d=google.com; s=arc-20160816; b=KwwhnHj9TMJbllnd+ZAHHTII+SyyqyZf7ieVH/BiDojnlCi3O2mqQKkez57G6yaTJI 8xhde8M7cw/and1aPtmJyYYOlU5oygofQv2AB4qyokqfM96NSUjNafP/w1/Z4OhKjG3q pWCb60ILNNiNfaN3FTEmRuDF/SxRc5gIboXfYN9K7he7JqsvLbsmsgaRCmn25OOP/NQT wFlxJZ+Orjav7COqza56fBzlKvBT6CMwov6BnYCA0qMQVb/C0QhKQyjLf+ig5/scwz1E tzUV5U6tkRdPHHzDoRcY1J9Qu/HTWW28YlfJ6fpY2mCJep8GgqrdFXzwOfJMRuIhU49S fF/g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=CTY968wK0iqc5boCsjFZNwoUI/YXNNDKdX9Ws7t+arw=; fh=xmAeKtysnShNOmkhiJmYkS30uw4Fu2hvBJ7qlIwukxQ=; b=TbweYl0jd7DsNmPjhF5k4sfUFjbZLC3axBTVhhmh6wV26OW1pTWz7KxvY6ZouWnpZ4 buas+3AuWanA9NgZ/gk+lvVCXnUdc5mTy8TLvosOCyhr3dm1TSMm0dkrXQdZlkCxDUaf ZwNueSjXXd9eQeLWgzkjH41iv1ccZ51+zVRQiDQ8cTJo0vM/zI80NsxgbNTnkxvqKrdj CVjnSKsn8iP3+SX+zulWNJSBig+uys0J0OaedaGbKcCTMk0YuVIV7twD59VVBcsXriLt mvaUFGw1GTG0AdvlaCoDfL+1+eLHo1uAZkYxhXkdnP8tVU0iEvuBDarSZpA3CUtWsz57 HYlw==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b="LJMt/peI"; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id y35-20020a2ebba3000000b002d865b3af26si2145926lje.62.2024.04.08.06.01.45; Mon, 08 Apr 2024 06:01:47 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b="LJMt/peI"; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 9056D68D2C1; Mon, 8 Apr 2024 16:00:09 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from haasn.dev (haasn.dev [78.46.187.166]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id C389568D202 for ; Mon, 8 Apr 2024 15:59:58 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1712581195; bh=qwN5x5QoeLfzfJwSiyKcy1rJxmDae3Rb7VZ8GwF1V7E=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=LJMt/peIfayZ/GplD6urRy96+aV4xBVFbzwGSSUi8KP4qTql4hlYHL+G3etBPU+Fo UVacNHlmWcgbL7TDFZvS/M8PrVSZUVFrqnh7nX2ZzKKxzMl5dNxWBHvAR39GbcsnxH J9hcHO5KW23BPu2E8DeRXnyZ0RefYhCAxjKP4GMA= Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 7048E47957; Mon, 8 Apr 2024 14:59:55 +0200 (CEST) From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Mon, 8 Apr 2024 14:57:18 +0200 Message-ID: <20240408125950.53472-15-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240408125950.53472-1-ffmpeg@haasn.xyz> References: <20240408125950.53472-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 14/17] fftools/ffmpeg_filter: simplify choose_pix_fmts 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 Cc: Niklas Haas Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 6FMHx7tiLaAL From: Niklas Haas The only meaningful difference between choose_pix_fmts and the default code was the inclusion of an extra branch for `keep_pix_fmt` being true. However, in this case, we either: 1. Force the specific `ofp->format` that we inherited from ofilter_bind_ost, or if no format was set: 2. Print an empty format list Both of these goals can be accomplished by simply moving the decision logic to ofilter_bind_ost, to avoid setting any format list when keep_pix_fmt is enabled. This is arguably cleaner as it moves format selection logic to a single function. In the case of branch 1, nothing else needs to be done as we already force the format provided in ofp->format, if any is set. Add an assertion to verify this assumption just in case. (Side note: The "choose_*" family of functions are arguably misnomers, as they should really be called "print_*" - their current behavior is to print the relevant format lists to the `vf/af_format` filter arguments) --- fftools/ffmpeg_filter.c | 49 ++++++++--------------------------------- 1 file changed, 9 insertions(+), 40 deletions(-) diff --git a/fftools/ffmpeg_filter.c b/fftools/ffmpeg_filter.c index 9ff064f5f68..945147d6ca1 100644 --- a/fftools/ffmpeg_filter.c +++ b/fftools/ffmpeg_filter.c @@ -348,36 +348,6 @@ static void sub2video_update(InputFilterPriv *ifp, int64_t heartbeat_pts, ifp->sub2video.initialize = 0; } -/* *dst may return be set to NULL (no pixel format found), a static string or a - * string backed by the bprint. Nothing has been written to the AVBPrint in case - * NULL is returned. The AVBPrint provided should be clean. */ -static int choose_pix_fmts(OutputFilter *ofilter, AVBPrint *bprint, - const char **dst) -{ - OutputFilterPriv *ofp = ofp_from_ofilter(ofilter); - OutputStream *ost = ofilter->ost; - - *dst = NULL; - - if (ost->keep_pix_fmt || ofp->format != AV_PIX_FMT_NONE) { - *dst = ofp->format == AV_PIX_FMT_NONE ? NULL : - av_get_pix_fmt_name(ofp->format); - } else if (ofp->formats) { - const enum AVPixelFormat *p = ofp->formats; - - for (; *p != AV_PIX_FMT_NONE; p++) { - const char *name = av_get_pix_fmt_name(*p); - av_bprintf(bprint, "%s%c", name, p[1] == AV_PIX_FMT_NONE ? '\0' : '|'); - } - if (!av_bprint_is_complete(bprint)) - return AVERROR(ENOMEM); - - *dst = bprint->str; - } - - return 0; -} - /* Define a function for appending a list of allowed formats * to an AVBPrint. If nonempty, the list will have a header. */ #define DEF_CHOOSE_FORMAT(name, type, var, supported_list, none, printf_format, get_name) \ @@ -400,8 +370,8 @@ static void choose_ ## name (OutputFilterPriv *ofp, AVBPrint *bprint) \ av_bprint_chars(bprint, ':', 1); \ } -//DEF_CHOOSE_FORMAT(pix_fmts, enum AVPixelFormat, format, formats, AV_PIX_FMT_NONE, -// av_get_pix_fmt_name) +DEF_CHOOSE_FORMAT(pix_fmts, enum AVPixelFormat, format, formats, + AV_PIX_FMT_NONE, "%s", av_get_pix_fmt_name) DEF_CHOOSE_FORMAT(sample_fmts, enum AVSampleFormat, format, formats, AV_SAMPLE_FMT_NONE, "%s", av_get_sample_fmt_name) @@ -791,7 +761,7 @@ int ofilter_bind_ost(OutputFilter *ofilter, OutputStream *ost, ofp->height = ost->enc_ctx->height; if (ost->enc_ctx->pix_fmt != AV_PIX_FMT_NONE) { ofp->format = ost->enc_ctx->pix_fmt; - } else { + } else if (!ost->keep_pix_fmt) { ofp->formats = c->pix_fmts; // MJPEG encoder exports a full list of supported pixel formats, @@ -1307,7 +1277,6 @@ static int configure_output_video_filter(FilterGraph *fg, AVFilterGraph *graph, AVBPrint bprint; int pad_idx = out->pad_idx; int ret; - const char *pix_fmts; char name[255]; snprintf(name, sizeof(name), "out_%d_%d", ost->file->index, ost->index); @@ -1342,17 +1311,17 @@ static int configure_output_video_filter(FilterGraph *fg, AVFilterGraph *graph, pad_idx = 0; } + av_assert0(!ost->keep_pix_fmt || (!ofp->format && !ofp->formats)); av_bprint_init(&bprint, 0, AV_BPRINT_SIZE_UNLIMITED); - ret = choose_pix_fmts(ofilter, &bprint, &pix_fmts); - if (ret < 0) - return ret; - - if (pix_fmts) { + choose_pix_fmts(ofp, &bprint); + if (!av_bprint_is_complete(&bprint)) + return AVERROR(ENOMEM); + if (bprint.len) { AVFilterContext *filter; ret = avfilter_graph_create_filter(&filter, avfilter_get_by_name("format"), - "format", pix_fmts, NULL, graph); + "format", bprint.str, NULL, graph); av_bprint_finalize(&bprint, NULL); if (ret < 0) return ret;