From patchwork Fri Apr 5 18:57:20 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 47869 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:24a8:b0:1a3:b6bb:3029 with SMTP id m40csp1158094pzd; Fri, 5 Apr 2024 11:58:55 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCUS1XISoO9xgWYrD6Tyn1d9jG0rMmXlyYbbbFsyph5ubN4NmB7ri2si9fiBKtZ4ucYR5ngAbksD4zLg8CbQFDt95DZzFDKy8wZIOQ== X-Google-Smtp-Source: AGHT+IFFvBKeC6apxX9HTn25LYIqdiQc3FmvUB0yRm8BAlN4udpgb8ka4Ty2e4VvDUuCjJkGyFsb X-Received: by 2002:a05:6512:36c9:b0:516:9f03:6a9e with SMTP id e9-20020a05651236c900b005169f036a9emr1306674lfs.2.1712343535479; Fri, 05 Apr 2024 11:58:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1712343535; cv=none; d=google.com; s=arc-20160816; b=dDvzcYSo8cLVuAw02/0N+IQeVvw31fehH+k5NqufHvWbNXCR9yoRAuz4UA9k2EbLh3 fAlMyXXg9cTpjU09DaEs3UwHh2QSQfxvtlt8n7BiX5hdddfuLg1Z755kO/bYIGRMWHm/ gyBocFBJSq4pu0NkqIQKqCBa21ni5OyV9/rHSlI2hBUXZFbgQ86KnYGvJXGzq/o+pIpl AikjFJyMfEDsdnjYERamckdVCjIYxOQ+Fo0AwjbdDHt/yIx/fh1zi0Y/CMKNhFf0QbNZ pVvjW+VadNymliBZ0SmHQfx4TVx9cs+o//hNr5F0JFHd0/NI7oc2d6eKvGntvUBJRd/R UeUw== 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=Ck85+/MGx1mm+ZQo+6yU1l/iayFetRbq23IXzKDLlEE=; fh=xmAeKtysnShNOmkhiJmYkS30uw4Fu2hvBJ7qlIwukxQ=; b=JMBMAvUJxP+CbuGWSqVsRevhpMBUQhRjOsQqeHygAf2ztkQrKwWpZCpEoXDvC5na5n nRqkKG0TmTUAn1hRB6eKvPVlQZDEyL+TKLhGHf421IMabD0hc+NqBFFW4mkqLh8MOpZc pgGeW7da2GKZMpmFWdlgsW0Jdx0kHI8HBGLPPp/dDvszaK9N1ANsuU9E+F/6512GmBJt 3wh9RPKgwboIlZk3eQqCFxCsGWQ/VmqUYjgVSHKo9vzaiOzjTpN3dx4l6Ie7ddo13lD4 YDfpE6/Ah1q02K9Lmvn8WL1Ay7wTnVlmFSR1Ne7nNFgRiPeRkfvrtDZgg5/ple+U5VkB 14Pg==; 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="A+/jhcvM"; 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 d8-20020a17090648c800b00a474dc7185csi938291ejt.538.2024.04.05.11.58.55; Fri, 05 Apr 2024 11:58:55 -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="A+/jhcvM"; 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 B031468D215; Fri, 5 Apr 2024 21:57:42 +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 B9F4B68D1C4 for ; Fri, 5 Apr 2024 21:57:31 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1712343447; bh=5smtYd2WTdYZO407xvqR3MGUUNXFLcaSGKDlLqe3cwA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=A+/jhcvMxmADobuTbto83WAwjc2A6bEfHmDEhu8o2rR/CHZMsDSkKz4k3BnOYaaZ1 mGhieCRjFyVZyoiq3qFifkXcX4Nt8E04//EOFZip5bqhsmjFKXIZMgwMmlPVsvmDHr plFfeLcdIJGqZQ+Rjx4Rdj97o+avy9ilhA8Fdoxw= Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id D43E044480; Fri, 5 Apr 2024 20:57:27 +0200 (CEST) From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Fri, 5 Apr 2024 20:57:20 +0200 Message-ID: <20240405185721.111072-10-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240405185721.111072-1-ffmpeg@haasn.xyz> References: <20240405185721.111072-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 10/11] fftools/ffmpeg_mux_init: switch to avcodec_get_supported_config() 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: po9xGE+CNnJE From: Niklas Haas --- fftools/ffmpeg_mux_init.c | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/fftools/ffmpeg_mux_init.c b/fftools/ffmpeg_mux_init.c index d3d7d022ff6..508c4f7a697 100644 --- a/fftools/ffmpeg_mux_init.c +++ b/fftools/ffmpeg_mux_init.c @@ -511,13 +511,19 @@ static int fmt_in_list(const int *formats, int format) } static enum AVPixelFormat -choose_pixel_fmt(const AVCodec *codec, enum AVPixelFormat target) +choose_pixel_fmt(const AVCodecContext *avctx, enum AVPixelFormat target) { - const enum AVPixelFormat *p = codec->pix_fmts; + const enum AVPixelFormat *p; const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(target); //FIXME: This should check for AV_PIX_FMT_FLAG_ALPHA after PAL8 pixel format without alpha is implemented int has_alpha = desc ? desc->nb_components % 2 == 0 : 0; enum AVPixelFormat best= AV_PIX_FMT_NONE; + int ret; + + ret = avcodec_get_supported_config(avctx, NULL, AV_CODEC_CONFIG_PIX_FORMAT, + 0, (const void **) &p); + if (ret < 0) + return AV_PIX_FMT_NONE; for (; *p != AV_PIX_FMT_NONE; p++) { best = av_find_best_pix_fmt_of_2(best, *p, target, has_alpha, NULL); @@ -529,7 +535,7 @@ choose_pixel_fmt(const AVCodec *codec, enum AVPixelFormat target) av_log(NULL, AV_LOG_WARNING, "Incompatible pixel format '%s' for codec '%s', auto-selecting format '%s'\n", av_get_pix_fmt_name(target), - codec->name, + avctx->codec->name, av_get_pix_fmt_name(best)); return best; } @@ -538,8 +544,9 @@ choose_pixel_fmt(const AVCodec *codec, enum AVPixelFormat target) static enum AVPixelFormat pix_fmt_parse(OutputStream *ost, const char *name) { - const enum AVPixelFormat *fmts = ost->enc_ctx->codec->pix_fmts; + const enum AVPixelFormat *fmts;// = ost->enc_ctx->codec->pix_fmts; enum AVPixelFormat fmt; + int ret; fmt = av_get_pix_fmt(name); if (fmt == AV_PIX_FMT_NONE) { @@ -547,6 +554,11 @@ static enum AVPixelFormat pix_fmt_parse(OutputStream *ost, const char *name) return AV_PIX_FMT_NONE; } + ret = avcodec_get_supported_config(ost->enc_ctx, NULL, AV_CODEC_CONFIG_PIX_FORMAT, + 0, (const void **) fmts); + if (ret < 0) + return AV_PIX_FMT_NONE; + /* when the user specified-format is an alias for an endianness-specific * one (e.g. rgb48 -> rgb48be/le), it gets translated into the native * endianness by av_get_pix_fmt(); @@ -574,7 +586,7 @@ static enum AVPixelFormat pix_fmt_parse(OutputStream *ost, const char *name) } if (fmts && !fmt_in_list(fmts, fmt)) - fmt = choose_pixel_fmt(ost->enc_ctx->codec, fmt); + fmt = choose_pixel_fmt(ost->enc_ctx, fmt); return fmt; }