From patchwork Mon Sep 23 15:01:42 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 51763 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:d154:0:b0:48e:c0f8:d0de with SMTP id bt20csp2523265vqb; Mon, 23 Sep 2024 08:09:39 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCWDtE2ifzn2QzTyguw62G8QAa0v/uN1wrLhE7ciTr+4ftBVSyzGbdr4BoTa9LykTbTBZ0Art84xr8NC397dSH9t@gmail.com X-Google-Smtp-Source: AGHT+IGN/o+stxOS9MiRxKQ6lEs33Kd7EQESaTrb9D7vInCRB/9gHC4dHiyQfdawBPRa/4dg0zhC X-Received: by 2002:a05:6512:e93:b0:531:5b03:b1f7 with SMTP id 2adb3069b0e04-536a563658dmr5444203e87.10.1727104178914; Mon, 23 Sep 2024 08:09:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1727104178; cv=none; d=google.com; s=arc-20240605; b=VCKMcG/cGcm7PmvxZ30tKKnQc+XoF9Nx2rIzhRU8/d3IkWrOYVJaCBcrXuDa8XP7GT hsxqGh03PjiIDSdg9xPnV291sbPkt3inwUxS07iIBbwU6YN0j/xF9OaW+9GIFIvnfRC8 IR90FXyVwyJDnyeLLlEqLwBeAbQQ9UJ5v52Us9KICNPbqhVyctFsGglgtnv0aMIX0qhh kjF0082cq68ApBbzNAh9Ymi39QjgUxpo/zSxeyvr/8efQMMMzh//riGK6qorI9GeXfDQ w07rtiCtIfaxnpnXBBlbx7l52IGl5w2Rkl9dQ8Y7718OTl7+qZwJRD45JYw8rvv5Kpf7 RXCQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=sender:errors-to:content-transfer-encoding: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=TaCR1MkqGMaBwAunUbmzklippLS84apDTFdAqHfizfo=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=cuyMIHDn1pPD0Cl0RREzD8P95QmHr1oeBIj+EIVyhRufSX5oj0TkaJEgi4YCJKnNIk gbFick21ACij5SyXuBsdJRNIEtUFKteDCs4DmqxgY6DpPEhgfbhLkizP0lIfGz9kNctF lwknKM9Bo5asdsZkipeNyiS4pCRYIOi57xXRZs9ILaNND0W7sOYdRGi0/nZFbhwD4KSf PUNhNCgxeDVf7SWRX3OeQ+BC0XIb3MTt+NDV4Cls7tcdzpMNEK7gONBbAjsuY04XKGdj /JgHypiTEnSFCgWVe9qgFmDgUgZMJkng6jMArN0/YSiQuIqEGCra18DeoNr50wC2pk4m 2/cw==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@khirnov.net header.s=mail header.b=QvmTmNPP; 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 2adb3069b0e04-5368708df2dsi7227822e87.325.2024.09.23.08.09.38; Mon, 23 Sep 2024 08:09:38 -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=@khirnov.net header.s=mail header.b=QvmTmNPP; 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 E9DC068DC2C; Mon, 23 Sep 2024 18:02:14 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail1.khirnov.net (quelana.khirnov.net [94.230.150.81]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8570F68DB6A for ; Mon, 23 Sep 2024 18:02:06 +0300 (EEST) Authentication-Results: mail1.khirnov.net; dkim=pass (2048-bit key; unprotected) header.d=khirnov.net header.i=@khirnov.net header.a=rsa-sha256 header.s=mail header.b=QvmTmNPP; dkim-atps=neutral Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id 24C924DD7 for ; Mon, 23 Sep 2024 17:02:06 +0200 (CEST) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id jUcmrxo2u2PH for ; Mon, 23 Sep 2024 17:02:05 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=khirnov.net; s=mail; t=1727103724; bh=G2iGT2Cn4hIUPQ7wv/BFs8lycynHp9MedLTFiz0JOcY=; h=From:To:Subject:Date:In-Reply-To:References:From; b=QvmTmNPPCJP4AVyExEkXmiOExcUHtBgzNESipfUAySCZgLUf2t2fmpk6kozRWO42i jiB2P6+a8tBSF7x3s2zK9TYqqrU6CdrXf495TxQNEiD8QTZG8iM3TzrBoMntSDmgaS go26QA4UnSQcIB/8mNS/LD/CUIjoAV32/HJivK+ZG6uXzUUPWcmzb+ndhRGOcCASQZ D4RMvO+xWeE0cYMt2GBsjqokkweXiUMA9804yIXnkU5asEPDrssP/b3sd1ud98HFqv XQaq5Jen0y0t2iccscCmqVA/BiCiuj8USG/gSYS/1vfeAuk4sW5evTns+liGEUSAvM f51MKAm/7V03Q== Received: from libav.khirnov.net (libav.khirnov.net [IPv6:2a00:c500:561:201::7]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "libav.khirnov.net", Issuer "smtp.khirnov.net SMTP CA" (verified OK)) by mail1.khirnov.net (Postfix) with ESMTPS id 6ADA94DF1 for ; Mon, 23 Sep 2024 17:02:04 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 544033A0F02 for ; Mon, 23 Sep 2024 17:02:04 +0200 (CEST) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Mon, 23 Sep 2024 17:01:42 +0200 Message-ID: <20240923150146.31693-4-anton@khirnov.net> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240923150146.31693-1-anton@khirnov.net> References: <20240923150146.31693-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 4/7] lavd/lavfi: use AV_BUFFERSINK_FLAG_PARAMS 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" X-TUID: IN25DacYHERG --- libavdevice/lavfi.c | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/libavdevice/lavfi.c b/libavdevice/lavfi.c index 3b77a7396a..ef7d1fef1a 100644 --- a/libavdevice/lavfi.c +++ b/libavdevice/lavfi.c @@ -102,6 +102,7 @@ av_cold static int lavfi_read_header(AVFormatContext *avctx) LavfiContext *lavfi = avctx->priv_data; AVFilterInOut *input_links = NULL, *output_links = NULL, *inout; const AVFilter *buffersink, *abuffersink; + AVFrame *params = NULL; enum AVMediaType type; int ret = 0, i, n; @@ -287,33 +288,39 @@ av_cold static int lavfi_read_header(AVFormatContext *avctx) } } + params = av_frame_alloc(); + if (!params) + FAIL(AVERROR(ENOMEM)); + /* fill each stream with the information in the corresponding sink */ for (i = 0; i < lavfi->nb_sinks; i++) { AVFilterContext *sink = lavfi->sinks[lavfi->stream_sink_map[i]]; - AVRational time_base = av_buffersink_get_time_base(sink); AVRational frame_rate = av_buffersink_get_frame_rate(sink); AVStream *st = avctx->streams[i]; AVCodecParameters *const par = st->codecpar; - avpriv_set_pts_info(st, 64, time_base.num, time_base.den); + + av_frame_unref(params); + ret = av_buffersink_get_frame_flags(sink, params, AV_BUFFERSINK_FLAG_PARAMS); + if (ret < 0) + goto end; + + avpriv_set_pts_info(st, 64, params->time_base.num, params->time_base.den); par->codec_type = av_buffersink_get_type(sink); + par->format = params->format; if (par->codec_type == AVMEDIA_TYPE_VIDEO) { par->codec_id = AV_CODEC_ID_WRAPPED_AVFRAME; - par->format = av_buffersink_get_format(sink); - par->width = av_buffersink_get_w(sink); - par->height = av_buffersink_get_h(sink); + par->width = params->width; + par->height = params->height; avctx->probesize = FFMAX(avctx->probesize, sizeof(AVFrame) * 30); st ->sample_aspect_ratio = - par->sample_aspect_ratio = av_buffersink_get_sample_aspect_ratio(sink); + par->sample_aspect_ratio = params->sample_aspect_ratio; if (frame_rate.num > 0 && frame_rate.den > 0) { st->avg_frame_rate = frame_rate; st->r_frame_rate = frame_rate; } } else if (par->codec_type == AVMEDIA_TYPE_AUDIO) { - par->sample_rate = av_buffersink_get_sample_rate(sink); - ret = av_buffersink_get_ch_layout(sink, &par->ch_layout); - if (ret < 0) - goto end; - par->format = av_buffersink_get_format(sink); + par->sample_rate = params->sample_rate; + FFSWAP(AVChannelLayout, par->ch_layout, params->ch_layout); par->codec_id = av_get_pcm_codec(par->format, -1); if (par->codec_id == AV_CODEC_ID_NONE) av_log(avctx, AV_LOG_ERROR, @@ -326,6 +333,7 @@ av_cold static int lavfi_read_header(AVFormatContext *avctx) goto end; end: + av_frame_free(¶ms); avfilter_inout_free(&input_links); avfilter_inout_free(&output_links); return ret;